This is an automated email from the ASF dual-hosted git repository. btellier pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git
commit fc225e50db7bb17d76c020674764ee688ef616dc Author: Tran Tien Duc <dt...@linagora.com> AuthorDate: Mon Jan 20 17:06:37 2020 +0700 [Refactoring] Stablize FixingGhostMailboxTest --- .../java/org/apache/james/CassandraExtension.java | 25 +++++++++++ .../rabbitmq/FixingGhostMailboxTest.java | 48 ++++++++++++---------- 2 files changed, 52 insertions(+), 21 deletions(-) diff --git a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraExtension.java b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraExtension.java index d2564f1..2532c49 100644 --- a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraExtension.java +++ b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraExtension.java @@ -19,11 +19,25 @@ package org.apache.james; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import org.apache.james.util.Host; import org.junit.jupiter.api.extension.ExtensionContext; +import org.junit.jupiter.api.extension.ParameterContext; +import org.junit.jupiter.api.extension.ParameterResolutionException; import com.google.inject.Module; public class CassandraExtension implements GuiceModuleTestExtension { + + @Target(ElementType.PARAMETER) + @Retention(RetentionPolicy.RUNTIME) + public @interface CassandraHost { + } + private final DockerCassandraRule cassandra; public CassandraExtension() { @@ -56,4 +70,15 @@ public class CassandraExtension implements GuiceModuleTestExtension { public void unpause() { cassandra.unpause(); } + + @Override + public boolean supportsParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException { + return parameterContext.getParameter().getType() == Host.class + && parameterContext.getParameter().isAnnotationPresent(CassandraHost.class); + } + + @Override + public Object resolveParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException { + return cassandra.getHost(); + } } diff --git a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/FixingGhostMailboxTest.java b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/FixingGhostMailboxTest.java index 2e99453..87529d2 100644 --- a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/FixingGhostMailboxTest.java +++ b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/FixingGhostMailboxTest.java @@ -25,7 +25,7 @@ import static io.restassured.RestAssured.given; import static io.restassured.RestAssured.with; import static io.restassured.config.EncoderConfig.encoderConfig; import static io.restassured.config.RestAssuredConfig.newConfig; -import static org.apache.james.CassandraJamesServerMain.ALL_BUT_JMX_CASSANDRA_MODULE; +import static org.apache.james.backends.rabbitmq.RabbitMQFixture.calmlyAwait; import static org.apache.james.jmap.HttpJmapAuthentication.authenticateJamesUser; import static org.apache.james.jmap.LocalHostURIBuilder.baseUri; import static org.assertj.core.api.Assertions.assertThat; @@ -40,8 +40,11 @@ import static org.hamcrest.Matchers.nullValue; import java.io.IOException; import java.nio.charset.StandardCharsets; +import java.util.concurrent.TimeUnit; import org.apache.james.CassandraExtension; +import org.apache.james.CassandraExtension.CassandraHost; +import org.apache.james.CassandraRabbitMQJamesServerMain; import org.apache.james.DockerElasticSearchExtension; import org.apache.james.GuiceJamesServer; import org.apache.james.JamesServerBuilder; @@ -54,17 +57,17 @@ import org.apache.james.mailbox.MessageManager.AppendCommand; import org.apache.james.mailbox.cassandra.mail.task.MailboxMergingTask; import org.apache.james.mailbox.cassandra.table.CassandraMailboxPathV2Table; import org.apache.james.mailbox.exception.MailboxException; -import org.apache.james.mailbox.extractor.TextExtractor; import org.apache.james.mailbox.model.ComposedMessageId; import org.apache.james.mailbox.model.MailboxACL; import org.apache.james.mailbox.model.MailboxConstants; import org.apache.james.mailbox.model.MailboxId; import org.apache.james.mailbox.model.MailboxPath; import org.apache.james.mailbox.probe.ACLProbe; -import org.apache.james.mailbox.store.search.PDFTextExtractor; import org.apache.james.mime4j.dom.Message; import org.apache.james.modules.ACLProbeImpl; +import org.apache.james.modules.AwsS3BlobStoreExtension; import org.apache.james.modules.MailboxProbeImpl; +import org.apache.james.modules.RabbitMQExtension; import org.apache.james.modules.TestJMAPServerModule; import org.apache.james.server.CassandraProbe; import org.apache.james.task.TaskManager; @@ -76,6 +79,7 @@ import org.apache.james.webadmin.WebAdminUtils; import org.apache.james.webadmin.integration.WebadminIntegrationTestModule; import org.apache.james.webadmin.routes.CassandraMailboxMergingRoutes; import org.apache.james.webadmin.routes.TasksRoutes; +import org.awaitility.Duration; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; @@ -101,16 +105,16 @@ class FixingGhostMailboxTest { private static final String ALICE = "alice@" + DOMAIN; private static final String ALICE_SECRET = "aliceSecret"; private static final String BOB_SECRET = "bobSecret"; - - public static final CassandraExtension dockerCassandra = new CassandraExtension(); + private static final Duration THIRTY_SECONDS = new Duration(30, TimeUnit.SECONDS); @RegisterExtension static JamesServerExtension testExtension = new JamesServerBuilder() .extension(new DockerElasticSearchExtension()) - .extension(dockerCassandra) + .extension(new CassandraExtension()) + .extension(new AwsS3BlobStoreExtension()) + .extension(new RabbitMQExtension()) .server(configuration -> GuiceJamesServer.forConfiguration(configuration) - .combineWith(ALL_BUT_JMX_CASSANDRA_MODULE) - .overrideWith(binder -> binder.bind(TextExtractor.class).to(PDFTextExtractor.class)) + .combineWith(CassandraRabbitMQJamesServerMain.MODULES) .overrideWith(TestJMAPServerModule.limitToTenMessages()) .overrideWith(new WebadminIntegrationTestModule())) .build(); @@ -126,7 +130,7 @@ class FixingGhostMailboxTest { private RequestSpecification webadminSpecification; @BeforeEach - void setup(GuiceJamesServer server) throws Throwable { + void setup(GuiceJamesServer server, @CassandraHost Host cassandraHost) throws Throwable { WebAdminGuiceProbe webAdminProbe = server.getProbe(WebAdminGuiceProbe.class); mailboxProbe = server.getProbe(MailboxProbeImpl.class); aclProbe = server.getProbe(ACLProbeImpl.class); @@ -148,7 +152,6 @@ class FixingGhostMailboxTest { .addUser(BOB, BOB_SECRET); accessToken = authenticateJamesUser(baseUri(jmapPort), Username.of(ALICE), ALICE_SECRET); - Host cassandraHost = dockerCassandra.getCassandra().getHost(); session = Cluster.builder() .withoutJMXReporting() .addContactPoint(cassandraHost.getHostName()) @@ -206,17 +209,20 @@ class FixingGhostMailboxTest { void ghostMailboxBugShouldDiscardOldContent() { MailboxId newAliceInbox = mailboxProbe.getMailboxId(MailboxConstants.USER_NAMESPACE, ALICE, MailboxConstants.INBOX); - given() - .header("Authorization", accessToken.asString()) - .body("[[\"getMessageList\", {\"filter\":{\"inMailboxes\":[\"" + newAliceInbox.serialize() + "\"]}}, \"#0\"]]") - .when() - .post("/jmap") - .then() - .statusCode(200) - .body(NAME, equalTo("messageList")) - .body(ARGUMENTS + ".messageIds", hasSize(1)) - .body(ARGUMENTS + ".messageIds", not(contains(message1.getMessageId().serialize()))) - .body(ARGUMENTS + ".messageIds", contains(message2.getMessageId().serialize())); + calmlyAwait + .timeout(THIRTY_SECONDS) + .untilAsserted(() -> + given() + .header("Authorization", accessToken.asString()) + .body("[[\"getMessageList\", {\"filter\":{\"inMailboxes\":[\"" + newAliceInbox.serialize() + "\"]}}, \"#0\"]]") + .when() + .post("/jmap") + .then() + .statusCode(200) + .body(NAME, equalTo("messageList")) + .body(ARGUMENTS + ".messageIds", hasSize(1)) + .body(ARGUMENTS + ".messageIds", not(contains(message1.getMessageId().serialize()))) + .body(ARGUMENTS + ".messageIds", contains(message2.getMessageId().serialize()))); } @Test --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org