Merge "Unit test for ovsdb.southbound.ovsdb.transact"
[netvirt.git] / openstack / net-virt / src / test / java / org / opendaylight / ovsdb / openstack / netvirt / impl / BridgeConfigurationManagerImplTest.java
index 6ad13384775bd5101c303353848134d0b49d653b..dec0f7358e6e5f2a0ada969bf58375130711da19 100644 (file)
@@ -7,39 +7,45 @@
 */
 package org.opendaylight.ovsdb.openstack.netvirt.impl;
 
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.assertEquals;
 import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyList;
 import static org.mockito.Matchers.anyString;
 import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.RETURNS_MOCKS;
 import static org.mockito.Mockito.doAnswer;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.RETURNS_MOCKS;
 import static org.mockito.Mockito.reset;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.verifyNoMoreInteractions;
 import static org.mockito.Mockito.when;
-import static org.powermock.api.mockito.PowerMockito.mockStatic;
-import static org.powermock.api.mockito.PowerMockito.verifyStatic;
 
+import java.lang.reflect.Field;
 import java.util.List;
-import org.junit.runner.RunWith;
+
 import org.junit.Test;
+import org.junit.runner.RunWith;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
 import org.mockito.invocation.InvocationOnMock;
 import org.mockito.stubbing.Answer;
-import org.opendaylight.neutron.spi.NeutronNetwork;
-import org.opendaylight.ovsdb.openstack.netvirt.MdsalUtils;
+import org.opendaylight.ovsdb.openstack.netvirt.translator.NeutronNetwork;
 import org.opendaylight.ovsdb.openstack.netvirt.api.ConfigurationService;
+import org.opendaylight.ovsdb.openstack.netvirt.api.NetworkingProviderManager;
 import org.opendaylight.ovsdb.openstack.netvirt.api.OvsdbTables;
+import org.opendaylight.ovsdb.openstack.netvirt.api.Southbound;
+import org.opendaylight.ovsdb.utils.config.ConfigProperties;
+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.OvsdbTerminationPointAugmentation;
 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;
 import org.powermock.modules.junit4.PowerMockRunner;
@@ -48,19 +54,21 @@ import org.powermock.modules.junit4.PowerMockRunner;
  * Test class for BridgeConfigurationManagerImpl
  *
  * @author Marcus Koontz
- * @author Alexis Adetalhouet
+ * @author Alexis de Talhouet
  * @author Sam Hague (shague@redhat.com)
  */
 @RunWith(PowerMockRunner.class)
