Repository: james-project Updated Branches: refs/heads/master 0e9cd67e1 -> df5d678cd
MAILBOX-374 Write a test about error recovery Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/c47b846b Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/c47b846b Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/c47b846b Branch: refs/heads/master Commit: c47b846bc607465f02eae4bd39c6ed8c1d930fbb Parents: 0e9cd67 Author: Benoit Tellier <btell...@linagora.com> Authored: Thu Jan 24 13:23:27 2019 +0700 Committer: Benoit Tellier <btell...@linagora.com> Committed: Fri Jan 25 10:31:33 2019 +0700 ---------------------------------------------------------------------- .../james/backend/rabbitmq/DockerRabbitMQ.java | 8 +++ .../mailbox/events/EventBusTestFixture.java | 1 + .../mailbox/events/RabbitMQEventBusTest.java | 76 ++++++++++++++++++++ 3 files changed, 85 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/c47b846b/backends-common/rabbitmq/src/test/java/org/apache/james/backend/rabbitmq/DockerRabbitMQ.java ---------------------------------------------------------------------- diff --git a/backends-common/rabbitmq/src/test/java/org/apache/james/backend/rabbitmq/DockerRabbitMQ.java b/backends-common/rabbitmq/src/test/java/org/apache/james/backend/rabbitmq/DockerRabbitMQ.java index 81567c7..0d32047 100644 --- a/backends-common/rabbitmq/src/test/java/org/apache/james/backend/rabbitmq/DockerRabbitMQ.java +++ b/backends-common/rabbitmq/src/test/java/org/apache/james/backend/rabbitmq/DockerRabbitMQ.java @@ -236,6 +236,14 @@ public class DockerRabbitMQ { } } + public void pause() { + DockerClientFactory.instance().client().pauseContainerCmd(container.getContainerId()).exec(); + } + + public void unpause() { + DockerClientFactory.instance().client().unpauseContainerCmd(container.getContainerId()).exec(); + } + public RabbitMQConnectionFactory createRabbitConnectionFactory() throws URISyntaxException { RabbitMQConfiguration rabbitMQConfiguration = RabbitMQConfiguration.builder() .amqpUri(amqpUri()) http://git-wip-us.apache.org/repos/asf/james-project/blob/c47b846b/mailbox/api/src/test/java/org/apache/james/mailbox/events/EventBusTestFixture.java ---------------------------------------------------------------------- diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/events/EventBusTestFixture.java b/mailbox/api/src/test/java/org/apache/james/mailbox/events/EventBusTestFixture.java index d11571c..d2f3097 100644 --- a/mailbox/api/src/test/java/org/apache/james/mailbox/events/EventBusTestFixture.java +++ b/mailbox/api/src/test/java/org/apache/james/mailbox/events/EventBusTestFixture.java @@ -85,6 +85,7 @@ public interface EventBusTestFixture { MailboxListener.MailboxEvent EVENT_2 = new MailboxListener.MailboxAdded(SESSION_ID, USER, MAILBOX_PATH, TEST_ID, EVENT_ID_2); int ONE_SECOND = 1000; + int THIRTY_SECONDS = 30 * ONE_SECOND; int FIVE_HUNDRED_MS = 500; MailboxId ID_1 = TEST_ID; MailboxId ID_2 = TestId.of(24); http://git-wip-us.apache.org/repos/asf/james-project/blob/c47b846b/mailbox/event/event-rabbitmq/src/test/java/org/apache/james/mailbox/events/RabbitMQEventBusTest.java ---------------------------------------------------------------------- diff --git a/mailbox/event/event-rabbitmq/src/test/java/org/apache/james/mailbox/events/RabbitMQEventBusTest.java b/mailbox/event/event-rabbitmq/src/test/java/org/apache/james/mailbox/events/RabbitMQEventBusTest.java index 69204ad..2137610 100644 --- a/mailbox/event/event-rabbitmq/src/test/java/org/apache/james/mailbox/events/RabbitMQEventBusTest.java +++ b/mailbox/event/event-rabbitmq/src/test/java/org/apache/james/mailbox/events/RabbitMQEventBusTest.java @@ -32,6 +32,7 @@ import static org.apache.james.mailbox.events.EventBusTestFixture.GroupA; import static org.apache.james.mailbox.events.EventBusTestFixture.KEY_1; import static org.apache.james.mailbox.events.EventBusTestFixture.MailboxListenerCountingSuccessfulExecution; import static org.apache.james.mailbox.events.EventBusTestFixture.NO_KEYS; +import static org.apache.james.mailbox.events.EventBusTestFixture.THIRTY_SECONDS; import static org.apache.james.mailbox.events.EventBusTestFixture.WAIT_CONDITION; import static org.apache.james.mailbox.events.EventBusTestFixture.newListener; import static org.apache.james.mailbox.events.GroupRegistration.WorkQueueName.MAILBOX_EVENT_WORK_QUEUE_PREFIX; @@ -39,10 +40,14 @@ import static org.apache.james.mailbox.events.RabbitMQEventBus.MAILBOX_EVENT; import static org.apache.james.mailbox.events.RabbitMQEventBus.MAILBOX_EVENT_EXCHANGE_NAME; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatCode; +import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.after; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; import java.nio.charset.StandardCharsets; import java.time.Duration; @@ -73,6 +78,7 @@ import reactor.rabbitmq.BindingSpecification; import reactor.rabbitmq.ExchangeSpecification; import reactor.rabbitmq.QueueSpecification; import reactor.rabbitmq.RabbitFlux; +import reactor.rabbitmq.RabbitFluxException; import reactor.rabbitmq.Receiver; import reactor.rabbitmq.ReceiverOptions; import reactor.rabbitmq.Sender; @@ -301,6 +307,76 @@ class RabbitMQEventBusTest implements GroupContract.SingleEventBusGroupContract, } @Test + void dispatchShouldWorkAfterNetworkIssuesForOldRegistration() throws Exception { + eventBus.start(); + MailboxListener listener = newListener(); + eventBus.register(listener, GROUP_A); + + rabbitMQExtension.getRabbitMQ().pause(); + + assertThatThrownBy(() -> eventBus.dispatch(EVENT, NO_KEYS).block()) + .isInstanceOf(RabbitFluxException.class); + + rabbitMQExtension.getRabbitMQ().unpause(); + + eventBus.dispatch(EVENT, NO_KEYS).block(); + verify(listener, after(THIRTY_SECONDS).times(1)).event(EVENT); + } + + @Test + void dispatchShouldWorkAfterNetworkIssuesForNewRegistration() throws Exception { + eventBus.start(); + MailboxListener listener = newListener(); + + rabbitMQExtension.getRabbitMQ().pause(); + + assertThatThrownBy(() -> eventBus.dispatch(EVENT, NO_KEYS).block()) + .isInstanceOf(RabbitFluxException.class); + + rabbitMQExtension.getRabbitMQ().unpause(); + + eventBus.register(listener, GROUP_A); + eventBus.dispatch(EVENT, NO_KEYS).block(); + verify(listener, after(THIRTY_SECONDS).times(1)).event(EVENT); + } + + @Test + void dispatchShouldWorkAfterNetworkIssuesForOldKeyRegistration() throws Exception { + eventBus.start(); + MailboxListener listener = newListener(); + when(listener.getExecutionMode()).thenReturn(MailboxListener.ExecutionMode.ASYNCHRONOUS); + eventBus.register(listener, KEY_1); + + rabbitMQExtension.getRabbitMQ().pause(); + + assertThatThrownBy(() -> eventBus.dispatch(EVENT, NO_KEYS).block()) + .isInstanceOf(RabbitFluxException.class); + + rabbitMQExtension.getRabbitMQ().unpause(); + + eventBus.dispatch(EVENT, KEY_1).block(); + verify(listener, after(THIRTY_SECONDS).times(1)).event(EVENT); + } + + @Test + void dispatchShouldWorkAfterNetworkIssuesForNewKeyRegistration() throws Exception { + eventBus.start(); + MailboxListener listener = newListener(); + when(listener.getExecutionMode()).thenReturn(MailboxListener.ExecutionMode.ASYNCHRONOUS); + + rabbitMQExtension.getRabbitMQ().pause(); + + assertThatThrownBy(() -> eventBus.dispatch(EVENT, NO_KEYS).block()) + .isInstanceOf(RabbitFluxException.class); + + rabbitMQExtension.getRabbitMQ().unpause(); + + eventBus.register(listener, KEY_1); + eventBus.dispatch(EVENT, KEY_1).block(); + verify(listener, after(THIRTY_SECONDS).times(1)).event(EVENT); + } + + @Test void stopShouldNotDeleteEventBusExchange() { eventBus.start(); eventBus.stop(); --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org