use of org.neo4j.time.FakeClock in project neo4j by neo4j.
the class CatchupGoalTrackerTest method shouldFailToAchieveGoalDueToCatchupTimeoutExpiring.
@Test
public void shouldFailToAchieveGoalDueToCatchupTimeoutExpiring() throws Exception {
FakeClock clock = Clocks.fakeClock();
StubLog log = new StubLog();
log.setAppendIndex(10);
CatchupGoalTracker catchupGoalTracker = new CatchupGoalTracker(log, clock, ROUND_TIMEOUT, CATCHUP_TIMEOUT);
// when
clock.forward(CATCHUP_TIMEOUT + 10, TimeUnit.MILLISECONDS);
catchupGoalTracker.updateProgress(new FollowerState().onSuccessResponse(4));
// then
assertFalse(catchupGoalTracker.isGoalAchieved());
assertTrue(catchupGoalTracker.isFinished());
}
use of org.neo4j.time.FakeClock in project neo4j by neo4j.
the class CatchupGoalTrackerTest method shouldFailToAchieveGoalDueToCatchupTimeoutExpiringEvenThoughWeDoEventuallyAchieveTarget.
@Test
public void shouldFailToAchieveGoalDueToCatchupTimeoutExpiringEvenThoughWeDoEventuallyAchieveTarget() throws Exception {
FakeClock clock = Clocks.fakeClock();
StubLog log = new StubLog();
log.setAppendIndex(10);
CatchupGoalTracker catchupGoalTracker = new CatchupGoalTracker(log, clock, ROUND_TIMEOUT, CATCHUP_TIMEOUT);
// when
clock.forward(CATCHUP_TIMEOUT + 10, TimeUnit.MILLISECONDS);
catchupGoalTracker.updateProgress(new FollowerState().onSuccessResponse(10));
// then
assertFalse(catchupGoalTracker.isGoalAchieved());
assertTrue(catchupGoalTracker.isFinished());
}
use of org.neo4j.time.FakeClock in project neo4j by neo4j.
the class MonitoredBoltWorkerFactoryTest method shouldSignalReceivedStartAndComplete.
@Test
public void shouldSignalReceivedStartAndComplete() throws Throwable {
// given
FakeClock clock = Clocks.fakeClock();
WorkerFactory delegate = mock(WorkerFactory.class);
BoltStateMachine machine = mock(BoltStateMachine.class);
when(delegate.newWorker(anyObject(), anyObject())).thenReturn(new BoltWorker() {
@Override
public void enqueue(Job job) {
clock.forward(1337, TimeUnit.MILLISECONDS);
try {
job.perform(machine);
} catch (BoltConnectionFatality connectionFatality) {
throw new RuntimeException(connectionFatality);
}
}
@Override
public void interrupt() {
throw new RuntimeException();
}
@Override
public void halt() {
throw new RuntimeException();
}
});
Monitors monitors = new Monitors();
CountingSessionMonitor monitor = new CountingSessionMonitor();
monitors.addMonitorListener(monitor);
MonitoredWorkerFactory workerFactory = new MonitoredWorkerFactory(monitors, delegate, clock);
BoltWorker worker = workerFactory.newWorker(CONNECTION_DESCRIPTOR);
// when
worker.enqueue((stateMachine) -> {
stateMachine.run("hello", null, nullResponseHandler());
clock.forward(1338, TimeUnit.MILLISECONDS);
});
// then
assertEquals(1, monitor.messagesReceived);
assertEquals(1337, monitor.queueTime);
assertEquals(1338, monitor.processingTime);
}
use of org.neo4j.time.FakeClock in project neo4j by neo4j.
the class DelayedRenewableTimeoutServiceTest method shouldNotTimeOutWhenStopped.
@Test
public void shouldNotTimeOutWhenStopped() throws Throwable {
// given
final AtomicLong timeoutCount = new AtomicLong();
FakeClock clock = Clocks.fakeClock();
DelayedRenewableTimeoutService timeoutService = new DelayedRenewableTimeoutService(clock, NullLogProvider.getInstance());
RenewableTimeoutService.RenewableTimeout timeout = timeoutService.create(Timeouts.FOOBAR, TIMEOUT_MS, 0, t -> timeoutCount.incrementAndGet());
life.add(timeoutService);
clock.forward(TIMEOUT_MS, MILLISECONDS);
Predicates.await(timeoutCount::get, count -> count == 1, LONG_TIME_MS, MILLISECONDS, 1, MILLISECONDS);
// when
timeoutService.stop();
timeoutService.shutdown();
timeout.renew();
Thread.sleep(TIMEOUT_MS / 2);
clock.forward(TIMEOUT_MS, MILLISECONDS);
Thread.sleep(TIMEOUT_MS / 2);
// then
assertThat(timeoutCount.get(), equalTo(1L));
}
use of org.neo4j.time.FakeClock in project neo4j by neo4j.
the class ElectionTest method candidateShouldLoseElectionAndRemainCandidate.
@Test
public void candidateShouldLoseElectionAndRemainCandidate() throws Exception {
// Note the etcd implementation seems to diverge from the paper here, since the paper suggests that it should
// remain as a candidate
// given
FakeClock fakeClock = Clocks.fakeClock();
ControlledRenewableTimeoutService timeouts = new ControlledRenewableTimeoutService(fakeClock);
RaftMachine raft = new RaftMachineBuilder(myself, 3, RaftTestMemberSetBuilder.INSTANCE).outbound(outbound).timeoutService(timeouts).clock(fakeClock).build();
raft.installCoreState(new RaftCoreState(new MembershipEntry(0, asSet(myself, member1, member2))));
raft.startTimers();
timeouts.invokeTimeout(RaftMachine.Timeouts.ELECTION);
// when
raft.handle(voteResponse().from(member1).term(1).deny().build());
raft.handle(voteResponse().from(member2).term(1).deny().build());
// then
assertEquals(1, raft.term());
assertEquals(CANDIDATE, raft.currentRole());
verify(outbound, never()).send(eq(member1), isA(RaftMessages.AppendEntries.Request.class));
verify(outbound, never()).send(eq(member2), isA(RaftMessages.AppendEntries.Request.class));
}
Aggregations