X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-distributed-datastore%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatastore%2FShardTest.java;h=7ac18e61dc146a6b27430c884864c39ffe8620d5;hp=ffa2f995a883356d55ce29c8d6da6b4398293c3e;hb=30eb37d8cde5a8d35e36aa38e0bab1232b242de2;hpb=2c566430ce1f97da8236f023d531313474ea4d6a diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/ShardTest.java b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/ShardTest.java index ffa2f995a8..7ac18e61dc 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/ShardTest.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/ShardTest.java @@ -13,7 +13,7 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; -import static org.mockito.Matchers.any; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.inOrder; import static org.mockito.Mockito.mock; @@ -33,6 +33,7 @@ import akka.util.Timeout; import com.google.common.base.Stopwatch; import com.google.common.base.Throwables; import com.google.common.util.concurrent.Uninterruptibles; +import java.time.Duration; import java.util.Collections; import java.util.HashSet; import java.util.Map; @@ -51,7 +52,6 @@ import org.opendaylight.controller.cluster.access.concepts.MemberName; import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier; import org.opendaylight.controller.cluster.datastore.exceptions.NoShardLeaderException; import org.opendaylight.controller.cluster.datastore.identifiers.ShardIdentifier; -import org.opendaylight.controller.cluster.datastore.jmx.mbeans.shard.ShardStats; import org.opendaylight.controller.cluster.datastore.messages.AbortTransaction; import org.opendaylight.controller.cluster.datastore.messages.AbortTransactionReply; import org.opendaylight.controller.cluster.datastore.messages.BatchedModifications; @@ -139,7 +139,7 @@ public class ShardTest extends AbstractShardTest { shard.tell(new RegisterDataTreeChangeListener(TestModel.TEST_PATH, dclActor, false), testKit.getRef()); - final RegisterDataTreeNotificationListenerReply reply = testKit.expectMsgClass(testKit.duration("3 seconds"), + final RegisterDataTreeNotificationListenerReply reply = testKit.expectMsgClass(Duration.ofSeconds(3), RegisterDataTreeNotificationListenerReply.class); final String replyPath = reply.getListenerRegistrationPath().toString(); assertTrue("Incorrect reply path: " + replyPath, @@ -149,6 +149,18 @@ public class ShardTest extends AbstractShardTest { writeToStore(shard, path, ImmutableNodes.containerNode(TestModel.TEST_QNAME)); listener.waitForChangeEvents(); + listener.verifyOnInitialDataEvent(); + + final MockDataTreeChangeListener listener2 = new MockDataTreeChangeListener(1); + final ActorRef dclActor2 = actorFactory.createActor(DataTreeChangeListenerActor.props(listener2, + TestModel.TEST_PATH), "testRegisterDataTreeChangeListener-DataTreeChangeListener2"); + + shard.tell(new RegisterDataTreeChangeListener(TestModel.TEST_PATH, dclActor2, false), testKit.getRef()); + + testKit.expectMsgClass(Duration.ofSeconds(3), RegisterDataTreeNotificationListenerReply.class); + + listener2.waitForChangeEvents(); + listener2.verifyNoOnInitialDataEvent(); } @SuppressWarnings("serial") @@ -156,7 +168,7 @@ public class ShardTest extends AbstractShardTest { public void testDataTreeChangeListenerNotifiedWhenNotTheLeaderOnRegistration() throws Exception { final CountDownLatch onFirstElectionTimeout = new CountDownLatch(1); final CountDownLatch onChangeListenerRegistered = new CountDownLatch(1); - final Creator creator = new Creator() { + final Creator creator = new Creator<>() { boolean firstElectionTimeout = true; @Override @@ -189,21 +201,20 @@ public class ShardTest extends AbstractShardTest { final ActorRef dclActor = actorFactory.createActor(DataTreeChangeListenerActor.props(listener, path), "testDataTreeChangeListenerNotifiedWhenNotTheLeaderOnRegistration-DataChangeListener"); - final TestActorRef shard = actorFactory.createTestActor( - Props.create(new DelegatingShardCreator(creator)).withDispatcher(Dispatchers.DefaultDispatcherId()), + final TestActorRef shard = actorFactory.createTestActor(Props.create(Shard.class, + new DelegatingShardCreator(creator)).withDispatcher(Dispatchers.DefaultDispatcherId()), "testDataTreeChangeListenerNotifiedWhenNotTheLeaderOnRegistration"); final ShardTestKit testKit = new ShardTestKit(getSystem()); - assertEquals("Got first ElectionTimeout", true, onFirstElectionTimeout.await(5, TimeUnit.SECONDS)); + assertTrue("Got first ElectionTimeout", onFirstElectionTimeout.await(5, TimeUnit.SECONDS)); shard.tell(new RegisterDataTreeChangeListener(path, dclActor, false), testKit.getRef()); - final RegisterDataTreeNotificationListenerReply reply = testKit.expectMsgClass(testKit.duration("5 seconds"), + final RegisterDataTreeNotificationListenerReply reply = testKit.expectMsgClass(Duration.ofSeconds(5), RegisterDataTreeNotificationListenerReply.class); assertNotNull("getListenerRegistratioznPath", reply.getListenerRegistrationPath()); shard.tell(FindLeader.INSTANCE, testKit.getRef()); - final FindLeaderReply findLeadeReply = testKit.expectMsgClass(testKit.duration("5 seconds"), - FindLeaderReply.class); + final FindLeaderReply findLeadeReply = testKit.expectMsgClass(Duration.ofSeconds(5), FindLeaderReply.class); assertFalse("Expected the shard not to be the leader", findLeadeReply.getLeaderActor().isPresent()); onChangeListenerRegistered.countDown(); @@ -224,12 +235,12 @@ public class ShardTest extends AbstractShardTest { shard.tell(new CreateTransaction(nextTransactionId(), TransactionType.READ_ONLY.ordinal(), DataStoreVersions.CURRENT_VERSION).toSerializable(), testKit.getRef()); - final CreateTransactionReply reply = testKit.expectMsgClass(testKit.duration("3 seconds"), + final CreateTransactionReply reply = testKit.expectMsgClass(Duration.ofSeconds(3), CreateTransactionReply.class); final String path = reply.getTransactionPath().toString(); - assertTrue("Unexpected transaction path " + path, path.startsWith(String.format( - "akka://test/user/testCreateTransaction/shard-%s-%s:ShardTransactionTest@0:", + assertTrue("Unexpected transaction path " + path, path.contains(String.format( + "/user/testCreateTransaction/shard-%s-%s:ShardTransactionTest@0:", shardID.getShardName(), shardID.getMemberName().getName()))); } @@ -243,12 +254,12 @@ public class ShardTest extends AbstractShardTest { shard.tell(new CreateTransaction(nextTransactionId(), TransactionType.READ_ONLY.ordinal(), DataStoreVersions.CURRENT_VERSION).toSerializable(), testKit.getRef()); - final CreateTransactionReply reply = testKit.expectMsgClass(testKit.duration("3 seconds"), + final CreateTransactionReply reply = testKit.expectMsgClass(Duration.ofSeconds(3), CreateTransactionReply.class); final String path = reply.getTransactionPath().toString(); - assertTrue("Unexpected transaction path " + path, path.startsWith(String.format( - "akka://test/user/testCreateTransactionOnChain/shard-%s-%s:ShardTransactionTest@0:", + assertTrue("Unexpected transaction path " + path, path.contains(String.format( + "/user/testCreateTransactionOnChain/shard-%s-%s:ShardTransactionTest@0:", shardID.getShardName(), shardID.getMemberName().getName()))); } @@ -287,8 +298,8 @@ public class ShardTest extends AbstractShardTest { writeToStore(store, TestModel.TEST_PATH, container); - final YangInstanceIdentifier root = YangInstanceIdentifier.EMPTY; - final NormalizedNode expected = readStore(store, root); + final YangInstanceIdentifier root = YangInstanceIdentifier.empty(); + final NormalizedNode expected = readStore(store, root); final Snapshot snapshot = Snapshot.create(new ShardSnapshotState(new MetadataShardDataTreeSnapshot(expected)), Collections.emptyList(), 1, 2, 3, 4, -1, null, null); @@ -332,7 +343,7 @@ public class ShardTest extends AbstractShardTest { while (sw.elapsed(TimeUnit.SECONDS) <= 5) { Uninterruptibles.sleepUninterruptibly(75, TimeUnit.MILLISECONDS); - final NormalizedNode actual = readStore(shard, TestModel.TEST_PATH); + final NormalizedNode actual = readStore(shard, TestModel.TEST_PATH); if (actual != null) { assertEquals("Applied state", node, actual); return; @@ -361,7 +372,7 @@ public class ShardTest extends AbstractShardTest { // Add some ModificationPayload entries for (int i = 1; i <= nListEntries; i++) { - listEntryKeys.add(Integer.valueOf(i)); + listEntryKeys.add(i); final YangInstanceIdentifier path = YangInstanceIdentifier.builder(TestModel.OUTER_LIST_PATH) .nodeWithKey(TestModel.OUTER_LIST_QNAME, TestModel.ID_QNAME, i).build(); @@ -377,7 +388,7 @@ public class ShardTest extends AbstractShardTest { InMemoryJournal.addEntry(shardID.toString(), nListEntries + 2, new ApplyJournalEntries(nListEntries)); - testRecovery(listEntryKeys); + testRecovery(listEntryKeys, true); } @Test @@ -387,8 +398,8 @@ public class ShardTest extends AbstractShardTest { final CountDownLatch commitLatch = new CountDownLatch(2); final long timeoutSec = 5; - final FiniteDuration duration = FiniteDuration.create(timeoutSec, TimeUnit.SECONDS); - final Timeout timeout = new Timeout(duration); + final Duration duration = Duration.ofSeconds(timeoutSec); + final Timeout timeout = Timeout.create(duration); final TestActorRef shard = actorFactory.createTestActor( newShardProps().withDispatcher(Dispatchers.DefaultDispatcherId()), @@ -441,9 +452,8 @@ public class ShardTest extends AbstractShardTest { @Override void onSuccess(final Object resp) { - final CanCommitTransactionReply canCommitReply = - CanCommitTransactionReply.fromSerializable(resp); - assertEquals("Can commit", true, canCommitReply.getCanCommit()); + final CanCommitTransactionReply canCommitReply = CanCommitTransactionReply.fromSerializable(resp); + assertTrue("Can commit", canCommitReply.getCanCommit()); final Future commitFuture = Patterns.ask(shard, new CommitTransaction(transactionID, CURRENT_VERSION).toSerializable(), timeout); @@ -468,13 +478,15 @@ public class ShardTest extends AbstractShardTest { ImmutableNodes.containerNode(TestModel.TEST_QNAME), false), testKit.getRef()); final ReadyTransactionReply readyReply = ReadyTransactionReply .fromSerializable(testKit.expectMsgClass(duration, ReadyTransactionReply.class)); - assertEquals("Cohort path", shard.path().toString(), readyReply.getCohortPath()); + + String pathSuffix = shard.path().toString().replaceFirst("akka://test", ""); + assertTrue("Cohort path", readyReply.getCohortPath().endsWith(pathSuffix)); // Send the CanCommitTransaction message for the first Tx. shard.tell(new CanCommitTransaction(transactionID1, CURRENT_VERSION).toSerializable(), testKit.getRef()); final CanCommitTransactionReply canCommitReply = CanCommitTransactionReply .fromSerializable(testKit.expectMsgClass(duration, CanCommitTransactionReply.class)); - assertEquals("Can commit", true, canCommitReply.getCanCommit()); + assertTrue("Can commit", canCommitReply.getCanCommit()); // Ready 2 more Tx's. @@ -521,7 +533,7 @@ public class ShardTest extends AbstractShardTest { throw new RuntimeException(t); } - assertEquals("Commits complete", true, done); + assertTrue("Commits complete", done); // final InOrder inOrder = inOrder(cohort1.getCanCommit(), cohort1.getPreCommit(), cohort1.getCommit(), // cohort2.getCanCommit(), cohort2.getPreCommit(), cohort2.getCommit(), cohort3.getCanCommit(), @@ -540,7 +552,7 @@ public class ShardTest extends AbstractShardTest { verifyOuterListEntry(shard, 1); - verifyLastApplied(shard, 5); + verifyLastApplied(shard, 3); } @Test @@ -553,7 +565,7 @@ public class ShardTest extends AbstractShardTest { ShardTestKit.waitUntilLeader(shard); final TransactionIdentifier transactionID = nextTransactionId(); - final FiniteDuration duration = testKit.duration("5 seconds"); + final Duration duration = Duration.ofSeconds(5); // Send a BatchedModifications to start a transaction. @@ -580,7 +592,7 @@ public class ShardTest extends AbstractShardTest { shard.tell(new CanCommitTransaction(transactionID, CURRENT_VERSION).toSerializable(), testKit.getRef()); final CanCommitTransactionReply canCommitReply = CanCommitTransactionReply .fromSerializable(testKit.expectMsgClass(duration, CanCommitTransactionReply.class)); - assertEquals("Can commit", true, canCommitReply.getCanCommit()); + assertTrue("Can commit", canCommitReply.getCanCommit()); // Send the CommitTransaction message. @@ -602,7 +614,7 @@ public class ShardTest extends AbstractShardTest { ShardTestKit.waitUntilLeader(shard); final TransactionIdentifier transactionID = nextTransactionId(); - final FiniteDuration duration = testKit.duration("5 seconds"); + final Duration duration = Duration.ofSeconds(5); // Send a BatchedModifications to start a transaction. @@ -646,7 +658,7 @@ public class ShardTest extends AbstractShardTest { shard.tell(batched, testKit.getRef()); - final Failure failure = testKit.expectMsgClass(testKit.duration("5 seconds"), Failure.class); + final Failure failure = testKit.expectMsgClass(Duration.ofSeconds(5), Failure.class); if (failure != null) { Throwables.propagateIfPossible(failure.cause(), Exception.class); @@ -676,7 +688,7 @@ public class ShardTest extends AbstractShardTest { BatchedModifications batched = new BatchedModifications(transactionID, CURRENT_VERSION); batched.addModification(new MergeModification(TestModel.TEST_PATH, invalidData)); shard.tell(batched, testKit.getRef()); - Failure failure = testKit.expectMsgClass(testKit.duration("5 seconds"), akka.actor.Status.Failure.class); + Failure failure = testKit.expectMsgClass(Duration.ofSeconds(5), akka.actor.Status.Failure.class); final Throwable cause = failure.cause(); @@ -686,7 +698,7 @@ public class ShardTest extends AbstractShardTest { shard.tell(batched, testKit.getRef()); - failure = testKit.expectMsgClass(testKit.duration("5 seconds"), akka.actor.Status.Failure.class); + failure = testKit.expectMsgClass(Duration.ofSeconds(5), akka.actor.Status.Failure.class); assertEquals("Failure cause", cause, failure.cause()); } @@ -703,7 +715,7 @@ public class ShardTest extends AbstractShardTest { final TransactionIdentifier transactionID1 = new TransactionIdentifier(historyId, 0); final TransactionIdentifier transactionID2 = new TransactionIdentifier(historyId, 1); - final FiniteDuration duration = testKit.duration("5 seconds"); + final Duration duration = Duration.ofSeconds(5); // Send a BatchedModifications to start a chained write // transaction and ready it. @@ -718,12 +730,12 @@ public class ShardTest extends AbstractShardTest { shard.tell(new CreateTransaction(transactionID2, TransactionType.READ_ONLY.ordinal(), DataStoreVersions.CURRENT_VERSION).toSerializable(), testKit.getRef()); - final CreateTransactionReply createReply = testKit.expectMsgClass(testKit.duration("3 seconds"), + final CreateTransactionReply createReply = testKit.expectMsgClass(Duration.ofSeconds(3), CreateTransactionReply.class); getSystem().actorSelection(createReply.getTransactionPath()) .tell(new ReadData(path, DataStoreVersions.CURRENT_VERSION), testKit.getRef()); - final ReadDataReply readReply = testKit.expectMsgClass(testKit.duration("3 seconds"), ReadDataReply.class); + final ReadDataReply readReply = testKit.expectMsgClass(Duration.ofSeconds(3), ReadDataReply.class); assertEquals("Read node", containerNode, readReply.getNormalizedNode()); // Commit the write transaction. @@ -731,14 +743,14 @@ public class ShardTest extends AbstractShardTest { shard.tell(new CanCommitTransaction(transactionID1, CURRENT_VERSION).toSerializable(), testKit.getRef()); final CanCommitTransactionReply canCommitReply = CanCommitTransactionReply .fromSerializable(testKit.expectMsgClass(duration, CanCommitTransactionReply.class)); - assertEquals("Can commit", true, canCommitReply.getCanCommit()); + assertTrue("Can commit", canCommitReply.getCanCommit()); shard.tell(new CommitTransaction(transactionID1, CURRENT_VERSION).toSerializable(), testKit.getRef()); testKit.expectMsgClass(duration, CommitTransactionReply.class); // Verify data in the data store. - final NormalizedNode actualNode = readStore(shard, path); + final NormalizedNode actualNode = readStore(shard, path); assertEquals("Stored node", containerNode, actualNode); } @@ -746,7 +758,7 @@ public class ShardTest extends AbstractShardTest { public void testOnBatchedModificationsWhenNotLeader() { final AtomicBoolean overrideLeaderCalls = new AtomicBoolean(); final ShardTestKit testKit = new ShardTestKit(getSystem()); - final Creator creator = new Creator() { + final Creator creator = new Creator<>() { private static final long serialVersionUID = 1L; @Override @@ -766,8 +778,8 @@ public class ShardTest extends AbstractShardTest { } }; - final TestActorRef shard = actorFactory.createTestActor(Props - .create(new DelegatingShardCreator(creator)).withDispatcher(Dispatchers.DefaultDispatcherId()), + final TestActorRef shard = actorFactory.createTestActor(Props.create(Shard.class, + new DelegatingShardCreator(creator)).withDispatcher(Dispatchers.DefaultDispatcherId()), "testOnBatchedModificationsWhenNotLeader"); ShardTestKit.waitUntilLeader(shard); @@ -828,7 +840,7 @@ public class ShardTest extends AbstractShardTest { ShardTestKit.waitUntilLeader(shard); final TransactionIdentifier transactionID = nextTransactionId(); - final NormalizedNode containerNode = ImmutableNodes.containerNode(TestModel.TEST_QNAME); + final NormalizedNode containerNode = ImmutableNodes.containerNode(TestModel.TEST_QNAME); if (readWrite) { shard.tell(prepareForwardedReadyTransaction(shard, transactionID, TestModel.TEST_PATH, containerNode, true), testKit.getRef()); @@ -837,9 +849,9 @@ public class ShardTest extends AbstractShardTest { testKit.getRef()); } - testKit.expectMsgClass(testKit.duration("5 seconds"), CommitTransactionReply.class); + testKit.expectMsgClass(Duration.ofSeconds(5), CommitTransactionReply.class); - final NormalizedNode actualNode = readStore(shard, TestModel.TEST_PATH); + final NormalizedNode actualNode = readStore(shard, TestModel.TEST_PATH); assertEquals(TestModel.TEST_QNAME.getLocalName(), containerNode, actualNode); } @@ -858,7 +870,9 @@ public class ShardTest extends AbstractShardTest { final ContainerNode writeData = ImmutableNodes.containerNode(TestModel.TEST_QNAME); new WriteModification(TestModel.TEST_PATH, writeData).apply(modification); - final MapNode mergeData = ImmutableNodes.mapNodeBuilder(TestModel.OUTER_LIST_QNAME).build(); + final MapNode mergeData = ImmutableNodes.mapNodeBuilder(TestModel.OUTER_LIST_QNAME) + .addChild(ImmutableNodes.mapEntry(TestModel.OUTER_LIST_QNAME, TestModel.ID_QNAME, 42)) + .build(); new MergeModification(TestModel.OUTER_LIST_PATH, mergeData).apply(modification); final TransactionIdentifier txId = nextTransactionId(); @@ -870,7 +884,7 @@ public class ShardTest extends AbstractShardTest { testKit.expectMsgClass(CommitTransactionReply.class); - final NormalizedNode actualNode = readStore(shard, TestModel.OUTER_LIST_PATH); + final NormalizedNode actualNode = readStore(shard, TestModel.OUTER_LIST_PATH); assertEquals(TestModel.OUTER_LIST_QNAME.getLocalName(), mergeData, actualNode); } @@ -889,7 +903,9 @@ public class ShardTest extends AbstractShardTest { final ContainerNode writeData = ImmutableNodes.containerNode(TestModel.TEST_QNAME); new WriteModification(TestModel.TEST_PATH, writeData).apply(modification); - final MapNode mergeData = ImmutableNodes.mapNodeBuilder(TestModel.OUTER_LIST_QNAME).build(); + final MapNode mergeData = ImmutableNodes.mapNodeBuilder(TestModel.OUTER_LIST_QNAME) + .addChild(ImmutableNodes.mapEntry(TestModel.OUTER_LIST_QNAME, TestModel.ID_QNAME, 42)) + .build(); new MergeModification(TestModel.OUTER_LIST_PATH, mergeData).apply(modification); final TransactionIdentifier txId = nextTransactionId(); @@ -906,14 +922,14 @@ public class ShardTest extends AbstractShardTest { shard.tell(new CanCommitTransaction(txId, CURRENT_VERSION).toSerializable(), testKit.getRef()); final CanCommitTransactionReply canCommitReply = CanCommitTransactionReply .fromSerializable(testKit.expectMsgClass(CanCommitTransactionReply.class)); - assertEquals("Can commit", true, canCommitReply.getCanCommit()); + assertTrue("Can commit", canCommitReply.getCanCommit()); // Send the CanCommitTransaction message. shard.tell(new CommitTransaction(txId, CURRENT_VERSION).toSerializable(), testKit.getRef()); testKit.expectMsgClass(CommitTransactionReply.class); - final NormalizedNode actualNode = readStore(shard, TestModel.OUTER_LIST_PATH); + final NormalizedNode actualNode = readStore(shard, TestModel.OUTER_LIST_PATH); assertEquals(TestModel.OUTER_LIST_QNAME.getLocalName(), mergeData, actualNode); } @@ -929,10 +945,10 @@ public class ShardTest extends AbstractShardTest { // Setup a simulated transactions with a mock cohort. - final FiniteDuration duration = testKit.duration("5 seconds"); + final Duration duration = Duration.ofSeconds(5); final TransactionIdentifier transactionID = nextTransactionId(); - final NormalizedNode containerNode = ImmutableNodes.containerNode(TestModel.TEST_QNAME); + final NormalizedNode containerNode = ImmutableNodes.containerNode(TestModel.TEST_QNAME); shard.tell(prepareBatchedModifications(transactionID, TestModel.TEST_PATH, containerNode, false), testKit.getRef()); testKit.expectMsgClass(duration, ReadyTransactionReply.class); @@ -942,14 +958,14 @@ public class ShardTest extends AbstractShardTest { shard.tell(new CanCommitTransaction(transactionID, CURRENT_VERSION).toSerializable(), testKit.getRef()); final CanCommitTransactionReply canCommitReply = CanCommitTransactionReply .fromSerializable(testKit.expectMsgClass(duration, CanCommitTransactionReply.class)); - assertEquals("Can commit", true, canCommitReply.getCanCommit()); + assertTrue("Can commit", canCommitReply.getCanCommit()); // Send the CanCommitTransaction message. shard.tell(new CommitTransaction(transactionID, CURRENT_VERSION).toSerializable(), testKit.getRef()); testKit.expectMsgClass(duration, CommitTransactionReply.class); - final NormalizedNode actualNode = readStore(shard, TestModel.TEST_PATH); + final NormalizedNode actualNode = readStore(shard, TestModel.TEST_PATH); assertEquals(TestModel.TEST_QNAME.getLocalName(), containerNode, actualNode); } @@ -972,7 +988,7 @@ public class ShardTest extends AbstractShardTest { ShardTestKit.waitUntilLeader(shard); - final FiniteDuration duration = testKit.duration("5 seconds"); + final Duration duration = Duration.ofSeconds(5); final TransactionIdentifier transactionID = nextTransactionId(); if (readWrite) { @@ -990,7 +1006,7 @@ public class ShardTest extends AbstractShardTest { shard.tell(new CanCommitTransaction(transactionID, CURRENT_VERSION).toSerializable(), testKit.getRef()); final CanCommitTransactionReply canCommitReply = CanCommitTransactionReply .fromSerializable(testKit.expectMsgClass(duration, CanCommitTransactionReply.class)); - assertEquals("Can commit", true, canCommitReply.getCanCommit()); + assertTrue("Can commit", canCommitReply.getCanCommit()); shard.tell(new CommitTransaction(transactionID, CURRENT_VERSION).toSerializable(), testKit.getRef()); testKit.expectMsgClass(duration, CommitTransactionReply.class); @@ -1011,8 +1027,7 @@ public class ShardTest extends AbstractShardTest { // Committed transaction count should increase as usual assertEquals(1, shardStats.getCommittedTransactionsCount()); - // Commit index should advance as we do not have an empty - // modification + // Commit index should advance 1 to account for disabling metadata assertEquals(1, shardStats.getCommitIndex()); } @@ -1026,8 +1041,8 @@ public class ShardTest extends AbstractShardTest { ShardTestKit.waitUntilLeader(shard); - final FiniteDuration duration = testKit.duration("5 seconds"); - final Timeout timeout = new Timeout(duration); + final Duration duration = Duration.ofSeconds(5); + final Timeout timeout = Timeout.create(duration); // Setup 2 simulated transactions with mock cohorts. The first // one fails in the @@ -1051,7 +1066,7 @@ public class ShardTest extends AbstractShardTest { shard.tell(new CanCommitTransaction(transactionID1, CURRENT_VERSION).toSerializable(), testKit.getRef()); final CanCommitTransactionReply canCommitReply = CanCommitTransactionReply .fromSerializable(testKit.expectMsgClass(duration, CanCommitTransactionReply.class)); - assertEquals("Can commit", true, canCommitReply.getCanCommit()); + assertTrue("Can commit", canCommitReply.getCanCommit()); // Send the CanCommitTransaction message for the 2nd Tx. This // should get queued and @@ -1070,14 +1085,14 @@ public class ShardTest extends AbstractShardTest { // Wait for the 2nd Tx to complete the canCommit phase. final CountDownLatch latch = new CountDownLatch(1); - canCommitFuture.onComplete(new OnComplete() { + canCommitFuture.onComplete(new OnComplete<>() { @Override public void onComplete(final Throwable failure, final Object resp) { latch.countDown(); } }, getSystem().dispatcher()); - assertEquals("2nd CanCommit complete", true, latch.await(5, TimeUnit.SECONDS)); + assertTrue("2nd CanCommit complete", latch.await(5, TimeUnit.SECONDS)); final InOrder inOrder = inOrder(dataTree); inOrder.verify(dataTree).validate(any(DataTreeModification.class)); @@ -1100,8 +1115,8 @@ public class ShardTest extends AbstractShardTest { ShardTestKit.waitUntilLeader(shard); - final FiniteDuration duration = testKit.duration("5 seconds"); - final Timeout timeout = new Timeout(duration); + final Duration duration = Duration.ofSeconds(5); + final Timeout timeout = Timeout.create(duration); doThrow(new RuntimeException("mock preCommit failure")).when(dataTree) .prepare(any(DataTreeModification.class)); @@ -1121,7 +1136,7 @@ public class ShardTest extends AbstractShardTest { shard.tell(new CanCommitTransaction(transactionID1, CURRENT_VERSION).toSerializable(), testKit.getRef()); final CanCommitTransactionReply canCommitReply = CanCommitTransactionReply .fromSerializable(testKit.expectMsgClass(duration, CanCommitTransactionReply.class)); - assertEquals("Can commit", true, canCommitReply.getCanCommit()); + assertTrue("Can commit", canCommitReply.getCanCommit()); // Send the CanCommitTransaction message for the 2nd Tx. This // should get queued and @@ -1140,14 +1155,14 @@ public class ShardTest extends AbstractShardTest { // Wait for the 2nd Tx to complete the canCommit phase. final CountDownLatch latch = new CountDownLatch(1); - canCommitFuture.onComplete(new OnComplete() { + canCommitFuture.onComplete(new OnComplete<>() { @Override public void onComplete(final Throwable failure, final Object resp) { latch.countDown(); } }, getSystem().dispatcher()); - assertEquals("2nd CanCommit complete", true, latch.await(5, TimeUnit.SECONDS)); + assertTrue("2nd CanCommit complete", latch.await(5, TimeUnit.SECONDS)); final InOrder inOrder = inOrder(dataTree); inOrder.verify(dataTree).validate(any(DataTreeModification.class)); @@ -1165,10 +1180,10 @@ public class ShardTest extends AbstractShardTest { ShardTestKit.waitUntilLeader(shard); - final FiniteDuration duration = testKit.duration("5 seconds"); + final Duration duration = Duration.ofSeconds(5); final TransactionIdentifier transactionID1 = nextTransactionId(); - doThrow(new DataValidationFailedException(YangInstanceIdentifier.EMPTY, "mock canCommit failure")) + doThrow(new DataValidationFailedException(YangInstanceIdentifier.empty(), "mock canCommit failure")) .doNothing().when(dataTree).validate(any(DataTreeModification.class)); shard.tell(newBatchedModifications(transactionID1, TestModel.TEST_PATH, @@ -1191,7 +1206,7 @@ public class ShardTest extends AbstractShardTest { shard.tell(new CanCommitTransaction(transactionID2, CURRENT_VERSION).toSerializable(), testKit.getRef()); final CanCommitTransactionReply reply = CanCommitTransactionReply .fromSerializable(testKit.expectMsgClass(CanCommitTransactionReply.class)); - assertEquals("getCanCommit", true, reply.getCanCommit()); + assertTrue("getCanCommit", reply.getCanCommit()); } @Test @@ -1209,10 +1224,10 @@ public class ShardTest extends AbstractShardTest { ShardTestKit.waitUntilLeader(shard); - doThrow(new DataValidationFailedException(YangInstanceIdentifier.EMPTY, "mock canCommit failure")) + doThrow(new DataValidationFailedException(YangInstanceIdentifier.empty(), "mock canCommit failure")) .doNothing().when(dataTree).validate(any(DataTreeModification.class)); - final FiniteDuration duration = testKit.duration("5 seconds"); + final Duration duration = Duration.ofSeconds(5); final TransactionIdentifier transactionID1 = nextTransactionId(); @@ -1258,13 +1273,13 @@ public class ShardTest extends AbstractShardTest { } }; - final TestActorRef shard = actorFactory.createTestActor(Props - .create(new DelegatingShardCreator(creator)).withDispatcher(Dispatchers.DefaultDispatcherId()), + final TestActorRef shard = actorFactory.createTestActor(Props.create(Shard.class, + new DelegatingShardCreator(creator)).withDispatcher(Dispatchers.DefaultDispatcherId()), "testAbortWithCommitPending"); ShardTestKit.waitUntilLeader(shard); - final FiniteDuration duration = testKit.duration("5 seconds"); + final Duration duration = Duration.ofSeconds(5); final TransactionIdentifier transactionID = nextTransactionId(); @@ -1278,7 +1293,7 @@ public class ShardTest extends AbstractShardTest { shard.tell(new CommitTransaction(transactionID, CURRENT_VERSION).toSerializable(), testKit.getRef()); testKit.expectMsgClass(duration, CommitTransactionReply.class); - final NormalizedNode node = readStore(shard, TestModel.TEST_PATH); + final NormalizedNode node = readStore(shard, TestModel.TEST_PATH); // Since we're simulating an abort occurring during replication // and before finish commit, @@ -1298,7 +1313,7 @@ public class ShardTest extends AbstractShardTest { ShardTestKit.waitUntilLeader(shard); - final FiniteDuration duration = testKit.duration("5 seconds"); + final Duration duration = Duration.ofSeconds(5); writeToStore(shard, TestModel.TEST_PATH, ImmutableNodes.containerNode(TestModel.TEST_QNAME)); writeToStore(shard, TestModel.OUTER_LIST_PATH, @@ -1346,7 +1361,7 @@ public class ShardTest extends AbstractShardTest { shard.tell(new CommitTransaction(transactionID2, CURRENT_VERSION).toSerializable(), testKit.getRef()); testKit.expectMsgClass(duration, CommitTransactionReply.class); - final NormalizedNode node = readStore(shard, listNodePath); + final NormalizedNode node = readStore(shard, listNodePath); assertNotNull(listNodePath + " not found", node); } @@ -1427,7 +1442,7 @@ public class ShardTest extends AbstractShardTest { ShardTestKit.waitUntilLeader(shard); - final FiniteDuration duration = testKit.duration("5 seconds"); + final Duration duration = Duration.ofSeconds(5); final TransactionIdentifier transactionID1 = nextTransactionId(); shard.tell(newBatchedModifications(transactionID1, TestModel.TEST_PATH, @@ -1463,7 +1478,7 @@ public class ShardTest extends AbstractShardTest { ShardTestKit.waitUntilLeader(shard); - final FiniteDuration duration = testKit.duration("5 seconds"); + final Duration duration = Duration.ofSeconds(5); final ShardDataTree dataStore = shard.underlyingActor().getDataStore(); @@ -1506,7 +1521,7 @@ public class ShardTest extends AbstractShardTest { testKit.expectMsgClass(duration, CommitTransactionReply.class); - final NormalizedNode node = readStore(shard, TestModel.TEST2_PATH); + final NormalizedNode node = readStore(shard, TestModel.TEST2_PATH); assertNotNull(TestModel.TEST2_PATH + " not found", node); } @@ -1518,7 +1533,7 @@ public class ShardTest extends AbstractShardTest { "testCanCommitBeforeReadyFailure"); shard.tell(new CanCommitTransaction(nextTransactionId(), CURRENT_VERSION).toSerializable(), testKit.getRef()); - testKit.expectMsgClass(testKit.duration("5 seconds"), akka.actor.Status.Failure.class); + testKit.expectMsgClass(Duration.ofSeconds(5), akka.actor.Status.Failure.class); } @Test @@ -1529,8 +1544,8 @@ public class ShardTest extends AbstractShardTest { ShardTestKit.waitUntilLeader(shard); - final FiniteDuration duration = testKit.duration("5 seconds"); - final Timeout timeout = new Timeout(duration); + final Duration duration = Duration.ofSeconds(5); + final Timeout timeout = Timeout.create(duration); // Ready 2 transactions - the first one will be aborted. @@ -1549,7 +1564,7 @@ public class ShardTest extends AbstractShardTest { shard.tell(new CanCommitTransaction(transactionID1, CURRENT_VERSION).toSerializable(), testKit.getRef()); CanCommitTransactionReply canCommitReply = CanCommitTransactionReply .fromSerializable(testKit.expectMsgClass(duration, CanCommitTransactionReply.class)); - assertEquals("Can commit", true, canCommitReply.getCanCommit()); + assertTrue("Can commit", canCommitReply.getCanCommit()); // Send the CanCommitTransaction message for the 2nd Tx. This // should get queued and @@ -1567,8 +1582,9 @@ public class ShardTest extends AbstractShardTest { // Wait for the 2nd Tx to complete the canCommit phase. - canCommitReply = (CanCommitTransactionReply) Await.result(canCommitFuture, duration); - assertEquals("Can commit", true, canCommitReply.getCanCommit()); + canCommitReply = (CanCommitTransactionReply) Await.result(canCommitFuture, + FiniteDuration.create(5, TimeUnit.SECONDS)); + assertTrue("Can commit", canCommitReply.getCanCommit()); } @Test @@ -1580,7 +1596,7 @@ public class ShardTest extends AbstractShardTest { ShardTestKit.waitUntilLeader(shard); - final FiniteDuration duration = testKit.duration("5 seconds"); + final Duration duration = Duration.ofSeconds(5); // Ready a tx. @@ -1621,7 +1637,7 @@ public class ShardTest extends AbstractShardTest { ShardTestKit.waitUntilLeader(shard); - final FiniteDuration duration = testKit.duration("5 seconds"); + final Duration duration = Duration.ofSeconds(5); // Ready 3 tx's. @@ -1690,9 +1706,9 @@ public class ShardTest extends AbstractShardTest { dataStoreContextBuilder.persistent(persistent); - class TestShard extends Shard { + final class TestShard extends Shard { - protected TestShard(final AbstractBuilder builder) { + TestShard(final AbstractBuilder builder) { super(builder); setPersistence(new TestPersistentDataProvider(super.persistence())); } @@ -1713,18 +1729,15 @@ public class ShardTest extends AbstractShardTest { } } - final ShardTestKit testKit = new ShardTestKit(getSystem()); - final Creator creator = () -> new TestShard(newShardBuilder()); - final TestActorRef shard = actorFactory.createTestActor(Props - .create(new DelegatingShardCreator(creator)).withDispatcher(Dispatchers.DefaultDispatcherId()), - shardActorName); + final TestActorRef shard = actorFactory.createTestActor(Props.create(Shard.class, + new DelegatingShardCreator(creator)).withDispatcher(Dispatchers.DefaultDispatcherId()), shardActorName); ShardTestKit.waitUntilLeader(shard); writeToStore(shard, TestModel.TEST_PATH, ImmutableNodes.containerNode(TestModel.TEST_QNAME)); - final NormalizedNode expectedRoot = readStore(shard, YangInstanceIdentifier.EMPTY); + final NormalizedNode expectedRoot = readStore(shard, YangInstanceIdentifier.empty()); // Trigger creation of a snapshot by ensuring final RaftActorContext raftActorContext = ((TestShard) shard.underlyingActor()).getRaftActorContext(); @@ -1736,9 +1749,9 @@ public class ShardTest extends AbstractShardTest { } private static void awaitAndValidateSnapshot(final AtomicReference latch, - final AtomicReference savedSnapshot, final NormalizedNode expectedRoot) + final AtomicReference savedSnapshot, final NormalizedNode expectedRoot) throws InterruptedException { - assertEquals("Snapshot saved", true, latch.get().await(5, TimeUnit.SECONDS)); + assertTrue("Snapshot saved", latch.get().await(5, TimeUnit.SECONDS)); assertTrue("Invalid saved snapshot " + savedSnapshot.get(), savedSnapshot.get() instanceof Snapshot); @@ -1748,8 +1761,8 @@ public class ShardTest extends AbstractShardTest { savedSnapshot.set(null); } - private static void verifySnapshot(final Snapshot snapshot, final NormalizedNode expectedRoot) { - final NormalizedNode actual = ((ShardSnapshotState)snapshot.getState()).getSnapshot().getRootNode().get(); + private static void verifySnapshot(final Snapshot snapshot, final NormalizedNode expectedRoot) { + final NormalizedNode actual = ((ShardSnapshotState)snapshot.getState()).getSnapshot().getRootNode().get(); assertEquals("Root node", expectedRoot, actual); } @@ -1767,16 +1780,16 @@ public class ShardTest extends AbstractShardTest { commitTransaction(store, putTransaction); - final NormalizedNode expected = readStore(store, YangInstanceIdentifier.EMPTY); + final NormalizedNode expected = readStore(store, YangInstanceIdentifier.empty()); final DataTreeModification writeTransaction = store.takeSnapshot().newModification(); - writeTransaction.delete(YangInstanceIdentifier.EMPTY); - writeTransaction.write(YangInstanceIdentifier.EMPTY, expected); + writeTransaction.delete(YangInstanceIdentifier.empty()); + writeTransaction.write(YangInstanceIdentifier.empty(), expected); commitTransaction(store, writeTransaction); - final NormalizedNode actual = readStore(store, YangInstanceIdentifier.EMPTY); + final NormalizedNode actual = readStore(store, YangInstanceIdentifier.empty()); assertEquals(expected, actual); } @@ -1811,17 +1824,17 @@ public class ShardTest extends AbstractShardTest { final TestActorRef shard = actorFactory.createTestActor(newShardProps(), "testOnDatastoreContext"); - assertEquals("isRecoveryApplicable", true, shard.underlyingActor().persistence().isRecoveryApplicable()); + assertTrue("isRecoveryApplicable", shard.underlyingActor().persistence().isRecoveryApplicable()); ShardTestKit.waitUntilLeader(shard); shard.tell(dataStoreContextBuilder.persistent(false).build(), ActorRef.noSender()); - assertEquals("isRecoveryApplicable", false, shard.underlyingActor().persistence().isRecoveryApplicable()); + assertFalse("isRecoveryApplicable", shard.underlyingActor().persistence().isRecoveryApplicable()); shard.tell(dataStoreContextBuilder.persistent(true).build(), ActorRef.noSender()); - assertEquals("isRecoveryApplicable", true, shard.underlyingActor().persistence().isRecoveryApplicable()); + assertTrue("isRecoveryApplicable", shard.underlyingActor().persistence().isRecoveryApplicable()); } @Test @@ -1841,8 +1854,7 @@ public class ShardTest extends AbstractShardTest { ShardLeaderStateChanged leaderStateChanged = MessageCollectorActor.expectFirstMatching(listener, ShardLeaderStateChanged.class); - assertEquals("getLocalShardDataTree present", true, - leaderStateChanged.getLocalShardDataTree().isPresent()); + assertTrue("getLocalShardDataTree present", leaderStateChanged.getLocalShardDataTree().isPresent()); assertSame("getLocalShardDataTree", shard.underlyingActor().getDataStore().getDataTree(), leaderStateChanged.getLocalShardDataTree().get()); @@ -1852,9 +1864,8 @@ public class ShardTest extends AbstractShardTest { shard.tell(new RequestVote(10000, "member2", 50, 50), testKit.getRef()); - leaderStateChanged = MessageCollectorActor.expectFirstMatching(listener, - ShardLeaderStateChanged.class); - assertEquals("getLocalShardDataTree present", false, leaderStateChanged.getLocalShardDataTree().isPresent()); + leaderStateChanged = MessageCollectorActor.expectFirstMatching(listener, ShardLeaderStateChanged.class); + assertFalse("getLocalShardDataTree present", leaderStateChanged.getLocalShardDataTree().isPresent()); } @Test @@ -1866,12 +1877,12 @@ public class ShardTest extends AbstractShardTest { shard.underlyingActor().handleNonRaftCommand(new FollowerInitialSyncUpStatus(false, "member-1-shard-inventory-operational")); - assertEquals(false, shard.underlyingActor().getShardMBean().getFollowerInitialSyncStatus()); + assertFalse(shard.underlyingActor().getShardMBean().getFollowerInitialSyncStatus()); shard.underlyingActor().handleNonRaftCommand(new FollowerInitialSyncUpStatus(true, "member-1-shard-inventory-operational")); - assertEquals(true, shard.underlyingActor().getShardMBean().getFollowerInitialSyncStatus()); + assertTrue(shard.underlyingActor().getShardMBean().getFollowerInitialSyncStatus()); } @Test @@ -1894,7 +1905,7 @@ public class ShardTest extends AbstractShardTest { testKit.waitUntilNoLeader(shard); shard.tell(new RegisterDataTreeChangeListener(TestModel.TEST_PATH, dclActor, true), testKit.getRef()); - final RegisterDataTreeNotificationListenerReply reply = testKit.expectMsgClass(testKit.duration("5 seconds"), + final RegisterDataTreeNotificationListenerReply reply = testKit.expectMsgClass(Duration.ofSeconds(5), RegisterDataTreeNotificationListenerReply.class); assertNotNull("getListenerRegistrationPath", reply.getListenerRegistrationPath()); @@ -1924,7 +1935,7 @@ public class ShardTest extends AbstractShardTest { testKit.waitUntilNoLeader(shard); shard.tell(new RegisterDataTreeChangeListener(TestModel.TEST_PATH, dclActor, true), testKit.getRef()); - final RegisterDataTreeNotificationListenerReply reply = testKit.expectMsgClass(testKit.duration("5 seconds"), + final RegisterDataTreeNotificationListenerReply reply = testKit.expectMsgClass(Duration.ofSeconds(5), RegisterDataTreeNotificationListenerReply.class); assertNotNull("getListenerRegistrationPath", reply.getListenerRegistrationPath()); @@ -1973,7 +1984,7 @@ public class ShardTest extends AbstractShardTest { actorFactory.generateActorId(testName + "-DataTreeChangeListener")); followerShard.tell(new RegisterDataTreeChangeListener(TestModel.TEST_PATH, dclActor, true), testKit.getRef()); - final RegisterDataTreeNotificationListenerReply reply = testKit.expectMsgClass(testKit.duration("5 seconds"), + final RegisterDataTreeNotificationListenerReply reply = testKit.expectMsgClass(Duration.ofSeconds(5), RegisterDataTreeNotificationListenerReply.class); assertNotNull("getListenerRegistrationPath", reply.getListenerRegistrationPath());