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 2019/03/12 03:19:47 UTC
[james-project] 09/15: JAMES-2665 Add a test upon mailbox deletion
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 45af710d90d1a56d6a506c5f7740041c9507b261
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Wed Mar 6 10:33:44 2019 +0700
JAMES-2665 Add a test upon mailbox deletion
---
.../CassandraDeletedMessageVaultTest.java | 12 ++++
.../integration/DeletedMessagesVaultTest.java | 71 ++++++++++++++++++++++
.../memory/MemoryDeletedMessagesVaultTest.java | 12 ++++
.../rabbitmq/RabbitMQDeletedMessagesVaultTest.java | 12 ++++
.../org/apache/james/utils/IMAPMessageReader.java | 5 ++
5 files changed, 112 insertions(+)
diff --git a/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/java/org/apache/james/jmap/cassandra/CassandraDeletedMessageVaultTest.java b/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/java/org/apache/james/jmap/cassandra/CassandraDeletedMessageVaultTest.java
index e6f1cf5..9381f3c 100644
--- a/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/java/org/apache/james/jmap/cassandra/CassandraDeletedMessageVaultTest.java
+++ b/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/java/org/apache/james/jmap/cassandra/CassandraDeletedMessageVaultTest.java
@@ -24,6 +24,7 @@ import java.io.IOException;
import org.apache.james.CassandraJmapTestRule;
import org.apache.james.DockerCassandraRule;
import org.apache.james.GuiceJamesServer;
+import org.apache.james.jmap.categories.BasicFeature;
import org.apache.james.jmap.methods.integration.DeletedMessagesVaultTest;
import org.apache.james.mailrepository.api.MailRepositoryUrl;
import org.apache.james.modules.mailbox.PreDeletionHookConfiguration;
@@ -33,6 +34,9 @@ import org.apache.james.vault.MailRepositoryDeletedMessageVault;
import org.apache.james.webadmin.WebAdminConfiguration;
import org.junit.ClassRule;
import org.junit.Rule;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+import org.junit.jupiter.api.Disabled;
public class CassandraDeletedMessageVaultTest extends DeletedMessagesVaultTest {
@@ -52,4 +56,12 @@ public class CassandraDeletedMessageVaultTest extends DeletedMessagesVaultTest {
binder -> binder.bind(MailRepositoryDeletedMessageVault.Configuration.class)
.toInstance(new MailRepositoryDeletedMessageVault.Configuration(MailRepositoryUrl.from("cassandra://var/deletedMessages/user"))));
}
+
+ @Disabled("MAILBOX-379 PreDeletionHook are not yet triggered upon mailbox deletion")
+ @Category(BasicFeature.class)
+ @Override
+ @Test
+ public void postShouldRestoreImapDeletedMailbox() {
+
+ }
}
diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/DeletedMessagesVaultTest.java b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/DeletedMessagesVaultTest.java
index f44247a..3620607 100644
--- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/DeletedMessagesVaultTest.java
+++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/DeletedMessagesVaultTest.java
@@ -27,6 +27,7 @@ import static org.apache.james.jmap.JmapCommonRequests.listMessageIdsForAccount;
import static org.apache.james.jmap.JmapURIBuilder.baseUri;
import static org.apache.james.jmap.TestingConstants.ARGUMENTS;
import static org.apache.james.jmap.TestingConstants.DOMAIN;
+import static org.apache.james.jmap.TestingConstants.LOCALHOST_IP;
import static org.apache.james.jmap.TestingConstants.calmlyAwait;
import static org.apache.james.jmap.TestingConstants.jmapRequestSpecBuilder;
import static org.assertj.core.api.Assertions.assertThat;
@@ -43,8 +44,10 @@ import org.apache.james.jmap.categories.BasicFeature;
import org.apache.james.mailbox.DefaultMailboxes;
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.utils.DataProbeImpl;
+import org.apache.james.utils.IMAPMessageReader;
import org.apache.james.utils.JmapGuiceProbe;
import org.apache.james.utils.WebAdminGuiceProbe;
import org.apache.james.webadmin.WebAdminUtils;
@@ -52,8 +55,10 @@ 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.jupiter.api.Disabled;
import com.google.common.base.Strings;
@@ -68,9 +73,13 @@ public abstract class DeletedMessagesVaultTest {
private static final String BOB_PASSWORD = "bobPassword";
private static final ConditionFactory WAIT_TWO_MINUTES = calmlyAwait.atMost(Duration.TWO_MINUTES);
private static final String SUBJECT = "This mail will be restored from the vault!!";
+ private static final String MAILBOX_NAME = "toBeDeleted";
protected abstract GuiceJamesServer createJmapServer() throws IOException;
+ @Rule
+ public IMAPMessageReader imapMessageReader = new IMAPMessageReader();
+
private AccessToken homerAccessToken;
private AccessToken bartAccessToken;
private GuiceJamesServer jmapServer;
@@ -92,6 +101,7 @@ public abstract class DeletedMessagesVaultTest {
dataProbe.addUser(HOMER, PASSWORD);
dataProbe.addUser(BART, BOB_PASSWORD);
mailboxProbe.createMailbox("#private", HOMER, DefaultMailboxes.INBOX);
+ mailboxProbe.createMailbox("#private", HOMER, MAILBOX_NAME);
homerAccessToken = authenticateJamesUser(baseUri(jmapServer), HOMER, PASSWORD);
bartAccessToken = authenticateJamesUser(baseUri(jmapServer), BART, BOB_PASSWORD);
@@ -132,6 +142,67 @@ public abstract class DeletedMessagesVaultTest {
.body(ARGUMENTS + ".list.subject", hasItem(SUBJECT));
}
+ @Category(BasicFeature.class)
+ @Test
+ public void postShouldRestoreImapDeletedEmail() throws Exception {
+ bartSendMessageToHomer();
+ WAIT_TWO_MINUTES.until(() -> listMessageIdsForAccount(homerAccessToken).size() == 1);
+
+ imapMessageReader.connect(LOCALHOST_IP, jmapServer.getProbe(ImapGuiceProbe.class).getImapPort())
+ .login(HOMER, PASSWORD)
+ .select(IMAPMessageReader.INBOX)
+ .setFlagsForAllMessagesInMailbox("\\Deleted");
+ imapMessageReader.expunge();
+
+ WAIT_TWO_MINUTES.until(() -> listMessageIdsForAccount(homerAccessToken).size() == 0);
+
+ restoreAllMessagesOfHomer();
+ WAIT_TWO_MINUTES.until(() -> listMessageIdsForAccount(homerAccessToken).size() == 1);
+
+ String messageId = listMessageIdsForAccount(homerAccessToken).get(0);
+ given()
+ .header("Authorization", homerAccessToken.serialize())
+ .body("[[\"getMessages\", {\"ids\": [\"" + messageId + "\"]}, \"#0\"]]")
+ .when()
+ .post("/jmap")
+ .then()
+ .statusCode(200)
+ .log().ifValidationFails()
+ .body(ARGUMENTS + ".list.subject", hasItem(SUBJECT));
+ }
+
+ @Disabled("MAILBOX-379 PreDeletionHook are not yet triggered upon mailbox deletion")
+ @Category(BasicFeature.class)
+ @Test
+ public void postShouldRestoreImapDeletedMailbox() throws Exception {
+ bartSendMessageToHomer();
+ WAIT_TWO_MINUTES.until(() -> listMessageIdsForAccount(homerAccessToken).size() == 1);
+
+ imapMessageReader.connect(LOCALHOST_IP, jmapServer.getProbe(ImapGuiceProbe.class).getImapPort())
+ .login(HOMER, PASSWORD)
+ .select(IMAPMessageReader.INBOX);
+
+ imapMessageReader.moveFirstMessage(MAILBOX_NAME);
+
+ imapMessageReader.delete(MAILBOX_NAME);
+
+ WAIT_TWO_MINUTES.until(() -> listMessageIdsForAccount(homerAccessToken).size() == 0);
+
+ restoreAllMessagesOfHomer();
+ WAIT_TWO_MINUTES.until(() -> listMessageIdsForAccount(homerAccessToken).size() == 1);
+
+ String messageId = listMessageIdsForAccount(homerAccessToken).get(0);
+ given()
+ .header("Authorization", homerAccessToken.serialize())
+ .body("[[\"getMessages\", {\"ids\": [\"" + messageId + "\"]}, \"#0\"]]")
+ .when()
+ .post("/jmap")
+ .then()
+ .statusCode(200)
+ .log().ifValidationFails()
+ .body(ARGUMENTS + ".list.subject", hasItem(SUBJECT));
+ }
+
@Test
public void restoreShouldNotImpactOtherUsers() {
bartSendMessageToHomer();
diff --git a/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/java/org/apache/james/jmap/memory/MemoryDeletedMessagesVaultTest.java b/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/java/org/apache/james/jmap/memory/MemoryDeletedMessagesVaultTest.java
index 5f45e97..df88db8 100644
--- a/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/java/org/apache/james/jmap/memory/MemoryDeletedMessagesVaultTest.java
+++ b/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/java/org/apache/james/jmap/memory/MemoryDeletedMessagesVaultTest.java
@@ -23,6 +23,7 @@ import java.io.IOException;
import org.apache.james.GuiceJamesServer;
import org.apache.james.MemoryJmapTestRule;
+import org.apache.james.jmap.categories.BasicFeature;
import org.apache.james.jmap.methods.integration.DeletedMessagesVaultTest;
import org.apache.james.mailrepository.api.MailRepositoryUrl;
import org.apache.james.modules.mailbox.PreDeletionHookConfiguration;
@@ -31,6 +32,9 @@ import org.apache.james.vault.DeletedMessageVaultHook;
import org.apache.james.vault.MailRepositoryDeletedMessageVault;
import org.apache.james.webadmin.WebAdminConfiguration;
import org.junit.Rule;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+import org.junit.jupiter.api.Disabled;
public class MemoryDeletedMessagesVaultTest extends DeletedMessagesVaultTest {
@@ -47,4 +51,12 @@ public class MemoryDeletedMessagesVaultTest extends DeletedMessagesVaultTest {
binder -> binder.bind(MailRepositoryDeletedMessageVault.Configuration.class)
.toInstance(new MailRepositoryDeletedMessageVault.Configuration(MailRepositoryUrl.from("memory://var/deletedMessages/user"))));
}
+
+ @Disabled("MAILBOX-379 PreDeletionHook are not yet triggered upon mailbox deletion")
+ @Category(BasicFeature.class)
+ @Override
+ @Test
+ public void postShouldRestoreImapDeletedMailbox() {
+
+ }
}
diff --git a/server/protocols/jmap-integration-testing/rabbitmq-jmap-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQDeletedMessagesVaultTest.java b/server/protocols/jmap-integration-testing/rabbitmq-jmap-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQDeletedMessagesVaultTest.java
index 6382811..0527b86 100644
--- a/server/protocols/jmap-integration-testing/rabbitmq-jmap-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQDeletedMessagesVaultTest.java
+++ b/server/protocols/jmap-integration-testing/rabbitmq-jmap-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQDeletedMessagesVaultTest.java
@@ -24,6 +24,7 @@ import java.io.IOException;
import org.apache.james.CassandraRabbitMQSwiftJmapTestRule;
import org.apache.james.DockerCassandraRule;
import org.apache.james.GuiceJamesServer;
+import org.apache.james.jmap.categories.BasicFeature;
import org.apache.james.jmap.methods.integration.DeletedMessagesVaultTest;
import org.apache.james.mailrepository.api.MailRepositoryUrl;
import org.apache.james.modules.mailbox.PreDeletionHookConfiguration;
@@ -33,6 +34,9 @@ import org.apache.james.vault.MailRepositoryDeletedMessageVault;
import org.apache.james.webadmin.WebAdminConfiguration;
import org.junit.ClassRule;
import org.junit.Rule;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+import org.junit.jupiter.api.Disabled;
public class RabbitMQDeletedMessagesVaultTest extends DeletedMessagesVaultTest {
@@ -52,5 +56,13 @@ public class RabbitMQDeletedMessagesVaultTest extends DeletedMessagesVaultTest {
binder -> binder.bind(MailRepositoryDeletedMessageVault.Configuration.class)
.toInstance(new MailRepositoryDeletedMessageVault.Configuration(MailRepositoryUrl.from("cassandra://var/deletedMessages/user"))));
}
+
+ @Disabled("MAILBOX-379 PreDeletionHook are not yet triggered upon mailbox deletion")
+ @Category(BasicFeature.class)
+ @Override
+ @Test
+ public void postShouldRestoreImapDeletedMailbox() {
+
+ }
}
diff --git a/server/testing/src/main/java/org/apache/james/utils/IMAPMessageReader.java b/server/testing/src/main/java/org/apache/james/utils/IMAPMessageReader.java
index 80d2786..0c9826f 100644
--- a/server/testing/src/main/java/org/apache/james/utils/IMAPMessageReader.java
+++ b/server/testing/src/main/java/org/apache/james/utils/IMAPMessageReader.java
@@ -67,6 +67,11 @@ public class IMAPMessageReader extends ExternalResource implements Closeable, Af
return this;
}
+ public IMAPMessageReader delete(String mailbox) throws IOException {
+ imapClient.delete(mailbox);
+ return this;
+ }
+
public boolean hasAMessage() throws IOException {
imapClient.fetch("1:1", "ALL");
return imapClient.getReplyString()
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org