http://git-wip-us.apache.org/repos/asf/james-project/blob/456972f7/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java index 93a7da5..504593c 100644 --- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java +++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java @@ -4527,8 +4527,10 @@ public abstract class SetMessagesMethodTest { calmlyAwait.atMost(30, TimeUnit.SECONDS).until(() -> isAnyMessageFoundInInbox(accessToken)); - try (IMAPMessageReader imapMessageReader = new IMAPMessageReader(LOCALHOST_IP, IMAP_PORT);) { - assertThat(imapMessageReader.readFirstMessageHeadersInInbox(USERNAME, PASSWORD)) + try (IMAPMessageReader imapMessageReader = new IMAPMessageReader() + .connect(LOCALHOST_IP, IMAP_PORT) + .select(MailboxConstants.INBOX)) { + assertThat(imapMessageReader.readFirstMessage()) .contains("X-MY-MULTIVALUATED-HEADER: first value") .contains("X-MY-MULTIVALUATED-HEADER: second value"); }
http://git-wip-us.apache.org/repos/asf/james-project/blob/456972f7/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/ImapStepdefs.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/ImapStepdefs.java b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/ImapStepdefs.java index 744eee3..048e469 100644 --- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/ImapStepdefs.java +++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/ImapStepdefs.java @@ -53,58 +53,61 @@ public class ImapStepdefs { @Then("^the user has a IMAP message in mailbox \"([^\"]*)\"$") public void hasMessageInMailbox(String mailbox) throws Throwable { - try (IMAPMessageReader imapMessageReader = new IMAPMessageReader(LOCALHOST, IMAP_PORT)) { - assertThat( - imapMessageReader.userReceivedMessageInMailbox(userStepdefs.getConnectedUser(), - userStepdefs.getUserPassword(userStepdefs.getConnectedUser()), - mailbox)) - .isTrue(); + try (IMAPMessageReader imapMessageReader = new IMAPMessageReader() + .connect(LOCALHOST, IMAP_PORT) + .login(userStepdefs.getConnectedUser(), + userStepdefs.getUserPassword(userStepdefs.getConnectedUser())) + .select(mailbox)) { + assertThat(imapMessageReader.hasAMessage()).isTrue(); } } @Then("^the message has IMAP flag \"([^\"]*)\" in mailbox \"([^\"]*)\" for \"([^\"]*)\"$") public void hasMessageWithFlagInMailbox(String flags, String mailbox, String username) throws Throwable { - try (IMAPMessageReader imapMessageReader = new IMAPMessageReader(LOCALHOST, IMAP_PORT)) { - assertThat( - imapMessageReader.userReceivedMessageWithFlagsInMailbox(username, - userStepdefs.getUserPassword(username), - mailbox, - flags)) + try (IMAPMessageReader imapMessageReader = new IMAPMessageReader() + .connect(LOCALHOST, IMAP_PORT) + .login(userStepdefs.getConnectedUser(), + userStepdefs.getUserPassword(username)) + .select(mailbox)) { + assertThat(imapMessageReader.hasAMessageWithFlags(flags)) .isTrue(); } } @Then("^the user has a IMAP notification about (\\d+) new message when selecting mailbox \"([^\"]*)\"$") public void hasANotificationAboutNewMessagesInMailbox(int numOfNewMessage, String mailbox) throws Throwable { - try (IMAPMessageReader imapMessageReader = new IMAPMessageReader(LOCALHOST, IMAP_PORT)) { + try (IMAPMessageReader imapMessageReader = new IMAPMessageReader() + .connect(LOCALHOST, IMAP_PORT) + .login(userStepdefs.getConnectedUser(), + userStepdefs.getUserPassword(userStepdefs.getConnectedUser())) + .select(mailbox)) { assertThat( - imapMessageReader.userGetNotifiedForNewMessagesWhenSelectingMailbox(userStepdefs.getConnectedUser(), - userStepdefs.getUserPassword(userStepdefs.getConnectedUser()), - numOfNewMessage, mailbox)) + imapMessageReader.userGetNotifiedForNewMessagesWhenSelectingMailbox(numOfNewMessage)) .isTrue(); } } @Then("^the user does not have a IMAP message in mailbox \"([^\"]*)\"$") public void hasNoMessageInMailbox(String mailbox) throws Throwable { - try (IMAPMessageReader imapMessageReader = new IMAPMessageReader(LOCALHOST, IMAP_PORT)) { - assertThat( - imapMessageReader.userDoesNotReceiveMessageInMailbox(userStepdefs.getConnectedUser(), - userStepdefs.getUserPassword(userStepdefs.getConnectedUser()), - mailbox)) + try (IMAPMessageReader imapMessageReader = new IMAPMessageReader() + .connect(LOCALHOST, IMAP_PORT) + .login(userStepdefs.getConnectedUser(), + userStepdefs.getUserPassword(userStepdefs.getConnectedUser())) + .select(mailbox)) { + assertThat(imapMessageReader.userDoesNotReceiveMessage()) .isTrue(); } } @Given("^the user has an open IMAP connection with mailbox \"([^\"]*)\" selected") public void openImapConnectionAndSelectMailbox(String mailbox) throws Throwable { - IMAPMessageReader imapMessageReader = new IMAPMessageReader(LOCALHOST, IMAP_PORT); - String login = userStepdefs.getConnectedUser(); String password = userStepdefs.getUserPassword(login); - imapMessageReader.connectAndSelect(login, password, mailbox); - imapConnections.put(mailbox, imapMessageReader); + imapConnections.put(mailbox, new IMAPMessageReader() + .connect(LOCALHOST, IMAP_PORT) + .login(login, password) + .select(mailbox)); } @Then("^the user set flags via IMAP to \"([^\"]*)\" for all messages in mailbox \"([^\"]*)\"$") @@ -123,12 +126,13 @@ public class ImapStepdefs { @When("^the user copy by IMAP first message of \"([^\"]*)\" to mailbox \"([^\"]*)\"$") public void copyAMessageByIMAP(String srcMailbox, String destMailbox) throws Throwable { - IMAPMessageReader imapMessageReader = new IMAPMessageReader(LOCALHOST, IMAP_PORT); - String login = userStepdefs.getConnectedUser(); String password = userStepdefs.getUserPassword(login); - imapMessageReader.connectAndSelect(login, password, srcMailbox); + IMAPMessageReader imapMessageReader = new IMAPMessageReader() + .connect(LOCALHOST, IMAP_PORT) + .login(login, password) + .select(srcMailbox); assertThat(imapMessageReader).isNotNull(); imapMessageReader.copyFirstMessage(destMailbox); mainStepdefs.awaitMethod.run(); http://git-wip-us.apache.org/repos/asf/james-project/blob/456972f7/server/testing/src/main/java/org/apache/james/utils/IMAPMessageReader.java ---------------------------------------------------------------------- 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 4b28106..2d27da0 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 @@ -23,14 +23,17 @@ import java.io.Closeable; import java.io.IOException; import java.util.List; +import org.apache.commons.io.IOUtils; import org.apache.commons.net.imap.IMAPClient; +import org.junit.rules.ExternalResource; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Splitter; +import com.jayway.awaitility.core.ConditionFactory; -public class IMAPMessageReader implements Closeable { +public class IMAPMessageReader extends ExternalResource implements Closeable { - private static final String INBOX = "INBOX"; + public static final String INBOX = "INBOX"; private final IMAPClient imapClient; @@ -39,40 +42,41 @@ public class IMAPMessageReader implements Closeable { this.imapClient = imapClient; } - public IMAPMessageReader(String host, int port) throws IOException { - imapClient = new IMAPClient(); + public IMAPMessageReader() { + this(new IMAPClient()); + } + + public IMAPMessageReader connect(String host, int port) throws IOException { imapClient.connect(host, port); + return this; } - public void connectAndSelect(String user, String password, String mailbox) throws IOException{ + public IMAPMessageReader login(String user, String password) throws IOException{ imapClient.login(user, password); - imapClient.select(mailbox); + return this; } - public boolean countReceivedMessage(String user, String password, int numberOfMessages) throws IOException { - return countReceivedMessageInMailbox(user, password, INBOX, numberOfMessages); + public IMAPMessageReader select(String mailbox) throws IOException { + imapClient.select(mailbox); + return this; } - public boolean countReceivedMessageInMailbox(String user, String password, String mailbox, int numberOfMessages) throws IOException { - connectAndSelect(user, password, mailbox); - + public boolean hasMessageCount(int numberOfMessages) throws IOException { return imapClient.getReplyString() .contains(numberOfMessages + " EXISTS"); } - public boolean userReceivedMessage(String user, String password) throws IOException { - return userReceivedMessageInMailbox(user, password, INBOX); - } - - public boolean userReceivedMessageInMailbox(String user, String password, String mailbox) throws IOException { - connectAndSelect(user, password, mailbox); + public boolean hasAMessage() throws IOException { imapClient.fetch("1:1", "ALL"); return imapClient.getReplyString() .contains("OK FETCH completed"); } - public boolean userReceivedMessageWithFlagsInMailbox(String user, String password, String mailbox, String flags) throws IOException { - connectAndSelect(user, password, mailbox); + public void awaitMessage(ConditionFactory conditionFactory) throws IOException { + conditionFactory.until(this::hasAMessage); + } + + public boolean hasAMessageWithFlags(String flags) throws IOException { imapClient.fetch("1:1", "ALL"); String replyString = imapClient.getReplyString(); return isCompletedWithFlags(flags, replyString); @@ -87,34 +91,22 @@ public class IMAPMessageReader implements Closeable { .allMatch(s -> replyString.contains(s)); } - public boolean userGetNotifiedForNewMessagesWhenSelectingMailbox(String user, String password, int numOfNewMessage, String mailboxName) throws IOException { - connectAndSelect(user, password, mailboxName); - + public boolean userGetNotifiedForNewMessagesWhenSelectingMailbox(int numOfNewMessage) throws IOException { return imapClient.getReplyString().contains("OK [UNSEEN " + numOfNewMessage +"]"); } - public boolean userDoesNotReceiveMessage(String user, String password) throws IOException { - return userDoesNotReceiveMessageInMailbox(user, password, INBOX); - } - - public boolean userDoesNotReceiveMessageInMailbox(String user, String password, String mailboxName) throws IOException { - connectAndSelect(user, password, mailboxName); + public boolean userDoesNotReceiveMessage() throws IOException { imapClient.fetch("1:1", "ALL"); return imapClient.getReplyString() .contains("BAD FETCH failed. Invalid messageset"); } - public String readFirstMessageInInbox(String user, String password) throws IOException { - - return readFirstMessageInMailbox(user, password, "(BODY[])", INBOX); - } - - public String readFirstMessageHeadersInMailbox(String user, String password, String mailboxName) throws IOException { - return readFirstMessageInMailbox(user, password, "(RFC822.HEADER)", mailboxName); + public String readFirstMessage() throws IOException { + return readFirstMessageInMailbox("(BODY[])"); } - public String readFirstMessageHeadersInInbox(String user, String password) throws IOException { - return readFirstMessageInMailbox(user, password, "(RFC822.HEADER)", INBOX); + public String readFirstMessageHeaders() throws IOException { + return readFirstMessageInMailbox("(RFC822.HEADER)"); } public String setFlagsForAllMessagesInMailbox(String flag) throws IOException { @@ -122,9 +114,7 @@ public class IMAPMessageReader implements Closeable { return imapClient.getReplyString(); } - private String readFirstMessageInMailbox(String user, String password, String parameters, String mailboxName) throws IOException { - imapClient.login(user, password); - imapClient.select(mailboxName); + private String readFirstMessageInMailbox(String parameters) throws IOException { imapClient.fetch("1:1", parameters); return imapClient.getReplyString(); } @@ -159,7 +149,14 @@ public class IMAPMessageReader implements Closeable { @Override public void close() throws IOException { - imapClient.close(); + if (imapClient.isConnected()) { + imapClient.close(); + } + } + + @Override + protected void after() { + IOUtils.closeQuietly(this); } public void copyFirstMessage(String destMailbox) throws IOException { --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
