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