package org.opendaylight.controller.cluster.datastore;
+import static org.awaitility.Awaitility.await;
+import static org.mockito.Mockito.mock;
import static org.mockito.MockitoAnnotations.initMocks;
import akka.actor.ActorRef;
-import akka.actor.ActorSystem;
import akka.actor.PoisonPill;
import akka.actor.Props;
-import akka.testkit.JavaTestKit;
-import akka.testkit.TestActorRef;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.concurrent.CountDownLatch;
+import com.google.common.util.concurrent.SettableFuture;
+import java.time.Duration;
import java.util.concurrent.TimeUnit;
import org.junit.After;
import org.junit.Before;
-import org.mockito.Mock;
import org.opendaylight.controller.cluster.access.concepts.MemberName;
import org.opendaylight.controller.cluster.datastore.config.Configuration;
import org.opendaylight.controller.cluster.datastore.identifiers.ShardIdentifier;
protected static final MemberName MEMBER_1 = MemberName.forName("member-1");
protected static int ID_COUNTER = 1;
- protected static TestActorRef<MessageCollectorActor> mockShardActor;
+ protected static ActorRef mockShardActor;
protected static ShardIdentifier mockShardName;
protected final String shardMrgIDSuffix = "config" + ID_COUNTER++;
protected final TestActorFactory actorFactory = new TestActorFactory(getSystem());
- protected final Collection<ActorSystem> actorSystems = new ArrayList<>();
protected final DatastoreContext.Builder datastoreContextBuilder = DatastoreContext.newBuilder()
.dataStoreName(shardMrgIDSuffix).shardInitializationTimeout(600, TimeUnit.MILLISECONDS)
.shardHeartbeatIntervalInMillis(100).shardElectionTimeoutFactor(6);
- @Mock
- protected static CountDownLatch ready;
+ protected static SettableFuture<Void> ready;
protected TestShardManager.Builder newTestShardMgrBuilder() {
- return TestShardManager.builder(datastoreContextBuilder);
+ return TestShardManager.builder(datastoreContextBuilder).distributedDataStore(mock(DistributedDataStore.class));
}
protected TestShardManager.Builder newTestShardMgrBuilder(final Configuration config) {
- return TestShardManager.builder(datastoreContextBuilder).configuration(config);
+ return TestShardManager.builder(datastoreContextBuilder).configuration(config)
+ .distributedDataStore(mock(DistributedDataStore.class));
}
protected Props newShardMgrProps(final Configuration config) {
- return newTestShardMgrBuilder(config).waitTillReadyCountDownLatch(ready).props();
+ return newTestShardMgrBuilder(config).readinessFuture(ready).props();
}
@Before
- public void setUp() throws Exception {
+ public void setUp() {
initMocks(this);
+ ready = SettableFuture.create();
InMemoryJournal.clear();
InMemorySnapshotStore.clear();
if (mockShardActor == null) {
mockShardName = ShardIdentifier.create(Shard.DEFAULT_NAME, MEMBER_1, "config");
- mockShardActor = TestActorRef.create(getSystem(), Props.create(MessageCollectorActor.class),
- mockShardName.toString());
+ mockShardActor = getSystem().actorOf(MessageCollectorActor.props(), mockShardName.toString());
}
- mockShardActor.underlyingActor().clear();
+ MessageCollectorActor.clearMessages(mockShardActor);
}
@After
InMemoryJournal.clear();
InMemorySnapshotStore.clear();
- for (final ActorSystem system : actorSystems) {
- JavaTestKit.shutdownActorSystem(system, null, Boolean.TRUE);
- }
-
mockShardActor.tell(PoisonPill.getInstance(), ActorRef.noSender());
+ await().atMost(Duration.ofSeconds(10)).until(mockShardActor::isTerminated);
mockShardActor = null;
actorFactory.close();