@Test public void taskCodeAfterCancelIsNotRun() { CountDownLatch task1Latch = new CountDownLatch(1); AtomicInteger count = new AtomicInteger(0); TaskId id = memoryTaskManager.submit(() -> { await(task1Latch); count.incrementAndGet(); return Task.Result.COMPLETED; }); memoryTaskManager.cancel(id); task1Latch.countDown(); assertThat(count.get()).isEqualTo(0); }
@Test public void getStatusShouldReturnFailedWhenRunPartially() throws Exception { CountDownLatch latch = new CountDownLatch(1); TaskId taskId = memoryTaskManager.submit( () -> Task.Result.PARTIAL, countDownCallback(latch)); latch.await(); assertThat(memoryTaskManager.getExecutionDetails(taskId).getStatus()) .isEqualTo(TaskManager.Status.FAILED); }
@Test public void submittedTaskShouldExecuteSequentially() { ConcurrentLinkedQueue<Integer> queue = new ConcurrentLinkedQueue<>(); TaskId id1 = memoryTaskManager.submit(() -> { queue.add(1); sleep(500); queue.add(2); return Task.Result.COMPLETED; }); TaskId id2 = memoryTaskManager.submit(() -> { queue.add(3); sleep(500); queue.add(4); return Task.Result.COMPLETED; }); memoryTaskManager.await(id1); memoryTaskManager.await(id2); assertThat(queue) .containsExactly(1, 2, 3, 4); }
TaskId inProgressId = memoryTaskManager.submit( () -> { await(latch1); latch2.countDown(); await(latch3); return Task.Result.COMPLETED; }); TaskId waitingId = memoryTaskManager.submit( () -> { await(latch3); latch2.countDown(); return Task.Result.COMPLETED; softly.assertThat(entryWithId(list, failedId)) .isEqualTo(TaskManager.Status.FAILED); softly.assertThat(entryWithId(list, waitingId)) .isEqualTo(TaskManager.Status.WAITING); softly.assertThat(entryWithId(list, successfulId)) .isEqualTo(TaskManager.Status.COMPLETED); softly.assertThat(entryWithId(list, inProgressId)) .isEqualTo(TaskManager.Status.IN_PROGRESS);
TaskId inProgressId = memoryTaskManager.submit( () -> { await(latch1); latch2.countDown(); await(latch3); return Task.Result.COMPLETED; }); TaskId waitingId = memoryTaskManager.submit( () -> { await(latch3); latch2.countDown(); return Task.Result.COMPLETED; softly.assertThat(entryWithId(list, failedId)) .isEqualTo(TaskManager.Status.FAILED); softly.assertThat(entryWithId(list, waitingId)) .isEqualTo(TaskManager.Status.WAITING); softly.assertThat(entryWithId(list, successfulId)) .isEqualTo(TaskManager.Status.COMPLETED); softly.assertThat(entryWithId(list, inProgressId)) .isEqualTo(TaskManager.Status.IN_PROGRESS);
@Test public void taskCodeAfterCancelIsNotRun() { CountDownLatch task1Latch = new CountDownLatch(1); AtomicInteger count = new AtomicInteger(0); TaskId id = memoryTaskManager.submit(() -> { await(task1Latch); count.incrementAndGet(); return Task.Result.COMPLETED; }); memoryTaskManager.cancel(id); task1Latch.countDown(); assertThat(count.get()).isEqualTo(0); }
@Test public void getStatusShouldReturnCompletedWhenRunSuccessfully() throws Exception { CountDownLatch latch = new CountDownLatch(1); TaskId taskId = memoryTaskManager.submit( () -> Task.Result.COMPLETED, countDownCallback(latch)); latch.await(); assertThat(memoryTaskManager.getExecutionDetails(taskId).getStatus()) .isEqualTo(TaskManager.Status.COMPLETED); }
@Test public void submittedTaskShouldExecuteSequentially() { ConcurrentLinkedQueue<Integer> queue = new ConcurrentLinkedQueue<>(); TaskId id1 = memoryTaskManager.submit(() -> { queue.add(1); sleep(500); queue.add(2); return Task.Result.COMPLETED; }); TaskId id2 = memoryTaskManager.submit(() -> { queue.add(3); sleep(500); queue.add(4); return Task.Result.COMPLETED; }); memoryTaskManager.await(id1); memoryTaskManager.await(id2); assertThat(queue) .containsExactly(1, 2, 3, 4); }
@Test public void getStatusShouldReturnInProgressWhenProcessingIsInProgress() throws Exception { CountDownLatch latch1 = new CountDownLatch(1); CountDownLatch latch2 = new CountDownLatch(1); TaskId taskId = memoryTaskManager.submit(() -> { latch2.countDown(); await(latch1); return Task.Result.COMPLETED; }); latch2.await(); assertThat(memoryTaskManager.getExecutionDetails(taskId).getStatus()) .isEqualTo(TaskManager.Status.IN_PROGRESS); }
@Test public void getStatusShouldReturnCompletedWhenRunSuccessfully() throws Exception { CountDownLatch latch = new CountDownLatch(1); TaskId taskId = memoryTaskManager.submit( () -> Task.Result.COMPLETED, countDownCallback(latch)); latch.await(); assertThat(memoryTaskManager.getExecutionDetails(taskId).getStatus()) .isEqualTo(TaskManager.Status.COMPLETED); }
@Test public void getStatusShouldReturnInProgressWhenProcessingIsInProgress() throws Exception { CountDownLatch latch1 = new CountDownLatch(1); CountDownLatch latch2 = new CountDownLatch(1); TaskId taskId = memoryTaskManager.submit(() -> { latch2.countDown(); await(latch1); return Task.Result.COMPLETED; }); latch2.await(); assertThat(memoryTaskManager.getExecutionDetails(taskId).getStatus()) .isEqualTo(TaskManager.Status.IN_PROGRESS); }
@Test public void getStatusShouldReturnFailedWhenRunPartially() throws Exception { CountDownLatch latch = new CountDownLatch(1); TaskId taskId = memoryTaskManager.submit( () -> Task.Result.PARTIAL, countDownCallback(latch)); latch.await(); assertThat(memoryTaskManager.getExecutionDetails(taskId).getStatus()) .isEqualTo(TaskManager.Status.FAILED); }
@Test public void getStatusShouldReturnCancelledWhenCancelled() throws Exception { CountDownLatch task1Latch = new CountDownLatch(1); CountDownLatch ensureStartedLatch = new CountDownLatch(1); CountDownLatch ensureFinishedLatch = new CountDownLatch(1); TaskId id = memoryTaskManager.submit(() -> { ensureStartedLatch.countDown(); await(task1Latch); return Task.Result.COMPLETED; }, any -> ensureFinishedLatch.countDown()); ensureStartedLatch.await(); memoryTaskManager.cancel(id); ensureFinishedLatch.await(); assertThat(memoryTaskManager.getExecutionDetails(id).getStatus()) .isEqualTo(TaskManager.Status.CANCELLED); }
@Test public void getStatusShouldReturnCancelledWhenCancelled() throws Exception { CountDownLatch task1Latch = new CountDownLatch(1); CountDownLatch ensureStartedLatch = new CountDownLatch(1); CountDownLatch ensureFinishedLatch = new CountDownLatch(1); TaskId id = memoryTaskManager.submit(() -> { ensureStartedLatch.countDown(); await(task1Latch); return Task.Result.COMPLETED; }, any -> ensureFinishedLatch.countDown()); ensureStartedLatch.await(); memoryTaskManager.cancel(id); ensureFinishedLatch.await(); assertThat(memoryTaskManager.getExecutionDetails(id).getStatus()) .isEqualTo(TaskManager.Status.CANCELLED); }
@Test public void getStatusShouldReturnWaitingWhenNotYetProcessed() { CountDownLatch task1Latch = new CountDownLatch(1); memoryTaskManager.submit(() -> { await(task1Latch); return Task.Result.COMPLETED; }); TaskId taskId = memoryTaskManager.submit(() -> Task.Result.COMPLETED); assertThat(memoryTaskManager.getExecutionDetails(taskId).getStatus()) .isEqualTo(TaskManager.Status.WAITING); }
@Test public void getStatusShouldReturnWaitingWhenNotYetProcessed() { CountDownLatch task1Latch = new CountDownLatch(1); memoryTaskManager.submit(() -> { await(task1Latch); return Task.Result.COMPLETED; }); TaskId taskId = memoryTaskManager.submit(() -> Task.Result.COMPLETED); assertThat(memoryTaskManager.getExecutionDetails(taskId).getStatus()) .isEqualTo(TaskManager.Status.WAITING); }
@Test public void listShouldAllowToSeeSuccessfulTasks() throws Exception { CountDownLatch latch1 = new CountDownLatch(1); CountDownLatch latch2 = new CountDownLatch(1); CountDownLatch latch3 = new CountDownLatch(1); memoryTaskManager.submit( () -> Task.Result.PARTIAL); memoryTaskManager.submit( () -> Task.Result.COMPLETED); TaskId inProgressId = memoryTaskManager.submit( () -> { await(latch1); latch2.countDown(); await(latch3); return Task.Result.COMPLETED; }); memoryTaskManager.submit( () -> { await(latch3); latch2.countDown(); return Task.Result.COMPLETED; }); latch1.countDown(); latch2.await(); assertThat(memoryTaskManager.list(TaskManager.Status.IN_PROGRESS)) .extracting(TaskExecutionDetails::getTaskId) .containsOnly(inProgressId); }
@Test public void listShouldAllowToSeeInProgressTasks() throws Exception { CountDownLatch latch1 = new CountDownLatch(1); CountDownLatch latch2 = new CountDownLatch(1); CountDownLatch latch3 = new CountDownLatch(1); memoryTaskManager.submit( () -> Task.Result.PARTIAL); TaskId successfulId = memoryTaskManager.submit( () -> Task.Result.COMPLETED); memoryTaskManager.submit( () -> { await(latch1); latch2.countDown(); await(latch3); return Task.Result.COMPLETED; }); memoryTaskManager.submit( () -> { await(latch3); latch2.countDown(); return Task.Result.COMPLETED; }); latch1.countDown(); latch2.await(); assertThat(memoryTaskManager.list(TaskManager.Status.COMPLETED)) .extracting(TaskExecutionDetails::getTaskId) .containsOnly(successfulId); }
@Test public void listShouldAllowToSeeFailedTasks() throws Exception { CountDownLatch latch1 = new CountDownLatch(1); CountDownLatch latch2 = new CountDownLatch(1); CountDownLatch latch3 = new CountDownLatch(1); TaskId failedId = memoryTaskManager.submit( () -> Task.Result.PARTIAL); memoryTaskManager.submit( () -> Task.Result.COMPLETED); memoryTaskManager.submit( () -> { await(latch1); latch2.countDown(); await(latch3); return Task.Result.COMPLETED; }); memoryTaskManager.submit( () -> { await(latch3); latch2.countDown(); return Task.Result.COMPLETED; }); latch1.countDown(); latch2.await(); assertThat(memoryTaskManager.list(TaskManager.Status.FAILED)) .extracting(TaskExecutionDetails::getTaskId) .containsOnly(failedId); }
@Test public void listShouldAllowToSeeWaitingTasks() throws Exception { CountDownLatch latch1 = new CountDownLatch(1); CountDownLatch latch2 = new CountDownLatch(1); CountDownLatch latch3 = new CountDownLatch(1); memoryTaskManager.submit( () -> Task.Result.PARTIAL); memoryTaskManager.submit( () -> Task.Result.COMPLETED); memoryTaskManager.submit( () -> { await(latch1); latch2.countDown(); await(latch3); return Task.Result.COMPLETED; }); TaskId waitingId = memoryTaskManager.submit( () -> { await(latch3); latch2.countDown(); return Task.Result.COMPLETED; }); latch1.countDown(); latch2.await(); assertThat(memoryTaskManager.list(TaskManager.Status.WAITING)) .extracting(TaskExecutionDetails::getTaskId) .containsOnly(waitingId); }