X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-distributed-datastore%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatastore%2FMemberNode.java;h=5ae53317f084f8b0f05e0023d23c581bf0e2c03e;hb=6313c088fc7db266cc25b691e0cd909300fc8425;hp=e966c95298a0a36fc1e0f031b4da762e40f966da;hpb=01be99539d7b19743a237b6e72d2d870491daf7a;p=controller.git diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/MemberNode.java b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/MemberNode.java index e966c95298..5ae53317f0 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/MemberNode.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/MemberNode.java @@ -7,7 +7,7 @@ */ package org.opendaylight.controller.cluster.datastore; -import static org.junit.Assert.assertTrue; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; import akka.actor.ActorRef; import akka.actor.ActorSystem; @@ -17,6 +17,7 @@ import akka.cluster.Cluster; import akka.cluster.ClusterEvent.CurrentClusterState; import akka.cluster.Member; import akka.cluster.MemberStatus; +import com.google.common.base.Optional; import com.google.common.base.Preconditions; import com.google.common.base.Stopwatch; import com.google.common.collect.Sets; @@ -99,6 +100,28 @@ public class MemberNode { fail("Member(s) " + otherMembersSet + " are not Up"); } + public void waitForMemberDown(String member) { + Stopwatch sw = Stopwatch.createStarted(); + while(sw.elapsed(TimeUnit.SECONDS) <= 10) { + CurrentClusterState state = Cluster.get(kit.getSystem()).state(); + for(Member m: state.getUnreachable()) { + if(member.equals(m.getRoles().iterator().next())) { + return; + } + } + + for(Member m: state.getMembers()) { + if(m.status() != MemberStatus.up() && member.equals(m.getRoles().iterator().next())) { + return; + } + } + + Uninterruptibles.sleepUninterruptibly(100, TimeUnit.MILLISECONDS); + } + + fail("Member " + member + " is now down"); + } + public void cleanup() { if(!cleanedUp) { cleanedUp = true; @@ -138,19 +161,31 @@ public class MemberNode { final Set peerIds = Sets.newHashSet(); for(String p: peerMemberNames) { peerIds.add(ShardIdentifier.builder().memberName(p).shardName(shardName). - type(datastore.getActorContext().getDataStoreType()).build().toString()); + type(datastore.getActorContext().getDataStoreName()).build().toString()); } verifyRaftState(datastore, shardName, new RaftStateVerifier() { @Override public void verify(OnDemandRaftState raftState) { - assertTrue(String.format("Peer(s) %s not found for shard %s. Actual: %s", peerIds, shardName, - raftState.getPeerAddresses().keySet()), - raftState.getPeerAddresses().keySet().containsAll(peerIds)); + assertEquals("Peers for shard " + shardName, peerIds, raftState.getPeerAddresses().keySet()); } }); } + public static void verifyNoShardPresent(DistributedDataStore datastore, String shardName) { + Stopwatch sw = Stopwatch.createStarted(); + while(sw.elapsed(TimeUnit.SECONDS) <= 5) { + Optional shardReply = datastore.getActorContext().findLocalShard(shardName); + if(!shardReply.isPresent()) { + return; + } + + Uninterruptibles.sleepUninterruptibly(50, TimeUnit.MILLISECONDS); + } + + fail("Shard " + shardName + " is present"); + } + public static class Builder { private final List members; private String moduleShardsConfig;