X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-inmemory-datastore%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fmd%2Fsal%2Fdom%2Fstore%2Fimpl%2FInMemoryDataStoreTest.java;h=4b80a1638511d55ba707ef89936f339b612767fb;hp=568f88376cbc816b9ea151a68fb36b1d4a5f15a7;hb=12fcdfe39aa26dcba7fd3bb4d4c68e3d02e65c51;hpb=07c40ad2904d0e9aa03828ba0ba9336e1560d0ec diff --git a/opendaylight/md-sal/sal-inmemory-datastore/src/test/java/org/opendaylight/controller/md/sal/dom/store/impl/InMemoryDataStoreTest.java b/opendaylight/md-sal/sal-inmemory-datastore/src/test/java/org/opendaylight/controller/md/sal/dom/store/impl/InMemoryDataStoreTest.java index 568f88376c..4b80a16385 100644 --- a/opendaylight/md-sal/sal-inmemory-datastore/src/test/java/org/opendaylight/controller/md/sal/dom/store/impl/InMemoryDataStoreTest.java +++ b/opendaylight/md-sal/sal-inmemory-datastore/src/test/java/org/opendaylight/controller/md/sal/dom/store/impl/InMemoryDataStoreTest.java @@ -11,11 +11,13 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; + import com.google.common.base.Optional; import com.google.common.util.concurrent.CheckedFuture; import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.MoreExecutors; import java.util.concurrent.ExecutionException; +import org.junit.Assert; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; @@ -61,20 +63,20 @@ public class InMemoryDataStoreTest { DOMStoreReadWriteTransaction writeTx = domStore.newReadWriteTransaction(); assertNotNull(writeTx); - /** + /* * Writes /test in writeTx */ NormalizedNode testNode = ImmutableNodes.containerNode(TestModel.TEST_QNAME); writeTx.write(TestModel.TEST_PATH, testNode); - /** + /* * Reads /test from writeTx Read should return container. */ ListenableFuture>> writeTxContainer = writeTx.read(TestModel.TEST_PATH); assertEquals("read: isPresent", true, writeTxContainer.get().isPresent()); assertEquals("read: data", testNode, writeTxContainer.get().get()); - /** + /* * Reads /test from readTx Read should return Absent. */ ListenableFuture>> readTxContainer = readTx.read(TestModel.TEST_PATH); @@ -87,13 +89,13 @@ public class InMemoryDataStoreTest { DOMStoreReadWriteTransaction writeTx = domStore.newReadWriteTransaction(); assertNotNull(writeTx); - /** + /* * Writes /test in writeTx */ NormalizedNode testNode = ImmutableNodes.containerNode(TestModel.TEST_QNAME); writeTx.write(TestModel.TEST_PATH, testNode); - /** + /* * Reads /test from writeTx Read should return container. */ ListenableFuture>> writeTxContainer = writeTx.read(TestModel.TEST_PATH); @@ -114,72 +116,70 @@ public class InMemoryDataStoreTest { public void testDelete() throws Exception { DOMStoreWriteTransaction writeTx = domStore.newWriteOnlyTransaction(); - assertNotNull( writeTx ); + assertNotNull(writeTx); // Write /test and commit - writeTx.write( TestModel.TEST_PATH, ImmutableNodes.containerNode( TestModel.TEST_QNAME ) ); + writeTx.write(TestModel.TEST_PATH, ImmutableNodes.containerNode(TestModel.TEST_QNAME)); - assertThreePhaseCommit( writeTx.ready() ); + assertThreePhaseCommit(writeTx.ready()); - Optional> afterCommitRead = domStore.newReadOnlyTransaction(). - read(TestModel.TEST_PATH ).get(); - assertEquals( "After commit read: isPresent", true, afterCommitRead.isPresent() ); + Optional> afterCommitRead = domStore.newReadOnlyTransaction().read(TestModel.TEST_PATH) + .get(); + assertEquals("After commit read: isPresent", true, afterCommitRead.isPresent()); // Delete /test and verify writeTx = domStore.newWriteOnlyTransaction(); - writeTx.delete( TestModel.TEST_PATH ); + writeTx.delete(TestModel.TEST_PATH); - assertThreePhaseCommit( writeTx.ready() ); + assertThreePhaseCommit(writeTx.ready()); - afterCommitRead = domStore.newReadOnlyTransaction(). - read(TestModel.TEST_PATH ).get(); - assertEquals( "After commit read: isPresent", false, afterCommitRead.isPresent() ); + afterCommitRead = domStore.newReadOnlyTransaction().read(TestModel.TEST_PATH).get(); + assertEquals("After commit read: isPresent", false, afterCommitRead.isPresent()); } @Test public void testMerge() throws Exception { DOMStoreWriteTransaction writeTx = domStore.newWriteOnlyTransaction(); - assertNotNull( writeTx ); + assertNotNull(writeTx); ContainerNode containerNode = ImmutableContainerNodeBuilder.create() - .withNodeIdentifier( new NodeIdentifier( TestModel.TEST_QNAME ) ) - .addChild( ImmutableNodes.mapNodeBuilder( TestModel.OUTER_LIST_QNAME ) - .addChild( ImmutableNodes.mapEntry( TestModel.OUTER_LIST_QNAME, - TestModel.ID_QNAME, 1 ) ).build() ).build(); + .withNodeIdentifier(new NodeIdentifier(TestModel.TEST_QNAME)) + .addChild(ImmutableNodes.mapNodeBuilder(TestModel.OUTER_LIST_QNAME) + .addChild(ImmutableNodes.mapEntry(TestModel.OUTER_LIST_QNAME, TestModel.ID_QNAME, 1)).build()) + .build(); - writeTx.merge( TestModel.TEST_PATH, containerNode ); + writeTx.merge(TestModel.TEST_PATH, containerNode); - assertThreePhaseCommit( writeTx.ready() ); + assertThreePhaseCommit(writeTx.ready()); - Optional> afterCommitRead = domStore.newReadOnlyTransaction(). - read(TestModel.TEST_PATH ).get(); - assertEquals( "After commit read: isPresent", true, afterCommitRead.isPresent() ); - assertEquals( "After commit read: data", containerNode, afterCommitRead.get() ); + Optional> afterCommitRead = domStore.newReadOnlyTransaction().read(TestModel.TEST_PATH) + .get(); + assertEquals("After commit read: isPresent", true, afterCommitRead.isPresent()); + assertEquals("After commit read: data", containerNode, afterCommitRead.get()); // Merge a new list entry node writeTx = domStore.newWriteOnlyTransaction(); - assertNotNull( writeTx ); + assertNotNull(writeTx); containerNode = ImmutableContainerNodeBuilder.create() - .withNodeIdentifier( new NodeIdentifier( TestModel.TEST_QNAME ) ) - .addChild( ImmutableNodes.mapNodeBuilder( TestModel.OUTER_LIST_QNAME ) - .addChild( ImmutableNodes.mapEntry( TestModel.OUTER_LIST_QNAME, - TestModel.ID_QNAME, 1 ) ) - .addChild( ImmutableNodes.mapEntry( TestModel.OUTER_LIST_QNAME, - TestModel.ID_QNAME, 2 ) ).build() ).build(); + .withNodeIdentifier(new NodeIdentifier(TestModel.TEST_QNAME)) + .addChild(ImmutableNodes.mapNodeBuilder(TestModel.OUTER_LIST_QNAME) + .addChild(ImmutableNodes.mapEntry(TestModel.OUTER_LIST_QNAME, TestModel.ID_QNAME, 1)) + .addChild(ImmutableNodes.mapEntry(TestModel.OUTER_LIST_QNAME, TestModel.ID_QNAME, 2)).build()) + .build(); - writeTx.merge( TestModel.TEST_PATH, containerNode ); + writeTx.merge(TestModel.TEST_PATH, containerNode); - assertThreePhaseCommit( writeTx.ready() ); + assertThreePhaseCommit(writeTx.ready()); - afterCommitRead = domStore.newReadOnlyTransaction().read(TestModel.TEST_PATH ).get(); - assertEquals( "After commit read: isPresent", true, afterCommitRead.isPresent() ); - assertEquals( "After commit read: data", containerNode, afterCommitRead.get() ); + afterCommitRead = domStore.newReadOnlyTransaction().read(TestModel.TEST_PATH).get(); + assertEquals("After commit read: isPresent", true, afterCommitRead.isPresent()); + assertEquals("After commit read: data", containerNode, afterCommitRead.get()); } @@ -187,15 +187,15 @@ public class InMemoryDataStoreTest { public void testExistsForExistingData() throws Exception { DOMStoreReadWriteTransaction writeTx = domStore.newReadWriteTransaction(); - assertNotNull( writeTx ); + assertNotNull(writeTx); ContainerNode containerNode = ImmutableContainerNodeBuilder.create() - .withNodeIdentifier( new NodeIdentifier( TestModel.TEST_QNAME ) ) - .addChild( ImmutableNodes.mapNodeBuilder( TestModel.OUTER_LIST_QNAME ) - .addChild( ImmutableNodes.mapEntry( TestModel.OUTER_LIST_QNAME, - TestModel.ID_QNAME, 1 ) ).build() ).build(); + .withNodeIdentifier(new NodeIdentifier(TestModel.TEST_QNAME)) + .addChild(ImmutableNodes.mapNodeBuilder(TestModel.OUTER_LIST_QNAME) + .addChild(ImmutableNodes.mapEntry(TestModel.OUTER_LIST_QNAME, TestModel.ID_QNAME, 1)).build()) + .build(); - writeTx.merge( TestModel.TEST_PATH, containerNode ); + writeTx.merge(TestModel.TEST_PATH, containerNode); CheckedFuture exists = writeTx.exists(TestModel.TEST_PATH); @@ -209,7 +209,7 @@ public class InMemoryDataStoreTest { ready.commit().get(); DOMStoreReadTransaction readTx = domStore.newReadOnlyTransaction(); - assertNotNull( readTx ); + assertNotNull(readTx); exists = readTx.exists(TestModel.TEST_PATH); @@ -221,7 +221,7 @@ public class InMemoryDataStoreTest { public void testExistsForNonExistingData() throws Exception { DOMStoreReadWriteTransaction writeTx = domStore.newReadWriteTransaction(); - assertNotNull( writeTx ); + assertNotNull(writeTx); CheckedFuture exists = writeTx.exists(TestModel.TEST_PATH); @@ -229,7 +229,7 @@ public class InMemoryDataStoreTest { assertEquals(false, exists.checkedGet()); DOMStoreReadTransaction readTx = domStore.newReadOnlyTransaction(); - assertNotNull( readTx ); + assertNotNull(readTx); exists = readTx.exists(TestModel.TEST_PATH); @@ -237,89 +237,84 @@ public class InMemoryDataStoreTest { assertEquals(false, exists.checkedGet()); } - @Test(expected=ReadFailedException.class) + @Test(expected = ReadFailedException.class) public void testExistsThrowsReadFailedException() throws Exception { DOMStoreReadTransaction readTx = domStore.newReadOnlyTransaction(); - assertNotNull( readTx ); + assertNotNull(readTx); readTx.close(); readTx.exists(TestModel.TEST_PATH).checkedGet(); } - - - @Test(expected=ReadFailedException.class) - public void testReadWithReadOnlyTransactionClosed() throws Throwable { + @Test(expected = ReadFailedException.class) + public void testReadWithReadOnlyTransactionClosed() throws Exception { DOMStoreReadTransaction readTx = domStore.newReadOnlyTransaction(); - assertNotNull( readTx ); + assertNotNull(readTx); readTx.close(); - doReadAndThrowEx( readTx ); + doReadAndThrowEx(readTx); } - @Test(expected=ReadFailedException.class) - public void testReadWithReadOnlyTransactionFailure() throws Throwable { + @Test(expected = ReadFailedException.class) + public void testReadWithReadOnlyTransactionFailure() throws Exception { - DataTreeSnapshot mockSnapshot = Mockito.mock( DataTreeSnapshot.class ); - Mockito.doThrow( new RuntimeException( "mock ex" ) ).when( mockSnapshot ) - .readNode( Mockito.any( YangInstanceIdentifier.class ) ); + DataTreeSnapshot mockSnapshot = Mockito.mock(DataTreeSnapshot.class); + Mockito.doThrow(new RuntimeException("mock ex")).when(mockSnapshot) + .readNode(Mockito.any(YangInstanceIdentifier.class)); DOMStoreReadTransaction readTx = SnapshotBackedTransactions.newReadTransaction("1", true, mockSnapshot); - doReadAndThrowEx( readTx ); + doReadAndThrowEx(readTx); } - @Test(expected=ReadFailedException.class) - public void testReadWithReadWriteTransactionClosed() throws Throwable { + @Test(expected = ReadFailedException.class) + public void testReadWithReadWriteTransactionClosed() throws Exception { DOMStoreReadTransaction readTx = domStore.newReadWriteTransaction(); - assertNotNull( readTx ); + assertNotNull(readTx); readTx.close(); - doReadAndThrowEx( readTx ); + doReadAndThrowEx(readTx); } - @Test(expected=ReadFailedException.class) - public void testReadWithReadWriteTransactionFailure() throws Throwable { + @Test(expected = ReadFailedException.class) + public void testReadWithReadWriteTransactionFailure() throws Exception { - DataTreeSnapshot mockSnapshot = Mockito.mock( DataTreeSnapshot.class ); - DataTreeModification mockModification = Mockito.mock( DataTreeModification.class ); - Mockito.doThrow( new RuntimeException( "mock ex" ) ).when( mockModification ) - .readNode( Mockito.any( YangInstanceIdentifier.class ) ); - Mockito.doReturn( mockModification ).when( mockSnapshot ).newModification(); + DataTreeSnapshot mockSnapshot = Mockito.mock(DataTreeSnapshot.class); + DataTreeModification mockModification = Mockito.mock(DataTreeModification.class); + Mockito.doThrow(new RuntimeException("mock ex")).when(mockModification) + .readNode(Mockito.any(YangInstanceIdentifier.class)); + Mockito.doReturn(mockModification).when(mockSnapshot).newModification(); @SuppressWarnings("unchecked") - TransactionReadyPrototype mockReady = Mockito.mock( TransactionReadyPrototype.class ); - DOMStoreReadTransaction readTx = SnapshotBackedTransactions.newReadWriteTransaction("1", false, mockSnapshot, mockReady); + TransactionReadyPrototype mockReady = Mockito.mock(TransactionReadyPrototype.class); + DOMStoreReadTransaction readTx = SnapshotBackedTransactions.newReadWriteTransaction("1", false, mockSnapshot, + mockReady); - doReadAndThrowEx( readTx ); + doReadAndThrowEx(readTx); } - private static void doReadAndThrowEx( final DOMStoreReadTransaction readTx ) throws Throwable { - try { - readTx.read(TestModel.TEST_PATH).get(); - } catch( ExecutionException e ) { - throw e.getCause(); - } + private static void doReadAndThrowEx(final DOMStoreReadTransaction readTx) throws ReadFailedException { + readTx.read(TestModel.TEST_PATH).checkedGet(); } - @Test(expected=IllegalStateException.class) - public void testWriteWithTransactionReady() throws Exception { + @Test(expected = IllegalStateException.class) + public void testWriteWithTransactionReady() { DOMStoreWriteTransaction writeTx = domStore.newWriteOnlyTransaction(); writeTx.ready(); // Should throw ex - writeTx.write( TestModel.TEST_PATH, ImmutableNodes.containerNode( TestModel.TEST_QNAME ) ); + writeTx.write(TestModel.TEST_PATH, ImmutableNodes.containerNode(TestModel.TEST_QNAME)); } - @Test(expected=IllegalStateException.class) - public void testReadyWithTransactionAlreadyReady() throws Exception { + @Test(expected = IllegalStateException.class) + public void testReadyWithTransactionAlreadyReady() { DOMStoreWriteTransaction writeTx = domStore.newWriteOnlyTransaction(); @@ -329,6 +324,23 @@ public class InMemoryDataStoreTest { writeTx.ready(); } + @Test + public void testReadyWithMissingMandatoryData() throws InterruptedException { + DOMStoreWriteTransaction writeTx = domStore.newWriteOnlyTransaction(); + NormalizedNode testNode = ImmutableContainerNodeBuilder.create() + .withNodeIdentifier(new NodeIdentifier(TestModel.MANDATORY_DATA_TEST_QNAME)) + .addChild(ImmutableNodes.leafNode(TestModel.OPTIONAL_QNAME, "data")) + .build(); + writeTx.write(TestModel.MANDATORY_DATA_TEST_PATH, testNode); + DOMStoreThreePhaseCommitCohort ready = writeTx.ready(); + try { + ready.canCommit().get(); + Assert.fail("Expected exception on canCommit"); + } catch (ExecutionException e) { + // nop + } + } + @Test public void testTransactionAbort() throws InterruptedException, ExecutionException { @@ -353,77 +365,68 @@ public class InMemoryDataStoreTest { DOMStoreTransactionChain txChain = domStore.createTransactionChain(); assertNotNull(txChain); - /** + /* * We alocate new read-write transaction and write /test - * - * */ DOMStoreReadWriteTransaction firstTx = txChain.newReadWriteTransaction(); assertTestContainerWrite(firstTx); - /** + /* * First transaction is marked as ready, we are able to allocate chained * transactions */ - DOMStoreThreePhaseCommitCohort firstWriteTxCohort = firstTx.ready(); + final DOMStoreThreePhaseCommitCohort firstWriteTxCohort = firstTx.ready(); - /** + /* * We alocate chained transaction - read transaction, note first one is * still not commited to datastore. */ DOMStoreReadTransaction secondReadTx = txChain.newReadOnlyTransaction(); - /** - * + /* * We test if we are able to read data from tx, read should not fail * since we are using chained transaction. - * - * */ assertTestContainerExists(secondReadTx); - /** - * + /* * We alocate next transaction, which is still based on first one, but * is read-write. - * */ DOMStoreReadWriteTransaction thirdDeleteTx = txChain.newReadWriteTransaction(); - /** + /* * We test existence of /test in third transaction container should * still be visible from first one (which is still uncommmited). - * - * */ assertTestContainerExists(thirdDeleteTx); - /** + /* * We delete node in third transaction */ thirdDeleteTx.delete(TestModel.TEST_PATH); - /** + /* * third transaction is sealed. */ DOMStoreThreePhaseCommitCohort thirdDeleteTxCohort = thirdDeleteTx.ready(); - /** + /* * We commit first transaction - * */ assertThreePhaseCommit(firstWriteTxCohort); // Alocates store transacion DOMStoreReadTransaction storeReadTx = domStore.newReadOnlyTransaction(); - /** + + /* * We verify transaction is commited to store, container should exists * in datastore. */ assertTestContainerExists(storeReadTx); - /** + + /* * We commit third transaction - * */ assertThreePhaseCommit(thirdDeleteTxCohort); } @@ -436,12 +439,12 @@ public class InMemoryDataStoreTest { assertTestContainerWrite(txOne); assertTestContainerWrite(txTwo); - /** + /* * Commits transaction */ assertThreePhaseCommit(txOne.ready()); - /** + /* * Asserts that txTwo could not be commited */ assertFalse(txTwo.ready().canCommit().get()); @@ -456,10 +459,8 @@ public class InMemoryDataStoreTest { private static Optional> assertTestContainerWrite(final DOMStoreReadWriteTransaction writeTx) throws InterruptedException, ExecutionException { - /** - * + /* * Writes /test in writeTx - * */ writeTx.write(TestModel.TEST_PATH, ImmutableNodes.containerNode(TestModel.TEST_QNAME)); @@ -476,5 +477,4 @@ public class InMemoryDataStoreTest { assertTrue(writeTxContainer.get().isPresent()); return writeTxContainer.get(); } - }