-@PrepareForTest(MdsalUtils.class)
+@PrepareForTest({ServiceHelper.class, ConfigProperties.class})
 public class BridgeConfigurationManagerImplTest {
     @Mock private Node node;
     @Mock private OvsdbBridgeAugmentation bridge;
     @Mock private OvsdbTerminationPointAugmentation port;
     @Mock private NeutronNetwork neutronNetwork;
     @Mock private ConfigurationService configurationService;
+    @Mock private Southbound southbound;
     @InjectMocks public static BridgeConfigurationManagerImpl bridgeConfigurationManagerImpl;
 
+    private static final String ADDRESS = "127.0.0.1";
     private static final String BR_INT = "br-int";
     private static final String ETH1 = "eth1";
     private static final String ETH2 = "eth2";
@@ -75,8 +83,7 @@ public class BridgeConfigurationManagerImplTest {
 
     @Test
     public void testGetBridgeUuid() {
-        mockStatic(MdsalUtils.class);
-        when(MdsalUtils.getBridgeUuid(any(Node.class), anyString()))
+        when(southbound.getBridgeUuid(any(Node.class), anyString()))
                 .thenReturn(null)
                 .thenReturn(BRIDGE_UUID);
 
@@ -84,14 +91,12 @@ public class BridgeConfigurationManagerImplTest {
                 bridgeConfigurationManagerImpl.getBridgeUuid(node, BR_INT));
         assertEquals("Error, did not return UUID of correct bridge", BRIDGE_UUID,
                 bridgeConfigurationManagerImpl.getBridgeUuid(node, BR_INT));
-        verifyStatic(times(2));
-        MdsalUtils.getBridgeUuid(any(Node.class), anyString());
+        verify(southbound, times(2)).getBridgeUuid(any(Node.class), anyString());
     }
 
     @Test
     public void testIsNodeNeutronReady() throws Exception {
-        mockStatic(MdsalUtils.class);
-        when(MdsalUtils.getBridge(any(Node.class), anyString()))
+        when(southbound.getBridge(any(Node.class), anyString()))
                 .thenReturn(null)
                 .thenReturn(bridge);
 
@@ -104,14 +109,12 @@ public class BridgeConfigurationManagerImplTest {
                 bridgeConfigurationManagerImpl.isNodeNeutronReady(node));
 
         verify(configurationService, times(2)).getIntegrationBridgeName();
-        verifyStatic(times(2));
-        MdsalUtils.getBridge(any(Node.class), anyString());
+        verify(southbound, times(2)).getBridge(any(Node.class), anyString());
     }
 
     @Test
     public void testIsNodeOverlayReady() throws Exception {
-        mockStatic(MdsalUtils.class);
-        when(MdsalUtils.getBridge(any(Node.class), anyString()))
+        when(southbound.getBridge(any(Node.class), anyString()))
                 .thenReturn(null)
                 .thenReturn(bridge);
 
@@ -119,6 +122,7 @@ public class BridgeConfigurationManagerImplTest {
                 PowerMockito.spy(new BridgeConfigurationManagerImpl());
         doReturn(false).when(bridgeConfigurationManagerImplSpy).isNodeNeutronReady(any(Node.class));
         bridgeConfigurationManagerImplSpy.setConfigurationService(configurationService);
+        bridgeConfigurationManagerImplSpy.setSouthbound(southbound);
 
         verifyNoMoreInteractions(configurationService);
 
@@ -134,14 +138,12 @@ public class BridgeConfigurationManagerImplTest {
                 bridgeConfigurationManagerImplSpy.isNodeOverlayReady(node));
 
         verify(configurationService, times(2)).getNetworkBridgeName();
-        verifyStatic(times(2));
-        MdsalUtils.getBridge(any(Node.class), anyString());
+        verify(southbound, times(2)).getBridge(any(Node.class), anyString());
     }
 
     @Test
     public void testIsPortOnBridge() throws Exception {
-        mockStatic(MdsalUtils.class);
-        when(MdsalUtils.extractTerminationPointAugmentation(any(Node.class), anyString()))
+        when(southbound.extractTerminationPointAugmentation(any(Node.class), anyString()))
                 .thenReturn(null)
                 .thenReturn(port);
 
@@ -149,38 +151,36 @@ public class BridgeConfigurationManagerImplTest {
                 bridgeConfigurationManagerImpl.isPortOnBridge(node, PORT_BR_INT));
         assertTrue("Error, port " + PORT_BR_INT + " should be found",
                 bridgeConfigurationManagerImpl.isPortOnBridge(node, PORT_BR_INT));
-        verifyStatic(times(2));
-        MdsalUtils.extractTerminationPointAugmentation(any(Node.class), anyString());
+        verify(southbound, times(2)).extractTerminationPointAugmentation(any(Node.class), anyString());
     }
 
     @Test
     public void testIsNodeTunnelReady() throws Exception {
-        mockStatic(MdsalUtils.class);
-        when(MdsalUtils.getBridge(any(Node.class), anyString()))
-                .thenReturn(null)
-                .thenReturn(bridge);
+        when(southbound.isBridgeOnOvsdbNode(any(Node.class), anyString()))
+                .thenReturn(false)
+                .thenReturn(true);
 
         verifyNoMoreInteractions(configurationService);
         assertFalse("Error, did not return correct boolean from isNodeTunnelReady",
-                bridgeConfigurationManagerImpl.isNodeNeutronReady(node));
+                bridgeConfigurationManagerImpl.isNodeTunnelReady(node, node));
 
+        when(configurationService.isL3ForwardingEnabled()).thenReturn(false);
         when(configurationService.getIntegrationBridgeName()).thenReturn(BR_INT);
-        assertTrue("Error, did not return correct boolean from isNodeNeutronReady",
-                bridgeConfigurationManagerImpl.isNodeNeutronReady(node));
+        assertTrue("Error, did not return correct boolean from isNodeTunnelReady",
+                bridgeConfigurationManagerImpl.isNodeTunnelReady(node, node));
 
-        verify(configurationService, times(2)).getIntegrationBridgeName();
-        verifyStatic(times(2));
-        MdsalUtils.getBridge(any(Node.class), anyString());
+        verify(configurationService, times(1)).isL3ForwardingEnabled();
+        verify(configurationService, times(3)).getIntegrationBridgeName();
+        verify(southbound, times(2)).isBridgeOnOvsdbNode(any(Node.class), anyString());
     }
 
     @Test
     public void testIsNodeVlanReady() throws Exception {
-        mockStatic(MdsalUtils.class);
-        when(MdsalUtils.getBridge(any(Node.class), anyString()))
-                .thenReturn(null)
-                .thenReturn(bridge);
+        when(southbound.isBridgeOnOvsdbNode(any(Node.class), anyString()))
+                .thenReturn(false)
+                .thenReturn(true);
 
-        when(MdsalUtils.extractTerminationPointAugmentation(any(Node.class), anyString()))
+        when(southbound.extractTerminationPointAugmentation(any(Node.class), anyString()))
                 .thenReturn(null)
                 .thenReturn(port);
 
@@ -188,25 +188,45 @@ public class BridgeConfigurationManagerImplTest {
 
         verifyNoMoreInteractions(configurationService);
         assertFalse("Error, did not return correct boolean from isNodeTunnelReady",
-                bridgeConfigurationManagerImpl.isNodeVlanReady(node, neutronNetwork));
+                bridgeConfigurationManagerImpl.isNodeVlanReady(node, node, neutronNetwork));
 
         BridgeConfigurationManagerImpl bridgeConfigurationManagerImplSpy =
                 PowerMockito.spy(new BridgeConfigurationManagerImpl());
         doReturn(ETH1).when(bridgeConfigurationManagerImplSpy).getPhysicalInterfaceName(any(Node.class), anyString());
         bridgeConfigurationManagerImplSpy.setConfigurationService(configurationService);
+        bridgeConfigurationManagerImplSpy.setSouthbound(southbound);
 
         assertFalse("Error, did not return correct boolean from isNodeVlanReady",
-                bridgeConfigurationManagerImpl.isNodeVlanReady(node, neutronNetwork));
+                bridgeConfigurationManagerImpl.isNodeVlanReady(node, node, neutronNetwork));
 
         assertTrue("Error, did not return correct boolean from isNodeVlanReady",
-                bridgeConfigurationManagerImpl.isNodeVlanReady(node, neutronNetwork));
+                bridgeConfigurationManagerImpl.isNodeVlanReady(node, node, neutronNetwork));
 
         verify(configurationService, times(3)).getIntegrationBridgeName();
         verify(neutronNetwork, times(2)).getProviderPhysicalNetwork();
-        verifyStatic(times(3));
-        MdsalUtils.getBridge(any(Node.class), anyString());
-        verifyStatic(times(2));
-        MdsalUtils.extractTerminationPointAugmentation(any(Node.class), anyString());
+    }
+
+    @Test
+    public void testIsNodeL3Ready() {
+        when(southbound.isBridgeOnOvsdbNode(any(Node.class), anyString())).thenReturn(true);
+        when(southbound.extractTerminationPointAugmentation(any(Node.class), anyString())).thenReturn(mock(OvsdbTerminationPointAugmentation.class));
+        when(southbound.readBridgeNode(any(Node.class), anyString())).thenReturn(mock(Node.class));
+
+        assertTrue("Error, isNodeL3Ready didn't return true", bridgeConfigurationManagerImpl.isNodeL3Ready(node, node));
+    }
+
+    @Test
+    public void testPrepareNode() {
+        when(configurationService.getIntegrationBridgeName()).thenReturn(BR_INT);
+        when(southbound.isBridgeOnOvsdbNode(any(Node.class), anyString())).thenReturn(false);
+
+        PowerMockito.mockStatic(ConfigProperties.class);
+        when(ConfigProperties.getProperty(any(Class.class), anyString())).thenReturn(ADDRESS);
+
+        when(southbound.addBridge(any(Node.class), anyString(), anyList())).thenReturn(true);
+        when(configurationService.isL3ForwardingEnabled()).thenReturn(true);
+
+        bridgeConfigurationManagerImpl.prepareNode(node);
     }
 
     @Test
