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 c27641f5bc9877ef88ab7b8c85de7c9aeacd9ea1 Author: Tran Tien Duc <[email protected]> AuthorDate: Thu May 23 14:53:20 2019 +0700 JAMES-2774 Avoid starting too many docker rabbitmq in RabbitMQEventBusTest By using singleton docker rabbitmq, and it can be reused in other tests --- .../james/backend/rabbitmq/RabbitMQExtension.java | 77 ++++++++++++++++++++-- .../backend/rabbitmq/RabbitMQHealthCheckTest.java | 2 +- .../james/backend/rabbitmq/RabbitMQTest.java | 34 +--------- .../james/mailbox/events/RabbitMQEventBusTest.java | 23 ++----- .../RabbitMQMailQueueConfigurationChangeTest.java | 2 +- .../queue/rabbitmq/RabbitMQMailQueueTest.java | 2 +- .../rabbitmq/RabbitMqMailQueueFactoryTest.java | 2 +- 7 files changed, 83 insertions(+), 59 deletions(-) diff --git a/backends-common/rabbitmq/src/test/java/org/apache/james/backend/rabbitmq/RabbitMQExtension.java b/backends-common/rabbitmq/src/test/java/org/apache/james/backend/rabbitmq/RabbitMQExtension.java index 3c4f3a5..1c9f46d 100644 --- a/backends-common/rabbitmq/src/test/java/org/apache/james/backend/rabbitmq/RabbitMQExtension.java +++ b/backends-common/rabbitmq/src/test/java/org/apache/james/backend/rabbitmq/RabbitMQExtension.java @@ -21,6 +21,7 @@ package org.apache.james.backend.rabbitmq; import static org.apache.james.backend.rabbitmq.RabbitMQFixture.DEFAULT_MANAGEMENT_CREDENTIAL; import java.net.URISyntaxException; +import java.util.function.Consumer; import org.junit.jupiter.api.extension.AfterAllCallback; import org.junit.jupiter.api.extension.AfterEachCallback; @@ -32,19 +33,85 @@ import org.junit.jupiter.api.extension.ParameterResolutionException; import org.junit.jupiter.api.extension.ParameterResolver; public class RabbitMQExtension implements BeforeAllCallback, BeforeEachCallback, AfterAllCallback, AfterEachCallback, ParameterResolver { - private DockerRabbitMQ rabbitMQ; + + private static final Consumer<DockerRabbitMQ> DO_NOTHING = dockerRabbitMQ -> {}; + + public enum DockerRestartPolicy { + PER_TEST(DockerRabbitMQ::start, DockerRabbitMQ::start, DockerRabbitMQ::stop, DockerRabbitMQ::stop), + PER_CLASS(DockerRabbitMQ::start, DO_NOTHING, DO_NOTHING, DockerRabbitMQ::stop), + NEVER(DockerRabbitMQ::start, DO_NOTHING, DO_NOTHING, DO_NOTHING); + + private final Consumer<DockerRabbitMQ> beforeAllCallback; + private final Consumer<DockerRabbitMQ> beforeEachCallback; + private final Consumer<DockerRabbitMQ> afterEachCallback; + private final Consumer<DockerRabbitMQ> afterAllCallback; + + DockerRestartPolicy(Consumer<DockerRabbitMQ> beforeAllCallback, + Consumer<DockerRabbitMQ> beforeEachCallback, + Consumer<DockerRabbitMQ> afterEachCallback, + Consumer<DockerRabbitMQ> afterAllCallback) { + this.beforeAllCallback = beforeAllCallback; + this.beforeEachCallback = beforeEachCallback; + this.afterEachCallback = afterEachCallback; + this.afterAllCallback = afterAllCallback; + } + + public void beforeAll(DockerRabbitMQ dockerRabbitMQ) { + beforeAllCallback.accept(dockerRabbitMQ); + } + + public void afterAll(DockerRabbitMQ dockerRabbitMQ) { + afterAllCallback.accept(dockerRabbitMQ); + } + + public void afterEach(DockerRabbitMQ dockerRabbitMQ) { + afterEachCallback.accept(dockerRabbitMQ); + } + + public void beforeEach(DockerRabbitMQ dockerRabbitMQ) { + beforeEachCallback.accept(dockerRabbitMQ); + } + } + + @FunctionalInterface + public interface RequireRestartPolicy { + RabbitMQExtension restartPolicy(DockerRestartPolicy dockerRestartPolicy); + } + + public static RabbitMQExtension singletonRabbitMQ() { + return new RabbitMQExtension(DockerRabbitMQSingleton.SINGLETON, DockerRestartPolicy.NEVER); + } + + public static RequireRestartPolicy defaultRabbitMQ() { + return dockerRabbitMQ(DockerRabbitMQ.withoutCookie()); + } + + public static RequireRestartPolicy dockerRabbitMQ(DockerRabbitMQ dockerRabbitMQ) { + return dockerRestartPolicy -> new RabbitMQExtension(dockerRabbitMQ, dockerRestartPolicy); + } + + private final DockerRabbitMQ rabbitMQ; + private final DockerRestartPolicy dockerRestartPolicy; + private SimpleChannelPool simpleChannelPool; private RabbitMQConnectionFactory connectionFactory; private SimpleConnectionPool connectionPool; + public RabbitMQExtension(DockerRabbitMQ rabbitMQ, + DockerRestartPolicy dockerRestartPolicy) { + this.rabbitMQ = rabbitMQ; + this.dockerRestartPolicy = dockerRestartPolicy; + } + @Override public void beforeAll(ExtensionContext context) { - rabbitMQ = DockerRabbitMQ.withoutCookie(); - rabbitMQ.start(); + dockerRestartPolicy.beforeAll(rabbitMQ); } @Override public void beforeEach(ExtensionContext extensionContext) throws Exception { + dockerRestartPolicy.beforeEach(rabbitMQ); + connectionFactory = createRabbitConnectionFactory(); connectionPool = new SimpleConnectionPool(connectionFactory); this.simpleChannelPool = new SimpleChannelPool(connectionPool); @@ -54,11 +121,13 @@ public class RabbitMQExtension implements BeforeAllCallback, BeforeEachCallback, public void afterEach(ExtensionContext context) { simpleChannelPool.close(); connectionPool.close(); + + dockerRestartPolicy.afterEach(rabbitMQ); } @Override public void afterAll(ExtensionContext extensionContext) { - rabbitMQ.stop(); + dockerRestartPolicy.afterAll(rabbitMQ); } @Override diff --git a/backends-common/rabbitmq/src/test/java/org/apache/james/backend/rabbitmq/RabbitMQHealthCheckTest.java b/backends-common/rabbitmq/src/test/java/org/apache/james/backend/rabbitmq/RabbitMQHealthCheckTest.java index 6184517..6b811a0 100644 --- a/backends-common/rabbitmq/src/test/java/org/apache/james/backend/rabbitmq/RabbitMQHealthCheckTest.java +++ b/backends-common/rabbitmq/src/test/java/org/apache/james/backend/rabbitmq/RabbitMQHealthCheckTest.java @@ -30,7 +30,7 @@ import org.junit.jupiter.api.extension.RegisterExtension; class RabbitMQHealthCheckTest { @RegisterExtension - static RabbitMQExtension rabbitMQExtension = new RabbitMQExtension(); + static RabbitMQExtension rabbitMQExtension = RabbitMQExtension.singletonRabbitMQ(); private RabbitMQHealthCheck healthCheck; diff --git a/backends-common/rabbitmq/src/test/java/org/apache/james/backend/rabbitmq/RabbitMQTest.java b/backends-common/rabbitmq/src/test/java/org/apache/james/backend/rabbitmq/RabbitMQTest.java index 412340c..b6f1b31 100644 --- a/backends-common/rabbitmq/src/test/java/org/apache/james/backend/rabbitmq/RabbitMQTest.java +++ b/backends-common/rabbitmq/src/test/java/org/apache/james/backend/rabbitmq/RabbitMQTest.java @@ -37,13 +37,10 @@ import java.util.Queue; import java.util.concurrent.TimeoutException; import java.util.stream.IntStream; -import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; 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 com.github.fge.lambdas.Throwing; @@ -57,37 +54,8 @@ import com.rabbitmq.client.ConnectionFactory; class RabbitMQTest { - private static class RabbitMQNestedTestExtension extends RabbitMQExtension { - - @Override - public void beforeAll(ExtensionContext context) { - } - - void beforeAll() { - super.beforeAll(null); - } - - @Override - public void afterAll(ExtensionContext extensionContext) { - } - - void afterAll() { - super.afterAll(null); - } - } - @RegisterExtension - static RabbitMQNestedTestExtension testExtension = new RabbitMQNestedTestExtension(); - - @BeforeAll - static void setup() { - testExtension.beforeAll(); - } - - @AfterAll - static void tearDown() { - testExtension.afterAll(); - } + static RabbitMQExtension rabbitMQExtension = RabbitMQExtension.singletonRabbitMQ(); @Nested class SingleConsumerTest { 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 84616ac..220f8c5 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 @@ -50,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.RabbitMQExtension.DockerRestartPolicy; import org.apache.james.backend.rabbitmq.RabbitMQFixture; import org.apache.james.backend.rabbitmq.RabbitMQManagementAPI; import org.apache.james.backend.rabbitmq.SimpleConnectionPool; @@ -66,11 +67,11 @@ 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; import com.rabbitmq.client.Connection; + import reactor.core.publisher.Mono; import reactor.rabbitmq.BindingSpecification; import reactor.rabbitmq.ExchangeSpecification; @@ -86,23 +87,8 @@ class RabbitMQEventBusTest implements GroupContract.SingleEventBusGroupContract, KeyContract.SingleEventBusKeyContract, KeyContract.MultipleEventBusKeyContract, ErrorHandlingContract { - static class TestScopedRabbitMQExtension extends RabbitMQExtension { - - @Override - public void beforeEach(ExtensionContext extensionContext) throws Exception { - super.beforeAll(extensionContext); - super.beforeEach(extensionContext); - } - - @Override - public void afterEach(ExtensionContext context) { - super.afterEach(context); - super.afterAll(context); - } - } - @RegisterExtension - static RabbitMQExtension rabbitMQExtension = new RabbitMQExtension(); + static RabbitMQExtension rabbitMQExtension = RabbitMQExtension.singletonRabbitMQ(); private RabbitMQEventBus eventBus; private RabbitMQEventBus eventBus2; @@ -320,7 +306,8 @@ class RabbitMQEventBusTest implements GroupContract.SingleEventBusGroupContract, class DispatchingWhenNetWorkIssue { @RegisterExtension - TestScopedRabbitMQExtension rabbitMQNetWorkIssueExtension = new TestScopedRabbitMQExtension(); + RabbitMQExtension rabbitMQNetWorkIssueExtension = RabbitMQExtension.defaultRabbitMQ() + .restartPolicy(DockerRestartPolicy.PER_TEST); private RabbitMQEventBus rabbitMQEventBusWithNetWorkIssue; diff --git a/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueConfigurationChangeTest.java b/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueConfigurationChangeTest.java index c4fe56f..cf5eb7b 100644 --- a/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueConfigurationChangeTest.java +++ b/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueConfigurationChangeTest.java @@ -85,7 +85,7 @@ class RabbitMQMailQueueConfigurationChangeTest { CassandraEventStoreModule.MODULE)); @RegisterExtension - static RabbitMQExtension rabbitMQExtension = new RabbitMQExtension(); + static RabbitMQExtension rabbitMQExtension = RabbitMQExtension.singletonRabbitMQ(); private UpdatableTickingClock clock; private RabbitMQMailQueueManagement mqManagementApi; diff --git a/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueTest.java b/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueTest.java index 5f44b02..ec9e18b 100644 --- a/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueTest.java +++ b/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueTest.java @@ -87,7 +87,7 @@ public class RabbitMQMailQueueTest implements ManageableMailQueueContract, MailQ CassandraSchemaVersionModule.MODULE)); @RegisterExtension - static RabbitMQExtension rabbitMQExtension = new RabbitMQExtension(); + static RabbitMQExtension rabbitMQExtension = RabbitMQExtension.singletonRabbitMQ(); private RabbitMQMailQueueFactory mailQueueFactory; private UpdatableTickingClock clock; diff --git a/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMqMailQueueFactoryTest.java b/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMqMailQueueFactoryTest.java index 24088dc..a432c4f 100644 --- a/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMqMailQueueFactoryTest.java +++ b/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMqMailQueueFactoryTest.java @@ -48,7 +48,7 @@ class RabbitMqMailQueueFactoryTest implements MailQueueFactoryContract<RabbitMQM private static final HashBlobId.Factory BLOB_ID_FACTORY = new HashBlobId.Factory(); @RegisterExtension - static final RabbitMQExtension rabbitMQExtension = new RabbitMQExtension(); + static RabbitMQExtension rabbitMQExtension = RabbitMQExtension.singletonRabbitMQ(); private RabbitMQMailQueueFactory mailQueueFactory; private RabbitMQMailQueueManagement mqManagementApi; --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
