private static CentralJobScheduler createCentralScheduler() { return new CentralJobScheduler(); } }
@Test( timeout = 10_000 ) public void waitTerminationOnDelayedJobMustWaitUntilJobCompletion() throws Exception { CentralJobScheduler scheduler = new CentralJobScheduler(); scheduler.init(); AtomicBoolean triggered = new AtomicBoolean(); Runnable job = () -> { LockSupport.parkNanos( TimeUnit.MILLISECONDS.toNanos( 10 ) ); triggered.set( true ); }; JobHandle handle = scheduler.schedule( Group.INDEX_POPULATION, job, 10, TimeUnit.MILLISECONDS ); handle.waitTermination(); assertTrue( triggered.get() ); }
@Test( timeout = 10_000 ) public void scheduledTasksThatThrowsShouldStop() throws Exception { CentralJobScheduler scheduler = new CentralJobScheduler(); scheduler.init(); BinaryLatch triggerLatch = new BinaryLatch(); RuntimeException boom = new RuntimeException( "boom" ); AtomicInteger triggerCounter = new AtomicInteger(); Runnable job = () -> { triggerCounter.incrementAndGet(); triggerLatch.release(); throw boom; }; scheduler.scheduleRecurring( Group.INDEX_POPULATION, job, 1, TimeUnit.MILLISECONDS ); triggerLatch.await(); Thread.sleep( 50 ); assertThat( triggerCounter.get(), is( 1 ) ); }
@Test public void shouldNotifyCancelListeners() { // GIVEN CentralJobScheduler centralJobScheduler = new CentralJobScheduler(); centralJobScheduler.init(); // WHEN AtomicBoolean halted = new AtomicBoolean(); Runnable job = () -> { while ( !halted.get() ) { LockSupport.parkNanos( MILLISECONDS.toNanos( 10 ) ); } }; JobHandle handle = centralJobScheduler.schedule( Group.INDEX_POPULATION, job ); handle.registerCancelListener( mayBeInterrupted -> halted.set( true ) ); handle.cancel( false ); // THEN assertTrue( halted.get() ); centralJobScheduler.shutdown(); }
@Test( timeout = 10_000 ) public void scheduledTasksThatThrowsMustPropagateException() throws Exception { CentralJobScheduler scheduler = new CentralJobScheduler(); scheduler.init(); RuntimeException boom = new RuntimeException( "boom" ); AtomicInteger triggerCounter = new AtomicInteger(); Runnable job = () -> { triggerCounter.incrementAndGet(); throw boom; }; JobHandle handle = scheduler.scheduleRecurring( Group.INDEX_POPULATION, job, 1, TimeUnit.MILLISECONDS ); try { handle.waitTermination(); fail( "waitTermination should have failed." ); } catch ( ExecutionException e ) { assertThat( e.getCause(), is( boom ) ); } }
private static CentralJobScheduler createCentralScheduler() { return new CentralJobScheduler(); } }
life.add( new CentralJobScheduler() ); new ClusterClientModule( life,