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 rc...@apache.org on 2020/01/15 07:46:30 UTC

[james-project] 11/15: [Refactoring] Migrate to Junit 5 DeletedMessageVaultIntegrationTest

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

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

commit 1c58aa75041d916e87bc835e949afd08954be8d7
Author: Tran Tien Duc <dt...@linagora.com>
AuthorDate: Fri Jan 10 16:22:20 2020 +0700

    [Refactoring] Migrate to Junit 5 DeletedMessageVaultIntegrationTest
---
 .../RabbitMQEventDeadLettersIntegrationTest.java   | 122 +++++++++--------
 ...RabbitMQDeletedMessageVaultIntegrationTest.java |  46 ++++---
 .../MemoryDeletedMessageVaultIntegrationTest.java  |  33 +++--
 .../vault/DeletedMessageVaultIntegrationTest.java  | 146 +++++++++++----------
 4 files changed, 184 insertions(+), 163 deletions(-)

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 2dd73f0..a27dfff 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
@@ -71,6 +71,8 @@ import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Tag;
 import org.junit.jupiter.api.Test;
 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.RegisterExtension;
 
 import com.google.inject.Module;
@@ -153,20 +155,24 @@ class RabbitMQEventDeadLettersIntegrationTest {
                 .toInstance(retryEventsListener);
         }
 
-        RetryEventsListener retryEventsListener() {
+        @Override
+        public boolean supportsParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException {
+            return parameterContext.getParameter().getType() == RetryEventsListener.class;
+        }
+
+        @Override
+        public Object resolveParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException {
             return retryEventsListener;
         }
     }
-
-    private static final RetryEventsListenerExtension EVENT_EXTENSION = new RetryEventsListenerExtension();
-
+    
     @RegisterExtension
     static JamesServerExtension testExtension = new JamesServerBuilder()
         .extension(new DockerElasticSearchExtension())
         .extension(new CassandraExtension())
         .extension(new AwsS3BlobStoreExtension())
         .extension(new RabbitMQExtension())
