JAMES-2557 Improve JamesMailContext code quality

 - rawBounce should enforce sender presence
 - rawBounce can rely more on MaybeSender


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/48540625
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/48540625
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/48540625

Branch: refs/heads/master
Commit: 485406252d82c2d23a4078c76b26d6fc8973bbd7
Parents: 4d2f085
Author: Benoit Tellier <[email protected]>
Authored: Fri Oct 26 12:50:58 2018 +0700
Committer: Benoit Tellier <[email protected]>
Committed: Tue Oct 30 09:39:30 2018 +0700

----------------------------------------------------------------------
 .../impl/JamesMailetContext.java                | 16 +++++--------
 .../impl/JamesMailetContextTest.java            | 24 ++++++++++++++++++++
 2 files changed, 30 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/48540625/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/JamesMailetContext.java
----------------------------------------------------------------------
diff --git 
a/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/JamesMailetContext.java
 
b/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/JamesMailetContext.java
index 879d46f..9e575cd 100644
--- 
a/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/JamesMailetContext.java
+++ 
b/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/JamesMailetContext.java
@@ -62,7 +62,7 @@ import org.apache.mailet.base.RFC2822Headers;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.github.fge.lambdas.Throwing;
+import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableSet;
 
 public class JamesMailetContext implements MailetContext, Configurable {
@@ -211,24 +211,20 @@ public class JamesMailetContext implements MailetContext, 
Configurable {
      * @throws MessagingException if the bounce mail could not be created
      */
     private MailImpl rawBounce(Mail mail, String bounceText) throws 
MessagingException {
-        // This sends a message to the james component that is a bounce of the
-        // sent message
+        Preconditions.checkArgument(mail.hasSender(), "Mail should have a 
sender");
+        // This sends a message to the james component that is a bounce of the 
sent message
         MimeMessage original = mail.getMessage();
         MimeMessage reply = (MimeMessage) original.reply(false);
         reply.setSubject("Re: " + original.getSubject());
         reply.setSentDate(new Date());
         Collection<MailAddress> recipients = mail.getMaybeSender().asList();
-        InternetAddress[] addr = mail.getMaybeSender().asOptional()
-            .map(MailAddress::asString)
-            .map(Throwing.function((String s) -> new 
InternetAddress(s)).sneakyThrow())
-            .map(address -> new InternetAddress[]{address})
-            .orElse(new InternetAddress[0]);
+        MailAddress sender = mail.getMaybeSender().get();
 
-        reply.setRecipients(Message.RecipientType.TO, addr);
+        reply.setRecipient(Message.RecipientType.TO, new 
InternetAddress(mail.getMaybeSender().asString()));
         reply.setFrom(new 
InternetAddress(mail.getRecipients().iterator().next().toString()));
         reply.setText(bounceText);
         reply.setHeader(RFC2822Headers.MESSAGE_ID, "replyTo-" + 
mail.getName());
-        return new MailImpl("replyTo-" + mail.getName(), new 
MailAddress(mail.getRecipients().iterator().next().toString()), recipients, 
reply);
+        return new MailImpl("replyTo-" + mail.getName(), sender, recipients, 
reply);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/48540625/server/mailet/mailetcontainer-camel/src/test/java/org/apache/james/mailetcontainer/impl/JamesMailetContextTest.java
----------------------------------------------------------------------
diff --git 
a/server/mailet/mailetcontainer-camel/src/test/java/org/apache/james/mailetcontainer/impl/JamesMailetContextTest.java
 
b/server/mailet/mailetcontainer-camel/src/test/java/org/apache/james/mailetcontainer/impl/JamesMailetContextTest.java
index 676a756..f24a5d1 100644
--- 
a/server/mailet/mailetcontainer-camel/src/test/java/org/apache/james/mailetcontainer/impl/JamesMailetContextTest.java
+++ 
b/server/mailet/mailetcontainer-camel/src/test/java/org/apache/james/mailetcontainer/impl/JamesMailetContextTest.java
@@ -23,6 +23,7 @@ import static org.assertj.core.api.Assertions.assertThat;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.verifyNoMoreInteractions;
+import static org.mockito.Mockito.verifyZeroInteractions;
 import static org.mockito.Mockito.when;
 
 import java.util.concurrent.TimeUnit;
@@ -180,6 +181,29 @@ public class JamesMailetContextTest {
     }
 
     @Test
+    public void bouncingToNullSenderShouldBeANoop() throws Exception {
+        MailImpl mail = new MailImpl();
+        mail.setSender(MailAddress.nullSender());
+        mail.setRecipients(ImmutableList.of(mailAddress));
+        mail.setMessage(MimeMessageUtil.defaultMimeMessage());
+
+        testee.bounce(mail, "message");
+
+        verifyZeroInteractions(spoolMailQueue);
+    }
+
+    @Test
+    public void bouncingToNoSenderShouldBeANoop() throws Exception {
+        MailImpl mail = new MailImpl();
+        mail.setRecipients(ImmutableList.of(mailAddress));
+        mail.setMessage(MimeMessageUtil.defaultMimeMessage());
+
+        testee.bounce(mail, "message");
+
+        verifyZeroInteractions(spoolMailQueue);
+    }
+
+    @Test
     public void bounceShouldEnqueueEmailWithRootState() throws Exception {
         MailImpl mail = new MailImpl();
         mail.setSender(mailAddress);


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

Reply via email to