X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-akka-raft%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fraft%2Fbehaviors%2FAbstractLeaderElectionScenarioTest.java;h=f3d1aac03050200a2cb70057126676d49ad6a092;hb=refs%2Fchanges%2F22%2F65622%2F11;hp=137ea4a694891eb46292e4ddb6a99aad54e3b657;hpb=e83057f284dc3c9bf84063a47a18bb41a26aebf3;p=controller.git diff --git a/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/behaviors/AbstractLeaderElectionScenarioTest.java b/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/behaviors/AbstractLeaderElectionScenarioTest.java index 137ea4a694..f3d1aac030 100644 --- a/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/behaviors/AbstractLeaderElectionScenarioTest.java +++ b/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/behaviors/AbstractLeaderElectionScenarioTest.java @@ -15,17 +15,19 @@ import akka.actor.ActorRef; import akka.actor.ActorSystem; import akka.actor.Props; import akka.actor.Status; +import akka.dispatch.ControlMessage; import akka.dispatch.Dispatchers; +import akka.dispatch.Mailboxes; import akka.pattern.Patterns; -import akka.testkit.JavaTestKit; import akka.testkit.TestActorRef; +import akka.testkit.javadsl.TestKit; import akka.util.Timeout; -import com.google.common.base.Throwables; import com.google.common.util.concurrent.Uninterruptibles; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; import org.junit.After; import org.junit.Before; import org.opendaylight.controller.cluster.raft.DefaultConfigParamsImpl; @@ -56,7 +58,8 @@ public class AbstractLeaderElectionScenarioTest { CountDownLatch behaviorStateChangeLatch; public static Props props() { - return Props.create(MemberActor.class).withDispatcher(Dispatchers.DefaultDispatcherId()); + return Props.create(MemberActor.class).withDispatcher(Dispatchers.DefaultDispatcherId()) + .withMailbox(Mailboxes.DefaultMailboxId()); } @Override @@ -124,22 +127,22 @@ public class AbstractLeaderElectionScenarioTest { Uninterruptibles.awaitUninterruptibly(behaviorStateChangeLatch, 5, TimeUnit.SECONDS)); } - void expectMessageClass(Class expClass, int expCount) { + void expectMessageClass(final Class expClass, final int expCount) { messagesReceivedLatches.put(expClass, new CountDownLatch(expCount)); } - void waitForExpectedMessages(Class expClass) { + void waitForExpectedMessages(final Class expClass) { CountDownLatch latch = messagesReceivedLatches.get(expClass); assertNotNull("No messages received for " + expClass, latch); assertTrue("Missing messages of type " + expClass, Uninterruptibles.awaitUninterruptibly(latch, 5, TimeUnit.SECONDS)); } - void dropMessagesToBehavior(Class msgClass) { + void dropMessagesToBehavior(final Class msgClass) { dropMessagesToBehavior(msgClass, 1); } - void dropMessagesToBehavior(Class msgClass, int expCount) { + void dropMessagesToBehavior(final Class msgClass, final int expCount) { expectMessageClass(msgClass, expCount); dropMessagesToBehavior.put(msgClass, Boolean.TRUE); } @@ -148,52 +151,51 @@ public class AbstractLeaderElectionScenarioTest { dropMessagesToBehavior.clear(); } - @Override public void clear() { behaviorStateChangeLatch = null; clearDropMessagesToBehavior(); messagesReceivedLatches.clear(); - super.clear(); + clearMessages(getSelf()); } - void forwardCapturedMessageToBehavior(Class msgClass, ActorRef sender) throws Exception { + void forwardCapturedMessageToBehavior(final Class msgClass, final ActorRef sender) { Object message = getFirstMatching(getSelf(), msgClass); assertNotNull("Message of type " + msgClass + " not received", message); getSelf().tell(message, sender); } - void forwardCapturedMessagesToBehavior(Class msgClass, ActorRef sender) throws Exception { + void forwardCapturedMessagesToBehavior(final Class msgClass, final ActorRef sender) { for (Object m: getAllMatching(getSelf(), msgClass)) { getSelf().tell(m, sender); } } - T getCapturedMessage(Class msgClass) throws Exception { + T getCapturedMessage(final Class msgClass) { T message = getFirstMatching(getSelf(), msgClass); assertNotNull("Message of type " + msgClass + " not received", message); return message; } } - static class SendImmediateHeartBeat { - public static final SendImmediateHeartBeat INSTANCE = new SendImmediateHeartBeat(); + static final class SendImmediateHeartBeat implements ControlMessage { + static final SendImmediateHeartBeat INSTANCE = new SendImmediateHeartBeat(); private SendImmediateHeartBeat() { } } - static class GetBehaviorState { - public static final GetBehaviorState INSTANCE = new GetBehaviorState(); + static final class GetBehaviorState implements ControlMessage { + static final GetBehaviorState INSTANCE = new GetBehaviorState(); private GetBehaviorState() { } } - static class SetBehavior { + static class SetBehavior implements ControlMessage { RaftActorBehavior behavior; MockRaftActorContext context; - SetBehavior(RaftActorBehavior behavior, MockRaftActorContext context) { + SetBehavior(final RaftActorBehavior behavior, final MockRaftActorContext context) { this.behavior = behavior; this.context = context; } @@ -225,7 +227,7 @@ public class AbstractLeaderElectionScenarioTest { @After public void tearDown() throws Exception { - JavaTestKit.shutdownActorSystem(system); + TestKit.shutdownActorSystem(system); } DefaultConfigParamsImpl newConfigParams() { @@ -236,8 +238,8 @@ public class AbstractLeaderElectionScenarioTest { return configParams; } - MockRaftActorContext newRaftActorContext(String id, ActorRef actor, - Map peerAddresses) { + MockRaftActorContext newRaftActorContext(final String id, final ActorRef actor, + final Map peerAddresses) { MockRaftActorContext context = new MockRaftActorContext(id, system, actor); context.setPeerAddresses(peerAddresses); context.getTermInformation().updateAndPersist(1, ""); @@ -245,18 +247,21 @@ public class AbstractLeaderElectionScenarioTest { } @SuppressWarnings("checkstyle:IllegalCatch") - void verifyBehaviorState(String name, MemberActor actor, RaftState expState) { + void verifyBehaviorState(final String name, final MemberActor actor, final RaftState expState) { + RaftState actualState; try { - RaftState actualState = (RaftState) Await.result(Patterns.ask(actor.self(), GetBehaviorState.INSTANCE, - Timeout.apply(5, TimeUnit.SECONDS)), Duration.apply(5, TimeUnit.SECONDS)); - assertEquals(name + " behavior state", expState, actualState); + actualState = (RaftState) Await.result(Patterns.ask(actor.self(), GetBehaviorState.INSTANCE, + Timeout.apply(5, TimeUnit.SECONDS)), Duration.apply(5, TimeUnit.SECONDS)); + } catch (RuntimeException e) { + throw e; } catch (Exception e) { - Throwables.propagate(e); + throw new RuntimeException(e); } + assertEquals(name + " behavior state", expState, actualState); } - void initializeLeaderBehavior(MemberActor actor, MockRaftActorContext context, int numActiveFollowers) - throws Exception { + void initializeLeaderBehavior(final MemberActor actor, final MockRaftActorContext context, + final int numActiveFollowers) { // Leader sends immediate heartbeats - we don't care about it so ignore it. // Sometimes the initial AppendEntries messages go to dead letters, probably b/c the follower actors // haven't been fully created/initialized by akka. So we try up to 3 times to create the Leader as @@ -291,14 +296,14 @@ public class AbstractLeaderElectionScenarioTest { } - TestActorRef newMemberActor(String name) throws Exception { + TestActorRef newMemberActor(final String name) throws TimeoutException, InterruptedException { TestActorRef actor = factory.createTestActor(MemberActor.props() .withDispatcher(Dispatchers.DefaultDispatcherId()), name); MessageCollectorActor.waitUntilReady(actor); return actor; } - void sendHeartbeat(TestActorRef leaderActor) { + void sendHeartbeat(final TestActorRef leaderActor) { Uninterruptibles.sleepUninterruptibly(HEARTBEAT_INTERVAL, TimeUnit.MILLISECONDS); leaderActor.tell(SendImmediateHeartBeat.INSTANCE, ActorRef.noSender()); }