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:21 UTC

[james-project] branch master updated (30a99e3 -> fd0a2b6)

This is an automated email from the ASF dual-hosted git repository.

btellier pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git.


    from 30a99e3  JAMES-3099 Add a little explanation in the README about annotations
     new 65566ae  JAMES-3350 Leverage fork parallelism in long to test projects
     new 3bfa0e2  JAMES-3350 Decrease forkedProcessTimeoutInSeconds as this avoids waiting needlessly for 2 hours
     new 5cb925a  JAMES-3350 Increase DockerCassandraSingleton MAX_TEST_PLAYED to 200
     new e260bba  JAMES-3350 Remove unused await() calls
     new 9a0ac99  JAMES-3350 Remove unused CucumberAwsS3Singleton
     new cffebdd  JAMES-3350 SetMessagesMethodTest don't need to call await
     new 6cf8e7d  JAMES-3350 Drop CassandraRabbitMQSwiftJmapTestRule
     new 2e33520  JAMES-3350 Remove an unneeded await call in GetMessageListMethodTest
     new 0c57b69  JAMES-3350 Decrease backoff for RabbitMQEventBusTest
     new db7b995  JAMES-3350 Review RabbitMQWorkQueueTest lifecycle
     new 4889abe  JAMES-3350 Review RabbitMQWorkQueuePersistenceTest lifecycle
     new 9ec4dc7  JAMES-3350 Fasten delays & timeout upon RabbitMQ checks
     new 79b8915  JAMES-3305 TaskId might be null
     new f252a64  JAMES-3350 Significant test speedup by weakening RabbitMQ isolation
     new 4f81255  JAMES-3350 RabbitMQEventBusTest: replace a sleep by an await
     new 25e5adc  JAMES-3350 Decrase long delays timings
     new ac4225f  JAMES-3350 Decrease processing time for EventBus rate testing
     new 891234e  JAMES-3350 Extract ReactorRabbitMQChannelPool configuration
     new a1c8d5e  JAMES-3350 Fix asciidoc formatting in server/mailet/mock-smtp-server/README.adoc
     new c6e378a  JAMES-3350 Building mock-smtp-server image should be optional
     new 211be39  JAMES-3350 Reduce EventBus retry delays for RabbitMQReindexingWithEventDeadLettersTest
     new 279baaa  JAMES-3350 Allow to choose the lifecycle of JamesServerExtension
     new 0d8348b  JAMES-3350 Split Guice server tests to better leverage lifecycle benefits
     new ae89075  JAMES-3350 Increase RabbitMQExtension channel number
     new b4ae19d  JAMES-3350 DomainList::autoDetect leads to slow tests
     new eae90a1  JAMES-3350 Reuse forks for mailet integration tests
     new c50a7a6  JAMES-3350 ElasticSearchIntegrationTest: remove unnecessary awaits
     new fd0a2b6  JAMES-3350 DomainList::autoDetect leads to slow tests

The 28 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../cassandra/DockerCassandraSingleton.java        |   2 +-
 backends-common/elasticsearch/pom.xml              |  13 ++
 backends-common/rabbitmq/pom.xml                   |  13 ++
 .../rabbitmq/ReactorRabbitMQChannelPool.java       |  68 +++++--
 .../backends/rabbitmq/SimpleConnectionPool.java    |   4 +
 .../james/backends/rabbitmq/DockerRabbitMQ.java    |  24 +--
 .../james/backends/rabbitmq/RabbitMQExtension.java |  43 ++++-
 .../james/backends/rabbitmq/RabbitMQFixture.java   |   1 +
 .../backends/rabbitmq/RabbitMQHealthCheckTest.java |   4 +-
 .../james/backends/rabbitmq/RabbitMQTest.java      |   3 +-
 .../rabbitmq/ReactorRabbitMQChannelPoolTest.java   |   8 +-
 .../mailbox/events/ErrorHandlingContract.java      |  24 +--
 .../james/mailbox/events/EventBusContract.java     |  10 +-
 .../james/mailbox/events/EventBusTestFixture.java  |   5 +-
 .../apache/james/mailbox/events/GroupContract.java |   2 +-
 .../apache/james/mailbox/events/KeyContract.java   |   2 +-
 .../ElasticSearchIntegrationTest.java              |   4 -
 .../james/mailbox/events/RabbitMQEventBusTest.java |   8 +-
 mpt/impl/imap-mailbox/cassandra/pom.xml            |  13 ++
 .../rabbitmq/host/RabbitMQEventBusHostSystem.java  |   3 +-
 pom.xml                                            |   4 +-
 server/blob/blob-cassandra/pom.xml                 |  13 ++
 server/blob/blob-memory/pom.xml                    |   2 +-
 server/blob/blob-objectstorage/pom.xml             |  13 ++
 .../AuthenticatedCassandraJamesServerTest.java     |  10 +-
 .../org/apache/james/CassandraJamesServerTest.java |   7 +-
 .../apache/james/CassandraJmapJamesServerTest.java |  35 ----
 .../org/apache/james/CassandraWithTikaTest.java    |  14 +-
 ...va => WithCassandraBlobStoreImmutableTest.java} |  20 +-
 .../apache/james/WithCassandraBlobStoreTest.java   |  16 +-
 .../apache/james/CassandraLdapJamesServerTest.java |   3 +-
 .../james/CassandraLdapJmapJamesServerTest.java    |   3 +-
 .../james/CassandraRabbitMQJamesServerFixture.java |  10 +-
 .../james/CassandraRabbitMQSwiftJmapTestRule.java  |  99 ----------
 .../james/RabbitMQJamesServerReprocessingTest.java |   4 +-
 ...eExtension.java => WithCacheImmutableTest.java} |  56 +-----
 ...ithCacheTest.java => WithCacheMutableTest.java} |  10 +-
 .../org/apache/james/WithCassandraBlobStore.java   |  88 ---------
 ...va => WithCassandraBlobStoreImmutableTest.java} |  28 ++-
 ...java => WithCassandraBlobStoreMutableTest.java} |  10 +-
 .../apache/james/WithDefaultAwsS3Extension.java    |  71 -------
 ...est.java => WithDefaultAwsS3ImmutableTest.java} |  11 +-
 ...eTest.java => WithDefaultAwsS3MutableTest.java} |  12 +-
 .../apache/james/WithDefaultSwiftExtension.java    |  71 -------
 ...est.java => WithDefaultSwiftImmutableTest.java} |  11 +-
 ...eTest.java => WithDefaultSwiftMutableTest.java} |  12 +-
 .../apache/james/WithEncryptedAwsS3Extension.java  |  72 -------
 ...t.java => WithEncryptedAwsS3ImmutableTest.java} |  12 +-
 ...est.java => WithEncryptedAwsS3MutableTest.java} |  13 +-
 .../apache/james/WithEncryptedSwiftExtension.java  |  72 -------
 ...t.java => WithEncryptedSwiftImmutableTest.java} |  12 +-
 ...est.java => WithEncryptedSwiftMutableTest.java} |  13 +-
 .../apache/james/WithScanningSearchExtension.java  |  89 ---------
 .../james/WithScanningSearchImmutableTest.java}    |  48 +++--
 .../james/WithScanningSearchMutableTest.java}      |  12 +-
 .../org/apache/james/WithScanningSearchTest.java   |  27 ---
 .../CassandraRabbitMQLdapJmapJamesServerTest.java  |   6 +-
 .../java/org/apache/james/JamesServerBuilder.java  |  10 +-
 .../java/org/apache/james/JamesServerContract.java |  27 ---
 .../org/apache/james/JamesServerExtension.java     |  59 +++++-
 .../java/org/apache/james/JPAJamesServerTest.java  |   3 +-
 ...WithAuthenticatedDatabaseSqlValidationTest.java |   3 +-
 ...atabaseAuthenticaticationSqlValidationTest.java |   3 +-
 ...erverTest.java => DomainAutodetectionTest.java} |  30 ++-
 .../org/apache/james/MemoryJamesServerTest.java    |   4 +-
 .../apache/james/MemoryJmapJamesServerTest.java    |   4 +-
 .../james/jmap/draft/JmapJamesServerContract.java  |  33 ++--
 .../james/modules/rabbitmq/RabbitMQModule.java     |  17 +-
 server/data/data-cassandra/pom.xml                 |  13 ++
 server/mailet/integration-testing/pom.xml          |   2 +-
 server/mailet/mock-smtp-server/README.adoc         |  11 +-
 server/mailet/mock-smtp-server/pom.xml             |  26 ---
 .../mailrepository-cassandra/pom.xml               |  13 ++
 .../pom.xml                                        |   4 +-
 .../CassandraGetVacationResponseTest.java          |   5 -
 .../cassandra/CassandraSetMailboxesMethodTest.java |   7 -
 .../CassandraSetMessagesMethodReRoutingTest.java   |   5 -
 .../cassandra/CassandraSetMessagesMethodTest.java  |   5 -
 .../CassandraSetVacationResponseTest.java          |   7 -
 .../CassandraVacationIntegrationTest.java          |   7 -
 .../CassandraVacationRelayIntegrationTest.java     |   5 -
 .../cassandra/cucumber/CucumberAwsS3Singleton.java |  29 ---
 .../apache/james/jmap/VacationIntegrationTest.java |   3 -
 .../james/jmap/VacationRelayIntegrationTest.java   |   3 -
 .../integration/GetMessageListMethodTest.java      |   1 -
 .../integration/GetVacationResponseTest.java       |   2 -
 .../integration/SetMailboxesMethodTest.java        |   2 -
 .../SetMessagesMethodReRoutingTest.java            |   2 -
 .../methods/integration/SetMessagesMethodTest.java |  43 -----
 .../integration/SetVacationResponseTest.java       |   2 -
 .../MemoryGetVacationResponseMethodTest.java       |   5 -
 .../jmap/memory/MemorySetMailboxesMethodTest.java  |   5 -
 .../MemorySetMessagesMethodReRoutingTest.java      |   5 -
 .../jmap/memory/MemorySetMessagesMethodTest.java   |   4 -
 .../MemorySetVacationResponseMethodTest.java       |   5 -
 .../jmap/memory/MemoryVacationIntegrationTest.java |   6 -
 .../memory/MemoryVacationRelayIntegrationTest.java |   5 -
 .../pom.xml                                        |   4 +-
 .../RabbitMQAwsS3GetVacationResponseTest.java      |   6 -
 .../RabbitMQAwsS3SetMailboxesMethodTest.java       |   7 -
 ...abbitMQAwsS3SetMessagesMethodReRoutingTest.java |   6 -
 .../RabbitMQAwsS3SetMessagesMethodTest.java        |   5 -
 .../RabbitMQAwsS3SetVacationResponseTest.java      |   6 -
 .../RabbitMQAwsS3VacationIntegrationTest.java      |   6 -
 .../RabbitMQAwsS3VacationRelayIntegrationTest.java |   6 -
 .../jmap/rabbitmq/RabbitMQSwiftFilterTest.java     |  49 -----
 .../pom.xml                                        |   4 +-
 .../distributed/DistributedAuthenticationTest.java |   1 +
 .../rfc8621/contract/AuthenticationContract.scala  |  11 +-
 .../rfc8621/memory/MemoryAuthenticationTest.java   |   1 +
 .../distributed-webadmin-integration-test/pom.xml  |   4 +-
 .../rabbitmq/RabbitMQAuthorizedEndpointsTest.java  |   1 +
 .../RabbitMQEventDeadLettersIntegrationTest.java   |  12 +-
 .../rabbitmq/RabbitMQJmapExtension.java            | 211 ---------------------
 ...RabbitMQReindexingWithEventDeadLettersTest.java |  11 +-
 .../RabbitMQUnauthorizedEndpointsTest.java         |  38 +++-
 .../memory/MemoryAuthorizedEndpointsTest.java      |   1 +
 .../memory/MemoryUnauthorizedEndpointsTest.java    |   1 +
 .../RabbitMQMailQueueConfigurationChangeTest.java  |   3 +-
 .../queue/rabbitmq/RabbitMQMailQueueTest.java      |   3 +-
 .../rabbitmq/RabbitMqMailQueueFactoryTest.java     |   3 +-
 .../distributed/RabbitMQWorkQueue.java             |   5 +-
 .../distributed/DistributedTaskManagerTest.java    |   3 +-
 .../RabbitMQTerminationSubscriberTest.java         |   4 +-
 .../RabbitMQWorkQueuePersistenceTest.java          |   5 +-
 .../distributed/RabbitMQWorkQueueTest.java         |   5 +-
 126 files changed, 633 insertions(+), 1477 deletions(-)
 delete mode 100644 server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraJmapJamesServerTest.java
 copy server/container/guice/cassandra-guice/src/test/java/org/apache/james/{WithCassandraBlobStoreTest.java => WithCassandraBlobStoreImmutableTest.java} (59%)
 delete mode 100644 server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/CassandraRabbitMQSwiftJmapTestRule.java
 rename server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/{WithCacheExtension.java => WithCacheImmutableTest.java} (52%)
 rename server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/{WithCacheTest.java => WithCacheMutableTest.java} (78%)
 delete mode 100644 server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCassandraBlobStore.java
 copy server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/{CassandraRabbitMQJamesServerFixture.java => WithCassandraBlobStoreImmutableTest.java} (61%)
 copy server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/{WithCassandraBlobStoreTest.java => WithCassandraBlobStoreMutableTest.java} (70%)
 delete mode 100644 server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithDefaultAwsS3Extension.java
 rename server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/{WithDefaultAwsS3Test.java => WithDefaultAwsS3ImmutableTest.java} (75%)
 copy server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/{WithCassandraBlobStoreTest.java => WithDefaultAwsS3MutableTest.java} (64%)
 delete mode 100644 server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithDefaultSwiftExtension.java
 rename server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/{WithDefaultSwiftTest.java => WithDefaultSwiftImmutableTest.java} (75%)
 copy server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/{WithCassandraBlobStoreTest.java => WithDefaultSwiftMutableTest.java} (64%)
 delete mode 100644 server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithEncryptedAwsS3Extension.java
 rename server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/{WithEncryptedAwsS3Test.java => WithEncryptedAwsS3ImmutableTest.java} (72%)
 copy server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/{WithCassandraBlobStoreTest.java => WithEncryptedAwsS3MutableTest.java} (60%)
 delete mode 100644 server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithEncryptedSwiftExtension.java
 rename server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/{WithEncryptedSwiftTest.java => WithEncryptedSwiftImmutableTest.java} (72%)
 rename server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/{WithCassandraBlobStoreTest.java => WithEncryptedSwiftMutableTest.java} (60%)
 delete mode 100644 server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithScanningSearchExtension.java
 copy server/{protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEchoMethodTest.java => container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithScanningSearchImmutableTest.java} (55%)
 copy server/container/{metrics/metrics-es-reporter/src/test/java/org/apache/james/metric/es/ES6ReporterTest.java => guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithScanningSearchMutableTest.java} (82%)
 delete mode 100644 server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithScanningSearchTest.java
 copy server/container/guice/memory-guice/src/test/java/org/apache/james/{DefaultMemoryJamesServerTest.java => DomainAutodetectionTest.java} (60%)
 delete mode 100644 server/protocols/jmap-draft-integration-testing/cassandra-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/cassandra/cucumber/CucumberAwsS3Singleton.java
 delete mode 100644 server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQSwiftFilterTest.java
 delete mode 100644 server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQJmapExtension.java


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


[james-project] 25/28: JAMES-3350 DomainList::autoDetect leads to slow tests

Posted by bt...@apache.org.
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 b4ae19d0c8b46344ffcc1464bde4a9459eed485a
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Tue Jul 28 17:44:49 2020 +0700

    JAMES-3350 DomainList::autoDetect leads to slow tests
    
        Switching it off where not necessary unlocks (locally) a 33s => 3s test speedup.
    
        I don't know if the speedup is as impressive on a CI environment but this test speedup is definitly welcomed!
    
        I ended up testing the hostname retrieval only once on top of the memory server in order to limit the expensiveness of this test.
---
 .../AuthenticatedCassandraJamesServerTest.java     | 10 +++-----
 .../org/apache/james/CassandraJamesServerTest.java |  3 +--
 .../org/apache/james/CassandraWithTikaTest.java    |  3 +--
 .../james/WithCassandraBlobStoreImmutableTest.java |  3 +--
 .../apache/james/CassandraLdapJamesServerTest.java |  3 +--
 .../james/CassandraLdapJmapJamesServerTest.java    |  3 +--
 .../james/CassandraRabbitMQJamesServerFixture.java | 10 ++------
 .../james/RabbitMQJamesServerReprocessingTest.java |  4 +---
 .../org/apache/james/WithCacheImmutableTest.java   |  3 +--
 .../james/WithCassandraBlobStoreImmutableTest.java |  7 +++---
 .../james/WithScanningSearchImmutableTest.java     |  7 +++---
 .../CassandraRabbitMQLdapJmapJamesServerTest.java  |  3 +--
 .../java/org/apache/james/JamesServerContract.java | 27 ----------------------
 .../java/org/apache/james/JPAJamesServerTest.java  |  2 +-
 ...WithAuthenticatedDatabaseSqlValidationTest.java |  2 +-
 ...atabaseAuthenticaticationSqlValidationTest.java |  2 +-
 .../org/apache/james/MemoryJamesServerTest.java    |  3 +--
 .../apache/james/MemoryJmapJamesServerTest.java    |  4 +---
 .../james/jmap/draft/JmapJamesServerContract.java  |  8 -------
 ...RabbitMQReindexingWithEventDeadLettersTest.java |  2 --
 20 files changed, 24 insertions(+), 85 deletions(-)

diff --git a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/AuthenticatedCassandraJamesServerTest.java b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/AuthenticatedCassandraJamesServerTest.java
index 79a8049..79e9a62 100644
--- a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/AuthenticatedCassandraJamesServerTest.java
+++ b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/AuthenticatedCassandraJamesServerTest.java
@@ -19,7 +19,6 @@
 
 package org.apache.james;
 
-import static org.apache.james.JamesServerContract.DOMAIN_LIST_CONFIGURATION_MODULE;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
 import org.apache.james.backends.cassandra.DockerCassandra;
@@ -44,8 +43,7 @@ class AuthenticatedCassandraJamesServerTest {
         JamesServerExtension testExtension = TestingDistributedJamesServerBuilder.withSearchConfiguration(SearchConfiguration.elasticSearch())
             .extension(new DockerElasticSearchExtension())
             .extension(cassandraExtension)
-            .server(configuration -> CassandraJamesServerMain.createServer(configuration)
-                .overrideWith(DOMAIN_LIST_CONFIGURATION_MODULE))
+            .server(CassandraJamesServerMain::createServer)
             .overrideServerModule(binder -> binder.bind(ClusterConfiguration.class)
                 .toInstance(DockerCassandra.configurationBuilder(cassandraExtension.getCassandra().getHost())
                     .username(CASSANDRA_USER)
@@ -61,8 +59,7 @@ class AuthenticatedCassandraJamesServerTest {
             .extension(new DockerElasticSearchExtension())
             .extension(cassandraExtension)
             .disableAutoStart()
-            .server(configuration -> CassandraJamesServerMain.createServer(configuration)
-                .overrideWith(DOMAIN_LIST_CONFIGURATION_MODULE))
+            .server(CassandraJamesServerMain::createServer)
             .overrideServerModule(binder -> binder.bind(ClusterConfiguration.class)
                 .toInstance(DockerCassandra.configurationBuilder(cassandraExtension.getCassandra().getHost())
                     .username(CASSANDRA_USER)
@@ -87,8 +84,7 @@ class AuthenticatedCassandraJamesServerTest {
             .extension(cassandraExtension)
             .disableAutoStart()
             .server(configuration -> CassandraJamesServerMain.createServer(configuration)
-                .overrideWith(new TestJMAPServerModule())
-                .overrideWith(DOMAIN_LIST_CONFIGURATION_MODULE))
+                .overrideWith(new TestJMAPServerModule()))
             .overrideServerModule(binder -> binder.bind(ClusterConfiguration.class)
                 .toInstance(DockerCassandra.configurationBuilder(cassandraExtension.getCassandra().getHost())
                     .username(CASSANDRA_USER)
diff --git a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraJamesServerTest.java b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraJamesServerTest.java
index 380cd18..e9db66f 100644
--- a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraJamesServerTest.java
+++ b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraJamesServerTest.java
@@ -33,8 +33,7 @@ class CassandraJamesServerTest implements JamesServerContract, JmapJamesServerCo
         .extension(new DockerElasticSearchExtension())
         .extension(new CassandraExtension())
         .server(configuration -> CassandraJamesServerMain.createServer(configuration)
-            .overrideWith(new TestJMAPServerModule())
-            .overrideWith(JamesServerContract.DOMAIN_LIST_CONFIGURATION_MODULE))
+            .overrideWith(new TestJMAPServerModule()))
         .lifeCycle(JamesServerExtension.Lifecycle.PER_CLASS)
         .build();
 
diff --git a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraWithTikaTest.java b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraWithTikaTest.java
index 9467786..7979d5d 100644
--- a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraWithTikaTest.java
+++ b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraWithTikaTest.java
@@ -29,8 +29,7 @@ class CassandraWithTikaTest implements JamesServerContract {
         .extension(new  TikaExtension())
         .extension(new DockerElasticSearchExtension())
         .server(configuration -> CassandraJamesServerMain.createServer(configuration)
-            .overrideWith(new TestJMAPServerModule())
-            .overrideWith(DOMAIN_LIST_CONFIGURATION_MODULE))
+            .overrideWith(new TestJMAPServerModule()))
         .lifeCycle(JamesServerExtension.Lifecycle.PER_CLASS)
         .build();
 }
diff --git a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/WithCassandraBlobStoreImmutableTest.java b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/WithCassandraBlobStoreImmutableTest.java
index 884e061..ce408f8 100644
--- a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/WithCassandraBlobStoreImmutableTest.java
+++ b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/WithCassandraBlobStoreImmutableTest.java
@@ -36,7 +36,6 @@ class WithCassandraBlobStoreImmutableTest implements JmapJamesServerContract, Ja
             .extension(new CassandraExtension())
             .extension(new SpamAssassinModuleExtension())
             .server(configuration -> CassandraJamesServerMain.createServer(configuration)
-                .overrideWith(new TestJMAPServerModule())
-                .overrideWith(JmapJamesServerContract.DOMAIN_LIST_CONFIGURATION_MODULE));
+                .overrideWith(new TestJMAPServerModule()));
     }
 }
diff --git a/server/container/guice/cassandra-ldap-guice/src/test/java/org/apache/james/CassandraLdapJamesServerTest.java b/server/container/guice/cassandra-ldap-guice/src/test/java/org/apache/james/CassandraLdapJamesServerTest.java
index 7d5e782..35f7306 100644
--- a/server/container/guice/cassandra-ldap-guice/src/test/java/org/apache/james/CassandraLdapJamesServerTest.java
+++ b/server/container/guice/cassandra-ldap-guice/src/test/java/org/apache/james/CassandraLdapJamesServerTest.java
@@ -58,8 +58,7 @@ class CassandraLdapJamesServerTest implements JamesServerContract {
         .extension(new CassandraExtension())
         .extension(new LdapTestExtension())
         .server(configuration -> CassandraLdapJamesServerMain.createServer(configuration)
-            .overrideWith(new TestJMAPServerModule())
-            .overrideWith(DOMAIN_LIST_CONFIGURATION_MODULE))
+            .overrideWith(new TestJMAPServerModule()))
         .build();
 
     @Test
diff --git a/server/container/guice/cassandra-ldap-guice/src/test/java/org/apache/james/CassandraLdapJmapJamesServerTest.java b/server/container/guice/cassandra-ldap-guice/src/test/java/org/apache/james/CassandraLdapJmapJamesServerTest.java
index 7c537b0..c65424d 100644
--- a/server/container/guice/cassandra-ldap-guice/src/test/java/org/apache/james/CassandraLdapJmapJamesServerTest.java
+++ b/server/container/guice/cassandra-ldap-guice/src/test/java/org/apache/james/CassandraLdapJmapJamesServerTest.java
@@ -30,7 +30,6 @@ class CassandraLdapJmapJamesServerTest implements JmapJamesServerContract {
         .extension(new CassandraExtension())
         .extension(new LdapTestExtension())
         .server(configuration -> CassandraLdapJamesServerMain.createServer(configuration)
-            .overrideWith(new TestJMAPServerModule())
-            .overrideWith(DOMAIN_LIST_CONFIGURATION_MODULE))
+            .overrideWith(new TestJMAPServerModule()))
         .build();
 }
diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/CassandraRabbitMQJamesServerFixture.java b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/CassandraRabbitMQJamesServerFixture.java
index b9878db..a07800b 100644
--- a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/CassandraRabbitMQJamesServerFixture.java
+++ b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/CassandraRabbitMQJamesServerFixture.java
@@ -19,18 +19,11 @@
 
 package org.apache.james;
 
-import org.apache.james.jmap.draft.JmapJamesServerContract;
 import org.apache.james.modules.RabbitMQExtension;
 import org.apache.james.modules.TestJMAPServerModule;
 import org.apache.james.modules.blobstore.BlobStoreConfiguration;
 
 public class CassandraRabbitMQJamesServerFixture {
-
-    private static final JamesServerBuilder.ServerProvider<CassandraRabbitMQJamesConfiguration> SERVER_PROVIDER =
-        configuration -> CassandraRabbitMQJamesServerMain.createServer(configuration)
-            .overrideWith(new TestJMAPServerModule())
-            .overrideWith(JmapJamesServerContract.DOMAIN_LIST_CONFIGURATION_MODULE);
-
     public static JamesServerBuilder<CassandraRabbitMQJamesConfiguration> baseExtensionBuilder() {
         return baseExtensionBuilder(new RabbitMQExtension());
     }
@@ -49,6 +42,7 @@ public class CassandraRabbitMQJamesServerFixture {
             .extension(new DockerElasticSearchExtension())
             .extension(new CassandraExtension())
             .extension(rabbitMQExtension)
-            .server(SERVER_PROVIDER);
+            .server(configuration -> CassandraRabbitMQJamesServerMain.createServer(configuration)
+                .overrideWith(new TestJMAPServerModule()));
     }
 }
diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/RabbitMQJamesServerReprocessingTest.java b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/RabbitMQJamesServerReprocessingTest.java
index 945cdb0..d383cc5 100644
--- a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/RabbitMQJamesServerReprocessingTest.java
+++ b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/RabbitMQJamesServerReprocessingTest.java
@@ -22,7 +22,6 @@ package org.apache.james;
 import static io.restassured.config.ParamConfig.UpdateStrategy.REPLACE;
 import static org.assertj.core.api.Assertions.assertThat;
 
-import org.apache.james.jmap.draft.JmapJamesServerContract;
 import org.apache.james.mailrepository.api.MailRepositoryUrl;
 import org.apache.james.modules.AwsS3BlobStoreExtension;
 import org.apache.james.modules.RabbitMQExtension;
@@ -57,8 +56,7 @@ class RabbitMQJamesServerReprocessingTest {
         .extension(new AwsS3BlobStoreExtension())
         .server(configuration -> CassandraRabbitMQJamesServerMain.createServer(configuration)
             .overrideWith(new TestJMAPServerModule())
-            .overrideWith(binder -> binder.bind(WebAdminConfiguration.class).toInstance(WebAdminConfiguration.TEST_CONFIGURATION))
-            .overrideWith(JmapJamesServerContract.DOMAIN_LIST_CONFIGURATION_MODULE))
+            .overrideWith(binder -> binder.bind(WebAdminConfiguration.class).toInstance(WebAdminConfiguration.TEST_CONFIGURATION)))
         .build();
 
     @BeforeEach
diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCacheImmutableTest.java b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCacheImmutableTest.java
index 5dbcf14..889b46e 100644
--- a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCacheImmutableTest.java
+++ b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCacheImmutableTest.java
@@ -49,7 +49,6 @@ class WithCacheImmutableTest implements JmapJamesServerContract, JamesServerCont
             .extension(new RabbitMQExtension())
             .extension(new AwsS3BlobStoreExtension())
             .server(configuration -> CassandraRabbitMQJamesServerMain.createServer(configuration)
-                .overrideWith(new TestJMAPServerModule())
-                .overrideWith(JmapJamesServerContract.DOMAIN_LIST_CONFIGURATION_MODULE));
+                .overrideWith(new TestJMAPServerModule()));
     }
 }
\ No newline at end of file
diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCassandraBlobStoreImmutableTest.java b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCassandraBlobStoreImmutableTest.java
index f6d1ed6..cb3a5f1 100644
--- a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCassandraBlobStoreImmutableTest.java
+++ b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCassandraBlobStoreImmutableTest.java
@@ -39,11 +39,10 @@ public class WithCassandraBlobStoreImmutableTest implements JmapJamesServerContr
                 .blobStore(BlobStoreConfiguration.cassandra())
                 .searchConfiguration(SearchConfiguration.elasticSearch())
                 .build())
+            .server(configuration -> CassandraRabbitMQJamesServerMain.createServer(configuration)
+                .overrideWith(new TestJMAPServerModule()))
             .extension(new DockerElasticSearchExtension())
             .extension(new CassandraExtension())
-            .extension(new RabbitMQExtension())
-            .server(configuration -> CassandraRabbitMQJamesServerMain.createServer(configuration)
-                .overrideWith(new TestJMAPServerModule())
-                .overrideWith(JmapJamesServerContract.DOMAIN_LIST_CONFIGURATION_MODULE));
+            .extension(new RabbitMQExtension());
     }
 }
diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithScanningSearchImmutableTest.java b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithScanningSearchImmutableTest.java
index 90fddc6..45896b2 100644
--- a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithScanningSearchImmutableTest.java
+++ b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithScanningSearchImmutableTest.java
@@ -38,12 +38,11 @@ class WithScanningSearchImmutableTest implements JmapJamesServerContract, JamesS
                     .deduplication())
                 .searchConfiguration(SearchConfiguration.scanning())
                 .build())
+            .server(configuration -> CassandraRabbitMQJamesServerMain.createServer(configuration)
+                .overrideWith(new TestJMAPServerModule()))
             .extension(new CassandraExtension())
             .extension(new RabbitMQExtension())
-            .extension(new AwsS3BlobStoreExtension())
-            .server(configuration -> CassandraRabbitMQJamesServerMain.createServer(configuration)
-                .overrideWith(new TestJMAPServerModule())
-                .overrideWith(JmapJamesServerContract.DOMAIN_LIST_CONFIGURATION_MODULE));
+            .extension(new AwsS3BlobStoreExtension());
     }
 
     @RegisterExtension
