@Test
public void testDelayedStart() throws Exception {
BasicScheduler sched = new BasicScheduler(1, TimeUnit.HOURS, 1);
TestMonkeyContext context = new TestMonkeyContext(Enums.MONKEY);
Monkey mockMonkey = mock(Monkey.class);
when(mockMonkey.context()).thenReturn(context).thenReturn(context);
when(mockMonkey.type()).thenReturn(Enums.MONKEY).thenReturn(Enums.MONKEY);
// first monkey has no previous events, so it runs practically immediately
FutureTask<Void> task = new FutureTask<Void>(Callables.<Void>returning(null));
sched.start(mockMonkey, task);
// make sure that the task gets completed within 100ms
task.get(100L, TimeUnit.MILLISECONDS);
sched.stop(mockMonkey);
// create an event 5 min ago
Calendar cal = Calendar.getInstance();
cal.add(Calendar.MINUTE, -5);
BasicRecorderEvent evt = new BasicRecorderEvent(
Enums.MONKEY, EventEnums.EVENT, "region", "test-id", cal.getTime().getTime());
context.recorder().recordEvent(evt);
// this time when it runs it will not run immediately since it should be scheduled for 55m from now.
task = new FutureTask<Void>(Callables.<Void>returning(null));
sched.start(mockMonkey, task);
try {