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

Reply via email to