Merge "BUG-190 Simplify reconnect logic in protocol-framework."
[controller.git] / opendaylight / md-sal / sal-akka-raft / src / test / java / org / opendaylight / controller / cluster / raft / behaviors / AbstractRaftActorBehaviorTest.java
index 273342eb47b8eda33cd636fd63f1e7fc973c5d94..8068dfbcff48970ad7203c43aae378eac4803851 100644 (file)
@@ -9,11 +9,13 @@ 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.SerializationUtils;
 import org.opendaylight.controller.cluster.raft.messages.AppendEntries;
 import org.opendaylight.controller.cluster.raft.messages.AppendEntriesReply;
 import org.opendaylight.controller.cluster.raft.messages.RaftRPC;
 import org.opendaylight.controller.cluster.raft.messages.RequestVote;
 import org.opendaylight.controller.cluster.raft.messages.RequestVoteReply;
+import org.opendaylight.controller.cluster.raft.protobuff.client.messages.Payload;
 import org.opendaylight.controller.cluster.raft.utils.DoNothingActor;
 
 import java.util.ArrayList;
@@ -120,13 +122,13 @@ public abstract class AbstractRaftActorBehaviorTest extends AbstractActorTest {
                 MockRaftActorContext.SimpleReplicatedLog log =
                     new MockRaftActorContext.SimpleReplicatedLog();
                 log.append(
-                    new MockRaftActorContext.MockReplicatedLogEntry(1, 0, "zero"));
+                    new MockRaftActorContext.MockReplicatedLogEntry(1, 0, new MockRaftActorContext.MockPayload("zero")));
 
                 context.setReplicatedLog(log);
 
                 List<ReplicatedLogEntry> entries = new ArrayList<>();
                 entries.add(
-                    new MockRaftActorContext.MockReplicatedLogEntry(1, 0, "zero"));
+                    new MockRaftActorContext.MockReplicatedLogEntry(1, 0, new MockRaftActorContext.MockPayload("zero")));
 
                 AppendEntries appendEntries =
                     new AppendEntries(2, "leader-1", -1, 1, entries, 0);
@@ -169,28 +171,33 @@ public abstract class AbstractRaftActorBehaviorTest extends AbstractActorTest {
             new Within(duration("1 seconds")) {
                 protected void run() {
 
-                    RaftActorBehavior follower = createBehavior(
+                    RaftActorBehavior behavior = createBehavior(
                         createActorContext(behaviorActor));
 
-                    follower.handleMessage(getTestActor(),
+                    RaftState raftState = behavior.handleMessage(getTestActor(),
                         new RequestVote(1000, "test", 10000, 999));
 
-                    final Boolean out =
-                        new ExpectMsg<Boolean>(duration("1 seconds"),
-                            "RequestVoteReply") {
-                            // do not put code outside this method, will run afterwards
-                            protected Boolean match(Object in) {
-                                if (in instanceof RequestVoteReply) {
-                                    RequestVoteReply reply =
-                                        (RequestVoteReply) in;
-                                    return reply.isVoteGranted();
-                                } else {
-                                    throw noMatch();
+                    if(behavior.state() != RaftState.Follower){
+                        assertEquals(RaftState.Follower, raftState);
+                    } else {
+
+                        final Boolean out =
+                            new ExpectMsg<Boolean>(duration("1 seconds"),
+                                "RequestVoteReply") {
+                                // do not put code outside this method, will run afterwards
+                                protected Boolean match(Object in) {
+                                    if (in instanceof RequestVoteReply) {
+                                        RequestVoteReply reply =
+                                            (RequestVoteReply) in;
+                                        return reply.isVoteGranted();
+                                    } else {
+                                        throw noMatch();
+                                    }
                                 }
-                            }
-                        }.get();
+                            }.get();
 
-                    assertEquals(true, out);
+                        assertEquals(true, out);
+                    }
                 }
             };
         }};
@@ -211,39 +218,39 @@ public abstract class AbstractRaftActorBehaviorTest extends AbstractActorTest {
                     RaftActorContext actorContext =
                         createActorContext(behaviorActor);
 
-                    MockRaftActorContext.MockReplicatedLog
-                        log = new MockRaftActorContext.MockReplicatedLog();
-                    log.setReplicatedLogEntry(
+                    MockRaftActorContext.SimpleReplicatedLog
+                        log = new MockRaftActorContext.SimpleReplicatedLog();
+                    log.append(
                         new MockRaftActorContext.MockReplicatedLogEntry(20000,
-                            1000000, ""));
-                    log.setLast(
-                        new MockRaftActorContext.MockReplicatedLogEntry(20000,
-                            1000000, "")
-                    );
+                            1000000, new MockRaftActorContext.MockPayload("")));
 
                     ((MockRaftActorContext) actorContext).setReplicatedLog(log);
 
-                    RaftActorBehavior follower = createBehavior(actorContext);
+                    RaftActorBehavior behavior = createBehavior(actorContext);
 
-                    follower.handleMessage(getTestActor(),
+                    RaftState raftState = behavior.handleMessage(getTestActor(),
                         new RequestVote(1000, "test", 10000, 999));
 
-                    final Boolean out =
-                        new ExpectMsg<Boolean>(duration("1 seconds"),
-                            "RequestVoteReply") {
-                            // do not put code outside this method, will run afterwards
-                            protected Boolean match(Object in) {
-                                if (in instanceof RequestVoteReply) {
-                                    RequestVoteReply reply =
-                                        (RequestVoteReply) in;
-                                    return reply.isVoteGranted();
-                                } else {
-                                    throw noMatch();
+                    if(behavior.state() != RaftState.Follower){
+                        assertEquals(RaftState.Follower, raftState);
+                    } else {
+                        final Boolean out =
+                            new ExpectMsg<Boolean>(duration("1 seconds"),
+                                "RequestVoteReply") {
+                                // do not put code outside this method, will run afterwards
+                                protected Boolean match(Object in) {
+                                    if (in instanceof RequestVoteReply) {
+                                        RequestVoteReply reply =
+                                            (RequestVoteReply) in;
+                                        return reply.isVoteGranted();
+                                    } else {
+                                        throw noMatch();
+                                    }
                                 }
-                            }
-                        }.get();
+                            }.get();
 
-                    assertEquals(false, out);
+                        assertEquals(false, out);
+                    }
                 }
             };
         }};
