Bug 4874 - distributed arp in old l3 for ovsdb is not installing rules when it should
[netvirt.git] / openstack / net-virt / src / test / java / org / opendaylight / ovsdb / openstack / netvirt / impl / TenantNetworkManagerImplTest.java
index 0b0ffb02e32ffd8a4003f6ebf048cbac4570dd3f..6c6df3e47aa6a9e818a4ba377c086ed99e4f3a68 100644 (file)
@@ -13,61 +13,53 @@ import static org.junit.Assert.assertTrue;
 import static org.mockito.Matchers.any;
 import static org.mockito.Matchers.anyString;
 import static org.mockito.Matchers.eq;
-import static org.mockito.Matchers.same;
-import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
+import java.lang.reflect.Field;
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
 
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
-import org.mockito.runners.MockitoJUnitRunner;
-import org.opendaylight.neutron.spi.INeutronNetworkCRUD;
-import org.opendaylight.neutron.spi.INeutronPortCRUD;
-import org.opendaylight.neutron.spi.NeutronNetwork;
-import org.opendaylight.neutron.spi.NeutronPort;
-import org.opendaylight.ovsdb.lib.notation.Column;
-import org.opendaylight.ovsdb.lib.notation.Row;
-import org.opendaylight.ovsdb.lib.schema.GenericTableSchema;
-import org.opendaylight.ovsdb.openstack.netvirt.api.Constants;
-import org.opendaylight.ovsdb.openstack.netvirt.api.NetworkingProvider;
+import org.opendaylight.ovsdb.openstack.netvirt.translator.NeutronNetwork;
+import org.opendaylight.ovsdb.openstack.netvirt.translator.NeutronPort;
+import org.opendaylight.ovsdb.openstack.netvirt.translator.crud.INeutronNetworkCRUD;
+import org.opendaylight.ovsdb.openstack.netvirt.translator.crud.INeutronPortCRUD;
 import org.opendaylight.ovsdb.openstack.netvirt.api.NetworkingProviderManager;
+import org.opendaylight.ovsdb.openstack.netvirt.api.Southbound;
 import org.opendaylight.ovsdb.openstack.netvirt.api.VlanConfigurationCache;
-import org.opendaylight.ovsdb.plugin.api.OvsdbConfigurationService;
-import org.opendaylight.ovsdb.plugin.api.OvsdbConnectionService;
-import org.opendaylight.ovsdb.plugin.api.Status;
-import org.opendaylight.ovsdb.schema.openvswitch.Bridge;
-import org.opendaylight.ovsdb.schema.openvswitch.Interface;
-import org.opendaylight.ovsdb.schema.openvswitch.Port;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
+import org.opendaylight.ovsdb.utils.servicehelper.ServiceHelper;
+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;
 
 /**
  * Unit test for {@link TenantNetworkManagerImpl}
  */
