This is an automated email from the ASF dual-hosted git repository. quantranhong1999 pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git
commit 170ecf1e7b6e00dce0b3298dabbd07acfd35f8d9 Author: Quan Tran <[email protected]> AuthorDate: Fri Jul 17 16:52:17 2026 +0700 JAMES-4210 Fasten `DistributedPOP3ServerTest`: apply per_class lifecycle Before: 2 min 10 sec After: 30 sec --- .../apache/james/DistributedPOP3ServerTest.java | 2 +- .../java/org/apache/james/Pop3ServerContract.java | 201 ++++++++++++--------- 2 files changed, 112 insertions(+), 91 deletions(-) diff --git a/server/apps/distributed-pop3-app/src/test/java/org/apache/james/DistributedPOP3ServerTest.java b/server/apps/distributed-pop3-app/src/test/java/org/apache/james/DistributedPOP3ServerTest.java index 5dab6f3d6b..7f7610593a 100644 --- a/server/apps/distributed-pop3-app/src/test/java/org/apache/james/DistributedPOP3ServerTest.java +++ b/server/apps/distributed-pop3-app/src/test/java/org/apache/james/DistributedPOP3ServerTest.java @@ -52,7 +52,7 @@ public class DistributedPOP3ServerTest implements Pop3ServerContract { @RegisterExtension static JamesServerExtension jamesServerExtension = baseExtensionBuilder() .extension(new AwsS3BlobStoreExtension()) - .lifeCycle(JamesServerExtension.Lifecycle.PER_TEST) + .lifeCycle(JamesServerExtension.Lifecycle.PER_CLASS) .overrideServerModule(new POP3ViewProbeModule()) .build(); } diff --git a/server/apps/distributed-pop3-app/src/test/java/org/apache/james/Pop3ServerContract.java b/server/apps/distributed-pop3-app/src/test/java/org/apache/james/Pop3ServerContract.java index 5b5032f5fc..78a5cf7fcc 100644 --- a/server/apps/distributed-pop3-app/src/test/java/org/apache/james/Pop3ServerContract.java +++ b/server/apps/distributed-pop3-app/src/test/java/org/apache/james/Pop3ServerContract.java @@ -31,6 +31,7 @@ import java.net.Socket; import java.nio.charset.StandardCharsets; import java.util.Base64; import java.util.List; +import java.util.UUID; import java.util.stream.IntStream; import org.apache.commons.net.pop3.POP3Client; @@ -107,10 +108,19 @@ public interface Pop3ServerContract { } } - String USER = "[email protected]"; String PASSWORD = "123456"; String DOMAIN = "examplebis.local"; + private static String randomUser() { + return UUID.randomUUID() + "@" + DOMAIN; + } + + private static List<String> generateNUsers(int nbUsers) { + return IntStream.range(0, nbUsers) + .mapToObj(index -> randomUser()) + .collect(ImmutableList.toImmutableList()); + } + private static String plainInitialResponse(String username, String password) { return Base64.getEncoder() .encodeToString(("\0" + username + "\0" + password).getBytes(StandardCharsets.UTF_8)); @@ -135,9 +145,10 @@ public interface Pop3ServerContract { @Test default void authPlainShouldSucceed(GuiceJamesServer server) throws Exception { + String user = randomUser(); server.getProbe(DataProbeImpl.class).fluent() .addDomain(DOMAIN) - .addUser(USER, PASSWORD); + .addUser(user, PASSWORD); try (Socket socket = new Socket("127.0.0.1", server.getProbe(Pop3GuiceProbe.class).getPop3Port()); BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream(), StandardCharsets.US_ASCII)); @@ -145,10 +156,10 @@ public interface Pop3ServerContract { assertThat(reader.readLine()).startsWith("+OK"); // WHEN authenticating with an RFC 5034 PLAIN initial response - send(writer, "AUTH PLAIN " + plainInitialResponse(USER, PASSWORD)); + send(writer, "AUTH PLAIN " + plainInitialResponse(user, PASSWORD)); // THEN authentication succeeds and POP3 transaction commands are available - assertThat(reader.readLine()).isEqualTo("+OK Welcome " + USER); + assertThat(reader.readLine()).isEqualTo("+OK Welcome " + user); send(writer, "STAT"); assertThat(reader.readLine()).matches("\\+OK \\d+ \\d+"); } @@ -156,16 +167,17 @@ public interface Pop3ServerContract { @Test default void authPlainShouldRejectInvalidCredentials(GuiceJamesServer server) throws Exception { + String user = randomUser(); server.getProbe(DataProbeImpl.class).fluent() .addDomain(DOMAIN) - .addUser(USER, PASSWORD); + .addUser(user, PASSWORD); try (Socket socket = new Socket("127.0.0.1", server.getProbe(Pop3GuiceProbe.class).getPop3Port()); BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream(), StandardCharsets.US_ASCII)); BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), StandardCharsets.US_ASCII))) { assertThat(reader.readLine()).startsWith("+OK"); - send(writer, "AUTH PLAIN " + plainInitialResponse(USER, "invalid-password")); + send(writer, "AUTH PLAIN " + plainInitialResponse(user, "invalid-password")); assertThat(reader.readLine()).isEqualTo("-ERR Authentication failed."); send(writer, "STAT"); @@ -175,23 +187,24 @@ public interface Pop3ServerContract { @Test default void mailsCanBeReadInPop3(GuiceJamesServer server) throws Exception { + String user = randomUser(); server.getProbe(DataProbeImpl.class).fluent() .addDomain(DOMAIN) - .addUser(USER, PASSWORD); + .addUser(user, PASSWORD); // Given a message in INBOX SMTPMessageSender smtpMessageSender = new SMTPMessageSender(JMAPTestingConstants.DOMAIN); smtpMessageSender.connect("127.0.0.1", server.getProbe(SmtpGuiceProbe.class).getSmtpPort()) - .sendMessage("bob@" + JMAPTestingConstants.DOMAIN, USER); + .sendMessage("bob@" + JMAPTestingConstants.DOMAIN, user); Awaitility.await().until(() -> server.getProbe(MailboxProbeImpl.class) - .searchMessage(MultimailboxesSearchQuery.from(SearchQuery.builder().build()).build(), USER, 1).size() == 1); + .searchMessage(MultimailboxesSearchQuery.from(SearchQuery.builder().build()).build(), user, 1).size() == 1); // Them I can retrieve it in POP3 POP3Client pop3Client = new POP3Client(); pop3Client.connect("127.0.0.1", server.getProbe(Pop3GuiceProbe.class).getPop3Port()); - pop3Client.login(USER, PASSWORD); + pop3Client.login(user, PASSWORD); List<POP3MessageInfo> pop3MessageInfos = ImmutableList.copyOf(pop3Client.listUniqueIdentifiers()); assertThat(pop3MessageInfos).hasSize(1); Reader message = pop3Client.retrieveMessage(pop3MessageInfos.get(0).number); @@ -201,10 +214,11 @@ public interface Pop3ServerContract { @Test default void dandlingMetadataShouldBeCleanedUpForFollowingSessions(GuiceJamesServer server) throws Exception { + String user = randomUser(); server.getProbe(DataProbeImpl.class).fluent() .addDomain(DOMAIN) - .addUser(USER, PASSWORD); - MailboxPath inbox = MailboxPath.inbox(Username.of(Pop3ServerContract.USER)); + .addUser(user, PASSWORD); + MailboxPath inbox = MailboxPath.inbox(Username.of(user)); server.getProbe(MailboxProbeImpl.class) .createMailbox(inbox); @@ -215,7 +229,7 @@ public interface Pop3ServerContract { // When I retrieve it a first time it fails POP3Client pop3Client = new POP3Client(); pop3Client.connect("127.0.0.1", server.getProbe(Pop3GuiceProbe.class).getPop3Port()); - pop3Client.login(USER, PASSWORD); + pop3Client.login(user, PASSWORD); List<POP3MessageInfo> pop3MessageInfos = ImmutableList.copyOf(pop3Client.listUniqueIdentifiers()); assertThat(pop3MessageInfos).hasSize(1); assertThat(pop3Client.retrieveMessage(pop3MessageInfos.get(0).number)).isNull(); @@ -223,7 +237,7 @@ public interface Pop3ServerContract { // Then subsequent POP3 session do not encounter the inconsistency POP3Client pop3Client2 = new POP3Client(); pop3Client2.connect("127.0.0.1", server.getProbe(Pop3GuiceProbe.class).getPop3Port()); - pop3Client2.login(USER, PASSWORD); + pop3Client2.login(user, PASSWORD); List<POP3MessageInfo> pop3MessageInfos2 = ImmutableList.copyOf(pop3Client2.listUniqueIdentifiers()); assertThat(pop3MessageInfos2).isEmpty(); pop3Client.disconnect(); @@ -232,25 +246,26 @@ public interface Pop3ServerContract { @Test default void manyMessagesCanBeRetrievedWithPOP3(GuiceJamesServer server) throws Exception { + String user = randomUser(); server.getProbe(DataProbeImpl.class).fluent() .addDomain(DOMAIN) - .addUser(USER, PASSWORD); + .addUser(user, PASSWORD); // Given 50 messages in INBOX SMTPMessageSender smtpMessageSender = new SMTPMessageSender(JMAPTestingConstants.DOMAIN); smtpMessageSender.connect("127.0.0.1", server.getProbe(SmtpGuiceProbe.class).getSmtpPort()); IntStream.range(0, 50) - .forEach(Throwing.intConsumer(i -> smtpMessageSender.sendMessage("bob@" + JMAPTestingConstants.DOMAIN, USER))); + .forEach(Throwing.intConsumer(i -> smtpMessageSender.sendMessage("bob@" + JMAPTestingConstants.DOMAIN, user))); Awaitility.await().until(() -> server.getProbe(MailboxProbeImpl.class) - .searchMessage(MultimailboxesSearchQuery.from(SearchQuery.builder().build()).build(), USER, 50).size() == 50); + .searchMessage(MultimailboxesSearchQuery.from(SearchQuery.builder().build()).build(), user, 50).size() == 50); // Them I can retrieve them in POP3 POP3Client pop3Client = new POP3Client(); pop3Client.connect("127.0.0.1", server.getProbe(Pop3GuiceProbe.class).getPop3Port()); - pop3Client.login(USER, PASSWORD); + pop3Client.login(user, PASSWORD); List<POP3MessageInfo> pop3MessageInfos = ImmutableList.copyOf(pop3Client.listUniqueIdentifiers()); assertThat(pop3MessageInfos).hasSize(50); // And all messages should be retrievable @@ -264,24 +279,25 @@ public interface Pop3ServerContract { @Test default void aMailWithAnAttachmentCanBeRetrieved(GuiceJamesServer server) throws Exception { + String user = randomUser(); server.getProbe(DataProbeImpl.class).fluent() .addDomain(DOMAIN) - .addUser(USER, PASSWORD); + .addUser(user, PASSWORD); // Given 50 messages in INBOX SMTPMessageSender smtpMessageSender = new SMTPMessageSender(JMAPTestingConstants.DOMAIN); smtpMessageSender.connect("127.0.0.1", server.getProbe(SmtpGuiceProbe.class).getSmtpPort()); - smtpMessageSender.sendMessageWithHeaders("bob@" + JMAPTestingConstants.DOMAIN, USER, + smtpMessageSender.sendMessageWithHeaders("bob@" + JMAPTestingConstants.DOMAIN, user, ClassLoaderUtils.getSystemResourceAsString("attachment.eml")); Awaitility.await().until(() -> server.getProbe(MailboxProbeImpl.class) - .searchMessage(MultimailboxesSearchQuery.from(SearchQuery.builder().build()).build(), USER, 1).size() == 1); + .searchMessage(MultimailboxesSearchQuery.from(SearchQuery.builder().build()).build(), user, 1).size() == 1); // Them I can retrieve them in POP3 POP3Client pop3Client = new POP3Client(); pop3Client.connect("127.0.0.1", server.getProbe(Pop3GuiceProbe.class).getPop3Port()); - pop3Client.login(USER, PASSWORD); + pop3Client.login(user, PASSWORD); List<POP3MessageInfo> pop3MessageInfos = ImmutableList.copyOf(pop3Client.listUniqueIdentifiers()); assertThat(pop3MessageInfos).hasSize(1); Reader message = pop3Client.retrieveMessage(pop3MessageInfos.get(0).number); @@ -291,24 +307,25 @@ public interface Pop3ServerContract { @Test default void pop3SizeShouldMatch(GuiceJamesServer server) throws Exception { + String user = randomUser(); server.getProbe(DataProbeImpl.class).fluent() .addDomain(DOMAIN) - .addUser(USER, PASSWORD); + .addUser(user, PASSWORD); // Given one message SMTPMessageSender smtpMessageSender = new SMTPMessageSender(JMAPTestingConstants.DOMAIN); smtpMessageSender.connect("127.0.0.1", server.getProbe(SmtpGuiceProbe.class).getSmtpPort()); - smtpMessageSender.sendMessageWithHeaders("bob@" + JMAPTestingConstants.DOMAIN, USER, + smtpMessageSender.sendMessageWithHeaders("bob@" + JMAPTestingConstants.DOMAIN, user, ClassLoaderUtils.getSystemResourceAsString("attachment.eml")); Awaitility.await().until(() -> server.getProbe(MailboxProbeImpl.class) - .searchMessage(MultimailboxesSearchQuery.from(SearchQuery.builder().build()).build(), USER, 1).size() == 1); + .searchMessage(MultimailboxesSearchQuery.from(SearchQuery.builder().build()).build(), user, 1).size() == 1); // Then the advertized size is the downloadable size POP3Client pop3Client = new POP3Client(); pop3Client.connect("127.0.0.1", server.getProbe(Pop3GuiceProbe.class).getPop3Port()); - pop3Client.login(USER, PASSWORD); + pop3Client.login(user, PASSWORD); List<POP3MessageInfo> pop3MessageInfos = ImmutableList.copyOf(pop3Client.listMessages()); Reader message = pop3Client.retrieveMessage(pop3MessageInfos.get(0).number); assertThat(pop3MessageInfos).hasSize(1); @@ -318,24 +335,25 @@ public interface Pop3ServerContract { @Test default void mailReceivedDuringPOP3TransactionShouldBeIgnored(GuiceJamesServer server) throws Exception { + String user = randomUser(); server.getProbe(DataProbeImpl.class).fluent() .addDomain(DOMAIN) - .addUser(USER, PASSWORD); + .addUser(user, PASSWORD); // Given a TRANSACTION POP3 session POP3Client pop3Client = new POP3Client(); pop3Client.connect("127.0.0.1", server.getProbe(Pop3GuiceProbe.class).getPop3Port()); - pop3Client.login(USER, PASSWORD); + pop3Client.login(user, PASSWORD); // When a message is received SMTPMessageSender smtpMessageSender = new SMTPMessageSender(JMAPTestingConstants.DOMAIN); smtpMessageSender.connect("127.0.0.1", server.getProbe(SmtpGuiceProbe.class).getSmtpPort()); - smtpMessageSender.sendMessageWithHeaders("bob@" + JMAPTestingConstants.DOMAIN, USER, + smtpMessageSender.sendMessageWithHeaders("bob@" + JMAPTestingConstants.DOMAIN, user, ClassLoaderUtils.getSystemResourceAsString("attachment.eml")); Awaitility.await().until(() -> server.getProbe(MailboxProbeImpl.class) - .searchMessage(MultimailboxesSearchQuery.from(SearchQuery.builder().build()).build(), USER, 1).size() == 1); + .searchMessage(MultimailboxesSearchQuery.from(SearchQuery.builder().build()).build(), user, 1).size() == 1); // Then the message is not shown for existing POP3 sessions List<POP3MessageInfo> pop3MessageInfos = ImmutableList.copyOf(pop3Client.listMessages()); @@ -345,24 +363,25 @@ public interface Pop3ServerContract { @Test default void rsetShouldRefreshPOP3Session(GuiceJamesServer server) throws Exception { + String user = randomUser(); server.getProbe(DataProbeImpl.class).fluent() .addDomain(DOMAIN) - .addUser(USER, PASSWORD); + .addUser(user, PASSWORD); // Given a TRANSACTION POP3 session POP3Client pop3Client = new POP3Client(); pop3Client.connect("127.0.0.1", server.getProbe(Pop3GuiceProbe.class).getPop3Port()); - pop3Client.login(USER, PASSWORD); + pop3Client.login(user, PASSWORD); // When a message is received SMTPMessageSender smtpMessageSender = new SMTPMessageSender(JMAPTestingConstants.DOMAIN); smtpMessageSender.connect("127.0.0.1", server.getProbe(SmtpGuiceProbe.class).getSmtpPort()); - smtpMessageSender.sendMessageWithHeaders("bob@" + JMAPTestingConstants.DOMAIN, USER, + smtpMessageSender.sendMessageWithHeaders("bob@" + JMAPTestingConstants.DOMAIN, user, ClassLoaderUtils.getSystemResourceAsString("attachment.eml")); Awaitility.await().until(() -> server.getProbe(MailboxProbeImpl.class) - .searchMessage(MultimailboxesSearchQuery.from(SearchQuery.builder().build()).build(), USER, 1).size() == 1); + .searchMessage(MultimailboxesSearchQuery.from(SearchQuery.builder().build()).build(), user, 1).size() == 1); // Then the message is not shown for existing POP3 sessions pop3Client.reset(); @@ -373,24 +392,25 @@ public interface Pop3ServerContract { @Test default void rsetShouldCancelDeletes(GuiceJamesServer server) throws Exception { + String user = randomUser(); server.getProbe(DataProbeImpl.class).fluent() .addDomain(DOMAIN) - .addUser(USER, PASSWORD); + .addUser(user, PASSWORD); // Given a message is received SMTPMessageSender smtpMessageSender = new SMTPMessageSender(JMAPTestingConstants.DOMAIN); smtpMessageSender.connect("127.0.0.1", server.getProbe(SmtpGuiceProbe.class).getSmtpPort()); - smtpMessageSender.sendMessageWithHeaders("bob@" + JMAPTestingConstants.DOMAIN, USER, + smtpMessageSender.sendMessageWithHeaders("bob@" + JMAPTestingConstants.DOMAIN, user, ClassLoaderUtils.getSystemResourceAsString("attachment.eml")); Awaitility.await().until(() -> server.getProbe(MailboxProbeImpl.class) - .searchMessage(MultimailboxesSearchQuery.from(SearchQuery.builder().build()).build(), USER, 1).size() == 1); + .searchMessage(MultimailboxesSearchQuery.from(SearchQuery.builder().build()).build(), user, 1).size() == 1); // When I delete it in POP3 POP3Client pop3Client = new POP3Client(); pop3Client.connect("127.0.0.1", server.getProbe(Pop3GuiceProbe.class).getPop3Port()); - pop3Client.login(USER, PASSWORD); + pop3Client.login(user, PASSWORD); List<POP3MessageInfo> pop3MessageInfos = ImmutableList.copyOf(pop3Client.listMessages()); assertThat(pop3MessageInfos).hasSize(1); pop3Client.deleteMessage(pop3MessageInfos.get(0).number); @@ -404,24 +424,25 @@ public interface Pop3ServerContract { @Test default void deletesAreImmediateWithinASession(GuiceJamesServer server) throws Exception { + String user = randomUser(); server.getProbe(DataProbeImpl.class).fluent() .addDomain(DOMAIN) - .addUser(USER, PASSWORD); + .addUser(user, PASSWORD); // Given a message is received SMTPMessageSender smtpMessageSender = new SMTPMessageSender(JMAPTestingConstants.DOMAIN); smtpMessageSender.connect("127.0.0.1", server.getProbe(SmtpGuiceProbe.class).getSmtpPort()); - smtpMessageSender.sendMessageWithHeaders("bob@" + JMAPTestingConstants.DOMAIN, USER, + smtpMessageSender.sendMessageWithHeaders("bob@" + JMAPTestingConstants.DOMAIN, user, ClassLoaderUtils.getSystemResourceAsString("attachment.eml")); Awaitility.await().until(() -> server.getProbe(MailboxProbeImpl.class) - .searchMessage(MultimailboxesSearchQuery.from(SearchQuery.builder().build()).build(), USER, 1).size() == 1); + .searchMessage(MultimailboxesSearchQuery.from(SearchQuery.builder().build()).build(), user, 1).size() == 1); // When I delete it in POP3 POP3Client pop3Client = new POP3Client(); pop3Client.connect("127.0.0.1", server.getProbe(Pop3GuiceProbe.class).getPop3Port()); - pop3Client.login(USER, PASSWORD); + pop3Client.login(user, PASSWORD); List<POP3MessageInfo> pop3MessageInfos = ImmutableList.copyOf(pop3Client.listMessages()); assertThat(pop3MessageInfos).hasSize(1); pop3Client.deleteMessage(pop3MessageInfos.get(0).number); @@ -433,24 +454,25 @@ public interface Pop3ServerContract { @Test default void pendingDeletesAreNotSeenByOtherSessions(GuiceJamesServer server) throws Exception { + String user = randomUser(); server.getProbe(DataProbeImpl.class).fluent() .addDomain(DOMAIN) - .addUser(USER, PASSWORD); + .addUser(user, PASSWORD); // Given a message is received SMTPMessageSender smtpMessageSender = new SMTPMessageSender(JMAPTestingConstants.DOMAIN); smtpMessageSender.connect("127.0.0.1", server.getProbe(SmtpGuiceProbe.class).getSmtpPort()); - smtpMessageSender.sendMessageWithHeaders("bob@" + JMAPTestingConstants.DOMAIN, USER, + smtpMessageSender.sendMessageWithHeaders("bob@" + JMAPTestingConstants.DOMAIN, user, ClassLoaderUtils.getSystemResourceAsString("attachment.eml")); Awaitility.await().until(() -> server.getProbe(MailboxProbeImpl.class) - .searchMessage(MultimailboxesSearchQuery.from(SearchQuery.builder().build()).build(), USER, 1).size() == 1); + .searchMessage(MultimailboxesSearchQuery.from(SearchQuery.builder().build()).build(), user, 1).size() == 1); // When I delete it in POP3 POP3Client pop3Client = new POP3Client(); pop3Client.connect("127.0.0.1", server.getProbe(Pop3GuiceProbe.class).getPop3Port()); - pop3Client.login(USER, PASSWORD); + pop3Client.login(user, PASSWORD); List<POP3MessageInfo> pop3MessageInfos = ImmutableList.copyOf(pop3Client.listMessages()); assertThat(pop3MessageInfos).hasSize(1); pop3Client.deleteMessage(pop3MessageInfos.get(0).number); @@ -458,7 +480,7 @@ public interface Pop3ServerContract { // Then other sessions can still retrieve them POP3Client pop3Client2 = new POP3Client(); pop3Client2.connect("127.0.0.1", server.getProbe(Pop3GuiceProbe.class).getPop3Port()); - pop3Client2.login(USER, PASSWORD); + pop3Client2.login(user, PASSWORD); List<POP3MessageInfo> pop3MessageInfos2 = ImmutableList.copyOf(pop3Client2.listUniqueIdentifiers()); assertThat(pop3MessageInfos2).hasSize(1); pop3Client.disconnect(); @@ -467,24 +489,25 @@ public interface Pop3ServerContract { @Test default void disconnectsShouldNotPerformPendingDeletes(GuiceJamesServer server) throws Exception { + String user = randomUser(); server.getProbe(DataProbeImpl.class).fluent() .addDomain(DOMAIN) - .addUser(USER, PASSWORD); + .addUser(user, PASSWORD); // Given a message is received SMTPMessageSender smtpMessageSender = new SMTPMessageSender(JMAPTestingConstants.DOMAIN); smtpMessageSender.connect("127.0.0.1", server.getProbe(SmtpGuiceProbe.class).getSmtpPort()); - smtpMessageSender.sendMessageWithHeaders("bob@" + JMAPTestingConstants.DOMAIN, USER, + smtpMessageSender.sendMessageWithHeaders("bob@" + JMAPTestingConstants.DOMAIN, user, ClassLoaderUtils.getSystemResourceAsString("attachment.eml")); Awaitility.await().until(() -> server.getProbe(MailboxProbeImpl.class) - .searchMessage(MultimailboxesSearchQuery.from(SearchQuery.builder().build()).build(), USER, 1).size() == 1); + .searchMessage(MultimailboxesSearchQuery.from(SearchQuery.builder().build()).build(), user, 1).size() == 1); // When I delete it in POP3 POP3Client pop3Client = new POP3Client(); pop3Client.connect("127.0.0.1", server.getProbe(Pop3GuiceProbe.class).getPop3Port()); - pop3Client.login(USER, PASSWORD); + pop3Client.login(user, PASSWORD); List<POP3MessageInfo> pop3MessageInfos = ImmutableList.copyOf(pop3Client.listMessages()); assertThat(pop3MessageInfos).hasSize(1); pop3Client.deleteMessage(pop3MessageInfos.get(0).number); @@ -493,7 +516,7 @@ public interface Pop3ServerContract { // Then other sessions can still retrieve them POP3Client pop3Client2 = new POP3Client(); pop3Client2.connect("127.0.0.1", server.getProbe(Pop3GuiceProbe.class).getPop3Port()); - pop3Client2.login(USER, PASSWORD); + pop3Client2.login(user, PASSWORD); List<POP3MessageInfo> pop3MessageInfos2 = ImmutableList.copyOf(pop3Client2.listUniqueIdentifiers()); assertThat(pop3MessageInfos2).hasSize(1); pop3Client.disconnect(); @@ -501,9 +524,10 @@ public interface Pop3ServerContract { @Test default void linesStartingWithDotShouldBeWellHandled(GuiceJamesServer server) throws Exception { + String user = randomUser(); server.getProbe(DataProbeImpl.class).fluent() .addDomain(DOMAIN) - .addUser(USER, PASSWORD); + .addUser(user, PASSWORD); // Given one message SMTPMessageSender smtpMessageSender = new SMTPMessageSender(JMAPTestingConstants.DOMAIN); @@ -511,17 +535,17 @@ public interface Pop3ServerContract { String content = "subject: test\r\n" + "\r\n" + ".content\r\n"; - smtpMessageSender.sendMessageWithHeaders("bob@" + JMAPTestingConstants.DOMAIN, USER, + smtpMessageSender.sendMessageWithHeaders("bob@" + JMAPTestingConstants.DOMAIN, user, content); Awaitility.await().until(() -> server.getProbe(MailboxProbeImpl.class) - .searchMessage(MultimailboxesSearchQuery.from(SearchQuery.builder().build()).build(), USER, 1).size() == 1); + .searchMessage(MultimailboxesSearchQuery.from(SearchQuery.builder().build()).build(), user, 1).size() == 1); // Then the advertized size is the downloadable size POP3Client pop3Client = new POP3Client(); pop3Client.connect("127.0.0.1", server.getProbe(Pop3GuiceProbe.class).getPop3Port()); - pop3Client.login(USER, PASSWORD); + pop3Client.login(user, PASSWORD); List<POP3MessageInfo> pop3MessageInfos = ImmutableList.copyOf(pop3Client.listMessages()); Reader message = pop3Client.retrieveMessage(pop3MessageInfos.get(0).number); assertThat(CharStreams.toString(message)).endsWith(content); @@ -530,24 +554,25 @@ public interface Pop3ServerContract { @Test default void aBigMailCanBeRetrieved(GuiceJamesServer server) throws Exception { + String user = randomUser(); server.getProbe(DataProbeImpl.class).fluent() .addDomain(DOMAIN) - .addUser(USER, PASSWORD); + .addUser(user, PASSWORD); // Given 50 messages in INBOX SMTPMessageSender smtpMessageSender = new SMTPMessageSender(JMAPTestingConstants.DOMAIN); smtpMessageSender.connect("127.0.0.1", server.getProbe(SmtpGuiceProbe.class).getSmtpPort()); - smtpMessageSender.sendMessageWithHeaders("bob@" + JMAPTestingConstants.DOMAIN, USER, + smtpMessageSender.sendMessageWithHeaders("bob@" + JMAPTestingConstants.DOMAIN, user, ClassLoaderUtils.getSystemResourceAsString("big.eml")); Awaitility.await().until(() -> server.getProbe(MailboxProbeImpl.class) - .searchMessage(MultimailboxesSearchQuery.from(SearchQuery.builder().build()).build(), USER, 1).size() == 1); + .searchMessage(MultimailboxesSearchQuery.from(SearchQuery.builder().build()).build(), user, 1).size() == 1); // Them I can retrieve them in POP3 POP3Client pop3Client = new POP3Client(); pop3Client.connect("127.0.0.1", server.getProbe(Pop3GuiceProbe.class).getPop3Port()); - pop3Client.login(USER, PASSWORD); + pop3Client.login(user, PASSWORD); List<POP3MessageInfo> pop3MessageInfos = ImmutableList.copyOf(pop3Client.listUniqueIdentifiers()); assertThat(pop3MessageInfos).hasSize(1); Reader message = pop3Client.retrieveMessage(pop3MessageInfos.get(0).number); @@ -559,8 +584,7 @@ public interface Pop3ServerContract { @Test default void aMailCanBeSentToManyRecipients(GuiceJamesServer server) throws Exception { server.getProbe(DataProbeImpl.class).fluent() - .addDomain(DOMAIN) - .addUser(USER, PASSWORD); + .addDomain(DOMAIN); List<String> users = generateNUsers(10); users.forEach((ThrowingConsumer<String>) user -> server.getProbe(DataProbeImpl.class) .fluent() @@ -588,64 +612,59 @@ public interface Pop3ServerContract { }); } - private List<String> generateNUsers(int nbUsers) { - return IntStream.range(0, nbUsers) - .boxed() - .map(index -> "user" + index + "@" + DOMAIN) - .collect(ImmutableList.toImmutableList()); - } - @Test default void messageCanBeDeleted(GuiceJamesServer server) throws Exception { + String user = randomUser(); server.getProbe(DataProbeImpl.class).fluent() .addDomain(DOMAIN) - .addUser(USER, PASSWORD); + .addUser(user, PASSWORD); // Given a message in INBOX SMTPMessageSender smtpMessageSender = new SMTPMessageSender(JMAPTestingConstants.DOMAIN); smtpMessageSender.connect("127.0.0.1", server.getProbe(SmtpGuiceProbe.class).getSmtpPort()) - .sendMessage("bob@" + JMAPTestingConstants.DOMAIN, USER); + .sendMessage("bob@" + JMAPTestingConstants.DOMAIN, user); Awaitility.await().until(() -> server.getProbe(MailboxProbeImpl.class) - .searchMessage(MultimailboxesSearchQuery.from(SearchQuery.builder().build()).build(), USER, 1).size() == 1); + .searchMessage(MultimailboxesSearchQuery.from(SearchQuery.builder().build()).build(), user, 1).size() == 1); // When I connect in POP3 and delete it POP3Client pop3Client = new POP3Client(); pop3Client.connect("127.0.0.1", server.getProbe(Pop3GuiceProbe.class).getPop3Port()); - pop3Client.login(USER, PASSWORD); + pop3Client.login(user, PASSWORD); pop3Client.deleteMessage(pop3Client.listUniqueIdentifiers()[0].number); pop3Client.logout(); // Then subsequent POP3 sessions do not read it POP3Client pop3Client2 = new POP3Client(); pop3Client2.connect("127.0.0.1", server.getProbe(Pop3GuiceProbe.class).getPop3Port()); - pop3Client2.login(USER, PASSWORD); + pop3Client2.login(user, PASSWORD); assertThat(pop3Client2.listUniqueIdentifiers()).isEmpty(); pop3Client2.disconnect(); } @Test default void manyMessagesCanBeDeletedWithPOP3(GuiceJamesServer server) throws Exception { + String user = randomUser(); server.getProbe(DataProbeImpl.class).fluent() .addDomain(DOMAIN) - .addUser(USER, PASSWORD); + .addUser(user, PASSWORD); // Given 50 messages in INBOX SMTPMessageSender smtpMessageSender = new SMTPMessageSender(JMAPTestingConstants.DOMAIN); smtpMessageSender.connect("127.0.0.1", server.getProbe(SmtpGuiceProbe.class).getSmtpPort()); IntStream.range(0, 50) - .forEach(Throwing.intConsumer(i -> smtpMessageSender.sendMessage("bob@" + JMAPTestingConstants.DOMAIN, USER))); + .forEach(Throwing.intConsumer(i -> smtpMessageSender.sendMessage("bob@" + JMAPTestingConstants.DOMAIN, user))); Awaitility.await().until(() -> server.getProbe(MailboxProbeImpl.class) - .searchMessage(MultimailboxesSearchQuery.from(SearchQuery.builder().build()).build(), USER, 50).size() == 50); + .searchMessage(MultimailboxesSearchQuery.from(SearchQuery.builder().build()).build(), user, 50).size() == 50); // When I delete all of them POP3Client pop3Client = new POP3Client(); pop3Client.connect("127.0.0.1", server.getProbe(Pop3GuiceProbe.class).getPop3Port()); - pop3Client.login(USER, PASSWORD); + pop3Client.login(user, PASSWORD); List<POP3MessageInfo> pop3MessageInfos = ImmutableList.copyOf(pop3Client.listUniqueIdentifiers()); assertThat(pop3MessageInfos).hasSize(50); pop3MessageInfos.forEach(Throwing.consumer(info -> pop3Client.deleteMessage(info.number))); @@ -654,16 +673,17 @@ public interface Pop3ServerContract { // Then subsequent POP3 sessions do not read it POP3Client pop3Client2 = new POP3Client(); pop3Client2.connect("127.0.0.1", server.getProbe(Pop3GuiceProbe.class).getPop3Port()); - pop3Client2.login(USER, PASSWORD); + pop3Client2.login(user, PASSWORD); assertThat(pop3Client2.listUniqueIdentifiers()).isEmpty(); pop3Client2.disconnect(); } @Test default void deletingAMessageDeletesOnlyOne(GuiceJamesServer server) throws Exception { + String user = randomUser(); server.getProbe(DataProbeImpl.class).fluent() .addDomain(DOMAIN) - .addUser(USER, PASSWORD); + .addUser(user, PASSWORD); // Given 50 messages in INBOX SMTPMessageSender smtpMessageSender = new SMTPMessageSender(JMAPTestingConstants.DOMAIN); @@ -671,16 +691,16 @@ public interface Pop3ServerContract { var mailCount = 50; IntStream.range(0, mailCount) - .forEach(Throwing.intConsumer(i -> smtpMessageSender.sendMessage("bob@" + JMAPTestingConstants.DOMAIN, USER))); + .forEach(Throwing.intConsumer(i -> smtpMessageSender.sendMessage("bob@" + JMAPTestingConstants.DOMAIN, user))); Awaitility.await().until(() -> server.getProbe(MailboxProbeImpl.class) - .searchMessage(MultimailboxesSearchQuery.from(SearchQuery.builder().build()).build(), USER, mailCount).size() == mailCount); + .searchMessage(MultimailboxesSearchQuery.from(SearchQuery.builder().build()).build(), user, mailCount).size() == mailCount); // When I delete all of them POP3Client pop3Client = new POP3Client(); pop3Client.connect("127.0.0.1", server.getProbe(Pop3GuiceProbe.class).getPop3Port()); - pop3Client.login(USER, PASSWORD); + pop3Client.login(user, PASSWORD); List<POP3MessageInfo> pop3MessageInfos = ImmutableList.copyOf(pop3Client.listUniqueIdentifiers()); assertThat(pop3MessageInfos).hasSize(mailCount); pop3Client.deleteMessage(pop3MessageInfos.get(45).number); @@ -689,36 +709,37 @@ public interface Pop3ServerContract { // Then subsequent POP3 sessions do not read it POP3Client pop3Client2 = new POP3Client(); pop3Client2.connect("127.0.0.1", server.getProbe(Pop3GuiceProbe.class).getPop3Port()); - pop3Client2.login(USER, PASSWORD); + pop3Client2.login(user, PASSWORD); assertThat(pop3Client2.listUniqueIdentifiers()).hasSize(49); pop3Client2.disconnect(); } @Test default void messagesShouldBeOrderedByReceivedDate(GuiceJamesServer server) throws Exception { + String user = randomUser(); server.getProbe(DataProbeImpl.class).fluent() .addDomain(DOMAIN) - .addUser(USER, PASSWORD); + .addUser(user, PASSWORD); // Given two messages received SMTPMessageSender smtpMessageSender = new SMTPMessageSender(JMAPTestingConstants.DOMAIN); SMTPMessageSender sender = smtpMessageSender.connect("127.0.0.1", server.getProbe(SmtpGuiceProbe.class).getSmtpPort()); - sender.sendMessageWithHeaders("bob@" + JMAPTestingConstants.DOMAIN, USER, + sender.sendMessageWithHeaders("bob@" + JMAPTestingConstants.DOMAIN, user, "Subject: Message 1\r\n\r\nBody 1"); Awaitility.await().until(() -> server.getProbe(MailboxProbeImpl.class) - .searchMessage(MultimailboxesSearchQuery.from(SearchQuery.builder().build()).build(), USER, 1).size() == 1); + .searchMessage(MultimailboxesSearchQuery.from(SearchQuery.builder().build()).build(), user, 1).size() == 1); - sender.sendMessageWithHeaders("bob@" + JMAPTestingConstants.DOMAIN, USER, + sender.sendMessageWithHeaders("bob@" + JMAPTestingConstants.DOMAIN, user, "Subject: Message 2\r\n\r\nBody 2"); Awaitility.await().until(() -> server.getProbe(MailboxProbeImpl.class) - .searchMessage(MultimailboxesSearchQuery.from(SearchQuery.builder().build()).build(), USER, 2).size() == 2); + .searchMessage(MultimailboxesSearchQuery.from(SearchQuery.builder().build()).build(), user, 2).size() == 2); // When I connect in POP3 and read them POP3Client pop3Client = new POP3Client(); pop3Client.connect("127.0.0.1", server.getProbe(Pop3GuiceProbe.class).getPop3Port()); - pop3Client.login(USER, PASSWORD); + pop3Client.login(user, PASSWORD); POP3MessageInfo[] pop3MessageInfos = pop3Client.listUniqueIdentifiers(); // then they are ordered by received at --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
