You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2019/05/31 05:08:58 UTC

[james-project] branch master updated (14051e0 -> c777788)

This is an automated email from the ASF dual-hosted git repository.

btellier pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git.


    from 14051e0  JAMES-2766 ElasticSearch 6 upgrade: Document port configuration changes
     new 4e333a9  JAMES-2774 do not stop rabbitmq after each test
     new d32f57b  JAMES-2774 wait until listener receive event with fail fast
     new c777788  JAMES-2774 define short rabbitmq timeout for tests

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../backend/rabbitmq/RabbitMQConfiguration.java    |  74 +++++++++++++-
 .../rabbitmq/RabbitMQConnectionFactory.java        |   4 +
 .../james/backend/rabbitmq/DockerRabbitMQ.java     |   8 ++
 .../rabbitmq/RabbitMQConfigurationTest.java        | 108 +++++++++++++++++++++
 .../james/backend/rabbitmq/RabbitMQFixture.java    |   4 +
 .../james/mailbox/events/RabbitMQEventBusTest.java |  51 ++++------
 6 files changed, 215 insertions(+), 34 deletions(-)


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


[james-project] 02/03: JAMES-2774 wait until listener receive event with fail fast

Posted by bt...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit d32f57bbb3d9431923bb494cea71713d969df073
Author: Rémi Kowalski <rk...@linagora.com>
AuthorDate: Mon May 27 17:21:42 2019 +0200

    JAMES-2774 wait until listener receive event with fail fast
---
 .../james/backend/rabbitmq/RabbitMQFixture.java    |  4 +++
 .../james/mailbox/events/RabbitMQEventBusTest.java | 33 +++++++++++++---------
 2 files changed, 23 insertions(+), 14 deletions(-)

diff --git a/backends-common/rabbitmq/src/test/java/org/apache/james/backend/rabbitmq/RabbitMQFixture.java b/backends-common/rabbitmq/src/test/java/org/apache/james/backend/rabbitmq/RabbitMQFixture.java
index 2920513..e8e63fc 100644
--- a/backends-common/rabbitmq/src/test/java/org/apache/james/backend/rabbitmq/RabbitMQFixture.java
+++ b/backends-common/rabbitmq/src/test/java/org/apache/james/backend/rabbitmq/RabbitMQFixture.java
@@ -22,6 +22,8 @@ package org.apache.james.backend.rabbitmq;
 import static org.awaitility.Duration.ONE_HUNDRED_MILLISECONDS;
 import static org.awaitility.Duration.ONE_MINUTE;
 
+import java.util.concurrent.TimeUnit;
+
 import org.awaitility.Awaitility;
 import org.awaitility.Duration;
 import org.awaitility.core.ConditionFactory;
@@ -37,6 +39,7 @@ public interface RabbitMQFixture {
     RabbitMQConfiguration.ManagementCredentials DEFAULT_MANAGEMENT_CREDENTIAL = new RabbitMQConfiguration.ManagementCredentials(DEFAULT_USER, DEFAULT_PASSWORD);
 
     Duration slowPacedPollInterval = ONE_HUNDRED_MILLISECONDS;
+    Duration THIRTY_SECONDS = new Duration(30, TimeUnit.SECONDS);
     ConditionFactory calmlyAwait = Awaitility.with()
         .pollInterval(slowPacedPollInterval)
         .and()
@@ -44,4 +47,5 @@ public interface RabbitMQFixture {
         .pollDelay(slowPacedPollInterval)
         .await();
     ConditionFactory awaitAtMostOneMinute = calmlyAwait.atMost(ONE_MINUTE);
+    ConditionFactory awaitAtMostThirtySeconds = calmlyAwait.atMost(THIRTY_SECONDS);
 }
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 ed9f0e0..bf35dd6 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
@@ -30,7 +30,6 @@ import static org.apache.james.mailbox.events.EventBusTestFixture.EVENT;
 import static org.apache.james.mailbox.events.EventBusTestFixture.GROUP_A;
 import static org.apache.james.mailbox.events.EventBusTestFixture.KEY_1;
 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;
@@ -40,7 +39,6 @@ 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;
@@ -52,6 +50,7 @@ import java.nio.charset.StandardCharsets;
 import java.util.concurrent.TimeUnit;
 
 import org.apache.james.backend.rabbitmq.RabbitMQExtension;
+import org.apache.james.backend.rabbitmq.RabbitMQFixture;
 import org.apache.james.backend.rabbitmq.RabbitMQManagementAPI;
 import org.apache.james.event.json.EventSerializer;
 import org.apache.james.mailbox.events.EventBusTestFixture.GroupA;
@@ -71,7 +70,6 @@ import org.junit.jupiter.api.extension.RegisterExtension;
 import org.mockito.stubbing.Answer;
 
 import com.rabbitmq.client.Connection;
-
 import reactor.core.publisher.Mono;
 import reactor.rabbitmq.BindingSpecification;
 import reactor.rabbitmq.ExchangeSpecification;
@@ -322,7 +320,7 @@ class RabbitMQEventBusTest implements GroupContract.SingleEventBusGroupContract,
                 rabbitMQExtension.getRabbitMQ().unpause();
 
                 eventBus.dispatch(EVENT, NO_KEYS).block();
-                verify(listener, after(THIRTY_SECONDS.toMillis()).times(1)).event(EVENT);
+                assertThatListenerReceiveOneEvent(listener);
             }
 
             @Test
