1 package org.opendaylight.controller.cluster.raft.behaviors;
3 import akka.actor.ActorRef;
4 import akka.actor.Props;
5 import akka.testkit.JavaTestKit;
6 import junit.framework.Assert;
8 import org.opendaylight.controller.cluster.raft.MockRaftActorContext;
9 import org.opendaylight.controller.cluster.raft.RaftActorContext;
10 import org.opendaylight.controller.cluster.raft.RaftState;
11 import org.opendaylight.controller.cluster.raft.internal.messages.SendHeartBeat;
12 import org.opendaylight.controller.cluster.raft.messages.AppendEntries;
13 import org.opendaylight.controller.cluster.raft.utils.DoNothingActor;
15 import java.util.ArrayList;
16 import java.util.Collections;
17 import java.util.List;
19 import static org.junit.Assert.assertEquals;
21 public class LeaderTest extends AbstractRaftActorBehaviorTest {
23 private ActorRef leaderActor = getSystem().actorOf(Props.create(DoNothingActor.class));
24 private ActorRef senderActor = getSystem().actorOf(Props.create(DoNothingActor.class));
27 public void testHandleMessageForUnknownMessage() throws Exception {
28 new JavaTestKit(getSystem()) {{
30 new Leader(createActorContext(), Collections.EMPTY_LIST);
32 // handle message should return the Leader state when it receives an
34 RaftState state = leader.handleMessage(senderActor, "foo");
35 Assert.assertEquals(RaftState.Leader, state);
41 public void testThatLeaderSendsAHeartbeatMessageToAllFollowers(){
42 new JavaTestKit(getSystem()) {{
44 new Within(duration("1 seconds")) {
45 protected void run() {
47 ActorRef followerActor = getTestActor();
49 List<String> followers = new ArrayList();
51 followers.add(followerActor.path().toString());
53 Leader leader = new Leader(createActorContext(), followers);
54 leader.handleMessage(senderActor, new SendHeartBeat());
56 final String out = new ExpectMsg<String>(duration("1 seconds"), "match hint") {
57 // do not put code outside this method, will run afterwards
58 protected String match(Object in) {
59 if (in instanceof AppendEntries) {
60 if (((AppendEntries) in).getTerm()
69 }.get(); // this extracts the received message
71 assertEquals("match", out);
80 @Override protected RaftActorBehavior createBehavior(RaftActorContext actorContext) {
81 return new Leader(actorContext, Collections.EMPTY_LIST);
84 @Override protected RaftActorContext createActorContext() {
85 return new MockRaftActorContext("test", getSystem(), leaderActor);