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 2020/06/24 10:57:21 UTC
[james-project] 06/07: JAMES-3029 add test to check that mail is
well received by all recipients
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 <rk...@linagora.com>
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("bob@apache.org", JAMES_USER, uniqueMessage);
}
+
+ default void sendUniqueMessageToTwoUsers(SMTPMessageSender sender, String message) throws IOException {
+ String uniqueMessage = message.replace("banana", "UUID " + UUID.randomUUID().toString());
+ sender.sendMessageWithHeaders("bob@apache.org", 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: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org