use of org.neo4j.cluster.statemachine.State in project neo4j by neo4j.
the class LearnerStateTest method shouldUseLastKnownOnlineClusterMemberAndSetTimeoutForCatchup.
@Test
public void shouldUseLastKnownOnlineClusterMemberAndSetTimeoutForCatchup() throws Throwable {
// Given
LearnerState state = LearnerState.learner;
LearnerContext ctx = mock(LearnerContext.class);
MessageHolder outgoing = mock(MessageHolder.class);
org.neo4j.cluster.InstanceId upToDateClusterMember = new org.neo4j.cluster.InstanceId(1);
// What we know
when(ctx.getLastLearnedInstanceId()).thenReturn(0L);
when(ctx.getPaxosInstance(new org.neo4j.cluster.protocol.atomicbroadcast.multipaxos.InstanceId(1L))).thenReturn(new PaxosInstance(null, new org.neo4j.cluster.protocol.atomicbroadcast.multipaxos.InstanceId(1L)));
when(ctx.getLastKnownAliveUpToDateInstance()).thenReturn(upToDateClusterMember);
when(ctx.getUriForId(upToDateClusterMember)).thenReturn(new URI("c:/1"));
// What we know the cluster knows
when(ctx.getLastKnownLearnedInstanceInCluster()).thenReturn(1L);
// When
Message<LearnerMessage> message = Message.to(LearnerMessage.catchUp, new URI("c:/2"), 2L).setHeader(Message.FROM, "c:/2").setHeader(Message.INSTANCE_ID, "2");
State newState = state.handle(ctx, message, outgoing);
// Then
assertThat(newState, equalTo((State) LearnerState.learner));
verify(outgoing).offer(Message.to(LearnerMessage.learnRequest, new URI("c:/1"), new LearnerMessage.LearnRequestState()).setHeader(org.neo4j.cluster.protocol.atomicbroadcast.multipaxos.InstanceId.INSTANCE, Long.toString(1L)));
verify(ctx).setTimeout("learn", Message.timeout(LearnerMessage.learnTimedout, message));
}
Aggregations