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=18956b5892f51a50a48bfc3c672783d41550c83d;hpb=e45c29eb32e6c46f618fc630734cdfb2ceef0e8d;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 18956b5892..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 @@ -8,11 +8,12 @@ package org.opendaylight.openflowplugin.impl.device; +import com.google.common.base.Optional; +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.Before; -import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Matchers; @@ -21,19 +22,27 @@ import org.mockito.Mockito; import org.mockito.runners.MockitoJUnitRunner; import org.opendaylight.controller.md.sal.binding.api.BindingTransactionChain; import org.opendaylight.controller.md.sal.binding.api.DataBroker; +import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction; import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; import org.opendaylight.controller.md.sal.common.api.data.AsyncTransaction; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException; 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; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.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.yangtools.concepts.Registration; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier; /** * Created by mirehak on 4/5/15. @@ -44,7 +53,7 @@ public class TransactionChainManagerTest { @Mock private DataBroker dataBroker; @Mock - private DeviceState deviceState; + private ConnectionContext connectionContext; @Mock private BindingTransactionChain txChain; @Mock @@ -53,6 +62,17 @@ public class TransactionChainManagerTest { private TransactionChain transactionChain; @Mock HashedWheelTimer timer; + @Mock + Registration registration; + @Mock + DeviceState deviceState; + @Mock + DeviceInfo deviceInfo; + @Mock + LifecycleService lifecycleService; + + @Mock + private KeyedInstanceIdentifier nodeKeyIdent; private TransactionChainManager txChainManager; private InstanceIdentifier path; @@ -60,16 +80,22 @@ public class TransactionChainManagerTest { @Before public void setUp() throws Exception { + final ReadOnlyTransaction readOnlyTx = Mockito.mock(ReadOnlyTransaction.class); + final CheckedFuture, ReadFailedException> noExistNodeFuture = Futures.immediateCheckedFuture(Optional.absent()); + Mockito.when(readOnlyTx.read(LogicalDatastoreType.OPERATIONAL, nodeKeyIdent)).thenReturn(noExistNodeFuture); + Mockito.when(dataBroker.newReadOnlyTransaction()).thenReturn(readOnlyTx); Mockito.when(dataBroker.createTransactionChain(Matchers.any(TransactionChainListener.class))) .thenReturn(txChain); - Mockito.when(deviceState.isValid()).thenReturn(Boolean.TRUE); - txChainManager = new TransactionChainManager(dataBroker, deviceState); + nodeId = new NodeId("h2g2:42"); + nodeKeyIdent = DeviceStateUtil.createNodeInstanceIdentifier(nodeId); + Mockito.when(deviceInfo.getNodeInstanceIdentifier()).thenReturn(nodeKeyIdent); + Mockito.when(deviceInfo.getNodeId()).thenReturn(nodeId); + txChainManager = new TransactionChainManager(dataBroker, deviceInfo); Mockito.when(txChain.newWriteOnlyTransaction()).thenReturn(writeTx); - nodeId = new NodeId("h2g2:42"); path = InstanceIdentifier.create(Nodes.class).child(Node.class, new NodeKey(nodeId)); - Mockito.when(writeTx.submit()).thenReturn(Futures.immediateCheckedFuture(null)); + txChainManager.activateTransactionManager(); } @After @@ -80,68 +106,81 @@ 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); } + /** + * test of {@link TransactionChainManager#submitWriteTransaction()} + * @throws Exception + */ @Test public void testSubmitTransaction() throws Exception { final Node data = new NodeBuilder().setId(nodeId).build(); - txChainManager.enableSubmit(); - txChainManager.writeToTransaction(LogicalDatastoreType.CONFIGURATION, path, data); + 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(); } /** - * test of {@link TransactionChainManager#enableSubmit()}: no submit - counter is not active + * test of {@link TransactionChainManager#submitWriteTransaction()}: no submit, never enabled * @throws Exception */ @Test - public void testEnableCounter1() throws Exception { + public void testSubmitTransaction1() 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.submitWriteTransaction(); Mockito.verify(txChain).newWriteOnlyTransaction(); - Mockito.verify(writeTx, Mockito.times(2)).put(LogicalDatastoreType.CONFIGURATION, path, data); + Mockito.verify(writeTx).put(LogicalDatastoreType.CONFIGURATION, path, data, false); + Mockito.verify(writeTx, Mockito.never()).submit(); } /** - * test of {@link TransactionChainManager#enableSubmit()}: submit - after counter activated * @throws Exception */ @Test - @Ignore // FIXME : think about test -> we don't use submit by time and nrOfOperations - public void testEnableCounter2() throws Exception { - txChainManager.enableSubmit(); - + public void testSubmitTransactionFailed() 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); - txChainManager.writeToTransaction(LogicalDatastoreType.CONFIGURATION, path, data); + txChainManager.initialSubmitWriteTransaction(); + txChainManager.writeToTransaction(LogicalDatastoreType.CONFIGURATION, path, data, false); + txChainManager.submitWriteTransaction(); Mockito.verify(txChain).newWriteOnlyTransaction(); - Mockito.verify(writeTx, Mockito.times(2)).put(LogicalDatastoreType.CONFIGURATION, path, data); + Mockito.verify(writeTx).put(LogicalDatastoreType.CONFIGURATION, path, data, false); Mockito.verify(writeTx).submit(); + } - txChainManager.writeToTransaction(LogicalDatastoreType.CONFIGURATION, path, data); - txChainManager.writeToTransaction(LogicalDatastoreType.CONFIGURATION, path, data); + /** + * test of {@link TransactionChainManager#enableSubmit()}: no submit - counter is not active + * + * @throws Exception + */ + @Test + public void testEnableCounter1() throws Exception { + final Node data = new NodeBuilder().setId(nodeId).build(); + txChainManager.writeToTransaction(LogicalDatastoreType.CONFIGURATION, path, data, false); + txChainManager.writeToTransaction(LogicalDatastoreType.CONFIGURATION, path, data, false); - Mockito.verify(txChain, Mockito.times(2)).newWriteOnlyTransaction(); - Mockito.verify(writeTx, Mockito.times(4)).put(LogicalDatastoreType.CONFIGURATION, path, data); - Mockito.verify(writeTx, Mockito.times(2)).submit(); - Mockito.verify(writeTx, Mockito.times(2)).getIdentifier(); + Mockito.verify(txChain).newWriteOnlyTransaction(); + 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(txChain).close(); Mockito.verify(dataBroker, Mockito.times(2)).createTransactionChain(txChainManager); } @@ -160,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