@@ -334,7 +332,7 @@ class RabbitMQEventBusTest implements GroupContract.SingleEventBusGroupContract,
                 rabbitMQExtension.getRabbitMQ().restart();
 
                 eventBus.dispatch(EVENT, NO_KEYS).block();
-                verify(listener, after(THIRTY_SECONDS.toMillis()).times(1)).event(EVENT);
+                assertThatListenerReceiveOneEvent(listener);
             }
 
             @Test
@@ -347,7 +345,9 @@ class RabbitMQEventBusTest implements GroupContract.SingleEventBusGroupContract,
                 eventBus.register(listener, GROUP_A);
 
                 eventBus.dispatch(EVENT, NO_KEYS).block();
-                verify(listener, after(THIRTY_SECONDS.toMillis()).times(1)).event(EVENT);
+
+                assertThatListenerReceiveOneEvent(listener);
+
             }
 
             @Test
@@ -359,7 +359,7 @@ class RabbitMQEventBusTest implements GroupContract.SingleEventBusGroupContract,
                 rabbitMQExtension.getRabbitMQ().restart();
 
                 eventBus.reDeliver(GROUP_A, EVENT).block();
-                verify(listener, after(THIRTY_SECONDS.toMillis()).times(1)).event(EVENT);
+                assertThatListenerReceiveOneEvent(listener);
             }
 
             @Test
@@ -372,7 +372,7 @@ class RabbitMQEventBusTest implements GroupContract.SingleEventBusGroupContract,
                 eventBus.register(listener, GROUP_A);
 
                 eventBus.reDeliver(GROUP_A, EVENT).block();
-                verify(listener, after(THIRTY_SECONDS.toMillis()).times(1)).event(EVENT);
+                assertThatListenerReceiveOneEvent(listener);
             }
 
             @Test
@@ -384,7 +384,7 @@ class RabbitMQEventBusTest implements GroupContract.SingleEventBusGroupContract,
                 rabbitMQExtension.getRabbitMQ().restart();
 
                 eventBus.dispatch(EVENT, KEY_1).block();
-                verify(listener, after(THIRTY_SECONDS.toMillis()).times(1)).event(EVENT);
+                assertThatListenerReceiveOneEvent(listener);
             }
 
             @Test
@@ -397,7 +397,7 @@ class RabbitMQEventBusTest implements GroupContract.SingleEventBusGroupContract,
                 eventBus.register(listener, KEY_1);
 
                 eventBus.dispatch(EVENT, KEY_1).block();
-                verify(listener, after(THIRTY_SECONDS.toMillis()).times(1)).event(EVENT);
+                assertThatListenerReceiveOneEvent(listener);
             }
 
             @Test
@@ -414,7 +414,7 @@ class RabbitMQEventBusTest implements GroupContract.SingleEventBusGroupContract,
 
                 eventBus.register(listener, GROUP_A);
                 eventBus.dispatch(EVENT, NO_KEYS).block();
-                verify(listener, after(THIRTY_SECONDS.toMillis()).times(1)).event(EVENT);
+                assertThatListenerReceiveOneEvent(listener);
             }
 
             @Test
@@ -431,7 +431,7 @@ class RabbitMQEventBusTest implements GroupContract.SingleEventBusGroupContract,
 
                 eventBus.register(listener, GROUP_A);
                 eventBus.reDeliver(GROUP_A, EVENT).block();
