@Test public void failingExecutorRejects() { final IllegalStateException boom = new IllegalStateException("boom"); ExecutorScheduler scheduler = new ExecutorScheduler( task -> { throw boom;}, false ); AtomicBoolean done = new AtomicBoolean(); assertThatExceptionOfType(RejectedExecutionException.class) .isThrownBy(() -> scheduler.schedule(() -> done.set(true))) .withCause(boom); assertThat(done.get()).isFalse(); }
@Test public void failingPlainExecutorIsNotTerminated() { AtomicInteger count = new AtomicInteger(); final IllegalStateException boom = new IllegalStateException("boom"); ExecutorScheduler scheduler = new ExecutorScheduler( task -> { if (count.incrementAndGet() % 2 == 0) throw boom; }, false ); assertThatCode(() -> scheduler.schedule(() -> {})) .as("initial-no rejection") .doesNotThrowAnyException(); assertThatExceptionOfType(RejectedExecutionException.class) .as("second-transient rejection") .isThrownBy(() -> scheduler.schedule(() -> {})) .withCause(boom); assertThatCode(() -> scheduler.schedule(() -> {})) .as("third-no rejection") .doesNotThrowAnyException(); assertThat(count.get()).isEqualTo(3); }
ExecutorScheduler scheduler = new ExecutorScheduler(service, false); assertThatCode(() -> scheduler.schedule(() -> {})) .as("initial-no rejection") .doesNotThrowAnyException(); .isThrownBy(() -> scheduler.schedule(() -> {})) .withCause(boom); assertThatCode(() -> scheduler.schedule(() -> {})) .as("third-no rejection") .doesNotThrowAnyException();
ExecutorScheduler scheduler = new ExecutorScheduler(service, false); assertThatCode(() -> scheduler.schedule(() -> {})) .as("initial-no rejection") .doesNotThrowAnyException(); .isThrownBy(() -> scheduler.schedule(() -> {})) .withCause(boom); .isThrownBy(() -> scheduler.schedule(() -> {})) .isSameAs(Exceptions.failWithRejected()) .withNoCause();