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 1996931071e56850299ceda37623f060669486be
Author: RĂ©mi KOWALSKI <[email protected]>
AuthorDate: Thu Jan 23 11:56:57 2020 +0100

    JAMES-3029 add test to check that mail is well received by all recipients
---
 .../apache/james/MailsShouldBeWellReceived.java    | 51 +++++++++++++++++++---
 .../org/apache/james/utils/SMTPMessageSender.java  | 30 +++++++------
 2 files changed, 60 insertions(+), 21 deletions(-)

diff --git 
a/server/container/guice/guice-common/src/test/java/org/apache/james/MailsShouldBeWellReceived.java
 
b/server/container/guice/guice-common/src/test/java/org/apache/james/MailsShouldBeWellReceived.java
index 2ddecad..f119167 100644
--- 
a/server/container/guice/guice-common/src/test/java/org/apache/james/MailsShouldBeWellReceived.java
+++ 
b/server/container/guice/guice-common/src/test/java/org/apache/james/MailsShouldBeWellReceived.java
@@ -48,6 +48,7 @@ import org.awaitility.Awaitility;
 import org.awaitility.Duration;
 import org.awaitility.core.ConditionFactory;
 import org.junit.jupiter.api.Test;
+import org.testcontainers.shaded.com.google.common.collect.ImmutableList;
 
 import com.github.fge.lambdas.Throwing;
 import com.google.common.io.Resources;
