Upgrade ietf-{inet,yang}-types to 2013-07-15
[ovsdb.git] / southbound / southbound-impl / src / test / java / org / opendaylight / ovsdb / southbound / OvsdbConnectionManagerTest.java
index c49a3daec20a2e1053b425143252770189dbd663..9a67daa54c23e15a470b3f7dd2541bcd38f0c4b8 100644 (file)
@@ -13,13 +13,20 @@ import static org.mockito.Matchers.any;
 import static org.mockito.Matchers.anyInt;
 import static org.mockito.Mockito.doNothing;
 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 static org.powermock.api.support.membermodification.MemberMatcher.field;
+import static org.powermock.api.support.membermodification.MemberModifier.suppress;
 
+import com.google.common.base.Optional;
+import com.google.common.util.concurrent.CheckedFuture;
 import java.net.InetAddress;
+import java.util.Arrays;
+import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
-
+import java.util.concurrent.TimeUnit;
 import org.junit.Before;
 import org.junit.Ignore;
 import org.junit.Test;
@@ -27,19 +34,22 @@ import org.junit.runner.RunWith;
 import org.mockito.Mock;
 import org.mockito.Mockito;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
 import org.opendaylight.controller.md.sal.common.api.clustering.Entity;
+import org.opendaylight.controller.md.sal.common.api.clustering.EntityOwnershipChange;
 import org.opendaylight.controller.md.sal.common.api.clustering.EntityOwnershipService;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.ovsdb.lib.OvsdbClient;
 import org.opendaylight.ovsdb.lib.OvsdbConnection;
 import org.opendaylight.ovsdb.lib.impl.OvsdbConnectionService;
+import org.opendaylight.ovsdb.southbound.reconciliation.ReconciliationManager;
 import org.opendaylight.ovsdb.southbound.transactions.md.TransactionCommand;
 import org.opendaylight.ovsdb.southbound.transactions.md.TransactionInvoker;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.PortNumber;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.PortNumber;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAttributes;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeAugmentation;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.ConnectionInfo;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.ConnectionInfoBuilder;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.powermock.api.mockito.PowerMockito;
@@ -49,18 +59,18 @@ import org.powermock.core.classloader.annotations.PrepareForTest;
 import org.powermock.modules.junit4.PowerMockRunner;
 import org.powermock.reflect.Whitebox;
 
-import com.google.common.base.Optional;
-
-@PrepareForTest({SouthboundMapper.class, OvsdbConnectionManager.class, OvsdbConnectionService.class, InstanceIdentifier.class, SouthboundUtil.class, Optional.class})
 @RunWith(PowerMockRunner.class)