-@RunWith(MockitoJUnitRunner.class)
+@RunWith(PowerMockRunner.class)
+@PrepareForTest(ServiceHelper.class)
 public class TenantNetworkManagerImplTest {
 
+    @InjectMocks private TenantNetworkManagerImpl tenantNetworkManagerImpl;
+
+    @Mock private INeutronPortCRUD neutronPortCache;
+    @Mock private INeutronNetworkCRUD neutronNetworkCache;
     @Mock private VlanConfigurationCache vlanConfigurationCache;
-    @Mock private INeutronPortCRUD neutronCache;
-    @Mock private OvsdbConfigurationService ovsdbConfigurationService;
     @Mock private NetworkingProviderManager networkingProviderManager;
-    @Mock private OvsdbConnectionService ovsdbConnectionService;
-
-    @InjectMocks private TenantNetworkManagerImpl tenantNetworkManagerImpl;
-    @InjectMocks private INeutronPortCRUD neutronPortCache = mock(INeutronPortCRUD.class);
-    @InjectMocks private INeutronNetworkCRUD neutronNetworkCache = mock(INeutronNetworkCRUD.class);
+    @Mock private Southbound southbound;
 
     private static final String NETWORK_ID= "networkId";
-
+    private static final String SEG_ID = "segId";
+    private static final String INTERFACE_ID = "intId";
     /**
      * Test method {@link TenantNetworkManagerImpl#getInternalVlan(Node, String)}
      */
@@ -88,8 +80,8 @@ public class TenantNetworkManagerImplTest {
     public void testReclaimInternalVlan() {
         when(vlanConfigurationCache.reclaimInternalVlan(any(Node.class), eq(NETWORK_ID))).thenReturn(10);
 
-        tenantNetworkManagerImpl.reclaimInternalVlan(mock(Node.class), NETWORK_ID, mock(NeutronNetwork.class));
-        tenantNetworkManagerImpl.reclaimInternalVlan(mock(Node.class), "unexistingNetwork", mock(NeutronNetwork.class));
+        tenantNetworkManagerImpl.reclaimInternalVlan(mock(Node.class), mock(NeutronNetwork.class));
+        tenantNetworkManagerImpl.reclaimInternalVlan(mock(Node.class), mock(NeutronNetwork.class));
 
         verify(vlanConfigurationCache, times(2)).reclaimInternalVlan(any(Node.class), anyString());
     }
@@ -99,19 +91,9 @@ public class TenantNetworkManagerImplTest {
      */
     @Test
     public void testProgramInternalVlan(){
-        Port port = mock(Port.class);
-        Row row = mock(Row.class);
-        GenericTableSchema tableSchema = mock(GenericTableSchema.class);
-        Status status = mock(Status.class);
-
-        when(port.getRow()).thenReturn(row);
-        when(port.getSchema()).thenReturn(tableSchema);
-
         when(vlanConfigurationCache.getInternalVlan(any(Node.class), anyString())).thenReturn(10);
-        when(ovsdbConfigurationService.createTypedRow(any(Node.class), same(Port.class))).thenReturn(port);
-        when(ovsdbConfigurationService.updateRow(any(Node.class), anyString(), anyString(), anyString(), any(Row.class))).thenReturn(status);
 
-        tenantNetworkManagerImpl.programInternalVlan(mock(Node.class), NETWORK_ID, mock(NeutronNetwork.class));
+        tenantNetworkManagerImpl.programInternalVlan(mock(Node.class), mock(OvsdbTerminationPointAugmentation.class), mock(NeutronNetwork.class));
 
         verify(vlanConfigurationCache, times(1)).getInternalVlan(any(Node.class), anyString());
     }
@@ -121,51 +103,23 @@ public class TenantNetworkManagerImplTest {
      */
     @Test
     public void testIsTenantNetworkPresentInNode() {
-        NetworkingProvider networkingProvider = mock(NetworkingProvider.class);
-
-        Interface intf = mock(Interface.class);
-        Column<GenericTableSchema, Map<String, String>> columnMock = mock(Column.class);
-        Map<String, String> externalIds = new HashMap<String, String>();
-        externalIds.put(Constants.EXTERNAL_ID_INTERFACE_ID, "interfaceId");
-
-        Row row = mock(Row.class);
-        Bridge bridge = mock(Bridge.class, RETURNS_DEEP_STUBS);
-
-        ConcurrentHashMap<String, Row> map;
-        map = new ConcurrentHashMap<>();
-        map.put("row", row);
-
         NeutronNetwork neutronNetwork = mock(NeutronNetwork.class);
-        NeutronPort neutronPort = mock(NeutronPort.class);
-        ArrayList<NeutronNetwork> listNeutronNetwork = new ArrayList<NeutronNetwork>();
+        when(neutronNetwork.getProviderSegmentationID()).thenReturn(SEG_ID);
+        when(neutronNetwork.getNetworkUUID()).thenReturn(NETWORK_ID);
+        List<NeutronNetwork> listNeutronNetwork = new ArrayList<>();
         listNeutronNetwork.add(neutronNetwork);
-
-        when(neutronNetwork.getProviderSegmentationID()).thenReturn("segId");
-        when(neutronNetwork.getNetworkUUID()).thenReturn("networkUUID");
         when(neutronNetworkCache.getAllNetworks()).thenReturn(listNeutronNetwork);
 
-        assertEquals("Error, did not return the UUID of the correct network", listNeutronNetwork.get(0).getNetworkUUID(), tenantNetworkManagerImpl.getNetworkId("segId"));
-
-        when(networkingProviderManager.getProvider(any(Node.class))).thenReturn(networkingProvider);
-        when(networkingProvider.hasPerTenantTunneling()).thenReturn(true);
-
-        when(vlanConfigurationCache.getInternalVlan(any(Node.class), anyString())).thenReturn(10);
-
-        when(ovsdbConfigurationService.getRows(any(Node.class), anyString())).thenReturn(map);
-        when(ovsdbConfigurationService.getTypedRow(any(Node.class), same(Interface.class),
-                any(Row.class))).thenReturn(intf);
-
-        when(intf.getExternalIdsColumn()).thenReturn(columnMock);
-        when(columnMock.getData()).thenReturn(externalIds);
-
+        when(southbound.getInterfaceExternalIdsValue(any(OvsdbTerminationPointAugmentation.class), anyString())).thenReturn(INTERFACE_ID);
+        NeutronPort neutronPort = mock(NeutronPort.class);
+        when(neutronPort.getNetworkUUID()).thenReturn(NETWORK_ID);
         when(neutronPortCache.getPort(anyString())).thenReturn(neutronPort);
-        when(neutronPort.getNetworkUUID()).thenReturn("networkUUID");
 
-        assertTrue("Error, did not return correct boolean for isTenantNetworkPresentInNode", tenantNetworkManagerImpl.isTenantNetworkPresentInNode(mock(Node.class), "segId"));
+        List<OvsdbTerminationPointAugmentation> ports = new ArrayList<>();
+        ports.add(mock(OvsdbTerminationPointAugmentation.class));
+        when(southbound.readTerminationPointAugmentations(any(Node.class))).thenReturn(ports);
 
-
-        verify(networkingProviderManager, times(1)).getProvider(any(Node.class));
-        verify(vlanConfigurationCache, times(1)).getInternalVlan(any(Node.class), anyString());
+        assertTrue("Error, did not return correct boolean for isTenantNetworkPresentInNode", tenantNetworkManagerImpl.isTenantNetworkPresentInNode(mock(Node.class), SEG_ID));
     }
 
     /**
@@ -174,7 +128,7 @@ public class TenantNetworkManagerImplTest {
     @Test
     public void testGetNetworkId() {
         NeutronNetwork neutronNetwork = mock(NeutronNetwork.class);
-        ArrayList<NeutronNetwork> listNeutronNetwork = new ArrayList<NeutronNetwork>();
+        List<NeutronNetwork> listNeutronNetwork = new ArrayList<>();
         listNeutronNetwork.add(neutronNetwork);
 
         when(neutronNetwork.getProviderSegmentationID()).thenReturn("segId");
@@ -191,45 +145,59 @@ public class TenantNetworkManagerImplTest {
      */
     @Test
     public void testGetTenantNetwork() {
-        Interface intf = mock(Interface.class);
-        Column<GenericTableSchema, Map<String, String>> columnMock = mock(Column.class);
-        Map<String, String> externalIds = new HashMap<String, String>();
-        externalIds.put(Constants.EXTERNAL_ID_INTERFACE_ID, "tenantValue");
+        when(southbound.getInterfaceExternalIdsValue(any(OvsdbTerminationPointAugmentation.class), anyString())).thenReturn(INTERFACE_ID);
         NeutronPort neutronPort = mock(NeutronPort.class);
+        when(neutronPortCache.getPort(anyString())).thenReturn(neutronPort);
         NeutronNetwork neutronNetwork = mock(NeutronNetwork.class);
+        when(neutronNetworkCache.getNetwork(anyString())).thenReturn(neutronNetwork);
 
-        when(intf.getExternalIdsColumn()).thenReturn(columnMock);
-        when(columnMock.getData()).thenReturn(externalIds);
+        assertEquals("Error, did not return the correct tenant", neutronNetwork, tenantNetworkManagerImpl.getTenantNetwork(mock(OvsdbTerminationPointAugmentation.class)));
+    }
 
-        when(neutronPort.getNetworkUUID()).thenReturn("neutronUUID");
+    @Test
+    public void testGetTenantPort() {
+        when(southbound.getInterfaceExternalIdsValue(any(OvsdbTerminationPointAugmentation.class), anyString())).thenReturn(INTERFACE_ID);
+        NeutronPort neutronPort = mock(NeutronPort.class);
         when(neutronPortCache.getPort(anyString())).thenReturn(neutronPort);
-        when(neutronNetworkCache.getNetwork(anyString())).thenReturn(neutronNetwork);
 
-        assertEquals("Error, did not return the correct tenant", neutronNetwork, tenantNetworkManagerImpl.getTenantNetwork(intf));
-
-        verify(neutronPortCache, times(1)).getPort(anyString());
-        verify(neutronNetworkCache, times(1)).getNetwork(anyString());
+        assertEquals("Error, did not return the correct tenant", neutronPort, tenantNetworkManagerImpl.getTenantPort(mock(OvsdbTerminationPointAugmentation.class)));
     }
 
-    /**
-     * Test method {@link TenantNetworkManagerImpl#networkCreated(String)}
-     */
     @Test
     public void testNetworkCreated() {
-        int numberOfNode = 10;
-        when(vlanConfigurationCache.assignInternalVlan(any(Node.class), anyString())).thenReturn(10);
+        tenantNetworkManagerImpl.networkCreated(mock(Node.class), NETWORK_ID);
+        verify(vlanConfigurationCache, times(1)).assignInternalVlan(any(Node.class), anyString());
+    }
+
+    @Test
+    public void testSetDependencies() throws Exception {
+        VlanConfigurationCache vlanConfigurationCache = mock(VlanConfigurationCache.class);
+        Southbound southbound = mock(Southbound.class);
+
+        PowerMockito.mockStatic(ServiceHelper.class);
+        PowerMockito.when(ServiceHelper.getGlobalInstance(VlanConfigurationCache.class, tenantNetworkManagerImpl)).thenReturn(vlanConfigurationCache);
+        PowerMockito.when(ServiceHelper.getGlobalInstance(Southbound.class, tenantNetworkManagerImpl)).thenReturn(southbound);
 
-        List<Node> nodes = new ArrayList();
-        for (int i = 0; i<numberOfNode; i++) {
-            nodes.add(mock(Node.class));
-        }
-        when(ovsdbConnectionService.getNodes()).thenReturn(nodes);
+        tenantNetworkManagerImpl.setDependencies(mock(ServiceReference.class));
 
-        tenantNetworkManagerImpl.networkCreated(NETWORK_ID);
+        assertEquals("Error, did not return the correct object", getField("vlanConfigurationCache"), vlanConfigurationCache);
+        assertEquals("Error, did not return the correct object", getField("southbound"), southbound);
+    }
 
-        verify(ovsdbConnectionService, times(1)).getNodes();
-        verify(vlanConfigurationCache, times(numberOfNode)).assignInternalVlan(any(Node.class), anyString());
+    @Test
+    public void testSetDependenciesObject() throws Exception{
+        INeutronNetworkCRUD neutronNetworkCache = mock(INeutronNetworkCRUD.class);
+        tenantNetworkManagerImpl.setDependencies(neutronNetworkCache);
+        assertEquals("Error, did not return the correct object", getField("neutronNetworkCache"), neutronNetworkCache);
+
+        INeutronPortCRUD neutronPortCache = mock(INeutronPortCRUD.class);
+        tenantNetworkManagerImpl.setDependencies(neutronPortCache);
+        assertEquals("Error, did not return the correct object", getField("neutronPortCache"), neutronPortCache);
+    }
 
-        assertEquals("Error, did not return the correct network id", 10,tenantNetworkManagerImpl.networkCreated(mock(Node.class), NETWORK_ID));
+    private Object getField(String fieldName) throws Exception {
+        Field field = TenantNetworkManagerImpl.class.getDeclaredField(fieldName);
+        field.setAccessible(true);
+        return field.get(tenantNetworkManagerImpl);
     }
 }