@@ -215,28 +235,31 @@ public class BridgeConfigurationManagerImplTest {
         String networkTypes[] = {"vlan", "vxlan", "gre"};
         BridgeConfigurationManagerImpl bridgeConfigurationManagerImplSpy =
                 PowerMockito.spy(new BridgeConfigurationManagerImpl());
+        bridgeConfigurationManagerImplSpy.setConfigurationService(configurationService);
+        bridgeConfigurationManagerImplSpy.setSouthbound(southbound);
 
         for (String networkType : networkTypes) {
             when(neutronNetworkMock.getProviderNetworkType()).thenReturn(networkType);
+            when(southbound.readOvsdbNode(any(Node.class))).thenReturn(node);
 
             doAnswer(new Answer<Boolean>() {
                 @Override
                 public Boolean answer(InvocationOnMock invocation) {
                     return Boolean.TRUE;
                 }
-            }).when(bridgeConfigurationManagerImplSpy).isNodeVlanReady(any(Node.class), any(NeutronNetwork.class));
+            }).when(bridgeConfigurationManagerImplSpy).isNodeVlanReady(any(Node.class), any(Node.class), any(NeutronNetwork.class));
 
             doAnswer(new Answer<Boolean>() {
                 @Override
                 public Boolean answer(InvocationOnMock invocation) {
                     return Boolean.TRUE;
                 }
-            }).when(bridgeConfigurationManagerImplSpy).isNodeTunnelReady(any(Node.class));
+            }).when(bridgeConfigurationManagerImplSpy).isNodeTunnelReady(any(Node.class), any(Node.class));
 
             assertTrue("bridgeConfigMock.isNodeVlanReady is not true",
-                    bridgeConfigurationManagerImplSpy.isNodeVlanReady(node, neutronNetworkMock));
+                    bridgeConfigurationManagerImplSpy.isNodeVlanReady(node, node, neutronNetworkMock));
             assertTrue("bridgeConfigMock.isNodeTunnelReady is not true",
-                    bridgeConfigurationManagerImplSpy.isNodeTunnelReady(node));
+                    bridgeConfigurationManagerImplSpy.isNodeTunnelReady(node, node));
 
             assertTrue("Error, isCreated is not true for " + networkType,
                     bridgeConfigurationManagerImplSpy.createLocalNetwork(node, neutronNetworkMock));
