Tune replication and stabilize tests
[controller.git] / opendaylight / md-sal / sal-akka-raft / src / test / java / org / opendaylight / controller / cluster / raft / behaviors / FollowerTest.java
index 677442402c61a6c928e000ded711819ddcca91eb..c5a81aa1c9225ea03fa548bf1950d5e73a7e3329 100644 (file)
@@ -5,11 +5,12 @@ import akka.actor.Props;
 import akka.testkit.JavaTestKit;
 import junit.framework.Assert;
 import org.junit.Test;
+import org.opendaylight.controller.cluster.raft.DefaultConfigParamsImpl;
 import org.opendaylight.controller.cluster.raft.MockRaftActorContext;
 import org.opendaylight.controller.cluster.raft.RaftActorContext;
 import org.opendaylight.controller.cluster.raft.RaftState;
 import org.opendaylight.controller.cluster.raft.ReplicatedLogEntry;
-import org.opendaylight.controller.cluster.raft.internal.messages.ElectionTimeout;
+import org.opendaylight.controller.cluster.raft.base.messages.ElectionTimeout;
 import org.opendaylight.controller.cluster.raft.messages.AppendEntries;
 import org.opendaylight.controller.cluster.raft.messages.AppendEntriesReply;
 import org.opendaylight.controller.cluster.raft.messages.RequestVote;
@@ -17,6 +18,7 @@ import org.opendaylight.controller.cluster.raft.messages.RequestVoteReply;
 import org.opendaylight.controller.cluster.raft.utils.DoNothingActor;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 
 import static org.junit.Assert.assertEquals;
