@Test void failureHandlerShouldWorkWhenDeliverWithFailureHandler() { MailboxListenerCountingSuccessfulExecution listener = newListener(); doThrow(new RuntimeException()) .when(listener).event(EVENT); MemoryEventDeadLetters deadLetter = new MemoryEventDeadLetters(); inVmEventDelivery.deliver(listener, EVENT, DeliveryOption.of( Retryer.NO_RETRYER, PermanentFailureHandler.StoreToDeadLetters.of(GROUP_A, deadLetter))) .allListenerFuture() .block(); assertThat(deadLetter.groupsWithFailedEvents().toStream()) .containsOnly(GROUP_A); }
@Test void failureHandlerShouldWorkWhenRetryFails() { MailboxListenerCountingSuccessfulExecution listener = newListener(); doThrow(new RuntimeException()) .doThrow(new RuntimeException()) .doThrow(new RuntimeException()) .doThrow(new RuntimeException()) .doCallRealMethod() .when(listener).event(EVENT); MemoryEventDeadLetters deadLetter = new MemoryEventDeadLetters(); inVmEventDelivery.deliver(listener, EVENT, DeliveryOption.of( BackoffRetryer.of(RetryBackoffConfiguration.DEFAULT, listener), PermanentFailureHandler.StoreToDeadLetters.of(GROUP_A, deadLetter))) .allListenerFuture() .block(); SoftAssertions.assertSoftly(softy -> { softy.assertThat(listener.numberOfEventCalls()) .isEqualTo(0); assertThat(deadLetter.groupsWithFailedEvents().toStream()) .containsOnly(GROUP_A); }); } }
@Test void failureHandlerShouldNotWorkWhenRetrySuccess() { MailboxListenerCountingSuccessfulExecution listener = newListener(); doThrow(new RuntimeException()) .doThrow(new RuntimeException()) .doCallRealMethod() .when(listener).event(EVENT); MemoryEventDeadLetters deadLetter = new MemoryEventDeadLetters(); inVmEventDelivery.deliver(listener, EVENT, DeliveryOption.of( BackoffRetryer.of(RetryBackoffConfiguration.DEFAULT, listener), PermanentFailureHandler.StoreToDeadLetters.of(GROUP_A, deadLetter))) .allListenerFuture() .block(); SoftAssertions.assertSoftly(softy -> { softy.assertThat(listener.numberOfEventCalls()) .isEqualTo(1); softy.assertThat(deadLetter.groupsWithFailedEvents().toStream()) .isEmpty(); }); }