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;
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;
HashedWheelTimer timer;
@Mock
Registration registration;
+ @Mock
+ DeviceState deviceState;
+ @Mock
+ DeviceInfo deviceInfo;
+ @Mock
+ LifecycleService lifecycleService;
@Mock
private KeyedInstanceIdentifier<Node, NodeKey> nodeKeyIdent;
.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.<Void, TransactionCommitFailedException>immediateCheckedFuture(null));
- Assert.assertEquals(TransactionChainManager.TransactionChainManagerStatus.SLEEPING, txChainManager.getTransactionChainManagerStatus());
+ txChainManager.activateTransactionManager();
}
@After
@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.<Void, TransactionCommitFailedException>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();
}
@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
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.<Void, TransactionCommitFailedException>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