/** * Wraps the provided task in our statistic wrapper. If the task is {@code null}, this will * return {@code null} so that the parent class can do error checking. * * @param task Runnable to wrap * @param priority Priority for runnable to execute * @return Runnable which is our wrapped implementation */ private Runnable wrap(Runnable task, TaskPriority priority) { if (priority == null) { priority = getDefaultPriority(); } if (task == null) { return null; } else { return new TaskStatWrapper(statsManager, priority, task); } }
@Override public void scheduleAtFixedRate(Runnable task, long initialDelay, long period, TaskPriority priority) { super.scheduleAtFixedRate(wrap(task, priority), initialDelay, period, priority); }
@Test public void resetCollectedStatsTest() { PrioritySchedulerStatisticTracker scheduler = new PrioritySchedulerStatisticTracker(1); try { // prestart so reuse percent is not zero scheduler.prestartAllThreads(); ThreadedStatisticPrioritySchedulerTests.resetCollectedStatsTest(scheduler); } finally { scheduler.shutdownNow(); } }
@Test public void getAverageExecutionDelayNoInputTest() { PrioritySchedulerStatisticTracker scheduler = new PrioritySchedulerStatisticTracker(1); try { ThreadedStatisticPrioritySchedulerTests.getAverageExecutionDurationNoInputTest(scheduler); } finally { scheduler.shutdownNow(); } }
@Test public void startWithExecutorTest() { PrioritySchedulerStatisticTracker e = new PrioritySchedulerStatisticTracker(1); try { assertEquals(0, e.getActiveTaskCount()); profiler.start(e); assertTrue(profiler.isRunning()); assertEquals(1, e.getActiveTaskCount()); blockForProfilerSample(); } finally { profiler.stop(); e.shutdownNow(); } }
@Test public void startWithSameThreadExecutorTest() throws InterruptedException, TimeoutException { AsyncVerifier av = new AsyncVerifier(); PrioritySchedulerStatisticTracker s = new PrioritySchedulerStatisticTracker(1); try { s.schedule(() -> { av.assertTrue(profiler.isRunning()); try { blockForProfilerSample(); profiler.stop(); // this should unblock the test thread } catch (Exception e) { av.fail(e); } av.signalComplete(); }, 200); profiler.start(SameThreadSubmitterExecutor.instance()); // will block while profile runs av.waitForTest(); // test already completed, just check result } finally { s.shutdownNow(); } }
@Override public PriorityScheduler makePriorityScheduler(int poolSize, TaskPriority defaultPriority, long maxWaitForLowPriority) { PriorityScheduler result = new PrioritySchedulerStatisticTracker(poolSize, defaultPriority, maxWaitForLowPriority); executors.add(result); return result; }
@Test public void getAverageExecutionDurationNoInputTest() { PrioritySchedulerStatisticTracker scheduler = new PrioritySchedulerStatisticTracker(1); try { ThreadedStatisticPrioritySchedulerTests.getAverageExecutionDurationNoInputTest(scheduler); } finally { scheduler.shutdownNow(); } }
@Override public PriorityScheduler makePriorityScheduler(int poolSize) { PriorityScheduler result = new PrioritySchedulerStatisticTracker(poolSize); executors.add(result); return result; }
@Test public void getLongRunningTasksWrappedFutureTest() throws InterruptedException, TimeoutException { PrioritySchedulerStatisticTracker scheduler = new PrioritySchedulerStatisticTracker(1); try { ThreadedStatisticPrioritySchedulerTests.getLongRunningTasksWrappedFutureTest(scheduler); } finally { scheduler.shutdownNow(); } }
@Override public void scheduleAtFixedRate(Runnable task, long initialDelay, long period, TaskPriority priority) { super.scheduleAtFixedRate(wrap(task, priority), initialDelay, period, priority); }
/** * Wraps the provided task in our statistic wrapper. If the task is {@code null}, this will * return {@code null} so that the parent class can do error checking. * * @param task Runnable to wrap * @param priority Priority for runnable to execute * @return Runnable which is our wrapped implementation */ private Runnable wrap(Runnable task, TaskPriority priority) { if (priority == null) { priority = getDefaultPriority(); } if (task == null) { return null; } else { return new TaskStatWrapper(statsManager, priority, task); } }
@Test @SuppressWarnings("unused") public void constructorTest() { new PrioritySchedulerStatisticTracker(1); new PrioritySchedulerStatisticTracker(1, false); new PrioritySchedulerStatisticTracker(1, TaskPriority.High, 100); new PrioritySchedulerStatisticTracker(1, TaskPriority.High, 100, false); new PrioritySchedulerStatisticTracker(1, TaskPriority.High, 100, new ConfigurableThreadFactory()); new PrioritySchedulerStatisticTracker(1, 100); new PrioritySchedulerStatisticTracker(1, false, 100); new PrioritySchedulerStatisticTracker(1, TaskPriority.High, 100, 100); new PrioritySchedulerStatisticTracker(1, TaskPriority.High, 100, false, 100); new PrioritySchedulerStatisticTracker(1, TaskPriority.High, 100, new ConfigurableThreadFactory(), 100); new PrioritySchedulerStatisticTracker(1, 100, true); new PrioritySchedulerStatisticTracker(1, false, 100, true); new PrioritySchedulerStatisticTracker(1, TaskPriority.High, 100, 100, true); new PrioritySchedulerStatisticTracker(1, TaskPriority.High, 100, false, 100, true); new PrioritySchedulerStatisticTracker(1, TaskPriority.High, 100, new ConfigurableThreadFactory(), 100, true); }
@Test public void getTotalExecutionCountTest() { final PrioritySchedulerStatisticTracker scheduler; scheduler = new PrioritySchedulerStatisticTracker(10); try { ThreadedStatisticPrioritySchedulerTests.getTotalExecutionCountTest(scheduler); } finally { scheduler.shutdownNow(); } }
@Override public void scheduleWithFixedDelay(Runnable task, long initialDelay, long recurringDelay, TaskPriority priority) { super.scheduleWithFixedDelay(wrap(task, priority), initialDelay, recurringDelay, priority); }
@Test @Override @SuppressWarnings("unused") public void constructorFail() { try { new PrioritySchedulerStatisticTracker(0, TaskPriority.High, 1, null); fail("Exception should have thrown"); } catch (IllegalArgumentException e) { // expected } try { new PrioritySchedulerStatisticTracker(1, TaskPriority.High, -1, null); fail("Exception should have thrown"); } catch (IllegalArgumentException e) { // expected } }
@Test public void getLowPriorityAvgExecutionDelayNoInputTest() { PrioritySchedulerStatisticTracker scheduler = new PrioritySchedulerStatisticTracker(1); try { ThreadedStatisticPrioritySchedulerTests.getPriorityAverageExecutionDelayNoInputTest(scheduler, TaskPriority.Low); } finally { scheduler.shutdownNow(); } }
@Override public void scheduleWithFixedDelay(Runnable task, long initialDelay, long recurringDelay, TaskPriority priority) { super.scheduleWithFixedDelay(wrap(task, priority), initialDelay, recurringDelay, priority); }
@Test public void getPriorityAverageExecutionDelayTest() { PrioritySchedulerStatisticTracker scheduler = new PrioritySchedulerStatisticTracker(1); try { ThreadedStatisticPrioritySchedulerTests.getPriorityAverageExecutionDelayTest(scheduler, null); } finally { scheduler.shutdownNow(); } }
@Test public void getHighPriorityExecutionDelayPercentilesTest() { PrioritySchedulerStatisticTracker scheduler = new PrioritySchedulerStatisticTracker(1); try { ThreadedStatisticPrioritySchedulerTests.getPriorityExecutionDelayPercentilesTest(scheduler, TaskPriority.High); } finally { scheduler.shutdownNow(); } }