@@ -298,8 +305,9 @@ public abstract class AbstractRaftActorBehaviorTest extends AbstractActorTest {
         ActorRef actorRef, RaftRPC rpc) {
 
         RaftActorContext actorContext = createActorContext();
+        Payload p = new MockRaftActorContext.MockPayload("");
         setLastLogEntry(
-            (MockRaftActorContext) actorContext, 0, 0, "");
+            (MockRaftActorContext) actorContext, 0, 0, p);
 
         RaftState raftState = createBehavior(actorContext)
             .handleMessage(actorRef, rpc);
@@ -307,18 +315,17 @@ public abstract class AbstractRaftActorBehaviorTest extends AbstractActorTest {
         assertEquals(RaftState.Follower, raftState);
     }
 
-    protected MockRaftActorContext.MockReplicatedLog setLastLogEntry(
-        MockRaftActorContext actorContext, long term, long index, Object data) {
+    protected MockRaftActorContext.SimpleReplicatedLog setLastLogEntry(
+        MockRaftActorContext actorContext, long term, long index, Payload data) {
         return setLastLogEntry(actorContext,
             new MockRaftActorContext.MockReplicatedLogEntry(term, index, data));
     }
 
-    protected MockRaftActorContext.MockReplicatedLog setLastLogEntry(
+    protected MockRaftActorContext.SimpleReplicatedLog setLastLogEntry(
         MockRaftActorContext actorContext, ReplicatedLogEntry logEntry) {
-        MockRaftActorContext.MockReplicatedLog
-            log = new MockRaftActorContext.MockReplicatedLog();
-        // By default MockReplicateLog has last entry set to (1,1,"")
-        log.setLast(logEntry);
+        MockRaftActorContext.SimpleReplicatedLog
+            log = new MockRaftActorContext.SimpleReplicatedLog();
+        log.append(logEntry);
         actorContext.setReplicatedLog(log);
 
         return log;
@@ -355,6 +362,7 @@ public abstract class AbstractRaftActorBehaviorTest extends AbstractActorTest {
         return new RequestVoteReply(100, false);
     }
 
-
-
+    protected Object fromSerializableMessage(Object serializable){
+        return SerializationUtils.fromSerializable(serializable);
+    }
 }