X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=openstack%2Fnet-virt-providers%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fovsdb%2Fopenstack%2Fnetvirt%2Fproviders%2Fopenflow13%2FOF13ProviderTest.java;h=a4ce294d9d5972560cf36d3a47bc7d63ea703fcf;hb=0ac404938f61fa11746e322a7e1c06a948db42c6;hp=0865b4d64b279a7d0764a45b89efaa521726d7af;hpb=2ebaf23050854274b6af934d434fb9d2fdb37ee6;p=ovsdb.git diff --git a/openstack/net-virt-providers/src/test/java/org/opendaylight/ovsdb/openstack/netvirt/providers/openflow13/OF13ProviderTest.java b/openstack/net-virt-providers/src/test/java/org/opendaylight/ovsdb/openstack/netvirt/providers/openflow13/OF13ProviderTest.java index 0865b4d64..a4ce294d9 100644 --- a/openstack/net-virt-providers/src/test/java/org/opendaylight/ovsdb/openstack/netvirt/providers/openflow13/OF13ProviderTest.java +++ b/openstack/net-virt-providers/src/test/java/org/opendaylight/ovsdb/openstack/netvirt/providers/openflow13/OF13ProviderTest.java @@ -9,9 +9,12 @@ package org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.mockito.Matchers.any; +import static org.mockito.Matchers.anyBoolean; +import static org.mockito.Matchers.anyLong; +import static org.mockito.Matchers.anyShort; import static org.mockito.Matchers.anyString; import static org.mockito.Matchers.same; import static org.mockito.Mockito.mock; @@ -22,396 +25,511 @@ import static org.mockito.Mockito.when; import java.lang.reflect.Field; import java.net.InetAddress; import java.util.ArrayList; -import java.util.Arrays; import java.util.HashMap; -import java.util.HashSet; import java.util.List; import java.util.Map; -import java.util.Random; -import java.util.Set; -import java.util.concurrent.BlockingQueue; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ConcurrentMap; import org.junit.Before; -import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; -import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Mockito; -import org.mockito.runners.MockitoJUnitRunner; -import org.opendaylight.controller.md.sal.binding.api.DataBroker; -import org.opendaylight.neutron.spi.INeutronNetworkCRUD; -import org.opendaylight.neutron.spi.INeutronPortCRUD; -import org.opendaylight.neutron.spi.INeutronSubnetCRUD; -import org.opendaylight.neutron.spi.NeutronLoadBalancerPool; -import org.opendaylight.neutron.spi.NeutronNetwork; -import org.opendaylight.ovsdb.openstack.netvirt.AbstractEvent; -import org.opendaylight.ovsdb.openstack.netvirt.AbstractHandler; -import org.opendaylight.ovsdb.openstack.netvirt.LBaaSHandler; -import org.opendaylight.ovsdb.openstack.netvirt.LBaaSPoolHandler; +import org.opendaylight.ovsdb.openstack.netvirt.translator.NeutronNetwork; +import org.opendaylight.ovsdb.openstack.netvirt.MdsalHelper; import org.opendaylight.ovsdb.openstack.netvirt.NetworkHandler; -import org.opendaylight.ovsdb.openstack.netvirt.NeutronCacheUtils; -import org.opendaylight.ovsdb.openstack.netvirt.api.Action; import org.opendaylight.ovsdb.openstack.netvirt.api.BridgeConfigurationManager; import org.opendaylight.ovsdb.openstack.netvirt.api.ClassifierProvider; import org.opendaylight.ovsdb.openstack.netvirt.api.ConfigurationService; -import org.opendaylight.ovsdb.openstack.netvirt.api.Constants; import org.opendaylight.ovsdb.openstack.netvirt.api.EgressAclProvider; import org.opendaylight.ovsdb.openstack.netvirt.api.IngressAclProvider; import org.opendaylight.ovsdb.openstack.netvirt.api.L2ForwardingProvider; +import org.opendaylight.ovsdb.openstack.netvirt.api.NetworkingProvider; +import org.opendaylight.ovsdb.openstack.netvirt.api.NetworkingProviderManager; +import org.opendaylight.ovsdb.openstack.netvirt.api.NodeCacheManager; import org.opendaylight.ovsdb.openstack.netvirt.api.SecurityServicesManager; +import org.opendaylight.ovsdb.openstack.netvirt.api.Southbound; import org.opendaylight.ovsdb.openstack.netvirt.api.Status; import org.opendaylight.ovsdb.openstack.netvirt.api.StatusCode; import org.opendaylight.ovsdb.openstack.netvirt.api.TenantNetworkManager; -import org.opendaylight.ovsdb.openstack.netvirt.impl.EventDispatcherImpl; -//import org.opendaylight.ovsdb.plugin.api.OvsdbConnectionService; -//import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId; +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.NodeId; -//import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node; -import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeBuilder; -//import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey; -import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey; +import org.osgi.framework.BundleContext; import org.osgi.framework.ServiceReference; import org.powermock.api.mockito.PowerMockito; +import org.powermock.api.support.membermodification.MemberMatcher; +import org.powermock.api.support.membermodification.MemberModifier; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; +import org.powermock.reflect.Whitebox; /** * Unit test for {@link OF13Provider} */ -@Ignore // TODO SB_MIGRATION -@PrepareForTest(OF13Provider.class) +@PrepareForTest({OF13Provider.class, InetAddress.class, MdsalHelper.class, ServiceHelper.class}) @RunWith(PowerMockRunner.class) public class OF13ProviderTest { - @InjectMocks private OF13Provider of13Provider; - @Mock private NeutronNetwork network; - @Mock private org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node openflowNode; - @Mock private Node node; - @Mock private Node node2; - @Mock private Node node3; - //@Mock private Interface intf; - - @Mock private ConfigurationService configurationService; - @Mock private BridgeConfigurationManager bridgeConfigurationManager; - @Mock private TenantNetworkManager tenantNetworkManager; - /* TODO SB_MIGRATION */ - //@Mock private OvsdbConnectionService connectionService; - @Mock private MdsalConsumer mdsalConsumer; - @Mock private SecurityServicesManager securityServicesManager; - @Mock private IngressAclProvider ingressAclProvider; - @Mock private EgressAclProvider egressAclProvider; - @Mock private ClassifierProvider classifierProvider; - @Mock private L2ForwardingProvider l2ForwardingProvider; - @Mock private DataBroker dataBroker; + @Mock private OF13Provider of13Provider; + private static final String TYPE = "gre"; + private static final String IP = "127.0.0.1"; + private static final String BR_INT = "br-int"; + private static final String ID = "4"; + private static final String PORT = "port-int"; + private static final String SEG_ID = "5"; + private static final String MAC_ADDRESS = "mac-address"; + private static final long LOCAL_PORT = 3; @Before public void setUp() throws Exception{ - of13Provider = new OF13Provider(); - - //Setup mock dependency services. - configurationService = Mockito.mock(ConfigurationService.class); - bridgeConfigurationManager = Mockito.mock(BridgeConfigurationManager.class); - tenantNetworkManager = Mockito.mock(TenantNetworkManager.class); - /* TODO SB_MIGRATION */ - //connectionService = Mockito.mock(OvsdbConnectionService.class); - mdsalConsumer = Mockito.mock(MdsalConsumer.class); - securityServicesManager = Mockito.mock(SecurityServicesManager.class); - ingressAclProvider = Mockito.mock(IngressAclProvider.class); - egressAclProvider = Mockito.mock(EgressAclProvider.class); - classifierProvider = Mockito.mock(ClassifierProvider.class); - l2ForwardingProvider = Mockito.mock(L2ForwardingProvider.class); - dataBroker = Mockito.mock(DataBroker.class); - - this.SeedMockDependencies(); - - List nodeList = new ArrayList(); - NodeId nodeId = new NodeId("Node1"); - NodeKey nodeKey = new NodeKey(nodeId); - - node = Mockito.mock(Node.class); + of13Provider = PowerMockito.mock(OF13Provider.class, Mockito.CALLS_REAL_METHODS); + } + + @Test + public void testGetName() { + assertEquals("Error, did not return the correct name", OF13Provider.NAME, of13Provider.getName()); + } + + @Test + public void testSupportsServices() { + assertTrue("Error, did not return the correct boolean", of13Provider.supportsServices()); + } + + @Test + public void testHasPerTenantTunneling() { + assertFalse("Error, did not return the correct boolean", of13Provider.hasPerTenantTunneling()); + } + + @Test + public void testGetTunnelReadinessStatus() throws Exception { + ConfigurationService configurationService = mock(ConfigurationService.class); + BridgeConfigurationManager bridgeConfigurationManager = mock(BridgeConfigurationManager.class); + TenantNetworkManager tenantNetworkManager = mock(TenantNetworkManager.class); + + MemberModifier.field(OF13Provider.class, "configurationService").set(of13Provider , configurationService); + MemberModifier.field(OF13Provider.class, "bridgeConfigurationManager").set(of13Provider , bridgeConfigurationManager); + MemberModifier.field(OF13Provider.class, "tenantNetworkManager").set(of13Provider , tenantNetworkManager); + + assertEquals("Error, did not return the correct status code", new Status(StatusCode.NOTFOUND), Whitebox.invokeMethod(of13Provider, "getTunnelReadinessStatus", mock(Node.class), "")); + + when(configurationService.getTunnelEndPoint(any(Node.class))).thenReturn(mock(InetAddress.class)); + when(bridgeConfigurationManager.isNodeNeutronReady(any(Node.class))).thenReturn(false, true); + + assertEquals("Error, did not return the correct status code", new Status(StatusCode.NOTACCEPTABLE), Whitebox.invokeMethod(of13Provider, "getTunnelReadinessStatus", mock(Node.class), "")); + + when(tenantNetworkManager.isTenantNetworkPresentInNode(any(Node.class), anyString())).thenReturn(false, true); + + assertEquals("Error, did not return the correct status code", new Status(StatusCode.NOTACCEPTABLE), Whitebox.invokeMethod(of13Provider, "getTunnelReadinessStatus", mock(Node.class), "")); + assertEquals("Error, did not return the correct status code", new Status(StatusCode.SUCCESS), Whitebox.invokeMethod(of13Provider, "getTunnelReadinessStatus", mock(Node.class), "")); + } + + @Test + public void testGetTunnelName() throws Exception { + PowerMockito.mockStatic(InetAddress.class); + InetAddress inetAddress = mock(InetAddress.class); + PowerMockito.when(inetAddress.getHostAddress()).thenReturn(IP); + + String ret = TYPE + "-" + inetAddress.getHostAddress(); + assertEquals("Error, did not return the correct status code", ret, Whitebox.invokeMethod(of13Provider, "getTunnelName", TYPE, inetAddress)); + } + + @SuppressWarnings("unchecked") + @Test + public void testAddTunnelPort() throws Exception { + ConfigurationService configurationService = mock(ConfigurationService.class); + when(configurationService.getIntegrationBridgeName()).thenReturn(BR_INT); + Southbound southbound = mock(Southbound.class); + when(southbound.extractTerminationPointAugmentation(any(Node.class), anyString())).thenReturn(mock(OvsdbTerminationPointAugmentation.class)); + NodeId nodeId = mock(NodeId.class); + when(nodeId.getValue()).thenReturn(ID); + Node node = mock(Node.class); when(node.getNodeId()).thenReturn(nodeId); - when(node.getKey()).thenReturn(new NodeKey(nodeId)); - when(configurationService.getTunnelEndPoint(node)).thenReturn(InetAddress.getByName("192.168.0.1")); - nodeList.add(node); - - nodeId = new NodeId("Node2"); - node2 = Mockito.mock(Node.class); - when(node2.getNodeId()).thenReturn(nodeId); - when(node2.getKey()).thenReturn(new NodeKey(nodeId)); - when(configurationService.getTunnelEndPoint(node2)).thenReturn(InetAddress.getByName("192.168.0.2")); - nodeList.add(node2); - - nodeId = new NodeId("Node3"); - node3 = Mockito.mock(Node.class); - when(node3.getNodeId()).thenReturn(nodeId); - when(node3.getKey()).thenReturn(new NodeKey(nodeId)); - when(configurationService.getTunnelEndPoint(node3)).thenReturn(InetAddress.getByName("192.168.0.3")); - nodeList.add(node3); - - /* TODO SB_MIGRATION - //when(connectionService.getBridgeNodes()).thenReturn(nodeList); - - final String key = "key"; - ConcurrentHashMap bridgeTable = new ConcurrentHashMap(); - bridgeTable.put(key, new Row()); - - Row bridgeRow = Mockito.mock(Row.class); - Bridge bridge = Mockito.mock(Bridge.class); - - - Set paths = new HashSet(Arrays.asList(new String[] { "100"})); - Column> dataPathIdColumns = Mockito.mock(Column.class); - - when(dataPathIdColumns.getData()).thenReturn(paths); - when(bridge.getDatapathIdColumn()).thenReturn(dataPathIdColumns); - - when(configurationService.getIntegrationBridgeName()).thenReturn(key); - //when(ovsdbConfigurationService.getTableName(node, Bridge.class)).thenReturn(key); - //when(ovsdbConfigurationService.getRows(node, key)).thenReturn(bridgeTable); - //when(ovsdbConfigurationService.getRow(node, ovsdbConfigurationService.getTableName(node, Bridge.class), key)).thenReturn(bridgeRow); - //when(ovsdbConfigurationService.getTypedRow(node, Bridge.class, bridgeRow)).thenReturn(bridge); - - Bridge bridge1 = Mockito.mock(Bridge.class); - when(bridge1.getName()).thenReturn(key); - //when(ovsdbConfigurationService.getTypedRow(node, Bridge.class, bridgeTable.get(key))).thenReturn(bridge1); - - Port port = mock(Port.class); - Column> itfaceColumns = mock(Column.class); - when(port.getInterfacesColumn()).thenReturn(itfaceColumns); - Set ifaceUUIDs = new HashSet(); - ifaceUUIDs.add(mock(UUID.class)); - when(itfaceColumns.getData()).thenReturn(ifaceUUIDs ); - //when(ovsdbConfigurationService.getTypedRow(any(Node.class), same(Port.class), any(Row.class))).thenReturn(port); - - intf = mock(Interface.class); - - Set ports = new HashSet(Arrays.asList(new Long[] { 21L, 23L ,80L})); - Column> openFlowPortColumns = Mockito.mock(Column.class); - when(openFlowPortColumns.getData()).thenReturn(ports); - - when(intf.getName()).thenReturn("intf1"); - when(intf.getOpenFlowPortColumn()).thenReturn(openFlowPortColumns); - - Column> externalIdColumns = mock(Column.class); - Map externalIds = new HashMap(); - externalIds.put(Constants.EXTERNAL_ID_INTERFACE_ID, "portUUID"); - externalIds.put(Constants.EXTERNAL_ID_VM_MAC, "extMac"); - when(externalIdColumns.getData()).thenReturn(externalIds); - - when(intf.getExternalIdsColumn()).thenReturn(externalIdColumns); - //when(ovsdbConfigurationService.getTypedRow(any(Node.class), same(Interface.class), any(Row.class))).thenReturn(intf); -*/ + + MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "getTunnelName", String.class, InetAddress.class)); + + MemberModifier.field(OF13Provider.class, "configurationService").set(of13Provider , configurationService); + MemberModifier.field(OF13Provider.class, "southbound").set(of13Provider , southbound); + + assertTrue("Error, did not add the port", (boolean) Whitebox.invokeMethod(of13Provider, "addTunnelPort", node, TYPE, mock(InetAddress.class), mock(InetAddress.class))); + + when(southbound.extractTerminationPointAugmentation(any(Node.class), anyString())).thenReturn(null); + when(southbound.addTunnelTerminationPoint(any(Node.class), anyString(), anyString(), anyString(), any(HashMap.class))).thenReturn(false); + + assertFalse("Error, did add the port", (boolean) Whitebox.invokeMethod(of13Provider, "addTunnelPort", node, TYPE, mock(InetAddress.class), mock(InetAddress.class))); + + when(southbound.addTunnelTerminationPoint(any(Node.class), anyString(), anyString(), anyString(), any(HashMap.class))).thenReturn(true); + + assertTrue("Error, did not add the port", (boolean) Whitebox.invokeMethod(of13Provider, "addTunnelPort", node, TYPE, mock(InetAddress.class), mock(InetAddress.class))); + PowerMockito.verifyPrivate(of13Provider, times(3)).invoke("getTunnelName", anyString(), any(InetAddress.class)); + } + + @Test + public void testDeletePort() throws Exception { + Southbound southbound = mock(Southbound.class); + when(southbound.deleteTerminationPoint(any(Node.class), anyString())).thenReturn(false, true); + MemberModifier.field(OF13Provider.class, "southbound").set(of13Provider , southbound); + + assertFalse("Error, did delete the port", (boolean) Whitebox.invokeMethod(of13Provider, "deletePort", mock(Node.class), TYPE, PORT)); + assertTrue("Error, did not delete the port", (boolean) Whitebox.invokeMethod(of13Provider, "deletePort", mock(Node.class), TYPE, PORT)); } + @Test + public void testDeleteTunnelPort() throws Exception { + ConfigurationService configurationService = mock(ConfigurationService.class); + when(configurationService.getIntegrationBridgeName()).thenReturn(BR_INT); + + MemberModifier.field(OF13Provider.class, "configurationService").set(of13Provider , configurationService); + + MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "getTunnelName", String.class, InetAddress.class)); + MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "deletePort", Node.class, String.class, String.class)); + + PowerMockito.when(of13Provider, "deletePort", any(Node.class), anyString(), anyString()).thenReturn(true); + + assertTrue("Error, did not delete the tunnel", (boolean) Whitebox.invokeMethod(of13Provider, "deleteTunnelPort", mock(Node.class), TYPE, mock(InetAddress.class), mock(InetAddress.class))); + + PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("getTunnelName", anyString(), any(InetAddress.class)); + PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("deletePort", any(Node.class), anyString(), anyString()); + + PowerMockito.when(of13Provider, "deletePort", any(Node.class), anyString(), anyString()).thenReturn(false); + + assertFalse("Error, did delete the tunnel", (boolean) Whitebox.invokeMethod(of13Provider, "deleteTunnelPort", mock(Node.class), TYPE, mock(InetAddress.class), mock(InetAddress.class))); + + PowerMockito.verifyPrivate(of13Provider, times(2)).invoke("getTunnelName", anyString(), any(InetAddress.class)); + PowerMockito.verifyPrivate(of13Provider, times(2)).invoke("deletePort", any(Node.class), anyString(), anyString()); + } - /** - * Tests for defaults - * getName() - * supportsServices() - * hasPerTenantTunneling() - */ @Test - public void verifyObjectDefaultSettings(){ - assertEquals("Error, getName() - Default provider name is invalid","OF13Provider",of13Provider.getName()); - assertEquals("Error, supportsServices() - Support services is disabled", true, of13Provider.supportsServices()); - assertEquals("Error, hasPerTenantTunneling() - Support for per tenant tunnelling is enabled", false, of13Provider.hasPerTenantTunneling()); + public void testProgramLocalBridgeRules() throws Exception { + MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleLocalInPort", Long.class, Short.class, Short.class, String.class, Long.class, String.class, boolean.class)); + MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleDropSrcIface", Long.class, Long.class, boolean.class)); + MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleLocalUcastOut", Long.class, Short.class, String.class, Long.class, String.class, boolean.class)); + MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleLocalBcastOut", Long.class, Short.class, String.class, Long.class, boolean.class)); + MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleTunnelFloodOut", Long.class, Short.class, Short.class, String.class, Long.class, boolean.class)); + MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleTunnelMiss", Long.class, Short.class, Short.class, String.class, boolean.class)); + MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleLocalTableMiss", Long.class, Short.class, String.class, boolean.class)); + + + Whitebox.invokeMethod(of13Provider, "programLocalBridgeRules", mock(Node.class), Long.valueOf("45"), SEG_ID, MAC_ADDRESS, LOCAL_PORT); + + PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleLocalInPort", anyLong(), anyShort(), anyShort(), anyString(), anyLong(), anyString(), anyBoolean()); + PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleDropSrcIface", anyLong(), anyLong(), anyBoolean()); + PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleLocalUcastOut", anyLong(), anyShort(), anyString(), anyLong(), anyString(), anyBoolean()); + PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleLocalBcastOut", anyLong(), anyShort(), anyString(), anyLong(), anyBoolean()); + PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleTunnelFloodOut", anyLong(), anyShort(), anyShort(), anyString(), anyLong(), anyBoolean()); + PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleTunnelMiss", anyLong(), anyShort(), anyShort(), anyString(), anyBoolean()); + PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleLocalTableMiss", anyLong(), anyShort(), anyString(), anyBoolean()); } - /** - * Test method - * {@link OF13Provider#notifyFlowCapableNodeEventTest(Long, Action)} - */ @Test - public void notifyFlowCapableNodeEventTest(){ + public void testRemoveLocalBridgeRules() throws Exception { + MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleLocalInPort", Long.class, Short.class, Short.class, String.class, Long.class, String.class, boolean.class)); + MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleDropSrcIface", Long.class, Long.class, boolean.class)); + MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleLocalUcastOut", Long.class, Short.class, String.class, Long.class, String.class, boolean.class)); + MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleLocalBcastOut", Long.class, Short.class, String.class, Long.class, boolean.class)); + MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleTunnelFloodOut", Long.class, Short.class, Short.class, String.class, Long.class, boolean.class)); + - long flowId = 100; - Action action = Action.ADD; + Whitebox.invokeMethod(of13Provider, "removeLocalBridgeRules", mock(Node.class), Long.valueOf("45"), SEG_ID, MAC_ADDRESS, LOCAL_PORT); - //of13Provider.notifyFlowCapableNodeEvent(flowId, action); - //verify(mdsalConsumer, times(1)).notifyFlowCapableNodeCreateEvent(Constants.OPENFLOW_NODE_PREFIX + flowId, action); + PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleLocalInPort", anyLong(), anyShort(), anyShort(), anyString(), anyLong(), anyString(), anyBoolean()); + PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleDropSrcIface", anyLong(), anyLong(), anyBoolean()); + PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleLocalUcastOut", anyLong(), anyShort(), anyString(), anyLong(), anyString(), anyBoolean()); + PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleLocalBcastOut", anyLong(), anyShort(), anyString(), anyLong(), anyBoolean()); + PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleTunnelFloodOut", anyLong(), anyShort(), anyShort(), anyString(), anyLong(), anyBoolean()); } - /** - * Test method - * {@link OF13Provider#initializeFlowRules(Node)} - */ @Test - public void initializeFlowRulesTest(){ + public void testProgramLocalIngressTunnelBridgeRules() throws Exception { + MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleTunnelIn", Long.class, Short.class, Short.class, String.class, Long.class, boolean.class)); + MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleTunnelFloodOut", Long.class, Short.class, Short.class, String.class, Long.class, boolean.class)); - //Row row = Mockito.mock(Row.class); - //when(ovsdbConfigurationService.getTypedRow(node, Interface.class, row)).thenReturn(intf); - //ConcurrentHashMap intfs = new ConcurrentHashMap(); - //intfs.put("intf1", row); + Whitebox.invokeMethod(of13Provider, "programLocalIngressTunnelBridgeRules", mock(Node.class), Long.valueOf("45"), SEG_ID, MAC_ADDRESS, LOCAL_PORT, LOCAL_PORT); - NeutronNetwork network = Mockito.mock(NeutronNetwork.class); - when(network.getProviderNetworkType()).thenReturn(NetworkHandler.NETWORK_TYPE_VLAN); - //when(tenantNetworkManager.getTenantNetwork(intf)).thenReturn(network); - //when(ovsdbConfigurationService.getRows(node, ovsdbConfigurationService.getTableName(node, Interface.class))).thenReturn(intfs); + PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleTunnelIn", anyLong(), anyShort(), anyShort(), anyString(), anyLong(), anyBoolean()); + PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleTunnelFloodOut", anyLong(), anyShort(), anyShort(), anyString(), anyLong(), anyBoolean()); + } + + @Test + public void testProgramRemoteEgressTunnelBridgeRules() throws Exception { + MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleTunnelOut", Long.class, Short.class, Short.class, String.class, Long.class, String.class, boolean.class)); - of13Provider.initializeFlowRules(node); + Whitebox.invokeMethod(of13Provider, "programRemoteEgressTunnelBridgeRules", mock(Node.class), Long.valueOf("45"), SEG_ID, MAC_ADDRESS, LOCAL_PORT, LOCAL_PORT); - /** - * The final phase of the initialization process is to call triggerInterfaceUpdates(node) - * This must call tenantNetworkManager.getTenantNetwork(Interface) for each interface. - * Verify that this is called once since we are initializing flow rules for only one interface. - */ - /* TODO SB_MIGRATION */ - //verify(tenantNetworkManager, times(1)).getTenantNetwork(intf); + PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleTunnelOut", anyLong(), anyShort(), anyShort(), anyString(), anyLong(), anyString(), anyBoolean()); } - /** - * Test method - * {@link OF13Provider#initializeOFFlowRulesTest(Node)} - */ @Test - public void initializeOFFlowRulesTest(){ - /* TODO SB_MIGRATION */ - //of13Provider.initializeOFFlowRules(openflowNode); - //verify(connectionService, times(1)).getBridgeNodes(); + public void testRemovePerTunnelRules() throws Exception { + MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleTunnelIn", Long.class, Short.class, Short.class, String.class, Long.class, boolean.class)); + MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleTunnelFloodOut", Long.class, Short.class, Short.class, String.class, Long.class, boolean.class)); + MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleTunnelMiss", Long.class, Short.class, Short.class, String.class, boolean.class)); + MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleLocalTableMiss", Long.class, Short.class, String.class, boolean.class)); + + Whitebox.invokeMethod(of13Provider, "removePerTunnelRules", mock(Node.class), Long.valueOf("45"), SEG_ID, LOCAL_PORT); + + PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleTunnelIn", anyLong(), anyShort(), anyShort(), anyString(), anyLong(), anyBoolean()); + PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleTunnelFloodOut", anyLong(), anyShort(), anyShort(), anyString(), anyLong(), anyBoolean()); + PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleTunnelMiss", anyLong(), anyShort(), anyShort(), anyString(), anyBoolean()); + PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleLocalTableMiss", anyLong(), anyShort(), anyString(), anyBoolean()); } - /** - * Test method - * {@link OF13Provider#handleInterfaceUpdateTest(NeutronNetwork, Node, Interface)} - */ @Test - public void handleInterfaceUpdateTest(){ - NeutronNetwork network = Mockito.mock(NeutronNetwork.class); - - /** - * For Vlan network type, test ensures that all parameter validations - * passed by ensuring that ovsdbConfigurationService.getRows(node,"interface_table_name)) - * is called at least once. - */ - - when(network.getProviderNetworkType()).thenReturn(NetworkHandler.NETWORK_TYPE_VLAN); - /* TODO SB_MIGRATION */ - //this.of13Provider.handleInterfaceUpdate(network, node, intf); - //verify(ovsdbConfigurationService, times(1)).getRows(node, ovsdbConfigurationService.getTableName(node, Interface.class)); - - /** - * Ideally we want to verify that the right rule tables are constructed for - * each type of network (vlan, gre, vxlan). However, to simplify things, we just - * verify that configurationService.getTunnelEndPoint() is called twice for the appropriate - * network types and for each of the two remaining nodes. - */ - - when(network.getProviderNetworkType()).thenReturn(NetworkHandler.NETWORK_TYPE_GRE); - /* TODO SB_MIGRATION */ - //this.of13Provider.handleInterfaceUpdate(network, node, intf);this.of13Provider.handleInterfaceUpdate(network, node, intf); - /* TODO SB_MIGRATION */ - //verify(configurationService, times(4)).getTunnelEndPoint(node); - - when(network.getProviderNetworkType()).thenReturn(NetworkHandler.NETWORK_TYPE_VXLAN); - /* TODO SB_MIGRATION */ - //this.of13Provider.handleInterfaceUpdate(network, node, intf);this.of13Provider.handleInterfaceUpdate(network, node, intf); - //verify(configurationService, times(8)).getTunnelEndPoint(node); - - //assertEquals("Error, handleInterfaceUpdate(String, String) - is returning a non NULL value.", null, this.of13Provider.handleInterfaceUpdate("","")); + public void testProgramLocalVlanRules() throws Exception { + MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleLocalInPortSetVlan", Long.class, Short.class, Short.class, String.class, Long.class, String.class, boolean.class)); + MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleDropSrcIface", Long.class, Long.class, boolean.class)); + MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleLocalVlanUcastOut", Long.class, Short.class, String.class, Long.class, String.class, boolean.class)); + + Whitebox.invokeMethod(of13Provider, "programLocalVlanRules", mock(Node.class), Long.valueOf("45"), SEG_ID, MAC_ADDRESS, LOCAL_PORT); + + PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleLocalInPortSetVlan", anyLong(), anyShort(), anyShort(), anyString(), anyLong(), anyString(), anyBoolean()); + PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleDropSrcIface", anyLong(), anyLong(), anyBoolean()); + PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleLocalVlanUcastOut", anyLong(), anyShort(), anyString(), anyLong(), anyString(), anyBoolean()); } - /** - * Test method - * {@link OF13Provider#handleInterfaceDelete(String, NeutronNetwork, Node, Interface, boolean)} - */ @Test - public void handleInterfaceDeleteTest(){ - NeutronNetwork network = Mockito.mock(NeutronNetwork.class); + public void testRemoveLocalVlanRules() throws Exception { + MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleLocalInPortSetVlan", Long.class, Short.class, Short.class, String.class, Long.class, String.class, boolean.class)); + MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleDropSrcIface", Long.class, Long.class, boolean.class)); + MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleLocalVlanUcastOut", Long.class, Short.class, String.class, Long.class, String.class, boolean.class)); + Whitebox.invokeMethod(of13Provider, "programLocalVlanRules", mock(Node.class), Long.valueOf("45"), SEG_ID, MAC_ADDRESS, LOCAL_PORT); + + PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleLocalInPortSetVlan", anyLong(), anyShort(), anyShort(), anyString(), anyLong(), anyString(), anyBoolean()); + PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleDropSrcIface", anyLong(), anyLong(), anyBoolean()); + PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleLocalVlanUcastOut", anyLong(), anyShort(), anyString(), anyLong(), anyString(), anyBoolean()); + } - when(network.getProviderNetworkType()).thenReturn(NetworkHandler.NETWORK_TYPE_VLAN); - when(bridgeConfigurationManager.getAllPhysicalInterfaceNames(node)).thenReturn(Arrays.asList(new String[] { "eth0", "eth1" ,"eth2"})); - //Column typeColumn = Mockito.mock(Column.class); - //when(typeColumn.getData()).thenReturn(NetworkHandler.NETWORK_TYPE_VXLAN); - //when(intf.getTypeColumn()).thenReturn(typeColumn); + @Test + public void testProgramLocalIngressVlanRules() throws Exception { + MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleVlanIn", Long.class, Short.class, Short.class, String.class, Long.class, boolean.class)); + MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleLocalVlanBcastOut", Long.class, Short.class, String.class, Long.class, Long.class, boolean.class)); - Map options = new HashMap(); - options.put("local_ip", "192.168.0.1"); - options.put("remote_ip", "10.0.12.0"); + Whitebox.invokeMethod(of13Provider, "programLocalIngressVlanRules", mock(Node.class), Long.valueOf("45"), SEG_ID, MAC_ADDRESS, LOCAL_PORT, LOCAL_PORT); + + PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleVlanIn", anyLong(), anyShort(), anyShort(), anyString(), anyLong(), anyBoolean()); + PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleLocalVlanBcastOut", anyLong(), anyShort(), anyString(), anyLong(), anyLong(), anyBoolean()); + } - //Column> optionColumns = Mockito.mock(Column.class); - //when(intf.getOptionsColumn()).thenReturn(optionColumns); + @Test + public void testProgramRemoteEgressVlanRules() throws Exception { + MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleVlanMiss", Long.class, Short.class, Short.class, String.class, Long.class, boolean.class)); - /* TODO SB_MIGRATION */ - Status status = null;//this.of13Provider.handleInterfaceDelete("tunnel1", network, node, intf, true); + Whitebox.invokeMethod(of13Provider, "programRemoteEgressVlanRules", mock(Node.class), Long.valueOf("45"), SEG_ID, MAC_ADDRESS, LOCAL_PORT); - assertEquals("Error, handleInterfaceDelete(String, NeutronNetwor, Node, Interface, boolean) - returned the wrong status.", new Status(StatusCode.SUCCESS), status); + PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleVlanMiss", anyLong(), anyShort(), anyShort(), anyString(), anyLong(), anyBoolean()); } + @Test + public void testRemoveRemoteEgressVlanRules() throws Exception { + MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleLocalVlanBcastOut", Long.class, Short.class, String.class, Long.class, Long.class, boolean.class)); + + Whitebox.invokeMethod(of13Provider, "removeRemoteEgressVlanRules", mock(Node.class), Long.valueOf("45"), SEG_ID, MAC_ADDRESS, LOCAL_PORT, LOCAL_PORT); + + PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleLocalVlanBcastOut", anyLong(), anyShort(), anyString(), anyLong(), anyLong(), anyBoolean()); + } - /** - * Test method - * {@link OF13Provider#createNodeBuilderTest(String)} - */ @Test - public void createNodeBuilderTest(){ - final String nodeId="node1"; + public void testRemovePerVlanRules() throws Exception { + MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleVlanIn", Long.class, Short.class, Short.class, String.class, Long.class, boolean.class)); + MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "handleVlanMiss", Long.class, Short.class, Short.class, String.class, Long.class, boolean.class)); - NodeBuilder builder = new NodeBuilder(); - builder.setId(new org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId(nodeId)); - builder.setKey(new org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey(builder.getId())); + Whitebox.invokeMethod(of13Provider, "removePerVlanRules", mock(Node.class), Long.valueOf("45"), SEG_ID, LOCAL_PORT, LOCAL_PORT); - NodeBuilder builderStatic = OF13Provider.createNodeBuilder(nodeId); + PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleVlanIn", anyLong(), anyShort(), anyShort(), anyString(), anyLong(), anyBoolean()); + PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("handleVlanMiss", anyLong(), anyShort(), anyShort(), anyString(), anyLong(), anyBoolean()); + } - assertEquals("Error, createNodeBuilder() returned an invalid Node Builder Id", builderStatic.getId(), builder.getId()); - assertEquals("Error, createNodeBuilder() returned an invalid Node Builder key", builderStatic.getKey(), builder.getKey()); + @Test + public void testHandleInterfaceUpdate() throws Exception{ + NeutronNetwork neutronNetwork = mock(NeutronNetwork.class); + when(neutronNetwork.getProviderNetworkType()).thenReturn(NetworkHandler.NETWORK_TYPE_VLAN, NetworkHandler.NETWORK_TYPE_GRE); + NodeCacheManager nodeCacheManager = mock(NodeCacheManager.class); + Map nodes = new HashMap<>(); + nodes.put(mock(NodeId.class), mock(Node.class)); + when(nodeCacheManager.getOvsdbNodes()).thenReturn(nodes); + Southbound southbound = mock(Southbound.class); + when(southbound.extractBridgeOvsdbNodeId(any(Node.class))).thenReturn(mock(NodeId.class)); + when(southbound.getBridgeNode(any(Node.class), anyString())).thenReturn(mock(Node.class)); + ConfigurationService configurationService = mock(ConfigurationService.class); + when(configurationService.getIntegrationBridgeName()).thenReturn(BR_INT); + + MemberModifier.field(OF13Provider.class, "nodeCacheManager").set(of13Provider , nodeCacheManager); + MemberModifier.field(OF13Provider.class, "southbound").set(of13Provider , southbound); + MemberModifier.field(OF13Provider.class, "configurationService").set(of13Provider , configurationService); + + MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "programLocalRules", String.class, String.class, Node.class, OvsdbTerminationPointAugmentation.class)); + MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "programVlanRules", NeutronNetwork.class, Node.class, OvsdbTerminationPointAugmentation.class)); + + assertTrue("Error, did not update the interface correclty", of13Provider.handleInterfaceUpdate(neutronNetwork, mock(Node.class), mock(OvsdbTerminationPointAugmentation.class))); + PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("programLocalRules", anyString(), anyString(), any(Node.class), any(OvsdbTerminationPointAugmentation.class)); + PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("programVlanRules", any(NeutronNetwork.class), any(Node.class), any(OvsdbTerminationPointAugmentation.class)); + + when(configurationService.getTunnelEndPoint(any(Node.class))).thenReturn(mock(InetAddress.class)); + MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "addTunnelPort", Node.class, String.class, InetAddress.class, InetAddress.class)); + PowerMockito.when(of13Provider, "addTunnelPort", any(Node.class), anyString(), any(InetAddress.class), any(InetAddress.class)).thenReturn(true); + MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "programTunnelRules", String.class, String.class, InetAddress.class, Node.class, OvsdbTerminationPointAugmentation.class, boolean.class)); + + assertTrue("Error, did not update the interface correclty", of13Provider.handleInterfaceUpdate(neutronNetwork, mock(Node.class), mock(OvsdbTerminationPointAugmentation.class))); + PowerMockito.verifyPrivate(of13Provider, times(2)).invoke("addTunnelPort", any(Node.class), anyString(), any(InetAddress.class), any(InetAddress.class)); + PowerMockito.verifyPrivate(of13Provider, times(2)).invoke("programTunnelRules", anyString(), anyString(), any(InetAddress.class), any(Node.class), any(OvsdbTerminationPointAugmentation.class), anyBoolean()); } - /** - * Seeds mock dependencies into the of13Provider object - * @throws Exception - */ - private void SeedMockDependencies() throws Exception{ - - SeedClassFieldValue(of13Provider, "configurationService", configurationService); - SeedClassFieldValue(of13Provider, "bridgeConfigurationManager", bridgeConfigurationManager); - SeedClassFieldValue(of13Provider, "tenantNetworkManager", tenantNetworkManager); - /* TODO SB_MIGRATION */ - //SeedClassFieldValue(of13Provider, "ovsdbConfigurationService", ovsdbConfigurationService); - //SeedClassFieldValue(of13Provider, "connectionService", connectionService); - SeedClassFieldValue(of13Provider, "mdsalConsumer", mdsalConsumer); - SeedClassFieldValue(of13Provider, "securityServicesManager", securityServicesManager); - SeedClassFieldValue(of13Provider, "ingressAclProvider", ingressAclProvider); - SeedClassFieldValue(of13Provider, "egressAclProvider", egressAclProvider); - SeedClassFieldValue(of13Provider, "classifierProvider", classifierProvider); - SeedClassFieldValue(of13Provider, "l2ForwardingProvider", l2ForwardingProvider); - SeedClassFieldValue(of13Provider, "dataBroker", dataBroker); + private static final String INTF = "interface"; + + @SuppressWarnings("unchecked") + @Test + public void testHandlerInterfaceDelete() throws Exception { + NeutronNetwork neutronNetwork = mock(NeutronNetwork.class); + NodeCacheManager nodeCacheManager = mock(NodeCacheManager.class); + NodeId nodeId = mock(NodeId.class); + when(nodeId.getValue()).thenReturn(ID); + Node node = mock(Node.class); + when(node.getNodeId()).thenReturn(nodeId); + Map nodes = new HashMap<>(); + nodes.put(mock(NodeId.class), node); + when(nodeCacheManager.getOvsdbNodes()).thenReturn(nodes); + Southbound southbound = mock(Southbound.class); + when(southbound.extractBridgeOvsdbNodeId(any(Node.class))).thenReturn(mock(NodeId.class)); + when(southbound.isTunnel(any(OvsdbTerminationPointAugmentation.class))).thenReturn(true); + when(southbound.getOptionsValue(any(List.class), anyString())).thenReturn(IP); + OvsdbTerminationPointAugmentation intf = mock(OvsdbTerminationPointAugmentation.class); + when(intf.getName()).thenReturn(INTF); + List intfs = new ArrayList<>(); + intfs.add(INTF); + BridgeConfigurationManager bridgeConfigurationManager = mock(BridgeConfigurationManager.class); + when(bridgeConfigurationManager.getAllPhysicalInterfaceNames(any(Node.class))).thenReturn(intfs); + ConfigurationService configurationService = mock(ConfigurationService.class); + when(configurationService.getTunnelEndPoint(any(Node.class))).thenReturn(mock(InetAddress.class)); + + PowerMockito.mockStatic(InetAddress.class); + PowerMockito.when(InetAddress.getByName(anyString())).thenReturn(mock(InetAddress.class)); + + PowerMockito.mockStatic(MdsalHelper.class); + PowerMockito.when(MdsalHelper.createOvsdbInterfaceType(any(Class.class))).thenReturn(INTF); + + MemberModifier.field(OF13Provider.class, "nodeCacheManager").set(of13Provider , nodeCacheManager); + MemberModifier.field(OF13Provider.class, "southbound").set(of13Provider , southbound); + MemberModifier.field(OF13Provider.class, "bridgeConfigurationManager").set(of13Provider , bridgeConfigurationManager); + MemberModifier.field(OF13Provider.class, "configurationService").set(of13Provider , configurationService); + + MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "deleteTunnelPort", Node.class, String.class, InetAddress.class, InetAddress.class)); + + assertTrue("Error, did not delete the interface correclty", of13Provider.handleInterfaceDelete(TYPE, neutronNetwork, mock(Node.class), intf, false)); + PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("deleteTunnelPort", any(Node.class), anyString(), any(InetAddress.class), any(InetAddress.class)); + + when(southbound.isTunnel(any(OvsdbTerminationPointAugmentation.class))).thenReturn(false); + MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "deletePhysicalPort", Node.class, String.class)); + + assertTrue("Error, did not delete the interface correclty", of13Provider.handleInterfaceDelete(TYPE, neutronNetwork, mock(Node.class), intf, false)); + PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("deletePhysicalPort", any(Node.class), anyString()); + + intfs.clear(); + MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "removeLocalRules", String.class, String.class, Node.class, OvsdbTerminationPointAugmentation.class)); + MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "removeVlanRules", NeutronNetwork.class, Node.class, OvsdbTerminationPointAugmentation.class, boolean.class)); + when(neutronNetwork.getProviderNetworkType()).thenReturn(NetworkHandler.NETWORK_TYPE_VLAN); + + assertTrue("Error, did not delete the interface correclty", of13Provider.handleInterfaceDelete(TYPE, neutronNetwork, mock(Node.class), intf, false)); + PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("removeLocalRules", anyString(), anyString(), any(Node.class), any(OvsdbTerminationPointAugmentation.class)); + PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("removeVlanRules", any(NeutronNetwork.class), any(Node.class), any(OvsdbTerminationPointAugmentation.class), anyBoolean()); + + when(neutronNetwork.getProviderNetworkType()).thenReturn(NetworkHandler.NETWORK_TYPE_GRE); + when(southbound.getBridgeNode(any(Node.class), anyString())).thenReturn(node); + MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "removeTunnelRules", String.class, String.class, InetAddress.class, Node.class, OvsdbTerminationPointAugmentation.class, boolean.class, boolean.class)); + + assertTrue("Error, did not delete the interface correclty", of13Provider.handleInterfaceDelete(TYPE, neutronNetwork, node, intf, false)); + PowerMockito.verifyPrivate(of13Provider, times(2)).invoke("removeTunnelRules", anyString(), anyString(), any(InetAddress.class), any(Node.class), any(OvsdbTerminationPointAugmentation.class), any(boolean.class), any(boolean.class)); } - /** - * Get the specified field from OF13Provider using reflection - * @param instance - the class instance - * @param fieldName - the field to retrieve - * - * @return the desired field - */ - private Object getClassField(OF13Provider instance, String fieldName) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException{ - Field field = OF13Provider.class.getDeclaredField(fieldName); - field.setAccessible(true); - return field.get(instance); + // Problem with methods signatures: initializeFlowRules(Node) has the same signature than initializeFlowRules(Node, String) +// @Test +// public void testInitializeFlowRules() throws Exception { +// MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "initializeFlowRules", Node.class, String.class)); +// MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "triggerInterfaceUpdates", Node.class)); +// +// of13Provider.initializeFlowRules(mock(Node.class)); +// +// PowerMockito.verifyPrivate(of13Provider, times(2)).invoke("initializeFlowRules", any(Node.class), anyString()); +// PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("triggerInterfaceUpdates", any(Node.class)); +// } + + @Test + public void testInitializeOFFlowRule() throws Exception{ + Southbound southbound = mock(Southbound.class); + when(southbound.getBridgeName(any(Node.class))).thenReturn(BR_INT); + ConfigurationService configurationService = mock(ConfigurationService.class); + when(configurationService.getIntegrationBridgeName()).thenReturn(BR_INT); + + MemberModifier.field(OF13Provider.class, "southbound").set(of13Provider , southbound); + MemberModifier.field(OF13Provider.class, "configurationService").set(of13Provider , configurationService); + + MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "initializeFlowRules", Node.class, String.class)); + MemberModifier.suppress(MemberMatcher.method(OF13Provider.class, "triggerInterfaceUpdates", Node.class)); + + of13Provider.initializeOFFlowRules(mock(Node.class)); + + PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("initializeFlowRules", any(Node.class), anyString()); + PowerMockito.verifyPrivate(of13Provider, times(1)).invoke("triggerInterfaceUpdates", any(Node.class)); + } + + @Test + public void testSetDependencies() throws Exception { + ConfigurationService configurationService = mock(ConfigurationService.class); + TenantNetworkManager tenantNetworkManager = mock(TenantNetworkManager.class); + BridgeConfigurationManager bridgeConfigurationManager = mock(BridgeConfigurationManager.class); + NodeCacheManager nodeCacheManager = mock(NodeCacheManager.class); + ClassifierProvider classifierProvider = mock(ClassifierProvider.class); + IngressAclProvider ingressAclProvider = mock(IngressAclProvider.class); + EgressAclProvider egressAclProvider = mock(EgressAclProvider.class); + L2ForwardingProvider l2ForwardingProvider = mock(L2ForwardingProvider.class); + SecurityServicesManager securityServicesManager = mock(SecurityServicesManager.class); + Southbound southbound = mock(Southbound.class); + + PowerMockito.mockStatic(ServiceHelper.class); + PowerMockito.when(ServiceHelper.getGlobalInstance(ConfigurationService.class, of13Provider)).thenReturn(configurationService); + PowerMockito.when(ServiceHelper.getGlobalInstance(TenantNetworkManager.class, of13Provider)).thenReturn(tenantNetworkManager); + PowerMockito.when(ServiceHelper.getGlobalInstance(BridgeConfigurationManager.class, of13Provider)).thenReturn(bridgeConfigurationManager); + PowerMockito.when(ServiceHelper.getGlobalInstance(NodeCacheManager.class, of13Provider)).thenReturn(nodeCacheManager); + PowerMockito.when(ServiceHelper.getGlobalInstance(ClassifierProvider.class, of13Provider)).thenReturn(classifierProvider); + PowerMockito.when(ServiceHelper.getGlobalInstance(IngressAclProvider.class, of13Provider)).thenReturn(ingressAclProvider); + PowerMockito.when(ServiceHelper.getGlobalInstance(EgressAclProvider.class, of13Provider)).thenReturn(egressAclProvider); + PowerMockito.when(ServiceHelper.getGlobalInstance(L2ForwardingProvider.class, of13Provider)).thenReturn(l2ForwardingProvider); + PowerMockito.when(ServiceHelper.getGlobalInstance(SecurityServicesManager.class, of13Provider)).thenReturn(securityServicesManager); + PowerMockito.when(ServiceHelper.getGlobalInstance(Southbound.class, of13Provider)).thenReturn(southbound); + + of13Provider.setDependencies(mock(BundleContext.class), mock(ServiceReference.class)); + + assertEquals("Error, did not return the correct object", getField("configurationService"), configurationService); + assertEquals("Error, did not return the correct object", getField("tenantNetworkManager"), tenantNetworkManager); + assertEquals("Error, did not return the correct object", getField("bridgeConfigurationManager"), bridgeConfigurationManager); + assertEquals("Error, did not return the correct object", getField("nodeCacheManager"), nodeCacheManager); + assertEquals("Error, did not return the correct object", getField("classifierProvider"), classifierProvider); + assertEquals("Error, did not return the correct object", getField("ingressAclProvider"), ingressAclProvider); + assertEquals("Error, did not return the correct object", getField("egressAclProvider"), egressAclProvider); + assertEquals("Error, did not return the correct object", getField("l2ForwardingProvider"), l2ForwardingProvider); + assertEquals("Error, did not return the correct object", getField("securityServicesManager"), securityServicesManager); + assertEquals("Error, did not return the correct object", getField("southbound"), southbound); } - /** - * Sets the internal value of a field from OF13Provider using reflection - * @param instance - * @param fieldName - * @param value - * @throws NoSuchFieldException - * @throws SecurityException - * @throws IllegalArgumentException - * @throws IllegalAccessException - */ - private void SeedClassFieldValue(OF13Provider instance, String fieldName, Object value)throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException{ + @SuppressWarnings("unchecked") + @Test + public void testSetDependenciesObject() throws Exception{ + NetworkingProviderManager networkingProviderManager = mock(NetworkingProviderManager.class); + BundleContext bundleContext = mock(BundleContext.class); + when(bundleContext.getServiceReference(NetworkingProvider.class.getName())).thenReturn(mock(ServiceReference.class)); + + MemberModifier.field(OF13Provider.class, "bundleContext").set(of13Provider, bundleContext); + + of13Provider.setDependencies(networkingProviderManager); + verify(networkingProviderManager).providerAdded(any(ServiceReference.class), same(of13Provider)); + } + private Object getField(String fieldName) throws Exception { Field field = OF13Provider.class.getDeclaredField(fieldName); field.setAccessible(true); - field.set(instance, value); + return field.get(of13Provider); } -} +} \ No newline at end of file