Make Netty-3 dependency optional
[controller.git] / opendaylight / md-sal / sal-akka-raft / src / test / java / org / opendaylight / controller / cluster / raft / behaviors / DelayedMessagesElectionScenarioTest.java
index a0ae3e6df72a88a14b2d85c40cfe546c14450433..52985fd3c134ef82cdf3637c4b966a10b961049c 100644 (file)
@@ -15,6 +15,7 @@ import org.junit.Test;
 import org.opendaylight.controller.cluster.raft.DefaultConfigParamsImpl;
 import org.opendaylight.controller.cluster.raft.RaftState;
 import org.opendaylight.controller.cluster.raft.base.messages.TimeoutNow;
+import org.opendaylight.controller.cluster.raft.messages.AppendEntries;
 import org.opendaylight.controller.cluster.raft.messages.AppendEntriesReply;
 import org.opendaylight.controller.cluster.raft.messages.RequestVote;
 import org.opendaylight.controller.cluster.raft.messages.RequestVoteReply;
@@ -27,7 +28,7 @@ import org.opendaylight.controller.cluster.raft.messages.RequestVoteReply;
 public class DelayedMessagesElectionScenarioTest extends AbstractLeaderElectionScenarioTest {
 
     @Test
-    public void runTest() throws Exception {
+    public void runTest() {
         testLog.info("DelayedMessagesElectionScenarioTest starting");
 
         setupInitialMemberBehaviors();
@@ -43,7 +44,7 @@ public class DelayedMessagesElectionScenarioTest extends AbstractLeaderElectionS
         testLog.info("DelayedMessagesElectionScenarioTest ending");
     }
 
-    private void forwardDelayedRequestVoteReplyFromOriginalFollowerMember3ToMember2() throws Exception {
+    private void forwardDelayedRequestVoteReplyFromOriginalFollowerMember3ToMember2() {
         testLog.info("forwardDelayedRequestVoteReplyFromOriginalFollowerMember3ToMember2 starting");
 
         // Now forward the original delayed RequestVoteReply from member 3 to member 2 that granted
@@ -65,7 +66,7 @@ public class DelayedMessagesElectionScenarioTest extends AbstractLeaderElectionS
         testLog.info("forwardDelayedRequestVoteReplyFromOriginalFollowerMember3ToMember2 ending");
     }
 
-    private void sendElectionTimeoutToFollowerMember3() throws Exception {
+    private void sendElectionTimeoutToFollowerMember3() {
         testLog.info("sendElectionTimeoutToFollowerMember3 starting");
 
         // Send ElectionTimeout to member 3 to simulate missing heartbeat from a Leader. member 3
@@ -104,7 +105,7 @@ public class DelayedMessagesElectionScenarioTest extends AbstractLeaderElectionS
         testLog.info("sendElectionTimeoutToFollowerMember3 ending");
     }
 
-    private void forwardDelayedRequestVotesToLeaderMember1AndFollowerMember3() throws Exception {
+    private void forwardDelayedRequestVotesToLeaderMember1AndFollowerMember3() {
         testLog.info("forwardDelayedRequestVotesToLeaderMember1AndFollowerMember3 starting");
 
         // At this point member 1 and 3 actors have captured the RequestVote messages. First
@@ -148,15 +149,19 @@ public class DelayedMessagesElectionScenarioTest extends AbstractLeaderElectionS
         // should switch to Candidate and send out RequestVote messages. Set member 1 and 3 actors
         // to capture RequestVote but not to forward to the behavior just yet as we want to
         // control the order of RequestVote messages to member 1 and 3.
-
-        member1Actor.dropMessagesToBehavior(RequestVote.class);
-
         member2Actor.expectBehaviorStateChange();
 
+        // member 1 and member 3 may reach consensus to consider leader's initial Noop entry as committed, hence
+        // leader would elicit this information to member 2.
+        // We do not want that, as member 2 would respond to that request either before it bumps or after it bumps its
+        // term -- if it would see that message post-bump, it would leak term 2 back to member 1, hence leader would
+        // know about it.
+        member2Actor.dropMessagesToBehavior(AppendEntries.class);
+
+        member1Actor.dropMessagesToBehavior(RequestVote.class);
         member3Actor.dropMessagesToBehavior(RequestVote.class);
 
         member2ActorRef.tell(TimeoutNow.INSTANCE, ActorRef.noSender());
-
         member1Actor.waitForExpectedMessages(RequestVote.class);
         member3Actor.waitForExpectedMessages(RequestVote.class);
 
@@ -170,7 +175,7 @@ public class DelayedMessagesElectionScenarioTest extends AbstractLeaderElectionS
         testLog.info("sendInitialElectionTimeoutToFollowerMember2 ending");
     }
 
-    private void setupInitialMemberBehaviors() throws Exception {
+    private void setupInitialMemberBehaviors() {
         testLog.info("setupInitialMemberBehaviors starting");
 
         // Create member 2's behavior initially as Follower
@@ -183,8 +188,8 @@ public class DelayedMessagesElectionScenarioTest extends AbstractLeaderElectionS
         DefaultConfigParamsImpl member2ConfigParams = newConfigParams();
         member2Context.setConfigParams(member2ConfigParams);
 
-        member2Actor.behavior = new Follower(member2Context);
-        member2Context.setCurrentBehavior(member2Actor.behavior);
+        member2Actor.self().tell(new SetBehavior(new Follower(member2Context), member2Context),
+                ActorRef.noSender());
 
         // Create member 3's behavior initially as Follower
 
@@ -196,8 +201,8 @@ public class DelayedMessagesElectionScenarioTest extends AbstractLeaderElectionS
         DefaultConfigParamsImpl member3ConfigParams = newConfigParams();
         member3Context.setConfigParams(member3ConfigParams);
 
-        member3Actor.behavior = new Follower(member3Context);
-        member3Context.setCurrentBehavior(member3Actor.behavior);
+        member3Actor.self().tell(new SetBehavior(new Follower(member3Context), member3Context),
+                ActorRef.noSender());
 
         // Create member 1's behavior initially as Leader
 
@@ -215,6 +220,5 @@ public class DelayedMessagesElectionScenarioTest extends AbstractLeaderElectionS
         member3Actor.clear();
 
         testLog.info("setupInitialMemberBehaviors ending");
-
     }
 }