Update OF13Provider UT 08/23708/2
authorAlexis de Talhouët <adetalhouet@inocybe.com>
Thu, 2 Jul 2015 20:57:06 +0000 (16:57 -0400)
committerAlexis de Talhouët <adetalhouet@inocybe.com>
Fri, 3 Jul 2015 15:33:04 +0000 (11:33 -0400)
Change-Id: Idba5421b9a4f6e63e713f368c8dd3011c5c11819
Signed-off-by: Alexis de Talhouët <adetalhouet@inocybe.com>
openstack/net-virt-providers/src/test/java/org/opendaylight/ovsdb/openstack/netvirt/providers/openflow13/OF13ProviderTest.java

index dd0ba0b66c09bdad0c1ade159a7a778a81045916..580fa6c3f150935dd3640a5873a6eebd05200ff8 100644 (file)
 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;
 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.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.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 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<Node> 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<String, Row> bridgeTable = new ConcurrentHashMap();
-        bridgeTable.put(key, new Row());
-
-        Row bridgeRow = Mockito.mock(Row.class);
-        Bridge bridge = Mockito.mock(Bridge.class);
-
-
-        Set<String> paths = new HashSet<String>(Arrays.asList(new String[] { "100"}));
-        Column<GenericTableSchema, Set<String>> 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<GenericTableSchema, Set<UUID>> itfaceColumns = mock(Column.class);
-        when(port.getInterfacesColumn()).thenReturn(itfaceColumns);
-        Set<UUID> 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<Long> ports = new HashSet<Long>(Arrays.asList(new Long[] { 21L, 23L ,80L}));
-        Column<GenericTableSchema, Set<Long>> openFlowPortColumns = Mockito.mock(Column.class);
-        when(openFlowPortColumns.getData()).thenReturn(ports);
-
-        when(intf.getName()).thenReturn("intf1");
-        when(intf.getOpenFlowPortColumn()).thenReturn(openFlowPortColumns);
-
-        Column<GenericTableSchema, Map<String, String>> externalIdColumns = mock(Column.class);
-        Map<String, String> 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));
+    }
 
-    /**
-     * 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 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());
+    }
+
+    @Test
+    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<String, Row> 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());
+    }
 
-        of13Provider.initializeFlowRules(node);
+    @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));
+
+        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);
 
-        when(network.getProviderNetworkType()).thenReturn(NetworkHandler.NETWORK_TYPE_VLAN);
-        when(bridgeConfigurationManager.getAllPhysicalInterfaceNames(node)).thenReturn(Arrays.asList(new String[] { "eth0", "eth1" ,"eth2"}));
+        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());
+    }
 
-        //Column<GenericTableSchema, String> typeColumn = Mockito.mock(Column.class);
-        //when(typeColumn.getData()).thenReturn(NetworkHandler.NETWORK_TYPE_VXLAN);
-        //when(intf.getTypeColumn()).thenReturn(typeColumn);
 
-        Map<String, String> options = new HashMap();
-        options.put("local_ip", "192.168.0.1");
-        options.put("remote_ip", "10.0.12.0");
+    @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));
+
+        Whitebox.invokeMethod(of13Provider, "programLocalIngressVlanRules", mock(Node.class), Long.valueOf("45"), SEG_ID, MAC_ADDRESS, LOCAL_PORT, LOCAL_PORT);
 
-        //Column<GenericTableSchema, Map<String, String>> optionColumns = Mockito.mock(Column.class);
-        //when(intf.getOptionsColumn()).thenReturn(optionColumns);
+        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());
+    }
+
+    @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<NodeId, Node> nodes = new HashMap<NodeId, Node>();
+        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<NodeId, Node> nodes = new HashMap<NodeId, Node>();
+        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<String> intfs = new ArrayList<String>();
+        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);
+        assertEquals("Error, did not return the correct object", getField("networkingProviderManager"), networkingProviderManager);
+}
+
+    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