@Test public void addScheduledOrderTest() { List<TaskWrapper> orderedList = new ArrayList<>(TEST_QTY); for (int i = 0; i < TEST_QTY; i++) { orderedList.add(new OneTimeTaskWrapper(DoNothingRunnable.instance(), null, Clock.accurateForwardProgressingMillis() + i)); } List<TaskWrapper> randomList = new ArrayList<>(orderedList); Collections.shuffle(randomList); Iterator<TaskWrapper> it = randomList.iterator(); while (it.hasNext()) { queueSet.addScheduled(it.next()); } Iterator<TaskWrapper> expectedIt = orderedList.iterator(); Iterator<TaskWrapper> resultIt = queueSet.scheduleQueue.iterator(); while (expectedIt.hasNext()) { assertTrue(expectedIt.next() == resultIt.next()); } }
.executeQueue.add(new OneTimeTaskWrapper(DoNothingRunnable.instance(), null, Clock.lastKnownForwardProgressingMillis())); result.getQueueManager().getQueueSet(TaskPriority.High) .executeQueue.add(new OneTimeTaskWrapper(DoNothingRunnable.instance(), null, Clock.lastKnownForwardProgressingMillis())); result.getQueueManager().getQueueSet(TaskPriority.High) .scheduleQueue.add(0, new OneTimeTaskWrapper(DoNothingRunnable.instance(), null, Clock.lastKnownForwardProgressingMillis())); result.getQueueManager().getQueueSet(TaskPriority.High) .scheduleQueue.add(1, new OneTimeTaskWrapper(DoNothingRunnable.instance(), null, Clock.lastKnownForwardProgressingMillis() + 1000)); .executeQueue.add(new OneTimeTaskWrapper(DoNothingRunnable.instance(), null, Clock.lastKnownForwardProgressingMillis())); result.getQueueManager().getQueueSet(TaskPriority.Low) .executeQueue.add(new OneTimeTaskWrapper(DoNothingRunnable.instance(), null, Clock.lastKnownForwardProgressingMillis())); result.getQueueManager().getQueueSet(TaskPriority.Low) .scheduleQueue.add(0, new OneTimeTaskWrapper(DoNothingRunnable.instance(), null, Clock.lastKnownForwardProgressingMillis())); result.getQueueManager().getQueueSet(TaskPriority.Low) .scheduleQueue.add(1, new OneTimeTaskWrapper(DoNothingRunnable.instance(), null, Clock.lastKnownForwardProgressingMillis() + 1000));
.executeQueue.add(new OneTimeTaskWrapper(DoNothingRunnable.instance(), null, Clock.lastKnownForwardProgressingMillis())); result.getQueueManager().getQueueSet(TaskPriority.High) .executeQueue.add(new OneTimeTaskWrapper(DoNothingRunnable.instance(), null, Clock.lastKnownForwardProgressingMillis())); result.getQueueManager().getQueueSet(TaskPriority.High) .scheduleQueue.add(0, new OneTimeTaskWrapper(DoNothingRunnable.instance(), null, Clock.lastKnownForwardProgressingMillis())); result.getQueueManager().getQueueSet(TaskPriority.High) .scheduleQueue.add(1, new OneTimeTaskWrapper(DoNothingRunnable.instance(), null, Clock.lastKnownForwardProgressingMillis() + 1000)); .executeQueue.add(new OneTimeTaskWrapper(DoNothingRunnable.instance(), null, Clock.lastKnownForwardProgressingMillis())); result.getQueueManager().getQueueSet(TaskPriority.Low) .executeQueue.add(new OneTimeTaskWrapper(DoNothingRunnable.instance(), null, Clock.lastKnownForwardProgressingMillis())); result.getQueueManager().getQueueSet(TaskPriority.Low) .scheduleQueue.add(0, new OneTimeTaskWrapper(DoNothingRunnable.instance(), null, Clock.lastKnownForwardProgressingMillis())); result.getQueueManager().getQueueSet(TaskPriority.Low) .scheduleQueue.add(1, new OneTimeTaskWrapper(DoNothingRunnable.instance(), null, Clock.lastKnownForwardProgressingMillis() + 1000));
.executeQueue.add(new OneTimeTaskWrapper(DoNothingRunnable.instance(), null, Clock.lastKnownForwardProgressingMillis())); result.getQueueManager().getQueueSet(TaskPriority.High) .executeQueue.add(new OneTimeTaskWrapper(DoNothingRunnable.instance(), null, Clock.lastKnownForwardProgressingMillis())); result.getQueueManager().getQueueSet(TaskPriority.High) .scheduleQueue.add(0, new OneTimeTaskWrapper(DoNothingRunnable.instance(), null, Clock.lastKnownForwardProgressingMillis())); result.getQueueManager().getQueueSet(TaskPriority.High) .scheduleQueue.add(1, new OneTimeTaskWrapper(DoNothingRunnable.instance(), null, Clock.lastKnownForwardProgressingMillis() + 1000)); .executeQueue.add(new OneTimeTaskWrapper(DoNothingRunnable.instance(), null, Clock.lastKnownForwardProgressingMillis())); result.getQueueManager().getQueueSet(TaskPriority.Low) .executeQueue.add(new OneTimeTaskWrapper(DoNothingRunnable.instance(), null, Clock.lastKnownForwardProgressingMillis())); result.getQueueManager().getQueueSet(TaskPriority.Low) .scheduleQueue.add(0, new OneTimeTaskWrapper(DoNothingRunnable.instance(), null, Clock.lastKnownForwardProgressingMillis())); result.getQueueManager().getQueueSet(TaskPriority.Low) .scheduleQueue.add(1, new OneTimeTaskWrapper(DoNothingRunnable.instance(), null, Clock.lastKnownForwardProgressingMillis() + 1000));
.executeQueue.add(new OneTimeTaskWrapper(DoNothingRunnable.instance(), null, Clock.lastKnownForwardProgressingMillis())); result.getQueueManager().getQueueSet(TaskPriority.High) .executeQueue.add(new OneTimeTaskWrapper(DoNothingRunnable.instance(), null, Clock.lastKnownForwardProgressingMillis())); result.getQueueManager().getQueueSet(TaskPriority.High) .scheduleQueue.add(0, new OneTimeTaskWrapper(DoNothingRunnable.instance(), null, Clock.lastKnownForwardProgressingMillis())); result.getQueueManager().getQueueSet(TaskPriority.High) .scheduleQueue.add(1, new OneTimeTaskWrapper(DoNothingRunnable.instance(), null, Clock.lastKnownForwardProgressingMillis() + 1000)); .executeQueue.add(new OneTimeTaskWrapper(DoNothingRunnable.instance(), null, Clock.lastKnownForwardProgressingMillis())); result.getQueueManager().getQueueSet(TaskPriority.Starvable) .executeQueue.add(new OneTimeTaskWrapper(DoNothingRunnable.instance(), null, Clock.lastKnownForwardProgressingMillis())); result.getQueueManager().getQueueSet(TaskPriority.Starvable) .scheduleQueue.add(0, new OneTimeTaskWrapper(DoNothingRunnable.instance(), null, Clock.lastKnownForwardProgressingMillis())); result.getQueueManager().getQueueSet(TaskPriority.Starvable) .scheduleQueue.add(1, new OneTimeTaskWrapper(DoNothingRunnable.instance(), null, Clock.lastKnownForwardProgressingMillis() + 1000));
@Test public void getDelayTillNextTaskTest() { assertEquals(Long.MAX_VALUE, scheduler.getDelayTillNextTask()); // schedule in the future scheduler.schedule(DoNothingRunnable.instance(), 1000 * 15); // still should have nothing ready to run assertTrue(scheduler.getDelayTillNextTask() > 0); scheduler.execute(DoNothingRunnable.instance()); // should now have tasks ready to run assertTrue(scheduler.getDelayTillNextTask() <= 0); scheduler.tick(null); // should no longer have anything to run assertTrue(scheduler.getDelayTillNextTask() > 0); scheduler.queueManager.highPriorityQueueSet .addScheduled(new OneTimeTaskWrapper(DoNothingRunnable.instance(), scheduler.queueManager.highPriorityQueueSet.scheduleQueue, Clock.lastKnownForwardProgressingMillis())); // now should be true with scheduled task which is ready to run assertTrue(scheduler.getDelayTillNextTask() <= 0); }
@Test public void hasTaskReadyToRunTest() { assertFalse(scheduler.hasTaskReadyToRun()); // schedule in the future scheduler.schedule(DoNothingRunnable.instance(), 1000 * 15); // still should have nothing ready to run assertFalse(scheduler.hasTaskReadyToRun()); scheduler.execute(DoNothingRunnable.instance()); // should now have tasks ready to run assertTrue(scheduler.hasTaskReadyToRun()); scheduler.tick(null); // should no longer have anything to run assertFalse(scheduler.hasTaskReadyToRun()); scheduler.queueManager.highPriorityQueueSet .addScheduled(new OneTimeTaskWrapper(DoNothingRunnable.instance(), scheduler.queueManager.highPriorityQueueSet.scheduleQueue, Clock.lastKnownForwardProgressingMillis())); // now should be true with scheduled task which is ready to run assertTrue(scheduler.hasTaskReadyToRun()); }
@Test public void addToQueueTest() { PrioritySchedulerServiceFactory factory = getPrioritySchedulerFactory(); long taskDelay = 1000 * 10; // make it long to prevent it from getting consumed from the queue PriorityScheduler scheduler = factory.makePriorityScheduler(1); try { scheduler.addToScheduleQueue(scheduler.taskQueueManager.highPriorityQueueSet, new OneTimeTaskWrapper(new TestRunnable(), null, Clock.lastKnownForwardProgressingMillis() + taskDelay)); assertEquals(1, scheduler.taskQueueManager.highPriorityQueueSet.scheduleQueue.size()); assertEquals(0, scheduler.taskQueueManager.lowPriorityQueueSet.scheduleQueue.size()); scheduler.addToScheduleQueue(scheduler.taskQueueManager.lowPriorityQueueSet, new OneTimeTaskWrapper(new TestRunnable(), null, Clock.lastKnownForwardProgressingMillis() + taskDelay)); assertEquals(1, scheduler.taskQueueManager.highPriorityQueueSet.scheduleQueue.size()); assertEquals(1, scheduler.taskQueueManager.lowPriorityQueueSet.scheduleQueue.size()); } finally { factory.shutdown(); } }
@Test public void getNextReadyTaskExecuteAheadOfScheduledTest() { OneTimeTaskWrapper executeTask = new OneTimeTaskWrapper(DoNothingRunnable.instance(), queueManager.highPriorityQueueSet.executeQueue, Clock.accurateForwardProgressingMillis()); queueManager.highPriorityQueueSet.addExecute(executeTask); TestUtils.blockTillClockAdvances(); TaskWrapper scheduleTask = new OneTimeTaskWrapper(DoNothingRunnable.instance(), queueManager.highPriorityQueueSet.scheduleQueue, Clock.lastKnownForwardProgressingMillis()); queueManager.highPriorityQueueSet.addScheduled(scheduleTask); assertTrue(executeTask == queueManager.getNextTask()); assertTrue(executeTask == queueManager.getNextTask()); // execute task has not been removed yet // this should remove the execute task so we can get the scheduled task assertTrue(executeTask.canExecute(executeTask.getExecuteReference())); assertTrue(scheduleTask == queueManager.getNextTask()); }
@Test public void getNextReadyTaskScheduledAheadOfExecuteTest() { TaskWrapper scheduleTask = new OneTimeTaskWrapper(DoNothingRunnable.instance(), queueManager.highPriorityQueueSet.scheduleQueue, Clock.accurateForwardProgressingMillis()); queueManager.highPriorityQueueSet.addScheduled(scheduleTask); TestUtils.blockTillClockAdvances(); OneTimeTaskWrapper executeTask = new OneTimeTaskWrapper(DoNothingRunnable.instance(), queueManager.highPriorityQueueSet.executeQueue, Clock.lastKnownForwardProgressingMillis()); queueManager.highPriorityQueueSet.addExecute(executeTask); assertTrue(scheduleTask == queueManager.getNextTask()); assertTrue(scheduleTask == queueManager.getNextTask()); // schedule task has not been removed yet // this should remove the schedule task so we can get the execute task assertTrue(scheduleTask.canExecute(executeTask.getExecuteReference())); assertTrue(executeTask == queueManager.getNextTask()); }
@Override protected OneTimeTaskWrapper doSchedule(Runnable task, long delayInMillis, TaskPriority priority) { QueueSet queueSet = taskQueueManager.getQueueSet(priority); OneTimeTaskWrapper result; if (delayInMillis == 0) { addToExecuteQueue(queueSet, (result = new ImmediateTaskWrapper(task, queueSet.executeQueue))); } else { addToScheduleQueue(queueSet, (result = new OneTimeTaskWrapper(task, queueSet.scheduleQueue, Clock.accurateForwardProgressingMillis() + delayInMillis))); } return result; }
@Override protected OneTimeTaskWrapper doSchedule(Runnable task, long delayInMillis, TaskPriority priority) { QueueSet queueSet = taskQueueManager.getQueueSet(priority); OneTimeTaskWrapper result; if (delayInMillis == 0) { addToExecuteQueue(queueSet, (result = new ImmediateTaskWrapper(task, queueSet.executeQueue))); } else { addToScheduleQueue(queueSet, (result = new OneTimeTaskWrapper(task, queueSet.scheduleQueue, Clock.accurateForwardProgressingMillis() + delayInMillis))); } return result; }
@Test public void removeRunnableTest() { TestRunnable runnable = new TestRunnable(); OneTimeTaskWrapper task = new OneTimeTaskWrapper(runnable, null, Clock.lastKnownForwardProgressingMillis()); assertFalse(queueSet.remove(runnable)); queueSet.executeQueue.add(task); assertTrue(queueSet.remove(runnable)); assertFalse(queueSet.remove(runnable)); queueSet.scheduleQueue.addFirst(task); assertTrue(queueSet.remove(runnable)); assertFalse(queueSet.remove(runnable)); }
@Test public void removeCallableTest() { TestCallable callable = new TestCallable(); OneTimeTaskWrapper task = new OneTimeTaskWrapper(new ListenableFutureTask<>(false, callable), null, Clock.lastKnownForwardProgressingMillis()); assertFalse(queueSet.remove(callable)); queueSet.executeQueue.add(task); assertTrue(queueSet.remove(callable)); assertFalse(queueSet.remove(callable)); queueSet.scheduleQueue.addFirst(task); assertTrue(queueSet.remove(callable)); assertFalse(queueSet.remove(callable)); }
@Test public void getNextReadyTaskHighPriorityDelayedTest() { TaskWrapper scheduleTask = new OneTimeTaskWrapper(DoNothingRunnable.instance(), queueManager.highPriorityQueueSet.scheduleQueue, Clock.accurateForwardProgressingMillis() + 1000); queueManager.highPriorityQueueSet.addScheduled(scheduleTask); TestUtils.blockTillClockAdvances(); OneTimeTaskWrapper executeTask = new OneTimeTaskWrapper(DoNothingRunnable.instance(), queueManager.lowPriorityQueueSet.executeQueue, Clock.lastKnownForwardProgressingMillis()); queueManager.lowPriorityQueueSet.addExecute(executeTask); assertTrue(executeTask == queueManager.getNextTask()); }
@Test public void removeRunnableTest() { TestRunnable runnable = new TestRunnable(); OneTimeTaskWrapper task = new OneTimeTaskWrapper(runnable, null, Clock.lastKnownForwardProgressingMillis()); assertFalse(queueManager.remove(runnable)); queueManager.highPriorityQueueSet.executeQueue.add(task); assertTrue(queueManager.remove(runnable)); assertFalse(queueManager.remove(runnable)); queueManager.lowPriorityQueueSet.scheduleQueue.addFirst(task); assertTrue(queueManager.remove(runnable)); assertFalse(queueManager.remove(runnable)); }
@Test public void drainQueueIntoTest() { List<TaskWrapper> depositList = new ArrayList<>(2); OneTimeTaskWrapper task = new OneTimeTaskWrapper(DoNothingRunnable.instance(), null, Clock.lastKnownForwardProgressingMillis()); queueSet.executeQueue.add(task); queueSet.drainQueueInto(depositList); assertTrue(depositList.contains(task)); depositList.clear(); queueSet.scheduleQueue.add(task); queueSet.drainQueueInto(depositList); assertTrue(depositList.contains(task)); }
@Test public void getNextReadyTaskHighPriorityReadyFirstTest() { TaskWrapper highTask = new OneTimeTaskWrapper(DoNothingRunnable.instance(), queueManager.highPriorityQueueSet.scheduleQueue, Clock.accurateForwardProgressingMillis() + DELAY_TIME); TaskWrapper lowTask = new OneTimeTaskWrapper(DoNothingRunnable.instance(), queueManager.lowPriorityQueueSet.scheduleQueue, Clock.lastKnownForwardProgressingMillis() + (DELAY_TIME * 10)); queueManager.highPriorityQueueSet.addScheduled(highTask); queueManager.lowPriorityQueueSet.addScheduled(lowTask); assertTrue(highTask == queueManager.getNextTask()); }
private void getNextReadyTaskScheduledTest(QueueSet queueSet) { TaskWrapper task = new OneTimeTaskWrapper(DoNothingRunnable.instance(), queueSet.scheduleQueue, Clock.lastKnownForwardProgressingMillis()); queueSet.addScheduled(task); assertTrue(task == queueManager.getNextTask()); }
@Test public void removeCallableTest() { TestCallable callable = new TestCallable(); OneTimeTaskWrapper task = new OneTimeTaskWrapper(new ListenableFutureTask<>(false, callable), null, Clock.lastKnownForwardProgressingMillis()); assertFalse(queueManager.remove(callable)); queueManager.highPriorityQueueSet.executeQueue.add(task); assertTrue(queueManager.remove(callable)); assertFalse(queueManager.remove(callable)); queueManager.lowPriorityQueueSet.scheduleQueue.addFirst(task); assertTrue(queueManager.remove(callable)); assertFalse(queueManager.remove(callable)); }