@Test public void shouldReturnExecutorsThatDelegatesToTheDefinedExecutor() { Executor mainExecutor = new Executor() { @Override public void execute(final Runnable command) { command.run(); } }; mainExecutor = spy(mainExecutor); Runnable task = mock(Runnable.class); queuesImpl.setDelegateExecutor(mainExecutor); Executor queueExecutor = queuesImpl.getExecutor("1"); assertThat(queueExecutor).isNotEqualTo(mainExecutor); queueExecutor.execute(task); verify(mainExecutor).execute(any(Runnable.class)); verify(task).run(); }
@Test public void clearShouldRemoveTasks() { final ArrayList<Runnable> tasks = new ArrayList<>(); //noinspection NullableProblems queuesImpl.setDelegateExecutor(new Executor() { @Override public void execute(final Runnable command) { tasks.add(command); } }); // normal scenario queuesImpl.getExecutor("q").execute(mock(Runnable.class)); queuesImpl.getExecutor("q").execute(mock(Runnable.class)); assertThat(tasks).hasSize(1); tasks.remove(0).run(); assertThat(tasks).hasSize(1); tasks.remove(0).run(); assertThat(tasks).isEmpty(); // clear scenario queuesImpl.getExecutor("q").execute(mock(Runnable.class)); queuesImpl.getExecutor("q").execute(mock(Runnable.class)); queuesImpl.getExecutor("q").execute(mock(Runnable.class)); queuesImpl.clear("q"); assertThat(tasks).hasSize(1); tasks.remove(0).run(); assertThat(tasks).isEmpty(); }
@Test public void shouldReturnMainExecutorForNullQueueName() { Executor mainExecutor = mock(Executor.class); queuesImpl.setDelegateExecutor(mainExecutor); assertThat(queuesImpl.getExecutor(null)).isSameAs(mainExecutor); }
@Test(expected = IllegalArgumentException.class) public void shouldNotAllowNullThreadPool() { queuesImpl.setDelegateExecutor(null); }
@Test(expected = IllegalStateException.class) public void shouldNotAllowThreadsPoolChangeAfterQueueCreation() { queuesImpl.getExecutor("1"); queuesImpl.setDelegateExecutor(Executors.newCachedThreadPool()); }