@@ -255,8 +278,7 @@ public class BridgeConfigurationManagerImplTest {
 
     @Test
     public void testGetPhysicalInterfaceName() throws Exception {
-        mockStatic(MdsalUtils.class);
-        when(MdsalUtils.getOtherConfig(any(Node.class), eq(OvsdbTables.OPENVSWITCH), anyString()))
+        when(southbound.getOtherConfig(any(Node.class), eq(OvsdbTables.OPENVSWITCH), anyString()))
                 .thenReturn(null)
                 .thenReturn(null)
                 .thenReturn(PROVIDER_MAPPINGS);
@@ -279,12 +301,12 @@ public class BridgeConfigurationManagerImplTest {
         assertNull(PHYSNET1, bridgeConfigurationManagerImpl.getPhysicalInterfaceName(node, PHYSNET3));
         verify(configurationService, times(5)).getProviderMappingsKey();
         verify(configurationService, times(2)).getDefaultProviderMapping();
+        verify(southbound, times(5)).getOtherConfig(any(Node.class), eq(OvsdbTables.OPENVSWITCH), anyString());
     }
 
     @Test
     public void testGetAllPhysicalInterfaceNames() throws Exception {
-        mockStatic(MdsalUtils.class);
-        when(MdsalUtils.getOtherConfig(any(Node.class), eq(OvsdbTables.OPENVSWITCH), anyString()))
+        when(southbound.getOtherConfig(any(Node.class), eq(OvsdbTables.OPENVSWITCH), anyString()))
                 .thenReturn(null)
                 .thenReturn(PROVIDER_MAPPINGS);
 
@@ -303,7 +325,30 @@ public class BridgeConfigurationManagerImplTest {
 
         verify(configurationService, times(2)).getProviderMappingsKey();
         verify(configurationService, times(1)).getDefaultProviderMapping();
-        verifyStatic(times(2));
-        MdsalUtils.getOtherConfig(any(Node.class), eq(OvsdbTables.OPENVSWITCH), anyString());
+        verify(southbound, times(2)).getOtherConfig(any(Node.class), eq(OvsdbTables.OPENVSWITCH), anyString());
+    }
+
+    @Test
+    public void testSetDependencies() throws Exception {
+        ConfigurationService configurationService = mock(ConfigurationService.class);
+        NetworkingProviderManager networkingProviderManager = mock(NetworkingProviderManager.class);
+        Southbound southbound = mock(Southbound.class);
+
+        PowerMockito.mockStatic(ServiceHelper.class);
+        PowerMockito.when(ServiceHelper.getGlobalInstance(ConfigurationService.class, bridgeConfigurationManagerImpl)).thenReturn(configurationService);
+        PowerMockito.when(ServiceHelper.getGlobalInstance(NetworkingProviderManager.class, bridgeConfigurationManagerImpl)).thenReturn(networkingProviderManager);
+        PowerMockito.when(ServiceHelper.getGlobalInstance(Southbound.class, bridgeConfigurationManagerImpl)).thenReturn(southbound);
+
+        bridgeConfigurationManagerImpl.setDependencies(mock(ServiceReference.class));
+
+        assertEquals("Error, did not return the correct object", getField("configurationService"), configurationService);
+        assertEquals("Error, did not return the correct object", getField("networkingProviderManager"), networkingProviderManager);
+        assertEquals("Error, did not return the correct object", getField("southbound"), southbound);
+    }
+
+    private Object getField(String fieldName) throws Exception {
+        Field field = BridgeConfigurationManagerImpl.class.getDeclaredField(fieldName);
+        field.setAccessible(true);
+        return field.get(bridgeConfigurationManagerImpl);
     }
 }
\ No newline at end of file