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 <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to