-                verify(listener, after(THIRTY_SECONDS.toMillis()).times(1)).event(EVENT);
+                assertThatListenerReceiveOneEvent(listener);
             }
 
             @Test
@@ -449,7 +449,7 @@ class RabbitMQEventBusTest implements GroupContract.SingleEventBusGroupContract,
                 rabbitMQExtension.getRabbitMQ().unpause();
 
                 eventBus.dispatch(EVENT, KEY_1).block();
-                verify(listener, after(THIRTY_SECONDS.toMillis()).times(1)).event(EVENT);
+                assertThatListenerReceiveOneEvent(listener);
             }
 
             @Test
@@ -467,7 +467,7 @@ class RabbitMQEventBusTest implements GroupContract.SingleEventBusGroupContract,
 
                 eventBus.register(listener, KEY_1);
                 eventBus.dispatch(EVENT, KEY_1).block();
-                verify(listener, after(THIRTY_SECONDS.toMillis()).times(1)).event(EVENT);
+                assertThatListenerReceiveOneEvent(listener);
             }
 
             @Test
@@ -624,4 +624,9 @@ class RabbitMQEventBusTest implements GroupContract.SingleEventBusGroupContract,
         }
 
     }
+
+    private void assertThatListenerReceiveOneEvent(MailboxListener listener) {
+        RabbitMQFixture.awaitAtMostThirtySeconds
+            .untilAsserted(() -> verify(listener).event(EVENT));
+    }
 }
\ No newline at end of file


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


[james-project] 01/03: JAMES-2774 do not stop rabbitmq after each test

Posted by bt...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 4e333a924cf7bc187516bfd53018b791e45fdce9
Author: Rémi Kowalski <rk...@linagora.com>
AuthorDate: Mon May 27 16:40:46 2019 +0200

    JAMES-2774 do not stop rabbitmq after each test
