Use the memorized service reference
[ovsdb.git] / openstack / net-virt / src / test / java / org / opendaylight / ovsdb / openstack / netvirt / impl / NodeCacheManagerImplTest.java
index 2fcdd5286c25af5bee22fc25e8b4230101249195..95a5ef5b6f20455067d6a7490e0fc268f90e51ab 100644 (file)
@@ -8,21 +8,29 @@
 
 package org.opendaylight.ovsdb.openstack.netvirt.impl;
 import static org.junit.Assert.assertEquals;
-import static org.mockito.Matchers.anyString;
+import static org.mockito.Matchers.any;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
+import java.lang.reflect.Field;
 import java.util.Map;
 
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.InjectMocks;
+import org.mockito.Mock;
 import org.mockito.Spy;
 import org.opendaylight.ovsdb.openstack.netvirt.NodeCacheManagerEvent;
 import org.opendaylight.ovsdb.openstack.netvirt.api.Action;
+import org.opendaylight.ovsdb.openstack.netvirt.api.EventDispatcher;
 import org.opendaylight.ovsdb.openstack.netvirt.api.NodeCacheListener;
-import org.opendaylight.ovsdb.utils.mdsal.node.NodeUtils;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
+import org.opendaylight.ovsdb.openstack.netvirt.api.Southbound;
+import org.opendaylight.ovsdb.utils.servicehelper.ServiceHelper;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentation;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeAugmentation;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
+
 import org.osgi.framework.ServiceReference;
 import org.powermock.api.mockito.PowerMockito;
 import org.powermock.core.classloader.annotations.PrepareForTest;
@@ -34,23 +42,24 @@ import com.google.common.collect.Maps;
  * Unit test for {@link NodeCacheManagerImpl}
  */
 @RunWith(PowerMockRunner.class)
-@PrepareForTest(NodeUtils.class)
+@PrepareForTest(ServiceHelper.class)
 public class NodeCacheManagerImplTest {
 
-    @InjectMocks NodeCacheManagerImpl nodeCacheManagerImpl;
+    @InjectMocks private NodeCacheManagerImpl nodeCacheManagerImpl;
     @Spy private Map<Long, NodeCacheListener> handlers = Maps.newHashMap();
 
+    @Mock private Southbound southbound;
+
     @Test
     public void testProcessEvent() {
         NodeCacheManagerEvent ev = mock(NodeCacheManagerEvent.class);
-        when(ev.getNodeIdentifier()).thenReturn("node_identifier");
+        Node node = mock(Node.class);
+        when(node.getNodeId()).thenReturn(mock(NodeId.class));
+        when(ev.getNode()).thenReturn(node);
 
-        PowerMockito.mockStatic(NodeUtils.class);
-        when(NodeUtils.getOpenFlowNode(anyString())).thenReturn(mock(Node.class));
-
-        when(ev.getAction()).thenReturn(Action.ADD);
+        when(ev.getAction()).thenReturn(Action.UPDATE);
         nodeCacheManagerImpl.processEvent(ev);
-        assertEquals("Error, did not add the event", 1, nodeCacheManagerImpl.getNodes().size());
+        assertEquals("Error, did not delete the event", 1, nodeCacheManagerImpl.getNodes().size());
 
         when(ev.getAction()).thenReturn(Action.DELETE);
         nodeCacheManagerImpl.processEvent(ev);
@@ -69,4 +78,66 @@ public class NodeCacheManagerImplTest {
         nodeCacheManagerImpl.cacheListenerRemoved(ref);
         assertEquals("Error, cacheListenerAdded() did not remove any listener", 0, handlers.size());
     }
+
+    @Test
+    public void testGetOvsdbNodes() {
+        addItem();
+
+        when(southbound.extractOvsdbNode(any(Node.class))).thenReturn(mock(OvsdbNodeAugmentation.class));
+
+        assertEquals("Error, getOvsdbNodes() did not return the correct value", 1, nodeCacheManagerImpl.getOvsdbNodes().size());
+    }
+
+    @Test
+    public void testGetBridgeNodes() {
+        addItem();
+
+        when(southbound.getBridge(any(Node.class))).thenReturn(mock(OvsdbBridgeAugmentation.class));
+
+        assertEquals("Error, getBridgeNodes() did not return the correct value", 1, nodeCacheManagerImpl.getBridgeNodes().size());
+    }
+
+    @Test
+    public void testGetNodes() {
+        addItem();
+
+        assertEquals("Error, getNodes() did not return the correct value", 1, nodeCacheManagerImpl.getNodes().size());
+    }
+
+    private void addItem() {
+        NodeCacheManagerEvent ev = mock(NodeCacheManagerEvent.class);
+        Node node = mock(Node.class);
+        when(node.getNodeId()).thenReturn(mock(NodeId.class));
+        when(ev.getNode()).thenReturn(node);
+
+        when(ev.getAction()).thenReturn(Action.UPDATE);
+        nodeCacheManagerImpl.processEvent(ev);
+    }
+
+    @Test
+    public void testSetDependencies() throws Exception {
+        Southbound southbound = mock(Southbound.class);
+        EventDispatcher eventDispatcher = mock(EventDispatcher.class);
+
+        PowerMockito.mockStatic(ServiceHelper.class);
+        PowerMockito.when(ServiceHelper.getGlobalInstance(Southbound.class, nodeCacheManagerImpl)).thenReturn(southbound);
+        PowerMockito.when(ServiceHelper.getGlobalInstance(EventDispatcher.class, nodeCacheManagerImpl)).thenReturn(eventDispatcher);
+
+        nodeCacheManagerImpl.setDependencies(mock(ServiceReference.class));
+
+        assertEquals("Error, did not return the correct object", getField("southbound"), southbound);
+        assertEquals("Error, did not return the correct object", getSuperField("eventDispatcher"), eventDispatcher);
+    }
+
+    private Object getField(String fieldName) throws Exception {
+        Field field = NodeCacheManagerImpl.class.getDeclaredField(fieldName);
+        field.setAccessible(true);
+        return field.get(nodeCacheManagerImpl);
+    }
+
+    private Object getSuperField(String fieldName) throws Exception {
+        Field field = NodeCacheManagerImpl.class.getSuperclass().getDeclaredField(fieldName);
+        field.setAccessible(true);
+        return field.get(nodeCacheManagerImpl);
+    }
 }