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]
