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 bt...@apache.org on 2020/01/22 10:49:50 UTC
[james-project] 05/06: [Refactoring] Stablize FixingGhostMailboxTest
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-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org