diff --git a/server/container/guice/cassandra-rabbitmq-ldap-guice/src/test/java/org/apache/james/CassandraRabbitMQLdapJmapJamesServerTest.java b/server/container/guice/cassandra-rabbitmq-ldap-guice/src/test/java/org/apache/james/CassandraRabbitMQLdapJmapJamesServerTest.java
index 36becc4..be9e201 100644
--- a/server/container/guice/cassandra-rabbitmq-ldap-guice/src/test/java/org/apache/james/CassandraRabbitMQLdapJmapJamesServerTest.java
+++ b/server/container/guice/cassandra-rabbitmq-ldap-guice/src/test/java/org/apache/james/CassandraRabbitMQLdapJmapJamesServerTest.java
@@ -104,7 +104,6 @@ class CassandraRabbitMQLdapJmapJamesServerTest {
             .extension(new RabbitMQExtension())
             .extension(new LdapTestExtension())
             .server(configuration -> CassandraRabbitMQLdapJamesServerMain.createServer(configuration)
-                .overrideWith(new TestJMAPServerModule())
-                .overrideWith(JmapJamesServerContract.DOMAIN_LIST_CONFIGURATION_MODULE));
+                .overrideWith(new TestJMAPServerModule()));
     }
 }
diff --git a/server/container/guice/guice-common/src/test/java/org/apache/james/JamesServerContract.java b/server/container/guice/guice-common/src/test/java/org/apache/james/JamesServerContract.java
index 0ca7964..0f241d8 100644
--- a/server/container/guice/guice-common/src/test/java/org/apache/james/JamesServerContract.java
+++ b/server/container/guice/guice-common/src/test/java/org/apache/james/JamesServerContract.java
@@ -21,46 +21,19 @@ package org.apache.james;
 import static org.assertj.core.api.Assertions.assertThat;
 
 import java.io.IOException;
-import java.net.InetAddress;
 import java.net.InetSocketAddress;
 import java.nio.ByteBuffer;
 import java.nio.channels.SocketChannel;
 import java.nio.charset.Charset;
 
-import org.apache.james.domainlist.lib.DomainListConfiguration;
 import org.apache.james.modules.protocols.ImapGuiceProbe;
 import org.apache.james.modules.protocols.LmtpGuiceProbe;
 import org.apache.james.modules.protocols.Pop3GuiceProbe;
 import org.apache.james.modules.protocols.SmtpGuiceProbe;
-import org.apache.james.utils.DataProbeImpl;
 import org.junit.jupiter.api.Test;
 
-import com.google.inject.Module;
-
 public interface JamesServerContract {
-
     String JAMES_SERVER_HOST = "127.0.0.1";
-    Module DOMAIN_LIST_CONFIGURATION_MODULE = binder -> binder.bind(DomainListConfiguration.class)
-        .toInstance(DomainListConfiguration.builder()
-            .autoDetect(true)
-            .autoDetectIp(false)
-            .build());
-
-    @Test
-    default void hostnameShouldBeUsedAsDefaultDomain(GuiceJamesServer jamesServer) throws Exception {
-        String expectedDefaultDomain = InetAddress.getLocalHost().getHostName();
-
-        assertThat(jamesServer.getProbe(DataProbeImpl.class).getDefaultDomain()).isEqualTo(expectedDefaultDomain);
-    }
-
-    @Test
-    default void hostnameShouldBeRetrievedWhenRestarting(GuiceJamesServer jamesServer) throws Exception {
-        jamesServer.stop();
-        jamesServer.start();
-        String expectedDefaultDomain = InetAddress.getLocalHost().getHostName();
-
-        assertThat(jamesServer.getProbe(DataProbeImpl.class).getDefaultDomain()).isEqualTo(expectedDefaultDomain);
-    }
 
     @Test
     default void connectIMAPServerShouldSendShabangOnConnect(GuiceJamesServer jamesServer) throws Exception {
diff --git a/server/container/guice/jpa-guice/src/test/java/org/apache/james/JPAJamesServerTest.java b/server/container/guice/jpa-guice/src/test/java/org/apache/james/JPAJamesServerTest.java
index f13a9ea..529e814 100644
--- a/server/container/guice/jpa-guice/src/test/java/org/apache/james/JPAJamesServerTest.java
+++ b/server/container/guice/jpa-guice/src/test/java/org/apache/james/JPAJamesServerTest.java
@@ -42,7 +42,7 @@ class JPAJamesServerTest implements JamesServerContract {
     @RegisterExtension
     static JamesServerExtension jamesServerExtension = new JamesServerBuilder<>(JamesServerBuilder.defaultConfigurationProvider())
         .server(configuration -> JPAJamesServerMain.createServer(configuration)
-            .overrideWith(new TestJPAConfigurationModule(), DOMAIN_LIST_CONFIGURATION_MODULE))
+            .overrideWith(new TestJPAConfigurationModule()))
         .lifeCycle(JamesServerExtension.Lifecycle.PER_CLASS)
         .build();
 
diff --git a/server/container/guice/jpa-guice/src/test/java/org/apache/james/JPAJamesServerWithAuthenticatedDatabaseSqlValidationTest.java b/server/container/guice/jpa-guice/src/test/java/org/apache/james/JPAJamesServerWithAuthenticatedDatabaseSqlValidationTest.java
index 4880eef..d8359e4 100644
--- a/server/container/guice/jpa-guice/src/test/java/org/apache/james/JPAJamesServerWithAuthenticatedDatabaseSqlValidationTest.java
+++ b/server/container/guice/jpa-guice/src/test/java/org/apache/james/JPAJamesServerWithAuthenticatedDatabaseSqlValidationTest.java
@@ -26,7 +26,7 @@ class JPAJamesServerWithAuthenticatedDatabaseSqlValidationTest extends JPAJamesS
     @RegisterExtension
     static JamesServerExtension jamesServerExtension = new JamesServerBuilder<>(JamesServerBuilder.defaultConfigurationProvider())
         .server(configuration -> JPAJamesServerMain.createServer(configuration)
-            .overrideWith(new TestJPAConfigurationModuleWithSqlValidation.WithDatabaseAuthentication(), DOMAIN_LIST_CONFIGURATION_MODULE))
+            .overrideWith(new TestJPAConfigurationModuleWithSqlValidation.WithDatabaseAuthentication()))
         .lifeCycle(JamesServerExtension.Lifecycle.PER_CLASS)
         .build();
 }
diff --git a/server/container/guice/jpa-guice/src/test/java/org/apache/james/JPAJamesServerWithNoDatabaseAuthenticaticationSqlValidationTest.java b/server/container/guice/jpa-guice/src/test/java/org/apache/james/JPAJamesServerWithNoDatabaseAuthenticaticationSqlValidationTest.java
index 4e941db..89f4dc0 100644
--- a/server/container/guice/jpa-guice/src/test/java/org/apache/james/JPAJamesServerWithNoDatabaseAuthenticaticationSqlValidationTest.java
+++ b/server/container/guice/jpa-guice/src/test/java/org/apache/james/JPAJamesServerWithNoDatabaseAuthenticaticationSqlValidationTest.java
@@ -26,7 +26,7 @@ class JPAJamesServerWithNoDatabaseAuthenticaticationSqlValidationTest extends JP
     @RegisterExtension
     static JamesServerExtension jamesServerExtension = new JamesServerBuilder<>(JamesServerBuilder.defaultConfigurationProvider())
         .server(configuration -> JPAJamesServerMain.createServer(configuration)
-            .overrideWith(new TestJPAConfigurationModuleWithSqlValidation.NoDatabaseAuthentication(), DOMAIN_LIST_CONFIGURATION_MODULE))
+            .overrideWith(new TestJPAConfigurationModuleWithSqlValidation.NoDatabaseAuthentication()))
         .lifeCycle(JamesServerExtension.Lifecycle.PER_CLASS)
         .build();
 }
diff --git a/server/container/guice/memory-guice/src/test/java/org/apache/james/MemoryJamesServerTest.java b/server/container/guice/memory-guice/src/test/java/org/apache/james/MemoryJamesServerTest.java
index 8b1d9c7..a29620d 100644
--- a/server/container/guice/memory-guice/src/test/java/org/apache/james/MemoryJamesServerTest.java
+++ b/server/container/guice/memory-guice/src/test/java/org/apache/james/MemoryJamesServerTest.java
@@ -26,8 +26,7 @@ class MemoryJamesServerTest implements JamesServerContract {
     @RegisterExtension
     static JamesServerExtension jamesServerExtension = new JamesServerBuilder<>(JamesServerBuilder.defaultConfigurationProvider())
         .server(configuration -> MemoryJamesServerMain.createServer(configuration)
-            .overrideWith(new TestJMAPServerModule())
-            .overrideWith(DOMAIN_LIST_CONFIGURATION_MODULE))
+            .overrideWith(new TestJMAPServerModule()))
         .lifeCycle(JamesServerExtension.Lifecycle.PER_CLASS)
         .build();
 }
diff --git a/server/container/guice/memory-guice/src/test/java/org/apache/james/MemoryJmapJamesServerTest.java b/server/container/guice/memory-guice/src/test/java/org/apache/james/MemoryJmapJamesServerTest.java
index 56ccb28..274d6f0 100644
--- a/server/container/guice/memory-guice/src/test/java/org/apache/james/MemoryJmapJamesServerTest.java
+++ b/server/container/guice/memory-guice/src/test/java/org/apache/james/MemoryJmapJamesServerTest.java
@@ -19,7 +19,6 @@
 
 package org.apache.james;
 
-import static org.apache.james.jmap.draft.JmapJamesServerContract.DOMAIN_LIST_CONFIGURATION_MODULE;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
@@ -36,8 +35,7 @@ class MemoryJmapJamesServerTest {
     private static JamesServerBuilder extensionBuilder() {
         return new JamesServerBuilder<>(JamesServerBuilder.defaultConfigurationProvider())
             .server(configuration -> MemoryJamesServerMain.createServer(configuration)
-                .overrideWith(new TestJMAPServerModule())
-                .overrideWith(DOMAIN_LIST_CONFIGURATION_MODULE));
+                .overrideWith(new TestJMAPServerModule()));
     }
 
     @Nested
diff --git a/server/container/guice/protocols/jmap/src/test/java/org/apache/james/jmap/draft/JmapJamesServerContract.java b/server/container/guice/protocols/jmap/src/test/java/org/apache/james/jmap/draft/JmapJamesServerContract.java
index f9d7301..2d0f7ac 100644
--- a/server/container/guice/protocols/jmap/src/test/java/org/apache/james/jmap/draft/JmapJamesServerContract.java
+++ b/server/container/guice/protocols/jmap/src/test/java/org/apache/james/jmap/draft/JmapJamesServerContract.java
@@ -25,22 +25,14 @@ import static io.restassured.config.RestAssuredConfig.newConfig;
 import java.nio.charset.StandardCharsets;
 
 import org.apache.james.GuiceJamesServer;
-import org.apache.james.domainlist.lib.DomainListConfiguration;
 import org.junit.jupiter.api.Test;
 
-import com.google.inject.Module;
-
 import io.restassured.RestAssured;
 import io.restassured.builder.RequestSpecBuilder;
 import io.restassured.http.ContentType;
 import io.restassured.specification.RequestSpecification;
 
 public interface JmapJamesServerContract {
-    Module DOMAIN_LIST_CONFIGURATION_MODULE = binder -> binder.bind(DomainListConfiguration.class)
-        .toInstance(DomainListConfiguration.builder()
-            .autoDetect(true)
-            .autoDetectIp(false)
-            .build());
     String JAMES_SERVER_HOST = "127.0.0.1";
 
     @Test
diff --git a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQReindexingWithEventDeadLettersTest.java b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQReindexingWithEventDeadLettersTest.java
index 20ca0b6..8bbb952 100644
--- a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQReindexingWithEventDeadLettersTest.java
+++ b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQReindexingWithEventDeadLettersTest.java
@@ -43,7 +43,6 @@ import org.apache.james.SearchConfiguration;
 import org.apache.james.jmap.AccessToken;
 import org.apache.james.jmap.LocalHostURIBuilder;
 import org.apache.james.jmap.draft.JmapGuiceProbe;
-import org.apache.james.jmap.draft.JmapJamesServerContract;
 import org.apache.james.junit.categories.BasicFeature;
 import org.apache.james.mailbox.events.RetryBackoffConfiguration;
 import org.apache.james.modules.AwsS3BlobStoreExtension;
@@ -100,7 +99,6 @@ class RabbitMQReindexingWithEventDeadLettersTest {
         .extension(new AwsS3BlobStoreExtension(PayloadCodecFactory.AES256))
         .server(configuration -> CassandraRabbitMQJamesServerMain.createServer(configuration)
             .overrideWith(new TestJMAPServerModule())
-            .overrideWith(JmapJamesServerContract.DOMAIN_LIST_CONFIGURATION_MODULE)
             .overrideWith(new WebadminIntegrationTestModule())
             .overrideWith(binder -> binder.bind(RetryBackoffConfiguration.class)
                 .toInstance(RetryBackoffConfiguration.builder()


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


[james-project] 24/28: JAMES-3350 Increase RabbitMQExtension channel number

Posted by bt...@apache.org.
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 ae890752a5ff5e4d07473c0b2fa7fafe8d0a4c32
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Tue Jul 28 15:08:33 2020 +0700

    JAMES-3350 Increase RabbitMQExtension channel number
---
 .../test/java/org/apache/james/backends/rabbitmq/RabbitMQExtension.java | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

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 56a2f11..d5a3769 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
@@ -144,7 +144,7 @@ public class RabbitMQExtension implements BeforeAllCallback, BeforeEachCallback,
             ReactorRabbitMQChannelPool.Configuration.builder()
                 .retries(2)
                 .minBorrowDelay(Duration.ofMillis(5))
-                .maxChannel(3));
+                .maxChannel(10));
         channelPool.start();
     }
 


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


[james-project] 17/28: JAMES-3350 Decrease processing time for EventBus rate testing

Posted by bt...@apache.org.
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 ac4225f508b60d735187264aa53af430ed2011bc
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Mon Jul 27 15:08:00 2020 +0700

    JAMES-3350 Decrease processing time for EventBus rate testing
---
 .../src/test/java/org/apache/james/mailbox/events/GroupContract.java    | 2 +-
 .../api/src/test/java/org/apache/james/mailbox/events/KeyContract.java  | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/events/GroupContract.java b/mailbox/api/src/test/java/org/apache/james/mailbox/events/GroupContract.java
index dfe31ac..24046a1 100644
--- a/mailbox/api/src/test/java/org/apache/james/mailbox/events/GroupContract.java
+++ b/mailbox/api/src/test/java/org/apache/james/mailbox/events/GroupContract.java
@@ -87,7 +87,7 @@ public interface GroupContract {
                         rateExceeded.set(true);
                     }
                     nbCalls.incrementAndGet();
-                    Thread.sleep(Duration.ofMillis(200).toMillis());
+                    Thread.sleep(Duration.ofMillis(20).toMillis());
                     finishedExecutions.incrementAndGet();
 
                 }
diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/events/KeyContract.java b/mailbox/api/src/test/java/org/apache/james/mailbox/events/KeyContract.java
index 908f156..f652377 100644
--- a/mailbox/api/src/test/java/org/apache/james/mailbox/events/KeyContract.java
+++ b/mailbox/api/src/test/java/org/apache/james/mailbox/events/KeyContract.java
@@ -75,7 +75,7 @@ public interface KeyContract extends EventBusContract {
                     rateExceeded.set(true);
                 }
                 nbCalls.incrementAndGet();
-                Thread.sleep(Duration.ofMillis(200).toMillis());
+                Thread.sleep(Duration.ofMillis(20).toMillis());
                 finishedExecutions.incrementAndGet();
 
             }, KEY_1)).block();


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


[james-project] 03/28: JAMES-3350 Increase DockerCassandraSingleton MAX_TEST_PLAYED to 200

Posted by bt...@apache.org.
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 5cb925a75dd98791a3a69a5fd3d652787fa56e54
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Mon Jul 27 09:32:42 2020 +0700

    JAMES-3350 Increase DockerCassandraSingleton MAX_TEST_PLAYED to 200
---
 .../org/apache/james/backends/cassandra/DockerCassandraSingleton.java   | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/DockerCassandraSingleton.java b/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/DockerCassandraSingleton.java
index 26f61f8..7c52d95 100644
--- a/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/DockerCassandraSingleton.java
+++ b/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/DockerCassandraSingleton.java
@@ -30,7 +30,7 @@ public class DockerCassandraSingleton {
         void run() throws Exception;
     }
 
-    private static final int MAX_TEST_PLAYED = 100;
+    private static final int MAX_TEST_PLAYED = 200;
 
     private static int testsPlayedCount = 0;
 


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


[james-project] 21/28: JAMES-3350 Reduce EventBus retry delays for RabbitMQReindexingWithEventDeadLettersTest

Posted by bt...@apache.org.
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 211be39662382a3fd91b62017f4fe5baf9e5b28a
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Tue Jul 28 11:22:35 2020 +0700

    JAMES-3350 Reduce EventBus retry delays for RabbitMQReindexingWithEventDeadLettersTest
---
 .../rabbitmq/RabbitMQReindexingWithEventDeadLettersTest.java     | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQReindexingWithEventDeadLettersTest.java b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQReindexingWithEventDeadLettersTest.java
index df2390a..20ca0b6 100644
--- a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQReindexingWithEventDeadLettersTest.java
+++ b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQReindexingWithEventDeadLettersTest.java
@@ -45,6 +45,7 @@ import org.apache.james.jmap.LocalHostURIBuilder;
 import org.apache.james.jmap.draft.JmapGuiceProbe;
 import org.apache.james.jmap.draft.JmapJamesServerContract;
 import org.apache.james.junit.categories.BasicFeature;
+import org.apache.james.mailbox.events.RetryBackoffConfiguration;
 import org.apache.james.modules.AwsS3BlobStoreExtension;
 import org.apache.james.modules.RabbitMQExtension;
 import org.apache.james.modules.TestJMAPServerModule;
@@ -100,7 +101,13 @@ class RabbitMQReindexingWithEventDeadLettersTest {
         .server(configuration -> CassandraRabbitMQJamesServerMain.createServer(configuration)
             .overrideWith(new TestJMAPServerModule())
             .overrideWith(JmapJamesServerContract.DOMAIN_LIST_CONFIGURATION_MODULE)
-            .overrideWith(new WebadminIntegrationTestModule()))
+            .overrideWith(new WebadminIntegrationTestModule())
+            .overrideWith(binder -> binder.bind(RetryBackoffConfiguration.class)
+                .toInstance(RetryBackoffConfiguration.builder()
+                    .maxRetries(2)
+                    .firstBackoff(java.time.Duration.ofMillis(10))
+                    .jitterFactor(0.2)
+                    .build())))
         .build();
 
     private RequestSpecification webAdminApi;


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


[james-project] 19/28: JAMES-3350 Fix asciidoc formatting in server/mailet/mock-smtp-server/README.adoc

Posted by bt...@apache.org.
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 a1c8d5e63bf91fdd310447f2f29d9fa265382b7c
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Tue Jul 28 09:36:17 2020 +0700

    JAMES-3350 Fix asciidoc formatting in server/mailet/mock-smtp-server/README.adoc
---
 server/mailet/mock-smtp-server/README.adoc | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/server/mailet/mock-smtp-server/README.adoc b/server/mailet/mock-smtp-server/README.adoc
index 04ad791..e967238 100644
--- a/server/mailet/mock-smtp-server/README.adoc
+++ b/server/mailet/mock-smtp-server/README.adoc
@@ -1,5 +1,4 @@
-James Mock SMTP server
-====================
+= James Mock SMTP server
 
 This is our custom made Mock SMTP server that we use for some of our tests in James.
 


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


[james-project] 11/28: JAMES-3350 Review RabbitMQWorkQueuePersistenceTest lifecycle

Posted by bt...@apache.org.
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 4889abe0f4b5ca7263089d78aa4c23877a60643d
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Mon Jul 27 12:59:56 2020 +0700

    JAMES-3350 Review RabbitMQWorkQueuePersistenceTest lifecycle
    
    Restarting RabbitMQ once per test class unlock significant performance improvement
