+ public static void waitUntilShardIsDown(final ActorContext actorContext, final String shardName) {
+ for (int i = 0; i < 20 * 5 ; i++) {
+ LOG.debug("Waiting for shard down {}", shardName);
+ Uninterruptibles.sleepUninterruptibly(50, TimeUnit.MILLISECONDS);
+ com.google.common.base.Optional<ActorRef> shardReply = actorContext.findLocalShard(shardName);
+ if (!shardReply.isPresent()) {
+ return;
+ }
+ }
+
+ throw new IllegalStateException("Shard[" + shardName + " did not shutdown in time");
+ }
+
+ public static void verifyShardStats(final AbstractDataStore datastore, final String shardName,
+ final ShardStatsVerifier verifier) throws Exception {
+ ActorContext actorContext = datastore.getActorContext();
+
+ Future<ActorRef> future = actorContext.findLocalShardAsync(shardName);
+ ActorRef shardActor = Await.result(future, Duration.create(10, TimeUnit.SECONDS));
+
+ AssertionError lastError = null;
+ Stopwatch sw = Stopwatch.createStarted();
+ while (sw.elapsed(TimeUnit.SECONDS) <= 5) {
+ ShardStats shardStats = (ShardStats)actorContext
+ .executeOperation(shardActor, Shard.GET_SHARD_MBEAN_MESSAGE);
+
+ try {
+ verifier.verify(shardStats);
+ return;
+ } catch (AssertionError e) {
+ lastError = e;
+ Uninterruptibles.sleepUninterruptibly(50, TimeUnit.MILLISECONDS);
+ }
+ }
+
+ throw lastError;
+ }
+
+ public static void verifyShardState(final AbstractDataStore datastore, final String shardName,
+ final Consumer<OnDemandShardState> verifier) throws Exception {
+ ActorContext actorContext = datastore.getActorContext();
+
+ Future<ActorRef> future = actorContext.findLocalShardAsync(shardName);
+ ActorRef shardActor = Await.result(future, Duration.create(10, TimeUnit.SECONDS));
+
+ AssertionError lastError = null;
+ Stopwatch sw = Stopwatch.createStarted();
+ while (sw.elapsed(TimeUnit.SECONDS) <= 5) {
+ OnDemandShardState shardState = (OnDemandShardState)actorContext
+ .executeOperation(shardActor, GetOnDemandRaftState.INSTANCE);
+
+ try {
+ verifier.accept(shardState);
+ return;
+ } catch (AssertionError e) {
+ lastError = e;
+ Uninterruptibles.sleepUninterruptibly(50, TimeUnit.MILLISECONDS);
+ }
+ }
+
+ throw lastError;
+ }
+
+ void testWriteTransaction(final AbstractDataStore dataStore, final YangInstanceIdentifier nodePath,
+ final NormalizedNode<?, ?> nodeToWrite) throws Exception {