@VisibleForTesting public InVMEventBus(EventDelivery eventDelivery) { this(eventDelivery, RetryBackoffConfiguration.DEFAULT, new MemoryEventDeadLetters()); }
@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(); }); }
@BeforeEach void setUp() { eventDeadLetters = new MemoryEventDeadLetters(); }
@BeforeEach void setUp() { deadLetters = new MemoryEventDeadLetters(); eventBus = new InVMEventBus( new InVmEventDelivery(new NoopMetricFactory()), RetryBackoffConfiguration.DEFAULT, deadLetters); }