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 2020/07/31 09:24:35 UTC
[james-project] 14/28: JAMES-3350 Significant test speedup by
weakening RabbitMQ isolation
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 f252a64843ad842320c721b3b040c655e77acabb
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Mon Jul 27 13:37:19 2020 +0700
JAMES-3350 Significant test speedup by weakening RabbitMQ isolation
Each isolation enforcement takes 4 seconds. All of our tests do not require such isolation thus we are waisting
valuable testing time.
Note that re-enabling isolation to ensure isolation is not the cause of a noticed issue is a one-liner. Thus
it remains easy for devs to investigate if it is the root cause of their issue.
---
.../james/backends/rabbitmq/RabbitMQExtension.java | 36 ++++++++++++++++++----
.../james/backends/rabbitmq/RabbitMQFixture.java | 1 +
.../backends/rabbitmq/RabbitMQHealthCheckTest.java | 4 ++-
.../james/backends/rabbitmq/RabbitMQTest.java | 3 +-
.../rabbitmq/ReactorRabbitMQChannelPoolTest.java | 3 +-
.../james/mailbox/events/RabbitMQEventBusTest.java | 6 ++--
.../RabbitMQMailQueueConfigurationChangeTest.java | 3 +-
.../queue/rabbitmq/RabbitMQMailQueueTest.java | 3 +-
.../rabbitmq/RabbitMqMailQueueFactoryTest.java | 3 +-
.../distributed/DistributedTaskManagerTest.java | 3 +-
.../RabbitMQTerminationSubscriberTest.java | 4 ++-
.../RabbitMQWorkQueuePersistenceTest.java | 3 +-
.../distributed/RabbitMQWorkQueueTest.java | 3 +-
13 files changed, 57 insertions(+), 18 deletions(-)
diff --git a/backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/RabbitMQExtension.java b/backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/RabbitMQExtension.java
index 871e592..c2a89a2 100644
--- a/backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/RabbitMQExtension.java
+++ b/backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/RabbitMQExtension.java
@@ -33,6 +33,8 @@ import org.junit.jupiter.api.extension.ParameterContext;
import org.junit.jupiter.api.extension.ParameterResolutionException;
import org.junit.jupiter.api.extension.ParameterResolver;
+import com.github.fge.lambdas.consumers.ThrowingConsumer;
+
import reactor.rabbitmq.Sender;
public class RabbitMQExtension implements BeforeAllCallback, BeforeEachCallback, AfterAllCallback, AfterEachCallback, ParameterResolver {
@@ -76,13 +78,33 @@ public class RabbitMQExtension implements BeforeAllCallback, BeforeEachCallback,
}
}
+ public enum IsolationPolicy {
+ WEAK(any -> {}),
+ STRONG(DockerRabbitMQ::reset);
+
+ private final ThrowingConsumer<DockerRabbitMQ> isolationCall;
+
+ IsolationPolicy(ThrowingConsumer<DockerRabbitMQ> isolationCall) {
+ this.isolationCall = isolationCall;
+ }
+
+ void enforceIsolation(DockerRabbitMQ container) {
+ isolationCall.accept(container);
+ }
+ }
+
@FunctionalInterface
public interface RequireRestartPolicy {
- RabbitMQExtension restartPolicy(DockerRestartPolicy dockerRestartPolicy);
+ RequireIsolationPolicy restartPolicy(DockerRestartPolicy dockerRestartPolicy);
+ }
+
+ @FunctionalInterface
+ public interface RequireIsolationPolicy {
+ RabbitMQExtension isolationPolicy(IsolationPolicy isolationPolicy);
}
- public static RabbitMQExtension singletonRabbitMQ() {
- return new RabbitMQExtension(DockerRabbitMQSingleton.SINGLETON, DockerRestartPolicy.NEVER);
+ public static RequireIsolationPolicy singletonRabbitMQ() {
+ return isolationPolicy -> new RabbitMQExtension(DockerRabbitMQSingleton.SINGLETON, DockerRestartPolicy.NEVER, isolationPolicy);
}
public static RequireRestartPolicy defaultRabbitMQ() {
@@ -90,19 +112,21 @@ public class RabbitMQExtension implements BeforeAllCallback, BeforeEachCallback,
}
public static RequireRestartPolicy dockerRabbitMQ(DockerRabbitMQ dockerRabbitMQ) {
- return dockerRestartPolicy -> new RabbitMQExtension(dockerRabbitMQ, dockerRestartPolicy);
+ return dockerRestartPolicy -> isolationPolicy -> new RabbitMQExtension(dockerRabbitMQ, dockerRestartPolicy, isolationPolicy);
}
private final DockerRabbitMQ rabbitMQ;
private final DockerRestartPolicy dockerRestartPolicy;
+ private final IsolationPolicy isolationPolicy;
private ReactorRabbitMQChannelPool channelPool;
private SimpleConnectionPool connectionPool;
public RabbitMQExtension(DockerRabbitMQ rabbitMQ,
- DockerRestartPolicy dockerRestartPolicy) {
+ DockerRestartPolicy dockerRestartPolicy, IsolationPolicy isolationPolicy) {
this.rabbitMQ = rabbitMQ;
this.dockerRestartPolicy = dockerRestartPolicy;
+ this.isolationPolicy = isolationPolicy;
}
@Override
@@ -127,7 +151,7 @@ public class RabbitMQExtension implements BeforeAllCallback, BeforeEachCallback,
public void afterEach(ExtensionContext context) throws Exception {
channelPool.close();
connectionPool.close();
- rabbitMQ.reset();
+ isolationPolicy.enforceIsolation(rabbitMQ);
dockerRestartPolicy.afterEach(rabbitMQ);
}
diff --git a/backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/RabbitMQFixture.java b/backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/RabbitMQFixture.java
index 53e49b0..eaa40e4 100644
--- a/backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/RabbitMQFixture.java
+++ b/backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/RabbitMQFixture.java
@@ -32,6 +32,7 @@ public interface RabbitMQFixture {
String EXCHANGE_NAME = "exchangeName";
String ROUTING_KEY = "routingKey";
String WORK_QUEUE = "workQueue";
+ String WORK_QUEUE_SINGLE_ACTIVE_CONSUMER = "workQueueSingleActiveConsumer";
String WORK_QUEUE_2 = "workQueue2";
String DEFAULT_USER = "guest";
diff --git a/backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/RabbitMQHealthCheckTest.java b/backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/RabbitMQHealthCheckTest.java
index fa2eef4..adf24e7 100644
--- a/backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/RabbitMQHealthCheckTest.java
+++ b/backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/RabbitMQHealthCheckTest.java
@@ -19,6 +19,7 @@
package org.apache.james.backends.rabbitmq;
+import static org.apache.james.backends.rabbitmq.RabbitMQExtension.IsolationPolicy.WEAK;
import static org.assertj.core.api.Assertions.assertThat;
import org.apache.james.core.healthcheck.Result;
@@ -30,7 +31,8 @@ import org.junit.jupiter.api.extension.RegisterExtension;
class RabbitMQHealthCheckTest {
@RegisterExtension
- static RabbitMQExtension rabbitMQExtension = RabbitMQExtension.singletonRabbitMQ();
+ static RabbitMQExtension rabbitMQExtension = RabbitMQExtension.singletonRabbitMQ()
+ .isolationPolicy(WEAK);
private RabbitMQHealthCheck healthCheck;
diff --git a/backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/RabbitMQTest.java b/backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/RabbitMQTest.java
index a12e831..ff73c05 100644
--- a/backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/RabbitMQTest.java
+++ b/backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/RabbitMQTest.java
@@ -74,7 +74,8 @@ class RabbitMQTest {
public static final ImmutableMap<String, Object> NO_QUEUE_DECLARE_ARGUMENTS = ImmutableMap.of();
@RegisterExtension
- static RabbitMQExtension rabbitMQExtension = RabbitMQExtension.singletonRabbitMQ();
+ static RabbitMQExtension rabbitMQExtension = RabbitMQExtension.singletonRabbitMQ()
+ .isolationPolicy(RabbitMQExtension.IsolationPolicy.STRONG);
@Nested
class SingleConsumerTest {
diff --git a/backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/ReactorRabbitMQChannelPoolTest.java b/backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/ReactorRabbitMQChannelPoolTest.java
index 9ae05c1..20f83c2 100644
--- a/backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/ReactorRabbitMQChannelPoolTest.java
+++ b/backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/ReactorRabbitMQChannelPoolTest.java
@@ -43,7 +43,8 @@ import reactor.rabbitmq.ChannelPool;
class ReactorRabbitMQChannelPoolTest implements ChannelPoolContract {
@RegisterExtension
- static RabbitMQExtension rabbitMQExtension = RabbitMQExtension.singletonRabbitMQ();
+ static RabbitMQExtension rabbitMQExtension = RabbitMQExtension.singletonRabbitMQ()
+ .isolationPolicy(RabbitMQExtension.IsolationPolicy.WEAK);
private List<ReactorRabbitMQChannelPool> channelPools;
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 feb188e..78079d5 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
@@ -100,7 +100,8 @@ class RabbitMQEventBusTest implements GroupContract.SingleEventBusGroupContract,
ErrorHandlingContract {
@RegisterExtension
- static RabbitMQExtension rabbitMQExtension = RabbitMQExtension.singletonRabbitMQ();
+ static RabbitMQExtension rabbitMQExtension = RabbitMQExtension.singletonRabbitMQ()
+ .isolationPolicy(RabbitMQExtension.IsolationPolicy.WEAK);
private RabbitMQEventBus eventBus;
private RabbitMQEventBus eventBus2;
@@ -445,7 +446,8 @@ class RabbitMQEventBusTest implements GroupContract.SingleEventBusGroupContract,
@RegisterExtension
RabbitMQExtension rabbitMQNetWorkIssueExtension = RabbitMQExtension.defaultRabbitMQ()
- .restartPolicy(DockerRestartPolicy.PER_TEST);
+ .restartPolicy(DockerRestartPolicy.PER_TEST)
+ .isolationPolicy(RabbitMQExtension.IsolationPolicy.WEAK);
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 6831937..6595c88 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
@@ -86,7 +86,8 @@ class RabbitMQMailQueueConfigurationChangeTest {
CassandraEventStoreModule.MODULE()));
@RegisterExtension
- static RabbitMQExtension rabbitMQExtension = RabbitMQExtension.singletonRabbitMQ();
+ static RabbitMQExtension rabbitMQExtension = RabbitMQExtension.singletonRabbitMQ()
+ .isolationPolicy(RabbitMQExtension.IsolationPolicy.WEAK);
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 0ae5ebc..b933b52 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
@@ -111,7 +111,8 @@ class RabbitMQMailQueueTest {
CassandraSchemaVersionModule.MODULE));
@RegisterExtension
- static RabbitMQExtension rabbitMQExtension = RabbitMQExtension.singletonRabbitMQ();
+ static RabbitMQExtension rabbitMQExtension = RabbitMQExtension.singletonRabbitMQ()
+ .isolationPolicy(RabbitMQExtension.IsolationPolicy.WEAK);
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 2917b35..ecf5c1c 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
@@ -44,7 +44,8 @@ class RabbitMqMailQueueFactoryTest implements MailQueueFactoryContract<RabbitMQM
private static final HashBlobId.Factory BLOB_ID_FACTORY = new HashBlobId.Factory();
@RegisterExtension
- static RabbitMQExtension rabbitMQExtension = RabbitMQExtension.singletonRabbitMQ();
+ static RabbitMQExtension rabbitMQExtension = RabbitMQExtension.singletonRabbitMQ()
+ .isolationPolicy(RabbitMQExtension.IsolationPolicy.WEAK);
private RabbitMQMailQueueFactory mailQueueFactory;
private RabbitMQMailQueueManagement mqManagementApi;
diff --git a/server/task/task-distributed/src/test/java/org/apache/james/task/eventsourcing/distributed/DistributedTaskManagerTest.java b/server/task/task-distributed/src/test/java/org/apache/james/task/eventsourcing/distributed/DistributedTaskManagerTest.java
index 233dd9a..88af101 100644
--- a/server/task/task-distributed/src/test/java/org/apache/james/task/eventsourcing/distributed/DistributedTaskManagerTest.java
+++ b/server/task/task-distributed/src/test/java/org/apache/james/task/eventsourcing/distributed/DistributedTaskManagerTest.java
@@ -139,7 +139,8 @@ class DistributedTaskManagerTest implements TaskManagerContract {
static final TaskWithId TASK_WITH_ID = new TaskWithId(TASK_ID, TASK);
@RegisterExtension
- static final RabbitMQExtension rabbitMQExtension = RabbitMQExtension.singletonRabbitMQ();
+ static final RabbitMQExtension rabbitMQExtension = RabbitMQExtension.singletonRabbitMQ()
+ .isolationPolicy(RabbitMQExtension.IsolationPolicy.WEAK);
@RegisterExtension
diff --git a/server/task/task-distributed/src/test/java/org/apache/james/task/eventsourcing/distributed/RabbitMQTerminationSubscriberTest.java b/server/task/task-distributed/src/test/java/org/apache/james/task/eventsourcing/distributed/RabbitMQTerminationSubscriberTest.java
index 3da35db..87bee6e 100644
--- a/server/task/task-distributed/src/test/java/org/apache/james/task/eventsourcing/distributed/RabbitMQTerminationSubscriberTest.java
+++ b/server/task/task-distributed/src/test/java/org/apache/james/task/eventsourcing/distributed/RabbitMQTerminationSubscriberTest.java
@@ -21,6 +21,7 @@
package org.apache.james.task.eventsourcing.distributed;
import static java.nio.charset.StandardCharsets.UTF_8;
+import static org.apache.james.backends.rabbitmq.RabbitMQExtension.IsolationPolicy.WEAK;
import static org.apache.james.task.eventsourcing.distributed.RabbitMQTerminationSubscriber.EXCHANGE_NAME;
import static org.apache.james.task.eventsourcing.distributed.RabbitMQTerminationSubscriber.ROUTING_KEY;
import static org.assertj.core.api.Assertions.assertThat;
@@ -58,7 +59,8 @@ class RabbitMQTerminationSubscriberTest implements TerminationSubscriberContract
private static final JsonEventSerializer SERIALIZER = JsonEventSerializer.forModules(MODULES).withoutNestedType();
@RegisterExtension
- static RabbitMQExtension rabbitMQExtension = RabbitMQExtension.singletonRabbitMQ();
+ static RabbitMQExtension rabbitMQExtension = RabbitMQExtension.singletonRabbitMQ()
+ .isolationPolicy(WEAK);
@Override
public TerminationSubscriber subscriber() {
diff --git a/server/task/task-distributed/src/test/java/org/apache/james/task/eventsourcing/distributed/RabbitMQWorkQueuePersistenceTest.java b/server/task/task-distributed/src/test/java/org/apache/james/task/eventsourcing/distributed/RabbitMQWorkQueuePersistenceTest.java
index 491db08..05f9121 100644
--- a/server/task/task-distributed/src/test/java/org/apache/james/task/eventsourcing/distributed/RabbitMQWorkQueuePersistenceTest.java
+++ b/server/task/task-distributed/src/test/java/org/apache/james/task/eventsourcing/distributed/RabbitMQWorkQueuePersistenceTest.java
@@ -42,7 +42,8 @@ class RabbitMQWorkQueuePersistenceTest {
@RegisterExtension
static RabbitMQExtension rabbitMQExtension = RabbitMQExtension.defaultRabbitMQ()
- .restartPolicy(RabbitMQExtension.DockerRestartPolicy.PER_CLASS);
+ .restartPolicy(RabbitMQExtension.DockerRestartPolicy.PER_CLASS)
+ .isolationPolicy(RabbitMQExtension.IsolationPolicy.WEAK);
private RabbitMQWorkQueue testee;
private ImmediateWorker worker;
diff --git a/server/task/task-distributed/src/test/java/org/apache/james/task/eventsourcing/distributed/RabbitMQWorkQueueTest.java b/server/task/task-distributed/src/test/java/org/apache/james/task/eventsourcing/distributed/RabbitMQWorkQueueTest.java
index e4b6ea3..1a534d4 100644
--- a/server/task/task-distributed/src/test/java/org/apache/james/task/eventsourcing/distributed/RabbitMQWorkQueueTest.java
+++ b/server/task/task-distributed/src/test/java/org/apache/james/task/eventsourcing/distributed/RabbitMQWorkQueueTest.java
@@ -56,7 +56,8 @@ class RabbitMQWorkQueueTest {
@RegisterExtension
static RabbitMQExtension rabbitMQExtension = RabbitMQExtension.defaultRabbitMQ()
- .restartPolicy(RabbitMQExtension.DockerRestartPolicy.PER_CLASS);
+ .restartPolicy(RabbitMQExtension.DockerRestartPolicy.PER_CLASS)
+ .isolationPolicy(RabbitMQExtension.IsolationPolicy.WEAK);
private RabbitMQWorkQueue testee;
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org