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