JAMES-2334 Demonstrate that durability is working

Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/fb67d5f2
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/fb67d5f2
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/fb67d5f2

Branch: refs/heads/master
Commit: fb67d5f2cebda481b2ff659d90a764e64133bc28
Parents: 94ddf6a
Author: Matthieu Baechler <[email protected]>
Authored: Mon May 28 15:00:10 2018 +0200
Committer: Matthieu Baechler <[email protected]>
Committed: Thu May 31 09:47:02 2018 +0200

----------------------------------------------------------------------
 .../james/queue/rabbitmq/DockerRabbitMQ.java    |  6 ++
 .../james/queue/rabbitmq/RabbitMQTest.java      | 66 +++++++++++++++-----
 2 files changed, 55 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/fb67d5f2/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/DockerRabbitMQ.java
----------------------------------------------------------------------
diff --git 
a/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/DockerRabbitMQ.java
 
b/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/DockerRabbitMQ.java
index 0eab7a2..8c7bae8 100644
--- 
a/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/DockerRabbitMQ.java
+++ 
b/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/DockerRabbitMQ.java
@@ -18,6 +18,7 @@
  ****************************************************************/
 package org.apache.james.queue.rabbitmq;
 
+import org.testcontainers.DockerClientFactory;
 import org.testcontainers.containers.GenericContainer;
 
 import com.rabbitmq.client.ConnectionFactory;
@@ -71,4 +72,9 @@ public class DockerRabbitMQ {
     public void stop() {
         container.stop();
     }
+
+    public void restart() {
+        DockerClientFactory.instance().client()
+            .restartContainerCmd(container.getContainerId());
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/fb67d5f2/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQTest.java
----------------------------------------------------------------------
diff --git 
a/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQTest.java
 
b/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQTest.java
index 5e8f311..b81035e 100644
--- 
a/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQTest.java
+++ 
b/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQTest.java
@@ -58,16 +58,46 @@ class RabbitMQTest {
     @Nested
     class SingleConsumerTest {
 
+        private ConnectionFactory connectionFactory;
+        private Connection connection;
+        private Channel channel;
+
+        @BeforeEach
+        void setup(DockerRabbitMQ rabbitMQ) throws IOException, 
TimeoutException {
+            connectionFactory = rabbitMQ.connectionFactory();
+            connection = connectionFactory.newConnection();
+            channel = connection.createChannel();
+        }
+
+        @AfterEach
+        void tearDown() {
+            closeQuietly(connection, channel);
+        }
+
+        @Test
+        void publishedEventWithoutSubscriberShouldNotBeLost() throws Exception 
{
+            String queueName = createQueue(channel);
+            publishAMessage(channel);
+            awaitAtMostOneMinute.until(() -> messageReceived(channel, 
queueName));
+        }
+
         @Test
-        void publishedEventWithoutSubscriberShouldNotBeLost(DockerRabbitMQ 
rabbitMQ) throws Exception {
-            ConnectionFactory connectionFactory = rabbitMQ.connectionFactory();
-            try (Connection connection = connectionFactory.newConnection();
-                 Channel channel = connection.createChannel()) {
-                String queueName = createQueue(channel);
+        void demonstrateDurability(DockerRabbitMQ rabbitMQ) throws Exception {
+            String queueName = createQueue(channel);
+            publishAMessage(channel);
 
-                publishAMessage(channel);
+            rabbitMQ.restart();
 
-                awaitAtMostOneMinute.until(() -> messageReceived(channel, 
queueName));
+            awaitAtMostOneMinute.until(() -> containerIsRestarted(rabbitMQ));
+            assertThat(channel.basicGet(queueName, !AUTO_ACK)).isNotNull();
+        }
+
+        private Boolean containerIsRestarted(DockerRabbitMQ rabbitMQ) {
+            try {
+                rabbitMQ.connectionFactory().newConnection();
+                return true;
+            } catch (Exception e) {
+                return false;
             }
         }
 
@@ -130,16 +160,6 @@ class RabbitMQTest {
                 connection1, connection2, connection3, connection4);
         }
 
-        private void closeQuietly(AutoCloseable... closeables) {
-            for (AutoCloseable closeable : closeables) {
-                try {
-                    closeable.close();
-                } catch (Exception e) {
-                    //ignoring exception
-                }
-            }
-        }
-
         @Nested
         class BroadCast {
 
@@ -291,6 +311,18 @@ class RabbitMQTest {
 
     }
 
+    private void closeQuietly(AutoCloseable... closeables) {
+        Arrays.stream(closeables).forEach(this::closeQuietly);
+    }
+
+    private void closeQuietly(AutoCloseable closeable) {
+        try {
+            closeable.close();
+        } catch (Exception e) {
+            //ignore error
+        }
+    }
+
     private byte[] asBytes(String message) {
         return message.getBytes(StandardCharsets.UTF_8);
     }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to