use of org.opendaylight.controller.cluster.raft.ReplicatedLogEntry in project controller by opendaylight.
the class CandidateTest method testResponseToHandleAppendEntriesWithEqualTerm.
@Test
public void testResponseToHandleAppendEntriesWithEqualTerm() {
MockRaftActorContext actorContext = createActorContext();
candidate = new Candidate(actorContext);
setupPeers(1);
RaftActorBehavior newBehavior = candidate.handleMessage(peerActors[0], new AppendEntries(2, "test", 0, 0, Collections.<ReplicatedLogEntry>emptyList(), 0, -1, (short) 0));
assertTrue("New Behavior : " + newBehavior + " term = " + actorContext.getTermInformation().getCurrentTerm(), newBehavior instanceof Follower);
}
use of org.opendaylight.controller.cluster.raft.ReplicatedLogEntry in project controller by opendaylight.
the class CandidateTest method testResponseToHandleAppendEntriesWithLowerTerm.
@Test
public void testResponseToHandleAppendEntriesWithLowerTerm() {
candidate = new Candidate(createActorContext());
setupPeers(1);
RaftActorBehavior newBehavior = candidate.handleMessage(peerActors[0], new AppendEntries(1, "test", 0, 0, Collections.<ReplicatedLogEntry>emptyList(), 0, -1, (short) 0));
AppendEntriesReply reply = MessageCollectorActor.expectFirstMatching(peerActors[0], AppendEntriesReply.class);
assertEquals("isSuccess", false, reply.isSuccess());
assertEquals("getTerm", 2, reply.getTerm());
assertTrue("New Behavior : " + newBehavior, newBehavior instanceof Candidate);
}
use of org.opendaylight.controller.cluster.raft.ReplicatedLogEntry in project controller by opendaylight.
the class CandidateTest method testResponseToHandleAppendEntriesWithHigherTerm.
@Test
public void testResponseToHandleAppendEntriesWithHigherTerm() {
candidate = new Candidate(createActorContext());
setupPeers(1);
RaftActorBehavior newBehavior = candidate.handleMessage(peerActors[0], new AppendEntries(5, "test", 0, 0, Collections.<ReplicatedLogEntry>emptyList(), 0, -1, (short) 0));
assertTrue("New Behavior : " + newBehavior, newBehavior instanceof Follower);
}
use of org.opendaylight.controller.cluster.raft.ReplicatedLogEntry in project controller by opendaylight.
the class CandidateTest method testHandleAppendEntriesAddSameEntryToLog.
@Test
@Override
public void testHandleAppendEntriesAddSameEntryToLog() {
MockRaftActorContext context = createActorContext();
context.getTermInformation().update(2, "test");
// Prepare the receivers log
MockRaftActorContext.MockPayload payload = new MockRaftActorContext.MockPayload("zero");
setLastLogEntry(context, 2, 0, payload);
List<ReplicatedLogEntry> entries = new ArrayList<>();
entries.add(new SimpleReplicatedLogEntry(0, 2, payload));
final AppendEntries appendEntries = new AppendEntries(2, "leader-1", -1, -1, entries, 2, -1, (short) 0);
behavior = createBehavior(context);
// Resetting the Candidates term to make sure it will match
// the term sent by AppendEntries. If this was not done then
// the test will fail because the Candidate will assume that
// the message was sent to it from a lower term peer and will
// thus respond with a failure
context.getTermInformation().update(2, "test");
// Send an unknown message so that the state of the RaftActor remains unchanged
behavior.handleMessage(candidateActor, "unknown");
RaftActorBehavior raftBehavior = behavior.handleMessage(candidateActor, appendEntries);
assertEquals("Raft state", RaftState.Follower, raftBehavior.state());
assertEquals("ReplicatedLog size", 1, context.getReplicatedLog().size());
handleAppendEntriesAddSameEntryToLogReply(candidateActor);
}
use of org.opendaylight.controller.cluster.raft.ReplicatedLogEntry in project controller by opendaylight.
the class FollowerTest method testHandleFirstAppendEntries.
@Test
public void testHandleFirstAppendEntries() {
logStart("testHandleFirstAppendEntries");
MockRaftActorContext context = createActorContext();
context.getReplicatedLog().clear(0, 2);
context.getReplicatedLog().append(newReplicatedLogEntry(1, 100, "bar"));
context.getReplicatedLog().setSnapshotIndex(99);
List<ReplicatedLogEntry> entries = Arrays.asList(newReplicatedLogEntry(2, 101, "foo"));
Assert.assertEquals(1, context.getReplicatedLog().size());
// The new commitIndex is 101
AppendEntries appendEntries = new AppendEntries(2, "leader-1", 100, 1, entries, 101, 100, (short) 0);
follower = createBehavior(context);
follower.handleMessage(leaderActor, appendEntries);
FollowerInitialSyncUpStatus syncStatus = MessageCollectorActor.expectFirstMatching(followerActor, FollowerInitialSyncUpStatus.class);
AppendEntriesReply reply = MessageCollectorActor.expectFirstMatching(leaderActor, AppendEntriesReply.class);
assertFalse(syncStatus.isInitialSyncDone());
assertTrue("append entries reply should be true", reply.isSuccess());
}
Aggregations