---
 .../eventsourcing/distributed/RabbitMQWorkQueuePersistenceTest.java   | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

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 1a3df6b..491db08 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
@@ -41,8 +41,8 @@ class RabbitMQWorkQueuePersistenceTest {
     private static final TaskId TASK_ID = TaskId.fromString("2c7f4081-aa30-11e9-bf6c-2d3b9e84aafd");
 
     @RegisterExtension
-    RabbitMQExtension rabbitMQExtension = RabbitMQExtension.defaultRabbitMQ()
-        .restartPolicy(RabbitMQExtension.DockerRestartPolicy.PER_TEST);
+    static RabbitMQExtension rabbitMQExtension = RabbitMQExtension.defaultRabbitMQ()
+        .restartPolicy(RabbitMQExtension.DockerRestartPolicy.PER_CLASS);
 
     private RabbitMQWorkQueue testee;
     private ImmediateWorker worker;


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


[james-project] 20/28: JAMES-3350 Building mock-smtp-server image should be optional

Posted by bt...@apache.org.
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 c6e378a8c4a2872302960db6371f18abbb018961
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Tue Jul 28 10:12:56 2020 +0700

    JAMES-3350 Building mock-smtp-server image should be optional
    
    The build takes 19 minutes at compilation time, and at testing time to build this
    JIB image.
    
    The current build builds a TAR that is never loaded into the docker daemon, thus never used.
    
    We should make JIB image building optional. We should let the opportunity to use the docker daemon instead of building to a TAR.
    
    This change unlocks a 36 minutes build time improvement.
---
 server/mailet/mock-smtp-server/README.adoc |  8 ++++++--
 server/mailet/mock-smtp-server/pom.xml     | 26 --------------------------
 2 files changed, 6 insertions(+), 28 deletions(-)

diff --git a/server/mailet/mock-smtp-server/README.adoc b/server/mailet/mock-smtp-server/README.adoc
index e967238..52bbce8 100644
--- a/server/mailet/mock-smtp-server/README.adoc
+++ b/server/mailet/mock-smtp-server/README.adoc
@@ -6,13 +6,17 @@ This is our custom made Mock SMTP server that we use for some of our tests in Ja
 
 Compile and build the image into a tarball with maven:
 
-    $ mvn package
+    $ mvn compile jib:buildTar
 
 *Note* : You can add the option '-DskipTests' if you want to skip tests
 
 After Jib created the image, you can load it into Docker with:
 
-    $ docker load --input target/jib-mock-smtp-server.tar
+    $ docker load --input target/jib-image.tar
+
+You can alternatively directly build your image directly to a Docker daemon. To to so:
+
+    $ mvn compile jib:dockerBuild
 
 Then run it with:
 
diff --git a/server/mailet/mock-smtp-server/pom.xml b/server/mailet/mock-smtp-server/pom.xml
index bc4d734..16e5711 100644
--- a/server/mailet/mock-smtp-server/pom.xml
+++ b/server/mailet/mock-smtp-server/pom.xml
@@ -137,32 +137,6 @@
                         </ports>
                     </container>
                 </configuration>
-                <executions>
-                    <execution>
-                        <id>docker packaging</id>
-                        <phase>package</phase>
-                        <goals>
-                            <goal>buildTar</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>com.coderplus.maven.plugins</groupId>
-                <artifactId>copy-rename-maven-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>copy-file</id>
-                        <phase>package</phase>
-                        <goals>
-                            <goal>rename</goal>
-                        </goals>
-                        <configuration>
-                            <sourceFile>${basedir}/target/jib-image.tar</sourceFile>
-                            <destinationFile>${basedir}/target/jib-mock-smtp-server.tar</destinationFile>
-                        </configuration>
-                    </execution>
-                </executions>
             </plugin>
         </plugins>
     </build>


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


[james-project] 06/28: JAMES-3350 SetMessagesMethodTest don't need to call await

Posted by bt...@apache.org.
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 cffebdda0181355783ace3851e217e73aba2a606
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Mon Jul 27 10:04:14 2020 +0700

    JAMES-3350 SetMessagesMethodTest don't need to call await
---
 .../cassandra/CassandraSetMessagesMethodTest.java  |  5 ---
 .../methods/integration/SetMessagesMethodTest.java | 43 ----------------------
 .../jmap/memory/MemorySetMessagesMethodTest.java   |  4 --
 .../RabbitMQAwsS3SetMessagesMethodTest.java        |  5 ---
 4 files changed, 57 deletions(-)

diff --git a/server/protocols/jmap-draft-integration-testing/cassandra-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/cassandra/CassandraSetMessagesMethodTest.java b/server/protocols/jmap-draft-integration-testing/cassandra-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/cassandra/CassandraSetMessagesMethodTest.java
index 1f28849..43f0057 100644
--- a/server/protocols/jmap-draft-integration-testing/cassandra-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/cassandra/CassandraSetMessagesMethodTest.java
+++ b/server/protocols/jmap-draft-integration-testing/cassandra-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/cassandra/CassandraSetMessagesMethodTest.java
@@ -42,11 +42,6 @@ public class CassandraSetMessagesMethodTest extends SetMessagesMethodTest {
     protected GuiceJamesServer createJmapServer() throws IOException {
         return rule.jmapServer(cassandra.getModule());
     }
-
-    @Override
-    protected void await() {
-        rule.await();
-    }
     
     @Override
     protected MessageId randomMessageId() {
diff --git a/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/SetMessagesMethodTest.java b/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/SetMessagesMethodTest.java
index ae72726..4f1d9ac 100644
--- a/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/SetMessagesMethodTest.java
+++ b/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/SetMessagesMethodTest.java
@@ -112,7 +112,6 @@ import org.apache.james.modules.protocols.SmtpGuiceProbe;
 import org.apache.james.probe.DataProbe;
 import org.apache.james.util.ClassLoaderUtils;
 import org.apache.james.util.MimeMessageUtil;
-import org.apache.james.util.Port;
 import org.apache.james.util.io.ZeroedInputStream;
 import org.apache.james.utils.DataProbeImpl;
 import org.apache.james.utils.SMTPMessageSender;
@@ -161,15 +160,12 @@ public abstract class SetMessagesMethodTest {
 
     protected abstract MessageId randomMessageId();
 
-    protected abstract void await();
-
     private AccessToken accessToken;
     private GuiceJamesServer jmapServer;
     private MailboxProbe mailboxProbe;
     private DataProbe dataProbe;
     private MessageIdProbe messageProbe;
     private ACLProbe aclProbe;
-    private Port jmapPort;
 
     @Before
     public void setup() throws Throwable {
@@ -283,7 +279,6 @@ public abstract class SetMessagesMethodTest {
 
         ComposedMessageId message = mailboxProbe.appendMessage(USERNAME.asString(), USER_MAILBOX,
             new ByteArrayInputStream("Subject: test\r\n\r\ntestmail".getBytes(StandardCharsets.UTF_8)), new Date(), false, new Flags());
-        await();
 
         given()
             .header("Authorization", accessToken.asString())
@@ -307,7 +302,6 @@ public abstract class SetMessagesMethodTest {
 
         ComposedMessageId message = mailboxProbe.appendMessage(USERNAME.asString(), USER_MAILBOX,
             new ByteArrayInputStream("Subject: test\r\n\r\ntestmail".getBytes(StandardCharsets.UTF_8)), new Date(), false, new Flags());
-        await();
 
         // When
         given()
@@ -344,7 +338,6 @@ public abstract class SetMessagesMethodTest {
 
         ComposedMessageId message3 = mailboxProbe.appendMessage(USERNAME.asString(), USER_MAILBOX,
             new ByteArrayInputStream("Subject: test3\r\n\r\ntestmail".getBytes(StandardCharsets.UTF_8)), new Date(), false, new Flags());
-        await();
 
         String missingMessageId = randomMessageId().serialize();
         given()
@@ -381,7 +374,6 @@ public abstract class SetMessagesMethodTest {
 
         ComposedMessageId message3 = mailboxProbe.appendMessage(USERNAME.asString(), USER_MAILBOX,
             new ByteArrayInputStream("Subject: test3\r\n\r\ntestmail".getBytes(StandardCharsets.UTF_8)), new Date(), false, new Flags());
-        await();
 
         // When
         with()
@@ -415,7 +407,6 @@ public abstract class SetMessagesMethodTest {
 
         ComposedMessageId message = mailboxProbe.appendMessage(USERNAME.asString(), USER_MAILBOX,
             new ByteArrayInputStream("Subject: test\r\n\r\ntestmail".getBytes(StandardCharsets.UTF_8)), new Date(), false, new Flags());
-        await();
 
         String serializedMessageId = message.getMessageId().serialize();
 
@@ -437,7 +428,6 @@ public abstract class SetMessagesMethodTest {
 
         ComposedMessageId message = mailboxProbe.appendMessage(USERNAME.asString(), USER_MAILBOX,
                 new ByteArrayInputStream("Subject: test\r\n\r\ntestmail".getBytes(StandardCharsets.UTF_8)), new Date(), false, new Flags());
-        await();
 
         String messageId = message.getMessageId().serialize();
 
@@ -461,7 +451,6 @@ public abstract class SetMessagesMethodTest {
 
         ComposedMessageId message = mailboxProbe.appendMessage(USERNAME.asString(), USER_MAILBOX,
                 new ByteArrayInputStream("Subject: test\r\n\r\ntestmail".getBytes(StandardCharsets.UTF_8)), new Date(), false, new Flags());
-        await();
 
         String serializedMessageId = message.getMessageId().serialize();
 
@@ -493,7 +482,6 @@ public abstract class SetMessagesMethodTest {
 
         ComposedMessageId message = mailboxProbe.appendMessage(USERNAME.asString(), USER_MAILBOX,
                 new ByteArrayInputStream("Subject: test\r\n\r\ntestmail".getBytes(StandardCharsets.UTF_8)), new Date(), false, new Flags());
-        await();
 
         String serializedMessageId = message.getMessageId().serialize();
 
@@ -529,7 +517,6 @@ public abstract class SetMessagesMethodTest {
                 .build();
         ComposedMessageId message = mailboxProbe.appendMessage(USERNAME.asString(), USER_MAILBOX,
                 new ByteArrayInputStream("Subject: test\r\n\r\ntestmail".getBytes(StandardCharsets.UTF_8)), new Date(), false, flags);
-        await();
 
         String serializedMessageId = message.getMessageId().serialize();
 
@@ -560,7 +547,6 @@ public abstract class SetMessagesMethodTest {
 
         ComposedMessageId message = mailboxProbe.appendMessage(USERNAME.asString(), USER_MAILBOX,
             new ByteArrayInputStream("Subject: test\r\n\r\ntestmail".getBytes(StandardCharsets.UTF_8)), new Date(), false, new Flags(Flags.Flag.ANSWERED));
-        await();
 
         String messageId = message.getMessageId().serialize();
 
@@ -583,7 +569,6 @@ public abstract class SetMessagesMethodTest {
 
         ComposedMessageId message = mailboxProbe.appendMessage(USERNAME.asString(), USER_MAILBOX,
                 new ByteArrayInputStream("Subject: test\r\n\r\ntestmail".getBytes(StandardCharsets.UTF_8)), new Date(), false, new Flags(Flags.Flag.ANSWERED));
-        await();
 
         String messageId = message.getMessageId().serialize();
 
@@ -606,7 +591,6 @@ public abstract class SetMessagesMethodTest {
 
         ComposedMessageId message = mailboxProbe.appendMessage(USERNAME.asString(), USER_MAILBOX,
                 new ByteArrayInputStream("Subject: test\r\n\r\ntestmail".getBytes(StandardCharsets.UTF_8)), new Date(), false, new Flags(Flags.Flag.DELETED));
-        await();
 
         String messageId = message.getMessageId().serialize();
 
@@ -639,7 +623,6 @@ public abstract class SetMessagesMethodTest {
             .build();
         ComposedMessageId message = mailboxProbe.appendMessage(USERNAME.asString(), USER_MAILBOX,
                 new ByteArrayInputStream("Subject: test\r\n\r\ntestmail".getBytes(StandardCharsets.UTF_8)), new Date(), false, flags);
-        await();
 
         String messageId = message.getMessageId().serialize();
 
@@ -674,7 +657,6 @@ public abstract class SetMessagesMethodTest {
                 .build();
         ComposedMessageId message = mailboxProbe.appendMessage(USERNAME.asString(), USER_MAILBOX,
                 new ByteArrayInputStream("Subject: test\r\n\r\ntestmail".getBytes(StandardCharsets.UTF_8)), new Date(), false, currentFlags);
-        await();
 
         String messageId = message.getMessageId().serialize();
 
@@ -707,7 +689,6 @@ public abstract class SetMessagesMethodTest {
 
         ComposedMessageId message = mailboxProbe.appendMessage(USERNAME.asString(), USER_MAILBOX,
             new ByteArrayInputStream("Subject: test\r\n\r\ntestmail".getBytes(StandardCharsets.UTF_8)), new Date(), false, new Flags());
-        await();
 
         String serializedMessageId = message.getMessageId().serialize();
         given()
@@ -736,7 +717,6 @@ public abstract class SetMessagesMethodTest {
 
         ComposedMessageId message = mailboxProbe.appendMessage(USERNAME.asString(), USER_MAILBOX,
             new ByteArrayInputStream("Subject: test\r\n\r\ntestmail".getBytes(StandardCharsets.UTF_8)), new Date(), false, new Flags(Flags.Flag.SEEN));
-        await();
 
         String serializedMessageId = message.getMessageId().serialize();
         given()
@@ -758,7 +738,6 @@ public abstract class SetMessagesMethodTest {
 
         ComposedMessageId message = mailboxProbe.appendMessage(USERNAME.asString(), USER_MAILBOX,
             new ByteArrayInputStream("Subject: test\r\n\r\ntestmail".getBytes(StandardCharsets.UTF_8)), new Date(), false, new Flags(Flags.Flag.SEEN));
-        await();
 
         String serializedMessageId = message.getMessageId().serialize();
         given()
@@ -787,7 +766,6 @@ public abstract class SetMessagesMethodTest {
 
         ComposedMessageId message = mailboxProbe.appendMessage(USERNAME.asString(), USER_MAILBOX,
             new ByteArrayInputStream("Subject: test\r\n\r\ntestmail".getBytes(StandardCharsets.UTF_8)), new Date(), false, new Flags());
-        await();
 
         String serializedMessageId = message.getMessageId().serialize();
         given()
@@ -809,7 +787,6 @@ public abstract class SetMessagesMethodTest {
 
         ComposedMessageId message = mailboxProbe.appendMessage(USERNAME.asString(), USER_MAILBOX,
             new ByteArrayInputStream("Subject: test\r\n\r\ntestmail".getBytes(StandardCharsets.UTF_8)), new Date(), false, new Flags());
-        await();
 
         String serializedMessageId = message.getMessageId().serialize();
         given()
@@ -836,8 +813,6 @@ public abstract class SetMessagesMethodTest {
         mailboxProbe.appendMessage(USERNAME.asString(), USER_MAILBOX,
             new ByteArrayInputStream("Subject: test\r\n\r\ntestmail".getBytes(StandardCharsets.UTF_8)), new Date(), false, new Flags());
 
-        await();
-
         String messageId = randomMessageId().serialize();
 
         given()
@@ -864,8 +839,6 @@ public abstract class SetMessagesMethodTest {
         mailboxProbe.appendMessage(USERNAME.asString(), USER_MAILBOX,
             new ByteArrayInputStream("Subject: test\r\n\r\ntestmail".getBytes(StandardCharsets.UTF_8)), new Date(), false, new Flags());
 
-        await();
-
         String messageId = USERNAME.asString() + "|mailbox|1";
 
         given()
@@ -892,7 +865,6 @@ public abstract class SetMessagesMethodTest {
 
         ComposedMessageId message = mailboxProbe.appendMessage(USERNAME.asString(), USER_MAILBOX,
             new ByteArrayInputStream("Subject: test\r\n\r\ntestmail".getBytes(StandardCharsets.UTF_8)), new Date(), false, new Flags());
-        await();
 
         String serializedMessageId = message.getMessageId().serialize();
         // When
@@ -914,7 +886,6 @@ public abstract class SetMessagesMethodTest {
 
         ComposedMessageId message = mailboxProbe.appendMessage(USERNAME.asString(), USER_MAILBOX,
             new ByteArrayInputStream("Subject: test\r\n\r\ntestmail".getBytes(StandardCharsets.UTF_8)), new Date(), false, new Flags());
-        await();
 
         String serializedMessageId = message.getMessageId().serialize();
         given()
@@ -942,7 +913,6 @@ public abstract class SetMessagesMethodTest {
 
         ComposedMessageId message = mailboxProbe.appendMessage(USERNAME.asString(), USER_MAILBOX,
             new ByteArrayInputStream("Subject: test\r\n\r\ntestmail".getBytes(StandardCharsets.UTF_8)), new Date(), false, new Flags());
-        await();
 
         String serializedMessageId = message.getMessageId().serialize();
 
@@ -962,7 +932,6 @@ public abstract class SetMessagesMethodTest {
 
         ComposedMessageId message = mailboxProbe.appendMessage(USERNAME.asString(), USER_MAILBOX,
             new ByteArrayInputStream("Subject: test\r\n\r\ntestmail".getBytes(StandardCharsets.UTF_8)), new Date(), false, new Flags());
-        await();
 
         String serializedMessageId = message.getMessageId().serialize();
         given()
@@ -2376,7 +2345,6 @@ public abstract class SetMessagesMethodTest {
     public void setMessagesShouldRejectMovingMessageToOutboxWhenNotInDraft() throws MailboxException {
         ComposedMessageId message = mailboxProbe.appendMessage(USERNAME.asString(), MailboxPath.inbox(USERNAME),
             new ByteArrayInputStream("Subject: test\r\n\r\ntestmail".getBytes(StandardCharsets.UTF_8)), new Date(), false, new Flags());
-        await();
 
         String messageId = message.getMessageId().serialize();
         String moveMessageToOutBox = "[" +
@@ -3013,7 +2981,6 @@ public abstract class SetMessagesMethodTest {
         dataProbe.addUser(recipientAddress, password);
         mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, recipientAddress, DefaultMailboxes.INBOX);
         AccessToken recipientToken = HttpJmapAuthentication.authenticateJamesUser(baseUri(jmapServer), Username.of(recipientAddress), password);
-        await();
 
         String messageCreationId = "creationId1337";
         String fromAddress = USERNAME.asString();
@@ -3060,7 +3027,6 @@ public abstract class SetMessagesMethodTest {
         dataProbe.addUser(recipientAddress, password);
         mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, recipientAddress, DefaultMailboxes.INBOX);
         HttpJmapAuthentication.authenticateJamesUser(baseUri(jmapServer), Username.of(recipientAddress), password);
-        await();
 
         String messageCreationId = "creationId1337";
         String fromAddress = USERNAME.asString();
@@ -3105,7 +3071,6 @@ public abstract class SetMessagesMethodTest {
         String password = "password";
         dataProbe.addUser(recipientAddress, password);
         mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, recipientAddress, DefaultMailboxes.INBOX);
-        await();
         AccessToken recipientToken = HttpJmapAuthentication.authenticateJamesUser(baseUri(jmapServer), Username.of(recipientAddress), password);
 
         String messageCreationId = "creationId1337";
@@ -3161,7 +3126,6 @@ public abstract class SetMessagesMethodTest {
         String password = "password";
         dataProbe.addUser(recipientAddress, password);
         mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, recipientAddress, DefaultMailboxes.INBOX);
-        await();
 
         String messageCreationId = "creationId1337";
         String fromAddress = USERNAME.asString();
@@ -3218,7 +3182,6 @@ public abstract class SetMessagesMethodTest {
 
         String bccAddress = BOB.asString();
         mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, bccAddress, DefaultMailboxes.INBOX);
-        await();
 
         String messageCreationId = "creationId1337";
         String fromAddress = USERNAME.asString();
@@ -3289,7 +3252,6 @@ public abstract class SetMessagesMethodTest {
         String password = "password";
         dataProbe.addUser(recipientAddress, password);
         mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, recipientAddress, DefaultMailboxes.INBOX);
-        await();
         AccessToken recipientToken = HttpJmapAuthentication.authenticateJamesUser(baseUri(jmapServer), Username.of(recipientAddress), password);
 
         String messageCreationId = "creationId1337";
@@ -3330,7 +3292,6 @@ public abstract class SetMessagesMethodTest {
         dataProbe.addUser(recipientAddress, recipientPassword);
         mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, recipientAddress, DefaultMailboxes.INBOX);
         AccessToken recipientToken = HttpJmapAuthentication.authenticateJamesUser(baseUri(jmapServer), Username.of(recipientAddress), recipientPassword);
-        await();
 
         String senderDraftsMailboxId = getMailboxId(accessToken, Role.DRAFTS);
 
@@ -3375,7 +3336,6 @@ public abstract class SetMessagesMethodTest {
         String recipientAddress = "recipient" + "@" + DOMAIN;
         String recipientPassword = "password";
         dataProbe.addUser(recipientAddress, recipientPassword);
-        await();
 
         String messageCreationId = "creationId";
         String fromAddress = USERNAME.asString();
@@ -3437,7 +3397,6 @@ public abstract class SetMessagesMethodTest {
         dataProbe.addUser(recipientAddress, password);
         mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, recipientAddress, DefaultMailboxes.INBOX);
         AccessToken recipientToken = HttpJmapAuthentication.authenticateJamesUser(baseUri(jmapServer), Username.of(recipientAddress), password);
-        await();
 
         String messageCreationId = "creationId1337";
         String fromAddress = USERNAME.asString();
@@ -5632,7 +5591,6 @@ public abstract class SetMessagesMethodTest {
 
         ComposedMessageId message = mailboxProbe.appendMessage(USERNAME.asString(), USER_MAILBOX,
                 new ByteArrayInputStream("Subject: test\r\n\r\ntestmail".getBytes(StandardCharsets.UTF_8)), new Date(), false, new Flags());
-        await();
 
         String messageId = message.getMessageId().serialize();
 
@@ -5768,7 +5726,6 @@ public abstract class SetMessagesMethodTest {
         String password = "password";
         dataProbe.addUser(recipientAddress, password);
         mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, recipientAddress, DefaultMailboxes.INBOX);
-        await();
 
         String messageCreationId = "creationId1337";
         String fromAddress = USERNAME.asString();
diff --git a/server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/memory/MemorySetMessagesMethodTest.java b/server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/memory/MemorySetMessagesMethodTest.java
index bbf001a..19fa5ca 100644
--- a/server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/memory/MemorySetMessagesMethodTest.java
+++ b/server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/memory/MemorySetMessagesMethodTest.java
@@ -39,10 +39,6 @@ public class MemorySetMessagesMethodTest extends SetMessagesMethodTest {
     }
     
     @Override
-    protected void await() {
-    }
-    
-    @Override
     protected MessageId randomMessageId() {
         return new InMemoryMessageId.Factory().fromString(String.valueOf(ThreadLocalRandom.current().nextInt(100000) + 100));
     }
diff --git a/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQAwsS3SetMessagesMethodTest.java b/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQAwsS3SetMessagesMethodTest.java
index c92c966..11bd4de 100644
--- a/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQAwsS3SetMessagesMethodTest.java
+++ b/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQAwsS3SetMessagesMethodTest.java
@@ -44,11 +44,6 @@ public class RabbitMQAwsS3SetMessagesMethodTest extends SetMessagesMethodTest {
     }
 
     @Override
-    protected void await() {
-        rule.await();
-    }
-
-    @Override
     protected MessageId randomMessageId() {
         return new CassandraMessageId.Factory().generate();
     }


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


[james-project] 22/28: JAMES-3350 Allow to choose the lifecycle of JamesServerExtension

Posted by bt...@apache.org.
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 279baaa8fa49dd1e475f7b513b466a5457b94d97
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Tue Jul 28 13:03:16 2020 +0700

    JAMES-3350 Allow to choose the lifecycle of JamesServerExtension
    
    Allow to restart it:
    
     - Per test
     - Per enclosing class (no for the 'main' test class and not for each nested class
     - Per class, including nested ones
    
     Note that this feature was implemented in RabbitMQJmapExtension.java, but only for
     the distributed server, with only a specific module setup.
    
     This commit enforce Lifecycle.PER_CLASS usage where the underlying James data are not affected
     by the test.
---
 .../org/apache/james/CassandraJamesServerTest.java |   6 +-
 .../apache/james/CassandraJmapJamesServerTest.java |  35 ----
 .../org/apache/james/CassandraWithTikaTest.java    |  15 +-
 .../CassandraRabbitMQLdapJmapJamesServerTest.java  |   3 +
 .../java/org/apache/james/JamesServerBuilder.java  |  10 +-
 .../org/apache/james/JamesServerExtension.java     |  59 +++++-
 .../java/org/apache/james/JPAJamesServerTest.java  |   1 +
 ...WithAuthenticatedDatabaseSqlValidationTest.java |   1 +
 ...atabaseAuthenticaticationSqlValidationTest.java |   1 +
 .../org/apache/james/MemoryJamesServerTest.java    |   1 +
 .../distributed/DistributedAuthenticationTest.java |   1 +
 .../rfc8621/contract/AuthenticationContract.scala  |  11 +-
 .../rfc8621/memory/MemoryAuthenticationTest.java   |   1 +
 .../rabbitmq/RabbitMQAuthorizedEndpointsTest.java  |   1 +
 .../rabbitmq/RabbitMQJmapExtension.java            | 211 ---------------------
 .../RabbitMQUnauthorizedEndpointsTest.java         |  38 +++-
 .../memory/MemoryAuthorizedEndpointsTest.java      |   1 +
 .../memory/MemoryJwtFilterIntegrationTest.java     |   1 +
 .../memory/MemoryUnauthorizedEndpointsTest.java    |   1 +
 19 files changed, 134 insertions(+), 264 deletions(-)

diff --git a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraJamesServerTest.java b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraJamesServerTest.java
index d614d17..380cd18 100644
--- a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraJamesServerTest.java
+++ b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraJamesServerTest.java
@@ -21,19 +21,21 @@ package org.apache.james;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
+import org.apache.james.jmap.draft.JmapJamesServerContract;
 import org.apache.james.modules.ConfigurationProbe;
 import org.apache.james.modules.TestJMAPServerModule;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.RegisterExtension;
 
-class CassandraJamesServerTest implements JamesServerContract {
+class CassandraJamesServerTest implements JamesServerContract, JmapJamesServerContract {
     @RegisterExtension
     static JamesServerExtension testExtension = TestingDistributedJamesServerBuilder.withSearchConfiguration(SearchConfiguration.elasticSearch())
         .extension(new DockerElasticSearchExtension())
         .extension(new CassandraExtension())
         .server(configuration -> CassandraJamesServerMain.createServer(configuration)
             .overrideWith(new TestJMAPServerModule())
-            .overrideWith(DOMAIN_LIST_CONFIGURATION_MODULE))
+            .overrideWith(JamesServerContract.DOMAIN_LIST_CONFIGURATION_MODULE))
+        .lifeCycle(JamesServerExtension.Lifecycle.PER_CLASS)
         .build();
 
     @Test
diff --git a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraJmapJamesServerTest.java b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraJmapJamesServerTest.java
deleted file mode 100644
index 2abb9d5..0000000
--- a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraJmapJamesServerTest.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- ****************************************************************/
-
-package org.apache.james;
-
-import org.apache.james.jmap.draft.JmapJamesServerContract;
-import org.apache.james.modules.TestJMAPServerModule;
-import org.junit.jupiter.api.extension.RegisterExtension;
-
-class CassandraJmapJamesServerTest implements JmapJamesServerContract {
-    @RegisterExtension
-    static JamesServerExtension testExtension = TestingDistributedJamesServerBuilder.withSearchConfiguration(SearchConfiguration.elasticSearch())
-        .extension(new DockerElasticSearchExtension())
-        .extension(new CassandraExtension())
-        .server(configuration -> CassandraJamesServerMain.createServer(configuration)
-            .overrideWith(new TestJMAPServerModule())
-            .overrideWith(DOMAIN_LIST_CONFIGURATION_MODULE))
-        .build();
-}
diff --git a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraWithTikaTest.java b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraWithTikaTest.java
index 31615a3..9467786 100644
--- a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraWithTikaTest.java
+++ b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraWithTikaTest.java
@@ -25,11 +25,12 @@ import org.junit.jupiter.api.extension.RegisterExtension;
 class CassandraWithTikaTest implements JamesServerContract {
     @RegisterExtension
     static JamesServerExtension testExtension = TestingDistributedJamesServerBuilder.withSearchConfiguration(SearchConfiguration.elasticSearch())
-            .extension(new CassandraExtension())
-            .extension(new  TikaExtension())
-            .extension(new DockerElasticSearchExtension())
-            .server(configuration -> CassandraJamesServerMain.createServer(configuration)
-                .overrideWith(new TestJMAPServerModule())
-                .overrideWith(DOMAIN_LIST_CONFIGURATION_MODULE))
-            .build();
+        .extension(new CassandraExtension())
+        .extension(new  TikaExtension())
+        .extension(new DockerElasticSearchExtension())
+        .server(configuration -> CassandraJamesServerMain.createServer(configuration)
+            .overrideWith(new TestJMAPServerModule())
+            .overrideWith(DOMAIN_LIST_CONFIGURATION_MODULE))
+        .lifeCycle(JamesServerExtension.Lifecycle.PER_CLASS)
+        .build();
 }
diff --git a/server/container/guice/cassandra-rabbitmq-ldap-guice/src/test/java/org/apache/james/CassandraRabbitMQLdapJmapJamesServerTest.java b/server/container/guice/cassandra-rabbitmq-ldap-guice/src/test/java/org/apache/james/CassandraRabbitMQLdapJmapJamesServerTest.java
index 91c8934..36becc4 100644
--- a/server/container/guice/cassandra-rabbitmq-ldap-guice/src/test/java/org/apache/james/CassandraRabbitMQLdapJmapJamesServerTest.java
+++ b/server/container/guice/cassandra-rabbitmq-ldap-guice/src/test/java/org/apache/james/CassandraRabbitMQLdapJmapJamesServerTest.java
@@ -62,6 +62,7 @@ class CassandraRabbitMQLdapJmapJamesServerTest {
                     .disableCache()
                     .deduplication())
             .extension(new SwiftBlobStoreExtension())
+            .lifeCycle(JamesServerExtension.Lifecycle.PER_CLASS)
             .build();
     }
 
@@ -74,6 +75,7 @@ class CassandraRabbitMQLdapJmapJamesServerTest {
                     .disableCache()
                     .deduplication())
             .extension(new AwsS3BlobStoreExtension())
+            .lifeCycle(JamesServerExtension.Lifecycle.PER_CLASS)
             .build();
     }
 
@@ -85,6 +87,7 @@ class CassandraRabbitMQLdapJmapJamesServerTest {
                 .cassandra()
                 .disableCache()
                 .passthrough())
+            .lifeCycle(JamesServerExtension.Lifecycle.PER_CLASS)
             .build();
     }
 
diff --git a/server/container/guice/guice-common/src/test/java/org/apache/james/JamesServerBuilder.java b/server/container/guice/guice-common/src/test/java/org/apache/james/JamesServerBuilder.java
index 0a749fd..cfca036 100644
--- a/server/container/guice/guice-common/src/test/java/org/apache/james/JamesServerBuilder.java
+++ b/server/container/guice/guice-common/src/test/java/org/apache/james/JamesServerBuilder.java
@@ -57,15 +57,18 @@ public class JamesServerBuilder<T extends Configuration> {
     private ServerProvider server;
     private ConfigurationProvider configuration;
     private Optional<Boolean> autoStart;
+    private JamesServerExtension.Lifecycle lifecycle;
 
     public JamesServerBuilder(ConfigurationProvider configurationProvider) {
         configuration = configurationProvider;
         extensions = ImmutableList.builder();
         folderRegistrableExtension = new TemporaryFolderRegistrableExtension();
         autoStart = Optional.empty();
+        lifecycle = JamesServerExtension.Lifecycle.PER_TEST;
         overrideModules = ImmutableList.builder();
     }
 
+
     public JamesServerBuilder<T> extensions(GuiceModuleTestExtension... extensions) {
         this.extensions.add(extensions);
         return this;
@@ -90,12 +93,17 @@ public class JamesServerBuilder<T extends Configuration> {
         return this;
     }
 
+    public JamesServerBuilder<T> lifeCycle(JamesServerExtension.Lifecycle lifecycle) {
+        this.lifecycle = lifecycle;
+        return this;
+    }
+
     public JamesServerExtension build() {
         Preconditions.checkNotNull(server);
         JamesServerExtension.AwaitCondition awaitCondition = () -> extensions.build().forEach(GuiceModuleTestExtension::await);
 
         return new JamesServerExtension(buildAggregateJunitExtension(), file -> overrideServerWithExtensionsModules(file, configuration),
-            awaitCondition, autoStart.orElse(DEFAULT_AUTO_START));
+            awaitCondition, autoStart.orElse(DEFAULT_AUTO_START), lifecycle);
     }
 
     private AggregateJunitExtension buildAggregateJunitExtension() {
diff --git a/server/container/guice/guice-common/src/test/java/org/apache/james/JamesServerExtension.java b/server/container/guice/guice-common/src/test/java/org/apache/james/JamesServerExtension.java
index 3469871..d79548c 100644
--- a/server/container/guice/guice-common/src/test/java/org/apache/james/JamesServerExtension.java
+++ b/server/container/guice/guice-common/src/test/java/org/apache/james/JamesServerExtension.java
@@ -23,6 +23,7 @@ import java.io.File;
 import java.io.IOException;
 import java.io.UncheckedIOException;
 
+import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.extension.AfterAllCallback;
 import org.junit.jupiter.api.extension.AfterEachCallback;
 import org.junit.jupiter.api.extension.BeforeAllCallback;
@@ -32,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.ThrowingBiConsumer;
+
 public class JamesServerExtension implements BeforeAllCallback, BeforeEachCallback, AfterEachCallback, AfterAllCallback, ParameterResolver {
 
     interface ThrowingFunction<P, T> {
@@ -42,18 +45,62 @@ public class JamesServerExtension implements BeforeAllCallback, BeforeEachCallba
         void await();
     }
 
+    public enum Lifecycle {
+        // Restarts the server for each class, including nested classes
+        PER_CLASS(JamesServerExtension::start, (extension, context) -> { }, (extension, context) -> { }, JamesServerExtension::stop),
+        // Restarts the server for the enclosing class, it will ignore nested classes
+        PER_ENCLOSING_CLASS(
+            (extension, context) -> {
+                if (!isNested(context)) {
+                    extension.start(context);
+                }
+            },
+            (extension, context) -> { },
+            (extension, context) -> { },
+            (extension, context) -> {
+                if (!isNested(context)) {
+                    extension.stop(context);
+                }
+            }),
+        // Restarts the server for each test (default)
+        PER_TEST((extension, context) -> { }, JamesServerExtension::start, JamesServerExtension::stop, (extension, context) -> { });
+
+        private static boolean isNested(ExtensionContext context) {
+            return context.getTestClass()
+                .map(clazz -> clazz.isAnnotationPresent(Nested.class))
+                .orElse(false);
+        }
+
+        private final ThrowingBiConsumer<JamesServerExtension, ExtensionContext> beforeAll;
+        private final ThrowingBiConsumer<JamesServerExtension, ExtensionContext> beforeEach;
+        private final ThrowingBiConsumer<JamesServerExtension, ExtensionContext> afterEach;
+        private final ThrowingBiConsumer<JamesServerExtension, ExtensionContext> afterAll;
+
+        Lifecycle(ThrowingBiConsumer<JamesServerExtension, ExtensionContext> beforeAll,
+                  ThrowingBiConsumer<JamesServerExtension, ExtensionContext> beforeEach,
+                  ThrowingBiConsumer<JamesServerExtension, ExtensionContext> afterEach,
+                  ThrowingBiConsumer<JamesServerExtension, ExtensionContext> afterAll) {
+            this.beforeAll = beforeAll;
+            this.beforeEach = beforeEach;
+            this.afterEach = afterEach;
+            this.afterAll = afterAll;
+        }
+    }
+
     private final TemporaryFolderRegistrableExtension folderRegistrableExtension;
     private final ThrowingFunction<File, GuiceJamesServer> serverSupplier;
     private final RegistrableExtension registrableExtension;
     private final boolean autoStart;
+    private final Lifecycle lifecycle;
     private final AwaitCondition awaitCondition;
 
     private GuiceJamesServer guiceJamesServer;
 
     JamesServerExtension(RegistrableExtension registrableExtension, ThrowingFunction<File, GuiceJamesServer> serverSupplier,
-                         AwaitCondition awaitCondition, boolean autoStart) {
+                         AwaitCondition awaitCondition, boolean autoStart, Lifecycle lifecycle) {
         this.registrableExtension = registrableExtension;
         this.serverSupplier = serverSupplier;
+        this.lifecycle = lifecycle;
         this.folderRegistrableExtension = new TemporaryFolderRegistrableExtension();
         this.autoStart = autoStart;
         this.awaitCondition = awaitCondition;
@@ -66,10 +113,15 @@ public class JamesServerExtension implements BeforeAllCallback, BeforeEachCallba
     @Override
     public void beforeAll(ExtensionContext extensionContext) throws Exception {
         registrableExtension.beforeAll(extensionContext);
+        lifecycle.beforeAll.accept(this, extensionContext);
     }
 
     @Override
     public void beforeEach(ExtensionContext extensionContext) throws Exception {
+        lifecycle.beforeEach.accept(this, extensionContext);
+    }
+
+    private void start(ExtensionContext extensionContext) throws Exception {
         folderRegistrableExtension.beforeEach(extensionContext);
         registrableExtension.beforeEach(extensionContext);
         guiceJamesServer = serverSupplier.apply(createTmpDir());
@@ -80,6 +132,10 @@ public class JamesServerExtension implements BeforeAllCallback, BeforeEachCallba
 
     @Override
     public void afterEach(ExtensionContext extensionContext) throws Exception {
+        lifecycle.afterEach.accept(this, extensionContext);
+    }
+
+    private void stop(ExtensionContext extensionContext) throws Exception {
         guiceJamesServer.stop();
         registrableExtension.afterEach(extensionContext);
         folderRegistrableExtension.afterEach(extensionContext);
@@ -87,6 +143,7 @@ public class JamesServerExtension implements BeforeAllCallback, BeforeEachCallba
 
     @Override
     public void afterAll(ExtensionContext extensionContext) throws Exception {
+        lifecycle.afterAll.accept(this, extensionContext);
         registrableExtension.afterAll(extensionContext);
     }
 
diff --git a/server/container/guice/jpa-guice/src/test/java/org/apache/james/JPAJamesServerTest.java b/server/container/guice/jpa-guice/src/test/java/org/apache/james/JPAJamesServerTest.java
index 6def258..f13a9ea 100644
--- a/server/container/guice/jpa-guice/src/test/java/org/apache/james/JPAJamesServerTest.java
+++ b/server/container/guice/jpa-guice/src/test/java/org/apache/james/JPAJamesServerTest.java
@@ -43,6 +43,7 @@ class JPAJamesServerTest implements JamesServerContract {
     static JamesServerExtension jamesServerExtension = new JamesServerBuilder<>(JamesServerBuilder.defaultConfigurationProvider())
         .server(configuration -> JPAJamesServerMain.createServer(configuration)
             .overrideWith(new TestJPAConfigurationModule(), DOMAIN_LIST_CONFIGURATION_MODULE))
+        .lifeCycle(JamesServerExtension.Lifecycle.PER_CLASS)
         .build();
 
     private static final ConditionFactory AWAIT = Awaitility.await()
diff --git a/server/container/guice/jpa-guice/src/test/java/org/apache/james/JPAJamesServerWithAuthenticatedDatabaseSqlValidationTest.java b/server/container/guice/jpa-guice/src/test/java/org/apache/james/JPAJamesServerWithAuthenticatedDatabaseSqlValidationTest.java
index a32d885..4880eef 100644
--- a/server/container/guice/jpa-guice/src/test/java/org/apache/james/JPAJamesServerWithAuthenticatedDatabaseSqlValidationTest.java
+++ b/server/container/guice/jpa-guice/src/test/java/org/apache/james/JPAJamesServerWithAuthenticatedDatabaseSqlValidationTest.java
@@ -27,5 +27,6 @@ class JPAJamesServerWithAuthenticatedDatabaseSqlValidationTest extends JPAJamesS
     static JamesServerExtension jamesServerExtension = new JamesServerBuilder<>(JamesServerBuilder.defaultConfigurationProvider())
         .server(configuration -> JPAJamesServerMain.createServer(configuration)
             .overrideWith(new TestJPAConfigurationModuleWithSqlValidation.WithDatabaseAuthentication(), DOMAIN_LIST_CONFIGURATION_MODULE))
+        .lifeCycle(JamesServerExtension.Lifecycle.PER_CLASS)
         .build();
 }
diff --git a/server/container/guice/jpa-guice/src/test/java/org/apache/james/JPAJamesServerWithNoDatabaseAuthenticaticationSqlValidationTest.java b/server/container/guice/jpa-guice/src/test/java/org/apache/james/JPAJamesServerWithNoDatabaseAuthenticaticationSqlValidationTest.java
index 2bad2be..4e941db 100644
--- a/server/container/guice/jpa-guice/src/test/java/org/apache/james/JPAJamesServerWithNoDatabaseAuthenticaticationSqlValidationTest.java
+++ b/server/container/guice/jpa-guice/src/test/java/org/apache/james/JPAJamesServerWithNoDatabaseAuthenticaticationSqlValidationTest.java
@@ -27,5 +27,6 @@ class JPAJamesServerWithNoDatabaseAuthenticaticationSqlValidationTest extends JP
     static JamesServerExtension jamesServerExtension = new JamesServerBuilder<>(JamesServerBuilder.defaultConfigurationProvider())
         .server(configuration -> JPAJamesServerMain.createServer(configuration)
             .overrideWith(new TestJPAConfigurationModuleWithSqlValidation.NoDatabaseAuthentication(), DOMAIN_LIST_CONFIGURATION_MODULE))
+        .lifeCycle(JamesServerExtension.Lifecycle.PER_CLASS)
         .build();
 }
diff --git a/server/container/guice/memory-guice/src/test/java/org/apache/james/MemoryJamesServerTest.java b/server/container/guice/memory-guice/src/test/java/org/apache/james/MemoryJamesServerTest.java
index 0dde933..8b1d9c7 100644
--- a/server/container/guice/memory-guice/src/test/java/org/apache/james/MemoryJamesServerTest.java
+++ b/server/container/guice/memory-guice/src/test/java/org/apache/james/MemoryJamesServerTest.java
@@ -28,5 +28,6 @@ class MemoryJamesServerTest implements JamesServerContract {
         .server(configuration -> MemoryJamesServerMain.createServer(configuration)
             .overrideWith(new TestJMAPServerModule())
             .overrideWith(DOMAIN_LIST_CONFIGURATION_MODULE))
+        .lifeCycle(JamesServerExtension.Lifecycle.PER_CLASS)
         .build();
 }
diff --git a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedAuthenticationTest.java b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedAuthenticationTest.java
index 219ff54..91e8dda 100644
--- a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedAuthenticationTest.java
+++ b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedAuthenticationTest.java
@@ -51,5 +51,6 @@ class DistributedAuthenticationTest implements AuthenticationContract {
         .extension(new AwsS3BlobStoreExtension())
         .server(configuration -> CassandraRabbitMQJamesServerMain.createServer(configuration)
             .overrideWith(new TestJMAPServerModule()))
+        .lifeCycle(JamesServerExtension.Lifecycle.PER_ENCLOSING_CLASS)
         .build();
 }
diff --git a/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/AuthenticationContract.scala b/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/AuthenticationContract.scala
index 6d2b766..c411c81 100644
--- a/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/AuthenticationContract.scala
+++ b/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/AuthenticationContract.scala
@@ -28,11 +28,10 @@ import org.apache.james.GuiceJamesServer
 import org.apache.james.jmap.rfc8621.contract.Fixture.{ACCEPT_RFC8621_VERSION_HEADER, ALICE, ALICE_PASSWORD, AUTHORIZATION_HEADER, BOB, BOB_BASIC_AUTH_HEADER, BOB_PASSWORD, DOMAIN, DOMAIN_WITH_SPACE, ECHO_REQUEST_OBJECT, INVALID_JWT_TOKEN, UNKNOWN_USER_TOKEN, USER_TOKEN, getHeadersWith, toBase64, _}
 import org.apache.james.jmap.rfc8621.contract.tags.CategoryTags
 import org.apache.james.utils.DataProbeImpl
-import org.junit.jupiter.api.{BeforeEach, Nested, Tag, Test}
+import org.junit.jupiter.api.{BeforeAll, Nested, Tag, Test}
 
-
-trait AuthenticationContract {
-  @BeforeEach
+object AuthenticationContract {
+  @BeforeAll
   def setup(server: GuiceJamesServer): Unit = {
     server.getProbe(classOf[DataProbeImpl])
       .fluent
@@ -43,10 +42,12 @@ trait AuthenticationContract {
       .addUser(BOB.asString, BOB_PASSWORD)
 
     requestSpecification = baseRequestSpecBuilder(server)
-        .setAuth(new NoAuthScheme)
+      .setAuth(new NoAuthScheme)
       .build
   }
+}
 
+trait AuthenticationContract {
   @Nested
   class BothAuthenticationMechanisms {
     @Tag(CategoryTags.BASIC_FEATURE)
diff --git a/server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryAuthenticationTest.java b/server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryAuthenticationTest.java
index 74163fd..2bebc89 100644
--- a/server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryAuthenticationTest.java
+++ b/server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryAuthenticationTest.java
@@ -34,5 +34,6 @@ class MemoryAuthenticationTest implements AuthenticationContract {
         .server(configuration -> GuiceJamesServer.forConfiguration(configuration)
             .combineWith(IN_MEMORY_SERVER_AGGREGATE_MODULE)
             .overrideWith(new TestJMAPServerModule()))
+        .lifeCycle(JamesServerExtension.Lifecycle.PER_ENCLOSING_CLASS)
         .build();
 }
diff --git a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQAuthorizedEndpointsTest.java b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQAuthorizedEndpointsTest.java
index bebfaa3..0ce6b26 100644
--- a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQAuthorizedEndpointsTest.java
+++ b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQAuthorizedEndpointsTest.java
@@ -57,5 +57,6 @@ class RabbitMQAuthorizedEndpointsTest extends AuthorizedEndpointsTest {
         .server(configuration -> CassandraRabbitMQJamesServerMain.createServer(configuration)
             .overrideWith(new UnauthorizedModule())
             .overrideWith(new WebadminIntegrationTestModule()))
+        .lifeCycle(JamesServerExtension.Lifecycle.PER_CLASS)
         .build();
 }
\ No newline at end of file
diff --git a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQJmapExtension.java b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQJmapExtension.java
deleted file mode 100644
index aaa763f..0000000
--- a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQJmapExtension.java
+++ /dev/null
@@ -1,211 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- ****************************************************************/
-package org.apache.james.webadmin.integration.rabbitmq;
-
-import java.io.IOException;
-import java.util.Optional;
-import java.util.function.Consumer;
-import java.util.function.Supplier;
-
-import org.apache.james.CassandraRabbitMQJamesConfiguration;
-import org.apache.james.CassandraRabbitMQJamesServerMain;
-import org.apache.james.CleanupTasksPerformer;
-import org.apache.james.DockerCassandraRule;
-import org.apache.james.DockerElasticSearchRule;
-import org.apache.james.GuiceJamesServer;
-import org.apache.james.SearchConfiguration;
-import org.apache.james.backends.rabbitmq.DockerRabbitMQSingleton;
-import org.apache.james.modules.TestDockerESMetricReporterModule;
-import org.apache.james.modules.TestRabbitMQModule;
-import org.apache.james.modules.blobstore.BlobStoreConfiguration;
-import org.apache.james.modules.objectstorage.aws.s3.DockerAwsS3TestRule;
-import org.apache.james.util.FunctionalUtils;
-import org.apache.james.util.Runnables;
-import org.apache.james.webadmin.integration.UnauthorizedModule;
-import org.apache.james.webadmin.integration.WebadminIntegrationTestModule;
-import org.junit.jupiter.api.extension.AfterAllCallback;
-import org.junit.jupiter.api.extension.AfterEachCallback;
-import org.junit.jupiter.api.extension.BeforeAllCallback;
-import org.junit.jupiter.api.extension.BeforeEachCallback;
-import org.junit.jupiter.api.extension.ExtensionContext;
-import org.junit.jupiter.api.extension.ParameterContext;
-import org.junit.jupiter.api.extension.ParameterResolutionException;
-import org.junit.jupiter.api.extension.ParameterResolver;
-import org.junit.rules.TemporaryFolder;
-
-import com.github.fge.lambdas.Throwing;
-
-public class RabbitMQJmapExtension implements BeforeAllCallback, AfterAllCallback, BeforeEachCallback, AfterEachCallback, ParameterResolver {
-
-    public interface JamesLifeCyclePolicy {
-        JamesLifeCyclePolicy FOR_EACH_TEST = serverSupplier -> JamesLifecycleHandler.builder()
-            .beforeAll(Optional::empty)
-            .beforeEach(() -> Optional.of(serverSupplier.get()))
-            .afterEach(GuiceJamesServer::stop)
-            .afterAll(guiceJamesServer -> { });
-        JamesLifeCyclePolicy COMMON_TO_ALL_TESTS = serverSupplier -> JamesLifecycleHandler.builder()
-            .beforeAll(() -> Optional.of(serverSupplier.get()))
-            .beforeEach(Optional::empty)
-            .afterEach(guiceJamesServer -> { })
-            .afterAll(GuiceJamesServer::stop);
-
-        JamesLifecycleHandler createHandler(Supplier<GuiceJamesServer> serverSupplier);
-    }
-
-    public static class JamesLifecycleHandler {
-        public interface Builder {
-            @FunctionalInterface
-            interface RequiresBeforeAll {
-                RequiresBeforeEach beforeAll(Supplier<Optional<GuiceJamesServer>> beforeAll);
-
-            }
-
-            @FunctionalInterface
-            interface RequiresBeforeEach {
-                RequiresAfterEach beforeEach(Supplier<Optional<GuiceJamesServer>> beforeEach);
-            }
-
-            @FunctionalInterface
-            interface RequiresAfterEach {
-                RequiresAfterAll afterEach(Consumer<GuiceJamesServer> afterAll);
-            }
-
-            @FunctionalInterface
-            interface RequiresAfterAll {
-                JamesLifecycleHandler afterAll(Consumer<GuiceJamesServer> afterAll);
-            }
-        }
-
-        public static Builder.RequiresBeforeAll builder() {
-            return beforeAll -> beforeEach -> afterEach -> afterAll -> new JamesLifecycleHandler(beforeAll, beforeEach, afterEach, afterAll);
-        }
-
-        private final Supplier<Optional<GuiceJamesServer>> beforeAll;
-        private final Supplier<Optional<GuiceJamesServer>> beforeEach;
-        private final Consumer<GuiceJamesServer> afterEach;
-        private final Consumer<GuiceJamesServer>  afterAll;
-
-        JamesLifecycleHandler(Supplier<Optional<GuiceJamesServer>> beforeAll, Supplier<Optional<GuiceJamesServer>> beforeEach, Consumer<GuiceJamesServer> afterEach, Consumer<GuiceJamesServer> afterAll) {
-            this.beforeAll = beforeAll;
-            this.beforeEach = beforeEach;
-            this.afterEach = afterEach;
-            this.afterAll = afterAll;
-        }
-
-        Optional<GuiceJamesServer> beforeAll() {
-            return beforeAll.get()
-                .map(FunctionalUtils.toFunction(Throwing.consumer(GuiceJamesServer::start)));
-        }
-
-        Optional<GuiceJamesServer> beforeEach() {
-            return beforeEach.get()
-                .map(FunctionalUtils.toFunction(Throwing.consumer(GuiceJamesServer::start)));
-        }
-
-        void afterEach(GuiceJamesServer guiceJamesServer) {
-            afterEach.accept(guiceJamesServer);
-        }
-
-        void afterAll(GuiceJamesServer guiceJamesServer) {
-            afterAll.accept(guiceJamesServer);
-        }
-    }
-
-    private final TemporaryFolder temporaryFolder;
-    private final DockerAwsS3TestRule dockerAwsS3TestRule;
-    private final DockerCassandraRule cassandra;
-    private final DockerElasticSearchRule elasticSearchRule;
-    private final JamesLifecycleHandler jamesLifecycleHandler;
-    private GuiceJamesServer james;
-
-    public RabbitMQJmapExtension() {
-        this(JamesLifeCyclePolicy.FOR_EACH_TEST);
-    }
-
-    public RabbitMQJmapExtension(JamesLifeCyclePolicy jamesLifeCyclePolicy) {
-        this.temporaryFolder = new TemporaryFolder();
-        this.cassandra = new DockerCassandraRule();
-        this.elasticSearchRule = new DockerElasticSearchRule();
-        this.dockerAwsS3TestRule = new DockerAwsS3TestRule();
-        this.jamesLifecycleHandler = jamesLifeCyclePolicy.createHandler(jamesSupplier());
-    }
-
-    private GuiceJamesServer james() throws IOException {
-        CassandraRabbitMQJamesConfiguration configuration = CassandraRabbitMQJamesConfiguration.builder()
-            .workingDirectory(temporaryFolder.newFolder())
-            .configurationFromClasspath()
-            .blobStore(BlobStoreConfiguration.builder()
-                    .objectStorage()
-                    .disableCache()
-                    .deduplication())
-            .searchConfiguration(SearchConfiguration.elasticSearch())
-            .build();
-
-        return CassandraRabbitMQJamesServerMain.createServer(configuration)
-                .overrideWith(new TestDockerESMetricReporterModule(elasticSearchRule.getDockerEs().getHttpHost()))
-                .overrideWith(cassandra.getModule())
-                .overrideWith(elasticSearchRule.getModule())
-                .overrideWith(dockerAwsS3TestRule.getModule())
-                .overrideWith(new TestRabbitMQModule(DockerRabbitMQSingleton.SINGLETON))
-                .overrideWith(new WebadminIntegrationTestModule())
-                .overrideWith(new UnauthorizedModule())
-                .overrideWith((binder -> binder.bind(CleanupTasksPerformer.class).asEagerSingleton()));
-    }
-
-    private Supplier<GuiceJamesServer> jamesSupplier() {
-        return Throwing.supplier(this::james);
-    }
-
-    @Override
-    public void beforeAll(ExtensionContext context) throws Exception {
-        temporaryFolder.create();
-        Runnables.runParallel(cassandra::start, elasticSearchRule::start, dockerAwsS3TestRule::start);
-        james = jamesLifecycleHandler.beforeAll().orElse(james);
-    }
-
-    @Override
-    public void afterAll(ExtensionContext context) {
-        jamesLifecycleHandler.afterAll(james);
-        Runnables.runParallel(cassandra::stop, elasticSearchRule.getDockerEs()::cleanUpData, dockerAwsS3TestRule::stop);
-    }
-
-    @Override
-    public void beforeEach(ExtensionContext context) {
-        james = jamesLifecycleHandler.beforeEach().orElse(james);
-    }
-
-    @Override
-    public void afterEach(ExtensionContext context) {
-        jamesLifecycleHandler.afterEach(james);
-    }
-
-    @Override
-    public boolean supportsParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException {
-        return parameterContext.getParameter().getType() == GuiceJamesServer.class;
-    }
-
-    public GuiceJamesServer getJames() {
-        return james;
-    }
-
-    @Override
-    public Object resolveParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException {
-        return james;
-    }
-}
diff --git a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQUnauthorizedEndpointsTest.java b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQUnauthorizedEndpointsTest.java
index ab1a2a3..29cf1d1 100644
--- a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQUnauthorizedEndpointsTest.java
+++ b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQUnauthorizedEndpointsTest.java
@@ -21,8 +21,23 @@ package org.apache.james.webadmin.integration.rabbitmq;
 
 import static io.restassured.RestAssured.when;
 
+import org.apache.james.CassandraExtension;
+import org.apache.james.CassandraRabbitMQJamesConfiguration;
+import org.apache.james.CassandraRabbitMQJamesServerMain;
+import org.apache.james.CleanupTasksPerformer;
+import org.apache.james.DockerElasticSearchExtension;
+import org.apache.james.JamesServerBuilder;
+import org.apache.james.JamesServerExtension;
+import org.apache.james.SearchConfiguration;
+import org.apache.james.backends.rabbitmq.DockerRabbitMQSingleton;
 import org.apache.james.junit.categories.BasicFeature;
+import org.apache.james.modules.AwsS3BlobStoreExtension;
+import org.apache.james.modules.RabbitMQExtension;
+import org.apache.james.modules.TestRabbitMQModule;
+import org.apache.james.modules.blobstore.BlobStoreConfiguration;
 import org.apache.james.webadmin.integration.UnauthorizedEndpointsTest;
+import org.apache.james.webadmin.integration.UnauthorizedModule;
+import org.apache.james.webadmin.integration.WebadminIntegrationTestModule;
 import org.apache.james.webadmin.routes.AliasRoutes;
 import org.apache.james.webadmin.routes.CassandraMappingsRoutes;
 import org.apache.james.webadmin.routes.CassandraMigrationRoutes;
@@ -50,9 +65,28 @@ import org.junit.jupiter.params.provider.ValueSource;
 
 @Tag(BasicFeature.TAG)
 class RabbitMQUnauthorizedEndpointsTest extends UnauthorizedEndpointsTest {
-
     @RegisterExtension
-    static RabbitMQJmapExtension rabbitMQJmapExtension = new RabbitMQJmapExtension(RabbitMQJmapExtension.JamesLifeCyclePolicy.COMMON_TO_ALL_TESTS);
+    static JamesServerExtension testExtension = new JamesServerBuilder<CassandraRabbitMQJamesConfiguration>(tmpDir ->
+        CassandraRabbitMQJamesConfiguration.builder()
+            .workingDirectory(tmpDir)
+            .configurationFromClasspath()
+            .blobStore(BlobStoreConfiguration.builder()
+                .objectStorage()
+                .disableCache()
+                .deduplication())
+            .searchConfiguration(SearchConfiguration.elasticSearch())
+            .build())
+        .extension(new DockerElasticSearchExtension())
+        .extension(new CassandraExtension())
+        .extension(new AwsS3BlobStoreExtension())
+        .extension(new RabbitMQExtension())
+        .server(configuration -> CassandraRabbitMQJamesServerMain.createServer(configuration)
+            .overrideWith(new TestRabbitMQModule(DockerRabbitMQSingleton.SINGLETON))
+            .overrideWith(new WebadminIntegrationTestModule())
+            .overrideWith(new UnauthorizedModule())
+            .overrideWith((binder -> binder.bind(CleanupTasksPerformer.class).asEagerSingleton())))
+        .lifeCycle(JamesServerExtension.Lifecycle.PER_CLASS)
+        .build();
 
     @ParameterizedTest
     @ValueSource(strings = {
diff --git a/server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/memory/MemoryAuthorizedEndpointsTest.java b/server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/memory/MemoryAuthorizedEndpointsTest.java
index 1b5a462..8ab6edd 100644
--- a/server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/memory/MemoryAuthorizedEndpointsTest.java
+++ b/server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/memory/MemoryAuthorizedEndpointsTest.java
@@ -33,5 +33,6 @@ class MemoryAuthorizedEndpointsTest extends AuthorizedEndpointsTest {
         .server(configuration -> MemoryJamesServerMain.createServer(configuration)
             .overrideWith(new WebadminIntegrationTestModule())
             .overrideWith(new UnauthorizedModule()))
+        .lifeCycle(JamesServerExtension.Lifecycle.PER_CLASS)
         .build();
 }
\ No newline at end of file
diff --git a/server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/memory/MemoryJwtFilterIntegrationTest.java b/server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/memory/MemoryJwtFilterIntegrationTest.java
index c1aeca7..f724152 100644
--- a/server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/memory/MemoryJwtFilterIntegrationTest.java
+++ b/server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/memory/MemoryJwtFilterIntegrationTest.java
@@ -37,5 +37,6 @@ class MemoryJwtFilterIntegrationTest extends JwtFilterIntegrationTest {
             .overrideWith(new WebadminIntegrationTestModule())
             .overrideWith(binder -> binder.bind(AuthenticationFilter.class).to(JwtFilter.class))
             .overrideWith(binder -> binder.bind(JwtConfiguration.class).toInstance(jwtConfiguration())))
+        .lifeCycle(JamesServerExtension.Lifecycle.PER_CLASS)
         .build();
 }
diff --git a/server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/memory/MemoryUnauthorizedEndpointsTest.java b/server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/memory/MemoryUnauthorizedEndpointsTest.java
index 47a7c57..126097c 100644
--- a/server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/memory/MemoryUnauthorizedEndpointsTest.java
+++ b/server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/memory/MemoryUnauthorizedEndpointsTest.java
@@ -33,5 +33,6 @@ class MemoryUnauthorizedEndpointsTest extends UnauthorizedEndpointsTest {
         .server(configuration -> MemoryJamesServerMain.createServer(configuration)
             .overrideWith(new UnauthorizedModule())
             .overrideWith(new WebadminIntegrationTestModule()))
+        .lifeCycle(JamesServerExtension.Lifecycle.PER_CLASS)
         .build();
 }
\ No newline at end of file


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


[james-project] 09/28: JAMES-3350 Decrease backoff for RabbitMQEventBusTest

Posted by bt...@apache.org.
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 0c57b6987178bcdbe745272527f35f20ab91b3a6
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Mon Jul 27 11:41:17 2020 +0700

    JAMES-3350 Decrease backoff for RabbitMQEventBusTest
    
    Use lower backoff values for testing instead of production ones
---
 .../james/mailbox/events/ErrorHandlingContract.java | 21 ++++++++++-----------
 .../james/mailbox/events/EventBusContract.java      |  8 ++++++--
 .../james/mailbox/events/EventBusTestFixture.java   |  5 ++---
 .../james/mailbox/events/RabbitMQEventBusTest.java  |  2 +-
 4 files changed, 19 insertions(+), 17 deletions(-)

diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/events/ErrorHandlingContract.java b/mailbox/api/src/test/java/org/apache/james/mailbox/events/ErrorHandlingContract.java
index b598ac1..96642cb 100644
--- a/mailbox/api/src/test/java/org/apache/james/mailbox/events/ErrorHandlingContract.java
+++ b/mailbox/api/src/test/java/org/apache/james/mailbox/events/ErrorHandlingContract.java
@@ -65,6 +65,10 @@ interface ErrorHandlingContract extends EventBusContract {
             timeElapsed.add(Instant.now());
             throw new RuntimeException("throw to trigger reactor retry");
         }
+
+        public int executionCount() {
+            return timeElapsed.size();
+        }
     }
 
     EventDeadLetters deadLetter();
@@ -114,11 +118,6 @@ interface ErrorHandlingContract extends EventBusContract {
         doThrow(new RuntimeException())
             .doThrow(new RuntimeException())
             .doThrow(new RuntimeException())
-            .doThrow(new RuntimeException())
-            .doThrow(new RuntimeException())
-            .doThrow(new RuntimeException())
-            .doThrow(new RuntimeException())
-            .doThrow(new RuntimeException())
             .doCallRealMethod()
             .when(eventCollector).event(EVENT);
 
@@ -161,12 +160,12 @@ interface ErrorHandlingContract extends EventBusContract {
         eventBus().register(throwingListener, GROUP_A);
         eventBus().dispatch(EVENT, NO_KEYS).block();
 
-        Thread.sleep(getSpeedProfile().getLongWaitTime().toMillis());
-        int numberOfCallsAfterExceedMaxRetries = throwingListener.timeElapsed.size();
-        Thread.sleep(getSpeedProfile().getLongWaitTime().toMillis());
+        getSpeedProfile().shortWaitCondition()
+            .untilAsserted(() -> assertThat(throwingListener.executionCount()).isEqualTo(4));
+        Thread.sleep(getSpeedProfile().getShortWaitTime().toMillis());
 
-        assertThat(throwingListener.timeElapsed.size())
-            .isEqualTo(numberOfCallsAfterExceedMaxRetries);
+        assertThat(throwingListener.executionCount())
+            .isEqualTo(4);
     }
 
     @Test
@@ -176,7 +175,7 @@ interface ErrorHandlingContract extends EventBusContract {
         eventBus().register(throwingListener, GROUP_A);
         eventBus().dispatch(EVENT, NO_KEYS).block();
 
-        Thread.sleep(getSpeedProfile().getLongWaitTime().toMillis());
+        Thread.sleep(getSpeedProfile().getShortWaitTime().toMillis());
         SoftAssertions.assertSoftly(softly -> {
             List<Instant> timeElapsed = throwingListener.timeElapsed;
             softly.assertThat(timeElapsed).hasSize(RETRY_BACKOFF_CONFIGURATION.getMaxRetries() + 1);
diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/events/EventBusContract.java b/mailbox/api/src/test/java/org/apache/james/mailbox/events/EventBusContract.java
index 055eea3..e21644f 100644
--- a/mailbox/api/src/test/java/org/apache/james/mailbox/events/EventBusContract.java
+++ b/mailbox/api/src/test/java/org/apache/james/mailbox/events/EventBusContract.java
@@ -49,11 +49,15 @@ public interface EventBusContract {
         }
 
         public ConditionFactory shortWaitCondition() {
-            return await().timeout(new org.awaitility.Duration(this.getShortWaitTime().toMillis(), TimeUnit.MILLISECONDS));
+            return await().pollDelay(org.awaitility.Duration.ZERO)
+                .pollInterval(org.awaitility.Duration.ONE_HUNDRED_MILLISECONDS)
+                .timeout(new org.awaitility.Duration(this.getShortWaitTime().toMillis(), TimeUnit.MILLISECONDS));
         }
 
         public ConditionFactory longWaitCondition() {
-            return await().timeout(new org.awaitility.Duration(this.getLongWaitTime().toMillis(), TimeUnit.MILLISECONDS));
+            return await().pollDelay(org.awaitility.Duration.ZERO)
+                .pollInterval(org.awaitility.Duration.ONE_HUNDRED_MILLISECONDS)
+                .timeout(new org.awaitility.Duration(this.getLongWaitTime().toMillis(), TimeUnit.MILLISECONDS));
         }
     }
 
diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/events/EventBusTestFixture.java b/mailbox/api/src/test/java/org/apache/james/mailbox/events/EventBusTestFixture.java
index 440ba39..b0bd987 100644
--- a/mailbox/api/src/test/java/org/apache/james/mailbox/events/EventBusTestFixture.java
+++ b/mailbox/api/src/test/java/org/apache/james/mailbox/events/EventBusTestFixture.java
@@ -20,7 +20,6 @@
 package org.apache.james.mailbox.events;
 
 import static org.apache.james.mailbox.events.RetryBackoffConfiguration.DEFAULT_JITTER_FACTOR;
-import static org.apache.james.mailbox.events.RetryBackoffConfiguration.DEFAULT_MAX_RETRIES;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
@@ -115,10 +114,10 @@ public interface EventBusTestFixture {
     GroupC GROUP_C = new GroupC();
     List<Group> ALL_GROUPS = ImmutableList.of(GROUP_A, GROUP_B, GROUP_C);
 
-    java.time.Duration DEFAULT_FIRST_BACKOFF = java.time.Duration.ofMillis(20);
+    java.time.Duration DEFAULT_FIRST_BACKOFF = java.time.Duration.ofMillis(5);
     //Retry backoff configuration for testing with a shorter first backoff to accommodate the shorter retry interval in tests
     RetryBackoffConfiguration RETRY_BACKOFF_CONFIGURATION = RetryBackoffConfiguration.builder()
-        .maxRetries(DEFAULT_MAX_RETRIES)
+        .maxRetries(3)
         .firstBackoff(DEFAULT_FIRST_BACKOFF)
         .jitterFactor(DEFAULT_JITTER_FACTOR)
         .build();
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 1fab4cc..feb188e 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
@@ -153,7 +153,7 @@ class RabbitMQEventBusTest implements GroupContract.SingleEventBusGroupContract,
     }
 
     private RabbitMQEventBus newEventBus(Sender sender, ReceiverProvider receiverProvider) {
-        return new RabbitMQEventBus(sender, receiverProvider, eventSerializer, RetryBackoffConfiguration.DEFAULT, routingKeyConverter, memoryEventDeadLetters, new RecordingMetricFactory());
+        return new RabbitMQEventBus(sender, receiverProvider, eventSerializer, EventBusTestFixture.RETRY_BACKOFF_CONFIGURATION, routingKeyConverter, memoryEventDeadLetters, new RecordingMetricFactory());
     }
 
     @Override


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


[james-project] 10/28: JAMES-3350 Review RabbitMQWorkQueueTest lifecycle

Posted by bt...@apache.org.
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 db7b995aa6d41862d54ca2e20414d6916fb5799d
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Mon Jul 27 12:57:37 2020 +0700

    JAMES-3350 Review RabbitMQWorkQueueTest lifecycle
    
    Restarting RabbitMQ once per test class unlock significant performance improvement
---
 .../james/task/eventsourcing/distributed/RabbitMQWorkQueueTest.java   | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

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 5832863..e4b6ea3 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
@@ -55,8 +55,8 @@ class RabbitMQWorkQueueTest {
     private static final TaskWithId TASK_WITH_ID_2 = new TaskWithId(TASK_ID_2, TASK2);
 
     @RegisterExtension
-    RabbitMQExtension rabbitMQExtension = RabbitMQExtension.defaultRabbitMQ()
-        .restartPolicy(RabbitMQExtension.DockerRestartPolicy.PER_TEST);
+    static RabbitMQExtension rabbitMQExtension = RabbitMQExtension.defaultRabbitMQ()
+        .restartPolicy(RabbitMQExtension.DockerRestartPolicy.PER_CLASS);
 
 
     private RabbitMQWorkQueue testee;


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


[james-project] 27/28: JAMES-3350 ElasticSearchIntegrationTest: remove unnecessary awaits

Posted by bt...@apache.org.
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 c50a7a6cce52e2e8ad8292aa86c13d482bcccee0
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Wed Jul 29 11:24:35 2020 +0700

    JAMES-3350 ElasticSearchIntegrationTest: remove unnecessary awaits
---
 .../james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java     | 4 ----
 1 file changed, 4 deletions(-)

diff --git a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java
index 279c1c6..ed1e22a 100644
--- a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java
+++ b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java
@@ -227,8 +227,6 @@ class ElasticSearchIntegrationTest extends AbstractMessageSearchIndexTest {
                 .build(ClassLoader.getSystemResourceAsStream("eml/mailCustomDateHeader.eml")),
             session).getId();
 
-        elasticSearch.awaitForElasticSearch();
-
         ComposedMessageId customStringHeaderMessageId = messageManager.appendMessage(
             MessageManager.AppendCommand.builder()
                 .build(ClassLoader.getSystemResourceAsStream("eml/mailCustomStringHeader.eml")),
@@ -251,8 +249,6 @@ class ElasticSearchIntegrationTest extends AbstractMessageSearchIndexTest {
                 .build(ClassLoader.getSystemResourceAsStream("eml/mailCustomDateHeader.eml")),
             session);
 
-        elasticSearch.awaitForElasticSearch();
-
         ComposedMessageId customStringHeaderMessageId = messageManager.appendMessage(
             MessageManager.AppendCommand.builder()
                 .build(ClassLoader.getSystemResourceAsStream("eml/mailCustomStringHeader.eml")),


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


[james-project] 16/28: JAMES-3350 Decrase long delays timings

Posted by bt...@apache.org.
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 25e5adc8c4b8d0905b48f6afd9c8a65ac076de7d
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Mon Jul 27 15:07:34 2020 +0700

    JAMES-3350 Decrase long delays timings
---
 .../src/test/java/org/apache/james/mailbox/events/EventBusContract.java | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/events/EventBusContract.java b/mailbox/api/src/test/java/org/apache/james/mailbox/events/EventBusContract.java
index e21644f..577697e 100644
--- a/mailbox/api/src/test/java/org/apache/james/mailbox/events/EventBusContract.java
+++ b/mailbox/api/src/test/java/org/apache/james/mailbox/events/EventBusContract.java
@@ -29,7 +29,7 @@ import org.awaitility.core.ConditionFactory;
 public interface EventBusContract {
 
     enum EnvironmentSpeedProfile {
-        SLOW(Duration.ofSeconds(5), Duration.ofSeconds(30)),
+        SLOW(Duration.ofSeconds(2), Duration.ofSeconds(10)),
         FAST(Duration.ofMillis(200), Duration.ofSeconds(5));
 
         private final Duration shortWaitTime;


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


[james-project] 05/28: JAMES-3350 Remove unused CucumberAwsS3Singleton

Posted by bt...@apache.org.
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 9a0ac998fea3ad9dc7ac47063e4c1127baf222f5
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Mon Jul 27 09:58:25 2020 +0700

    JAMES-3350 Remove unused CucumberAwsS3Singleton
---
 .../cassandra/cucumber/CucumberAwsS3Singleton.java | 29 ----------------------
 1 file changed, 29 deletions(-)

diff --git a/server/protocols/jmap-draft-integration-testing/cassandra-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/cassandra/cucumber/CucumberAwsS3Singleton.java b/server/protocols/jmap-draft-integration-testing/cassandra-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/cassandra/cucumber/CucumberAwsS3Singleton.java
deleted file mode 100644
index a6b64ba..0000000
--- a/server/protocols/jmap-draft-integration-testing/cassandra-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/cassandra/cucumber/CucumberAwsS3Singleton.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- ****************************************************************/
-package org.apache.james.jmap.cassandra.cucumber;
-
-import org.apache.james.modules.objectstorage.PayloadCodecFactory;
-import org.apache.james.modules.objectstorage.aws.s3.DockerAwsS3TestRule;
-
-public class CucumberAwsS3Singleton {
-
-    public static DockerAwsS3TestRule swiftServer = new DockerAwsS3TestRule();
-    public static DockerAwsS3TestRule encryptedAwsS3Server = new DockerAwsS3TestRule(PayloadCodecFactory.AES256);
-}
-


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


[james-project] 01/28: JAMES-3350 Leverage fork parallelism in long to test projects

Posted by bt...@apache.org.
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 65566aef66abe805215752b05e4062e195943a7f
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Mon Jul 27 09:10:01 2020 +0700

    JAMES-3350 Leverage fork parallelism in long to test projects
---
 backends-common/elasticsearch/pom.xml                  | 13 +++++++++++++
 backends-common/rabbitmq/pom.xml                       | 13 +++++++++++++
 mpt/impl/imap-mailbox/cassandra/pom.xml                | 13 +++++++++++++
 server/blob/blob-cassandra/pom.xml                     | 13 +++++++++++++
 server/blob/blob-objectstorage/pom.xml                 | 13 +++++++++++++
 server/data/data-cassandra/pom.xml                     | 13 +++++++++++++
 server/mailrepository/mailrepository-cassandra/pom.xml | 13 +++++++++++++
 7 files changed, 91 insertions(+)

diff --git a/backends-common/elasticsearch/pom.xml b/backends-common/elasticsearch/pom.xml
index 4c0c901..4fbf9e9 100644
--- a/backends-common/elasticsearch/pom.xml
+++ b/backends-common/elasticsearch/pom.xml
@@ -105,4 +105,17 @@
             <scope>test</scope>
         </dependency>
     </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <reuseForks>true</reuseForks>
+                    <forkCount>2</forkCount>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
 </project>
diff --git a/backends-common/rabbitmq/pom.xml b/backends-common/rabbitmq/pom.xml
index 37e2cda..1bfe6ba 100644
--- a/backends-common/rabbitmq/pom.xml
+++ b/backends-common/rabbitmq/pom.xml
@@ -108,4 +108,17 @@
             <scope>test</scope>
         </dependency>
     </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <reuseForks>true</reuseForks>
+                    <forkCount>2</forkCount>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
 </project>
diff --git a/mpt/impl/imap-mailbox/cassandra/pom.xml b/mpt/impl/imap-mailbox/cassandra/pom.xml
index ab00022..0432a94 100644
--- a/mpt/impl/imap-mailbox/cassandra/pom.xml
+++ b/mpt/impl/imap-mailbox/cassandra/pom.xml
@@ -90,4 +90,17 @@
             <scope>test</scope>
         </dependency>
     </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <reuseForks>true</reuseForks>
+                    <forkCount>2</forkCount>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
 </project>
diff --git a/server/blob/blob-cassandra/pom.xml b/server/blob/blob-cassandra/pom.xml
index 6f6e03e..ba5426f 100644
--- a/server/blob/blob-cassandra/pom.xml
+++ b/server/blob/blob-cassandra/pom.xml
@@ -91,4 +91,17 @@
             <scope>test</scope>
         </dependency>
     </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <reuseForks>true</reuseForks>
+                    <forkCount>2</forkCount>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
 </project>
diff --git a/server/blob/blob-objectstorage/pom.xml b/server/blob/blob-objectstorage/pom.xml
index 5729d35..60de91c 100644
--- a/server/blob/blob-objectstorage/pom.xml
+++ b/server/blob/blob-objectstorage/pom.xml
@@ -131,4 +131,17 @@
             <artifactId>slf4j-api</artifactId>
         </dependency>
     </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <reuseForks>true</reuseForks>
+                    <forkCount>1C</forkCount>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
 </project>
diff --git a/server/data/data-cassandra/pom.xml b/server/data/data-cassandra/pom.xml
index 2cb1974..a2f9daa 100644
--- a/server/data/data-cassandra/pom.xml
+++ b/server/data/data-cassandra/pom.xml
@@ -148,4 +148,17 @@
             <scope>test</scope>
         </dependency>
     </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <reuseForks>true</reuseForks>
+                    <forkCount>2</forkCount>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
 </project>
diff --git a/server/mailrepository/mailrepository-cassandra/pom.xml b/server/mailrepository/mailrepository-cassandra/pom.xml
index fb8f3c9..5647aeb 100644
--- a/server/mailrepository/mailrepository-cassandra/pom.xml
+++ b/server/mailrepository/mailrepository-cassandra/pom.xml
@@ -83,4 +83,17 @@
             <scope>test</scope>
         </dependency>
     </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <reuseForks>true</reuseForks>
+                    <forkCount>2</forkCount>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
 </project>


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


[james-project] 23/28: JAMES-3350 Split Guice server tests to better leverage lifecycle benefits

Posted by bt...@apache.org.
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 0d8348b5051e6d471f3bfb6175e704606103c36d
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Tue Jul 28 14:04:43 2020 +0700

    JAMES-3350 Split Guice server tests to better leverage lifecycle benefits
    
    Note that we don't need separate static extensions
---
 ...va => WithCassandraBlobStoreImmutableTest.java} | 21 +++---
 .../apache/james/WithCassandraBlobStoreTest.java   | 16 +---
 ...eExtension.java => WithCacheImmutableTest.java} | 55 +++-----------
 ...ithCacheTest.java => WithCacheMutableTest.java} | 10 ++-
 .../org/apache/james/WithCassandraBlobStore.java   | 88 ----------------------
 .../james/WithCassandraBlobStoreImmutableTest.java | 49 ++++++++++++
 ...java => WithCassandraBlobStoreMutableTest.java} | 10 ++-
 .../apache/james/WithDefaultAwsS3Extension.java    | 71 -----------------
 ...est.java => WithDefaultAwsS3ImmutableTest.java} | 11 ++-
 ...eTest.java => WithDefaultAwsS3MutableTest.java} | 12 ++-
 .../apache/james/WithDefaultSwiftExtension.java    | 71 -----------------
 ...est.java => WithDefaultSwiftImmutableTest.java} | 11 ++-
 ...eTest.java => WithDefaultSwiftMutableTest.java} | 12 ++-
 .../apache/james/WithEncryptedAwsS3Extension.java  | 72 ------------------
 ...t.java => WithEncryptedAwsS3ImmutableTest.java} | 12 ++-
 ...est.java => WithEncryptedAwsS3MutableTest.java} | 13 +++-
 .../apache/james/WithEncryptedSwiftExtension.java  | 72 ------------------
 ...t.java => WithEncryptedSwiftImmutableTest.java} | 12 ++-
 ...est.java => WithEncryptedSwiftMutableTest.java} | 13 +++-
 ...n.java => WithScanningSearchImmutableTest.java} | 56 +++-----------
 ...est.java => WithScanningSearchMutableTest.java} | 10 ++-
 .../james/jmap/draft/JmapJamesServerContract.java  | 25 +++---
 .../memory/MemoryJwtFilterIntegrationTest.java     |  1 -
 23 files changed, 182 insertions(+), 541 deletions(-)

diff --git a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/WithCassandraBlobStoreTest.java b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/WithCassandraBlobStoreImmutableTest.java
similarity index 57%
copy from server/container/guice/cassandra-guice/src/test/java/org/apache/james/WithCassandraBlobStoreTest.java
copy to server/container/guice/cassandra-guice/src/test/java/org/apache/james/WithCassandraBlobStoreImmutableTest.java
index d8f99b4..884e061 100644
--- a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/WithCassandraBlobStoreTest.java
+++ b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/WithCassandraBlobStoreImmutableTest.java
@@ -24,16 +24,19 @@ import org.apache.james.jmap.draft.methods.integration.SpamAssassinModuleExtensi
 import org.apache.james.modules.TestJMAPServerModule;
 import org.junit.jupiter.api.extension.RegisterExtension;
 
-class WithCassandraBlobStoreTest implements JmapJamesServerContract, MailsShouldBeWellReceived, JamesServerContract {
-
+class WithCassandraBlobStoreImmutableTest implements JmapJamesServerContract, JamesServerContract {
     @RegisterExtension
-    static JamesServerExtension jamesServerExtension = TestingDistributedJamesServerBuilder.withSearchConfiguration(SearchConfiguration.elasticSearch())
-        .extension(new DockerElasticSearchExtension())
-        .extension(new CassandraExtension())
-        .extension(new SpamAssassinModuleExtension())
-        .server(configuration -> CassandraJamesServerMain.createServer(configuration)
-            .overrideWith(new TestJMAPServerModule())
-            .overrideWith(JmapJamesServerContract.DOMAIN_LIST_CONFIGURATION_MODULE))
+    static JamesServerExtension jamesServerExtension = baseExtensionBuilder()
+        .lifeCycle(JamesServerExtension.Lifecycle.PER_CLASS)
         .build();
 
+    static JamesServerBuilder<CassandraJamesServerConfiguration> baseExtensionBuilder() {
+        return TestingDistributedJamesServerBuilder.withSearchConfiguration(SearchConfiguration.elasticSearch())
+            .extension(new DockerElasticSearchExtension())
+            .extension(new CassandraExtension())
+            .extension(new SpamAssassinModuleExtension())
+            .server(configuration -> CassandraJamesServerMain.createServer(configuration)
+                .overrideWith(new TestJMAPServerModule())
+                .overrideWith(JmapJamesServerContract.DOMAIN_LIST_CONFIGURATION_MODULE));
+    }
 }
diff --git a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/WithCassandraBlobStoreTest.java b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/WithCassandraBlobStoreTest.java
index d8f99b4..2bf74d8 100644
--- a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/WithCassandraBlobStoreTest.java
+++ b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/WithCassandraBlobStoreTest.java
@@ -19,21 +19,11 @@
 
 package org.apache.james;
 
-import org.apache.james.jmap.draft.JmapJamesServerContract;
-import org.apache.james.jmap.draft.methods.integration.SpamAssassinModuleExtension;
-import org.apache.james.modules.TestJMAPServerModule;
 import org.junit.jupiter.api.extension.RegisterExtension;
 
-class WithCassandraBlobStoreTest implements JmapJamesServerContract, MailsShouldBeWellReceived, JamesServerContract {
-
+class WithCassandraBlobStoreTest implements MailsShouldBeWellReceived {
     @RegisterExtension
-    static JamesServerExtension jamesServerExtension = TestingDistributedJamesServerBuilder.withSearchConfiguration(SearchConfiguration.elasticSearch())
-        .extension(new DockerElasticSearchExtension())
-        .extension(new CassandraExtension())
-        .extension(new SpamAssassinModuleExtension())
-        .server(configuration -> CassandraJamesServerMain.createServer(configuration)
-            .overrideWith(new TestJMAPServerModule())
-            .overrideWith(JmapJamesServerContract.DOMAIN_LIST_CONFIGURATION_MODULE))
+    static JamesServerExtension jamesServerExtension = WithCassandraBlobStoreImmutableTest.baseExtensionBuilder()
+        .lifeCycle(JamesServerExtension.Lifecycle.PER_TEST)
         .build();
-
 }
diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCacheExtension.java b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCacheImmutableTest.java
similarity index 55%
rename from server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCacheExtension.java
rename to server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCacheImmutableTest.java
index a971e3e..5dbcf14 100644
--- a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCacheExtension.java
+++ b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCacheImmutableTest.java
@@ -24,21 +24,17 @@ import org.apache.james.modules.AwsS3BlobStoreExtension;
 import org.apache.james.modules.RabbitMQExtension;
 import org.apache.james.modules.TestJMAPServerModule;
 import org.apache.james.modules.blobstore.BlobStoreConfiguration;
-import org.junit.jupiter.api.extension.AfterAllCallback;
-import org.junit.jupiter.api.extension.AfterEachCallback;
-import org.junit.jupiter.api.extension.BeforeAllCallback;
-import org.junit.jupiter.api.extension.BeforeEachCallback;
-import org.junit.jupiter.api.extension.ExtensionContext;
-import org.junit.jupiter.api.extension.ParameterContext;
-import org.junit.jupiter.api.extension.ParameterResolutionException;
-import org.junit.jupiter.api.extension.ParameterResolver;
+import org.junit.jupiter.api.extension.RegisterExtension;
 
-public class WithCacheExtension implements BeforeAllCallback, AfterAllCallback, BeforeEachCallback, AfterEachCallback, ParameterResolver {
 
-    private final JamesServerExtension jamesServerExtension;
+class WithCacheImmutableTest implements JmapJamesServerContract, JamesServerContract {
+    @RegisterExtension
+    static JamesServerExtension jamesServerExtension = baseExtensionBuilder()
+        .lifeCycle(JamesServerExtension.Lifecycle.PER_CLASS)
+        .build();
 
-    WithCacheExtension() {
-        jamesServerExtension = new JamesServerBuilder<CassandraRabbitMQJamesConfiguration>(tmpDir ->
+    static JamesServerBuilder<CassandraRabbitMQJamesConfiguration> baseExtensionBuilder() {
+        return new JamesServerBuilder<CassandraRabbitMQJamesConfiguration>(tmpDir ->
             CassandraRabbitMQJamesConfiguration.builder()
                 .workingDirectory(tmpDir)
                 .configurationFromClasspath()
@@ -54,37 +50,6 @@ public class WithCacheExtension implements BeforeAllCallback, AfterAllCallback,
             .extension(new AwsS3BlobStoreExtension())
             .server(configuration -> CassandraRabbitMQJamesServerMain.createServer(configuration)
                 .overrideWith(new TestJMAPServerModule())
-                .overrideWith(JmapJamesServerContract.DOMAIN_LIST_CONFIGURATION_MODULE))
-            .build();
+                .overrideWith(JmapJamesServerContract.DOMAIN_LIST_CONFIGURATION_MODULE));
     }
-
-    @Override
-    public void beforeAll(ExtensionContext context) throws Exception {
-        jamesServerExtension.beforeAll(context);
-    }
-
-    @Override
-    public void afterAll(ExtensionContext context) throws Exception {
-        jamesServerExtension.afterAll(context);
-    }
-
-    @Override
-    public void beforeEach(ExtensionContext context) throws Exception {
-        jamesServerExtension.beforeEach(context);
-    }
-
-    @Override
-    public void afterEach(ExtensionContext context) throws Exception {
-        jamesServerExtension.afterEach(context);
-    }
-
-    @Override
-    public boolean supportsParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException {
-        return (parameterContext.getParameter().getType() == GuiceJamesServer.class);
-    }
-
-    @Override
-    public Object resolveParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException {
-        return jamesServerExtension.getGuiceJamesServer();
-    }
-}
+}
\ No newline at end of file
diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCacheTest.java b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCacheMutableTest.java
similarity index 78%
rename from server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCacheTest.java
rename to server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCacheMutableTest.java
index ee5ebbc..53d8476 100644
--- a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCacheTest.java
+++ b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCacheMutableTest.java
@@ -19,9 +19,11 @@
 
 package org.apache.james;
 
-import org.apache.james.jmap.draft.JmapJamesServerContract;
-import org.junit.jupiter.api.extension.ExtendWith;
+import org.junit.jupiter.api.extension.RegisterExtension;
 
-@ExtendWith(WithCacheExtension.class)
-class WithCacheTest implements JmapJamesServerContract, MailsShouldBeWellReceived, JamesServerContract {
+class WithCacheMutableTest implements MailsShouldBeWellReceived {
+    @RegisterExtension
+    static JamesServerExtension jamesServerExtension = WithCacheImmutableTest.baseExtensionBuilder()
+        .lifeCycle(JamesServerExtension.Lifecycle.PER_TEST)
+        .build();
 }
\ No newline at end of file
diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCassandraBlobStore.java b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCassandraBlobStore.java
deleted file mode 100644
index 98dd3a6..0000000
--- a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCassandraBlobStore.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.james;
-
-import org.apache.james.jmap.draft.JmapJamesServerContract;
-import org.apache.james.modules.RabbitMQExtension;
-import org.apache.james.modules.TestJMAPServerModule;
-import org.apache.james.modules.blobstore.BlobStoreConfiguration;
-import org.junit.jupiter.api.extension.AfterAllCallback;
-import org.junit.jupiter.api.extension.AfterEachCallback;
-import org.junit.jupiter.api.extension.BeforeAllCallback;
-import org.junit.jupiter.api.extension.BeforeEachCallback;
-import org.junit.jupiter.api.extension.ExtensionContext;
-import org.junit.jupiter.api.extension.ParameterContext;
-import org.junit.jupiter.api.extension.ParameterResolutionException;
-import org.junit.jupiter.api.extension.ParameterResolver;
-
-public class WithCassandraBlobStore implements BeforeAllCallback, AfterAllCallback, BeforeEachCallback, AfterEachCallback, ParameterResolver {
-
-    private final JamesServerExtension jamesServerExtension;
-
-    WithCassandraBlobStore() {
-        jamesServerExtension = new JamesServerBuilder<CassandraRabbitMQJamesConfiguration>(tmpDir ->
-            CassandraRabbitMQJamesConfiguration.builder()
-                .workingDirectory(tmpDir)
-                .configurationFromClasspath()
-                .blobStore(BlobStoreConfiguration.builder()
-                        .cassandra()
-                        .disableCache()
-                        .passthrough())
-                .searchConfiguration(SearchConfiguration.elasticSearch())
-                .build())
-            .extension(new DockerElasticSearchExtension())
-            .extension(new CassandraExtension())
-            .extension(new RabbitMQExtension())
-            .server(configuration -> CassandraRabbitMQJamesServerMain.createServer(configuration)
-                .overrideWith(new TestJMAPServerModule())
-                .overrideWith(JmapJamesServerContract.DOMAIN_LIST_CONFIGURATION_MODULE))
-            .build();
-    }
-
-    @Override
-    public void beforeAll(ExtensionContext context) throws Exception {
-        jamesServerExtension.beforeAll(context);
-    }
-
-    @Override
-    public void afterAll(ExtensionContext context) throws Exception {
-        jamesServerExtension.afterAll(context);
-    }
-
-    @Override
-    public void beforeEach(ExtensionContext context) throws Exception {
-        jamesServerExtension.beforeEach(context);
-    }
-
-    @Override
-    public void afterEach(ExtensionContext context) throws Exception {
-        jamesServerExtension.afterEach(context);
-    }
-
-    @Override
-    public boolean supportsParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException {
-        return (parameterContext.getParameter().getType() == GuiceJamesServer.class);
-    }
-
-    @Override
-    public Object resolveParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException {
-        return jamesServerExtension.getGuiceJamesServer();
-    }
-}
diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCassandraBlobStoreImmutableTest.java b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCassandraBlobStoreImmutableTest.java
new file mode 100644
index 0000000..f6d1ed6
--- /dev/null
+++ b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCassandraBlobStoreImmutableTest.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.james;
+
+import org.apache.james.jmap.draft.JmapJamesServerContract;
+import org.apache.james.modules.RabbitMQExtension;
+import org.apache.james.modules.TestJMAPServerModule;
+import org.apache.james.modules.blobstore.BlobStoreConfiguration;
+import org.junit.jupiter.api.extension.RegisterExtension;
+
+public class WithCassandraBlobStoreImmutableTest implements JmapJamesServerContract, JamesServerContract {
+    @RegisterExtension
+    static JamesServerExtension jamesServerExtension = baseExtensionBuilder()
+        .lifeCycle(JamesServerExtension.Lifecycle.PER_CLASS)
+        .build();
+
+    static JamesServerBuilder<CassandraRabbitMQJamesConfiguration> baseExtensionBuilder() {
+        return new JamesServerBuilder<CassandraRabbitMQJamesConfiguration>(tmpDir ->
+            CassandraRabbitMQJamesConfiguration.builder()
+                .workingDirectory(tmpDir)
+                .configurationFromClasspath()
+                .blobStore(BlobStoreConfiguration.cassandra())
+                .searchConfiguration(SearchConfiguration.elasticSearch())
+                .build())
+            .extension(new DockerElasticSearchExtension())
+            .extension(new CassandraExtension())
+            .extension(new RabbitMQExtension())
+            .server(configuration -> CassandraRabbitMQJamesServerMain.createServer(configuration)
+                .overrideWith(new TestJMAPServerModule())
+                .overrideWith(JmapJamesServerContract.DOMAIN_LIST_CONFIGURATION_MODULE));
+    }
+}
diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCassandraBlobStoreTest.java b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCassandraBlobStoreMutableTest.java
similarity index 70%
copy from server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCassandraBlobStoreTest.java
copy to server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCassandraBlobStoreMutableTest.java
index 33219bb..cbc908f 100644
--- a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCassandraBlobStoreTest.java
+++ b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCassandraBlobStoreMutableTest.java
@@ -19,9 +19,11 @@
 
 package org.apache.james;
 
-import org.apache.james.jmap.draft.JmapJamesServerContract;
-import org.junit.jupiter.api.extension.ExtendWith;
+import org.junit.jupiter.api.extension.RegisterExtension;
 
-@ExtendWith(WithCassandraBlobStore.class)
-public class WithCassandraBlobStoreTest implements JmapJamesServerContract, MailsShouldBeWellReceived, JamesServerContract {
+public class WithCassandraBlobStoreMutableTest implements MailsShouldBeWellReceived {
+    @RegisterExtension
+    static JamesServerExtension jamesServerExtension = WithCassandraBlobStoreImmutableTest.baseExtensionBuilder()
+        .lifeCycle(JamesServerExtension.Lifecycle.PER_TEST)
+        .build();
 }
diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithDefaultAwsS3Extension.java b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithDefaultAwsS3Extension.java
deleted file mode 100644
index 03a035e..0000000
--- a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithDefaultAwsS3Extension.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.james;
-
-import org.apache.james.modules.AwsS3BlobStoreExtension;
-import org.junit.jupiter.api.extension.AfterAllCallback;
-import org.junit.jupiter.api.extension.AfterEachCallback;
-import org.junit.jupiter.api.extension.BeforeAllCallback;
-import org.junit.jupiter.api.extension.BeforeEachCallback;
-import org.junit.jupiter.api.extension.ExtensionContext;
-import org.junit.jupiter.api.extension.ParameterContext;
-import org.junit.jupiter.api.extension.ParameterResolutionException;
-import org.junit.jupiter.api.extension.ParameterResolver;
-
-public class WithDefaultAwsS3Extension implements BeforeAllCallback, AfterAllCallback, BeforeEachCallback, AfterEachCallback, ParameterResolver {
-
-    private final JamesServerExtension jamesServerExtension;
-
-    WithDefaultAwsS3Extension() {
-        jamesServerExtension = CassandraRabbitMQJamesServerFixture.baseExtensionBuilder()
-            .extension(new AwsS3BlobStoreExtension())
-            .build();
-    }
-
-    @Override
-    public void beforeAll(ExtensionContext context) throws Exception {
-        jamesServerExtension.beforeAll(context);
-    }
-
-    @Override
-    public void afterAll(ExtensionContext context) throws Exception {
-        jamesServerExtension.afterAll(context);
-    }
-
-    @Override
-    public void beforeEach(ExtensionContext context) throws Exception {
-        jamesServerExtension.beforeEach(context);
-    }
-
-    @Override
-    public void afterEach(ExtensionContext context) throws Exception {
-        jamesServerExtension.afterEach(context);
-    }
-
-    @Override
-    public boolean supportsParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException {
-        return (parameterContext.getParameter().getType() == GuiceJamesServer.class);
-    }
-
-    @Override
-    public Object resolveParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException {
-        return jamesServerExtension.getGuiceJamesServer();
-    }
-}
diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithDefaultAwsS3Test.java b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithDefaultAwsS3ImmutableTest.java
similarity index 75%
rename from server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithDefaultAwsS3Test.java
rename to server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithDefaultAwsS3ImmutableTest.java
index 7a3dfce..207f3cc 100644
--- a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithDefaultAwsS3Test.java
+++ b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithDefaultAwsS3ImmutableTest.java
@@ -24,12 +24,17 @@ import static org.assertj.core.api.Assertions.assertThat;
 import org.apache.james.blob.objectstorage.DefaultPayloadCodec;
 import org.apache.james.blob.objectstorage.PayloadCodec;
 import org.apache.james.jmap.draft.JmapJamesServerContract;
+import org.apache.james.modules.AwsS3BlobStoreExtension;
 import org.apache.james.modules.objectstorage.aws.s3.DockerAwsS3TestRule;
 import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtendWith;
+import org.junit.jupiter.api.extension.RegisterExtension;
 
-@ExtendWith(WithDefaultAwsS3Extension.class)
-public class WithDefaultAwsS3Test implements JmapJamesServerContract, MailsShouldBeWellReceived, JamesServerContract {
+public class WithDefaultAwsS3ImmutableTest implements JmapJamesServerContract, JamesServerContract {
+    @RegisterExtension
+    static JamesServerExtension jamesServerExtension = CassandraRabbitMQJamesServerFixture.baseExtensionBuilder()
+        .extension(new AwsS3BlobStoreExtension())
+        .lifeCycle(JamesServerExtension.Lifecycle.PER_CLASS)
+        .build();
 
     @Test
     void defaultPayloadShouldBeByDefault(GuiceJamesServer jamesServer) {
diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCassandraBlobStoreTest.java b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithDefaultAwsS3MutableTest.java
similarity index 64%
copy from server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCassandraBlobStoreTest.java
copy to server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithDefaultAwsS3MutableTest.java
index 33219bb..8e284d1 100644
--- a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCassandraBlobStoreTest.java
+++ b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithDefaultAwsS3MutableTest.java
@@ -19,9 +19,13 @@
 
 package org.apache.james;
 
-import org.apache.james.jmap.draft.JmapJamesServerContract;
-import org.junit.jupiter.api.extension.ExtendWith;
+import org.apache.james.modules.AwsS3BlobStoreExtension;
+import org.junit.jupiter.api.extension.RegisterExtension;
 
-@ExtendWith(WithCassandraBlobStore.class)
-public class WithCassandraBlobStoreTest implements JmapJamesServerContract, MailsShouldBeWellReceived, JamesServerContract {
+public class WithDefaultAwsS3MutableTest implements MailsShouldBeWellReceived {
+    @RegisterExtension
+    static JamesServerExtension jamesServerExtension = CassandraRabbitMQJamesServerFixture.baseExtensionBuilder()
+        .extension(new AwsS3BlobStoreExtension())
+        .lifeCycle(JamesServerExtension.Lifecycle.PER_TEST)
+        .build();
 }
diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithDefaultSwiftExtension.java b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithDefaultSwiftExtension.java
deleted file mode 100644
index 3e867aa..0000000
--- a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithDefaultSwiftExtension.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.james;
-
-import org.apache.james.modules.SwiftBlobStoreExtension;
-import org.junit.jupiter.api.extension.AfterAllCallback;
-import org.junit.jupiter.api.extension.AfterEachCallback;
-import org.junit.jupiter.api.extension.BeforeAllCallback;
-import org.junit.jupiter.api.extension.BeforeEachCallback;
-import org.junit.jupiter.api.extension.ExtensionContext;
-import org.junit.jupiter.api.extension.ParameterContext;
-import org.junit.jupiter.api.extension.ParameterResolutionException;
-import org.junit.jupiter.api.extension.ParameterResolver;
-
-public class WithDefaultSwiftExtension implements BeforeAllCallback, AfterAllCallback, BeforeEachCallback, AfterEachCallback, ParameterResolver  {
-
-    private final JamesServerExtension jamesServerExtension;
-
-    WithDefaultSwiftExtension() {
-        jamesServerExtension = CassandraRabbitMQJamesServerFixture.baseExtensionBuilder()
-            .extension(new SwiftBlobStoreExtension())
-            .build();
-    }
-
-    @Override
-    public void beforeAll(ExtensionContext context) throws Exception {
-        jamesServerExtension.beforeAll(context);
-    }
-
-    @Override
-    public void afterAll(ExtensionContext context) throws Exception {
-        jamesServerExtension.afterAll(context);
-    }
-
-    @Override
-    public void beforeEach(ExtensionContext context) throws Exception {
-        jamesServerExtension.beforeEach(context);
-    }
-
-    @Override
-    public void afterEach(ExtensionContext context) throws Exception {
-        jamesServerExtension.afterEach(context);
-    }
-
-    @Override
-    public boolean supportsParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException {
-        return (parameterContext.getParameter().getType() == GuiceJamesServer.class);
-    }
-
-    @Override
-    public Object resolveParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException {
-        return jamesServerExtension.getGuiceJamesServer();
-    }
-}
diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithDefaultSwiftTest.java b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithDefaultSwiftImmutableTest.java
similarity index 75%
rename from server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithDefaultSwiftTest.java
rename to server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithDefaultSwiftImmutableTest.java
index 0459647..f46a3c3 100644
--- a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithDefaultSwiftTest.java
+++ b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithDefaultSwiftImmutableTest.java
@@ -24,12 +24,17 @@ import static org.assertj.core.api.Assertions.assertThat;
 import org.apache.james.blob.objectstorage.DefaultPayloadCodec;
 import org.apache.james.blob.objectstorage.PayloadCodec;
 import org.apache.james.jmap.draft.JmapJamesServerContract;
+import org.apache.james.modules.SwiftBlobStoreExtension;
 import org.apache.james.modules.objectstorage.swift.DockerSwiftTestRule;
 import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtendWith;
+import org.junit.jupiter.api.extension.RegisterExtension;
 
-@ExtendWith(WithDefaultSwiftExtension.class)
-public class WithDefaultSwiftTest implements JmapJamesServerContract, MailsShouldBeWellReceived, JamesServerContract {
+public class WithDefaultSwiftImmutableTest implements JmapJamesServerContract, JamesServerContract {
+    @RegisterExtension
+    static JamesServerExtension jamesServerExtension = CassandraRabbitMQJamesServerFixture.baseExtensionBuilder()
+        .extension(new SwiftBlobStoreExtension())
+        .lifeCycle(JamesServerExtension.Lifecycle.PER_CLASS)
+        .build();
 
     @Test
     void defaultPayloadShouldBeByDefault(GuiceJamesServer jamesServer) {
diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCassandraBlobStoreTest.java b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithDefaultSwiftMutableTest.java
similarity index 64%
copy from server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCassandraBlobStoreTest.java
copy to server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithDefaultSwiftMutableTest.java
index 33219bb..fe4ae75 100644
--- a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCassandraBlobStoreTest.java
+++ b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithDefaultSwiftMutableTest.java
@@ -19,9 +19,13 @@
 
 package org.apache.james;
 
-import org.apache.james.jmap.draft.JmapJamesServerContract;
-import org.junit.jupiter.api.extension.ExtendWith;
+import org.apache.james.modules.SwiftBlobStoreExtension;
+import org.junit.jupiter.api.extension.RegisterExtension;
 
-@ExtendWith(WithCassandraBlobStore.class)
-public class WithCassandraBlobStoreTest implements JmapJamesServerContract, MailsShouldBeWellReceived, JamesServerContract {
+public class WithDefaultSwiftMutableTest implements MailsShouldBeWellReceived {
+    @RegisterExtension
+    static JamesServerExtension jamesServerExtension = CassandraRabbitMQJamesServerFixture.baseExtensionBuilder()
+        .extension(new SwiftBlobStoreExtension())
+        .lifeCycle(JamesServerExtension.Lifecycle.PER_TEST)
+        .build();
 }
diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithEncryptedAwsS3Extension.java b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithEncryptedAwsS3Extension.java
deleted file mode 100644
index c4927a2..0000000
--- a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithEncryptedAwsS3Extension.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.james;
-
-import org.apache.james.modules.AwsS3BlobStoreExtension;
-import org.apache.james.modules.objectstorage.PayloadCodecFactory;
-import org.junit.jupiter.api.extension.AfterAllCallback;
-import org.junit.jupiter.api.extension.AfterEachCallback;
-import org.junit.jupiter.api.extension.BeforeAllCallback;
-import org.junit.jupiter.api.extension.BeforeEachCallback;
-import org.junit.jupiter.api.extension.ExtensionContext;
-import org.junit.jupiter.api.extension.ParameterContext;
-import org.junit.jupiter.api.extension.ParameterResolutionException;
-import org.junit.jupiter.api.extension.ParameterResolver;
-
-public class WithEncryptedAwsS3Extension implements BeforeAllCallback, AfterAllCallback, BeforeEachCallback, AfterEachCallback, ParameterResolver {
-
-    private final JamesServerExtension jamesServerExtension;
-
-    WithEncryptedAwsS3Extension() {
-        jamesServerExtension = CassandraRabbitMQJamesServerFixture.baseExtensionBuilder()
-            .extension(new AwsS3BlobStoreExtension(PayloadCodecFactory.AES256))
-            .build();
-    }
-
-    @Override
-    public void beforeAll(ExtensionContext context) throws Exception {
-        jamesServerExtension.beforeAll(context);
-    }
-
-    @Override
-    public void afterAll(ExtensionContext context) throws Exception {
-        jamesServerExtension.afterAll(context);
-    }
-
-    @Override
-    public void beforeEach(ExtensionContext context) throws Exception {
-        jamesServerExtension.beforeEach(context);
-    }
-
-    @Override
-    public void afterEach(ExtensionContext context) throws Exception {
-        jamesServerExtension.afterEach(context);
-    }
-
-    @Override
-    public boolean supportsParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException {
-        return (parameterContext.getParameter().getType() == GuiceJamesServer.class);
-    }
-
-    @Override
-    public Object resolveParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException {
-        return jamesServerExtension.getGuiceJamesServer();
-    }
-}
diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithEncryptedAwsS3Test.java b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithEncryptedAwsS3ImmutableTest.java
similarity index 72%
rename from server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithEncryptedAwsS3Test.java
rename to server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithEncryptedAwsS3ImmutableTest.java
index aa500c6..c4172b7 100644
--- a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithEncryptedAwsS3Test.java
+++ b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithEncryptedAwsS3ImmutableTest.java
@@ -24,12 +24,18 @@ import static org.assertj.core.api.Assertions.assertThat;
 import org.apache.james.blob.objectstorage.AESPayloadCodec;
 import org.apache.james.blob.objectstorage.PayloadCodec;
 import org.apache.james.jmap.draft.JmapJamesServerContract;
+import org.apache.james.modules.AwsS3BlobStoreExtension;
+import org.apache.james.modules.objectstorage.PayloadCodecFactory;
 import org.apache.james.modules.objectstorage.aws.s3.DockerAwsS3TestRule;
 import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtendWith;
+import org.junit.jupiter.api.extension.RegisterExtension;
 
-@ExtendWith(WithEncryptedAwsS3Extension.class)
-public class WithEncryptedAwsS3Test implements JmapJamesServerContract, MailsShouldBeWellReceived, JamesServerContract {
+public class WithEncryptedAwsS3ImmutableTest implements JmapJamesServerContract, JamesServerContract {
+    @RegisterExtension
+    static JamesServerExtension jamesServerExtension = CassandraRabbitMQJamesServerFixture.baseExtensionBuilder()
+        .extension(new AwsS3BlobStoreExtension(PayloadCodecFactory.AES256))
+        .lifeCycle(JamesServerExtension.Lifecycle.PER_CLASS)
+        .build();
 
     @Test
     void encryptedPayloadShouldBeConfiguredWhenProvidingEncryptedPayloadConfiguration(GuiceJamesServer jamesServer) {
diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCassandraBlobStoreTest.java b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithEncryptedAwsS3MutableTest.java
similarity index 60%
copy from server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCassandraBlobStoreTest.java
copy to server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithEncryptedAwsS3MutableTest.java
index 33219bb..361e575 100644
--- a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCassandraBlobStoreTest.java
+++ b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithEncryptedAwsS3MutableTest.java
@@ -19,9 +19,14 @@
 
 package org.apache.james;
 
-import org.apache.james.jmap.draft.JmapJamesServerContract;
-import org.junit.jupiter.api.extension.ExtendWith;
+import org.apache.james.modules.AwsS3BlobStoreExtension;
+import org.apache.james.modules.objectstorage.PayloadCodecFactory;
+import org.junit.jupiter.api.extension.RegisterExtension;
 
-@ExtendWith(WithCassandraBlobStore.class)
-public class WithCassandraBlobStoreTest implements JmapJamesServerContract, MailsShouldBeWellReceived, JamesServerContract {
+public class WithEncryptedAwsS3MutableTest implements MailsShouldBeWellReceived {
+    @RegisterExtension
+    static JamesServerExtension jamesServerExtension = CassandraRabbitMQJamesServerFixture.baseExtensionBuilder()
+        .extension(new AwsS3BlobStoreExtension(PayloadCodecFactory.AES256))
+        .lifeCycle(JamesServerExtension.Lifecycle.PER_TEST)
+        .build();
 }
diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithEncryptedSwiftExtension.java b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithEncryptedSwiftExtension.java
deleted file mode 100644
index 422a281..0000000
--- a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithEncryptedSwiftExtension.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.james;
-
-import org.apache.james.modules.SwiftBlobStoreExtension;
-import org.apache.james.modules.objectstorage.PayloadCodecFactory;
-import org.junit.jupiter.api.extension.AfterAllCallback;
-import org.junit.jupiter.api.extension.AfterEachCallback;
-import org.junit.jupiter.api.extension.BeforeAllCallback;
-import org.junit.jupiter.api.extension.BeforeEachCallback;
-import org.junit.jupiter.api.extension.ExtensionContext;
-import org.junit.jupiter.api.extension.ParameterContext;
-import org.junit.jupiter.api.extension.ParameterResolutionException;
-import org.junit.jupiter.api.extension.ParameterResolver;
-
-public class WithEncryptedSwiftExtension implements BeforeAllCallback, AfterAllCallback, BeforeEachCallback, AfterEachCallback, ParameterResolver {
-
-    private final JamesServerExtension jamesServerExtension;
-
-    WithEncryptedSwiftExtension() {
-        jamesServerExtension = CassandraRabbitMQJamesServerFixture.baseExtensionBuilder()
-            .extension(new SwiftBlobStoreExtension(PayloadCodecFactory.AES256))
-            .build();
-    }
-
-    @Override
-    public void beforeAll(ExtensionContext context) throws Exception {
-        jamesServerExtension.beforeAll(context);
-    }
-
-    @Override
-    public void afterAll(ExtensionContext context) throws Exception {
-        jamesServerExtension.afterAll(context);
-    }
-
-    @Override
-    public void beforeEach(ExtensionContext context) throws Exception {
-        jamesServerExtension.beforeEach(context);
-    }
-
-    @Override
-    public void afterEach(ExtensionContext context) throws Exception {
-        jamesServerExtension.afterEach(context);
-    }
-
-    @Override
-    public boolean supportsParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException {
-        return (parameterContext.getParameter().getType() == GuiceJamesServer.class);
-    }
-
-    @Override
-    public Object resolveParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException {
-        return jamesServerExtension.getGuiceJamesServer();
-    }
-}
diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithEncryptedSwiftTest.java b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithEncryptedSwiftImmutableTest.java
similarity index 72%
rename from server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithEncryptedSwiftTest.java
rename to server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithEncryptedSwiftImmutableTest.java
index 0f998bc..aeb59d8 100644
--- a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithEncryptedSwiftTest.java
+++ b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithEncryptedSwiftImmutableTest.java
@@ -24,12 +24,18 @@ import static org.assertj.core.api.Assertions.assertThat;
 import org.apache.james.blob.objectstorage.AESPayloadCodec;
 import org.apache.james.blob.objectstorage.PayloadCodec;
 import org.apache.james.jmap.draft.JmapJamesServerContract;
+import org.apache.james.modules.SwiftBlobStoreExtension;
+import org.apache.james.modules.objectstorage.PayloadCodecFactory;
 import org.apache.james.modules.objectstorage.swift.DockerSwiftTestRule;
 import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtendWith;
+import org.junit.jupiter.api.extension.RegisterExtension;
 
-@ExtendWith(WithEncryptedSwiftExtension.class)
-public class WithEncryptedSwiftTest implements JmapJamesServerContract, MailsShouldBeWellReceived, JamesServerContract {
+public class WithEncryptedSwiftImmutableTest implements JmapJamesServerContract, JamesServerContract {
+    @RegisterExtension
+    static JamesServerExtension jamesServerExtension = CassandraRabbitMQJamesServerFixture.baseExtensionBuilder()
+        .extension(new SwiftBlobStoreExtension(PayloadCodecFactory.AES256))
+        .lifeCycle(JamesServerExtension.Lifecycle.PER_CLASS)
+        .build();
 
     @Test
     void encryptedPayloadShouldBeConfiguredWhenProvidingEncryptedPayloadConfiguration(GuiceJamesServer jamesServer) {
diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCassandraBlobStoreTest.java b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithEncryptedSwiftMutableTest.java
similarity index 60%
rename from server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCassandraBlobStoreTest.java
rename to server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithEncryptedSwiftMutableTest.java
index 33219bb..7f45b8e 100644
--- a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCassandraBlobStoreTest.java
+++ b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithEncryptedSwiftMutableTest.java
@@ -19,9 +19,14 @@
 
 package org.apache.james;
 
-import org.apache.james.jmap.draft.JmapJamesServerContract;
-import org.junit.jupiter.api.extension.ExtendWith;
+import org.apache.james.modules.SwiftBlobStoreExtension;
+import org.apache.james.modules.objectstorage.PayloadCodecFactory;
+import org.junit.jupiter.api.extension.RegisterExtension;
 
-@ExtendWith(WithCassandraBlobStore.class)
-public class WithCassandraBlobStoreTest implements JmapJamesServerContract, MailsShouldBeWellReceived, JamesServerContract {
+public class WithEncryptedSwiftMutableTest implements MailsShouldBeWellReceived {
+    @RegisterExtension
+    static JamesServerExtension jamesServerExtension = CassandraRabbitMQJamesServerFixture.baseExtensionBuilder()
+        .extension(new SwiftBlobStoreExtension(PayloadCodecFactory.AES256))
+        .lifeCycle(JamesServerExtension.Lifecycle.PER_TEST)
+        .build();
 }
diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithScanningSearchExtension.java b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithScanningSearchImmutableTest.java
similarity index 54%
rename from server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithScanningSearchExtension.java
rename to server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithScanningSearchImmutableTest.java
index ddeaabe..90fddc6 100644
--- a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithScanningSearchExtension.java
+++ b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithScanningSearchImmutableTest.java
@@ -24,21 +24,11 @@ import org.apache.james.modules.AwsS3BlobStoreExtension;
 import org.apache.james.modules.RabbitMQExtension;
 import org.apache.james.modules.TestJMAPServerModule;
 import org.apache.james.modules.blobstore.BlobStoreConfiguration;
-import org.junit.jupiter.api.extension.AfterAllCallback;
-import org.junit.jupiter.api.extension.AfterEachCallback;
-import org.junit.jupiter.api.extension.BeforeAllCallback;
-import org.junit.jupiter.api.extension.BeforeEachCallback;
-import org.junit.jupiter.api.extension.ExtensionContext;
-import org.junit.jupiter.api.extension.ParameterContext;
-import org.junit.jupiter.api.extension.ParameterResolutionException;
-import org.junit.jupiter.api.extension.ParameterResolver;
+import org.junit.jupiter.api.extension.RegisterExtension;
 
-public class WithScanningSearchExtension implements BeforeAllCallback, AfterAllCallback, BeforeEachCallback, AfterEachCallback, ParameterResolver {
-
-    private final JamesServerExtension jamesServerExtension;
-
-    WithScanningSearchExtension() {
-        jamesServerExtension = new JamesServerBuilder<CassandraRabbitMQJamesConfiguration>(tmpDir ->
+class WithScanningSearchImmutableTest implements JmapJamesServerContract, JamesServerContract {
+    static JamesServerBuilder<CassandraRabbitMQJamesConfiguration> baseExtension() {
+        return new JamesServerBuilder<CassandraRabbitMQJamesConfiguration>(tmpDir ->
             CassandraRabbitMQJamesConfiguration.builder()
                 .workingDirectory(tmpDir)
                 .configurationFromClasspath()
@@ -53,37 +43,11 @@ public class WithScanningSearchExtension implements BeforeAllCallback, AfterAllC
             .extension(new AwsS3BlobStoreExtension())
             .server(configuration -> CassandraRabbitMQJamesServerMain.createServer(configuration)
                 .overrideWith(new TestJMAPServerModule())
-                .overrideWith(JmapJamesServerContract.DOMAIN_LIST_CONFIGURATION_MODULE))
-            .build();
-    }
-
-    @Override
-    public void beforeAll(ExtensionContext context) throws Exception {
-        jamesServerExtension.beforeAll(context);
+                .overrideWith(JmapJamesServerContract.DOMAIN_LIST_CONFIGURATION_MODULE));
     }
 
-    @Override
-    public void afterAll(ExtensionContext context) throws Exception {
-        jamesServerExtension.afterAll(context);
-    }
-
-    @Override
-    public void beforeEach(ExtensionContext context) throws Exception {
-        jamesServerExtension.beforeEach(context);
-    }
-
-    @Override
-    public void afterEach(ExtensionContext context) throws Exception {
-        jamesServerExtension.afterEach(context);
-    }
-
-    @Override
-    public boolean supportsParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException {
-        return (parameterContext.getParameter().getType() == GuiceJamesServer.class);
-    }
-
-    @Override
-    public Object resolveParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException {
-        return jamesServerExtension.getGuiceJamesServer();
-    }
-}
+    @RegisterExtension
+    static JamesServerExtension jamesServerExtension = baseExtension()
+        .lifeCycle(JamesServerExtension.Lifecycle.PER_CLASS)
+        .build();
+}
\ No newline at end of file
diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithScanningSearchTest.java b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithScanningSearchMutableTest.java
similarity index 78%
rename from server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithScanningSearchTest.java
rename to server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithScanningSearchMutableTest.java
index ec30cc9..2a9ea35 100644
--- a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithScanningSearchTest.java
+++ b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithScanningSearchMutableTest.java
@@ -19,9 +19,11 @@
 
 package org.apache.james;
 
-import org.apache.james.jmap.draft.JmapJamesServerContract;
-import org.junit.jupiter.api.extension.ExtendWith;
+import org.junit.jupiter.api.extension.RegisterExtension;
 
-@ExtendWith(WithScanningSearchExtension.class)
-class WithScanningSearchTest implements JmapJamesServerContract, MailsShouldBeWellReceived, JamesServerContract {
+class WithScanningSearchMutableTest implements MailsShouldBeWellReceived {
+    @RegisterExtension
+    JamesServerExtension jamesServerExtension = WithScanningSearchImmutableTest.baseExtension()
+        .lifeCycle(JamesServerExtension.Lifecycle.PER_TEST)
+        .build();
 }
\ No newline at end of file
diff --git a/server/container/guice/protocols/jmap/src/test/java/org/apache/james/jmap/draft/JmapJamesServerContract.java b/server/container/guice/protocols/jmap/src/test/java/org/apache/james/jmap/draft/JmapJamesServerContract.java
index 461b0af..f9d7301 100644
--- a/server/container/guice/protocols/jmap/src/test/java/org/apache/james/jmap/draft/JmapJamesServerContract.java
+++ b/server/container/guice/protocols/jmap/src/test/java/org/apache/james/jmap/draft/JmapJamesServerContract.java
@@ -26,7 +26,6 @@ import java.nio.charset.StandardCharsets;
 
 import org.apache.james.GuiceJamesServer;
 import org.apache.james.domainlist.lib.DomainListConfiguration;
-import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
 import com.google.inject.Module;
@@ -34,6 +33,7 @@ import com.google.inject.Module;
 import io.restassured.RestAssured;
 import io.restassured.builder.RequestSpecBuilder;
 import io.restassured.http.ContentType;
+import io.restassured.specification.RequestSpecification;
 
 public interface JmapJamesServerContract {
     Module DOMAIN_LIST_CONFIGURATION_MODULE = binder -> binder.bind(DomainListConfiguration.class)
@@ -43,19 +43,9 @@ public interface JmapJamesServerContract {
             .build());
     String JAMES_SERVER_HOST = "127.0.0.1";
 
-    @BeforeEach
-    default void setup(GuiceJamesServer server) throws Exception {
-
-        RestAssured.requestSpecification = new RequestSpecBuilder()
-            .setContentType(ContentType.JSON)
-            .setAccept(ContentType.JSON)
-            .setConfig(newConfig().encoderConfig(encoderConfig().defaultContentCharset(StandardCharsets.UTF_8)))
-            .setPort(server.getProbe(JmapGuiceProbe.class).getJmapPort().getValue())
-            .build();
-    }
-
     @Test
-    default void connectJMAPServerShouldRespondBadRequest() {
+    default void connectJMAPServerShouldRespondBadRequest(GuiceJamesServer server) {
+        RestAssured.requestSpecification = requestSpec(server);
         given()
             .body("{\"badAttributeName\": \"value\"}")
         .when()
@@ -63,4 +53,13 @@ public interface JmapJamesServerContract {
         .then()
             .statusCode(400);
     }
+
+    static RequestSpecification requestSpec(GuiceJamesServer server) {
+        return new RequestSpecBuilder()
+            .setContentType(ContentType.JSON)
+            .setAccept(ContentType.JSON)
+            .setConfig(newConfig().encoderConfig(encoderConfig().defaultContentCharset(StandardCharsets.UTF_8)))
+            .setPort(server.getProbe(JmapGuiceProbe.class).getJmapPort().getValue())
+            .build();
+    }
 }
diff --git a/server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/memory/MemoryJwtFilterIntegrationTest.java b/server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/memory/MemoryJwtFilterIntegrationTest.java
index f724152..c1aeca7 100644
--- a/server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/memory/MemoryJwtFilterIntegrationTest.java
+++ b/server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/memory/MemoryJwtFilterIntegrationTest.java
@@ -37,6 +37,5 @@ class MemoryJwtFilterIntegrationTest extends JwtFilterIntegrationTest {
             .overrideWith(new WebadminIntegrationTestModule())
             .overrideWith(binder -> binder.bind(AuthenticationFilter.class).to(JwtFilter.class))
             .overrideWith(binder -> binder.bind(JwtConfiguration.class).toInstance(jwtConfiguration())))
-        .lifeCycle(JamesServerExtension.Lifecycle.PER_CLASS)
         .build();
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


[james-project] 08/28: JAMES-3350 Remove an unneeded await call in GetMessageListMethodTest

Posted by bt...@apache.org.
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 2e33520e2239428ce29df7fcdbdaedff7e7a712c
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Mon Jul 27 10:10:34 2020 +0700

    JAMES-3350 Remove an unneeded await call in GetMessageListMethodTest
---
 .../james/jmap/draft/methods/integration/GetMessageListMethodTest.java   | 1 -
 1 file changed, 1 deletion(-)

diff --git a/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/GetMessageListMethodTest.java b/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/GetMessageListMethodTest.java
index a99d108..f130a7d 100644
--- a/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/GetMessageListMethodTest.java
+++ b/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/GetMessageListMethodTest.java
@@ -966,7 +966,6 @@ public abstract class GetMessageListMethodTest {
         mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, ALICE.asString(), "mailbox2");
         ComposedMessageId message2 = mailboxProbe.appendMessage(ALICE.asString(), MailboxPath.forUser(ALICE, "mailbox2"),
                 new ByteArrayInputStream("Subject: test2\r\n\r\ntestmail".getBytes()), new Date(), false, new Flags());
-        await();
 
         mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, otherUser, "mailbox");
         mailboxProbe.appendMessage(otherUser, MailboxPath.forUser(Username.of(otherUser), "mailbox"),


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


[james-project] 13/28: JAMES-3305 TaskId might be null

Posted by bt...@apache.org.
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 79b89150f077335fe754aa4f19178e68a3c9b914
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Mon Jul 27 13:34:47 2020 +0700

    JAMES-3305 TaskId might be null
---
 .../james/task/eventsourcing/distributed/RabbitMQWorkQueue.java      | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/server/task/task-distributed/src/main/java/org/apache/james/task/eventsourcing/distributed/RabbitMQWorkQueue.java b/server/task/task-distributed/src/main/java/org/apache/james/task/eventsourcing/distributed/RabbitMQWorkQueue.java
index 6f5e22e..d46bf71 100644
--- a/server/task/task-distributed/src/main/java/org/apache/james/task/eventsourcing/distributed/RabbitMQWorkQueue.java
+++ b/server/task/task-distributed/src/main/java/org/apache/james/task/eventsourcing/distributed/RabbitMQWorkQueue.java
@@ -135,7 +135,10 @@ public class RabbitMQWorkQueue implements WorkQueue {
                 .doOnNext(task -> delivery.ack())
                 .flatMap(task -> executeOnWorker(taskId, task)))
             .onErrorResume(error -> {
-                LOGGER.error("Unable to process {} {}", TASK_ID, delivery.getProperties().getHeaders().get(TASK_ID), error);
+                Optional<Object> taskId = Optional.ofNullable(delivery.getProperties())
+                    .flatMap(props -> Optional.ofNullable(props.getHeaders()))
+                    .flatMap(headers -> Optional.ofNullable(headers.get(TASK_ID)));
+                LOGGER.error("Unable to process {} {}", TASK_ID, taskId, error);
                 delivery.nack(!REQUEUE);
                 return Mono.empty();
             });


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


[james-project] 15/28: JAMES-3350 RabbitMQEventBusTest: replace a sleep by an await

Posted by bt...@apache.org.
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 4f812554b1452561285a20af6b82317056bbd511
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Mon Jul 27 15:06:20 2020 +0700

    JAMES-3350 RabbitMQEventBusTest: replace a sleep by an await
---
 .../java/org/apache/james/mailbox/events/ErrorHandlingContract.java  | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/events/ErrorHandlingContract.java b/mailbox/api/src/test/java/org/apache/james/mailbox/events/ErrorHandlingContract.java
index 96642cb..18bcb18 100644
--- a/mailbox/api/src/test/java/org/apache/james/mailbox/events/ErrorHandlingContract.java
+++ b/mailbox/api/src/test/java/org/apache/james/mailbox/events/ErrorHandlingContract.java
@@ -169,13 +169,14 @@ interface ErrorHandlingContract extends EventBusContract {
     }
 
     @Test
-    default void retriesBackOffShouldDelayByExponentialGrowth() throws Exception {
+    default void retriesBackOffShouldDelayByExponentialGrowth() {
         ThrowingListener throwingListener = throwingListener();
 
         eventBus().register(throwingListener, GROUP_A);
         eventBus().dispatch(EVENT, NO_KEYS).block();
 
-        Thread.sleep(getSpeedProfile().getShortWaitTime().toMillis());
+        getSpeedProfile().shortWaitCondition()
+            .untilAsserted(() -> assertThat(throwingListener.executionCount()).isEqualTo(4));
         SoftAssertions.assertSoftly(softly -> {
             List<Instant> timeElapsed = throwingListener.timeElapsed;
             softly.assertThat(timeElapsed).hasSize(RETRY_BACKOFF_CONFIGURATION.getMaxRetries() + 1);


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


[james-project] 02/28: JAMES-3350 Decrease forkedProcessTimeoutInSeconds as this avoids waiting needlessly for 2 hours

Posted by bt...@apache.org.
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 3bfa0e2b58992cc1a99857a0abf834cbe60e097c
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Mon Jul 27 09:14:35 2020 +0700

    JAMES-3350 Decrease forkedProcessTimeoutInSeconds as this avoids waiting needlessly for 2 hours
---
 pom.xml                                                               | 4 ++--
 server/blob/blob-memory/pom.xml                                       | 2 +-
 .../cassandra-jmap-draft-integration-testing/pom.xml                  | 4 ++--
 .../rabbitmq-jmap-draft-integration-testing/pom.xml                   | 4 ++--
 .../distributed-jmap-rfc-8621-integration-tests/pom.xml               | 4 ++--
 .../distributed-webadmin-integration-test/pom.xml                     | 4 ++--
 6 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/pom.xml b/pom.xml
index b692eb8..75851f8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3010,8 +3010,8 @@
                     <configuration>
                         <argLine>-Xms512m -Xmx1024m</argLine>
                         <reuseForks>true</reuseForks>
-                        <!-- Fail tests longer than 2 hours, prevent form random locking tests -->
-                        <forkedProcessTimeoutInSeconds>7200</forkedProcessTimeoutInSeconds>
+                        <!-- Fail tests longer than 20 minutes, prevent form random locking tests -->
+                        <forkedProcessTimeoutInSeconds>1200</forkedProcessTimeoutInSeconds>
                     </configuration>
                 </plugin>
                 <plugin>
diff --git a/server/blob/blob-memory/pom.xml b/server/blob/blob-memory/pom.xml
index 80e6f6a..cb002cb 100644
--- a/server/blob/blob-memory/pom.xml
+++ b/server/blob/blob-memory/pom.xml
@@ -88,7 +88,7 @@
                 <configuration>
                     <argLine>-Xms1024m -Xmx2048m</argLine>
                     <reuseForks>true</reuseForks>
-                    <forkedProcessTimeoutInSeconds>7200</forkedProcessTimeoutInSeconds>
+                    <forkedProcessTimeoutInSeconds>1200</forkedProcessTimeoutInSeconds>
                 </configuration>
             </plugin>
         </plugins>
diff --git a/server/protocols/jmap-draft-integration-testing/cassandra-jmap-draft-integration-testing/pom.xml b/server/protocols/jmap-draft-integration-testing/cassandra-jmap-draft-integration-testing/pom.xml
index ae3d02d..5b3bfc1 100644
--- a/server/protocols/jmap-draft-integration-testing/cassandra-jmap-draft-integration-testing/pom.xml
+++ b/server/protocols/jmap-draft-integration-testing/cassandra-jmap-draft-integration-testing/pom.xml
@@ -228,8 +228,8 @@
                 <configuration>
                     <argLine>-Xms512m -Xmx1024m</argLine>
                     <reuseForks>true</reuseForks>
-                    <!-- Fail tests longer than 2 hours, prevent form random locking tests -->
-                    <forkedProcessTimeoutInSeconds>7200</forkedProcessTimeoutInSeconds>
+                    <!-- Fail tests longer than 20 minutes, prevent form random locking tests -->
+                    <forkedProcessTimeoutInSeconds>1200</forkedProcessTimeoutInSeconds>
                     <groups combine.self="override">org.apache.james.jmap.categories.CassandraAndElasticSearchCategory,org.apache.james.junit.categories.BasicFeature,org.apache.james.jmap.categories.EnableCucumber</groups>
                 </configuration>
             </plugin>
diff --git a/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/pom.xml b/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/pom.xml
index 4260711..3098f81 100644
--- a/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/pom.xml
+++ b/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/pom.xml
@@ -176,8 +176,8 @@
                 <configuration>
                     <argLine>-Xms512m -Xmx1024m</argLine>
                     <reuseForks>true</reuseForks>
-                    <!-- Fail tests longer than 2 hours, prevent form random locking tests -->
-                    <forkedProcessTimeoutInSeconds>7200</forkedProcessTimeoutInSeconds>
+                    <!-- Fail tests longer than 20 minutes, prevent form random locking tests -->
+                    <forkedProcessTimeoutInSeconds>1200</forkedProcessTimeoutInSeconds>
                     <groups combine.self="override">org.apache.james.junit.categories.BasicFeature,org.apache.james.jmap.categories.EnableCucumber</groups>
                 </configuration>
             </plugin>
diff --git a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/pom.xml b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/pom.xml
index 5906025..0e79ba2 100644
--- a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/pom.xml
+++ b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/pom.xml
@@ -124,8 +124,8 @@
                 <configuration>
                     <argLine>-Xms512m -Xmx1024m</argLine>
                     <reuseForks>true</reuseForks>
-                    <!-- Fail tests longer than 2 hours, prevent form random locking tests -->
-                    <forkedProcessTimeoutInSeconds>7200</forkedProcessTimeoutInSeconds>
+                    <!-- Fail tests longer than 20 minutes, prevent form random locking tests -->
+                    <forkedProcessTimeoutInSeconds>1200</forkedProcessTimeoutInSeconds>
                     <!-- Junit 5 move from Category to Tag, and it need tag's name as parameter -->
                     <groups combine.self="override">BasicFeature</groups>
                     <properties>
diff --git a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/pom.xml b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/pom.xml
index e97dcbe..6904304 100644
--- a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/pom.xml
+++ b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/pom.xml
@@ -99,8 +99,8 @@
                 <configuration>
                     <argLine>-Xms512m -Xmx1024m</argLine>
                     <reuseForks>true</reuseForks>
-                    <!-- Fail tests longer than 2 hours, prevent form random locking tests -->
-                    <forkedProcessTimeoutInSeconds>7200</forkedProcessTimeoutInSeconds>
+                    <!-- Fail tests longer than 20 minutes, prevent form random locking tests -->
+                    <forkedProcessTimeoutInSeconds>1200</forkedProcessTimeoutInSeconds>
                     <groups combine.self="override">BasicFeature</groups>
                 </configuration>
             </plugin>


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


[james-project] 07/28: JAMES-3350 Drop CassandraRabbitMQSwiftJmapTestRule

Posted by bt...@apache.org.
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 6cf8e7db036f482590ec2ce407086ed630392319
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Mon Jul 27 10:07:23 2020 +0700

    JAMES-3350 Drop CassandraRabbitMQSwiftJmapTestRule
    
    Use AWS version instead
---
 .../james/CassandraRabbitMQSwiftJmapTestRule.java  | 99 ----------------------
 .../jmap/rabbitmq/RabbitMQSwiftFilterTest.java     | 49 -----------
 2 files changed, 148 deletions(-)

diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/CassandraRabbitMQSwiftJmapTestRule.java b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/CassandraRabbitMQSwiftJmapTestRule.java
deleted file mode 100644
index c359987..0000000
--- a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/CassandraRabbitMQSwiftJmapTestRule.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- ****************************************************************/
-
-package org.apache.james;
-
-import java.io.IOException;
-
-import org.apache.james.backends.rabbitmq.DockerRabbitMQSingleton;
-import org.apache.james.modules.TestDockerESMetricReporterModule;
-import org.apache.james.modules.TestJMAPServerModule;
-import org.apache.james.modules.TestRabbitMQModule;
-import org.apache.james.modules.blobstore.BlobStoreConfiguration;
-import org.apache.james.modules.objectstorage.swift.DockerSwiftTestRule;
-import org.junit.rules.TemporaryFolder;
-import org.junit.rules.TestRule;
-import org.junit.runner.Description;
-import org.junit.runners.model.Statement;
-
-import com.google.inject.Module;
-
-public class CassandraRabbitMQSwiftJmapTestRule implements TestRule {
-
-    public static final int TWO_SECONDS = 2000;
-    private final TemporaryFolder temporaryFolder;
-
-    public static CassandraRabbitMQSwiftJmapTestRule defaultTestRule() {
-        return new CassandraRabbitMQSwiftJmapTestRule();
-    }
-
-    private final GuiceModuleTestRule guiceModuleTestRule;
-    private final DockerElasticSearchRule dockerElasticSearchRule;
-
-    public CassandraRabbitMQSwiftJmapTestRule(GuiceModuleTestRule... guiceModuleTestRule) {
-        TempFilesystemTestRule tempFilesystemTestRule = new TempFilesystemTestRule();
-        this.dockerElasticSearchRule = new DockerElasticSearchRule();
-        this.temporaryFolder = tempFilesystemTestRule.getTemporaryFolder();
-        this.guiceModuleTestRule =
-                AggregateGuiceModuleTestRule
-                    .of(guiceModuleTestRule)
-                    .aggregate(dockerElasticSearchRule)
-                    .aggregate(tempFilesystemTestRule);
-    }
-
-    public GuiceJamesServer jmapServer(Module... additionals) throws IOException {
-        CassandraRabbitMQJamesConfiguration configuration = CassandraRabbitMQJamesConfiguration.builder()
-            .workingDirectory(temporaryFolder.newFolder())
-            .configurationFromClasspath()
-            .blobStore(BlobStoreConfiguration.builder()
-                    .objectStorage()
-                    .disableCache()
-                    .deduplication())
-            .searchConfiguration(SearchConfiguration.elasticSearch())
-            .build();
-
-        return CassandraRabbitMQJamesServerMain.createServer(configuration)
-            .overrideWith(new TestRabbitMQModule(DockerRabbitMQSingleton.SINGLETON))
-            .overrideWith(new DockerSwiftTestRule().getModule())
-            .overrideWith(new TestJMAPServerModule())
-            .overrideWith(new TestDockerESMetricReporterModule(dockerElasticSearchRule.getDockerEs().getHttpHost()))
-            .overrideWith(guiceModuleTestRule.getModule())
-            .overrideWith((binder -> binder.bind(CleanupTasksPerformer.class).asEagerSingleton()))
-            .overrideWith(additionals);
-    }
-
-    @Override
-    public Statement apply(Statement base, Description description) {
-        return guiceModuleTestRule.apply(base, description);
-    }
-
-    public void await() {
-        awaitProcessingStart();
-        guiceModuleTestRule.await();
-    }
-
-    private void awaitProcessingStart() {
-        // As the RabbitMQEventBus is asynchronous we have otherwise no guaranties that the processing to be awaiting for did start
-        try {
-            Thread.sleep(TWO_SECONDS);
-        } catch (InterruptedException e) {
-            throw new RuntimeException(e);
-        }
-    }
-}
diff --git a/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQSwiftFilterTest.java b/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQSwiftFilterTest.java
deleted file mode 100644
index 4386e03..0000000
--- a/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQSwiftFilterTest.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- ****************************************************************/
-
-package org.apache.james.jmap.rabbitmq;
-
-import java.io.IOException;
-
-import org.apache.james.CassandraRabbitMQSwiftJmapTestRule;
-import org.apache.james.DockerCassandraRule;
-import org.apache.james.GuiceJamesServer;
-import org.apache.james.jmap.draft.methods.integration.FilterTest;
-import org.apache.james.mailbox.cassandra.ids.CassandraId;
-import org.apache.james.mailbox.model.MailboxId;
-import org.junit.Rule;
-
-public class RabbitMQSwiftFilterTest extends FilterTest {
-
-    @Rule
-    public DockerCassandraRule cassandra = new DockerCassandraRule();
-
-    @Rule
-    public CassandraRabbitMQSwiftJmapTestRule rule = CassandraRabbitMQSwiftJmapTestRule.defaultTestRule();
-
-    @Override
-    protected GuiceJamesServer createJmapServer() throws IOException {
-        return rule.jmapServer(cassandra.getModule());
-    }
-
-    @Override
-    protected MailboxId randomMailboxId() {
-        return CassandraId.timeBased();
-    }
-}
\ No newline at end of file


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


[james-project] 26/28: JAMES-3350 Reuse forks for mailet integration tests

Posted by bt...@apache.org.
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 eae90a10ac8d46ff4dcd55840e2dad28c52e11b3
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Wed Jul 29 09:18:42 2020 +0700

    JAMES-3350 Reuse forks for mailet integration tests
    
    This also ease the transition to graddle
---
 server/mailet/integration-testing/pom.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/server/mailet/integration-testing/pom.xml b/server/mailet/integration-testing/pom.xml
index 4766cb7..723e887 100644
--- a/server/mailet/integration-testing/pom.xml
+++ b/server/mailet/integration-testing/pom.xml
@@ -162,7 +162,7 @@
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-surefire-plugin</artifactId>
                 <configuration>
-                    <reuseForks>false</reuseForks>
+                    <reuseForks>true</reuseForks>
                     <forkCount>1C</forkCount>
                 </configuration>
             </plugin>


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


[james-project] 18/28: JAMES-3350 Extract ReactorRabbitMQChannelPool configuration

Posted by bt...@apache.org.
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 891234eb0a687e0b1b4cc9366f736d2976dc5af7
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Tue Jul 28 09:30:39 2020 +0700

    JAMES-3350 Extract ReactorRabbitMQChannelPool configuration
---
 .../rabbitmq/ReactorRabbitMQChannelPool.java       | 73 ++++++++++++++++------
 .../james/backends/rabbitmq/RabbitMQExtension.java |  9 +--
 .../rabbitmq/ReactorRabbitMQChannelPoolTest.java   |  7 ++-
 .../rabbitmq/host/RabbitMQEventBusHostSystem.java  |  3 +-
 .../james/modules/rabbitmq/RabbitMQModule.java     | 17 ++---
 .../RabbitMQEventDeadLettersIntegrationTest.java   | 12 +++-
 6 files changed, 85 insertions(+), 36 deletions(-)

diff --git a/backends-common/rabbitmq/src/main/java/org/apache/james/backends/rabbitmq/ReactorRabbitMQChannelPool.java b/backends-common/rabbitmq/src/main/java/org/apache/james/backends/rabbitmq/ReactorRabbitMQChannelPool.java
index 118e2fa..913d84d 100644
--- a/backends-common/rabbitmq/src/main/java/org/apache/james/backends/rabbitmq/ReactorRabbitMQChannelPool.java
+++ b/backends-common/rabbitmq/src/main/java/org/apache/james/backends/rabbitmq/ReactorRabbitMQChannelPool.java
@@ -50,6 +50,7 @@ import reactor.rabbitmq.ReceiverOptions;
 import reactor.rabbitmq.Sender;
 import reactor.rabbitmq.SenderOptions;
 import reactor.util.retry.Retry;
+import reactor.util.retry.RetryBackoffSpec;
 
 public class ReactorRabbitMQChannelPool implements ChannelPool, Startable {
 
@@ -64,13 +65,11 @@ public class ReactorRabbitMQChannelPool implements ChannelPool, Startable {
         private static final Logger LOGGER = LoggerFactory.getLogger(ChannelFactory.class);
 
         private final Mono<Connection> connectionMono;
-        private final Duration minBorrowDelay;
-        private final int retries;
+        private final Configuration configuration;
 
-        ChannelFactory(Mono<Connection> connectionMono, Duration minBorrowDelay, int retries) {
+        ChannelFactory(Mono<Connection> connectionMono, Configuration configuration) {
             this.connectionMono = connectionMono;
-            this.minBorrowDelay = minBorrowDelay;
-            this.retries = retries;
+            this.configuration = configuration;
         }
 
         @Override
@@ -84,7 +83,7 @@ public class ReactorRabbitMQChannelPool implements ChannelPool, Startable {
             return Mono.fromCallable(connection::openChannel)
                 .map(maybeChannel ->
                     maybeChannel.orElseThrow(() -> new RuntimeException("RabbitMQ reached to maximum opened channels, cannot get more channels")))
-                .retryWhen(Retry.backoff(retries, minBorrowDelay).scheduler(Schedulers.elastic()))
+                .retryWhen(configuration.backoffSpec().scheduler(Schedulers.elastic()))
                 .doOnError(throwable -> LOGGER.error("error when creating new channel", throwable));
         }
 
@@ -102,6 +101,50 @@ public class ReactorRabbitMQChannelPool implements ChannelPool, Startable {
         }
     }
 
+    public static class Configuration {
+        @FunctionalInterface
+        public interface RequiresRetries {
+            RequiredMinBorrowDelay retries(int retries);
+        }
+
+        @FunctionalInterface
+        public interface RequiredMinBorrowDelay {
+            RequiredMaxChannel minBorrowDelay(Duration minBorrowDelay);
+        }
+
+        @FunctionalInterface
+        public interface RequiredMaxChannel {
+            Configuration maxChannel(int maxChannel);
+        }
+
+        public static final Configuration DEFAULT = builder()
+            .retries(MAX_BORROW_RETRIES)
+            .minBorrowDelay(MIN_BORROW_DELAY)
+            .maxChannel(MAX_CHANNELS_NUMBER);
+
+        public static RequiresRetries builder() {
+            return retries -> minBorrowDelay -> maxChannel -> new Configuration(minBorrowDelay, retries, maxChannel);
+        }
+
+        private final Duration minBorrowDelay;
+        private final int retries;
+        private final int maxChannel;
+
+        public Configuration(Duration minBorrowDelay, int retries, int maxChannel) {
+            this.minBorrowDelay = minBorrowDelay;
+            this.retries = retries;
+            this.maxChannel = maxChannel;
+        }
+
+        private RetryBackoffSpec backoffSpec() {
+            return Retry.backoff(retries, minBorrowDelay);
+        }
+
+        public int getMaxChannel() {
+            return maxChannel;
+        }
+    }
+
     private static final Logger LOGGER = LoggerFactory.getLogger(ReactorRabbitMQChannelPool.class);
     private static final long MAXIMUM_BORROW_TIMEOUT_IN_MS = Duration.ofSeconds(5).toMillis();
     private static final int MAX_CHANNELS_NUMBER = 3;
@@ -111,24 +154,18 @@ public class ReactorRabbitMQChannelPool implements ChannelPool, Startable {
     private final Mono<Connection> connectionMono;
     private final GenericObjectPool<Channel> pool;
     private final ConcurrentSkipListSet<Channel> borrowedChannels;
-    private final Duration minBorrowDelay;
-    private final int retries;
+    private final Configuration configuration;
     private Sender sender;
 
-    public ReactorRabbitMQChannelPool(SimpleConnectionPool simpleConnectionPool) {
-        this(simpleConnectionPool.getResilientConnection(), MAX_CHANNELS_NUMBER, MIN_BORROW_DELAY, MAX_BORROW_RETRIES);
-    }
-
-    public ReactorRabbitMQChannelPool(Mono<Connection> connectionMono, int poolSize, Duration minBorrowDelay, int retries) {
+    public ReactorRabbitMQChannelPool(Mono<Connection> connectionMono, Configuration configuration) {
         this.connectionMono = connectionMono;
-        this.retries = retries;
-        ChannelFactory channelFactory = new ChannelFactory(connectionMono, minBorrowDelay, retries);
+        this.configuration = configuration;
+        ChannelFactory channelFactory = new ChannelFactory(connectionMono, configuration);
 
         GenericObjectPoolConfig<Channel> config = new GenericObjectPoolConfig<>();
-        config.setMaxTotal(poolSize);
+        config.setMaxTotal(configuration.getMaxChannel());
         this.pool = new GenericObjectPool<>(channelFactory, config);
         this.borrowedChannels = new ConcurrentSkipListSet<>(Comparator.comparingInt(System::identityHashCode));
-        this.minBorrowDelay = minBorrowDelay;
     }
 
     public void start() {
@@ -151,7 +188,7 @@ public class ReactorRabbitMQChannelPool implements ChannelPool, Startable {
     private Mono<Channel> borrow() {
         return tryBorrowFromPool()
             .doOnError(throwable -> LOGGER.warn("Cannot borrow channel", throwable))
-            .retryWhen(Retry.backoff(retries, minBorrowDelay).scheduler(Schedulers.elastic()))
+            .retryWhen(configuration.backoffSpec().scheduler(Schedulers.elastic()))
             .onErrorMap(this::propagateException)
             .subscribeOn(Schedulers.elastic())
             .doOnNext(borrowedChannels::add);
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 c2a89a2..56a2f11 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
@@ -140,10 +140,11 @@ public class RabbitMQExtension implements BeforeAllCallback, BeforeEachCallback,
 
         RabbitMQConnectionFactory connectionFactory = createRabbitConnectionFactory();
         connectionPool = new SimpleConnectionPool(connectionFactory);
-        Duration minBorrowDelay = Duration.ofMillis(5);
-        int retries = 2;
-        channelPool = new ReactorRabbitMQChannelPool(connectionPool.getResilientConnection(2, Duration.ofMillis(5)), 5,
-            minBorrowDelay, retries);
+        channelPool = new ReactorRabbitMQChannelPool(connectionPool.getResilientConnection(2, Duration.ofMillis(5)),
+            ReactorRabbitMQChannelPool.Configuration.builder()
+                .retries(2)
+                .minBorrowDelay(Duration.ofMillis(5))
+                .maxChannel(3));
         channelPool.start();
     }
 
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 20f83c2..0f259c3 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
@@ -67,11 +67,12 @@ class ReactorRabbitMQChannelPoolTest implements ChannelPoolContract {
     }
 
     private ReactorRabbitMQChannelPool generateChannelPool(int poolSize) {
-        Duration minBorrowDelay = Duration.ofMillis(5);
-        int retries = 2;
         ReactorRabbitMQChannelPool reactorRabbitMQChannelPool = new ReactorRabbitMQChannelPool(
             rabbitMQExtension.getConnectionPool().getResilientConnection(),
-            poolSize, minBorrowDelay, retries);
+            ReactorRabbitMQChannelPool.Configuration.builder()
+                .retries(2)
+                .minBorrowDelay(Duration.ofMillis(5))
+                .maxChannel(poolSize));
         reactorRabbitMQChannelPool.start();
         return reactorRabbitMQChannelPool;
     }
diff --git a/mpt/impl/imap-mailbox/rabbitmq/src/test/java/org/apache/james/mpt/imapmailbox/rabbitmq/host/RabbitMQEventBusHostSystem.java b/mpt/impl/imap-mailbox/rabbitmq/src/test/java/org/apache/james/mpt/imapmailbox/rabbitmq/host/RabbitMQEventBusHostSystem.java
index 08b41e9..70128f3 100644
--- a/mpt/impl/imap-mailbox/rabbitmq/src/test/java/org/apache/james/mpt/imapmailbox/rabbitmq/host/RabbitMQEventBusHostSystem.java
+++ b/mpt/impl/imap-mailbox/rabbitmq/src/test/java/org/apache/james/mpt/imapmailbox/rabbitmq/host/RabbitMQEventBusHostSystem.java
@@ -74,7 +74,8 @@ public class RabbitMQEventBusHostSystem extends JamesImapHostSystem {
         super.beforeTest();
 
         connectionPool = new SimpleConnectionPool(dockerRabbitMQ.createRabbitConnectionFactory());
-        reactorRabbitMQChannelPool = new ReactorRabbitMQChannelPool(connectionPool);
+        reactorRabbitMQChannelPool = new ReactorRabbitMQChannelPool(connectionPool.getResilientConnection(),
+            ReactorRabbitMQChannelPool.Configuration.DEFAULT);
         reactorRabbitMQChannelPool.start();
         eventBus = createEventBus();
         eventBus.start();
diff --git a/server/container/guice/rabbitmq/src/main/java/org/apache/james/modules/rabbitmq/RabbitMQModule.java b/server/container/guice/rabbitmq/src/main/java/org/apache/james/modules/rabbitmq/RabbitMQModule.java
index 1d223b3..f4d1c9f 100644
--- a/server/container/guice/rabbitmq/src/main/java/org/apache/james/modules/rabbitmq/RabbitMQModule.java
+++ b/server/container/guice/rabbitmq/src/main/java/org/apache/james/modules/rabbitmq/RabbitMQModule.java
@@ -23,7 +23,6 @@ import java.io.FileNotFoundException;
 import javax.inject.Named;
 import javax.inject.Singleton;
 
-import org.apache.commons.configuration2.Configuration;
 import org.apache.commons.configuration2.ex.ConfigurationException;
 import org.apache.james.backends.cassandra.components.CassandraModule;
 import org.apache.james.backends.rabbitmq.RabbitMQConfiguration;
@@ -89,6 +88,8 @@ public class RabbitMQModule extends AbstractModule {
         eventDTOModuleBinder.addBinding().toInstance(CassandraMailQueueViewConfigurationModule.MAIL_QUEUE_VIEW_CONFIGURATION);
 
         Multibinder.newSetBinder(binder(), HealthCheck.class).addBinding().to(RabbitMQHealthCheck.class);
+
+        bind(ReactorRabbitMQChannelPool.Configuration.class).toInstance(ReactorRabbitMQChannelPool.Configuration.DEFAULT);
     }
 
     @Provides
@@ -118,7 +119,7 @@ public class RabbitMQModule extends AbstractModule {
     @Provides
     @Named(RABBITMQ_CONFIGURATION_NAME)
     @Singleton
-    private Configuration getConfiguration(PropertiesProvider propertiesProvider) throws ConfigurationException {
+    private org.apache.commons.configuration2.Configuration getConfiguration(PropertiesProvider propertiesProvider) throws ConfigurationException {
         try {
             return propertiesProvider.getConfiguration(RABBITMQ_CONFIGURATION_NAME);
         } catch (FileNotFoundException e) {
@@ -129,26 +130,28 @@ public class RabbitMQModule extends AbstractModule {
 
     @Provides
     @Singleton
-    private RabbitMQConfiguration getMailQueueConfiguration(@Named(RABBITMQ_CONFIGURATION_NAME) Configuration configuration) {
+    private RabbitMQConfiguration getMailQueueConfiguration(@Named(RABBITMQ_CONFIGURATION_NAME) org.apache.commons.configuration2.Configuration configuration) {
         return RabbitMQConfiguration.from(configuration);
     }
 
     @Provides
     @Singleton
-    private CassandraMailQueueViewConfiguration getMailQueueViewConfiguration(@Named(RABBITMQ_CONFIGURATION_NAME) Configuration configuration) {
+    private CassandraMailQueueViewConfiguration getMailQueueViewConfiguration(@Named(RABBITMQ_CONFIGURATION_NAME) org.apache.commons.configuration2.Configuration configuration) {
         return CassandraMailQueueViewConfiguration.from(configuration);
     }
 
     @Provides
     @Singleton
-    private RabbitMQMailQueueConfiguration getMailQueueSizeConfiguration(@Named(RABBITMQ_CONFIGURATION_NAME) Configuration configuration) {
+    private RabbitMQMailQueueConfiguration getMailQueueSizeConfiguration(@Named(RABBITMQ_CONFIGURATION_NAME) org.apache.commons.configuration2.Configuration configuration) {
         return RabbitMQMailQueueConfiguration.from(configuration);
     }
 
     @Provides
     @Singleton
-    ReactorRabbitMQChannelPool provideReactorRabbitMQChannelPool(SimpleConnectionPool simpleConnectionPool) {
-        ReactorRabbitMQChannelPool channelPool = new ReactorRabbitMQChannelPool(simpleConnectionPool);
+    ReactorRabbitMQChannelPool provideReactorRabbitMQChannelPool(SimpleConnectionPool simpleConnectionPool, ReactorRabbitMQChannelPool.Configuration configuration) {
+        ReactorRabbitMQChannelPool channelPool = new ReactorRabbitMQChannelPool(
+            simpleConnectionPool.getResilientConnection(),
+            configuration);
         channelPool.start();
         return channelPool;
     }
diff --git a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQEventDeadLettersIntegrationTest.java b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQEventDeadLettersIntegrationTest.java
index 29ca1ab..a58794b 100644
--- a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQEventDeadLettersIntegrationTest.java
+++ b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQEventDeadLettersIntegrationTest.java
@@ -46,6 +46,7 @@ import org.apache.james.JamesServerBuilder;
 import org.apache.james.JamesServerExtension;
 import org.apache.james.SearchConfiguration;
 import org.apache.james.backends.rabbitmq.DockerRabbitMQ;
+import org.apache.james.backends.rabbitmq.ReactorRabbitMQChannelPool;
 import org.apache.james.core.Username;
 import org.apache.james.junit.categories.BasicFeature;
 import org.apache.james.mailbox.DefaultMailboxes;
@@ -221,9 +222,14 @@ class RabbitMQEventDeadLettersIntegrationTest {
             .overrideWith(binder -> binder.bind(RetryBackoffConfiguration.class)
                 .toInstance(RetryBackoffConfiguration.builder()
                     .maxRetries(MAX_RETRIES)
-                    .firstBackoff(java.time.Duration.ofMillis(100))
-                    .jitterFactor(0.5)
-                    .build())))
+                    .firstBackoff(java.time.Duration.ofMillis(10))
+                    .jitterFactor(0.2)
+                    .build()))
+            .overrideWith(binder -> binder.bind(ReactorRabbitMQChannelPool.Configuration.class)
+                .toInstance(ReactorRabbitMQChannelPool.Configuration.builder()
+                    .retries(2)
+                    .minBorrowDelay(java.time.Duration.ofMillis(5))
+                    .maxChannel(3))))
         .build();
 
     private static final String DOMAIN = "domain.tld";


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


[james-project] 04/28: JAMES-3350 Remove unused await() calls

Posted by bt...@apache.org.
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 e260bbaada93ab7116856f6316021864dfecdc58
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Mon Jul 27 09:58:00 2020 +0700

    JAMES-3350 Remove unused await() calls
---
 .../james/jmap/cassandra/CassandraGetVacationResponseTest.java     | 5 -----
 .../james/jmap/cassandra/CassandraSetMailboxesMethodTest.java      | 7 -------
 .../jmap/cassandra/CassandraSetMessagesMethodReRoutingTest.java    | 5 -----
 .../james/jmap/cassandra/CassandraSetVacationResponseTest.java     | 7 -------
 .../james/jmap/cassandra/CassandraVacationIntegrationTest.java     | 7 -------
 .../jmap/cassandra/CassandraVacationRelayIntegrationTest.java      | 5 -----
 .../test/java/org/apache/james/jmap/VacationIntegrationTest.java   | 3 ---
 .../java/org/apache/james/jmap/VacationRelayIntegrationTest.java   | 3 ---
 .../jmap/draft/methods/integration/GetVacationResponseTest.java    | 2 --
 .../jmap/draft/methods/integration/SetMailboxesMethodTest.java     | 2 --
 .../draft/methods/integration/SetMessagesMethodReRoutingTest.java  | 2 --
 .../jmap/draft/methods/integration/SetVacationResponseTest.java    | 2 --
 .../james/jmap/memory/MemoryGetVacationResponseMethodTest.java     | 5 -----
 .../org/apache/james/jmap/memory/MemorySetMailboxesMethodTest.java | 5 -----
 .../james/jmap/memory/MemorySetMessagesMethodReRoutingTest.java    | 5 -----
 .../james/jmap/memory/MemorySetVacationResponseMethodTest.java     | 5 -----
 .../apache/james/jmap/memory/MemoryVacationIntegrationTest.java    | 6 ------
 .../james/jmap/memory/MemoryVacationRelayIntegrationTest.java      | 5 -----
 .../james/jmap/rabbitmq/RabbitMQAwsS3GetVacationResponseTest.java  | 6 ------
 .../james/jmap/rabbitmq/RabbitMQAwsS3SetMailboxesMethodTest.java   | 7 -------
 .../jmap/rabbitmq/RabbitMQAwsS3SetMessagesMethodReRoutingTest.java | 6 ------
 .../james/jmap/rabbitmq/RabbitMQAwsS3SetVacationResponseTest.java  | 6 ------
 .../james/jmap/rabbitmq/RabbitMQAwsS3VacationIntegrationTest.java  | 6 ------
 .../jmap/rabbitmq/RabbitMQAwsS3VacationRelayIntegrationTest.java   | 6 ------
 24 files changed, 118 deletions(-)

diff --git a/server/protocols/jmap-draft-integration-testing/cassandra-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/cassandra/CassandraGetVacationResponseTest.java b/server/protocols/jmap-draft-integration-testing/cassandra-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/cassandra/CassandraGetVacationResponseTest.java
index 647f288..571b66f 100644
--- a/server/protocols/jmap-draft-integration-testing/cassandra-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/cassandra/CassandraGetVacationResponseTest.java
+++ b/server/protocols/jmap-draft-integration-testing/cassandra-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/cassandra/CassandraGetVacationResponseTest.java
@@ -41,9 +41,4 @@ public class CassandraGetVacationResponseTest extends GetVacationResponseTest {
         return rule.jmapServer(cassandra.getModule())
                 .overrideWith(binder -> binder.bind(ZonedDateTimeProvider.class).toInstance(zonedDateTimeProvider));
     }
-
-    @Override
-    protected void await() {
-        rule.await();
-    }
 }
diff --git a/server/protocols/jmap-draft-integration-testing/cassandra-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/cassandra/CassandraSetMailboxesMethodTest.java b/server/protocols/jmap-draft-integration-testing/cassandra-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/cassandra/CassandraSetMailboxesMethodTest.java
index 30eb185..9ee2bfa 100644
--- a/server/protocols/jmap-draft-integration-testing/cassandra-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/cassandra/CassandraSetMailboxesMethodTest.java
+++ b/server/protocols/jmap-draft-integration-testing/cassandra-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/cassandra/CassandraSetMailboxesMethodTest.java
@@ -28,7 +28,6 @@ import org.apache.james.jmap.draft.methods.integration.SetMailboxesMethodTest;
 import org.junit.Rule;
 
 public class CassandraSetMailboxesMethodTest extends SetMailboxesMethodTest {
-
     @Rule
     public DockerCassandraRule cassandra = new DockerCassandraRule();
 
@@ -39,10 +38,4 @@ public class CassandraSetMailboxesMethodTest extends SetMailboxesMethodTest {
     protected GuiceJamesServer createJmapServer() throws IOException {
         return rule.jmapServer(cassandra.getModule());
     }
-
-    @Override
-    protected void await() {
-        rule.await();
-    }
-
 }
diff --git a/server/protocols/jmap-draft-integration-testing/cassandra-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/cassandra/CassandraSetMessagesMethodReRoutingTest.java b/server/protocols/jmap-draft-integration-testing/cassandra-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/cassandra/CassandraSetMessagesMethodReRoutingTest.java
index 52c001f..0077083 100644
--- a/server/protocols/jmap-draft-integration-testing/cassandra-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/cassandra/CassandraSetMessagesMethodReRoutingTest.java
+++ b/server/protocols/jmap-draft-integration-testing/cassandra-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/cassandra/CassandraSetMessagesMethodReRoutingTest.java
@@ -39,9 +39,4 @@ public class CassandraSetMessagesMethodReRoutingTest extends SetMessagesMethodRe
     protected GuiceJamesServer createJmapServer() throws IOException {
         return rule.jmapServer(cassandra.getModule());
     }
-
-    @Override
-    protected void await() {
-        rule.await();
-    }
 }
diff --git a/server/protocols/jmap-draft-integration-testing/cassandra-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/cassandra/CassandraSetVacationResponseTest.java b/server/protocols/jmap-draft-integration-testing/cassandra-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/cassandra/CassandraSetVacationResponseTest.java
index cbb3c36..8e953f7 100644
--- a/server/protocols/jmap-draft-integration-testing/cassandra-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/cassandra/CassandraSetVacationResponseTest.java
+++ b/server/protocols/jmap-draft-integration-testing/cassandra-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/cassandra/CassandraSetVacationResponseTest.java
@@ -28,7 +28,6 @@ import org.apache.james.jmap.draft.methods.integration.SetVacationResponseTest;
 import org.junit.Rule;
 
 public class CassandraSetVacationResponseTest extends SetVacationResponseTest {
-
     @Rule
     public DockerCassandraRule cassandra = new DockerCassandraRule();
 
@@ -39,10 +38,4 @@ public class CassandraSetVacationResponseTest extends SetVacationResponseTest {
     protected GuiceJamesServer createJmapServer() throws IOException {
         return rule.jmapServer(cassandra.getModule());
     }
-
-    @Override
-    protected void await() {
-        rule.await();
-    }
-    
 }
diff --git a/server/protocols/jmap-draft-integration-testing/cassandra-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/cassandra/CassandraVacationIntegrationTest.java b/server/protocols/jmap-draft-integration-testing/cassandra-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/cassandra/CassandraVacationIntegrationTest.java
index e1ac498..3a53e69 100644
--- a/server/protocols/jmap-draft-integration-testing/cassandra-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/cassandra/CassandraVacationIntegrationTest.java
+++ b/server/protocols/jmap-draft-integration-testing/cassandra-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/cassandra/CassandraVacationIntegrationTest.java
@@ -28,7 +28,6 @@ import org.apache.james.jmap.VacationIntegrationTest;
 import org.junit.Rule;
 
 public class CassandraVacationIntegrationTest extends VacationIntegrationTest {
-
     @Rule
     public DockerCassandraRule cassandra = new DockerCassandraRule();
 
@@ -39,10 +38,4 @@ public class CassandraVacationIntegrationTest extends VacationIntegrationTest {
     protected GuiceJamesServer createJmapServer() throws IOException {
         return rule.jmapServer(cassandra.getModule());
     }
-
-    @Override
-    protected void await() {
-        rule.await();
-    }
-    
 }
diff --git a/server/protocols/jmap-draft-integration-testing/cassandra-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/cassandra/CassandraVacationRelayIntegrationTest.java b/server/protocols/jmap-draft-integration-testing/cassandra-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/cassandra/CassandraVacationRelayIntegrationTest.java
index dd00efa..988eb71 100644
--- a/server/protocols/jmap-draft-integration-testing/cassandra-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/cassandra/CassandraVacationRelayIntegrationTest.java
+++ b/server/protocols/jmap-draft-integration-testing/cassandra-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/cassandra/CassandraVacationRelayIntegrationTest.java
@@ -47,11 +47,6 @@ public class CassandraVacationRelayIntegrationTest extends VacationRelayIntegrat
     }
 
     @Override
-    protected void await() {
-        rule.await();
-    }
-
-    @Override
     protected InMemoryDNSService getInMemoryDns() {
         return inMemoryDNSService;
     }
diff --git a/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/VacationIntegrationTest.java b/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/VacationIntegrationTest.java
index 3f2e3a1..ff7c010 100644
--- a/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/VacationIntegrationTest.java
+++ b/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/VacationIntegrationTest.java
@@ -73,8 +73,6 @@ public abstract class VacationIntegrationTest {
 
     protected abstract GuiceJamesServer createJmapServer() throws IOException;
 
-    protected abstract void await();
-
     @Before
     public void setUp() throws Exception {
         guiceJamesServer = createJmapServer();
@@ -90,7 +88,6 @@ public abstract class VacationIntegrationTest {
         mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, USER_2.asString(), DefaultMailboxes.SENT);
         mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, USER_1.asString(), DefaultMailboxes.INBOX);
         mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, USER_2.asString(), DefaultMailboxes.INBOX);
-        await();
 
         jmapGuiceProbe = guiceJamesServer.getProbe(JmapGuiceProbe.class);
         RestAssured.requestSpecification = jmapRequestSpecBuilder
diff --git a/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/VacationRelayIntegrationTest.java b/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/VacationRelayIntegrationTest.java
index 4402cb0..38d7344 100644
--- a/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/VacationRelayIntegrationTest.java
+++ b/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/VacationRelayIntegrationTest.java
@@ -61,8 +61,6 @@ public abstract class VacationRelayIntegrationTest {
     private GuiceJamesServer guiceJamesServer;
     private JmapGuiceProbe jmapGuiceProbe;
 
-    protected abstract void await();
-
     protected abstract GuiceJamesServer getJmapServer() throws IOException;
 
     protected abstract InMemoryDNSService getInMemoryDns();
@@ -81,7 +79,6 @@ public abstract class VacationRelayIntegrationTest {
         MailboxProbe mailboxProbe = guiceJamesServer.getProbe(MailboxProbeImpl.class);
         mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, USER_WITH_DOMAIN, DefaultMailboxes.SENT);
         mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, USER_WITH_DOMAIN, DefaultMailboxes.INBOX);
-        await();
 
         jmapGuiceProbe = guiceJamesServer.getProbe(JmapGuiceProbe.class);
     }
diff --git a/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/GetVacationResponseTest.java b/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/GetVacationResponseTest.java
index ed0c530..3139ef0 100644
--- a/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/GetVacationResponseTest.java
+++ b/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/GetVacationResponseTest.java
@@ -62,8 +62,6 @@ public abstract class GetVacationResponseTest {
 
     protected abstract GuiceJamesServer createJmapServer(ZonedDateTimeProvider zonedDateTimeProvider) throws IOException;
 
-    protected abstract void await();
-
     private AccessToken accessToken;
     private GuiceJamesServer jmapServer;
     private FixedDateZonedDateTimeProvider fixedDateZonedDateTimeProvider;
diff --git a/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/SetMailboxesMethodTest.java b/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/SetMailboxesMethodTest.java
index 86a9586..a2c824c 100644
--- a/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/SetMailboxesMethodTest.java
+++ b/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/SetMailboxesMethodTest.java
@@ -87,8 +87,6 @@ public abstract class SetMailboxesMethodTest {
 
     protected abstract GuiceJamesServer createJmapServer() throws IOException;
 
-    protected abstract void await();
-
     private AccessToken accessToken;
     private Username username;
     private GuiceJamesServer jmapServer;
diff --git a/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/SetMessagesMethodReRoutingTest.java b/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/SetMessagesMethodReRoutingTest.java
index fca8b50..f98d2d4 100644
--- a/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/SetMessagesMethodReRoutingTest.java
+++ b/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/SetMessagesMethodReRoutingTest.java
@@ -72,8 +72,6 @@ public abstract class SetMessagesMethodReRoutingTest {
 
     protected abstract GuiceJamesServer createJmapServer() throws IOException;
 
-    protected abstract void await();
-
     private GuiceJamesServer jmapServer;
     private MailboxProbe mailboxProbe;
     private DataProbe dataProbe;
diff --git a/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/SetVacationResponseTest.java b/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/SetVacationResponseTest.java
index 03bba0f..bf69793 100644
--- a/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/SetVacationResponseTest.java
+++ b/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/SetVacationResponseTest.java
@@ -60,8 +60,6 @@ public abstract class SetVacationResponseTest {
 
     protected abstract GuiceJamesServer createJmapServer() throws IOException;
 
-    protected abstract void await();
-
     private AccessToken accessToken;
     private GuiceJamesServer jmapServer;
 
diff --git a/server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/memory/MemoryGetVacationResponseMethodTest.java b/server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/memory/MemoryGetVacationResponseMethodTest.java
index 5f8b1dc..2b7b5a3 100644
--- a/server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/memory/MemoryGetVacationResponseMethodTest.java
+++ b/server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/memory/MemoryGetVacationResponseMethodTest.java
@@ -28,7 +28,6 @@ import org.apache.james.util.date.ZonedDateTimeProvider;
 import org.junit.Rule;
 
 public class MemoryGetVacationResponseMethodTest extends GetVacationResponseTest {
-    
     @Rule
     public MemoryJmapTestRule memoryJmap = new MemoryJmapTestRule();
 
@@ -37,8 +36,4 @@ public class MemoryGetVacationResponseMethodTest extends GetVacationResponseTest
         return memoryJmap.jmapServer()
                     .overrideWith(binder -> binder.bind(ZonedDateTimeProvider.class).toInstance(zonedDateTimeProvider));
     }
-    
-    @Override
-    protected void await() {
-    }
 }
diff --git a/server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/memory/MemorySetMailboxesMethodTest.java b/server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/memory/MemorySetMailboxesMethodTest.java
index aec07de..319fa3e 100644
--- a/server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/memory/MemorySetMailboxesMethodTest.java
+++ b/server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/memory/MemorySetMailboxesMethodTest.java
@@ -27,7 +27,6 @@ import org.apache.james.jmap.draft.methods.integration.SetMailboxesMethodTest;
 import org.junit.Rule;
 
 public class MemorySetMailboxesMethodTest extends SetMailboxesMethodTest {
-
     @Rule
     public MemoryJmapTestRule memoryJmap = new MemoryJmapTestRule();
 
@@ -35,8 +34,4 @@ public class MemorySetMailboxesMethodTest extends SetMailboxesMethodTest {
     protected GuiceJamesServer createJmapServer() throws IOException {
         return memoryJmap.jmapServer();
     }
-    
-    @Override
-    protected void await() {
-    }
 }
diff --git a/server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/memory/MemorySetMessagesMethodReRoutingTest.java b/server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/memory/MemorySetMessagesMethodReRoutingTest.java
index b694c0d..0e258a3 100644
--- a/server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/memory/MemorySetMessagesMethodReRoutingTest.java
+++ b/server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/memory/MemorySetMessagesMethodReRoutingTest.java
@@ -27,7 +27,6 @@ import org.apache.james.jmap.draft.methods.integration.SetMessagesMethodReRoutin
 import org.junit.Rule;
 
 public class MemorySetMessagesMethodReRoutingTest extends SetMessagesMethodReRoutingTest {
-
     @Rule
     public MemoryJmapTestRule memoryJmap = new MemoryJmapTestRule();
 
@@ -35,8 +34,4 @@ public class MemorySetMessagesMethodReRoutingTest extends SetMessagesMethodReRou
     protected GuiceJamesServer createJmapServer() throws IOException {
         return memoryJmap.jmapServer();
     }
-    
-    @Override
-    protected void await() {
-    }
 }
diff --git a/server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/memory/MemorySetVacationResponseMethodTest.java b/server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/memory/MemorySetVacationResponseMethodTest.java
index 7c546e7..9e2d22c 100644
--- a/server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/memory/MemorySetVacationResponseMethodTest.java
+++ b/server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/memory/MemorySetVacationResponseMethodTest.java
@@ -27,7 +27,6 @@ import org.apache.james.jmap.draft.methods.integration.SetVacationResponseTest;
 import org.junit.Rule;
 
 public class MemorySetVacationResponseMethodTest extends SetVacationResponseTest {
-    
     @Rule
     public MemoryJmapTestRule memoryJmap = new MemoryJmapTestRule();
 
@@ -35,8 +34,4 @@ public class MemorySetVacationResponseMethodTest extends SetVacationResponseTest
     protected GuiceJamesServer createJmapServer() throws IOException {
         return memoryJmap.jmapServer();
     }
-    
-    @Override
-    protected void await() {
-    }
 }
diff --git a/server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/memory/MemoryVacationIntegrationTest.java b/server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/memory/MemoryVacationIntegrationTest.java
index 33146de..c9aa8ff 100644
--- a/server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/memory/MemoryVacationIntegrationTest.java
+++ b/server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/memory/MemoryVacationIntegrationTest.java
@@ -27,7 +27,6 @@ import org.apache.james.jmap.VacationIntegrationTest;
 import org.junit.Rule;
 
 public class MemoryVacationIntegrationTest extends VacationIntegrationTest {
-
     @Rule
     public MemoryJmapTestRule memoryJmap = new MemoryJmapTestRule();
 
@@ -35,9 +34,4 @@ public class MemoryVacationIntegrationTest extends VacationIntegrationTest {
     protected GuiceJamesServer createJmapServer() throws IOException {
         return memoryJmap.jmapServer();
     }
-
-    @Override
-    protected void await() {
-
-    }
 }
diff --git a/server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/memory/MemoryVacationRelayIntegrationTest.java b/server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/memory/MemoryVacationRelayIntegrationTest.java
index 1f57192..b49581d 100644
--- a/server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/memory/MemoryVacationRelayIntegrationTest.java
+++ b/server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/memory/MemoryVacationRelayIntegrationTest.java
@@ -36,11 +36,6 @@ public class MemoryVacationRelayIntegrationTest extends VacationRelayIntegration
     private final InMemoryDNSService inMemoryDNSService = new InMemoryDNSService();
 
     @Override
-    protected void await() {
-
-    }
-
-    @Override
     protected GuiceJamesServer getJmapServer() throws IOException {
         return memoryJmap.jmapServer((binder) -> binder.bind(DNSService.class).toInstance(inMemoryDNSService));
     }
diff --git a/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQAwsS3GetVacationResponseTest.java b/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQAwsS3GetVacationResponseTest.java
index 4381ca9..58a83b5 100644
--- a/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQAwsS3GetVacationResponseTest.java
+++ b/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQAwsS3GetVacationResponseTest.java
@@ -29,7 +29,6 @@ import org.apache.james.util.date.ZonedDateTimeProvider;
 import org.junit.Rule;
 
 public class RabbitMQAwsS3GetVacationResponseTest extends GetVacationResponseTest {
-
     @Rule
     public DockerCassandraRule cassandra = new DockerCassandraRule();
 
@@ -41,10 +40,5 @@ public class RabbitMQAwsS3GetVacationResponseTest extends GetVacationResponseTes
         return rule.jmapServer(cassandra.getModule())
             .overrideWith(binder -> binder.bind(ZonedDateTimeProvider.class).toInstance(zonedDateTimeProvider));
     }
-
-    @Override
-    protected void await() {
-        rule.await();
-    }
 }
 
diff --git a/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQAwsS3SetMailboxesMethodTest.java b/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQAwsS3SetMailboxesMethodTest.java
index 7f331df..7450656 100644
--- a/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQAwsS3SetMailboxesMethodTest.java
+++ b/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQAwsS3SetMailboxesMethodTest.java
@@ -28,7 +28,6 @@ import org.apache.james.jmap.draft.methods.integration.SetMailboxesMethodTest;
 import org.junit.Rule;
 
 public class RabbitMQAwsS3SetMailboxesMethodTest extends SetMailboxesMethodTest {
-
     @Rule
     public DockerCassandraRule cassandra = new DockerCassandraRule();
 
@@ -39,11 +38,5 @@ public class RabbitMQAwsS3SetMailboxesMethodTest extends SetMailboxesMethodTest
     protected GuiceJamesServer createJmapServer() throws IOException {
         return rule.jmapServer(cassandra.getModule());
     }
-
-    @Override
-    protected void await() {
-        rule.await();
-    }
-
 }
 
diff --git a/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQAwsS3SetMessagesMethodReRoutingTest.java b/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQAwsS3SetMessagesMethodReRoutingTest.java
index 9644fb9..708753d 100644
--- a/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQAwsS3SetMessagesMethodReRoutingTest.java
+++ b/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQAwsS3SetMessagesMethodReRoutingTest.java
@@ -28,7 +28,6 @@ import org.apache.james.jmap.draft.methods.integration.SetMessagesMethodReRoutin
 import org.junit.Rule;
 
 public class RabbitMQAwsS3SetMessagesMethodReRoutingTest extends SetMessagesMethodReRoutingTest {
-
     @Rule
     public DockerCassandraRule cassandra = new DockerCassandraRule();
 
@@ -39,10 +38,5 @@ public class RabbitMQAwsS3SetMessagesMethodReRoutingTest extends SetMessagesMeth
     protected GuiceJamesServer createJmapServer() throws IOException {
         return rule.jmapServer(cassandra.getModule());
     }
-
-    @Override
-    protected void await() {
-        rule.await();
-    }
 }
 
diff --git a/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQAwsS3SetVacationResponseTest.java b/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQAwsS3SetVacationResponseTest.java
index 7c98a39..e9ff4d6 100644
--- a/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQAwsS3SetVacationResponseTest.java
+++ b/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQAwsS3SetVacationResponseTest.java
@@ -39,11 +39,5 @@ public class RabbitMQAwsS3SetVacationResponseTest extends SetVacationResponseTes
     protected GuiceJamesServer createJmapServer() throws IOException {
         return rule.jmapServer(cassandra.getModule());
     }
-
-    @Override
-    protected void await() {
-        rule.await();
-    }
-
 }
 
diff --git a/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQAwsS3VacationIntegrationTest.java b/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQAwsS3VacationIntegrationTest.java
index 93e9ab3..3297eda 100644
--- a/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQAwsS3VacationIntegrationTest.java
+++ b/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQAwsS3VacationIntegrationTest.java
@@ -39,11 +39,5 @@ public class RabbitMQAwsS3VacationIntegrationTest extends VacationIntegrationTes
     protected GuiceJamesServer createJmapServer() throws IOException {
         return rule.jmapServer(cassandra.getModule());
     }
-
-    @Override
-    protected void await() {
-        rule.await();
-    }
-
 }
 
diff --git a/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQAwsS3VacationRelayIntegrationTest.java b/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQAwsS3VacationRelayIntegrationTest.java
index 301a5b3..5f9f6aa 100644
--- a/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQAwsS3VacationRelayIntegrationTest.java
+++ b/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQAwsS3VacationRelayIntegrationTest.java
@@ -30,7 +30,6 @@ import org.apache.james.jmap.VacationRelayIntegrationTest;
 import org.junit.Rule;
 
 public class RabbitMQAwsS3VacationRelayIntegrationTest extends VacationRelayIntegrationTest {
-
     private final InMemoryDNSService inMemoryDNSService = new InMemoryDNSService();
 
     @Rule
@@ -47,11 +46,6 @@ public class RabbitMQAwsS3VacationRelayIntegrationTest extends VacationRelayInte
     }
 
     @Override
-    protected void await() {
-        rule.await();
-    }
-
-    @Override
     protected InMemoryDNSService getInMemoryDns() {
         return inMemoryDNSService;
     }


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


[james-project] 28/28: JAMES-3350 DomainList::autoDetect leads to slow tests

Posted by bt...@apache.org.
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 fd0a2b6affa73c1c54c3fe521a09cede1b89e81b
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Wed Jul 29 11:27:28 2020 +0700

    JAMES-3350 DomainList::autoDetect leads to slow tests
    
    Switching it off where not necessary unlocks (locally) a 33s => 3s test speedup.
    
    I don't know if the speedup is as impressive on a CI environment but this test speedup is definitly welcomed!
    
    I ended up testing the hostname retrieval only once on top of the memory server in order to limit the expensiveness of this test.
---
 .../org/apache/james/DomainAutodetectionTest.java  | 60 ++++++++++++++++++++++
 1 file changed, 60 insertions(+)

diff --git a/server/container/guice/memory-guice/src/test/java/org/apache/james/DomainAutodetectionTest.java b/server/container/guice/memory-guice/src/test/java/org/apache/james/DomainAutodetectionTest.java
new file mode 100644
index 0000000..ebf9872
--- /dev/null
+++ b/server/container/guice/memory-guice/src/test/java/org/apache/james/DomainAutodetectionTest.java
@@ -0,0 +1,60 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+
+package org.apache.james;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import java.net.InetAddress;
+
+import org.apache.james.domainlist.lib.DomainListConfiguration;
+import org.apache.james.modules.TestJMAPServerModule;
+import org.apache.james.utils.DataProbeImpl;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
+
+class DomainAutodetectionTest {
+    @RegisterExtension
+    static JamesServerExtension jamesServerExtension = new JamesServerBuilder<>(JamesServerBuilder.defaultConfigurationProvider())
+        .server(configuration -> MemoryJamesServerMain.createServer(configuration)
+            .overrideWith(new TestJMAPServerModule())
+            .overrideWith(binder -> binder.bind(DomainListConfiguration.class)
+                .toInstance(DomainListConfiguration.builder()
+                    .autoDetect(true)
+                    .autoDetectIp(false)
+                    .build())))
+        .lifeCycle(JamesServerExtension.Lifecycle.PER_CLASS)
+        .build();
+
+    @Test
+    void hostnameShouldBeRetrievedWhenRestarting(GuiceJamesServer jamesServer) throws Exception {
+        jamesServer.stop();
+        jamesServer.start();
+        String expectedDefaultDomain = InetAddress.getLocalHost().getHostName();
+
+        assertThat(jamesServer.getProbe(DataProbeImpl.class).getDefaultDomain()).isEqualTo(expectedDefaultDomain);
+    }
+
+    @Test
+    void hostnameShouldBeUsedAsDefaultDomain(GuiceJamesServer jamesServer) throws Exception {
+        String expectedDefaultDomain = InetAddress.getLocalHost().getHostName();
+
+        assertThat(jamesServer.getProbe(DataProbeImpl.class).getDefaultDomain()).isEqualTo(expectedDefaultDomain);
+    }
+}


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


[james-project] 12/28: JAMES-3350 Fasten delays & timeout upon RabbitMQ checks

Posted by bt...@apache.org.
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 9ec4dc78f97626af1b7d645da1a7d971bd947c4a
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Mon Jul 27 13:15:51 2020 +0700

    JAMES-3350 Fasten delays & timeout upon RabbitMQ checks
---
 .../rabbitmq/ReactorRabbitMQChannelPool.java       | 23 +++++++++++++--------
 .../backends/rabbitmq/SimpleConnectionPool.java    |  4 ++++
 .../james/backends/rabbitmq/DockerRabbitMQ.java    | 24 +++++++++++-----------
 .../james/backends/rabbitmq/RabbitMQExtension.java |  6 +++++-
 .../rabbitmq/ReactorRabbitMQChannelPoolTest.java   |  4 +++-
 5 files changed, 38 insertions(+), 23 deletions(-)

diff --git a/backends-common/rabbitmq/src/main/java/org/apache/james/backends/rabbitmq/ReactorRabbitMQChannelPool.java b/backends-common/rabbitmq/src/main/java/org/apache/james/backends/rabbitmq/ReactorRabbitMQChannelPool.java
index f4703b4..118e2fa 100644
--- a/backends-common/rabbitmq/src/main/java/org/apache/james/backends/rabbitmq/ReactorRabbitMQChannelPool.java
+++ b/backends-common/rabbitmq/src/main/java/org/apache/james/backends/rabbitmq/ReactorRabbitMQChannelPool.java
@@ -63,13 +63,14 @@ public class ReactorRabbitMQChannelPool implements ChannelPool, Startable {
 
         private static final Logger LOGGER = LoggerFactory.getLogger(ChannelFactory.class);
 
-        private static final int MAX_RETRIES = 5;
-        private static final Duration RETRY_FIRST_BACK_OFF = Duration.ofMillis(100);
-
         private final Mono<Connection> connectionMono;
+        private final Duration minBorrowDelay;
+        private final int retries;
 
-        ChannelFactory(Mono<Connection> connectionMono) {
+        ChannelFactory(Mono<Connection> connectionMono, Duration minBorrowDelay, int retries) {
             this.connectionMono = connectionMono;
+            this.minBorrowDelay = minBorrowDelay;
+            this.retries = retries;
         }
 
         @Override
@@ -83,7 +84,7 @@ public class ReactorRabbitMQChannelPool implements ChannelPool, Startable {
             return Mono.fromCallable(connection::openChannel)
                 .map(maybeChannel ->
                     maybeChannel.orElseThrow(() -> new RuntimeException("RabbitMQ reached to maximum opened channels, cannot get more channels")))
-                .retryWhen(Retry.backoff(MAX_RETRIES, RETRY_FIRST_BACK_OFF).scheduler(Schedulers.elastic()))
+                .retryWhen(Retry.backoff(retries, minBorrowDelay).scheduler(Schedulers.elastic()))
                 .doOnError(throwable -> LOGGER.error("error when creating new channel", throwable));
         }
 
@@ -110,20 +111,24 @@ public class ReactorRabbitMQChannelPool implements ChannelPool, Startable {
     private final Mono<Connection> connectionMono;
     private final GenericObjectPool<Channel> pool;
     private final ConcurrentSkipListSet<Channel> borrowedChannels;
+    private final Duration minBorrowDelay;
+    private final int retries;
     private Sender sender;
 
     public ReactorRabbitMQChannelPool(SimpleConnectionPool simpleConnectionPool) {
-        this(simpleConnectionPool.getResilientConnection(), MAX_CHANNELS_NUMBER);
+        this(simpleConnectionPool.getResilientConnection(), MAX_CHANNELS_NUMBER, MIN_BORROW_DELAY, MAX_BORROW_RETRIES);
     }
 
-    public ReactorRabbitMQChannelPool(Mono<Connection> connectionMono, int poolSize) {
+    public ReactorRabbitMQChannelPool(Mono<Connection> connectionMono, int poolSize, Duration minBorrowDelay, int retries) {
         this.connectionMono = connectionMono;
-        ChannelFactory channelFactory = new ChannelFactory(connectionMono);
+        this.retries = retries;
+        ChannelFactory channelFactory = new ChannelFactory(connectionMono, minBorrowDelay, retries);
 
         GenericObjectPoolConfig<Channel> config = new GenericObjectPoolConfig<>();
         config.setMaxTotal(poolSize);
         this.pool = new GenericObjectPool<>(channelFactory, config);
         this.borrowedChannels = new ConcurrentSkipListSet<>(Comparator.comparingInt(System::identityHashCode));
+        this.minBorrowDelay = minBorrowDelay;
     }
 
     public void start() {
@@ -146,7 +151,7 @@ public class ReactorRabbitMQChannelPool implements ChannelPool, Startable {
     private Mono<Channel> borrow() {
         return tryBorrowFromPool()
             .doOnError(throwable -> LOGGER.warn("Cannot borrow channel", throwable))
-            .retryWhen(Retry.backoff(MAX_BORROW_RETRIES, MIN_BORROW_DELAY).scheduler(Schedulers.elastic()))
+            .retryWhen(Retry.backoff(retries, minBorrowDelay).scheduler(Schedulers.elastic()))
             .onErrorMap(this::propagateException)
             .subscribeOn(Schedulers.elastic())
             .doOnNext(borrowedChannels::add);
diff --git a/backends-common/rabbitmq/src/main/java/org/apache/james/backends/rabbitmq/SimpleConnectionPool.java b/backends-common/rabbitmq/src/main/java/org/apache/james/backends/rabbitmq/SimpleConnectionPool.java
index d408666..b6125f2 100644
--- a/backends-common/rabbitmq/src/main/java/org/apache/james/backends/rabbitmq/SimpleConnectionPool.java
+++ b/backends-common/rabbitmq/src/main/java/org/apache/james/backends/rabbitmq/SimpleConnectionPool.java
@@ -59,6 +59,10 @@ public class SimpleConnectionPool implements AutoCloseable {
     public Mono<Connection> getResilientConnection() {
         int numRetries = 10;
         Duration initialDelay = Duration.ofMillis(100);
+        return getResilientConnection(numRetries, initialDelay);
+    }
+
+    public Mono<Connection> getResilientConnection(int numRetries, Duration initialDelay) {
         return Mono.defer(this::getOpenConnection)
             .retryWhen(Retry.backoff(numRetries, initialDelay).scheduler(Schedulers.elastic()));
     }
diff --git a/backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/DockerRabbitMQ.java b/backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/DockerRabbitMQ.java
index fc03b7a..f883168 100644
--- a/backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/DockerRabbitMQ.java
+++ b/backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/DockerRabbitMQ.java
@@ -47,12 +47,12 @@ public class DockerRabbitMQ {
     private static final Logger LOGGER = LoggerFactory.getLogger(DockerRabbitMQ.class);
 
     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 int NETWORK_RECOVERY_INTERVAL_OF_ONE_SECOND = 1000;
+    private static final int MIN_DELAY_OF_TEN_MILLISECONDS = 10;
+    private static final int CONNECTION_TIMEOUT_OF_ONE_HUNDRED_MILLISECOND = 100;
+    private static final int CHANNEL_RPC_TIMEOUT_OF_ONE_HUNDRED_MILLISECOND = 100;
+    private static final int HANDSHAKE_TIMEOUT_OF_ONE_HUNDRED_MILLISECOND = 100;
+    private static final int SHUTDOWN_TIMEOUT_OF_ONE_HUNDRED_MILLISECOND = 100;
+    private static final int NETWORK_RECOVERY_INTERVAL_OF_ONE_HUNDRED_MILLISECOND = 100;
     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;
@@ -259,12 +259,12 @@ public class DockerRabbitMQ {
             .managementUri(managementUri())
             .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)
-            .networkRecoveryIntervalInMs(NETWORK_RECOVERY_INTERVAL_OF_ONE_SECOND)
+            .minDelayInMs(MIN_DELAY_OF_TEN_MILLISECONDS)
+            .connectionTimeoutInMs(CONNECTION_TIMEOUT_OF_ONE_HUNDRED_MILLISECOND)
+            .channelRpcTimeoutInMs(CHANNEL_RPC_TIMEOUT_OF_ONE_HUNDRED_MILLISECOND)
+            .handshakeTimeoutInMs(HANDSHAKE_TIMEOUT_OF_ONE_HUNDRED_MILLISECOND)
+            .shutdownTimeoutInMs(SHUTDOWN_TIMEOUT_OF_ONE_HUNDRED_MILLISECOND)
+            .networkRecoveryIntervalInMs(NETWORK_RECOVERY_INTERVAL_OF_ONE_HUNDRED_MILLISECOND)
             .build();
 
         return new RabbitMQConnectionFactory(rabbitMQConfiguration);
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 ded5dd8..871e592 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
@@ -21,6 +21,7 @@ package org.apache.james.backends.rabbitmq;
 import static org.apache.james.backends.rabbitmq.RabbitMQFixture.DEFAULT_MANAGEMENT_CREDENTIAL;
 
 import java.net.URISyntaxException;
+import java.time.Duration;
 import java.util.function.Consumer;
 
 import org.junit.jupiter.api.extension.AfterAllCallback;
@@ -115,7 +116,10 @@ public class RabbitMQExtension implements BeforeAllCallback, BeforeEachCallback,
 
         RabbitMQConnectionFactory connectionFactory = createRabbitConnectionFactory();
         connectionPool = new SimpleConnectionPool(connectionFactory);
-        channelPool = new ReactorRabbitMQChannelPool(connectionPool.getResilientConnection(), 5);
+        Duration minBorrowDelay = Duration.ofMillis(5);
+        int retries = 2;
+        channelPool = new ReactorRabbitMQChannelPool(connectionPool.getResilientConnection(2, Duration.ofMillis(5)), 5,
+            minBorrowDelay, retries);
         channelPool.start();
     }
 
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 f4e6d62..9ae05c1 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
@@ -66,9 +66,11 @@ class ReactorRabbitMQChannelPoolTest implements ChannelPoolContract {
     }
 
     private ReactorRabbitMQChannelPool generateChannelPool(int poolSize) {
+        Duration minBorrowDelay = Duration.ofMillis(5);
+        int retries = 2;
         ReactorRabbitMQChannelPool reactorRabbitMQChannelPool = new ReactorRabbitMQChannelPool(
             rabbitMQExtension.getConnectionPool().getResilientConnection(),
-            poolSize);
+            poolSize, minBorrowDelay, retries);
         reactorRabbitMQChannelPool.start();
         return reactorRabbitMQChannelPool;
     }


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


[james-project] 14/28: JAMES-3350 Significant test speedup by weakening RabbitMQ isolation

Posted by bt...@apache.org.
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