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.PoisonPill;
import akka.actor.Props;
-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;
.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).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();
InMemorySnapshotStore.clear();
mockShardActor.tell(PoisonPill.getInstance(), ActorRef.noSender());
+ await().atMost(Duration.ofSeconds(10)).until(mockShardActor::isTerminated);
mockShardActor = null;
actorFactory.close();