@Test public void shouldInvokeFinishOnListeners() throws Exception { goro.addTaskListener(listener); Callable<?> task = mock(Callable.class); Object result = new Object(); doReturn(result).when(task).call(); goro.schedule(task); testingQueues.executeAll(); InOrder order = inOrder(listener); order.verify(listener).onTaskStart(task); order.verify(listener).onTaskFinish(task, result); }
@SuppressWarnings("unchecked") @Test public void errorsShouldBePassedToObservers() throws Exception { FutureObserver observer = mock(FutureObserver.class); Callable<?> task = mock(Callable.class); Exception e = new Exception(); doThrow(e).when(task).call(); goro.schedule(task).subscribe(observer); testingQueues.executeAll(); verify(observer).onError(e); }
@Test public void clearShouldRemoveTasks() { final AtomicInteger counter = new AtomicInteger(0); goro.schedule("q1", new Callable<Object>() { @Override public Object call() throws Exception { return counter.incrementAndGet(); } }); goro.getExecutor("q1").execute(new Runnable() { @Override public void run() { counter.incrementAndGet(); } }); goro.clear("q1"); testingQueues.executeAll(); assertThat(counter.get()).describedAs("some task has been executed").isZero(); assertThat(testingQueues.getLastQueueName()).isEqualTo("q1"); }
@SuppressWarnings("unchecked") @Test public void observersShouldBeCalledOnTheirExecutors() { FutureObserver observer = mock(FutureObserver.class); final Runnable[] commands = new Runnable[1]; //noinspection NullableProblems Executor executor = new Executor() { @Override public void execute(final Runnable command) { commands[0] = command; } }; goro.schedule(mock(Callable.class)).subscribe(executor, observer); verify(observer, never()).onSuccess(any()); testingQueues.executeAll(); assertThat(commands[0]).isNotNull(); commands[0].run(); verify(observer).onSuccess(any()); }
@Test public void shouldInvokeErrorOnListeners() { goro.addTaskListener(listener); final Exception error = new Exception(); Callable<?> task = new Callable<Object>() { @Override public Object call() throws Exception { throw error; } }; goro.schedule(task); testingQueues.executeAll(); InOrder order = inOrder(listener); order.verify(listener).onTaskSchedule(task, Goro.DEFAULT_QUEUE); order.verify(listener).onTaskStart(task); order.verify(listener).onTaskError(task, error); }
@Override public <T> ObservableFuture<T> schedule(final Callable<T> task) { return schedule(DEFAULT_QUEUE, task); }
@Override public <T> ObservableFuture<T> schedule(final Callable<T> task) { return schedule(DEFAULT_QUEUE, task); }
@Test public void shouldInvokeCancelOnListeners() { goro.addTaskListener(listener); Callable<?> task = mock(Callable.class); goro.schedule(task).cancel(true); testingQueues.executeAll(); verify(listener, never()).onTaskStart(task); verify(listener).onTaskCancel(task); }
@Test public void shouldInvokeStartOnListeners() { goro.addTaskListener(listener); Callable<?> task = mock(Callable.class); goro.schedule(task); testingQueues.executeAll(); verify(listener).onTaskStart(task); }
@Test(expected = IllegalArgumentException.class) public void scheduleShouldThrowWhenTaskIsNull() { goro.schedule("1", null); }
@Test public void shouldPassNullQueueNameWhenAsked() { goro.schedule(null, mock(Callable.class)); assertThat(testingQueues.getLastQueueName()).isNull(); }
@Test public void shouldInvokeScheduleOnListeners() { goro.addTaskListener(listener); Callable task = mock(Callable.class); goro.schedule(task); verify(listener).onTaskSchedule(task, Goro.DEFAULT_QUEUE); }
@SuppressWarnings("unchecked") @Test public void immediateObserversShouldBeCalled() { FutureObserver observer = mock(FutureObserver.class); goro.schedule(mock(Callable.class)).subscribe(observer); verify(observer, never()).onSuccess(any()); testingQueues.executeAll(); verify(observer).onSuccess(any()); }