BUG-2138: Create DistributedShardFrontend
[controller.git] / opendaylight / md-sal / sal-distributed-datastore / src / test / java / org / opendaylight / controller / cluster / datastore / IntegrationTestKit.java
index 356026019f7a19ca54a1cd956231b01f9fe6e947..28c4fa38bbcff68403663bae4ea87c95803feb6a 100644 (file)
@@ -41,12 +41,16 @@ import org.opendaylight.controller.sal.core.spi.data.DOMStoreWriteTransaction;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import scala.concurrent.Await;
 import scala.concurrent.Future;
 import scala.concurrent.duration.Duration;
 
 public class IntegrationTestKit extends ShardTestKit {
 
+    private static final Logger LOG = LoggerFactory.getLogger(IntegrationTestKit.class);
+
     protected DatastoreContext.Builder datastoreContextBuilder;
     protected DatastoreSnapshot restoreFromSnapshot;
 
@@ -171,6 +175,19 @@ public class IntegrationTestKit extends ShardTestKit {
         return shard;
     }
 
+    public static void waitUntilShardIsDown(ActorContext actorContext, String shardName) {
+        for (int i = 0; i < 20 * 5 ; i++) {
+            LOG.debug("Waiting for shard down {}", shardName);
+            Uninterruptibles.sleepUninterruptibly(50, TimeUnit.MILLISECONDS);
+            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();