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 ro...@apache.org on 2016/08/26 07:41:49 UTC
[1/3] james-project git commit: MAILET-100 migrate
AddSubjectPrefixTest to modern style
Repository: james-project
Updated Branches:
refs/heads/master f91fc653f -> 240bed003
MAILET-100 migrate AddSubjectPrefixTest to modern style
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/0f87b435
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/0f87b435
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/0f87b435
Branch: refs/heads/master
Commit: 0f87b4358b05cc5239269f176888bcd77fb45991
Parents: f91fc65
Author: Matthieu Baechler <ma...@linagora.com>
Authored: Wed Aug 24 17:33:19 2016 +0200
Committer: Matthieu Baechler <ma...@linagora.com>
Committed: Thu Aug 25 17:13:54 2016 +0200
----------------------------------------------------------------------
.../transport/mailets/AddSubjectPrefixTest.java | 129 ++++++++-----------
1 file changed, 52 insertions(+), 77 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/0f87b435/mailet/standard/src/test/java/org/apache/james/transport/mailets/AddSubjectPrefixTest.java
----------------------------------------------------------------------
diff --git a/mailet/standard/src/test/java/org/apache/james/transport/mailets/AddSubjectPrefixTest.java b/mailet/standard/src/test/java/org/apache/james/transport/mailets/AddSubjectPrefixTest.java
index d7425df..b2c102b 100644
--- a/mailet/standard/src/test/java/org/apache/james/transport/mailets/AddSubjectPrefixTest.java
+++ b/mailet/standard/src/test/java/org/apache/james/transport/mailets/AddSubjectPrefixTest.java
@@ -20,105 +20,80 @@
package org.apache.james.transport.mailets;
-import junit.framework.TestCase;
-
-import org.apache.james.transport.mailets.AddSubjectPrefix;
-import org.apache.mailet.base.test.FakeMailContext;
-import org.apache.mailet.base.test.FakeMailetConfig;
-import org.apache.mailet.base.test.MailUtil;
-import org.apache.mailet.Mail;
-import org.apache.mailet.Mailet;
+import static org.assertj.core.api.Assertions.assertThat;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
-import javax.mail.internet.ParseException;
-import java.io.UnsupportedEncodingException;
-
-public class AddSubjectPrefixTest extends TestCase {
- private MimeMessage mockedMimeMessage;
+import org.apache.mailet.Mailet;
+import org.apache.mailet.base.test.FakeMail;
+import org.apache.mailet.base.test.FakeMailContext;
+import org.apache.mailet.base.test.FakeMailetConfig;
+import org.apache.mailet.base.test.MailUtil;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
- private Mail mockedMail;
+public class AddSubjectPrefixTest {
+ @Rule public ExpectedException expectedException = ExpectedException.none();
+
private Mailet mailet;
+ private FakeMailetConfig mailetConfig;
- private final String SUBJECT_PREFIX = "JUNIT";
-
- private String subject = null;
-
- public AddSubjectPrefixTest(String arg0)
- throws UnsupportedEncodingException {
- super(arg0);
- }
-
- private void setSubject(String subject) {
- this.subject = subject;
- }
-
- private void setupMockedMimeMessage() throws MessagingException {
- mockedMimeMessage = MailUtil.createMimeMessageWithSubject(subject);
- }
-
- private void setupMockedMail(MimeMessage m) throws ParseException {
- mockedMail = MailUtil.createMockMail2Recipients(m);
- }
-
- private void setupMailet() throws MessagingException {
- setupMockedMimeMessage();
+ @Before
+ public void setup() {
mailet = new AddSubjectPrefix();
- FakeMailetConfig mci = new FakeMailetConfig("Test", new FakeMailContext());
- mci.setProperty("subjectPrefix", SUBJECT_PREFIX);
-
- mailet.init(mci);
+ mailetConfig = new FakeMailetConfig("Test", new FakeMailContext());
}
-
- private void setupInvalidMailet() throws MessagingException {
- setupMockedMimeMessage();
- mailet = new AddSubjectPrefix();
- FakeMailetConfig mci = new FakeMailetConfig("Test", new FakeMailContext());
- mci.setProperty("subjectPrefix", "");
-
- mailet.init(mci);
+
+ @Test
+ public void shouldAddPrefixToSubject() throws MessagingException {
+ mailetConfig.setProperty("subjectPrefix", "JUNIT");
+ mailet.init(mailetConfig);
+
+ MimeMessage mockedMimeMessage = MailUtil.createMimeMessageWithSubject("test");
+ FakeMail mail = MailUtil.createMockMail2Recipients(mockedMimeMessage);
+
+ mailet.service(mail);
+
+ assertThat(mail.getMessage().getSubject()).isEqualTo("JUNIT test");
}
- // test if prefix was added
- public void testSubjectPrefixWasAdded() throws MessagingException {
- setSubject("test");
- setupMockedMimeMessage();
- setupMockedMail(mockedMimeMessage);
- setupMailet();
+ @Test
+ public void shouldDefinePrefixAsSubjectWhenNoSubject() throws MessagingException {
+ mailetConfig.setProperty("subjectPrefix", "JUNIT");
+ mailet.init(mailetConfig);
- mailet.service(mockedMail);
+ String noSubject = null;
+ MimeMessage mockedMimeMessage = MailUtil.createMimeMessageWithSubject(noSubject);
+ FakeMail mail = MailUtil.createMockMail2Recipients(mockedMimeMessage);
- assertEquals(SUBJECT_PREFIX + " " + subject, mockedMail.getMessage().getSubject());
+ mailet.service(mail);
+ assertThat(mail.getMessage().getSubject()).isEqualTo("JUNIT");
}
- // test if prefix was added to message without subject
- public void testSubjectPrefixWasAddedWithoutSubject()
- throws MessagingException {
- setupMockedMimeMessage();
- setupMockedMail(mockedMimeMessage);
- setupMailet();
+ @Test
+ public void shouldDefinePrefixAsSubjectWhenEmptySubject() throws MessagingException {
+ mailetConfig.setProperty("subjectPrefix", "JUNIT");
+ mailet.init(mailetConfig);
- mailet.service(mockedMail);
+ MimeMessage mockedMimeMessage = MailUtil.createMimeMessageWithSubject("");
+ FakeMail mail = MailUtil.createMockMail2Recipients(mockedMimeMessage);
- assertEquals(SUBJECT_PREFIX, mockedMail.getMessage().getSubject());
+ mailet.service(mail);
+ assertThat(mail.getMessage().getSubject()).isEqualTo("JUNIT");
}
+
+ @Test
+ public void shouldThrowWhenEmptyPrefix() throws MessagingException {
+ mailetConfig.setProperty("subjectPrefix", "");
- // test if exception was thrown cause missing configure value
- public void testThrowException() throws MessagingException {
- boolean exceptionThrown = false;
- setupMockedMimeMessage();
- setupMockedMail(mockedMimeMessage);
-
- try {
- setupInvalidMailet();
- } catch (MessagingException m) {
- exceptionThrown = true;
- }
- assertTrue(exceptionThrown);
+ expectedException.expect(MessagingException.class);
+ mailet.init(mailetConfig);
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[3/3] james-project git commit: MAILET-100 fix wrong header encoding
test case
Posted by ro...@apache.org.
MAILET-100 fix wrong header encoding test case
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/240bed00
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/240bed00
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/240bed00
Branch: refs/heads/master
Commit: 240bed003bf2b4acef685b5c88178711012b641b
Parents: 34dd34f
Author: Matthieu Baechler <ma...@linagora.com>
Authored: Thu Aug 25 12:10:24 2016 +0200
Committer: Matthieu Baechler <ma...@linagora.com>
Committed: Thu Aug 25 17:13:55 2016 +0200
----------------------------------------------------------------------
.../transport/mailets/AddSubjectPrefix.java | 69 +-------------------
.../transport/mailets/AddSubjectPrefixTest.java | 2 -
2 files changed, 1 insertion(+), 70 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/240bed00/mailet/standard/src/main/java/org/apache/james/transport/mailets/AddSubjectPrefix.java
----------------------------------------------------------------------
diff --git a/mailet/standard/src/main/java/org/apache/james/transport/mailets/AddSubjectPrefix.java b/mailet/standard/src/main/java/org/apache/james/transport/mailets/AddSubjectPrefix.java
index 1ef8579..d155801 100644
--- a/mailet/standard/src/main/java/org/apache/james/transport/mailets/AddSubjectPrefix.java
+++ b/mailet/standard/src/main/java/org/apache/james/transport/mailets/AddSubjectPrefix.java
@@ -22,7 +22,6 @@ package org.apache.james.transport.mailets;
import org.apache.mailet.Mail;
import org.apache.mailet.base.GenericMailet;
-import org.apache.mailet.base.RFC2822Headers;
import com.google.common.base.Charsets;
import com.google.common.base.Joiner;
@@ -57,40 +56,8 @@ public class AddSubjectPrefix extends GenericMailet {
@Override
public void service(Mail mail) throws MessagingException {
MimeMessage m = mail.getMessage();
-
String newSubject = prefixSubject(m);
-
- /*
- * Get sure to use the right encoding when add the subjectPrefix..
- * otherwise we get problems with some special chars
- */
- String rawSubject = getFirstSubjectHeader(m);
- String mimeCharset = determineMailHeaderEncodingCharset(rawSubject);
- if (mimeCharset == null) { // most likely ASCII
- // it uses the system charset or the value of the
- // mail.mime.charset property if set
- m.setSubject(newSubject, Charsets.UTF_8.displayName());
- } else { // original charset determined
- String javaCharset = javax.mail.internet.MimeUtility
- .javaCharset(mimeCharset);
- try {
- m.setSubject(newSubject, javaCharset);
- } catch (MessagingException e) {
- // known, but unsupported encoding
- // this should be logged, the admin may setup a more i18n
- // capable JRE, but the log API cannot be accessed from here
- // if (charset != null) log(charset +
- // " charset unsupported by the JRE, email subject may be
- // damaged");
- m.setSubject(newSubject); // recover
- }
- m.saveChanges();
- }
- }
-
- private String getFirstSubjectHeader(MimeMessage m) throws MessagingException {
- String delimiter = null;
- return m.getHeader(RFC2822Headers.SUBJECT, delimiter);
+ m.setSubject(newSubject, Charsets.UTF_8.displayName());
}
private String prefixSubject(MimeMessage m) throws MessagingException {
@@ -107,39 +74,5 @@ public class AddSubjectPrefix extends GenericMailet {
return "AddSubjectPrefix Mailet";
}
- /**
- * It attempts to determine the charset used to encode an "unstructured" RFC
- * 822 header (like Subject). The encoding is specified in RFC 2047. If it
- * cannot determine or the the text is not encoded then it returns null.
- * <p/>
- * Here is an example raw text: Subject:
- * =?iso-8859-2?Q?leg=FAjabb_pr=F3ba_l=F5elemmel?=
- * <p/>
- * TODO: Should we include this in a util class ?
- *
- * @param rawText the raw (not decoded) value of the header. Null means that the
- * header was not present (in this case it always return null).
- * @return the MIME charset name or null if no encoding applied
- */
- static private String determineMailHeaderEncodingCharset(String rawText) {
- if (rawText == null)
- return null;
- int iEncodingPrefix = rawText.indexOf("=?");
- if (iEncodingPrefix == -1)
- return null;
- int iCharsetBegin = iEncodingPrefix + 2;
- int iSecondQuestionMark = rawText.indexOf('?', iCharsetBegin);
- if (iSecondQuestionMark == -1)
- return null;
- // safety checks
- if (iSecondQuestionMark == iCharsetBegin)
- return null; // empty charset? impossible
- int iThirdQuestionMark = rawText.indexOf('?', iSecondQuestionMark + 1);
- if (iThirdQuestionMark == -1)
- return null; // there must be one after encoding
- if (-1 == rawText.indexOf("?=", iThirdQuestionMark + 1))
- return null; // closing tag
- return rawText.substring(iCharsetBegin, iSecondQuestionMark);
- }
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/240bed00/mailet/standard/src/test/java/org/apache/james/transport/mailets/AddSubjectPrefixTest.java
----------------------------------------------------------------------
diff --git a/mailet/standard/src/test/java/org/apache/james/transport/mailets/AddSubjectPrefixTest.java b/mailet/standard/src/test/java/org/apache/james/transport/mailets/AddSubjectPrefixTest.java
index d48fa95..8b80803 100644
--- a/mailet/standard/src/test/java/org/apache/james/transport/mailets/AddSubjectPrefixTest.java
+++ b/mailet/standard/src/test/java/org/apache/james/transport/mailets/AddSubjectPrefixTest.java
@@ -31,7 +31,6 @@ import org.apache.mailet.base.test.FakeMailContext;
import org.apache.mailet.base.test.FakeMailetConfig;
import org.apache.mailet.base.test.MailUtil;
import org.junit.Before;
-import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
@@ -63,7 +62,6 @@ public class AddSubjectPrefixTest {
}
- @Ignore
@Test
public void shouldAddPrefixToEncodedSubject() throws MessagingException {
mailetConfig.setProperty("subjectPrefix", "\u0420\u0443\u0441\u0441\u043a\u0438\u0439");
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[2/3] james-project git commit: MAILET-100 covers AddSubjectPrefix
mailet with unit tests
Posted by ro...@apache.org.
MAILET-100 covers AddSubjectPrefix mailet with unit tests
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/34dd34f7
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/34dd34f7
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/34dd34f7
Branch: refs/heads/master
Commit: 34dd34f728d05dc399b69dfccd2d67085ce23799
Parents: 0f87b43
Author: Matthieu Baechler <ma...@linagora.com>
Authored: Thu Aug 25 12:06:32 2016 +0200
Committer: Matthieu Baechler <ma...@linagora.com>
Committed: Thu Aug 25 17:13:55 2016 +0200
----------------------------------------------------------------------
.../mailet/base/test/FakeMimeMessage.java | 21 -------
.../transport/mailets/AddSubjectPrefix.java | 60 ++++++++++----------
.../transport/mailets/AddSubjectPrefixTest.java | 19 +++++++
3 files changed, 49 insertions(+), 51 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/34dd34f7/mailet/base/src/test/java/org/apache/mailet/base/test/FakeMimeMessage.java
----------------------------------------------------------------------
diff --git a/mailet/base/src/test/java/org/apache/mailet/base/test/FakeMimeMessage.java b/mailet/base/src/test/java/org/apache/mailet/base/test/FakeMimeMessage.java
index 21611bd..df22a1c 100644
--- a/mailet/base/src/test/java/org/apache/mailet/base/test/FakeMimeMessage.java
+++ b/mailet/base/src/test/java/org/apache/mailet/base/test/FakeMimeMessage.java
@@ -39,7 +39,6 @@ public class FakeMimeMessage extends MimeMessage {
private final List<Serializable> m_ccRecepients = new ArrayList<Serializable>();
private final List<Serializable> m_bccRecepients = new ArrayList<Serializable>();
private final List<Serializable> m_replyToAddresses = new ArrayList<Serializable>();
- private String m_subject;
private int m_iMessageNumber;
private boolean m_bIsExpunged;
private Object m_content;
@@ -139,26 +138,6 @@ public class FakeMimeMessage extends MimeMessage {
m_replyToAddresses.addAll(Arrays.asList(addresses));
}
- public String getSubject() throws MessagingException {
- return m_subject;
- }
-
- public void setSubject(String subject) throws MessagingException {
- m_subject = subject;
- }
-
- public void setSubject(String subject, String charset) throws MessagingException {
- if (subject == null) {
- m_subject = null;
- return;
- }
- try {
- m_subject = new String(subject.getBytes(charset));
- } catch (UnsupportedEncodingException e) {
- throw new MessagingException("setting subject failed", e);
- }
- }
-
public Date getSentDate() throws MessagingException {
return m_sentDate;
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/34dd34f7/mailet/standard/src/main/java/org/apache/james/transport/mailets/AddSubjectPrefix.java
----------------------------------------------------------------------
diff --git a/mailet/standard/src/main/java/org/apache/james/transport/mailets/AddSubjectPrefix.java b/mailet/standard/src/main/java/org/apache/james/transport/mailets/AddSubjectPrefix.java
index bb8a229..1ef8579 100644
--- a/mailet/standard/src/main/java/org/apache/james/transport/mailets/AddSubjectPrefix.java
+++ b/mailet/standard/src/main/java/org/apache/james/transport/mailets/AddSubjectPrefix.java
@@ -24,6 +24,10 @@ import org.apache.mailet.Mail;
import org.apache.mailet.base.GenericMailet;
import org.apache.mailet.base.RFC2822Headers;
+import com.google.common.base.Charsets;
+import com.google.common.base.Joiner;
+import com.google.common.base.Strings;
+
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
@@ -39,52 +43,33 @@ import javax.mail.internet.MimeMessage;
*/
public class AddSubjectPrefix extends GenericMailet {
- // prefix to add
- private String subjectPrefix = null;
+ private String subjectPrefix;
- /**
- * Initialize the mailet.
- */
+ @Override
public void init() throws MessagingException {
subjectPrefix = getInitParameter("subjectPrefix");
- if (subjectPrefix == null || subjectPrefix.equals("")) {
- throw new MessagingException(
- "Please configure a valid subjectPrefix");
+ if (Strings.isNullOrEmpty(subjectPrefix)) {
+ throw new MessagingException("Please configure a valid subjectPrefix");
}
}
- /**
- * Takes the message and adds a prefix to the subject
- *
- * @param mail the mail being processed
- * @throws MessagingException if an error arises during message processing
- */
+ @Override
public void service(Mail mail) throws MessagingException {
- String newSubject;
MimeMessage m = mail.getMessage();
-
- String subject = m.getSubject();
-
- if (subject != null) {
- // m.setSubject(subjectPrefix + " " + subject);
- newSubject = subjectPrefix + " " + m.getSubject();
-
- } else {
- newSubject = subjectPrefix;
- }
-
+
+ String newSubject = prefixSubject(m);
+
/*
* Get sure to use the right encoding when add the subjectPrefix..
* otherwise we get problems with some special chars
*/
- String rawSubject = m.getHeader(RFC2822Headers.SUBJECT, null);
+ String rawSubject = getFirstSubjectHeader(m);
String mimeCharset = determineMailHeaderEncodingCharset(rawSubject);
if (mimeCharset == null) { // most likely ASCII
// it uses the system charset or the value of the
// mail.mime.charset property if set
- m.setSubject(newSubject);
- return;
+ m.setSubject(newSubject, Charsets.UTF_8.displayName());
} else { // original charset determined
String javaCharset = javax.mail.internet.MimeUtility
.javaCharset(mimeCharset);
@@ -99,8 +84,23 @@ public class AddSubjectPrefix extends GenericMailet {
// damaged");
m.setSubject(newSubject); // recover
}
+ m.saveChanges();
+ }
+ }
+
+ private String getFirstSubjectHeader(MimeMessage m) throws MessagingException {
+ String delimiter = null;
+ return m.getHeader(RFC2822Headers.SUBJECT, delimiter);
+ }
+
+ private String prefixSubject(MimeMessage m) throws MessagingException {
+ String subject = m.getSubject();
+
+ if (subject != null) {
+ return Joiner.on(' ').join(subjectPrefix, subject);
+ } else {
+ return subjectPrefix;
}
- m.saveChanges();
}
public String getMailetInfo() {
http://git-wip-us.apache.org/repos/asf/james-project/blob/34dd34f7/mailet/standard/src/test/java/org/apache/james/transport/mailets/AddSubjectPrefixTest.java
----------------------------------------------------------------------
diff --git a/mailet/standard/src/test/java/org/apache/james/transport/mailets/AddSubjectPrefixTest.java b/mailet/standard/src/test/java/org/apache/james/transport/mailets/AddSubjectPrefixTest.java
index b2c102b..d48fa95 100644
--- a/mailet/standard/src/test/java/org/apache/james/transport/mailets/AddSubjectPrefixTest.java
+++ b/mailet/standard/src/test/java/org/apache/james/transport/mailets/AddSubjectPrefixTest.java
@@ -31,6 +31,7 @@ import org.apache.mailet.base.test.FakeMailContext;
import org.apache.mailet.base.test.FakeMailetConfig;
import org.apache.mailet.base.test.MailUtil;
import org.junit.Before;
+import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
@@ -61,6 +62,24 @@ public class AddSubjectPrefixTest {
assertThat(mail.getMessage().getSubject()).isEqualTo("JUNIT test");
}
+
+ @Ignore
+ @Test
+ public void shouldAddPrefixToEncodedSubject() throws MessagingException {
+ mailetConfig.setProperty("subjectPrefix", "\u0420\u0443\u0441\u0441\u043a\u0438\u0439");
+ mailet.init(mailetConfig);
+
+ String subject =
+ "=?iso8859-15?Q?Beno=EEt_TELLIER_vous_a_d=E9pos=E9_des_fichiers?=";
+ MimeMessage mockedMimeMessage = MailUtil.createMimeMessageWithSubject(subject);
+ FakeMail mail = MailUtil.createMockMail2Recipients(mockedMimeMessage);
+
+ mailet.service(mail);
+
+ assertThat(mail.getMessage().getSubject()).startsWith("\u0420\u0443\u0441\u0441\u043a\u0438\u0439").endsWith("Beno�t TELLIER vous a d�pos� des fichiers");
+ }
+
+
@Test
public void shouldDefinePrefixAsSubjectWhenNoSubject() throws MessagingException {
mailetConfig.setProperty("subjectPrefix", "JUNIT");
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org