2 * Copyright (c) 2015 Inocybe and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
9 package org.opendaylight.ovsdb.openstack.netvirt.impl;
10 import static org.junit.Assert.assertEquals;
11 import static org.mockito.Matchers.any;
12 import static org.mockito.Mockito.mock;
13 import static org.mockito.Mockito.when;
15 import java.lang.reflect.Field;
18 import org.junit.Test;
19 import org.junit.runner.RunWith;
20 import org.mockito.InjectMocks;
21 import org.mockito.Mock;
22 import org.mockito.Spy;
23 import org.opendaylight.ovsdb.openstack.netvirt.NodeCacheManagerEvent;
24 import org.opendaylight.ovsdb.openstack.netvirt.api.Action;
25 import org.opendaylight.ovsdb.openstack.netvirt.api.EventDispatcher;
26 import org.opendaylight.ovsdb.openstack.netvirt.api.NodeCacheListener;
27 import org.opendaylight.ovsdb.openstack.netvirt.api.Southbound;
28 import org.opendaylight.ovsdb.utils.servicehelper.ServiceHelper;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentation;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeAugmentation;
31 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
32 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
34 import org.osgi.framework.ServiceReference;
35 import org.powermock.api.mockito.PowerMockito;
36 import org.powermock.core.classloader.annotations.PrepareForTest;
37 import org.powermock.modules.junit4.PowerMockRunner;
39 import com.google.common.collect.Maps;
42 * Unit test for {@link NodeCacheManagerImpl}
44 @RunWith(PowerMockRunner.class)
45 @PrepareForTest(ServiceHelper.class)
46 public class NodeCacheManagerImplTest {
48 @InjectMocks private NodeCacheManagerImpl nodeCacheManagerImpl;
49 @Spy private Map<Long, NodeCacheListener> handlers = Maps.newHashMap();
51 @Mock private Southbound southbound;
54 public void testProcessEvent() {
55 NodeCacheManagerEvent ev = mock(NodeCacheManagerEvent.class);
56 Node node = mock(Node.class);
57 when(node.getNodeId()).thenReturn(mock(NodeId.class));
58 when(ev.getNode()).thenReturn(node);
60 when(ev.getAction()).thenReturn(Action.UPDATE);
61 nodeCacheManagerImpl.processEvent(ev);
62 assertEquals("Error, did not delete the event", 1, nodeCacheManagerImpl.getNodes().size());
64 when(ev.getAction()).thenReturn(Action.DELETE);
65 nodeCacheManagerImpl.processEvent(ev);
66 assertEquals("Error, did not delete the event", 0, nodeCacheManagerImpl.getNodes().size());
70 public void testCacheListenerAddedAndRemoved() {
71 ServiceReference ref = mock(ServiceReference.class);
72 when(ref.getProperty(org.osgi.framework.Constants.SERVICE_ID)).thenReturn(Long.valueOf(1));
75 nodeCacheManagerImpl.cacheListenerAdded(ref, mock(NodeCacheListener.class));
76 assertEquals("Error, cacheListenerAdded() did not add any listener", 1, handlers.size());
78 nodeCacheManagerImpl.cacheListenerRemoved(ref);
79 assertEquals("Error, cacheListenerAdded() did not remove any listener", 0, handlers.size());
83 public void testGetOvsdbNodes() {
86 when(southbound.extractOvsdbNode(any(Node.class))).thenReturn(mock(OvsdbNodeAugmentation.class));
88 assertEquals("Error, getOvsdbNodes() did not return the correct value", 1, nodeCacheManagerImpl.getOvsdbNodes().size());
92 public void testGetBridgeNodes() {
95 when(southbound.getBridge(any(Node.class))).thenReturn(mock(OvsdbBridgeAugmentation.class));
97 assertEquals("Error, getBridgeNodes() did not return the correct value", 1, nodeCacheManagerImpl.getBridgeNodes().size());
101 public void testGetNodes() {
104 assertEquals("Error, getNodes() did not return the correct value", 1, nodeCacheManagerImpl.getNodes().size());
107 private void addItem() {
108 NodeCacheManagerEvent ev = mock(NodeCacheManagerEvent.class);
109 Node node = mock(Node.class);
110 when(node.getNodeId()).thenReturn(mock(NodeId.class));
111 when(ev.getNode()).thenReturn(node);
113 when(ev.getAction()).thenReturn(Action.UPDATE);
114 nodeCacheManagerImpl.processEvent(ev);
118 public void testSetDependencies() throws Exception {
119 Southbound southbound = mock(Southbound.class);
120 EventDispatcher eventDispatcher = mock(EventDispatcher.class);
122 PowerMockito.mockStatic(ServiceHelper.class);
123 PowerMockito.when(ServiceHelper.getGlobalInstance(Southbound.class, nodeCacheManagerImpl)).thenReturn(southbound);
124 PowerMockito.when(ServiceHelper.getGlobalInstance(EventDispatcher.class, nodeCacheManagerImpl)).thenReturn(eventDispatcher);
126 nodeCacheManagerImpl.setDependencies(mock(ServiceReference.class));
128 assertEquals("Error, did not return the correct object", getField("southbound"), southbound);
129 assertEquals("Error, did not return the correct object", getSuperField("eventDispatcher"), eventDispatcher);
132 private Object getField(String fieldName) throws Exception {
133 Field field = NodeCacheManagerImpl.class.getDeclaredField(fieldName);
134 field.setAccessible(true);
135 return field.get(nodeCacheManagerImpl);
138 private Object getSuperField(String fieldName) throws Exception {
139 Field field = NodeCacheManagerImpl.class.getSuperclass().getDeclaredField(fieldName);
140 field.setAccessible(true);
141 return field.get(nodeCacheManagerImpl);