X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=openflowplugin-impl%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fopenflowplugin%2Fimpl%2Fdevice%2FTransactionChainManagerTest.java;h=b7b50facb87d57f6f6d52283d23ee0f7fe3fad32;hb=refs%2Fchanges%2F14%2F57814%2F38;hp=65d1af67b7e0e44566bee4bc00d75641cc9ff494;hpb=8f1aa3fcc8854302daa10fa550a296b3bae4a7f3;p=openflowplugin.git diff --git a/openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/device/TransactionChainManagerTest.java b/openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/device/TransactionChainManagerTest.java index 65d1af67b7..b7b50facb8 100644 --- a/openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/device/TransactionChainManagerTest.java +++ b/openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/device/TransactionChainManagerTest.java @@ -13,9 +13,7 @@ import com.google.common.util.concurrent.CheckedFuture; import com.google.common.util.concurrent.Futures; import io.netty.util.HashedWheelTimer; import org.junit.After; -import org.junit.Assert; import org.junit.Before; -import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Matchers; @@ -33,6 +31,9 @@ import org.opendaylight.controller.md.sal.common.api.data.TransactionChain; import org.opendaylight.controller.md.sal.common.api.data.TransactionChainListener; import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException; import org.opendaylight.openflowplugin.api.openflow.connection.ConnectionContext; +import org.opendaylight.openflowplugin.api.openflow.device.DeviceInfo; +import org.opendaylight.openflowplugin.api.openflow.device.DeviceState; +import org.opendaylight.openflowplugin.api.openflow.lifecycle.LifecycleService; import org.opendaylight.openflowplugin.impl.util.DeviceStateUtil; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes; @@ -63,6 +64,12 @@ public class TransactionChainManagerTest { HashedWheelTimer timer; @Mock Registration registration; + @Mock + DeviceState deviceState; + @Mock + DeviceInfo deviceInfo; + @Mock + LifecycleService lifecycleService; @Mock private KeyedInstanceIdentifier nodeKeyIdent; @@ -81,12 +88,14 @@ public class TransactionChainManagerTest { .thenReturn(txChain); nodeId = new NodeId("h2g2:42"); nodeKeyIdent = DeviceStateUtil.createNodeInstanceIdentifier(nodeId); - txChainManager = new TransactionChainManager(dataBroker, nodeKeyIdent, registration); + Mockito.when(deviceInfo.getNodeInstanceIdentifier()).thenReturn(nodeKeyIdent); + Mockito.when(deviceInfo.getNodeId()).thenReturn(nodeId); + txChainManager = new TransactionChainManager(dataBroker, deviceInfo); Mockito.when(txChain.newWriteOnlyTransaction()).thenReturn(writeTx); path = InstanceIdentifier.create(Nodes.class).child(Node.class, new NodeKey(nodeId)); Mockito.when(writeTx.submit()).thenReturn(Futures.immediateCheckedFuture(null)); - Assert.assertEquals(TransactionChainManager.TransactionChainManagerStatus.SLEEPING, txChainManager.getTransactionChainManagerStatus()); + txChainManager.activateTransactionManager(); } @After @@ -97,27 +106,56 @@ public class TransactionChainManagerTest { @Test public void testWriteToTransaction() throws Exception { final Node data = new NodeBuilder().setId(nodeId).build(); - txChainManager.writeToTransaction(LogicalDatastoreType.CONFIGURATION, path, data); + txChainManager.writeToTransaction(LogicalDatastoreType.CONFIGURATION, path, data, false); Mockito.verify(txChain).newWriteOnlyTransaction(); - Mockito.verify(writeTx).put(LogicalDatastoreType.CONFIGURATION, path, data); + Mockito.verify(writeTx).put(LogicalDatastoreType.CONFIGURATION, path, data, false); } /** - * FIXME: Need to change the test on behalf the clustering transaction chain manager changes + * test of {@link TransactionChainManager#submitWriteTransaction()} * @throws Exception */ - @Ignore @Test public void testSubmitTransaction() throws Exception { final Node data = new NodeBuilder().setId(nodeId).build(); - txChainManager.enableSubmit(); - txChainManager.writeToTransaction(LogicalDatastoreType.CONFIGURATION, path, data); - txChainManager.activateTransactionManager(true); + txChainManager.initialSubmitWriteTransaction(); + txChainManager.writeToTransaction(LogicalDatastoreType.CONFIGURATION, path, data, false); + txChainManager.submitWriteTransaction(); + + Mockito.verify(txChain).newWriteOnlyTransaction(); + Mockito.verify(writeTx).put(LogicalDatastoreType.CONFIGURATION, path, data, false); + Mockito.verify(writeTx).submit(); + } + + /** + * test of {@link TransactionChainManager#submitWriteTransaction()}: no submit, never enabled + * @throws Exception + */ + @Test + public void testSubmitTransaction1() throws Exception { + final Node data = new NodeBuilder().setId(nodeId).build(); + txChainManager.writeToTransaction(LogicalDatastoreType.CONFIGURATION, path, data, false); + txChainManager.submitWriteTransaction(); + + Mockito.verify(txChain).newWriteOnlyTransaction(); + Mockito.verify(writeTx).put(LogicalDatastoreType.CONFIGURATION, path, data, false); + Mockito.verify(writeTx, Mockito.never()).submit(); + } + + /** + * @throws Exception + */ + @Test + public void testSubmitTransactionFailed() throws Exception { + Mockito.when(writeTx.submit()).thenReturn(Futures.immediateFailedCheckedFuture(new TransactionCommitFailedException("mock"))); + final Node data = new NodeBuilder().setId(nodeId).build(); + txChainManager.initialSubmitWriteTransaction(); + txChainManager.writeToTransaction(LogicalDatastoreType.CONFIGURATION, path, data, false); txChainManager.submitWriteTransaction(); Mockito.verify(txChain).newWriteOnlyTransaction(); - Mockito.verify(writeTx).put(LogicalDatastoreType.CONFIGURATION, path, data); + Mockito.verify(writeTx).put(LogicalDatastoreType.CONFIGURATION, path, data, false); Mockito.verify(writeTx).submit(); } @@ -129,18 +167,22 @@ public class TransactionChainManagerTest { @Test public void testEnableCounter1() throws Exception { final Node data = new NodeBuilder().setId(nodeId).build(); - txChainManager.writeToTransaction(LogicalDatastoreType.CONFIGURATION, path, data); - txChainManager.writeToTransaction(LogicalDatastoreType.CONFIGURATION, path, data); + txChainManager.writeToTransaction(LogicalDatastoreType.CONFIGURATION, path, data, false); + txChainManager.writeToTransaction(LogicalDatastoreType.CONFIGURATION, path, data, false); Mockito.verify(txChain).newWriteOnlyTransaction(); - Mockito.verify(writeTx, Mockito.times(2)).put(LogicalDatastoreType.CONFIGURATION, path, data); + Mockito.verify(writeTx, Mockito.times(2)).put(LogicalDatastoreType.CONFIGURATION, path, data, false); Mockito.verify(writeTx, Mockito.never()).submit(); } + /** + * @throws Exception + */ @Test public void testOnTransactionChainFailed() throws Exception { txChainManager.onTransactionChainFailed(transactionChain, Mockito.mock(AsyncTransaction.class), Mockito.mock(Throwable.class)); - Mockito.verify(dataBroker, Mockito.times(1)).createTransactionChain(txChainManager); + Mockito.verify(txChain).close(); + Mockito.verify(dataBroker, Mockito.times(2)).createTransactionChain(txChainManager); } @Test @@ -157,4 +199,48 @@ public class TransactionChainManagerTest { Mockito.verify(txChain).newWriteOnlyTransaction(); Mockito.verify(writeTx).delete(LogicalDatastoreType.CONFIGURATION, path); } + + @Test + public void testDeactivateTransactionChainManager() throws Exception { + txChainManager.deactivateTransactionManager(); + + Mockito.verify(txChain).close(); + } + + /** + * @throws Exception + */ + @Test + public void testDeactivateTransactionChainManagerFailed() throws Exception { + Mockito.when(writeTx.submit()).thenReturn(Futures.immediateFailedCheckedFuture(new TransactionCommitFailedException("mock"))); + final Node data = new NodeBuilder().setId(nodeId).build(); + txChainManager.writeToTransaction(LogicalDatastoreType.CONFIGURATION, path, data, false); + + txChainManager.deactivateTransactionManager(); + + Mockito.verify(txChain).newWriteOnlyTransaction(); + Mockito.verify(writeTx).put(LogicalDatastoreType.CONFIGURATION, path, data, false); + Mockito.verify(writeTx, Mockito.never()).submit(); + Mockito.verify(writeTx).cancel(); + Mockito.verify(txChain).close(); + } + + @Test + public void testShuttingDown() throws Exception{ + final Node data = new NodeBuilder().setId(nodeId).build(); + txChainManager.writeToTransaction(LogicalDatastoreType.CONFIGURATION, path, data, false); + txChainManager.enableSubmit(); + txChainManager.shuttingDown(); + + Mockito.verify(txChain).newWriteOnlyTransaction(); + Mockito.verify(writeTx).put(LogicalDatastoreType.CONFIGURATION, path, data, false); + Mockito.verify(writeTx).submit(); + } + + @Test + public void testClose() { + txChainManager.shuttingDown(); + txChainManager.close(); + Mockito.verify(txChain).close(); + } } \ No newline at end of file