package org.opendaylight.controller.cluster.raft.behaviors;
import static org.junit.Assert.assertEquals;
package org.opendaylight.controller.cluster.raft.behaviors;
import static org.junit.Assert.assertEquals;
import akka.actor.ActorRef;
import com.google.common.collect.ImmutableMap;
import org.junit.Test;
import org.opendaylight.controller.cluster.raft.DefaultConfigParamsImpl;
import org.opendaylight.controller.cluster.raft.RaftState;
import org.opendaylight.controller.cluster.raft.base.messages.ElectionTimeout;
import akka.actor.ActorRef;
import com.google.common.collect.ImmutableMap;
import org.junit.Test;
import org.opendaylight.controller.cluster.raft.DefaultConfigParamsImpl;
import org.opendaylight.controller.cluster.raft.RaftState;
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;
import org.opendaylight.controller.cluster.raft.messages.AppendEntries;
import org.opendaylight.controller.cluster.raft.messages.AppendEntriesReply;
import org.opendaylight.controller.cluster.raft.messages.RequestVote;
testLog.info("resolvePartitionedLeadersWithLeaderMember3SendingHeartbeatFirst starting");
// Re-establish connectivity between member 2 and 3, ie stop dropping messages between
testLog.info("resolvePartitionedLeadersWithLeaderMember3SendingHeartbeatFirst starting");
// Re-establish connectivity between member 2 and 3, ie stop dropping messages between
testLog.info("sendElectionTimeoutToNowCandidateMember2 starting");
// member 2, now a candidate, is partitioned from the Leader (now member 3) and hasn't received any
testLog.info("sendElectionTimeoutToNowCandidateMember2 starting");
// member 2, now a candidate, is partitioned from the Leader (now member 3) and hasn't received any
testLog.info("sendInitialElectionTimeoutToFollowerMember3 starting");
// Send ElectionTimeout to member 3 to simulate no heartbeat from a Leader (originally member 1).
testLog.info("sendInitialElectionTimeoutToFollowerMember3 starting");
// Send ElectionTimeout to member 3 to simulate no heartbeat from a Leader (originally member 1).
member3Actor.expectMessageClass(RequestVoteReply.class, 1);
member3Actor.expectMessageClass(AppendEntriesReply.class, 1);
member3Actor.expectMessageClass(RequestVoteReply.class, 1);
member3Actor.expectMessageClass(AppendEntriesReply.class, 1);
member1Actor.waitForExpectedMessages(RequestVote.class);
member2Actor.waitForExpectedMessages(RequestVote.class);
member1Actor.waitForExpectedMessages(RequestVote.class);
member2Actor.waitForExpectedMessages(RequestVote.class);
member1Actor.waitForExpectedMessages(RequestVote.class);
member3Actor.waitForExpectedMessages(RequestVote.class);
member1Actor.waitForExpectedMessages(RequestVote.class);
member3Actor.waitForExpectedMessages(RequestVote.class);
testLog.info("setupInitialMemberBehaviors starting");
// Create member 2's behavior initially as Follower
member2Context = newRaftActorContext("member2", member2ActorRef,
testLog.info("setupInitialMemberBehaviors starting");
// Create member 2's behavior initially as Follower
member2Context = newRaftActorContext("member2", member2ActorRef,
- ImmutableMap.<String,String>builder().
- put("member1", member1ActorRef.path().toString()).
- put("member3", member3ActorRef.path().toString()).build());
+ ImmutableMap.<String,String>builder()
+ .put("member1", member1ActorRef.path().toString())
+ .put("member3", member3ActorRef.path().toString()).build());
DefaultConfigParamsImpl member2ConfigParams = newConfigParams();
member2Context.setConfigParams(member2ConfigParams);
DefaultConfigParamsImpl member2ConfigParams = newConfigParams();
member2Context.setConfigParams(member2ConfigParams);
- member2Actor.behavior = new Follower(member2Context);
- member2Context.setCurrentBehavior(member2Actor.behavior);
+ member2Actor.self().tell(new SetBehavior(new Follower(member2Context), member2Context),
+ ActorRef.noSender());
// Create member 3's behavior initially as Follower
member3Context = newRaftActorContext("member3", member3ActorRef,
// Create member 3's behavior initially as Follower
member3Context = newRaftActorContext("member3", member3ActorRef,
- ImmutableMap.<String,String>builder().
- put("member1", member1ActorRef.path().toString()).
- put("member2", member2ActorRef.path().toString()).build());
+ ImmutableMap.<String,String>builder()
+ .put("member1", member1ActorRef.path().toString())
+ .put("member2", member2ActorRef.path().toString()).build());
DefaultConfigParamsImpl member3ConfigParams = newConfigParams();
member3Context.setConfigParams(member3ConfigParams);
DefaultConfigParamsImpl member3ConfigParams = newConfigParams();
member3Context.setConfigParams(member3ConfigParams);
- member3Actor.behavior = new Follower(member3Context);
- member3Context.setCurrentBehavior(member3Actor.behavior);
+ member3Actor.self().tell(new SetBehavior(new Follower(member3Context), member3Context),
+ ActorRef.noSender());
// Create member 1's behavior initially as Leader
member1Context = newRaftActorContext("member1", member1ActorRef,
// Create member 1's behavior initially as Leader
member1Context = newRaftActorContext("member1", member1ActorRef,
- ImmutableMap.<String,String>builder().
- put("member2", member2ActorRef.path().toString()).
- put("member3", member3ActorRef.path().toString()).build());
+ ImmutableMap.<String,String>builder()
+ .put("member2", member2ActorRef.path().toString())
+ .put("member3", member3ActorRef.path().toString()).build());
DefaultConfigParamsImpl member1ConfigParams = newConfigParams();
member1Context.setConfigParams(member1ConfigParams);
DefaultConfigParamsImpl member1ConfigParams = newConfigParams();
member1Context.setConfigParams(member1ConfigParams);