public static void submitScheduledCallableFail(SubmitterSchedulerFactory factory) { try { SubmitterSchedulerInterface scheduler = factory.makeSubmitterScheduler(1, false); try { scheduler.submitScheduled((Callable<Object>) null, 1000); fail("Exception should have been thrown"); } catch (IllegalArgumentException e) { // expected } try { scheduler.submitScheduled(new TestCallable(0), -1); fail("Exception should have been thrown"); } catch (IllegalArgumentException e) { // expected } } finally { factory.shutdown(); } }
public static void submitScheduledRunnableWithResultTest(SubmitterSchedulerFactory factory) throws InterruptedException, ExecutionException { try { int runnableCount = 10; int scheduleDelay = 50; SubmitterSchedulerInterface scheduler = factory.makeSubmitterScheduler(runnableCount, true); List<TestRunnable> runnables = new ArrayList<TestRunnable>(runnableCount); List<Future<TestRunnable>> futures = new ArrayList<Future<TestRunnable>>(runnableCount); for (int i = 0; i < runnableCount; i++) { TestRunnable tr = new TestRunnable(); Future<TestRunnable> future = scheduler.submitScheduled(tr, tr, scheduleDelay); assertNotNull(future); runnables.add(tr); futures.add(future); } // verify execution and execution times Iterator<TestRunnable> it = runnables.iterator(); while (it.hasNext()) { TestRunnable tr = it.next(); long executionDelay = tr.getDelayTillFirstRun(); assertTrue(executionDelay >= scheduleDelay); // should be very timely with a core pool size that matches runnable count assertTrue(executionDelay <= (scheduleDelay + 2000)); assertEquals(1, tr.getRunCount()); } it = runnables.iterator(); Iterator<Future<TestRunnable>> futureIt = futures.iterator(); while (futureIt.hasNext()) { Future<?> future = futureIt.next(); assertTrue(future.isDone()); assertTrue(future.get() == it.next()); } } finally { factory.shutdown(); } }