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