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.HashMap;
18 import static org.junit.Assert.assertEquals;
20 public class LeaderTest extends AbstractRaftActorBehaviorTest {
22 private ActorRef leaderActor = getSystem().actorOf(Props.create(DoNothingActor.class));
23 private ActorRef senderActor = getSystem().actorOf(Props.create(DoNothingActor.class));
26 public void testHandleMessageForUnknownMessage() throws Exception {
27 new JavaTestKit(getSystem()) {{
29 new Leader(createActorContext());
31 // handle message should return the Leader state when it receives an
33 RaftState state = leader.handleMessage(senderActor, "foo");
34 Assert.assertEquals(RaftState.Leader, state);
40 public void testThatLeaderSendsAHeartbeatMessageToAllFollowers(){
41 new JavaTestKit(getSystem()) {{
43 new Within(duration("1 seconds")) {
44 protected void run() {
46 ActorRef followerActor = getTestActor();
48 MockRaftActorContext actorContext = (MockRaftActorContext) createActorContext();
50 Map<String, String> peerAddresses = new HashMap();
52 peerAddresses.put(followerActor.path().toString(), followerActor.path().toString());
54 actorContext.setPeerAddresses(peerAddresses);
56 Leader leader = new Leader(actorContext);
57 leader.handleMessage(senderActor, new SendHeartBeat());
59 final String out = new ExpectMsg<String>(duration("1 seconds"), "match hint") {
60 // do not put code outside this method, will run afterwards
61 protected String match(Object in) {
62 if (in instanceof AppendEntries) {
63 if (((AppendEntries) in).getTerm()
72 }.get(); // this extracts the received message
74 assertEquals("match", out);
83 @Override protected RaftActorBehavior createBehavior(RaftActorContext actorContext) {
84 return new Leader(actorContext);
87 @Override protected RaftActorContext createActorContext() {
88 return new MockRaftActorContext("test", getSystem(), leaderActor);