+@PrepareForTest({ SouthboundMapper.class, OvsdbConnectionManager.class, OvsdbConnectionService.class,
+        InstanceIdentifier.class, SouthboundUtil.class, Optional.class })
 public class OvsdbConnectionManagerTest {
 
-    @Mock private OvsdbConnectionManager ovsdbConnectionManager;
+    @Mock private OvsdbConnectionManager ovsdbConnManager;
     @Mock private DataBroker db;
     @Mock private TransactionInvoker txInvoker;
     @Mock private EntityOwnershipService entityOwnershipService;
     @Mock private OvsdbConnection ovsdbConnection;
     @Mock private OvsdbClient externalClient;
+    @Mock private ReconciliationManager reconciliationManager;
     private Map<ConnectionInfo,OvsdbConnectionInstance> clients;
     private Map<ConnectionInfo,InstanceIdentifier<Node>> instanceIdentifiers;
     private Map<Entity, OvsdbConnectionInstance> entityConnectionMap;
@@ -69,12 +79,12 @@ public class OvsdbConnectionManagerTest {
 
     @Before
     public void setUp() throws Exception {
-        ovsdbConnectionManager = PowerMockito.mock(OvsdbConnectionManager.class, Mockito.CALLS_REAL_METHODS);
-        MemberModifier.field(OvsdbConnectionManager.class, "db").set(ovsdbConnectionManager, db);
-        MemberModifier.field(OvsdbConnectionManager.class, "txInvoker").set(ovsdbConnectionManager, txInvoker);
-        MemberModifier.field(OvsdbConnectionManager.class, "entityOwnershipService").set(ovsdbConnectionManager, entityOwnershipService);
-        MemberModifier.field(OvsdbConnectionManager.class, "ovsdbConnection")
-                .set(ovsdbConnectionManager, ovsdbConnection);
+        ovsdbConnManager = PowerMockito.mock(OvsdbConnectionManager.class, Mockito.CALLS_REAL_METHODS);
+        field(OvsdbConnectionManager.class, "db").set(ovsdbConnManager, db);
+        field(OvsdbConnectionManager.class, "txInvoker").set(ovsdbConnManager, txInvoker);
+        field(OvsdbConnectionManager.class, "entityOwnershipService").set(ovsdbConnManager, entityOwnershipService);
+        field(OvsdbConnectionManager.class, "reconciliationManager").set(ovsdbConnManager, reconciliationManager);
+        field(OvsdbConnectionManager.class, "ovsdbConnection").set(ovsdbConnManager, ovsdbConnection);
         entityConnectionMap = new ConcurrentHashMap<>();
 
         externalClient = mock(OvsdbClient.class, Mockito.RETURNS_DEEP_STUBS);
@@ -82,75 +92,101 @@ public class OvsdbConnectionManagerTest {
         when(externalClient.getConnectionInfo().getRemotePort()).thenReturn(8080);
         when(externalClient.getConnectionInfo().getLocalAddress()).thenReturn(mock(InetAddress.class));
         when(externalClient.getConnectionInfo().getLocalPort()).thenReturn(8080);
+        List<String> databases = Arrays.asList("Open_vSwitch");
+        when(externalClient.getDatabases().get(1000, TimeUnit.MILLISECONDS)).thenReturn(databases);
 
         PowerMockito.mockStatic(SouthboundUtil.class);
         when(SouthboundUtil.connectionInfoToString(any(ConnectionInfo.class))).thenReturn("192.18.120.31:8080");
     }
+
     @Test
     public void testConnected() throws Exception {
         OvsdbConnectionInstance client = mock(OvsdbConnectionInstance.class);
-        MemberModifier.suppress(MemberMatcher.method(OvsdbConnectionManager.class, "connectedButCallBacksNotRegistered", OvsdbClient.class));
-        when(ovsdbConnectionManager.connectedButCallBacksNotRegistered(any(OvsdbClient.class))).thenReturn(client);
+        suppress(MemberMatcher.method(OvsdbConnectionManager.class, "connectedButCallBacksNotRegistered",
+                OvsdbClient.class));
+        when(ovsdbConnManager.connectedButCallBacksNotRegistered(any(OvsdbClient.class))).thenReturn(client);
         doNothing().when(client).registerCallbacks();
 
         //TODO: Write unit tests for EntityOwnershipService
         InstanceIdentifier<Node> iid = mock(InstanceIdentifier.class);
         when(client.getInstanceIdentifier()).thenReturn(iid);
-        MemberModifier.field(OvsdbConnectionManager.class, "entityConnectionMap").set(ovsdbConnectionManager, entityConnectionMap);
-        MemberModifier.suppress(MemberMatcher.method(OvsdbConnectionManager.class, "getEntityFromConnectionInstance", OvsdbConnectionInstance.class));
+        field(OvsdbConnectionManager.class, "entityConnectionMap").set(ovsdbConnManager, entityConnectionMap);
+        suppress(MemberMatcher.method(OvsdbConnectionManager.class, "getEntityFromConnectionInstance",
+                OvsdbConnectionInstance.class));
 
         //TODO: Write unit tests for entity ownership service related code.
-        MemberModifier.suppress(MemberMatcher.method(OvsdbConnectionManager.class, "registerEntityForOwnership", OvsdbConnectionInstance.class));
-        ovsdbConnectionManager.connected(externalClient);
+        suppress(MemberMatcher.method(OvsdbConnectionManager.class, "registerEntityForOwnership",
+                OvsdbConnectionInstance.class));
+
+        ReadOnlyTransaction tx = mock(ReadOnlyTransaction.class);
+        when(db.newReadOnlyTransaction()).thenReturn(tx);
+        when(tx.read(any(LogicalDatastoreType.class), any(InstanceIdentifier.class)))
+                .thenReturn(mock(CheckedFuture.class));
+        when(client.getInstanceIdentifier()).thenReturn(mock(InstanceIdentifier.class));
+
+        ovsdbConnManager.connected(externalClient);
     }
 
     @SuppressWarnings("unchecked")
     @Test
     public void testConnectedButCallBacksNotRegistered() throws Exception {
-        OvsdbConnectionInstance client = mock(OvsdbConnectionInstance.class);
         ConnectionInfo key = mock(ConnectionInfo.class);
 
         PowerMockito.mockStatic(SouthboundMapper.class);
         when(SouthboundMapper.createConnectionInfo(any(OvsdbClient.class))).thenReturn(key);
 
-        MemberModifier.suppress(MemberMatcher.method(OvsdbConnectionManager.class, "getInstanceIdentifier", ConnectionInfo.class));
+        suppress(MemberMatcher.method(OvsdbConnectionManager.class, "getInstanceIdentifier", ConnectionInfo.class));
         InstanceIdentifier<Node> iid = mock(InstanceIdentifier.class);
-        when(ovsdbConnectionManager.getInstanceIdentifier(key)).thenReturn(iid);
+        when(ovsdbConnManager.getInstanceIdentifier(key)).thenReturn(iid);
 
-        MemberModifier.suppress(MemberMatcher.method(OvsdbConnectionManager.class, "getConnectionInstance", ConnectionInfo.class));
-        when(ovsdbConnectionManager.getConnectionInstance(key)).thenReturn(null);
+        suppress(MemberMatcher.method(OvsdbConnectionManager.class, "getConnectionInstance", ConnectionInfo.class));
+        when(ovsdbConnManager.getConnectionInstance(key)).thenReturn(null);
 
-        MemberModifier.suppress(MemberMatcher.method(OvsdbConnectionManager.class, "putConnectionInstance", ConnectionInfo.class, OvsdbConnectionInstance.class));
+        OvsdbConnectionInstance client = mock(OvsdbConnectionInstance.class);
+        suppress(MemberMatcher.method(OvsdbConnectionManager.class, "putConnectionInstance", ConnectionInfo.class,
+                OvsdbConnectionInstance.class));
         doNothing().when(client).createTransactInvokers();
-        PowerMockito.whenNew(OvsdbConnectionInstance.class).
-        withArguments(any(ConnectionInfo.class), any(OvsdbClient.class),any(TransactionInvoker.class), any(InstanceIdentifier.class)).
-        thenReturn(client);
+        PowerMockito.whenNew(OvsdbConnectionInstance.class).withArguments(any(ConnectionInfo.class),
+                any(OvsdbClient.class), any(TransactionInvoker.class), any(InstanceIdentifier.class))
+                .thenReturn(client);
 
-        assertEquals("Error, did not receive correct OvsdbConnectionInstance object", client, ovsdbConnectionManager.connectedButCallBacksNotRegistered(externalClient));
+        assertEquals("Error, did not receive correct OvsdbConnectionInstance object", client,
+                ovsdbConnManager.connectedButCallBacksNotRegistered(externalClient));
     }
 
     @Test
     public void testDisconnected() throws Exception {
-        OvsdbConnectionInstance ovsdbConnectionInstance = mock(OvsdbConnectionInstance.class);
-
         ConnectionInfo key = mock(ConnectionInfo.class);
         PowerMockito.mockStatic(SouthboundMapper.class);
         when(SouthboundMapper.createConnectionInfo(any(OvsdbClient.class))).thenReturn(key);
 
+        OvsdbConnectionInstance ovsdbConnectionInstance = mock(OvsdbConnectionInstance.class);
         clients = new ConcurrentHashMap<>();
         clients.put(key, ovsdbConnectionInstance);
-        MemberModifier.field(OvsdbConnectionManager.class, "clients").set(ovsdbConnectionManager, clients);
+        MemberModifier.field(OvsdbConnectionManager.class, "clients").set(ovsdbConnManager, clients);
 
-        MemberModifier.suppress(MemberMatcher.method(OvsdbConnectionManager.class, "getConnectionInstance", ConnectionInfo.class));
-        when(ovsdbConnectionManager.getConnectionInstance(any(ConnectionInfo.class))).thenReturn(ovsdbConnectionInstance);
+        suppress(MemberMatcher.method(OvsdbConnectionManager.class, "getConnectionInstance", ConnectionInfo.class));
+        when(ovsdbConnManager.getConnectionInstance(any(ConnectionInfo.class))).thenReturn(ovsdbConnectionInstance);
         doNothing().when(txInvoker).invoke(any(TransactionCommand.class));
 
         when(SouthboundMapper.suppressLocalIpPort(any(ConnectionInfo.class))).thenReturn(key);
 
-      //TODO: Write unit tests for EntityOwnershipService
-        MemberModifier.suppress(MemberMatcher.method(OvsdbConnectionManager.class, "unregisterEntityForOwnership", OvsdbConnectionInstance.class));
-        ovsdbConnectionManager.disconnected(externalClient);
-        Map<ConnectionInfo,OvsdbConnectionInstance> testClients = Whitebox.getInternalState(ovsdbConnectionManager, "clients");
+        // TODO: Write unit tests for EntityOwnershipService
+        suppress(MemberMatcher.method(OvsdbConnectionManager.class, "unregisterEntityForOwnership",
+                OvsdbConnectionInstance.class));
+        instanceIdentifiers = new ConcurrentHashMap<>();
+        field(OvsdbConnectionManager.class, "instanceIdentifiers").set(ovsdbConnManager, instanceIdentifiers);
+
+        MemberModifier.suppress(MemberMatcher.method(OvsdbConnectionManager.class, "reconcileConnection",
+                InstanceIdentifier.class, OvsdbNodeAugmentation.class));
+        ReadOnlyTransaction tx = mock(ReadOnlyTransaction.class);
+        when(db.newReadOnlyTransaction()).thenReturn(tx);
+        when(tx.read(any(LogicalDatastoreType.class), any(InstanceIdentifier.class)))
+                .thenReturn(mock(CheckedFuture.class));
+        when(ovsdbConnectionInstance.getInstanceIdentifier()).thenReturn(mock(InstanceIdentifier.class));
+        ovsdbConnManager.disconnected(externalClient);
+        Map<ConnectionInfo, OvsdbConnectionInstance> testClients = Whitebox.getInternalState(ovsdbConnManager,
+                "clients");
         assertEquals("Error, size of the hashmap is incorrect", 0, testClients.size());
     }
 
@@ -159,27 +195,29 @@ public class OvsdbConnectionManagerTest {
         OvsdbNodeAugmentation ovsdbNode = mock(OvsdbNodeAugmentation.class);
         ConnectionInfo connectionInfo = mock(ConnectionInfo.class);
         when(ovsdbNode.getConnectionInfo()).thenReturn(connectionInfo);
-        MemberModifier.suppress(MemberMatcher.method(OvsdbConnectionManager.class, "getConnectionInstance", ConnectionInfo.class));
+        suppress(MemberMatcher.method(OvsdbConnectionManager.class, "getConnectionInstance", ConnectionInfo.class));
         OvsdbConnectionInstance ovsdbConnectionInstance = mock(OvsdbConnectionInstance.class);
-        when(ovsdbConnectionManager.getConnectionInstance(any(ConnectionInfo.class))).thenReturn(ovsdbConnectionInstance);
+        when(ovsdbConnManager.getConnectionInstance(any(ConnectionInfo.class))).thenReturn(ovsdbConnectionInstance);
+        when(ovsdbConnectionInstance.getInstanceIdentifier()).thenReturn(mock(InstanceIdentifier.class));
 
-        MemberModifier.suppress(MemberMatcher.method(OvsdbConnectionManager.class, "removeInstanceIdentifier", ConnectionInfo.class));
+        suppress(MemberMatcher.method(OvsdbConnectionManager.class, "removeInstanceIdentifier", ConnectionInfo.class));
 
-        //TODO: Write unit tests for entity ownership service related code.
-        MemberModifier.suppress(MemberMatcher.method(OvsdbConnectionManager.class, "unregisterEntityForOwnership", OvsdbConnectionInstance.class));
-        ovsdbConnectionManager.disconnect(ovsdbNode);
+        // TODO: Write unit tests for entity ownership service related code.
+        suppress(MemberMatcher.method(OvsdbConnectionManager.class, "unregisterEntityForOwnership",
+                OvsdbConnectionInstance.class));
+        ovsdbConnManager.disconnect(ovsdbNode);
         verify((OvsdbClient)ovsdbConnectionInstance).disconnect();
     }
 
-    @Ignore
     @Test
+    @Ignore
     public void testInit() {
-        ConnectionInfo key = mock(ConnectionInfo.class);
-        MemberModifier.suppress(MemberMatcher.method(OvsdbConnectionManager.class, "getConnectionInstance", ConnectionInfo.class));
+        mock(ConnectionInfo.class);
+        suppress(MemberMatcher.method(OvsdbConnectionManager.class, "getConnectionInstance", ConnectionInfo.class));
         OvsdbConnectionInstance ovsdbConnectionInstance = mock(OvsdbConnectionInstance.class);
-        when(ovsdbConnectionManager.getConnectionInstance(any(ConnectionInfo.class))).thenReturn(ovsdbConnectionInstance);
+        when(ovsdbConnManager.getConnectionInstance(any(ConnectionInfo.class))).thenReturn(ovsdbConnectionInstance);
 
-        //client not null
+        // client not null
         // ovsdbConnectionManager.init(key);
         verify(ovsdbConnectionInstance).registerCallbacks();
     }
@@ -193,8 +231,8 @@ public class OvsdbConnectionManagerTest {
         clients = new ConcurrentHashMap<>();
         clients.put(key1, ovsdbConnectionInstance1);
         clients.put(key2, ovsdbConnectionInstance2);
-        MemberModifier.field(OvsdbConnectionManager.class, "clients").set(ovsdbConnectionManager, clients);
-        ovsdbConnectionManager.close();
+        MemberModifier.field(OvsdbConnectionManager.class, "clients").set(ovsdbConnManager, clients);
+        ovsdbConnManager.close();
         verify(ovsdbConnectionInstance1).disconnect();
         verify(ovsdbConnectionInstance2).disconnect();
     }
@@ -203,45 +241,49 @@ public class OvsdbConnectionManagerTest {
     public void testPutAndGetConnectionInstance() throws Exception {
         ConnectionInfo key = mock(ConnectionInfo.class);
         ConnectionInfo connectionInfo = mock(ConnectionInfo.class);
-        OvsdbConnectionInstance instance = mock(OvsdbConnectionInstance.class);
         PowerMockito.mockStatic(SouthboundMapper.class);
         when(SouthboundMapper.suppressLocalIpPort(key)).thenReturn(connectionInfo);
 
         clients = new ConcurrentHashMap<>();
-        MemberModifier.field(OvsdbConnectionManager.class, "clients").set(ovsdbConnectionManager, clients);
+        MemberModifier.field(OvsdbConnectionManager.class, "clients").set(ovsdbConnManager, clients);
 
-        //Test putConnectionInstance()
-        Whitebox.invokeMethod(ovsdbConnectionManager, "putConnectionInstance", key, instance);
-        Map<ConnectionInfo,OvsdbConnectionInstance> testClients = Whitebox.getInternalState(ovsdbConnectionManager, "clients");
+        // Test putConnectionInstance()
+        OvsdbConnectionInstance instance = mock(OvsdbConnectionInstance.class);
+        Whitebox.invokeMethod(ovsdbConnManager, "putConnectionInstance", key, instance);
+        Map<ConnectionInfo, OvsdbConnectionInstance> testClients = Whitebox.getInternalState(ovsdbConnManager,
+                "clients");
         assertEquals("Error, size of the hashmap is incorrect", 1, testClients.size());
 
-        //Test getConnectionInstance(ConnectionInfo key)
-        assertEquals("Error, returned incorrect OvsdbConnectionInstance object", instance, ovsdbConnectionManager.getConnectionInstance(key));
+        // Test getConnectionInstance(ConnectionInfo key)
+        assertEquals("Error, returned incorrect OvsdbConnectionInstance object", instance,
+                ovsdbConnManager.getConnectionInstance(key));
     }
 
-    @SuppressWarnings("unchecked")
     @Test
+    @SuppressWarnings("unchecked")
     public void testPutandGetInstanceIdentifier() throws Exception {
         ConnectionInfo key = mock(ConnectionInfo.class);
         ConnectionInfo connectionInfo = mock(ConnectionInfo.class);
-        InstanceIdentifier<Node> iid = mock(InstanceIdentifier.class);
         PowerMockito.mockStatic(SouthboundMapper.class);
         when(SouthboundMapper.suppressLocalIpPort(key)).thenReturn(connectionInfo);
 
         instanceIdentifiers = new ConcurrentHashMap<>();
-        MemberModifier.field(OvsdbConnectionManager.class, "instanceIdentifiers").set(ovsdbConnectionManager, instanceIdentifiers);
+        field(OvsdbConnectionManager.class, "instanceIdentifiers").set(ovsdbConnManager, instanceIdentifiers);
 
         //Test putInstanceIdentifier()
-        Whitebox.invokeMethod(ovsdbConnectionManager, "putInstanceIdentifier", key, iid);
-        Map<ConnectionInfo,OvsdbConnectionInstance> testIids = Whitebox.getInternalState(ovsdbConnectionManager, "instanceIdentifiers");
+        Whitebox.invokeMethod(ovsdbConnManager, "putInstanceIdentifier", key, iid);
+        Map<ConnectionInfo, OvsdbConnectionInstance> testIids = Whitebox.getInternalState(ovsdbConnManager,
+                "instanceIdentifiers");
         assertEquals("Error, size of the hashmap is incorrect", 1, testIids.size());
 
         //Test getInstanceIdentifier()
-        assertEquals("Error returning correct InstanceIdentifier object",iid , ovsdbConnectionManager.getInstanceIdentifier(key));
+        assertEquals("Error returning correct InstanceIdentifier object", iid,
+                ovsdbConnManager.getInstanceIdentifier(key));
 
         //Test removeInstanceIdentifier()
-        Whitebox.invokeMethod(ovsdbConnectionManager, "removeInstanceIdentifier", key);
-        Map<ConnectionInfo,OvsdbConnectionInstance> testRemoveIids = Whitebox.getInternalState(ovsdbConnectionManager, "instanceIdentifiers");
+        Whitebox.invokeMethod(ovsdbConnManager, "removeInstanceIdentifier", key);
+        Map<ConnectionInfo, OvsdbConnectionInstance> testRemoveIids = Whitebox.getInternalState(ovsdbConnManager,
+                "instanceIdentifiers");
         assertEquals("Error, size of the hashmap is incorrect", 0, testRemoveIids.size());
     }
 
@@ -251,21 +293,22 @@ public class OvsdbConnectionManagerTest {
 
         //Test getClient(ConnectionInfo connectionInfo)
         ConnectionInfo key = mock(ConnectionInfo.class);
-        MemberModifier.suppress(MemberMatcher.method(OvsdbConnectionManager.class, "getConnectionInstance", ConnectionInfo.class));
-        when(ovsdbConnectionManager.getConnectionInstance(key)).thenReturn((OvsdbConnectionInstance)ovsdbClient);
-        assertEquals("Error getting correct OvsdbClient object", ovsdbClient, ovsdbConnectionManager.getClient(key));
+        suppress(MemberMatcher.method(OvsdbConnectionManager.class, "getConnectionInstance", ConnectionInfo.class));
+        when(ovsdbConnManager.getConnectionInstance(key)).thenReturn((OvsdbConnectionInstance)ovsdbClient);
+        assertEquals("Error getting correct OvsdbClient object", ovsdbClient, ovsdbConnManager.getClient(key));
 
         //Test getClient(OvsdbBridgeAttributes mn)
         OvsdbBridgeAttributes mn = mock(OvsdbBridgeAttributes.class);
-        MemberModifier.suppress(MemberMatcher.method(OvsdbConnectionManager.class, "getConnectionInstance", OvsdbBridgeAttributes.class));
-        when(ovsdbConnectionManager.getConnectionInstance(mn)).thenReturn((OvsdbConnectionInstance)ovsdbClient);
-        assertEquals("Error getting correct OvsdbClient object", ovsdbClient, ovsdbConnectionManager.getClient(mn));
+        suppress(MemberMatcher.method(OvsdbConnectionManager.class, "getConnectionInstance",
+                OvsdbBridgeAttributes.class));
+        when(ovsdbConnManager.getConnectionInstance(mn)).thenReturn((OvsdbConnectionInstance)ovsdbClient);
+        assertEquals("Error getting correct OvsdbClient object", ovsdbClient, ovsdbConnManager.getClient(mn));
 
         //Test getClient(Node node)
         Node node = mock(Node.class);
-        MemberModifier.suppress(MemberMatcher.method(OvsdbConnectionManager.class, "getConnectionInstance", Node.class));
-        when(ovsdbConnectionManager.getConnectionInstance(node)).thenReturn((OvsdbConnectionInstance)ovsdbClient);
-        assertEquals("Error getting correct OvsdbClient object", ovsdbClient, ovsdbConnectionManager.getClient(node));
+        suppress(MemberMatcher.method(OvsdbConnectionManager.class, "getConnectionInstance", Node.class));
+        when(ovsdbConnManager.getConnectionInstance(node)).thenReturn((OvsdbConnectionInstance)ovsdbClient);
+        assertEquals("Error getting correct OvsdbClient object", ovsdbClient, ovsdbConnManager.getClient(node));
     }
 
     @SuppressWarnings("unchecked")
@@ -281,29 +324,51 @@ public class OvsdbConnectionManagerTest {
         InetAddress ip = mock(InetAddress.class);
         when(SouthboundMapper.createInetAddress(any(IpAddress.class))).thenReturn(ip);
 
-        OvsdbClient client = mock(OvsdbClient.class);
         PowerMockito.mockStatic(OvsdbConnectionService.class);
         when(OvsdbConnectionService.getService()).thenReturn(ovsdbConnection);
         PortNumber port = mock(PortNumber.class);
         when(connectionInfo.getRemotePort()).thenReturn(port);
         when(port.getValue()).thenReturn(8080);
+        OvsdbClient client = mock(OvsdbClient.class);
         when(ovsdbConnection.connect(any(InetAddress.class), anyInt())).thenReturn(client);
 
         //client not null case
-        MemberModifier.suppress(MemberMatcher.method(OvsdbConnectionManager.class, "putInstanceIdentifier", ConnectionInfo.class, InstanceIdentifier.class));
-        MemberModifier.suppress(MemberMatcher.method(OvsdbConnectionManager.class, "connectedButCallBacksNotRegistered", OvsdbClient.class));
+        suppress(MemberMatcher.method(OvsdbConnectionManager.class, "putInstanceIdentifier", ConnectionInfo.class,
+                InstanceIdentifier.class));
+        suppress(MemberMatcher.method(OvsdbConnectionManager.class, "connectedButCallBacksNotRegistered",
+                OvsdbClient.class));
 
-        PowerMockito.doNothing().when(ovsdbConnectionManager, "putInstanceIdentifier", any(ConnectionInfo.class), any(InstanceIdentifier.class));
+        PowerMockito.doNothing().when(ovsdbConnManager, "putInstanceIdentifier", any(ConnectionInfo.class),
+                any(InstanceIdentifier.class));
 
         OvsdbConnectionInstance ovsdbConnectionInstance = mock(OvsdbConnectionInstance.class);
-        when(ovsdbConnectionManager.connectedButCallBacksNotRegistered(any(OvsdbClient.class))).thenReturn(ovsdbConnectionInstance);
+        when(ovsdbConnManager.connectedButCallBacksNotRegistered(any(OvsdbClient.class)))
+                .thenReturn(ovsdbConnectionInstance);
 
         InstanceIdentifier<Node> iid = mock(InstanceIdentifier.class);
         when(ovsdbConnectionInstance.getInstanceIdentifier()).thenReturn(iid);
-        MemberModifier.field(OvsdbConnectionManager.class, "entityConnectionMap").set(ovsdbConnectionManager, entityConnectionMap);
-        MemberModifier.suppress(MemberMatcher.method(OvsdbConnectionManager.class, "getEntityFromConnectionInstance", OvsdbConnectionInstance.class));
+        field(OvsdbConnectionManager.class, "entityConnectionMap").set(ovsdbConnManager, entityConnectionMap);
+        suppress(MemberMatcher.method(OvsdbConnectionManager.class, "getEntityFromConnectionInstance",
+                OvsdbConnectionInstance.class));
         //TODO: Write unit tests for entity ownership service related code.
-        MemberModifier.suppress(MemberMatcher.method(OvsdbConnectionManager.class, "registerEntityForOwnership", OvsdbConnectionInstance.class));
-        assertEquals("ERROR", client, ovsdbConnectionManager.connect(PowerMockito.mock(InstanceIdentifier.class), ovsdbNode));
+        suppress(MemberMatcher.method(OvsdbConnectionManager.class, "registerEntityForOwnership",
+                OvsdbConnectionInstance.class));
+        assertEquals("ERROR", client, ovsdbConnManager.connect(PowerMockito.mock(InstanceIdentifier.class), ovsdbNode));
+    }
+
+    @Test
+    public void testHandleOwnershipChanged() throws Exception {
+        Entity entity = new Entity("entityType", "entityName");
+        ConnectionInfo key = mock(ConnectionInfo.class);
+
+        OvsdbConnectionInstance ovsdbConnInstance = new OvsdbConnectionInstance(key, externalClient, txInvoker, iid);
+        entityConnectionMap.put(entity, ovsdbConnInstance);
+
+        field(OvsdbConnectionManager.class, "entityConnectionMap").set(ovsdbConnManager, entityConnectionMap);
+        suppress(MemberMatcher.method(OvsdbConnectionManager.class, "putConnectionInstance", ConnectionInfo.class,
+                OvsdbConnectionInstance.class));
+        EntityOwnershipChange ownershipChange = new EntityOwnershipChange(entity, true, false, false);
+        Whitebox.invokeMethod(ovsdbConnManager, "handleOwnershipChanged", ownershipChange);
+        PowerMockito.verifyPrivate(ovsdbConnManager, times(1)).invoke("putConnectionInstance", key, ovsdbConnInstance);
     }
 }