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-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org