@@ -40,12 +42,12 @@ public class FollowerTest extends AbstractRaftActorBehaviorTest {
     public void testThatAnElectionTimeoutIsTriggered(){
         new JavaTestKit(getSystem()) {{
 
-            new Within(duration("1 seconds")) {
+            new Within(DefaultConfigParamsImpl.HEART_BEAT_INTERVAL.$times(6)) {
                 protected void run() {
 
                     Follower follower = new Follower(createActorContext(getTestActor()));
 
-                    final Boolean out = new ExpectMsg<Boolean>(duration("1 seconds"), "ElectionTimeout") {
+                    final Boolean out = new ExpectMsg<Boolean>(DefaultConfigParamsImpl.HEART_BEAT_INTERVAL.$times(6), "ElectionTimeout") {
                         // do not put code outside this method, will run afterwards
                         protected Boolean match(Object in) {
                             if (in instanceof ElectionTimeout) {
@@ -156,11 +158,17 @@ public class FollowerTest extends AbstractRaftActorBehaviorTest {
                 createActorContext();
 
             context.setLastApplied(100);
-            setLastLogEntry((MockRaftActorContext) context, 0, 0, "");
+            setLastLogEntry((MockRaftActorContext) context, 0, 0, new MockRaftActorContext.MockPayload(""));
+
+            List<ReplicatedLogEntry> entries =
+                Arrays.asList(
+                    (ReplicatedLogEntry) new MockRaftActorContext.MockReplicatedLogEntry(100, 101,
+                        new MockRaftActorContext.MockPayload("foo"))
+                );
 
             // The new commitIndex is 101
             AppendEntries appendEntries =
-                new AppendEntries(100, "leader-1", 0, 0, null, 101);
+                new AppendEntries(100, "leader-1", 0, 0, entries, 101);
 
             RaftState raftState =
                 createBehavior(context).handleMessage(getRef(), appendEntries);
@@ -191,7 +199,7 @@ public class FollowerTest extends AbstractRaftActorBehaviorTest {
             // Set the last log entry term for the receiver to be greater than
             // what we will be sending as the prevLogTerm in AppendEntries
             MockRaftActorContext.SimpleReplicatedLog mockReplicatedLog =
-                setLastLogEntry(context, 20, 0, "");
+                setLastLogEntry(context, 20, 0, new MockRaftActorContext.MockPayload(""));
 
             // AppendEntries is now sent with a bigger term
             // this will set the receivers term to be the same as the sender's term
@@ -252,20 +260,20 @@ public class FollowerTest extends AbstractRaftActorBehaviorTest {
             MockRaftActorContext.SimpleReplicatedLog log =
                 new MockRaftActorContext.SimpleReplicatedLog();
             log.append(
-                new MockRaftActorContext.MockReplicatedLogEntry(1, 0, "zero"));
+                new MockRaftActorContext.MockReplicatedLogEntry(1, 0, new MockRaftActorContext.MockPayload("zero")));
             log.append(
-                new MockRaftActorContext.MockReplicatedLogEntry(1, 1, "one"));
+                new MockRaftActorContext.MockReplicatedLogEntry(1, 1, new MockRaftActorContext.MockPayload("one")));
             log.append(
-                new MockRaftActorContext.MockReplicatedLogEntry(1, 2, "two"));
+                new MockRaftActorContext.MockReplicatedLogEntry(1, 2, new MockRaftActorContext.MockPayload("two")));
 
             context.setReplicatedLog(log);
 
             // Prepare the entries to be sent with AppendEntries
             List<ReplicatedLogEntry> entries = new ArrayList<>();
             entries.add(
-                new MockRaftActorContext.MockReplicatedLogEntry(1, 3, "three"));
+                new MockRaftActorContext.MockReplicatedLogEntry(1, 3, new MockRaftActorContext.MockPayload("three")));
             entries.add(
-                new MockRaftActorContext.MockReplicatedLogEntry(1, 4, "four"));
+                new MockRaftActorContext.MockReplicatedLogEntry(1, 4, new MockRaftActorContext.MockPayload("four")));
 
             // Send appendEntries with the same term as was set on the receiver
             // before the new behavior was created (1 in this case)
@@ -332,20 +340,20 @@ public class FollowerTest extends AbstractRaftActorBehaviorTest {
             MockRaftActorContext.SimpleReplicatedLog log =
                 new MockRaftActorContext.SimpleReplicatedLog();
             log.append(
-                new MockRaftActorContext.MockReplicatedLogEntry(1, 0, "zero"));
+                new MockRaftActorContext.MockReplicatedLogEntry(1, 0, new MockRaftActorContext.MockPayload("zero")));
             log.append(
-                new MockRaftActorContext.MockReplicatedLogEntry(1, 1, "one"));
+                new MockRaftActorContext.MockReplicatedLogEntry(1, 1, new MockRaftActorContext.MockPayload("one")));
             log.append(
-                new MockRaftActorContext.MockReplicatedLogEntry(1, 2, "two"));
+                new MockRaftActorContext.MockReplicatedLogEntry(1, 2, new MockRaftActorContext.MockPayload("two")));
 
             context.setReplicatedLog(log);
 
             // Prepare the entries to be sent with AppendEntries
             List<ReplicatedLogEntry> entries = new ArrayList<>();
             entries.add(
-                new MockRaftActorContext.MockReplicatedLogEntry(2, 2, "two-1"));
+                new MockRaftActorContext.MockReplicatedLogEntry(2, 2, new MockRaftActorContext.MockPayload("two-1")));
             entries.add(
-                new MockRaftActorContext.MockReplicatedLogEntry(2, 3, "three"));
+                new MockRaftActorContext.MockReplicatedLogEntry(2, 3, new MockRaftActorContext.MockPayload("three")));
 
             // Send appendEntries with the same term as was set on the receiver
             // before the new behavior was created (1 in this case)
@@ -371,8 +379,13 @@ public class FollowerTest extends AbstractRaftActorBehaviorTest {
             assertEquals(4, log.last().getIndex() + 1);
             assertNotNull(log.get(2));
 
+            assertEquals("one", log.get(1).getData().toString());
+
             // Check that the entry at index 2 has the new data
-            assertEquals("two-1", log.get(2).getData());
+            assertEquals("two-1", log.get(2).getData().toString());
+
+            assertEquals("three", log.get(3).getData().toString());
+
             assertNotNull(log.get(3));
 
             // Also expect an AppendEntriesReply to be sent where success is false