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 2018/03/29 09:46:20 UTC
[04/18] james-project git commit: JAMES-2363 Copy Mime message in
SentMail
JAMES-2363 Copy Mime message in SentMail
This allows uncoupling mime message from previous existing ones and avoids unexpected test failures.
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/d24020b3
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/d24020b3
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/d24020b3
Branch: refs/heads/master
Commit: d24020b3e10cbaef1c89998c8fce9cae05c8fa37
Parents: f03eece
Author: benwa <bt...@linagora.com>
Authored: Mon Mar 26 09:47:17 2018 +0700
Committer: benwa <bt...@linagora.com>
Committed: Thu Mar 29 16:42:52 2018 +0700
----------------------------------------------------------------------
.../mailet/base/test/FakeMailContext.java | 19 ++++++++++---
.../james/transport/mailets/DSNBounceTest.java | 29 +++++++++++++-------
2 files changed, 34 insertions(+), 14 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/d24020b3/mailet/base/src/test/java/org/apache/mailet/base/test/FakeMailContext.java
----------------------------------------------------------------------
diff --git a/mailet/base/src/test/java/org/apache/mailet/base/test/FakeMailContext.java b/mailet/base/src/test/java/org/apache/mailet/base/test/FakeMailContext.java
index 5621104..687b996 100644
--- a/mailet/base/src/test/java/org/apache/mailet/base/test/FakeMailContext.java
+++ b/mailet/base/src/test/java/org/apache/mailet/base/test/FakeMailContext.java
@@ -36,12 +36,15 @@ import javax.mail.internet.MimeMessage;
import org.apache.james.core.Domain;
import org.apache.james.core.MailAddress;
+import org.apache.james.core.builder.MimeMessageWrapper;
import org.apache.mailet.HostAddress;
import org.apache.mailet.LookupException;
import org.apache.mailet.Mail;
import org.apache.mailet.MailetContext;
import org.slf4j.Logger;
+import com.github.fge.lambdas.Throwing;
+import com.github.fge.lambdas.functions.ThrowingFunction;
import com.google.common.base.MoreObjects;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
@@ -108,6 +111,14 @@ public class FakeMailContext implements MailetContext {
public static class SentMail {
+ private static MimeMessage tryCopyMimeMessage(MimeMessage msg) throws MessagingException {
+ ThrowingFunction<MimeMessage, MimeMessage> throwingFunction = MimeMessageWrapper::wrap;
+
+ return Optional.ofNullable(msg)
+ .map(Throwing.function(throwingFunction).sneakyThrow())
+ .orElse(null);
+ }
+
public static class Builder {
private MailAddress sender;
private Optional<Collection<MailAddress>> recipients = Optional.empty();
@@ -176,7 +187,7 @@ public class FakeMailContext implements MailetContext {
return this;
}
- public SentMail build() {
+ public SentMail build() throws MessagingException {
if (fromMailet.orElse(false)) {
this.attribute(Mail.SENT_BY_MAILET, "true");
}
@@ -193,10 +204,10 @@ public class FakeMailContext implements MailetContext {
private final String state;
private final Optional<Delay> delay;
- private SentMail(MailAddress sender, Collection<MailAddress> recipients, MimeMessage msg, Map<String, Serializable> attributes, String state, Optional<Delay> delay) {
+ private SentMail(MailAddress sender, Collection<MailAddress> recipients, MimeMessage msg, Map<String, Serializable> attributes, String state, Optional<Delay> delay) throws MessagingException {
this.sender = sender;
this.recipients = ImmutableList.copyOf(recipients);
- this.msg = msg;
+ this.msg = tryCopyMimeMessage(msg);
this.subject = getSubject(msg);
this.attributes = ImmutableMap.copyOf(attributes);
this.state = state;
@@ -311,7 +322,7 @@ public class FakeMailContext implements MailetContext {
this.bouncer = bouncer;
}
- public BouncedMail(SentMail.Builder sentMail, String message, Optional<MailAddress> bouncer) {
+ public BouncedMail(SentMail.Builder sentMail, String message, Optional<MailAddress> bouncer) throws MessagingException {
this(sentMail.build(), message, bouncer);
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/d24020b3/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/DSNBounceTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/DSNBounceTest.java b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/DSNBounceTest.java
index fd4a233..9e0cf7e 100644
--- a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/DSNBounceTest.java
+++ b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/DSNBounceTest.java
@@ -25,22 +25,26 @@ import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import java.net.InetAddress;
+import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.TimeZone;
import javax.mail.BodyPart;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
+import javax.mail.internet.MimeMultipart;
+import javax.mail.util.SharedByteArrayInputStream;
+import org.apache.commons.io.IOUtils;
import org.apache.james.core.MailAddress;
import org.apache.james.core.builder.MimeMessageBuilder;
import org.apache.james.dnsservice.api.DNSService;
import org.apache.james.transport.mailets.redirect.SpecialAddress;
+import org.apache.james.util.MimeMessageUtil;
import org.apache.mailet.Mail;
import org.apache.mailet.base.DateFormats;
import org.apache.mailet.base.MailAddressFixture;
import org.apache.mailet.base.RFC2822Headers;
-import org.apache.mailet.base.mail.MimeMultipartReport;
import org.apache.mailet.base.test.FakeMail;
import org.apache.mailet.base.test.FakeMailContext;
import org.apache.mailet.base.test.FakeMailContext.SentMail;
@@ -176,7 +180,7 @@ public class DSNBounceTest {
assertThat(sentMails).hasSize(1);
SentMail sentMail = sentMails.get(0);
MimeMessage sentMessage = sentMail.getMsg();
- MimeMultipartReport content = (MimeMultipartReport) sentMessage.getContent();
+ MimeMultipart content = (MimeMultipart) sentMessage.getContent();
BodyPart bodyPart = content.getBodyPart(0);
assertThat(bodyPart.getContentType()).isEqualTo("text/plain; charset=us-ascii");
assertThat(bodyPart.getContent()).isEqualTo(expectedContent);
@@ -216,7 +220,7 @@ public class DSNBounceTest {
assertThat(sentMails).hasSize(1);
SentMail sentMail = sentMails.get(0);
MimeMessage sentMessage = sentMail.getMsg();
- MimeMultipartReport content = (MimeMultipartReport) sentMessage.getContent();
+ MimeMultipart content = (MimeMultipart) sentMessage.getContent();
BodyPart bodyPart = content.getBodyPart(0);
assertThat(bodyPart.getContentType()).isEqualTo("text/plain; charset=us-ascii");
assertThat(bodyPart.getContent()).isEqualTo(expectedContent);
@@ -257,8 +261,9 @@ public class DSNBounceTest {
assertThat(sentMails).hasSize(1);
SentMail sentMail = sentMails.get(0);
MimeMessage sentMessage = sentMail.getMsg();
- MimeMultipartReport content = (MimeMultipartReport) sentMessage.getContent();
- assertThat(content.getBodyPart(1).getContent()).isEqualTo(expectedContent);
+ MimeMultipart content = (MimeMultipart) sentMessage.getContent();
+ SharedByteArrayInputStream actualContent = (SharedByteArrayInputStream) content.getBodyPart(1).getContent();
+ assertThat(IOUtils.toString(actualContent, StandardCharsets.UTF_8)).isEqualTo(expectedContent);
}
@Test
@@ -359,7 +364,7 @@ public class DSNBounceTest {
assertThat(sentMail.getSender()).isNull();
assertThat(sentMail.getRecipients()).containsOnly(senderMailAddress);
MimeMessage sentMessage = sentMail.getMsg();
- MimeMultipartReport content = (MimeMultipartReport) sentMessage.getContent();
+ MimeMultipart content = (MimeMultipart) sentMessage.getContent();
assertThat(content.getCount()).isEqualTo(2);
}
@@ -392,8 +397,11 @@ public class DSNBounceTest {
assertThat(sentMail.getSender()).isNull();
assertThat(sentMail.getRecipients()).containsOnly(senderMailAddress);
MimeMessage sentMessage = sentMail.getMsg();
- MimeMultipartReport content = (MimeMultipartReport) sentMessage.getContent();
- assertThat(content.getBodyPart(2).getContent()).isEqualTo(mimeMessage);
+ MimeMultipart content = (MimeMultipart) sentMessage.getContent();
+
+ assertThat(sentMail.getMsg().getContentType()).startsWith("multipart/report;");
+ assertThat(MimeMessageUtil.asString((MimeMessage) content.getBodyPart(2).getContent()))
+ .isEqualTo(MimeMessageUtil.asString(mimeMessage));
}
@Test
@@ -425,9 +433,10 @@ public class DSNBounceTest {
assertThat(sentMail.getSender()).isNull();
assertThat(sentMail.getRecipients()).containsOnly(senderMailAddress);
MimeMessage sentMessage = sentMail.getMsg();
- MimeMultipartReport content = (MimeMultipartReport) sentMessage.getContent();
+ MimeMultipart content = (MimeMultipart) sentMessage.getContent();
BodyPart bodyPart = content.getBodyPart(2);
- assertThat((String) bodyPart.getContent())
+ SharedByteArrayInputStream actualContent = (SharedByteArrayInputStream) bodyPart.getContent();
+ assertThat(IOUtils.toString(actualContent, StandardCharsets.UTF_8))
.contains("Subject: mySubject")
.contains("myHeader: myValue");
assertThat(bodyPart.getContentType()).isEqualTo("text/rfc822-headers; name=mySubject");
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org