@@ -60,7 +61,9 @@ interface MailsShouldBeWellReceived {
     String JAMES_SERVER_HOST = "127.0.0.1";
     String DOMAIN = "apache.org";
     String JAMES_USER = "james-user@" + DOMAIN;
+    String OTHER_USER = "other-user@" + DOMAIN;
     String PASSWORD = "secret";
+    String PASSWORD_OTHER = "other-secret";
     ConditionFactory CALMLY_AWAIT = Awaitility
         .with().pollInterval(Duration.ONE_HUNDRED_MILLISECONDS)
         .and().pollDelay(Duration.ONE_HUNDRED_MILLISECONDS)
@@ -125,13 +128,8 @@ interface MailsShouldBeWellReceived {
         String message = 
Resources.toString(Resources.getResource("eml/htmlMail.eml"), 
StandardCharsets.UTF_8);
 
         try (SMTPMessageSender sender = new 
SMTPMessageSender(Domain.LOCALHOST.asString())) {
-            Mono.fromRunnable(
-                Throwing.runnable(() -> {
-                    sender.connect(JAMES_SERVER_HOST, smtpPort);
-                    sendUniqueMessage(sender, message);
-                }))
-                .subscribeOn(Schedulers.elastic())
-                .block();
+            sender.connect(JAMES_SERVER_HOST, smtpPort);
+            sendUniqueMessage(sender, message);
         }
 
         CALMLY_AWAIT.until(() -> 
server.getProbe(SpoolerProbe.class).processingFinished());
@@ -146,6 +144,40 @@ interface MailsShouldBeWellReceived {
     }
 
     @Test
+    default void mailsShouldBeWellReceivedByBothRecipient(GuiceJamesServer 
server) throws Exception {
+        server.getProbe(DataProbeImpl.class).fluent()
+            .addDomain(DOMAIN)
+            .addUser(JAMES_USER, PASSWORD)
+            .addUser(OTHER_USER, PASSWORD_OTHER);
+
+        MailboxProbeImpl mailboxProbe = 
server.getProbe(MailboxProbeImpl.class);
+        mailboxProbe.createMailbox("#private", JAMES_USER, 
DefaultMailboxes.INBOX);
+        mailboxProbe.createMailbox("#private", OTHER_USER, 
DefaultMailboxes.INBOX);
+
+        Port smtpPort = server.getProbe(SmtpGuiceProbe.class).getSmtpPort();
+        String message = 
Resources.toString(Resources.getResource("eml/htmlMail.eml"), 
StandardCharsets.UTF_8);
+
+        try (SMTPMessageSender sender = new 
SMTPMessageSender(Domain.LOCALHOST.asString())) {
+            sender.connect(JAMES_SERVER_HOST, smtpPort);
+            sendUniqueMessageToTwoUsers(sender, message);
+        }
+
+        CALMLY_AWAIT.untilAsserted(() -> 
assertThat(server.getProbe(SpoolerProbe.class).processingFinished()).isTrue());
+
+        try (IMAPMessageReader reader = new IMAPMessageReader()) {
+            reader.connect(JAMES_SERVER_HOST, 
server.getProbe(ImapGuiceProbe.class).getImapPort())
+                .login(JAMES_USER, PASSWORD)
+                .select(IMAPMessageReader.INBOX)
+                .awaitMessageCount(CALMLY_AWAIT, 1);
+            reader.connect(JAMES_SERVER_HOST, 
server.getProbe(ImapGuiceProbe.class).getImapPort())
+                .login(OTHER_USER, PASSWORD_OTHER)
+                .select(IMAPMessageReader.INBOX)
+                .awaitMessageCount(CALMLY_AWAIT, 1);
+        }
+
+    }
+
+    @Test
     default void oneHundredMailsShouldBeWellReceived(GuiceJamesServer server) 
throws Exception {
         server.getProbe(DataProbeImpl.class).fluent()
             .addDomain(DOMAIN)
@@ -184,4 +216,9 @@ interface MailsShouldBeWellReceived {
         String uniqueMessage = message.replace("banana", "UUID " + 
UUID.randomUUID().toString());
         sender.sendMessageWithHeaders("[email protected]", JAMES_USER, 
uniqueMessage);
     }
+
+    default void sendUniqueMessageToTwoUsers(SMTPMessageSender sender, String 
message) throws IOException {
+        String uniqueMessage = message.replace("banana", "UUID " + 
UUID.randomUUID().toString());
+        sender.sendMessageWithHeaders("[email protected]", 
ImmutableList.of(JAMES_USER, OTHER_USER), uniqueMessage);
+    }
 }
diff --git 
a/server/testing/src/main/java/org/apache/james/utils/SMTPMessageSender.java 
b/server/testing/src/main/java/org/apache/james/utils/SMTPMessageSender.java
index fc699aa..655023b 100644
--- a/server/testing/src/main/java/org/apache/james/utils/SMTPMessageSender.java
+++ b/server/testing/src/main/java/org/apache/james/utils/SMTPMessageSender.java
@@ -26,6 +26,7 @@ import java.nio.charset.StandardCharsets;
 import java.security.InvalidKeyException;
 import java.security.NoSuchAlgorithmException;
 import java.security.spec.InvalidKeySpecException;
+import java.util.List;
 
 import javax.mail.Message;
 import javax.mail.MessagingException;
@@ -40,6 +41,8 @@ import org.junit.jupiter.api.extension.ExtensionContext;
 import org.junit.rules.ExternalResource;
 
 import com.github.fge.lambdas.Throwing;
+import com.github.steveash.guavate.Guavate;
+import com.google.common.collect.ImmutableList;
 
 public class SMTPMessageSender extends ExternalResource implements Closeable, 
AfterEachCallback {
 
@@ -91,15 +94,12 @@ public class SMTPMessageSender extends ExternalResource 
implements Closeable, Af
     }
 
     public SMTPMessageSender sendMessage(String from, String recipient) throws 
IOException {
-        doHelo();
-        doSetSender(from);
-        doRCPT("<" + recipient + ">");
-        doData("FROM: " + from + "\r\n" +
+        String message = "FROM: " + from + "\r\n" +
             "subject: test\r\n" +
             "\r\n" +
             "content\r\n" +
-            ".\r\n");
-        return this;
+            ".\r\n";
+        return sendMessageWithHeaders(from, ImmutableList.of(recipient), 
message);
     }
 
     public SMTPMessageSender sendMessageNoBracket(String from, String 
recipient) throws IOException {
@@ -115,22 +115,24 @@ public class SMTPMessageSender extends ExternalResource 
implements Closeable, Af
     }
 
     public SMTPMessageSender sendMessageWithHeaders(String from, String 
recipient, String message) throws IOException {
+        return sendMessageWithHeaders(from, ImmutableList.of(recipient), 
message);
+    }
+
+    public SMTPMessageSender sendMessageWithHeaders(String from, List<String> 
recipients, String message) throws IOException {
         doHelo();
         doSetSender(from);
-        doRCPT("<" + recipient + ">");
+        recipients.forEach(Throwing.consumer(this::doAddRcpt).sneakyThrow());
         doData(message);
         return this;
     }
 
     public SMTPMessageSender sendMessage(Mail mail) throws MessagingException, 
IOException {
         String from = mail.getMaybeSender().asString();
-        doHelo();
-        doSetSender(from);
-        mail.getRecipients().stream()
-            .map(MailAddress::asString)
-            .forEach(Throwing.consumer(this::doAddRcpt).sneakyThrow());
-        doData(asString(mail.getMessage()));
-        return this;
+        ImmutableList<String> recipients = mail.getRecipients().stream()
+            .map(MailAddress::asString).collect(Guavate.toImmutableList());
+        String message = asString(mail.getMessage());
+
+        return sendMessageWithHeaders(from, recipients, message);
     }
 
     public SMTPMessageSender sendMessage(FakeMail.Builder mail) throws 
MessagingException, IOException {


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to