Properly handle RequestVote in all states
[controller.git] / opendaylight / md-sal / sal-akka-raft / src / test / java / org / opendaylight / controller / cluster / raft / behaviors / LeaderTest.java
index 08a79e55653fff6e4fcff5802b3e495db15f4d9f..5684d6651ebf2fc797c4fd7f2ffb76a569a436bb 100644 (file)
@@ -1,13 +1,16 @@
 package org.opendaylight.controller.cluster.raft.behaviors;
 
+import akka.actor.ActorRef;
+import akka.actor.Props;
 import akka.testkit.JavaTestKit;
 import junit.framework.Assert;
 import org.junit.Test;
-import org.opendaylight.controller.cluster.raft.AbstractActorTest;
 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.internal.messages.SendHeartBeat;
 import org.opendaylight.controller.cluster.raft.messages.AppendEntries;
+import org.opendaylight.controller.cluster.raft.utils.DoNothingActor;
 
 import java.util.ArrayList;
 import java.util.Collections;
@@ -15,17 +18,20 @@ import java.util.List;
 
 import static org.junit.Assert.assertEquals;
 
-public class LeaderTest extends AbstractActorTest {
+public class LeaderTest extends AbstractRaftActorBehaviorTest {
+
+    private ActorRef leaderActor = getSystem().actorOf(Props.create(DoNothingActor.class));
+    private ActorRef senderActor = getSystem().actorOf(Props.create(DoNothingActor.class));
 
     @Test
     public void testHandleMessageForUnknownMessage() throws Exception {
         new JavaTestKit(getSystem()) {{
             Leader leader =
-                new Leader(new MockRaftActorContext(), Collections.EMPTY_LIST);
+                new Leader(createActorContext(), Collections.EMPTY_LIST);
 
             // handle message should return the Leader state when it receives an
             // unknown message
-            RaftState state = leader.handleMessage(getRef(), "foo");
+            RaftState state = leader.handleMessage(senderActor, "foo");
             Assert.assertEquals(RaftState.Leader, state);
         }};
     }
@@ -38,12 +44,14 @@ public class LeaderTest extends AbstractActorTest {
             new Within(duration("1 seconds")) {
                 protected void run() {
 
+                    ActorRef followerActor = getTestActor();
+
                     List<String> followers = new ArrayList();
 
-                    followers.add(getTestActor().path().toString());
+                    followers.add(followerActor.path().toString());
 
-                    Leader leader = new Leader(new MockRaftActorContext("test", getSystem(), getTestActor()), followers);
-                    leader.handleMessage(getRef(), new SendHeartBeat());
+                    Leader leader = new Leader(createActorContext(), followers);
+                    leader.handleMessage(senderActor, new SendHeartBeat());
 
                     final String out = new ExpectMsg<String>(duration("1 seconds"), "match hint") {
                         // do not put code outside this method, will run afterwards
@@ -68,4 +76,12 @@ public class LeaderTest extends AbstractActorTest {
             };
         }};
     }
+
+    @Override protected RaftActorBehavior createBehavior(RaftActorContext actorContext) {
+        return new Leader(actorContext, Collections.EMPTY_LIST);
+    }
+
+    @Override protected RaftActorContext createActorContext() {
+        return new MockRaftActorContext("test", getSystem(), leaderActor);
+    }
 }