Merge "Unit test for ovsdb.southbound.ovsdb.transact"
authorSam Hague <shague@redhat.com>
Wed, 21 Oct 2015 12:03:37 +0000 (12:03 +0000)
committerGerrit Code Review <gerrit@opendaylight.org>
Wed, 21 Oct 2015 12:03:37 +0000 (12:03 +0000)
southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/AbstractTransactCommandTest.java [new file with mode: 0644]
southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/BridgeOperationalStateTest.java [new file with mode: 0644]
southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/BridgeRemovedCommandTest.java [new file with mode: 0644]
southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/BridgeUpdateCommandTest.java [new file with mode: 0644]
southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/ControllerRemovedCommandTest.java [new file with mode: 0644]
southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/ControllerUpdateCommandTest.java [new file with mode: 0644]

diff --git a/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/AbstractTransactCommandTest.java b/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/AbstractTransactCommandTest.java
new file mode 100644 (file)
index 0000000..f2a35e2
--- /dev/null
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2015 Inocybe Technologies. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.ovsdb.southbound.ovsdb.transact;
+
+import static org.junit.Assert.*;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
+import org.opendaylight.ovsdb.lib.operations.TransactionBuilder;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.powermock.modules.junit4.PowerMockRunner;
+
+@RunWith(PowerMockRunner.class)
+public class AbstractTransactCommandTest {
+
+    @Mock private BridgeOperationalState operationalState;
+    @Mock private AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> changes;
+    private AbstractTransactCommandChild abstractTransCmd;
+
+    public class AbstractTransactCommandChild extends AbstractTransactCommand {
+        public AbstractTransactCommandChild(BridgeOperationalState state, AsyncDataChangeEvent<InstanceIdentifier<?>,
+                DataObject> changes) {
+            super(state, changes);
+        }
+
+        @Override
+        public void execute(TransactionBuilder transaction) {
+            // TODO Auto-generated method stub
+        }
+    }
+
+    @Before
+    public void setUp() throws Exception {
+        operationalState = mock(BridgeOperationalState.class, Mockito.RETURNS_MOCKS);
+        changes = mock(AsyncDataChangeEvent.class, Mockito.RETURNS_MOCKS);
+        abstractTransCmd = new AbstractTransactCommandChild(operationalState, changes);
+    }
+
+    @Test
+    public void testGetOperationalState() {
+        assertNotNull(abstractTransCmd.getOperationalState());
+        assertEquals(operationalState, abstractTransCmd.getOperationalState());
+    }
+
+    @Test
+    public void testGetChanges() {
+        assertNotNull(abstractTransCmd.getChanges());
+        assertEquals(changes, abstractTransCmd.getChanges());
+    }
+}
\ No newline at end of file
diff --git a/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/BridgeOperationalStateTest.java b/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/BridgeOperationalStateTest.java
new file mode 100644 (file)
index 0000000..7d96c1e
--- /dev/null
@@ -0,0 +1,166 @@
+/*
+ * Copyright (c) 2015 Inocybe Technologies. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.ovsdb.southbound.ovsdb.transact;
+
+import static org.junit.Assert.*;
+import static org.mockito.Matchers.*;
+import static org.mockito.Mockito.*;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.Spy;
+import org.mockito.invocation.InvocationOnMock;
+import org.mockito.stubbing.Answer;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentation;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbTerminationPointAugmentation;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.bridge.attributes.ControllerEntry;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.bridge.attributes.ProtocolEntry;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
+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.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPoint;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPointKey;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.powermock.api.mockito.PowerMockito;
+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;
+
+import com.google.common.base.Optional;
+import org.powermock.api.support.membermodification.MemberMatcher;
+
+@PrepareForTest({BridgeOperationalState.class, Optional.class, InstanceIdentifier.class, Node.class, OvsdbBridgeAugmentation.class})
+@RunWith(PowerMockRunner.class)
+public class BridgeOperationalStateTest {
+
+    @Mock private BridgeOperationalState briOperationState;
+    @Mock private InstanceIdentifier<ProtocolEntry> protocolEntry;
+    @Mock private InstanceIdentifier<?> iid;
+    @Mock private InstanceIdentifier<Node> iidNode;
+    @Mock private Node nd;
+    private Map<InstanceIdentifier<Node>, Node> operationalNodes;
+
+    @Before
+    public void setUp() throws Exception {
+        briOperationState = mock(BridgeOperationalState.class, Mockito.CALLS_REAL_METHODS);
+        iid = mock(InstanceIdentifier.class, Mockito.RETURNS_MOCKS);
+        protocolEntry = mock(InstanceIdentifier.class, Mockito.RETURNS_MOCKS);
+        iidNode = mock(InstanceIdentifier.class, Mockito.RETURNS_MOCKS);
+        nd = mock(Node.class, Mockito.RETURNS_MOCKS);
+
+        operationalNodes = new HashMap<>();
+        operationalNodes.put(iidNode, nd);
+        MemberModifier.field(BridgeOperationalState.class,"operationalNodes").set(briOperationState, operationalNodes);
+        PowerMockito.suppress(MemberMatcher.methodsDeclaredIn(InstanceIdentifier.class));
+    }
+
+    @Test
+    public void testGetBridgeNode() throws Exception {
+        Optional<Node> optNodes = briOperationState.getBridgeNode(iid);
+        verify(iid, times(1)).firstIdentifierOf(Node.class);
+        assertNotNull(optNodes);
+        assertTrue(optNodes.equals(Optional.absent()));
+    }
+
+    @Test
+    public void testGetOvsdbBridgeAugmentation() throws Exception {
+        Optional<OvsdbBridgeAugmentation> optOvsdbBri = briOperationState.getOvsdbBridgeAugmentation(iid);
+        verify(briOperationState, times(1)).getBridgeNode(any(InstanceIdentifier.class));
+        assertNotNull(optOvsdbBri);
+        assertTrue(optOvsdbBri.equals(Optional.absent()));
+
+        Node node = mock(Node.class);
+        Optional<Node> optNode = mock(Optional.class);
+        OvsdbBridgeAugmentation ovsdbBriAug = mock(OvsdbBridgeAugmentation.class);
+        PowerMockito.suppress(MemberMatcher.method(BridgeOperationalState.class, "getBridgeNode", InstanceIdentifier.class));
+        when(briOperationState.getBridgeNode(any(InstanceIdentifier.class))).thenReturn(optNode);
+        when(optNode.isPresent()).thenReturn(true);
+        when(optNode.get()).thenReturn(node);
+        when(node.getAugmentation(OvsdbBridgeAugmentation.class)).thenReturn(ovsdbBriAug);
+        Optional<OvsdbBridgeAugmentation> ovsdbBriAugOptional = briOperationState.getOvsdbBridgeAugmentation(iid);
+        assertNotNull(ovsdbBriAugOptional);
+        assertTrue(ovsdbBriAugOptional.get() instanceof OvsdbBridgeAugmentation);
+    }
+
+    @Test
+    public void testGetBridgeTerminationPoint() throws Exception {
+        Optional<TerminationPoint> optTerm = briOperationState.getBridgeTerminationPoint(iid);
+        verify(briOperationState, times(1)).getBridgeNode(any(InstanceIdentifier.class));
+        assertNotNull(optTerm);
+        assertTrue(optTerm.equals(Optional.absent()));
+
+        Node node = mock(Node.class);
+        Optional<Node> optNode = mock(Optional.class);
+        TerminationPoint termPnt = mock(TerminationPoint.class);
+        List<TerminationPoint> termPntList = new ArrayList<TerminationPoint>();
+        termPntList.add(termPnt);
+        TerminationPointKey termPntKey = mock(TerminationPointKey.class);
+
+        PowerMockito.suppress(MemberMatcher.method(BridgeOperationalState.class, "getBridgeNode", InstanceIdentifier.class));
+        when(briOperationState.getBridgeNode(any(InstanceIdentifier.class))).thenReturn(optNode);
+        when(optNode.isPresent()).thenReturn(true);
+        when(optNode.get()).thenReturn(node);
+        when(node.getTerminationPoint()).thenReturn(termPntList);
+        when(termPnt.getKey()).thenReturn(termPntKey);
+
+        final InstanceIdentifier<?> iid2 = PowerMockito.mock(InstanceIdentifier.class);
+        //PowerMockito.suppress(MemberMatcher.method(InstanceIdentifier.class, "firstKeyOf", Class.class, Class.class));
+        //PowerMockito.when(iid2.firstKeyOf(TerminationPoint.class, TerminationPointKey.class)).thenReturn(termPntKey);
+        Optional<TerminationPoint> optTermPnt = briOperationState.getBridgeTerminationPoint(iid2);
+        assertNotNull(optTermPnt);
+        //assertTrue(optTermPnt.get() instanceof TerminationPoint);
+    }
+
+    @Test
+    public void testGetOvsdbTerminationPointAugmentation() {
+        Optional<OvsdbTerminationPointAugmentation> optOvsdbTermPoint = briOperationState.getOvsdbTerminationPointAugmentation(iid);
+        assertNotNull(optOvsdbTermPoint);
+        verify(briOperationState, times(1)).getBridgeTerminationPoint(any(InstanceIdentifier.class));
+        verify(briOperationState, times(1)).getBridgeNode(any(InstanceIdentifier.class));
+        assertTrue(optOvsdbTermPoint.equals(Optional.absent()));
+
+        TerminationPoint termPoint = mock(TerminationPoint.class);
+        Optional<TerminationPoint> termPntOptional = mock(Optional.class);
+        OvsdbTerminationPointAugmentation ovsdbTermPntAug = mock(OvsdbTerminationPointAugmentation.class);
+        PowerMockito.suppress(MemberMatcher.method(BridgeOperationalState.class, "getBridgeTerminationPoint", InstanceIdentifier.class));
+        when(briOperationState.getBridgeTerminationPoint(any(InstanceIdentifier.class))).thenReturn(termPntOptional);
+        when(termPntOptional.isPresent()).thenReturn(true);
+        when(termPntOptional.get()).thenReturn(termPoint);
+        when(termPoint.getAugmentation(OvsdbTerminationPointAugmentation.class)).thenReturn(ovsdbTermPntAug);
+        Optional<OvsdbTerminationPointAugmentation> ovsdbTermPointOpt = briOperationState.getOvsdbTerminationPointAugmentation(iid);
+        assertNotNull(ovsdbTermPointOpt);
+        assertTrue(ovsdbTermPointOpt.get() instanceof OvsdbTerminationPointAugmentation);
+    }
+
+    @Test
+    public void testGetControllerEntry() {
+        Optional<ControllerEntry> optController= briOperationState.getControllerEntry(iid);
+        verify(briOperationState, times(1)).getOvsdbBridgeAugmentation(any(InstanceIdentifier.class));
+        verify(briOperationState, times(1)).getBridgeNode(any(InstanceIdentifier.class));
+        assertNotNull(optController);
+        assertTrue(optController.equals(Optional.absent()));
+    }
+
+    @Test
+    public void testGetProtocolEntry() throws Exception {
+        Optional<ProtocolEntry> optProtocolEntry = briOperationState.getProtocolEntry(protocolEntry);
+        verify(briOperationState, times(1)).getOvsdbBridgeAugmentation(any(InstanceIdentifier.class));
+        verify(briOperationState, times(1)).getBridgeNode(any(InstanceIdentifier.class));
+        assertNotNull(optProtocolEntry);
+        assertTrue(optProtocolEntry.equals(Optional.absent()));
+    }
+}
diff --git a/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/BridgeRemovedCommandTest.java b/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/BridgeRemovedCommandTest.java
new file mode 100644 (file)
index 0000000..a824cec
--- /dev/null
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 2015 Inocybe Technologies. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.ovsdb.southbound.ovsdb.transact;
+
+import static org.junit.Assert.*;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import java.util.Map;
+import java.util.Set;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
+import org.opendaylight.ovsdb.lib.operations.TransactionBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentation;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+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;
+
+@PrepareForTest(BridgeRemovedCommand.class)
+@RunWith(PowerMockRunner.class)
+public class BridgeRemovedCommandTest {
+
+    @Mock private BridgeRemovedCommand briRemovedCmd;
+    @Mock private AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> changes;
+    @Mock private AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> returnChanges;
+    @Mock private Set<InstanceIdentifier<OvsdbBridgeAugmentation>> removed;
+    @Mock private Map<InstanceIdentifier<OvsdbBridgeAugmentation>, OvsdbBridgeAugmentation> originals;
+
+    @Before
+    public void setUp() throws Exception {
+        briRemovedCmd = mock(BridgeRemovedCommand.class, Mockito.CALLS_REAL_METHODS);
+    }
+
+    @Test
+    public void testExecute() throws Exception {
+        TransactionBuilder transaction = mock( TransactionBuilder.class, Mockito.RETURNS_MOCKS);
+
+        PowerMockito.mockStatic(TransactUtils.class);
+        when(TransactUtils.extractRemoved(changes, OvsdbBridgeAugmentation.class)).thenReturn(removed);
+        when(TransactUtils.extractOriginal(changes, OvsdbBridgeAugmentation.class)).thenReturn(originals);
+
+        MemberModifier.suppress(MemberMatcher.method(BridgeRemovedCommand.class, "getChanges"));
+        when(briRemovedCmd.getChanges()).thenReturn(returnChanges);
+
+        briRemovedCmd.execute(transaction);
+        verify(briRemovedCmd, times(2)).getChanges();
+    }
+
+}
diff --git a/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/BridgeUpdateCommandTest.java b/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/BridgeUpdateCommandTest.java
new file mode 100644 (file)
index 0000000..17c11d7
--- /dev/null
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 2015 Inocybe Technologies. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.ovsdb.southbound.ovsdb.transact;
+
+import static org.junit.Assert.*;
+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.util.Map;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
+import org.opendaylight.ovsdb.lib.operations.TransactionBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentation;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+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;
+
+
+@PrepareForTest(BridgeUpdateCommand.class)
+@RunWith(PowerMockRunner.class)
+public class BridgeUpdateCommandTest {
+
+    @Mock private BridgeUpdateCommand briUpdatedCmd;
+    @Mock private AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> changes;
+    @Mock private AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> returnChanges;
+    @Mock private Map<InstanceIdentifier<OvsdbBridgeAugmentation>, OvsdbBridgeAugmentation> created;
+    @Mock private Map<InstanceIdentifier<OvsdbBridgeAugmentation>, OvsdbBridgeAugmentation> updated;
+
+    @Before
+    public void setUp() throws Exception {
+        briUpdatedCmd = mock(BridgeUpdateCommand.class, Mockito.CALLS_REAL_METHODS);
+    }
+
+    @Test
+    public void testExecute() {
+        TransactionBuilder transaction = mock( TransactionBuilder.class, Mockito.RETURNS_MOCKS);
+
+        PowerMockito.mockStatic(TransactUtils.class);
+        when(TransactUtils.extractCreated(changes, OvsdbBridgeAugmentation.class)).thenReturn(created);
+        when(TransactUtils.extractUpdated(changes, OvsdbBridgeAugmentation.class)).thenReturn(updated);
+
+        MemberModifier.suppress(MemberMatcher.method(BridgeUpdateCommand.class, "getChanges"));
+        when(briUpdatedCmd.getChanges()).thenReturn(returnChanges);
+
+        briUpdatedCmd.execute(transaction);
+        verify(briUpdatedCmd, times(2)).getChanges();
+    }
+
+}
diff --git a/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/ControllerRemovedCommandTest.java b/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/ControllerRemovedCommandTest.java
new file mode 100644 (file)
index 0000000..cacce7c
--- /dev/null
@@ -0,0 +1,70 @@
+/*
+ * Copyright (c) 2015 Inocybe Technologies. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.ovsdb.southbound.ovsdb.transact;
+
+import static org.junit.Assert.*;
+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.util.Map;
+import java.util.Set;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
+import org.opendaylight.ovsdb.lib.operations.TransactionBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentation;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.bridge.attributes.ControllerEntry;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+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;
+
+@PrepareForTest(ControllerRemovedCommand.class)
+@RunWith(PowerMockRunner.class)
+public class ControllerRemovedCommandTest {
+
+    @Mock private ControllerRemovedCommand contRemoveCmd;
+    @Mock private AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> changes;
+    @Mock private AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> returnChanges;
+    @Mock private Set<InstanceIdentifier<ControllerEntry>> removed;
+    @Mock private Map<InstanceIdentifier<ControllerEntry>, ControllerEntry> operationalControllerEntries;
+    @Mock private Map<InstanceIdentifier<OvsdbBridgeAugmentation>, OvsdbBridgeAugmentation> created;
+    @Mock private Map<InstanceIdentifier<OvsdbBridgeAugmentation>, OvsdbBridgeAugmentation> updated;
+    @Before
+    public void setUp() throws Exception {
+        contRemoveCmd = mock(ControllerRemovedCommand.class, Mockito.CALLS_REAL_METHODS);
+    }
+
+    @Test
+    public void testExecute() throws Exception {
+        TransactionBuilder transaction = mock( TransactionBuilder.class, Mockito.RETURNS_MOCKS);
+
+        PowerMockito.mockStatic(TransactUtils.class);
+        when(TransactUtils.extractRemoved(changes, ControllerEntry.class)).thenReturn(removed);
+        when(TransactUtils.extractOriginal(changes, ControllerEntry.class)).thenReturn(operationalControllerEntries);
+        when(TransactUtils.extractCreated(changes, OvsdbBridgeAugmentation.class)).thenReturn(created);
+        when(TransactUtils.extractUpdated(changes, OvsdbBridgeAugmentation.class)).thenReturn(updated);
+
+        MemberModifier.suppress(MemberMatcher.method(ControllerRemovedCommand.class, "getChanges"));
+        when(contRemoveCmd.getChanges()).thenReturn(returnChanges);
+
+        contRemoveCmd.execute(transaction);
+        verify(contRemoveCmd, times(3)).getChanges();
+    }
+
+}
diff --git a/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/ControllerUpdateCommandTest.java b/southbound/southbound-impl/src/test/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/ControllerUpdateCommandTest.java
new file mode 100644 (file)
index 0000000..5b6337c
--- /dev/null
@@ -0,0 +1,65 @@
+/*
+ * Copyright (c) 2015 Inocybe Technologies. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.ovsdb.southbound.ovsdb.transact;
+
+import static org.junit.Assert.*;
+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.util.Map;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
+import org.opendaylight.ovsdb.lib.operations.TransactionBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentation;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.bridge.attributes.ControllerEntry;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+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;
+
+@PrepareForTest(ControllerUpdateCommand.class)
+@RunWith(PowerMockRunner.class)
+public class ControllerUpdateCommandTest {
+
+    @Mock private ControllerUpdateCommand contUpdateCmd;
+    @Mock private AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> changes;
+    @Mock private AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> returnChanges;
+    @Mock private Map<InstanceIdentifier<ControllerEntry>, ControllerEntry> controllers;
+    @Mock private Map<InstanceIdentifier<OvsdbBridgeAugmentation>, OvsdbBridgeAugmentation> bridges;
+
+    @Before
+    public void setUp() throws Exception {
+        contUpdateCmd = mock(ControllerUpdateCommand.class, Mockito.CALLS_REAL_METHODS);
+    }
+
+    @Test
+    public void testExecute() {
+        TransactionBuilder transaction = mock( TransactionBuilder.class, Mockito.RETURNS_MOCKS);
+
+        PowerMockito.mockStatic(TransactUtils.class);
+        when(TransactUtils.extractCreated(changes, ControllerEntry.class)).thenReturn(controllers);
+        when(TransactUtils.extractUpdated(changes, OvsdbBridgeAugmentation.class)).thenReturn(bridges);
+
+        MemberModifier.suppress(MemberMatcher.method(ControllerUpdateCommand.class, "getChanges"));
+        when(contUpdateCmd.getChanges()).thenReturn(returnChanges);
+
+        contUpdateCmd.execute(transaction);
+        verify(contUpdateCmd, times(2)).getChanges();
+    }
+
+}