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 ad...@apache.org on 2017/11/29 14:23:33 UTC

[2/5] james-project git commit: JAMES-2238 bouncing estimate size only when possible

JAMES-2238 bouncing estimate size only when possible


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

Branch: refs/heads/master
Commit: 4e7984e56059dd1f7e75ab19fca819a150c1c74a
Parents: 0c5985b
Author: Luc DUZAN <ld...@linagora.com>
Authored: Tue Nov 28 10:59:14 2017 +0100
Committer: Luc DUZAN <ld...@linagora.com>
Committed: Wed Nov 29 15:20:33 2017 +0100

----------------------------------------------------------------------
 .../mailets/redirect/NotifyMailetsMessage.java  | 27 ++++++-
 .../redirect/NotifyMailetsMessageTest.java      | 75 +++++++++++++++-----
 2 files changed, 80 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/4e7984e5/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/redirect/NotifyMailetsMessage.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/redirect/NotifyMailetsMessage.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/redirect/NotifyMailetsMessage.java
index edb7d11..b7511e8 100644
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/redirect/NotifyMailetsMessage.java
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/redirect/NotifyMailetsMessage.java
@@ -20,20 +20,26 @@
 package org.apache.james.transport.mailets.redirect;
 
 import java.util.List;
+import java.util.Optional;
 
 import javax.mail.MessagingException;
 import javax.mail.internet.MimeMessage;
 
+import org.apache.james.core.MailAddress;
 import org.apache.james.transport.util.SizeUtils;
 import org.apache.mailet.Mail;
-import org.apache.james.core.MailAddress;
 import org.apache.mailet.base.RFC2822Headers;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
+import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Splitter;
 import com.google.common.collect.ImmutableList;
 
 public class NotifyMailetsMessage {
 
+    private static final Logger LOGGER = LoggerFactory.getLogger(NotifyMailetsMessage.class);
+
     private static final char LINE_BREAK = '\n';
 
     public String generateMessage(String parameterMessage, Mail originalMail) throws MessagingException {
@@ -79,8 +85,12 @@ public class NotifyMailetsMessage {
         appendAddresses(builder, "To", message.getHeader(RFC2822Headers.TO));
         appendAddresses(builder, "CC", message.getHeader(RFC2822Headers.CC));
 
-        builder.append("  Size: " + SizeUtils.humanReadableSize(message.getSize()))
-            .append(LINE_BREAK);
+        getMessageSizeEstimation(originalMail).ifPresent(size ->
+            builder
+                .append("  Size: ")
+                .append(SizeUtils.humanReadableSize(size))
+                .append(LINE_BREAK));
+
         if (message.getLineCount() >= 0) {
             builder.append("  Number of lines: " + message.getLineCount())
                 .append(LINE_BREAK);
@@ -89,6 +99,17 @@ public class NotifyMailetsMessage {
         return builder.toString();
     }
 
+    @VisibleForTesting static Optional<Long> getMessageSizeEstimation(Mail mail) {
+        try  {
+            return Optional.of(mail.getMessageSize())
+                .filter(size -> size > 0);
+        } catch (MessagingException e) {
+            LOGGER.debug("Could not estimate mail size", e);
+
+            return Optional.empty();
+        }
+    }
+
     private void appendAddresses(StringBuilder builder, String title, String[] addresses) {
         if (addresses != null) {
             builder.append("  " + title + ": ")

http://git-wip-us.apache.org/repos/asf/james-project/blob/4e7984e5/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/redirect/NotifyMailetsMessageTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/redirect/NotifyMailetsMessageTest.java b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/redirect/NotifyMailetsMessageTest.java
index 37f7b60..b9d2034 100644
--- a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/redirect/NotifyMailetsMessageTest.java
+++ b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/redirect/NotifyMailetsMessageTest.java
@@ -20,18 +20,22 @@
 package org.apache.james.transport.mailets.redirect;
 
 import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
 
 import java.io.ByteArrayInputStream;
-import java.util.Collections;
+import java.util.Optional;
 import java.util.Properties;
 import java.util.TimeZone;
 
 import javax.mail.Message.RecipientType;
+import javax.mail.MessagingException;
 import javax.mail.Session;
 import javax.mail.internet.InternetAddress;
 import javax.mail.internet.MimeMessage;
 
 import org.apache.james.core.MailAddress;
+import org.apache.mailet.Mail;
 import org.apache.mailet.base.test.FakeMail;
 import org.joda.time.DateTime;
 import org.junit.After;
@@ -68,8 +72,7 @@ public class NotifyMailetsMessageTest {
         assertThat(generateMessage).isEqualTo("my message\n" +
                 "\n" +
                 "Message details:\n" +
-                "  MAIL FROM: user@james.org\n" +
-                "  Size: -1 B\n");
+                "  MAIL FROM: user@james.org\n");
     }
 
     @Test
@@ -86,8 +89,7 @@ public class NotifyMailetsMessageTest {
                 "error message\n" +
                 "\n" +
                 "Message details:\n" +
-                "  MAIL FROM: null\n" +
-                "  Size: -1 B\n");
+                "  MAIL FROM: null\n");
     }
 
     @Test
@@ -102,8 +104,7 @@ public class NotifyMailetsMessageTest {
                 "\n" +
                 "Message details:\n" +
                 "  Subject: my subject\n" +
-                "  MAIL FROM: null\n" +
-                "  Size: -1 B\n");
+                "  MAIL FROM: null\n");
     }
 
     @Test
@@ -118,8 +119,7 @@ public class NotifyMailetsMessageTest {
                 "\n" +
                 "Message details:\n" +
                 "  Sent date: Thu Sep 08 14:25:52 UTC 2016\n" +
-                "  MAIL FROM: null\n" +
-                "  Size: -1 B\n");
+                "  MAIL FROM: null\n");
     }
 
     @Test