-        .extension(EVENT_EXTENSION)
+        .extension(new RetryEventsListenerExtension())
         .server(configuration -> GuiceJamesServer.forConfiguration(configuration)
             .combineWith(CassandraRabbitMQJamesServerMain.MODULES)
             .overrideWith(TestJMAPServerModule.limitToTenMessages())
@@ -231,11 +237,11 @@ class RabbitMQEventDeadLettersIntegrationTest {
     }
 
     @Test
-    void failedEventShouldBeStoredInDeadLetterUnderItsGroupId() {
-        EVENT_EXTENSION.retryEventsListener().callsPerEventBeforeSuccess(MAX_RETRIES + 1);
+    void failedEventShouldBeStoredInDeadLetterUnderItsGroupId(RetryEventsListener retryEventsListener) {
+        retryEventsListener.callsPerEventBeforeSuccess(MAX_RETRIES + 1);
         generateInitialEvent();
 
-        waitForCalls(MAX_RETRIES + 1);
+        waitForCalls(retryEventsListener, MAX_RETRIES + 1);
 
         when()
             .get(EventDeadLettersRoutes.BASE_PATH + "/groups/" + GROUP_ID)
@@ -246,11 +252,11 @@ class RabbitMQEventDeadLettersIntegrationTest {
     }
 
     @Test
-    void successfulEventShouldNotBeStoredInDeadLetter() {
-        EVENT_EXTENSION.retryEventsListener().callsPerEventBeforeSuccess(MAX_RETRIES - 1);
+    void successfulEventShouldNotBeStoredInDeadLetter(RetryEventsListener retryEventsListener) {
+        retryEventsListener.callsPerEventBeforeSuccess(MAX_RETRIES - 1);
         generateInitialEvent();
 
-        calmlyAwait.atMost(ONE_MINUTE).until(() -> !EVENT_EXTENSION.retryEventsListener().successfulEvents.isEmpty());
+        calmlyAwait.atMost(ONE_MINUTE).until(() -> !retryEventsListener.successfulEvents.isEmpty());
 
         when()
             .get(EventDeadLettersRoutes.BASE_PATH + "/groups")
@@ -261,11 +267,11 @@ class RabbitMQEventDeadLettersIntegrationTest {
     }
 
     @Test
-    void groupIdOfFailedEventShouldBeStoredInDeadLetter() {
-        EVENT_EXTENSION.retryEventsListener().callsPerEventBeforeSuccess(MAX_RETRIES + 1);
+    void groupIdOfFailedEventShouldBeStoredInDeadLetter(RetryEventsListener retryEventsListener) {
+        retryEventsListener.callsPerEventBeforeSuccess(MAX_RETRIES + 1);
         generateInitialEvent();
 
-        waitForCalls(MAX_RETRIES + 1);
+        waitForCalls(retryEventsListener, MAX_RETRIES + 1);
 
         when()
             .get(EventDeadLettersRoutes.BASE_PATH + "/groups")
@@ -276,11 +282,11 @@ class RabbitMQEventDeadLettersIntegrationTest {
     }
 
     @Test
-    void failedEventShouldBeStoredInDeadLetter() {
-        EVENT_EXTENSION.retryEventsListener().callsPerEventBeforeSuccess(MAX_RETRIES + 1);
+    void failedEventShouldBeStoredInDeadLetter(RetryEventsListener retryEventsListener) {
+        retryEventsListener.callsPerEventBeforeSuccess(MAX_RETRIES + 1);
         MailboxId mailboxId = generateInitialEvent();
 
-        waitForCalls(MAX_RETRIES + 1);
+        waitForCalls(retryEventsListener, MAX_RETRIES + 1);
 
         String failedInsertionId = retrieveFirstFailedInsertionId();
 
@@ -297,12 +303,12 @@ class RabbitMQEventDeadLettersIntegrationTest {
     }
 
     @Test
-    void multipleFailedEventShouldBeStoredInDeadLetter() {
-        EVENT_EXTENSION.retryEventsListener().callsPerEventBeforeSuccess(MAX_RETRIES + 1);
+    void multipleFailedEventShouldBeStoredInDeadLetter(RetryEventsListener retryEventsListener) {
+        retryEventsListener.callsPerEventBeforeSuccess(MAX_RETRIES + 1);
         generateInitialEvent();
         generateSecondEvent();
 
-        waitForCalls((MAX_RETRIES + 1) * 2);
+        waitForCalls(retryEventsListener, (MAX_RETRIES + 1) * 2);
 
         when()
             .get(EventDeadLettersRoutes.BASE_PATH + "/groups/" + GROUP_ID)
@@ -313,11 +319,11 @@ class RabbitMQEventDeadLettersIntegrationTest {
     }
 
     @Test
-    void failedEventShouldNotBeInDeadLetterAfterBeingDeleted() {
-        EVENT_EXTENSION.retryEventsListener().callsPerEventBeforeSuccess(MAX_RETRIES + 1);
+    void failedEventShouldNotBeInDeadLetterAfterBeingDeleted(RetryEventsListener retryEventsListener) {
+        retryEventsListener.callsPerEventBeforeSuccess(MAX_RETRIES + 1);
         generateInitialEvent();
 
-        waitForCalls(MAX_RETRIES + 1);
+        waitForCalls(retryEventsListener, MAX_RETRIES + 1);
 
         String failedInsertionId = retrieveFirstFailedInsertionId();
 
@@ -331,11 +337,11 @@ class RabbitMQEventDeadLettersIntegrationTest {
     }
 
     @Test
-    void taskShouldBeCompletedAfterSuccessfulRedelivery() {
-        EVENT_EXTENSION.retryEventsListener().callsPerEventBeforeSuccess(MAX_RETRIES + 1);
+    void taskShouldBeCompletedAfterSuccessfulRedelivery(RetryEventsListener retryEventsListener) {
+        retryEventsListener.callsPerEventBeforeSuccess(MAX_RETRIES + 1);
         generateInitialEvent();
 
-        waitForCalls(MAX_RETRIES + 1);
+        waitForCalls(retryEventsListener, MAX_RETRIES + 1);
 
         String failedInsertionId = retrieveFirstFailedInsertionId();
 
@@ -358,11 +364,11 @@ class RabbitMQEventDeadLettersIntegrationTest {
     }
 
     @Test
-    void failedEventShouldNotBeInDeadLettersAfterSuccessfulRedelivery() {
-        EVENT_EXTENSION.retryEventsListener().callsPerEventBeforeSuccess(MAX_RETRIES + 1);
+    void failedEventShouldNotBeInDeadLettersAfterSuccessfulRedelivery(RetryEventsListener retryEventsListener) {
+        retryEventsListener.callsPerEventBeforeSuccess(MAX_RETRIES + 1);
         generateInitialEvent();
 
-        waitForCalls(MAX_RETRIES + 1);
+        waitForCalls(retryEventsListener, MAX_RETRIES + 1);
 
         String failedInsertionId = retrieveFirstFailedInsertionId();
 
@@ -383,11 +389,11 @@ class RabbitMQEventDeadLettersIntegrationTest {
     }
 
     @Test
-    void failedEventShouldBeCorrectlyProcessedByListenerAfterSuccessfulRedelivery() throws InterruptedException {
-        EVENT_EXTENSION.retryEventsListener().callsPerEventBeforeSuccess(MAX_RETRIES + 1);
+    void failedEventShouldBeCorrectlyProcessedByListenerAfterSuccessfulRedelivery(RetryEventsListener retryEventsListener) throws InterruptedException {
+        retryEventsListener.callsPerEventBeforeSuccess(MAX_RETRIES + 1);
         generateInitialEvent();
 
-        waitForCalls(MAX_RETRIES + 1);
+        waitForCalls(retryEventsListener, MAX_RETRIES + 1);
 
         String failedInsertionId = retrieveFirstFailedInsertionId();
 
@@ -401,20 +407,20 @@ class RabbitMQEventDeadLettersIntegrationTest {
             .basePath(TasksRoutes.BASE)
             .get(taskId + "/await");
 
-        awaitAtMostTenSeconds.until(() -> EVENT_EXTENSION.retryEventsListener().getSuccessfulEvents().size() == 1);
+        awaitAtMostTenSeconds.until(() -> retryEventsListener.getSuccessfulEvents().size() == 1);
     }
 
-    private void waitForCalls(int count) {
-        calmlyAwait.atMost(ONE_MINUTE).until(() -> EVENT_EXTENSION.retryEventsListener().totalCalls.intValue() >= count);
+    private void waitForCalls(RetryEventsListener retryEventsListener, int count) {
+        calmlyAwait.atMost(ONE_MINUTE).until(() -> retryEventsListener.totalCalls.intValue() >= count);
     }
 
     @Test
-    void taskShouldBeCompletedAfterSuccessfulGroupRedelivery() {
-        EVENT_EXTENSION.retryEventsListener().callsPerEventBeforeSuccess(MAX_RETRIES + 1);
+    void taskShouldBeCompletedAfterSuccessfulGroupRedelivery(RetryEventsListener retryEventsListener) {
+        retryEventsListener.callsPerEventBeforeSuccess(MAX_RETRIES + 1);
         generateInitialEvent();
         generateSecondEvent();
 
-        waitForCalls((MAX_RETRIES + 1) * 2);
+        waitForCalls(retryEventsListener, (MAX_RETRIES + 1) * 2);
 
         String taskId = with()
             .queryParam("action", EVENTS_ACTION)
@@ -434,12 +440,12 @@ class RabbitMQEventDeadLettersIntegrationTest {
     }
 
     @Test
-    void multipleFailedEventsShouldNotBeInDeadLettersAfterSuccessfulGroupRedelivery() {
-        EVENT_EXTENSION.retryEventsListener().callsPerEventBeforeSuccess(MAX_RETRIES + 1);
+    void multipleFailedEventsShouldNotBeInDeadLettersAfterSuccessfulGroupRedelivery(RetryEventsListener retryEventsListener) {
+        retryEventsListener.callsPerEventBeforeSuccess(MAX_RETRIES + 1);
         generateInitialEvent();
         generateSecondEvent();
 
-        waitForCalls((MAX_RETRIES + 1) * 2);
+        waitForCalls(retryEventsListener, (MAX_RETRIES + 1) * 2);
 
         String taskId = with()
             .queryParam("action", EVENTS_ACTION)
@@ -460,12 +466,12 @@ class RabbitMQEventDeadLettersIntegrationTest {
     }
 
     @Test
-    void multipleFailedEventsShouldBeCorrectlyProcessedByListenerAfterSuccessfulGroupRedelivery() {
-        EVENT_EXTENSION.retryEventsListener().callsPerEventBeforeSuccess(MAX_RETRIES + 1);
+    void multipleFailedEventsShouldBeCorrectlyProcessedByListenerAfterSuccessfulGroupRedelivery(RetryEventsListener retryEventsListener) {
+        retryEventsListener.callsPerEventBeforeSuccess(MAX_RETRIES + 1);
         generateInitialEvent();
         generateSecondEvent();
 
-        waitForCalls((MAX_RETRIES + 1) * 2);
+        waitForCalls(retryEventsListener, (MAX_RETRIES + 1) * 2);
 
         String taskId = with()
             .queryParam("action", EVENTS_ACTION)
@@ -477,16 +483,16 @@ class RabbitMQEventDeadLettersIntegrationTest {
             .basePath(TasksRoutes.BASE)
             .get(taskId + "/await");
 
-        awaitAtMostTenSeconds.until(() -> EVENT_EXTENSION.retryEventsListener().getSuccessfulEvents().size() == 2);
+        awaitAtMostTenSeconds.until(() -> retryEventsListener.getSuccessfulEvents().size() == 2);
     }
 
     @Test
-    void taskShouldBeCompletedAfterSuccessfulAllRedelivery() {
-        EVENT_EXTENSION.retryEventsListener().callsPerEventBeforeSuccess(MAX_RETRIES + 1);
+    void taskShouldBeCompletedAfterSuccessfulAllRedelivery(RetryEventsListener retryEventsListener) {
+        retryEventsListener.callsPerEventBeforeSuccess(MAX_RETRIES + 1);
         generateInitialEvent();
         generateSecondEvent();
 
-        waitForCalls((MAX_RETRIES + 1) * 2);
+        waitForCalls(retryEventsListener, (MAX_RETRIES + 1) * 2);
 
         String taskId = with()
             .queryParam("action", EVENTS_ACTION)
@@ -505,12 +511,12 @@ class RabbitMQEventDeadLettersIntegrationTest {
     }
 
     @Test
-    void multipleFailedEventsShouldNotBeInDeadLettersAfterSuccessfulAllRedelivery() {
-        EVENT_EXTENSION.retryEventsListener().callsPerEventBeforeSuccess(MAX_RETRIES + 1);
+    void multipleFailedEventsShouldNotBeInDeadLettersAfterSuccessfulAllRedelivery(RetryEventsListener retryEventsListener) {
+        retryEventsListener.callsPerEventBeforeSuccess(MAX_RETRIES + 1);
         generateInitialEvent();
         generateSecondEvent();
 
-        waitForCalls((MAX_RETRIES + 1) * 2);
+        waitForCalls(retryEventsListener, (MAX_RETRIES + 1) * 2);
 
         String taskId = with()
             .queryParam("action", EVENTS_ACTION)
@@ -531,12 +537,12 @@ class RabbitMQEventDeadLettersIntegrationTest {
     }
 
     @Test
-    void multipleFailedEventsShouldBeCorrectlyProcessedByListenerAfterSuccessfulAllRedelivery() {
-        EVENT_EXTENSION.retryEventsListener().callsPerEventBeforeSuccess(MAX_RETRIES + 1);
+    void multipleFailedEventsShouldBeCorrectlyProcessedByListenerAfterSuccessfulAllRedelivery(RetryEventsListener retryEventsListener) {
+        retryEventsListener.callsPerEventBeforeSuccess(MAX_RETRIES + 1);
         generateInitialEvent();
         generateSecondEvent();
 
-        waitForCalls((MAX_RETRIES + 1) * 2);
+        waitForCalls(retryEventsListener, (MAX_RETRIES + 1) * 2);
 
         String taskId = with()
             .queryParam("action", EVENTS_ACTION)
@@ -548,16 +554,16 @@ class RabbitMQEventDeadLettersIntegrationTest {
             .basePath(TasksRoutes.BASE)
             .get(taskId + "/await");
 
-        awaitAtMostTenSeconds.until(() -> EVENT_EXTENSION.retryEventsListener().getSuccessfulEvents().size() == 2);
+        awaitAtMostTenSeconds.until(() -> retryEventsListener.getSuccessfulEvents().size() == 2);
     }
 
     @Disabled("retry rest API delivers only once, see JAMES-2907. We need same retry cound for this test to work")
     @Test
-    void failedEventShouldStillBeInDeadLettersAfterFailedRedelivery() {
-        EVENT_EXTENSION.retryEventsListener().callsPerEventBeforeSuccess(MAX_RETRIES * 2 + 1);
+    void failedEventShouldStillBeInDeadLettersAfterFailedRedelivery(RetryEventsListener retryEventsListener) {
+        retryEventsListener.callsPerEventBeforeSuccess(MAX_RETRIES * 2 + 1);
         generateInitialEvent();
 
-        waitForCalls(MAX_RETRIES + 1);
+        waitForCalls(retryEventsListener, MAX_RETRIES + 1);
 
         String failedInsertionId = retrieveFirstFailedInsertionId();
 
diff --git a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/vault/RabbitMQDeletedMessageVaultIntegrationTest.java b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/vault/RabbitMQDeletedMessageVaultIntegrationTest.java
index 2a0373e..9869760 100644
--- a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/vault/RabbitMQDeletedMessageVaultIntegrationTest.java
+++ b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/vault/RabbitMQDeletedMessageVaultIntegrationTest.java
@@ -19,36 +19,40 @@
 
 package org.apache.james.webadmin.integration.rabbitmq.vault;
 
-import java.io.IOException;
-import java.time.Clock;
-
-import org.apache.james.CassandraRabbitMQAwsS3JmapTestRule;
-import org.apache.james.DockerCassandraRule;
+import org.apache.james.CassandraExtension;
+import org.apache.james.CassandraRabbitMQJamesServerMain;
+import org.apache.james.DockerElasticSearchExtension;
 import org.apache.james.GuiceJamesServer;
-import org.apache.james.filesystem.api.FileSystem;
+import org.apache.james.JamesServerBuilder;
+import org.apache.james.JamesServerExtension;
+import org.apache.james.modules.AwsS3BlobStoreExtension;
+import org.apache.james.modules.RabbitMQExtension;
+import org.apache.james.modules.TestJMAPServerModule;
 import org.apache.james.modules.vault.TestDeleteMessageVaultPreDeletionHookModule;
 import org.apache.james.webadmin.integration.WebadminIntergrationTestModule;
 import org.apache.james.webadmin.integration.vault.DeletedMessageVaultIntegrationTest;
-import org.junit.Rule;
+import org.junit.jupiter.api.extension.RegisterExtension;
 
-public class RabbitMQDeletedMessageVaultIntegrationTest extends DeletedMessageVaultIntegrationTest {
+class RabbitMQDeletedMessageVaultIntegrationTest extends DeletedMessageVaultIntegrationTest {
 
-    @Rule
-    public DockerCassandraRule cassandra = new DockerCassandraRule();
-    @Rule
-    public CassandraRabbitMQAwsS3JmapTestRule rule = CassandraRabbitMQAwsS3JmapTestRule.defaultTestRule();
+    private static final DockerElasticSearchExtension ES_EXTENSION = new DockerElasticSearchExtension();
 
-    @Override
-    public GuiceJamesServer createJmapServer(FileSystem fileSystem, Clock clock) throws IOException {
-        return rule.jmapServer(cassandra.getModule(),
-            new TestDeleteMessageVaultPreDeletionHookModule(),
-            new WebadminIntergrationTestModule(),
-            binder -> binder.bind(FileSystem.class).toInstance(fileSystem),
-            binder -> binder.bind(Clock.class).toInstance(clock));
-    }
+    @RegisterExtension
+    static JamesServerExtension testExtension = new JamesServerBuilder()
+        .extension(ES_EXTENSION)
+        .extension(new CassandraExtension())
+        .extension(new AwsS3BlobStoreExtension())
+        .extension(new RabbitMQExtension())
+        .extension(new ClockExtension())
+        .server(configuration -> GuiceJamesServer.forConfiguration(configuration)
+            .combineWith(CassandraRabbitMQJamesServerMain.MODULES)
+            .overrideWith(TestJMAPServerModule.limitToTenMessages())
+            .overrideWith(new TestDeleteMessageVaultPreDeletionHookModule())
+            .overrideWith(new WebadminIntergrationTestModule()))
+        .build();
 
     @Override
     protected void awaitSearchUpToDate() {
-        rule.await();
+        ES_EXTENSION.await();
     }
 }
diff --git a/server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/memory/vault/MemoryDeletedMessageVaultIntegrationTest.java b/server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/memory/vault/MemoryDeletedMessageVaultIntegrationTest.java
index 4481a12..0e1b649 100644
--- a/server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/memory/vault/MemoryDeletedMessageVaultIntegrationTest.java
+++ b/server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/memory/vault/MemoryDeletedMessageVaultIntegrationTest.java
@@ -19,30 +19,27 @@
 
 package org.apache.james.webadmin.integration.memory.vault;
 
-import java.io.IOException;
-import java.time.Clock;
-
 import org.apache.james.GuiceJamesServer;
-import org.apache.james.MemoryJmapTestRule;
-import org.apache.james.filesystem.api.FileSystem;
+import org.apache.james.JamesServerBuilder;
+import org.apache.james.JamesServerExtension;
+import org.apache.james.MemoryJamesServerMain;
+import org.apache.james.modules.TestJMAPServerModule;
 import org.apache.james.modules.vault.TestDeleteMessageVaultPreDeletionHookModule;
 import org.apache.james.webadmin.integration.WebadminIntergrationTestModule;
 import org.apache.james.webadmin.integration.vault.DeletedMessageVaultIntegrationTest;
-import org.junit.Rule;
-
-public class MemoryDeletedMessageVaultIntegrationTest extends DeletedMessageVaultIntegrationTest {
+import org.junit.jupiter.api.extension.RegisterExtension;
 
-    @Rule
-    public MemoryJmapTestRule memoryJmap = new MemoryJmapTestRule();
+class MemoryDeletedMessageVaultIntegrationTest extends DeletedMessageVaultIntegrationTest {
 
-    @Override
-    protected GuiceJamesServer createJmapServer(FileSystem fileSystem, Clock clock) throws IOException {
-        return memoryJmap.jmapServer(
-            new TestDeleteMessageVaultPreDeletionHookModule(),
-            new WebadminIntergrationTestModule(),
-            binder -> binder.bind(FileSystem.class).toInstance(fileSystem),
-            binder -> binder.bind(Clock.class).toInstance(clock));
-    }
+    @RegisterExtension
+    static JamesServerExtension jamesServerExtension = new JamesServerBuilder()
+        .extension(new ClockExtension())
+        .server(configuration -> GuiceJamesServer.forConfiguration(configuration)
+            .combineWith(MemoryJamesServerMain.IN_MEMORY_SERVER_AGGREGATE_MODULE)
+            .overrideWith(TestJMAPServerModule.limitToTenMessages())
+            .overrideWith(new TestDeleteMessageVaultPreDeletionHookModule())
+            .overrideWith(new WebadminIntergrationTestModule()))
+        .build();
 
     @Override
     protected void awaitSearchUpToDate() {
diff --git a/server/protocols/webadmin-integration-test/webadmin-integration-test-common/src/main/java/org/apache/james/webadmin/integration/vault/DeletedMessageVaultIntegrationTest.java b/server/protocols/webadmin-integration-test/webadmin-integration-test-common/src/main/java/org/apache/james/webadmin/integration/vault/DeletedMessageVaultIntegrationTest.java
index 0de220c..f166582 100644
--- a/server/protocols/webadmin-integration-test/webadmin-integration-test-common/src/main/java/org/apache/james/webadmin/integration/vault/DeletedMessageVaultIntegrationTest.java
+++ b/server/protocols/webadmin-integration-test/webadmin-integration-test-common/src/main/java/org/apache/james/webadmin/integration/vault/DeletedMessageVaultIntegrationTest.java
@@ -50,8 +50,8 @@ import java.time.ZonedDateTime;
 import java.util.List;
 
 import org.apache.james.GuiceJamesServer;
+import org.apache.james.GuiceModuleTestExtension;
 import org.apache.james.core.Username;
-import org.apache.james.filesystem.api.FileSystem;
 import org.apache.james.jmap.AccessToken;
 import org.apache.james.jmap.draft.JmapGuiceProbe;
 import org.apache.james.junit.categories.BasicFeature;
@@ -63,8 +63,6 @@ import org.apache.james.mailbox.probe.MailboxProbe;
 import org.apache.james.modules.MailboxProbeImpl;
 import org.apache.james.modules.protocols.ImapGuiceProbe;
 import org.apache.james.probe.DataProbe;
-import org.apache.james.server.core.JamesServerResourceLoader;
-import org.apache.james.server.core.filesystem.FileSystemImpl;
 import org.apache.james.util.Port;
 import org.apache.james.utils.DataProbeImpl;
 import org.apache.james.utils.IMAPMessageReader;
@@ -73,15 +71,17 @@ import org.apache.james.utils.WebAdminGuiceProbe;
 import org.apache.james.webadmin.WebAdminUtils;
 import org.awaitility.Duration;
 import org.awaitility.core.ConditionFactory;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-import org.junit.rules.TemporaryFolder;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Tag;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtensionContext;
+import org.junit.jupiter.api.extension.ParameterContext;
+import org.junit.jupiter.api.extension.ParameterResolutionException;
 
 import com.google.common.base.Strings;
 import com.google.common.collect.ImmutableList;
+import com.google.inject.Module;
 
 import io.restassured.RestAssured;
 import io.restassured.config.ParamConfig;
@@ -90,6 +90,30 @@ import io.restassured.specification.RequestSpecification;
 
 public abstract class DeletedMessageVaultIntegrationTest {
 
+    public static class ClockExtension implements GuiceModuleTestExtension {
+        private UpdatableTickingClock clock;
+
+        @Override
+        public void beforeEach(ExtensionContext extensionContext) throws Exception {
+            clock = new UpdatableTickingClock(NOW.toInstant());
+        }
+
+        @Override
+        public Module getModule() {
+            return binder -> binder.bind(Clock.class).toInstance(clock);
+        }
+
+        @Override
+        public boolean supportsParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException {
+            return parameterContext.getParameter().getType() == UpdatableTickingClock.class;
+        }
+
+        @Override
+        public Object resolveParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException {
+            return clock;
+        }
+    }
+
     private static final ZonedDateTime NOW = ZonedDateTime.now();
     private static final ZonedDateTime TWO_MONTH_AFTER_ONE_YEAR_EXPIRATION = NOW.plusYears(1).plusMonths(2);
     private static final String FIRST_SUBJECT = "first subject";
@@ -115,26 +139,15 @@ public abstract class DeletedMessageVaultIntegrationTest {
         .exportTo(HOMER)
         .query(MATCH_ALL_QUERY);
 
-    @Rule
-    public IMAPMessageReader imapMessageReader = new IMAPMessageReader();
-    @Rule
-    public TemporaryFolder tempFolder = new TemporaryFolder();
-
+    private IMAPMessageReader imapMessageReader;
     private AccessToken homerAccessToken;
     private AccessToken bartAccessToken;
     private AccessToken jackAccessToken;
-    private GuiceJamesServer jmapServer;
     private RequestSpecification webAdminApi;
-    private UpdatableTickingClock clock;
     private MailboxId otherMailboxId;
-    private FileSystem fileSystem;
-
-    @Before
-    public void setup() throws Throwable {
-        clock = new UpdatableTickingClock(NOW.toInstant());
-        fileSystem = new FileSystemImpl(new JamesServerResourceLoader(tempFolder.getRoot().getPath()));
-        jmapServer = createJmapServer(fileSystem, clock);
-        jmapServer.start();
+
+    @BeforeEach
+    void setup(GuiceJamesServer jmapServer) throws Throwable {
         MailboxProbe mailboxProbe = jmapServer.getProbe(MailboxProbeImpl.class);
         DataProbe dataProbe = jmapServer.getProbe(DataProbeImpl.class);
 
@@ -154,23 +167,24 @@ public abstract class DeletedMessageVaultIntegrationTest {
         bartAccessToken = authenticateJamesUser(baseUri(jmapPort), Username.of(BART), BOB_PASSWORD);
         jackAccessToken = authenticateJamesUser(baseUri(jmapPort), Username.of(JACK), PASSWORD);
 
+        imapMessageReader = new IMAPMessageReader();
+
         webAdminApi = WebAdminUtils.spec(jmapServer.getProbe(WebAdminGuiceProbe.class).getWebAdminPort())
             .config(WebAdminUtils.defaultConfig()
                 .paramConfig(new ParamConfig(REPLACE, REPLACE, REPLACE)));
+
     }
 
-    protected abstract GuiceJamesServer createJmapServer(FileSystem fileSystem, Clock clock) throws IOException;
+    @AfterEach
+    void tearDown() throws IOException {
+        imapMessageReader.close();
+    }
 
     protected abstract void awaitSearchUpToDate();
 
-    @After
-    public void tearDown() throws Exception {
-        jmapServer.stop();
-    }
-
-    @Category(BasicFeature.class)
+    @Tag(BasicFeature.TAG)
     @Test
-    public void vaultEndpointShouldRestoreJmapDeletedEmail() {
+    void vaultEndpointShouldRestoreJmapDeletedEmail() {
         bartSendMessageToHomer();
         WAIT_TWO_MINUTES.until(() -> listMessageIdsForAccount(homerAccessToken).size() == 1);
 
@@ -192,9 +206,9 @@ public abstract class DeletedMessageVaultIntegrationTest {
             .body(ARGUMENTS + ".list.subject", hasItem(SUBJECT));
     }
 
-    @Category(BasicFeature.class)
+    @Tag(BasicFeature.TAG)
     @Test
-    public void vaultEndpointShouldRestoreImapDeletedEmail() throws Exception {
+    void vaultEndpointShouldRestoreImapDeletedEmail(GuiceJamesServer jmapServer) throws Exception {
         bartSendMessageToHomer();
         WAIT_TWO_MINUTES.until(() -> listMessageIdsForAccount(homerAccessToken).size() == 1);
 
@@ -221,9 +235,9 @@ public abstract class DeletedMessageVaultIntegrationTest {
             .body(ARGUMENTS + ".list.subject", hasItem(SUBJECT));
     }
 
-    @Category(BasicFeature.class)
+    @Tag(BasicFeature.TAG)
     @Test
-    public void vaultEndpointShouldRestoreImapDeletedMailbox() throws Exception {
+    void vaultEndpointShouldRestoreImapDeletedMailbox(GuiceJamesServer jmapServer) throws Exception {
         bartSendMessageToHomer();
         WAIT_TWO_MINUTES.until(() -> listMessageIdsForAccount(homerAccessToken).size() == 1);
 
@@ -253,7 +267,7 @@ public abstract class DeletedMessageVaultIntegrationTest {
     }
 
     @Test
-    public void restoreShouldCreateRestoreMessagesMailbox() {
+    void restoreShouldCreateRestoreMessagesMailbox() {
         bartSendMessageToHomer();
         WAIT_TWO_MINUTES.until(() -> listMessageIdsForAccount(homerAccessToken).size() == 1);
 
@@ -267,7 +281,7 @@ public abstract class DeletedMessageVaultIntegrationTest {
     }
 
     @Test
-    public void postShouldRestoreMatchingMessages() {
+    void postShouldRestoreMatchingMessages() {
         bartSendMessageToHomerWithSubject("aaaaa");
         bartSendMessageToHomerWithSubject("bbbbb");
         WAIT_TWO_MINUTES.until(() -> listMessageIdsForAccount(homerAccessToken).size() == 2);
@@ -303,7 +317,7 @@ public abstract class DeletedMessageVaultIntegrationTest {
     }
 
     @Test
-    public void postShouldNotRestoreWhenNoMatchingMessages() throws Exception {
+    void postShouldNotRestoreWhenNoMatchingMessages() throws Exception {
         bartSendMessageToHomerWithSubject("aaaaa");
         bartSendMessageToHomerWithSubject("bbbbb");
         WAIT_TWO_MINUTES.until(() -> listMessageIdsForAccount(homerAccessToken).size() == 2);
@@ -333,7 +347,7 @@ public abstract class DeletedMessageVaultIntegrationTest {
     }
 
     @Test
-    public void imapMovedMessageShouldNotEndUpInTheVault() throws Exception {
+    void imapMovedMessageShouldNotEndUpInTheVault(GuiceJamesServer jmapServer) throws Exception {
         bartSendMessageToHomer();
         WAIT_TWO_MINUTES.until(() -> listMessageIdsForAccount(homerAccessToken).size() == 1);
 
@@ -353,7 +367,7 @@ public abstract class DeletedMessageVaultIntegrationTest {
     }
 
     @Test
-    public void jmapMovedMessageShouldNotEndUpInTheVault() {
+    void jmapMovedMessageShouldNotEndUpInTheVault() {
         bartSendMessageToHomer();
         WAIT_TWO_MINUTES.until(() -> listMessageIdsForAccount(homerAccessToken).size() == 1);
         String messageId = listMessageIdsForAccount(homerAccessToken).get(0);
@@ -370,7 +384,7 @@ public abstract class DeletedMessageVaultIntegrationTest {
     }
 
     @Test
-    public void restoreShouldNotImpactOtherUsers() {
+    void restoreShouldNotImpactOtherUsers() {
         bartSendMessageToHomer();
         WAIT_TWO_MINUTES.until(() -> listMessageIdsForAccount(homerAccessToken).size() == 1);
 
@@ -388,7 +402,7 @@ public abstract class DeletedMessageVaultIntegrationTest {
     }
 
     @Test
-    public void restoredMessagesShouldNotBeRemovedFromTheVault() {
+    void restoredMessagesShouldNotBeRemovedFromTheVault() {
         bartSendMessageToHomer();
         WAIT_TWO_MINUTES.until(() -> listMessageIdsForAccount(homerAccessToken).size() == 1);
 
@@ -403,7 +417,7 @@ public abstract class DeletedMessageVaultIntegrationTest {
     }
 
     @Test
-    public void vaultEndpointShouldNotRestoreItemsWhenTheVaultIsEmpty() {
+    void vaultEndpointShouldNotRestoreItemsWhenTheVaultIsEmpty() {
         bartSendMessageToHomer();
         WAIT_TWO_MINUTES.until(() -> listMessageIdsForAccount(homerAccessToken).size() == 1);
 
@@ -416,7 +430,7 @@ public abstract class DeletedMessageVaultIntegrationTest {
     }
 
     @Test
-    public void vaultEndpointShouldNotRestoreMessageForSharee() {
+    void vaultEndpointShouldNotRestoreMessageForSharee() {
         bartSendMessageToHomer();
         WAIT_TWO_MINUTES.until(() -> listMessageIdsForAccount(homerAccessToken).size() == 1);
         WAIT_TWO_MINUTES.until(() -> listMessageIdsForAccount(bartAccessToken).size() == 1);
@@ -438,7 +452,7 @@ public abstract class DeletedMessageVaultIntegrationTest {
     }
 
     @Test
-    public void vaultEndpointShouldRestoreMessageForSharer() {
+    void vaultEndpointShouldRestoreMessageForSharer() {
         bartSendMessageToHomer();
         WAIT_TWO_MINUTES.until(() -> listMessageIdsForAccount(homerAccessToken).size() == 1);
 
@@ -465,9 +479,9 @@ public abstract class DeletedMessageVaultIntegrationTest {
             .body(ARGUMENTS + ".list.subject", hasItem(SUBJECT));
     }
 
-    @Category(BasicFeature.class)
+    @Tag(BasicFeature.TAG)
     @Test
-    public void vaultExportShouldExportZipContainsVaultMessagesToShareeWhenJmapDeleteMessage() throws Exception {
+    void vaultExportShouldExportZipContainsVaultMessagesToShareeWhenJmapDeleteMessage() throws Exception {
         bartSendMessageToHomer();
         WAIT_TWO_MINUTES.until(() -> listMessageIdsForAccount(homerAccessToken).size() == 1);
         String messageIdOfHomer = listMessageIdsForAccount(homerAccessToken).get(0);
@@ -483,9 +497,9 @@ public abstract class DeletedMessageVaultIntegrationTest {
         }
     }
 
-    @Category(BasicFeature.class)
+    @Tag(BasicFeature.TAG)
     @Test
-    public void vaultExportShouldExportZipContainsVaultMessagesToShareeWhenImapDeleteMessage() throws Exception {
+    void vaultExportShouldExportZipContainsVaultMessagesToShareeWhenImapDeleteMessage(GuiceJamesServer jmapServer) throws Exception {
         bartSendMessageToHomer();
         WAIT_TWO_MINUTES.until(() -> listMessageIdsForAccount(homerAccessToken).size() == 1);
         String messageIdOfHomer = listMessageIdsForAccount(homerAccessToken).get(0);
@@ -506,9 +520,9 @@ public abstract class DeletedMessageVaultIntegrationTest {
         }
     }
 
-    @Category(BasicFeature.class)
+    @Tag(BasicFeature.TAG)
     @Test
-    public void vaultExportShouldExportZipContainsVaultMessagesToShareeWhenImapDeletedMailbox() throws Exception {
+    void vaultExportShouldExportZipContainsVaultMessagesToShareeWhenImapDeletedMailbox(GuiceJamesServer jmapServer) throws Exception {
         bartSendMessageToHomer();
         WAIT_TWO_MINUTES.until(() -> listMessageIdsForAccount(homerAccessToken).size() == 1);
         String messageIdOfHomer = listMessageIdsForAccount(homerAccessToken).get(0);
@@ -532,7 +546,7 @@ public abstract class DeletedMessageVaultIntegrationTest {
     }
 
     @Test
-    public void vaultExportShouldExportZipContainsOnlyMatchedMessages() throws Exception {
+    void vaultExportShouldExportZipContainsOnlyMatchedMessages() throws Exception {
         bartSendMessageToHomerWithSubject(FIRST_SUBJECT);
         WAIT_TWO_MINUTES.until(() -> listMessageIdsForAccount(homerAccessToken).size() == 1);
         String firstMessageIdOfHomer = listMessageIdsForAccount(homerAccessToken).get(0);
@@ -559,7 +573,7 @@ public abstract class DeletedMessageVaultIntegrationTest {
     }
 
     @Test
-    public void vaultExportShouldExportEmptyZipWhenQueryDoesntMatch() throws Exception {
+    void vaultExportShouldExportEmptyZipWhenQueryDoesntMatch() throws Exception {
         bartSendMessageToHomerWithSubject(FIRST_SUBJECT);
         bartSendMessageToHomerWithSubject(SECOND_SUBJECT);
         WAIT_TWO_MINUTES.until(() -> listMessageIdsForAccount(homerAccessToken).size() == 2);
@@ -583,7 +597,7 @@ public abstract class DeletedMessageVaultIntegrationTest {
     }
 
     @Test
-    public void vaultExportShouldExportEmptyZipWhenVaultIsEmpty() throws Exception {
+    void vaultExportShouldExportEmptyZipWhenVaultIsEmpty() throws Exception {
         String fileLocation = exportAndGetFileLocationFromLastMail(EXPORT_ALL_HOMER_MESSAGES_TO_BART, bartAccessToken);
 
         try (ZipAssert zipAssert = assertThatZip(new FileInputStream(fileLocation))) {
@@ -592,7 +606,7 @@ public abstract class DeletedMessageVaultIntegrationTest {
     }
 
     @Test
-    public void vaultExportShouldResponseIdempotentSideEffect() throws Exception {
+    void vaultExportShouldResponseIdempotentSideEffect() throws Exception {
         bartSendMessageToHomer();
         WAIT_TWO_MINUTES.until(() -> listMessageIdsForAccount(homerAccessToken).size() == 1);
 
@@ -608,7 +622,7 @@ public abstract class DeletedMessageVaultIntegrationTest {
     }
 
     @Test
-    public void vaultPurgeShouldMakeExportProduceEmptyZipWhenAllMessagesAreExpired() throws Exception {
+    void vaultPurgeShouldMakeExportProduceEmptyZipWhenAllMessagesAreExpired(UpdatableTickingClock clock) throws Exception {
         bartSendMessageToHomer();
         bartSendMessageToHomer();
         bartSendMessageToHomer();
@@ -627,7 +641,7 @@ public abstract class DeletedMessageVaultIntegrationTest {
     }
 
     @Test
-    public void vaultPurgeShouldMakeExportProduceAZipWhenOneMessageIsNotExpired() throws Exception {
+    void vaultPurgeShouldMakeExportProduceAZipWhenOneMessageIsNotExpired(UpdatableTickingClock clock) throws Exception {
         bartSendMessageToHomer();
         WAIT_TWO_MINUTES.until(() -> listMessageIdsForAccount(homerAccessToken).size() == 1);
 
@@ -653,7 +667,7 @@ public abstract class DeletedMessageVaultIntegrationTest {
     }
 
     @Test
-    public void vaultPurgeShouldMakeExportProduceZipWhenAllMessagesAreNotExpired() throws Exception {
+    void vaultPurgeShouldMakeExportProduceZipWhenAllMessagesAreNotExpired() throws Exception {
         bartSendMessageToHomer();
         bartSendMessageToHomer();
         bartSendMessageToHomer();
@@ -671,7 +685,7 @@ public abstract class DeletedMessageVaultIntegrationTest {
     }
 
     @Test
-    public void vaultPurgeShouldNotAppendMessageToTheUserMailbox() {
+    void vaultPurgeShouldNotAppendMessageToTheUserMailbox(UpdatableTickingClock clock) {
         bartSendMessageToHomer();
         WAIT_TWO_MINUTES.until(() -> listMessageIdsForAccount(homerAccessToken).size() == 1);
 
@@ -686,7 +700,7 @@ public abstract class DeletedMessageVaultIntegrationTest {
     }
 
     @Test
-    public void vaultDeleteShouldDeleteMessageThenExportWithNoEntry() throws Exception {
+    void vaultDeleteShouldDeleteMessageThenExportWithNoEntry() throws Exception {
         bartSendMessageToHomer();
         WAIT_TWO_MINUTES.until(() -> listMessageIdsForAccount(homerAccessToken).size() == 1);
 
@@ -704,7 +718,7 @@ public abstract class DeletedMessageVaultIntegrationTest {
     }
 
     @Test
-    public void vaultDeleteShouldNotDeleteEmptyVaultThenExportNoEntry() throws Exception {
+    void vaultDeleteShouldNotDeleteEmptyVaultThenExportNoEntry() throws Exception {
         bartSendMessageToHomer();
         WAIT_TWO_MINUTES.until(() -> listMessageIdsForAccount(homerAccessToken).size() == 1);
 
@@ -719,7 +733,7 @@ public abstract class DeletedMessageVaultIntegrationTest {
     }
 
     @Test
-    public void vaultDeleteShouldNotDeleteNotMatchedMessageInVaultThenExportAnEntry() throws Exception {
+    void vaultDeleteShouldNotDeleteNotMatchedMessageInVaultThenExportAnEntry() throws Exception {
         bartSendMessageToHomer();
         WAIT_TWO_MINUTES.until(() -> listMessageIdsForAccount(homerAccessToken).size() == 1);
         String messageIdOfHomer = listMessageIdsForAccount(homerAccessToken).get(0);
@@ -740,7 +754,7 @@ public abstract class DeletedMessageVaultIntegrationTest {
     }
 
     @Test
-    public void vaultDeleteShouldNotAppendMessageToTheUserMailbox() {
+    void vaultDeleteShouldNotAppendMessageToTheUserMailbox() {
         bartSendMessageToHomer();
         WAIT_TWO_MINUTES.until(() -> listMessageIdsForAccount(homerAccessToken).size() == 1);
 
@@ -756,7 +770,7 @@ public abstract class DeletedMessageVaultIntegrationTest {
     }
 
     @Test
-    public void vaultDeleteShouldDeleteAllMessagesHavingSameBlobContent() throws Exception {
+    void vaultDeleteShouldDeleteAllMessagesHavingSameBlobContent() throws Exception {
         bartSendMessageToHomerAndJack();
         WAIT_TWO_MINUTES.until(() -> listMessageIdsForAccount(homerAccessToken).size() == 1);
 
@@ -779,7 +793,7 @@ public abstract class DeletedMessageVaultIntegrationTest {
     }
 
     @Test
-    public void vaultDeleteShouldNotDeleteAllMessagesHavingSameBlobContentWhenMessageNotDeletedWithinTheSameMonth() throws Exception {
+    void vaultDeleteShouldNotDeleteAllMessagesHavingSameBlobContentWhenMessageNotDeletedWithinTheSameMonth(UpdatableTickingClock clock) throws Exception {
         bartSendMessageToHomerAndJack();
         WAIT_TWO_MINUTES.until(() -> listMessageIdsForAccount(homerAccessToken).size() == 1);
 


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