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:09:01 UTC

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

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