@@ -135,8 +135,7 @@ public class NotifyMailetsMessageTest {
                 "Message details:\n" +
                 "  MAIL FROM: null\n" +
                 "  RCPT TO: user@james.org\n" +
-                "           user2@james.org\n" +
-                "  Size: -1 B\n");
+                "           user2@james.org\n");
     }
 
     @Test
@@ -153,8 +152,7 @@ public class NotifyMailetsMessageTest {
                 "  MAIL FROM: null\n" +
                 "  From: \n" +
                 "user@james.org \n" +
-                "\n" +
-                "  Size: -1 B\n");
+                "\n");
     }
 
     @Test
@@ -172,8 +170,7 @@ public class NotifyMailetsMessageTest {
                 "  To: \n" +
                 "user@james.org \n" +
                 "user2@james.org \n" +
-                "\n" +
-                "  Size: -1 B\n");
+                "\n");
     }
 
     @Test
@@ -191,18 +188,18 @@ public class NotifyMailetsMessageTest {
                 "  CC: \n" +
                 "user@james.org \n" +
                 "user2@james.org \n" +
-                "\n" +
-                "  Size: -1 B\n");
+                "\n");
     }
 
     @Test
-    public void generateMessageShouldAddSizeWhenMimeMessageAsSome() throws Exception {
+    public void generateMessageShouldAddSizeWhenPossible() throws Exception {
         String content = "MIME-Version: 1.0\r\n" +
                 "Content-Type: text/plain; charset=utf-8\r\n" +
                 "\r\n" +
                 "test\r\n";
         MimeMessage message = new MimeMessage(Session.getDefaultInstance(new Properties()), new ByteArrayInputStream(content.getBytes()));
         FakeMail mail = FakeMail.from(message);
+        mail.setMessageSize(6);
 
         String generateMessage = new NotifyMailetsMessage().generateMessage("my message", mail);
 
@@ -218,9 +215,11 @@ public class NotifyMailetsMessageTest {
         String content = "MIME-Version: 1.0\r\n" +
             "Content-Type: text/plain; charset=utf-8\r\n" +
             "\r\n" +
-            String.join("", Collections.nCopies(1000, "test\r\n"));
+            "test\r\n";
+
         MimeMessage message = new MimeMessage(Session.getDefaultInstance(new Properties()), new ByteArrayInputStream(content.getBytes()));
         FakeMail mail = FakeMail.from(message);
+        mail.setMessageSize((long)(5.9*1024));
 
         String generateMessage = new NotifyMailetsMessage().generateMessage("my message", mail);
 
@@ -230,4 +229,42 @@ public class NotifyMailetsMessageTest {
             "  MAIL FROM: null\n" +
             "  Size: 5.9 KiB\n");
     }
+
+    @Test
+    public void getMessageInternalSizeShouldTransformMessagingErrorIntoEmpty() throws MessagingException {
+        Mail mail = mock(Mail.class);
+        when(mail.getMessageSize()).thenThrow(MessagingException.class);
+
+        assertThat(NotifyMailetsMessage.getMessageSizeEstimation(mail))
+            .isEqualTo(Optional.empty());
+    }
+
+    @Test
+    public void getMessageInternalSizeShouldTransformZeroSizeIntoEmpty() throws MessagingException {
+        Mail mail = mock(Mail.class);
+        when(mail.getMessageSize()).thenReturn(0L);
+
+        assertThat(NotifyMailetsMessage.getMessageSizeEstimation(mail))
+            .isEqualTo(Optional.empty());
+    }
+
+    @Test
+    public void getMessageInternalSizeShouldTransformNegatifIntoEmpty() throws MessagingException {
+        Mail mail = mock(Mail.class);
+        when(mail.getMessageSize()).thenReturn(-1L);
+
+        assertThat(NotifyMailetsMessage.getMessageSizeEstimation(mail))
+            .isEqualTo(Optional.empty());
+    }
+
+    @Test
+    public void getMessageInternalSizeShouldReturnSizeWhenAvailable() throws MessagingException {
+        long size = 42L;
+
+        Mail mail = mock(Mail.class);
+        when(mail.getMessageSize()).thenReturn(size);
+
+        assertThat(NotifyMailetsMessage.getMessageSizeEstimation(mail))
+            .isEqualTo(Optional.of(size));
+    }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org