---
 .../james/mailbox/events/RabbitMQEventBusTest.java      | 17 +----------------
 1 file changed, 1 insertion(+), 16 deletions(-)

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 e0c7a72..ed9f0e0 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
@@ -87,23 +87,8 @@ class RabbitMQEventBusTest implements GroupContract.SingleEventBusGroupContract,
     KeyContract.SingleEventBusKeyContract, KeyContract.MultipleEventBusKeyContract,
     ErrorHandlingContract {
 
-    static class RestartingRabbitMQExtension extends RabbitMQExtension {
-
-        @Override
-        public void beforeEach(ExtensionContext extensionContext) throws Exception {
-            getRabbitMQ().start();
-            super.beforeEach(extensionContext);
-        }
-
-        @Override
-        public void afterEach(ExtensionContext context) {
-            super.afterEach(context);
-            getRabbitMQ().stop();
-        }
-    }
-
     @RegisterExtension
-    static RestartingRabbitMQExtension rabbitMQExtension = new RestartingRabbitMQExtension();
+    static RabbitMQExtension rabbitMQExtension = new RabbitMQExtension();
 
     private RabbitMQEventBus eventBus;
     private RabbitMQEventBus eventBus2;


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


[james-project] 03/03: JAMES-2774 define short rabbitmq timeout for tests

Posted by bt...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit c777788400117bf88bb873af600c32688c229148
Author: Rémi Kowalski <rk...@linagora.com>
AuthorDate: Tue May 28 14:58:25 2019 +0200

    JAMES-2774 define short rabbitmq timeout for tests
---
 .../backend/rabbitmq/RabbitMQConfiguration.java    |  74 +++++++++++++-
 .../rabbitmq/RabbitMQConnectionFactory.java        |   4 +
 .../james/backend/rabbitmq/DockerRabbitMQ.java     |   8 ++
 .../rabbitmq/RabbitMQConfigurationTest.java        | 108 +++++++++++++++++++++
 .../james/mailbox/events/RabbitMQEventBusTest.java |   1 -
 5 files changed, 191 insertions(+), 4 deletions(-)

diff --git a/backends-common/rabbitmq/src/main/java/org/apache/james/backend/rabbitmq/RabbitMQConfiguration.java b/backends-common/rabbitmq/src/main/java/org/apache/james/backend/rabbitmq/RabbitMQConfiguration.java
index 41b4dfc..6f95b51 100644
--- a/backends-common/rabbitmq/src/main/java/org/apache/james/backend/rabbitmq/RabbitMQConfiguration.java
+++ b/backends-common/rabbitmq/src/main/java/org/apache/james/backend/rabbitmq/RabbitMQConfiguration.java
@@ -98,12 +98,20 @@ public class RabbitMQConfiguration {
     public static class Builder {
         static final int DEFAULT_MAX_RETRIES = 7;
         static final int DEFAULT_MIN_DELAY = 3000;
+        static final int DEFAULT_CONNECTION_TIMEOUT = 60_000;
+        static final int DEFAULT_CHANNEL_RPC_TIMEOUT = 60_000;
+        static final int DEFAULT_HANDSHAKE_TIMEOUT = 10_000;
+        static final int DEFAULT_SHUTDOWN_TIMEOUT = 10_000;
 
         private final URI amqpUri;
         private final URI managementUri;
         private final ManagementCredentials managementCredentials;
         private Optional<Integer> maxRetries;
         private Optional<Integer> minDelayInMs;
+        private Optional<Integer> connectionTimeoutInMs;
+        private Optional<Integer> channelRpcTimeoutInMs;
+        private Optional<Integer> handshakeTimeoutInMs;
+        private Optional<Integer> shutdownTimeoutInMs;
 
         private Builder(URI amqpUri, URI managementUri, ManagementCredentials managementCredentials) {
             this.amqpUri = amqpUri;
@@ -111,6 +119,10 @@ public class RabbitMQConfiguration {
             this.managementCredentials = managementCredentials;
             this.maxRetries = Optional.empty();
             this.minDelayInMs = Optional.empty();
+            this.connectionTimeoutInMs = Optional.empty();
+            this.channelRpcTimeoutInMs = Optional.empty();
+            this.handshakeTimeoutInMs = Optional.empty();
+            this.shutdownTimeoutInMs = Optional.empty();
         }
 
         public Builder maxRetries(int maxRetries) {
@@ -123,6 +135,26 @@ public class RabbitMQConfiguration {
             return this;
         }
 
+        public Builder connectionTimeoutInMs(int connectionTimeout) {
+            this.connectionTimeoutInMs = Optional.of(connectionTimeout);
+            return this;
+        }
+
+        public Builder channelRpcTimeoutInMs(int channelRpcTimeout) {
+            this.channelRpcTimeoutInMs = Optional.of(channelRpcTimeout);
+            return this;
+        }
+
+        public Builder handshakeTimeoutInMs(int handshakeTimeout) {
+            this.handshakeTimeoutInMs = Optional.of(handshakeTimeout);
+            return this;
+        }
+
+        public Builder shutdownTimeoutInMs(int shutdownTimeout) {
+            this.shutdownTimeoutInMs = Optional.of(shutdownTimeout);
+            return this;
+        }
+
         public RabbitMQConfiguration build() {
             Preconditions.checkNotNull(amqpUri, "'amqpUri' should not be null");
             Preconditions.checkNotNull(managementUri, "'managementUri' should not be null");
@@ -131,7 +163,12 @@ public class RabbitMQConfiguration {
                     managementUri,
                     managementCredentials,
                     maxRetries.orElse(DEFAULT_MAX_RETRIES),
-                    minDelayInMs.orElse(DEFAULT_MIN_DELAY));
+                    minDelayInMs.orElse(DEFAULT_MIN_DELAY),
+                    connectionTimeoutInMs.orElse(DEFAULT_CONNECTION_TIMEOUT),
+                    channelRpcTimeoutInMs.orElse(DEFAULT_CHANNEL_RPC_TIMEOUT),
+                    handshakeTimeoutInMs.orElse(DEFAULT_HANDSHAKE_TIMEOUT),
+                    shutdownTimeoutInMs.orElse(DEFAULT_SHUTDOWN_TIMEOUT)
+                );
         }
     }
 
@@ -171,15 +208,25 @@ public class RabbitMQConfiguration {
     private final URI managementUri;
     private final int maxRetries;
     private final int minDelayInMs;
+    private final int connectionTimeoutInMs;
+    private final int channelRpcTimeoutInMs;
+    private final int handshakeTimeoutInMs;
+    private final int shutdownTimeoutInMs;
+
 
     private final ManagementCredentials managementCredentials;
 
-    private RabbitMQConfiguration(URI uri, URI managementUri, ManagementCredentials managementCredentials, int maxRetries, int minDelayInMs) {
+    private RabbitMQConfiguration(URI uri, URI managementUri, ManagementCredentials managementCredentials, int maxRetries, int minDelayInMs,
+                                  int connectionTimeoutInMs, int channelRpcTimeoutInMs, int handshakeTimeoutInMs, int shutdownTimeoutInMs) {
         this.uri = uri;
         this.managementUri = managementUri;
         this.managementCredentials = managementCredentials;
         this.maxRetries = maxRetries;
         this.minDelayInMs = minDelayInMs;
+        this.connectionTimeoutInMs = connectionTimeoutInMs;
+        this.channelRpcTimeoutInMs = channelRpcTimeoutInMs;
+        this.handshakeTimeoutInMs = handshakeTimeoutInMs;
+        this.shutdownTimeoutInMs = shutdownTimeoutInMs;
     }
 
     public URI getUri() {
@@ -198,6 +245,22 @@ public class RabbitMQConfiguration {
         return minDelayInMs;
     }
 
+    public int getConnectionTimeoutInMs() {
+        return connectionTimeoutInMs;
+    }
+
+    public int getChannelRpcTimeoutInMs() {
+        return channelRpcTimeoutInMs;
+    }
+
+    public int getHandshakeTimeoutInMs() {
+        return handshakeTimeoutInMs;
+    }
+
+    public int getShutdownTimeoutInMs() {
+        return shutdownTimeoutInMs;
+    }
+
     public ManagementCredentials getManagementCredentials() {
         return managementCredentials;
     }
@@ -211,6 +274,10 @@ public class RabbitMQConfiguration {
                 && Objects.equals(this.managementUri, that.managementUri)
                 && Objects.equals(this.maxRetries, that.maxRetries)
                 && Objects.equals(this.minDelayInMs, that.minDelayInMs)
+                && Objects.equals(this.connectionTimeoutInMs, that.connectionTimeoutInMs)
+                && Objects.equals(this.channelRpcTimeoutInMs, that.channelRpcTimeoutInMs)
+                && Objects.equals(this.handshakeTimeoutInMs, that.handshakeTimeoutInMs)
+                && Objects.equals(this.shutdownTimeoutInMs, that.shutdownTimeoutInMs)
                 && Objects.equals(this.managementCredentials, that.managementCredentials);
         }
         return false;
@@ -218,6 +285,7 @@ public class RabbitMQConfiguration {
 
     @Override
     public final int hashCode() {
-        return Objects.hash(uri, managementUri, maxRetries, minDelayInMs, managementCredentials);
+        return Objects.hash(uri, managementUri, maxRetries, minDelayInMs, connectionTimeoutInMs,
+            channelRpcTimeoutInMs, handshakeTimeoutInMs, shutdownTimeoutInMs, managementCredentials);
     }
 }
diff --git a/backends-common/rabbitmq/src/main/java/org/apache/james/backend/rabbitmq/RabbitMQConnectionFactory.java b/backends-common/rabbitmq/src/main/java/org/apache/james/backend/rabbitmq/RabbitMQConnectionFactory.java
index 1f0e329..4c67175 100644
--- a/backends-common/rabbitmq/src/main/java/org/apache/james/backend/rabbitmq/RabbitMQConnectionFactory.java
+++ b/backends-common/rabbitmq/src/main/java/org/apache/james/backend/rabbitmq/RabbitMQConnectionFactory.java
@@ -43,6 +43,10 @@ public class RabbitMQConnectionFactory {
         try {
             ConnectionFactory connectionFactory = new ConnectionFactory();
             connectionFactory.setUri(rabbitMQConfiguration.getUri());
+            connectionFactory.setHandshakeTimeout(rabbitMQConfiguration.getHandshakeTimeoutInMs());
+            connectionFactory.setShutdownTimeout(rabbitMQConfiguration.getShutdownTimeoutInMs());
+            connectionFactory.setChannelRpcTimeout(rabbitMQConfiguration.getChannelRpcTimeoutInMs());
+            connectionFactory.setConnectionTimeout(rabbitMQConfiguration.getConnectionTimeoutInMs());
             return connectionFactory;
         } catch (Exception e) {
             throw new RuntimeException(e);
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 d5f420e..6cec712 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
@@ -48,6 +48,10 @@ public class DockerRabbitMQ {
 
     private static final int MAX_THREE_RETRIES = 3;
     private static final int MIN_DELAY_OF_ONE_HUNDRED_MILLISECONDS = 100;
+    private static final int CONNECTION_TIMEOUT_OF_ONE_SECOND = 1000;
+    private static final int CHANNEL_RPC_TIMEOUT_OF_ONE_SECOND = 1000;
+    private static final int HANDSHAKE_TIMEOUT_OF_ONE_SECOND = 1000;
+    private static final int SHUTDOWN_TIMEOUT_OF_ONE_SECOND = 1000;
     private static final String DEFAULT_RABBIT_HOST_NAME_PREFIX = "my-rabbit";
     private static final String DEFAULT_RABBIT_NODE_NAME_PREFIX = "rabbit";
     private static final int DEFAULT_RABBITMQ_PORT = 5672;
@@ -247,6 +251,10 @@ public class DockerRabbitMQ {
             .managementCredentials(DEFAULT_MANAGEMENT_CREDENTIAL)
             .maxRetries(MAX_THREE_RETRIES)
             .minDelayInMs(MIN_DELAY_OF_ONE_HUNDRED_MILLISECONDS)
+            .connectionTimeoutInMs(CONNECTION_TIMEOUT_OF_ONE_SECOND)
+            .channelRpcTimeoutInMs(CHANNEL_RPC_TIMEOUT_OF_ONE_SECOND)
+            .handshakeTimeoutInMs(HANDSHAKE_TIMEOUT_OF_ONE_SECOND)
+            .shutdownTimeoutInMs(SHUTDOWN_TIMEOUT_OF_ONE_SECOND)
             .build();
 
         return new RabbitMQConnectionFactory(rabbitMQConfiguration);
diff --git a/backends-common/rabbitmq/src/test/java/org/apache/james/backend/rabbitmq/RabbitMQConfigurationTest.java b/backends-common/rabbitmq/src/test/java/org/apache/james/backend/rabbitmq/RabbitMQConfigurationTest.java
index dbefc59..3ddc1fb 100644
--- a/backends-common/rabbitmq/src/test/java/org/apache/james/backend/rabbitmq/RabbitMQConfigurationTest.java
+++ b/backends-common/rabbitmq/src/test/java/org/apache/james/backend/rabbitmq/RabbitMQConfigurationTest.java
@@ -226,6 +226,114 @@ class RabbitMQConfigurationTest {
             .isEqualTo(minDelay);
     }
 
+    @Test
+    void connectionTimeoutShouldEqualsDefaultValueWhenNotGiven() throws URISyntaxException {
+        RabbitMQConfiguration rabbitMQConfiguration = RabbitMQConfiguration.builder()
+            .amqpUri(new URI("amqp://james:james@rabbitmq_host:5672"))
+            .managementUri(new URI("http://james:james@rabbitmq_host:15672/api/"))
+            .managementCredentials(DEFAULT_MANAGEMENT_CREDENTIAL)
+            .build();
+
+        assertThat(rabbitMQConfiguration.getConnectionTimeoutInMs())
+            .isEqualTo(RabbitMQConfiguration.Builder.DEFAULT_CONNECTION_TIMEOUT);
+    }
+
+    @Test
+    void connectionTimeoutShouldEqualsCustomValueWhenGiven() throws URISyntaxException {
+        int connectionTimeout = 1;
+
+        RabbitMQConfiguration rabbitMQConfiguration = RabbitMQConfiguration.builder()
+            .amqpUri(new URI("amqp://james:james@rabbitmq_host:5672"))
+            .managementUri(new URI("http://james:james@rabbitmq_host:15672/api/"))
+            .managementCredentials(DEFAULT_MANAGEMENT_CREDENTIAL)
+            .connectionTimeoutInMs(connectionTimeout)
+            .build();
+
+        assertThat(rabbitMQConfiguration.getConnectionTimeoutInMs())
+            .isEqualTo(connectionTimeout);
+    }
+
+    @Test
+    void channelRpcTimeoutShouldEqualsDefaultValueWhenNotGiven() throws URISyntaxException {
+        RabbitMQConfiguration rabbitMQConfiguration = RabbitMQConfiguration.builder()
+            .amqpUri(new URI("amqp://james:james@rabbitmq_host:5672"))
+            .managementUri(new URI("http://james:james@rabbitmq_host:15672/api/"))
+            .managementCredentials(DEFAULT_MANAGEMENT_CREDENTIAL)
+            .build();
+
+        assertThat(rabbitMQConfiguration.getChannelRpcTimeoutInMs())
+            .isEqualTo(RabbitMQConfiguration.Builder.DEFAULT_CHANNEL_RPC_TIMEOUT);
+    }
+
+    @Test
+    void channelRpcTimeoutShouldEqualsCustomValueWhenGiven() throws URISyntaxException {
+        int channelRpcTimeout = 1;
+
+        RabbitMQConfiguration rabbitMQConfiguration = RabbitMQConfiguration.builder()
+            .amqpUri(new URI("amqp://james:james@rabbitmq_host:5672"))
+            .managementUri(new URI("http://james:james@rabbitmq_host:15672/api/"))
+            .managementCredentials(DEFAULT_MANAGEMENT_CREDENTIAL)
+            .channelRpcTimeoutInMs(channelRpcTimeout)
+            .build();
+
+        assertThat(rabbitMQConfiguration.getChannelRpcTimeoutInMs())
+            .isEqualTo(channelRpcTimeout);
+    }
+    
+    @Test
+    void handshakeTimeoutShouldEqualsDefaultValueWhenNotGiven() throws URISyntaxException {
+        RabbitMQConfiguration rabbitMQConfiguration = RabbitMQConfiguration.builder()
+            .amqpUri(new URI("amqp://james:james@rabbitmq_host:5672"))
+            .managementUri(new URI("http://james:james@rabbitmq_host:15672/api/"))
+            .managementCredentials(DEFAULT_MANAGEMENT_CREDENTIAL)
+            .build();
+
+        assertThat(rabbitMQConfiguration.getHandshakeTimeoutInMs())
+            .isEqualTo(RabbitMQConfiguration.Builder.DEFAULT_HANDSHAKE_TIMEOUT);
+    }
+
+    @Test
+    void handshakeTimeoutShouldEqualsCustomValueWhenGiven() throws URISyntaxException {
+        int handshakeTimeout = 1;
+
+        RabbitMQConfiguration rabbitMQConfiguration = RabbitMQConfiguration.builder()
+            .amqpUri(new URI("amqp://james:james@rabbitmq_host:5672"))
+            .managementUri(new URI("http://james:james@rabbitmq_host:15672/api/"))
+            .managementCredentials(DEFAULT_MANAGEMENT_CREDENTIAL)
+            .handshakeTimeoutInMs(handshakeTimeout)
+            .build();
+
+        assertThat(rabbitMQConfiguration.getHandshakeTimeoutInMs())
+            .isEqualTo(handshakeTimeout);
+    }   
+    
+    @Test
+    void shutdownTimeoutShouldEqualsDefaultValueWhenNotGiven() throws URISyntaxException {
+        RabbitMQConfiguration rabbitMQConfiguration = RabbitMQConfiguration.builder()
+            .amqpUri(new URI("amqp://james:james@rabbitmq_host:5672"))
+            .managementUri(new URI("http://james:james@rabbitmq_host:15672/api/"))
+            .managementCredentials(DEFAULT_MANAGEMENT_CREDENTIAL)
+            .build();
+
+        assertThat(rabbitMQConfiguration.getShutdownTimeoutInMs())
+            .isEqualTo(RabbitMQConfiguration.Builder.DEFAULT_SHUTDOWN_TIMEOUT);
+    }
+
+    @Test
+    void shutdownTimeoutShouldEqualsCustomValueWhenGiven() throws URISyntaxException {
+        int shutdownTimeout = 1;
+
+        RabbitMQConfiguration rabbitMQConfiguration = RabbitMQConfiguration.builder()
+            .amqpUri(new URI("amqp://james:james@rabbitmq_host:5672"))
+            .managementUri(new URI("http://james:james@rabbitmq_host:15672/api/"))
+            .managementCredentials(DEFAULT_MANAGEMENT_CREDENTIAL)
+            .shutdownTimeoutInMs(shutdownTimeout)
+            .build();
+
+        assertThat(rabbitMQConfiguration.getShutdownTimeoutInMs())
+            .isEqualTo(shutdownTimeout);
+    }
+
     @Nested
     class ManagementCredentialsTest {
         @Test
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 bf35dd6..45213fe 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
@@ -65,7 +65,6 @@ import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtensionContext;
 import org.junit.jupiter.api.extension.RegisterExtension;
 import org.mockito.stubbing.Answer;
 


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org