@Test public void executeLimitQueueTest() { SchedulerServiceLimiter limitedExecutor = getLimiter(PARALLEL_COUNT, true); List<BlockingTestRunnable> blockingRunnables = new ArrayList<>(PARALLEL_COUNT); try { for (int i = 0; i < PARALLEL_COUNT; i++) { BlockingTestRunnable btr = new BlockingTestRunnable(); limitedExecutor.execute(btr); blockingRunnables.add(btr); } for (BlockingTestRunnable btr : blockingRunnables) { btr.blockTillStarted(); } assertEquals(0, limitedExecutor.getQueuedTaskCount()); limitedExecutor.execute(DoNothingRunnable.instance()); TestUtils.sleep(DELAY_TIME); assertEquals(1, limitedExecutor.getQueuedTaskCount()); } finally { for (BlockingTestRunnable btr : blockingRunnables) { btr.unblock(); } } }
@Test public void removeRunnableFromQueueTest() { BlockingTestRunnable btr = new BlockingTestRunnable(); try { SchedulerServiceLimiter limiter = getLimiter(1, true); limiter.execute(btr); TestRunnable tr = new TestRunnable(); assertFalse(limiter.remove(tr)); limiter.submit(tr); // verify it is in queue assertTrue(limiter.waitingTasks.size() >= 1); assertTrue(limiter.remove(tr)); } finally { btr.unblock(); } }
@Test public void removeCallableFromQueueTest() { BlockingTestRunnable btr = new BlockingTestRunnable(); try { SchedulerServiceLimiter limiter = getLimiter(1, true); limiter.execute(btr); TestCallable tc = new TestCallable(); assertFalse(limiter.remove(tc)); limiter.submit(tc); // verify it is in queue assertTrue(limiter.waitingTasks.size() >= 1); assertTrue(limiter.remove(tc)); } finally { btr.unblock(); } }
@Test public void removeRunningRecurringMultipleInstancesTest() { BlockingTestRunnable btr = new BlockingTestRunnable(); try { SchedulerServiceLimiter limiter = getLimiter(1, true); limiter.scheduleAtFixedRate(btr, 0, 100); btr.blockTillStarted(); // a couple others that we should be able to remove individually limiter.scheduleAtFixedRate(btr, 0, 100); limiter.execute(btr); assertEquals(2, limiter.getQueuedTaskCount()); assertTrue(limiter.remove(btr)); assertEquals(2, limiter.getQueuedTaskCount()); assertTrue(limiter.remove(btr)); assertEquals(1, limiter.getQueuedTaskCount()); assertTrue(limiter.remove(btr)); assertEquals(0, limiter.getQueuedTaskCount()); } finally { btr.unblock(); } }