This patch removes the need for a subclass and some explicit casts.
Change-Id: I19a30266f8690ffcc68f70e949d88101db6552ae
Signed-off-by: Robert Varga <rovarga@cisco.com>
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
+import static org.mockito.Matchers.any;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import akka.actor.ActorRef;
import akka.actor.Props;
import static org.mockito.Mockito.verify;
import akka.actor.ActorRef;
import akka.actor.Props;
private final TestActorRef<MessageCollectorActor> leaderActor = actorFactory.createTestActor(
Props.create(MessageCollectorActor.class), actorFactory.generateActorId("leader"));
private final TestActorRef<MessageCollectorActor> leaderActor = actorFactory.createTestActor(
Props.create(MessageCollectorActor.class), actorFactory.generateActorId("leader"));
- private RaftActorBehavior follower;
+ private Follower follower;
private final short payloadVersion = 5;
private final short payloadVersion = 5;
- protected RaftActorBehavior createBehavior(RaftActorContext actorContext) {
- return new TestFollower(actorContext);
+ protected Follower createBehavior(RaftActorContext actorContext) {
+ return spy(new Follower(actorContext));
- private static int getElectionTimeoutCount(RaftActorBehavior follower){
- if(follower instanceof TestFollower){
- return ((TestFollower) follower).getElectionTimeoutCount();
- }
- return -1;
- }
-
@Test
public void testThatAnElectionTimeoutIsTriggered(){
MockRaftActorContext actorContext = createActorContext();
@Test
public void testThatAnElectionTimeoutIsTriggered(){
MockRaftActorContext actorContext = createActorContext();
assertEquals("isVoteGranted", true, reply.isVoteGranted());
assertEquals("getTerm", term, reply.getTerm());
assertEquals("isVoteGranted", true, reply.isVoteGranted());
assertEquals("getTerm", term, reply.getTerm());
- assertEquals("schedule election", 1, getElectionTimeoutCount(follower));
+ verify(follower).scheduleElection(any(FiniteDuration.class));
RequestVoteReply reply = MessageCollectorActor.expectFirstMatching(leaderActor, RequestVoteReply.class);
assertEquals("isVoteGranted", false, reply.isVoteGranted());
RequestVoteReply reply = MessageCollectorActor.expectFirstMatching(leaderActor, RequestVoteReply.class);
assertEquals("isVoteGranted", false, reply.isVoteGranted());
- assertEquals("schedule election", 0, getElectionTimeoutCount(follower));
+ verify(follower, never()).scheduleElection(any(FiniteDuration.class));
assertEquals("getFollowerId", context.getId(), reply.getFollowerId());
}
assertEquals("getFollowerId", context.getId(), reply.getFollowerId());
}
- assertNull("Expected null SnapshotTracker", ((Follower) follower).getSnapshotTracker());
+ assertNull("Expected null SnapshotTracker", follower.getSnapshotTracker());
int lastIncludedIndex = 1;
// Check that snapshot installation is not in progress
int lastIncludedIndex = 1;
// Check that snapshot installation is not in progress
- assertNull(((Follower) follower).getSnapshotTracker());
+ assertNull(follower.getSnapshotTracker());
// Make sure that we have more than 1 chunk to send
assertTrue(totalChunks > 1);
// Make sure that we have more than 1 chunk to send
assertTrue(totalChunks > 1);
chunkData, 1, totalChunks));
// Check if snapshot installation is in progress now
chunkData, 1, totalChunks));
// Check if snapshot installation is in progress now
- assertNotNull(((Follower) follower).getSnapshotTracker());
+ assertNotNull(follower.getSnapshotTracker());
// Send an append entry
AppendEntries appendEntries = mock(AppendEntries.class);
// Send an append entry
AppendEntries appendEntries = mock(AppendEntries.class);
assertEquals("getTerm", 1, reply.getTerm());
assertEquals("getFollowerId", context.getId(), reply.getFollowerId());
assertEquals("getTerm", 1, reply.getTerm());
assertEquals("getFollowerId", context.getId(), reply.getFollowerId());
- assertNull("Expected null SnapshotTracker", ((Follower) follower).getSnapshotTracker());
+ assertNull("Expected null SnapshotTracker", follower.getSnapshotTracker());
- assertEquals("schedule election", 1, getElectionTimeoutCount(follower));
+ verify(follower).scheduleElection(any(FiniteDuration.class));
MockRaftActorContext context = createActorContext();
follower = createBehavior(context);
follower.handleMessage(leaderActor, "non-raft-rpc");
MockRaftActorContext context = createActorContext();
follower = createBehavior(context);
follower.handleMessage(leaderActor, "non-raft-rpc");
- assertEquals("schedule election", 0, getElectionTimeoutCount(follower));
+ verify(follower, never()).scheduleElection(any(FiniteDuration.class));
}
public byte[] getNextChunk (ByteString bs, int offset, int chunkSize){
}
public byte[] getNextChunk (ByteString bs, int offset, int chunkSize){
AppendEntriesReply reply = MessageCollectorActor.expectFirstMatching(replyActor, AppendEntriesReply.class);
assertEquals("isSuccess", true, reply.isSuccess());
}
AppendEntriesReply reply = MessageCollectorActor.expectFirstMatching(replyActor, AppendEntriesReply.class);
assertEquals("isSuccess", true, reply.isSuccess());
}
-
- private static class TestFollower extends Follower {
-
- int electionTimeoutCount = 0;
-
- public TestFollower(RaftActorContext context) {
- super(context);
- }
-
- @Override
- protected void scheduleElection(FiniteDuration interval) {
- electionTimeoutCount++;
- super.scheduleElection(interval);
- }
-
- public int getElectionTimeoutCount() {
- return electionTimeoutCount;
- }
- }