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/01/16 02:16:34 UTC
[08/11] james-project git commit: JAMES-2285 Provide a
MailQueueContract run on top of JMS
JAMES-2285 Provide a MailQueueContract run on top of JMS
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/9c13b922
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/9c13b922
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/9c13b922
Branch: refs/heads/master
Commit: 9c13b922f6060f6652a5cd4019bf6d72df9d4bf9
Parents: 04f3c5b
Author: benwa <bt...@linagora.com>
Authored: Thu Jan 11 17:03:32 2018 +0700
Committer: benwa <bt...@linagora.com>
Committed: Tue Jan 16 09:04:28 2018 +0700
----------------------------------------------------------------------
.../james/core/builder/MimeMessageBuilder.java | 20 --
.../apache/mailet/base/MailAddressFixture.java | 5 +
.../mailet/base/test/MimeMessageUtil.java | 51 ++++
.../transport/mailets/ICALToHeadersTest.java | 17 +-
.../mailets/ICALToJsonAttributeTest.java | 3 +-
.../transport/mailets/ContactExtractorTest.java | 9 +-
.../mailets/UseHeaderRecipientsTest.java | 5 +-
.../james/transport/matchers/HasHeaderTest.java | 6 +-
.../mailets/ICSAttachmentWorkflowTest.java | 5 +-
.../impl/JamesMailetContextTest.java | 13 +-
.../james/transport/mailets/BounceTest.java | 4 +-
.../mailets/delivery/MailDispatcherTest.java | 19 +-
.../mailets/delivery/SieveIntegrationTest.java | 3 +-
.../integration/SetMessagesMethodTest.java | 3 +-
.../TextCalendarBodyToAttachmentTest.java | 14 +-
server/queue/queue-api/pom.xml | 11 +-
.../james/queue/api/MailQueueContract.java | 289 +++++++++++++++++++
.../java/org/apache/james/queue/api/Mails.java | 51 ++++
server/queue/queue-jms/pom.xml | 22 ++
.../james/queue/jms/JMSMailQueueTest.java | 104 +++++++
20 files changed, 587 insertions(+), 67 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/9c13b922/core/src/main/java/org/apache/james/core/builder/MimeMessageBuilder.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/james/core/builder/MimeMessageBuilder.java b/core/src/main/java/org/apache/james/core/builder/MimeMessageBuilder.java
index 4c9cc79..1ca7380 100644
--- a/core/src/main/java/org/apache/james/core/builder/MimeMessageBuilder.java
+++ b/core/src/main/java/org/apache/james/core/builder/MimeMessageBuilder.java
@@ -20,9 +20,7 @@
package org.apache.james.core.builder;
import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
import java.io.IOException;
-import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.Collection;
@@ -52,12 +50,6 @@ import com.google.common.collect.ImmutableList;
public class MimeMessageBuilder {
- public static String asString(MimeMessage mimeMessage) throws Exception {
- ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
- mimeMessage.writeTo(byteArrayOutputStream);
- return new String(byteArrayOutputStream.toByteArray(), StandardCharsets.UTF_8);
- }
-
public static class Header {
private final String name;
private final String value;
@@ -194,18 +186,6 @@ public class MimeMessageBuilder {
}
}
- public static MimeMessage defaultMimeMessage() {
- return new MimeMessage(Session.getDefaultInstance(new Properties()));
- }
-
- public static MimeMessage mimeMessageFromStream(InputStream inputStream) throws MessagingException {
- return new MimeMessage(Session.getDefaultInstance(new Properties()), inputStream);
- }
-
- public static MimeMessage mimeMessageFromBytes(byte[] bytes) throws MessagingException {
- return mimeMessageFromStream(new ByteArrayInputStream(bytes));
- }
-
public static MimeMessageBuilder mimeMessageBuilder() {
return new MimeMessageBuilder();
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/9c13b922/mailet/base/src/test/java/org/apache/mailet/base/MailAddressFixture.java
----------------------------------------------------------------------
diff --git a/mailet/base/src/test/java/org/apache/mailet/base/MailAddressFixture.java b/mailet/base/src/test/java/org/apache/mailet/base/MailAddressFixture.java
index b1a4883..fed98ba 100644
--- a/mailet/base/src/test/java/org/apache/mailet/base/MailAddressFixture.java
+++ b/mailet/base/src/test/java/org/apache/mailet/base/MailAddressFixture.java
@@ -30,6 +30,11 @@ public class MailAddressFixture {
public static final String JAMES_APACHE_ORG = "james.apache.org";
public static final String JAMES2_APACHE_ORG = "james2.apache.org";
+ public static final MailAddress SENDER = createMailAddress("sender@" + JAMES_LOCAL);
+ public static final MailAddress RECIPIENT1 = createMailAddress("recipient1@" + JAMES_LOCAL);
+ public static final MailAddress RECIPIENT2 = createMailAddress("recipient2@" + JAMES_LOCAL);
+ public static final MailAddress RECIPIENT3 = createMailAddress("recipient3@" + JAMES_LOCAL);
+
public static final MailAddress ANY_AT_LOCAL = createMailAddress("any@" + JAMES_LOCAL);
public static final MailAddress OTHER_AT_LOCAL = createMailAddress("other@" + JAMES_LOCAL);
public static final MailAddress ANY_AT_JAMES = createMailAddress("any@" + JAMES_APACHE_ORG);
http://git-wip-us.apache.org/repos/asf/james-project/blob/9c13b922/mailet/base/src/test/java/org/apache/mailet/base/test/MimeMessageUtil.java
----------------------------------------------------------------------
diff --git a/mailet/base/src/test/java/org/apache/mailet/base/test/MimeMessageUtil.java b/mailet/base/src/test/java/org/apache/mailet/base/test/MimeMessageUtil.java
new file mode 100644
index 0000000..e857dea
--- /dev/null
+++ b/mailet/base/src/test/java/org/apache/mailet/base/test/MimeMessageUtil.java
@@ -0,0 +1,51 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+package org.apache.mailet.base.test;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+import java.nio.charset.StandardCharsets;
+import java.util.Properties;
+
+import javax.mail.MessagingException;
+import javax.mail.Session;
+import javax.mail.internet.MimeMessage;
+
+public class MimeMessageUtil {
+
+ public static String asString(MimeMessage mimeMessage) throws Exception {
+ ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
+ mimeMessage.writeTo(byteArrayOutputStream);
+ return new String(byteArrayOutputStream.toByteArray(), StandardCharsets.UTF_8);
+ }
+
+ public static MimeMessage defaultMimeMessage() {
+ return new MimeMessage(Session.getDefaultInstance(new Properties()));
+ }
+
+ public static MimeMessage mimeMessageFromStream(InputStream inputStream) throws MessagingException {
+ return new MimeMessage(Session.getDefaultInstance(new Properties()), inputStream);
+ }
+
+ public static MimeMessage mimeMessageFromBytes(byte[] bytes) throws MessagingException {
+ return mimeMessageFromStream(new ByteArrayInputStream(bytes));
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/9c13b922/mailet/icalendar/src/test/java/org/apache/james/transport/mailets/ICALToHeadersTest.java
----------------------------------------------------------------------
diff --git a/mailet/icalendar/src/test/java/org/apache/james/transport/mailets/ICALToHeadersTest.java b/mailet/icalendar/src/test/java/org/apache/james/transport/mailets/ICALToHeadersTest.java
index fad4f66..f9a928b 100644
--- a/mailet/icalendar/src/test/java/org/apache/james/transport/mailets/ICALToHeadersTest.java
+++ b/mailet/icalendar/src/test/java/org/apache/james/transport/mailets/ICALToHeadersTest.java
@@ -23,16 +23,17 @@ import static org.assertj.core.api.Assertions.assertThat;
import javax.mail.MessagingException;
-import org.apache.james.core.builder.MimeMessageBuilder;
import org.apache.mailet.Mail;
import org.apache.mailet.base.test.FakeMail;
import org.apache.mailet.base.test.FakeMailetConfig;
+import org.apache.mailet.base.test.MimeMessageUtil;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import com.google.common.collect.ImmutableMap;
+
import net.fortuna.ical4j.data.CalendarBuilder;
import net.fortuna.ical4j.model.Calendar;
@@ -87,7 +88,7 @@ public class ICALToHeadersTest {
public void serviceShouldNotModifyMailsWithoutIcalAttribute() throws Exception {
testee.init(FakeMailetConfig.builder().build());
Mail mail = FakeMail.builder()
- .mimeMessage(MimeMessageBuilder.defaultMimeMessage())
+ .mimeMessage(MimeMessageUtil.defaultMimeMessage())
.build();
testee.service(mail);
@@ -99,7 +100,7 @@ public class ICALToHeadersTest {
public void serviceShouldNotFailOnMailsWithWrongAttributeType() throws Exception {
testee.init(FakeMailetConfig.builder().build());
Mail mail = FakeMail.builder()
- .mimeMessage(MimeMessageBuilder.defaultMimeMessage())
+ .mimeMessage(MimeMessageUtil.defaultMimeMessage())
.attribute(ICALToHeader.ATTRIBUTE_DEFAULT_NAME, "This is the wrong type")
.build();
@@ -116,7 +117,7 @@ public class ICALToHeadersTest {
testee.init(FakeMailetConfig.builder().build());
Mail mail = FakeMail.builder()
- .mimeMessage(MimeMessageBuilder.defaultMimeMessage())
+ .mimeMessage(MimeMessageUtil.defaultMimeMessage())
.attribute(ICALToHeader.ATTRIBUTE_DEFAULT_NAME, wrongParametrizedMap)
.build();
@@ -134,7 +135,7 @@ public class ICALToHeadersTest {
testee.init(FakeMailetConfig.builder().build());
Mail mail = FakeMail.builder()
- .mimeMessage(MimeMessageBuilder.defaultMimeMessage())
+ .mimeMessage(MimeMessageUtil.defaultMimeMessage())
.attribute(ICALToHeader.ATTRIBUTE_DEFAULT_NAME, icals)
.build();
@@ -157,7 +158,7 @@ public class ICALToHeadersTest {
testee.init(FakeMailetConfig.builder().build());
Mail mail = FakeMail.builder()
- .mimeMessage(MimeMessageBuilder.defaultMimeMessage())
+ .mimeMessage(MimeMessageUtil.defaultMimeMessage())
.attribute(ICALToHeader.ATTRIBUTE_DEFAULT_NAME, icals)
.build();
@@ -182,7 +183,7 @@ public class ICALToHeadersTest {
testee.init(FakeMailetConfig.builder().build());
Mail mail = FakeMail.builder()
- .mimeMessage(MimeMessageBuilder.defaultMimeMessage())
+ .mimeMessage(MimeMessageUtil.defaultMimeMessage())
.attribute(ICALToHeader.ATTRIBUTE_DEFAULT_NAME, icals)
.build();
@@ -198,7 +199,7 @@ public class ICALToHeadersTest {
testee.init(FakeMailetConfig.builder().build());
Mail mail = FakeMail.builder()
- .mimeMessage(MimeMessageBuilder.defaultMimeMessage())
+ .mimeMessage(MimeMessageUtil.defaultMimeMessage())
.attribute(ICALToHeader.ATTRIBUTE_DEFAULT_NAME, icals)
.build();
http://git-wip-us.apache.org/repos/asf/james-project/blob/9c13b922/mailet/icalendar/src/test/java/org/apache/james/transport/mailets/ICALToJsonAttributeTest.java
----------------------------------------------------------------------
diff --git a/mailet/icalendar/src/test/java/org/apache/james/transport/mailets/ICALToJsonAttributeTest.java b/mailet/icalendar/src/test/java/org/apache/james/transport/mailets/ICALToJsonAttributeTest.java
index 96bf1ab..dd84581 100644
--- a/mailet/icalendar/src/test/java/org/apache/james/transport/mailets/ICALToJsonAttributeTest.java
+++ b/mailet/icalendar/src/test/java/org/apache/james/transport/mailets/ICALToJsonAttributeTest.java
@@ -38,6 +38,7 @@ import org.apache.mailet.Mail;
import org.apache.mailet.base.MailAddressFixture;
import org.apache.mailet.base.test.FakeMail;
import org.apache.mailet.base.test.FakeMailetConfig;
+import org.apache.mailet.base.test.MimeMessageUtil;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
@@ -477,7 +478,7 @@ public class ICALToJsonAttributeTest {
Mail mail = FakeMail.builder()
.sender(SENDER)
.recipient(recipient)
- .mimeMessage(MimeMessageBuilder.defaultMimeMessage())
+ .mimeMessage(MimeMessageUtil.defaultMimeMessage())
.attribute(ICALToJsonAttribute.DEFAULT_SOURCE_ATTRIBUTE_NAME, icals)
.attribute(ICALToJsonAttribute.DEFAULT_RAW_SOURCE_ATTRIBUTE_NAME, rawIcals)
.build();
http://git-wip-us.apache.org/repos/asf/james-project/blob/9c13b922/mailet/standard/src/test/java/org/apache/james/transport/mailets/ContactExtractorTest.java
----------------------------------------------------------------------
diff --git a/mailet/standard/src/test/java/org/apache/james/transport/mailets/ContactExtractorTest.java b/mailet/standard/src/test/java/org/apache/james/transport/mailets/ContactExtractorTest.java
index dbf02d8..6ac877b 100644
--- a/mailet/standard/src/test/java/org/apache/james/transport/mailets/ContactExtractorTest.java
+++ b/mailet/standard/src/test/java/org/apache/james/transport/mailets/ContactExtractorTest.java
@@ -34,6 +34,7 @@ import org.apache.mailet.MailetException;
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.MimeMessageUtil;
import org.junit.Before;
import org.junit.Test;
@@ -85,7 +86,7 @@ public class ContactExtractorTest {
@Test
public void serviceShouldNotThrowWhenJsonProcessingFails() throws Exception {
- FakeMail mail = FakeMail.builder().mimeMessage(MimeMessageBuilder.defaultMimeMessage())
+ FakeMail mail = FakeMail.builder().mimeMessage(MimeMessageUtil.defaultMimeMessage())
.sender(SENDER)
.recipient(TO)
.build();
@@ -164,7 +165,7 @@ public class ContactExtractorTest {
+ "Subject: extract this recipient please\r\n"
+ "\r\n"
+ "Please!";
- MimeMessage message = MimeMessageBuilder.mimeMessageFromBytes(rawMessage.getBytes());
+ MimeMessage message = MimeMessageUtil.mimeMessageFromBytes(rawMessage.getBytes());
FakeMail mail = FakeMail.builder().mimeMessage(message)
.sender(SENDER)
.recipient("recipient@example.com")
@@ -184,7 +185,7 @@ public class ContactExtractorTest {
+ "Subject: extract this recipient please\r\n"
+ "\r\n"
+ "Please!";
- MimeMessage message = MimeMessageBuilder.mimeMessageFromBytes(rawMessage.getBytes());
+ MimeMessage message = MimeMessageUtil.mimeMessageFromBytes(rawMessage.getBytes());
FakeMail mail = FakeMail.builder().mimeMessage(message)
.sender(SENDER)
.recipient("recipient@example.com")
@@ -204,7 +205,7 @@ public class ContactExtractorTest {
+ "Subject: extract this recipient please\r\n"
+ "\r\n"
+ "Please!";
- MimeMessage message = MimeMessageBuilder.mimeMessageFromBytes(rawMessage.getBytes());
+ MimeMessage message = MimeMessageUtil.mimeMessageFromBytes(rawMessage.getBytes());
FakeMail mail = FakeMail.builder().mimeMessage(message)
.sender(SENDER)
.recipient("recipient@example.com")
http://git-wip-us.apache.org/repos/asf/james-project/blob/9c13b922/mailet/standard/src/test/java/org/apache/james/transport/mailets/UseHeaderRecipientsTest.java
----------------------------------------------------------------------
diff --git a/mailet/standard/src/test/java/org/apache/james/transport/mailets/UseHeaderRecipientsTest.java b/mailet/standard/src/test/java/org/apache/james/transport/mailets/UseHeaderRecipientsTest.java
index 2e2cb4a..daed490 100644
--- a/mailet/standard/src/test/java/org/apache/james/transport/mailets/UseHeaderRecipientsTest.java
+++ b/mailet/standard/src/test/java/org/apache/james/transport/mailets/UseHeaderRecipientsTest.java
@@ -28,6 +28,7 @@ import org.apache.mailet.base.MailAddressFixture;
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.MimeMessageUtil;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
@@ -93,7 +94,7 @@ public class UseHeaderRecipientsTest {
FakeMail fakeMail = FakeMail.builder()
.recipients(MailAddressFixture.ANY_AT_JAMES)
- .mimeMessage(MimeMessageBuilder.defaultMimeMessage())
+ .mimeMessage(MimeMessageUtil.defaultMimeMessage())
.build();
testee.service(fakeMail);
@@ -106,7 +107,7 @@ public class UseHeaderRecipientsTest {
public void serviceShouldGhostEmail() throws Exception {
FakeMail fakeMail = FakeMail.builder()
.recipients(MailAddressFixture.ANY_AT_JAMES)
- .mimeMessage(MimeMessageBuilder.defaultMimeMessage())
+ .mimeMessage(MimeMessageUtil.defaultMimeMessage())
.build();
testee.service(fakeMail);
http://git-wip-us.apache.org/repos/asf/james-project/blob/9c13b922/mailet/standard/src/test/java/org/apache/james/transport/matchers/HasHeaderTest.java
----------------------------------------------------------------------
diff --git a/mailet/standard/src/test/java/org/apache/james/transport/matchers/HasHeaderTest.java b/mailet/standard/src/test/java/org/apache/james/transport/matchers/HasHeaderTest.java
index a241675..d46daf8 100644
--- a/mailet/standard/src/test/java/org/apache/james/transport/matchers/HasHeaderTest.java
+++ b/mailet/standard/src/test/java/org/apache/james/transport/matchers/HasHeaderTest.java
@@ -28,12 +28,12 @@ import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.internet.MimeMessage;
-import org.apache.james.core.builder.MimeMessageBuilder;
import org.apache.mailet.Mail;
import org.apache.mailet.Matcher;
import org.apache.mailet.base.test.FakeMail;
import org.apache.mailet.base.test.FakeMatcherConfig;
import org.apache.mailet.base.test.MailUtil;
+import org.apache.mailet.base.test.MimeMessageUtil;
import org.junit.Before;
import org.junit.Test;
@@ -139,7 +139,7 @@ public class HasHeaderTest {
.build());
Mail mail = MailUtil.createMockMail2Recipients(
- MimeMessageBuilder.mimeMessageFromStream(
+ MimeMessageUtil.mimeMessageFromStream(
ClassLoader.getSystemResourceAsStream("mime/headerFolded.mime")));
assertThat(matcher.match(mail)).containsAll(mail.getRecipients());
@@ -153,7 +153,7 @@ public class HasHeaderTest {
.build());
Mail mail = MailUtil.createMockMail2Recipients(
- MimeMessageBuilder.mimeMessageFromStream(
+ MimeMessageUtil.mimeMessageFromStream(
ClassLoader.getSystemResourceAsStream("mime/gmail.mime")));
assertThat(matcher.match(mail)).containsAll(mail.getRecipients());
http://git-wip-us.apache.org/repos/asf/james-project/blob/9c13b922/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ICSAttachmentWorkflowTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ICSAttachmentWorkflowTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ICSAttachmentWorkflowTest.java
index e023c04..a7d0a5e 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ICSAttachmentWorkflowTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ICSAttachmentWorkflowTest.java
@@ -49,6 +49,7 @@ import org.apache.james.utils.DataProbeImpl;
import org.apache.james.utils.IMAPMessageReader;
import org.apache.james.utils.SMTPMessageSender;
import org.apache.mailet.base.test.FakeMail;
+import org.apache.mailet.base.test.MimeMessageUtil;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
@@ -524,7 +525,7 @@ public class ICSAttachmentWorkflowTest {
.setSubject("test")
.build();
- yahooInvitationMessage = MimeMessageBuilder.mimeMessageFromStream(ClassLoader.getSystemResourceAsStream("eml/yahooInvitation.eml"));
+ yahooInvitationMessage = MimeMessageUtil.mimeMessageFromStream(ClassLoader.getSystemResourceAsStream("eml/yahooInvitation.eml"));
messageWithThreeICSAttached = MimeMessageBuilder.mimeMessageBuilder()
.setMultipartWithBodyParts(
@@ -778,7 +779,7 @@ public class ICSAttachmentWorkflowTest {
@Test
public void mailShouldNotContainCalendarContentInTextBodyButAttachment() throws Exception {
- MimeMessage calendarMessage = MimeMessageBuilder.mimeMessageFromStream(ClassLoader.getSystemResourceAsStream("eml/calendar.eml"));
+ MimeMessage calendarMessage = MimeMessageUtil.mimeMessageFromStream(ClassLoader.getSystemResourceAsStream("eml/calendar.eml"));
messageSender.connect(LOCALHOST_IP, SMTP_PORT)
.sendMessage(FakeMail.builder()
http://git-wip-us.apache.org/repos/asf/james-project/blob/9c13b922/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 fc88507..a8c4391 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
@@ -42,6 +42,7 @@ import org.apache.james.queue.api.MailQueueFactory;
import org.apache.james.server.core.MailImpl;
import org.apache.james.user.memory.MemoryUsersRepository;
import org.apache.mailet.Mail;
+import org.apache.mailet.base.test.MimeMessageUtil;
import org.assertj.core.api.JUnitSoftAssertions;
import org.junit.Before;
import org.junit.Rule;
@@ -171,7 +172,7 @@ public class JamesMailetContextTest {
MailImpl mail = new MailImpl();
mail.setSender(mailAddress);
mail.setRecipients(ImmutableList.of(mailAddress));
- mail.setMessage(MimeMessageBuilder.defaultMimeMessage());
+ mail.setMessage(MimeMessageUtil.defaultMimeMessage());
testee.bounce(mail, "message");
}
@@ -180,7 +181,7 @@ public class JamesMailetContextTest {
MailImpl mail = new MailImpl();
mail.setSender(mailAddress);
mail.setRecipients(ImmutableList.of(mailAddress));
- mail.setMessage(MimeMessageBuilder.defaultMimeMessage());
+ mail.setMessage(MimeMessageUtil.defaultMimeMessage());
testee.bounce(mail, "message");
ArgumentCaptor<Mail> mailArgumentCaptor = ArgumentCaptor.forClass(Mail.class);
@@ -195,7 +196,7 @@ public class JamesMailetContextTest {
MailImpl mail = new MailImpl();
mail.setSender(mailAddress);
mail.setRecipients(ImmutableList.of(mailAddress));
- mail.setMessage(MimeMessageBuilder.defaultMimeMessage());
+ mail.setMessage(MimeMessageUtil.defaultMimeMessage());
testee.sendMail(mail);
ArgumentCaptor<Mail> mailArgumentCaptor = ArgumentCaptor.forClass(Mail.class);
@@ -210,7 +211,7 @@ public class JamesMailetContextTest {
MailImpl mail = new MailImpl();
mail.setSender(mailAddress);
mail.setRecipients(ImmutableList.of(mailAddress));
- mail.setMessage(MimeMessageBuilder.defaultMimeMessage());
+ mail.setMessage(MimeMessageUtil.defaultMimeMessage());
String other = "other";
testee.sendMail(mail, other);
@@ -226,7 +227,7 @@ public class JamesMailetContextTest {
MailImpl mail = new MailImpl();
mail.setSender(mailAddress);
mail.setRecipients(ImmutableList.of(mailAddress));
- mail.setMessage(MimeMessageBuilder.defaultMimeMessage());
+ mail.setMessage(MimeMessageUtil.defaultMimeMessage());
testee.sendMail(mail, 5, TimeUnit.MINUTES);
ArgumentCaptor<Mail> mailArgumentCaptor = ArgumentCaptor.forClass(Mail.class);
@@ -245,7 +246,7 @@ public class JamesMailetContextTest {
MailImpl mail = new MailImpl();
mail.setSender(mailAddress);
mail.setRecipients(ImmutableList.of(mailAddress));
- mail.setMessage(MimeMessageBuilder.defaultMimeMessage());
+ mail.setMessage(MimeMessageUtil.defaultMimeMessage());
String other = "other";
testee.sendMail(mail, other, 5, TimeUnit.MINUTES);
http://git-wip-us.apache.org/repos/asf/james-project/blob/9c13b922/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/BounceTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/BounceTest.java b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/BounceTest.java
index 8b42a9b..028b605 100644
--- a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/BounceTest.java
+++ b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/BounceTest.java
@@ -31,13 +31,13 @@ import javax.mail.Session;
import javax.mail.internet.MimeMessage;
import org.apache.james.core.MailAddress;
-import org.apache.james.core.builder.MimeMessageBuilder;
import org.apache.james.dnsservice.api.DNSService;
import org.apache.mailet.Mail;
import org.apache.mailet.base.MailAddressFixture;
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.MimeMessageUtil;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
@@ -114,7 +114,7 @@ public class BounceTest {
.name(MAILET_NAME)
.recipient(MailAddressFixture.ANY_AT_JAMES)
.build();
- MimeMessage mimeMessage = MimeMessageBuilder.defaultMimeMessage();
+ MimeMessage mimeMessage = MimeMessageUtil.defaultMimeMessage();
mimeMessage.setText("My content");
mail.setMessage(mimeMessage);
http://git-wip-us.apache.org/repos/asf/james-project/blob/9c13b922/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/MailDispatcherTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/MailDispatcherTest.java b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/MailDispatcherTest.java
index 6b5ce76..14cf918 100644
--- a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/MailDispatcherTest.java
+++ b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/MailDispatcherTest.java
@@ -41,6 +41,7 @@ import org.apache.mailet.base.MailAddressFixture;
import org.apache.mailet.base.RFC2822Headers;
import org.apache.mailet.base.test.FakeMail;
import org.apache.mailet.base.test.FakeMailContext;
+import org.apache.mailet.base.test.MimeMessageUtil;
import org.junit.Before;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
@@ -75,7 +76,7 @@ public class MailDispatcherTest {
.sender(MailAddressFixture.OTHER_AT_JAMES)
.recipients(MailAddressFixture.ANY_AT_JAMES, MailAddressFixture.ANY_AT_JAMES2)
.state("state")
- .mimeMessage(MimeMessageBuilder.defaultMimeMessage())
+ .mimeMessage(MimeMessageUtil.defaultMimeMessage())
.build();
testee.dispatch(mail);
@@ -95,7 +96,7 @@ public class MailDispatcherTest {
FakeMail mail = FakeMail.builder()
.recipients(MailAddressFixture.ANY_AT_JAMES, MailAddressFixture.ANY_AT_JAMES2)
.state("state")
- .mimeMessage(MimeMessageBuilder.defaultMimeMessage())
+ .mimeMessage(MimeMessageUtil.defaultMimeMessage())
.build();
testee.dispatch(mail);
@@ -113,7 +114,7 @@ public class MailDispatcherTest {
String state = "state";
FakeMail mail = FakeMail.builder()
.recipients(MailAddressFixture.ANY_AT_JAMES, MailAddressFixture.ANY_AT_JAMES2)
- .mimeMessage(MimeMessageBuilder.defaultMimeMessage())
+ .mimeMessage(MimeMessageUtil.defaultMimeMessage())
.state(state)
.build();
testee.dispatch(mail);
@@ -167,7 +168,7 @@ public class MailDispatcherTest {
FakeMail mail = FakeMail.builder()
.sender(MailAddressFixture.OTHER_AT_JAMES)
.recipients(MailAddressFixture.ANY_AT_JAMES)
- .mimeMessage(MimeMessageBuilder.defaultMimeMessage())
+ .mimeMessage(MimeMessageUtil.defaultMimeMessage())
.state("state")
.build();
testee.dispatch(mail);
@@ -191,7 +192,7 @@ public class MailDispatcherTest {
FakeMail mail = FakeMail.builder()
.sender(MailAddressFixture.OTHER_AT_JAMES)
.recipients(MailAddressFixture.ANY_AT_JAMES)
- .mimeMessage(MimeMessageBuilder.defaultMimeMessage())
+ .mimeMessage(MimeMessageUtil.defaultMimeMessage())
.state("state")
.build();
mail.addSpecificHeaderForRecipient(TEST_HEADER_USER2, MailAddressFixture.ANY_AT_JAMES2);
@@ -213,7 +214,7 @@ public class MailDispatcherTest {
FakeMail mail = FakeMail.builder()
.sender(MailAddressFixture.OTHER_AT_JAMES)
.recipients(MailAddressFixture.ANY_AT_JAMES)
- .mimeMessage(MimeMessageBuilder.defaultMimeMessage())
+ .mimeMessage(MimeMessageUtil.defaultMimeMessage())
.state("state")
.build();
mail.addSpecificHeaderForRecipient(TEST_HEADER_USER1, MailAddressFixture.ANY_AT_JAMES);
@@ -235,7 +236,7 @@ public class MailDispatcherTest {
FakeMail mail = FakeMail.builder()
.sender(MailAddressFixture.OTHER_AT_JAMES)
.recipients(MailAddressFixture.ANY_AT_JAMES, MailAddressFixture.ANY_AT_JAMES2)
- .mimeMessage(MimeMessageBuilder.defaultMimeMessage())
+ .mimeMessage(MimeMessageUtil.defaultMimeMessage())
.state("state")
.build();
mail.addSpecificHeaderForRecipient(TEST_HEADER_USER1, MailAddressFixture.ANY_AT_JAMES);
@@ -259,7 +260,7 @@ public class MailDispatcherTest {
FakeMail mail = FakeMail.builder()
.sender(MailAddressFixture.OTHER_AT_JAMES)
.recipients(MailAddressFixture.ANY_AT_JAMES, MailAddressFixture.ANY_AT_JAMES2)
- .mimeMessage(MimeMessageBuilder.defaultMimeMessage())
+ .mimeMessage(MimeMessageUtil.defaultMimeMessage())
.state("state")
.build();
mail.addSpecificHeaderForRecipient(TEST_HEADER_USER1, MailAddressFixture.ANY_AT_JAMES);
@@ -284,7 +285,7 @@ public class MailDispatcherTest {
FakeMail mail = FakeMail.builder()
.sender(MailAddressFixture.OTHER_AT_JAMES)
.recipients(MailAddressFixture.ANY_AT_JAMES, MailAddressFixture.ANY_AT_JAMES2)
- .mimeMessage(MimeMessageBuilder.defaultMimeMessage())
+ .mimeMessage(MimeMessageUtil.defaultMimeMessage())
.state("state")
.build();
mail.addSpecificHeaderForRecipient(TEST_HEADER_USER1, MailAddressFixture.ANY_AT_JAMES);
http://git-wip-us.apache.org/repos/asf/james-project/blob/9c13b922/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveIntegrationTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveIntegrationTest.java b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveIntegrationTest.java
index 1c77e9c..9b56dc3 100644
--- a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveIntegrationTest.java
+++ b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveIntegrationTest.java
@@ -40,6 +40,7 @@ import org.apache.mailet.Mail;
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.MimeMessageUtil;
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
@@ -268,7 +269,7 @@ public class SieveIntegrationTest {
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/headerEncodedFolded.script");
FakeMail mail = FakeMail.builder()
- .mimeMessage(MimeMessageBuilder.mimeMessageFromStream(
+ .mimeMessage(MimeMessageUtil.mimeMessageFromStream(
ClassLoader.getSystemResourceAsStream("eml/gmail.eml")))
.state(Mail.DEFAULT)
.recipient(RECEIVER_DOMAIN_COM)
http://git-wip-us.apache.org/repos/asf/james-project/blob/9c13b922/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java
index 51ff6fa..0aabe9f 100644
--- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java
+++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java
@@ -87,6 +87,7 @@ import org.apache.james.utils.MessageIdProbe;
import org.apache.james.utils.SMTPMessageSender;
import org.apache.mailet.Mail;
import org.apache.mailet.base.test.FakeMail;
+import org.apache.mailet.base.test.MimeMessageUtil;
import org.hamcrest.Matcher;
import org.hamcrest.Matchers;
import org.junit.After;
@@ -4915,7 +4916,7 @@ public abstract class SetMessagesMethodTest {
@Test
public void textBodyOfMessageWithTextCalendarShouldBeConvertedToAttachment() throws Exception {
- MimeMessage calendarMessage = MimeMessageBuilder.mimeMessageFromStream(ClassLoader.getSystemResourceAsStream("eml/calendar.eml"));
+ MimeMessage calendarMessage = MimeMessageUtil.mimeMessageFromStream(ClassLoader.getSystemResourceAsStream("eml/calendar.eml"));
String fromAddress = USERNAME;
Mail mail = FakeMail.builder()
http://git-wip-us.apache.org/repos/asf/james-project/blob/9c13b922/server/protocols/jmap/src/test/java/org/apache/james/jmap/mailet/TextCalendarBodyToAttachmentTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/mailet/TextCalendarBodyToAttachmentTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/mailet/TextCalendarBodyToAttachmentTest.java
index 9f832e8..1ebd61c 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/mailet/TextCalendarBodyToAttachmentTest.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/mailet/TextCalendarBodyToAttachmentTest.java
@@ -32,10 +32,10 @@ import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.internet.MimeMessage;
-import org.apache.james.core.builder.MimeMessageBuilder;
import org.apache.mailet.Mail;
import org.apache.mailet.base.test.FakeMail;
import org.apache.mailet.base.test.FakeMailetConfig;
+import org.apache.mailet.base.test.MimeMessageUtil;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
@@ -55,7 +55,7 @@ public class TextCalendarBodyToAttachmentTest {
.mailetName("TextCalendarBodyToAttachment")
.build());
- calendarMessage = MimeMessageBuilder.mimeMessageFromStream(ClassLoader.getSystemResourceAsStream("calendar.eml"));
+ calendarMessage = MimeMessageUtil.mimeMessageFromStream(ClassLoader.getSystemResourceAsStream("calendar.eml"));
}
@Test
@@ -91,7 +91,7 @@ public class TextCalendarBodyToAttachmentTest {
"Content-transfer-encoding: 8BIT\n" +
"\n" +
"BEGIN:VCALENDAR";
- MimeMessage message = MimeMessageBuilder.mimeMessageFromStream(new ByteArrayInputStream(messageContent.getBytes(StandardCharsets.US_ASCII)));
+ MimeMessage message = MimeMessageUtil.mimeMessageFromStream(new ByteArrayInputStream(messageContent.getBytes(StandardCharsets.US_ASCII)));
Mail mail = FakeMail.builder()
.mimeMessage(message)
@@ -109,7 +109,7 @@ public class TextCalendarBodyToAttachmentTest {
"Content-transfer-encoding: 8BIT\n" +
"\n" +
"BEGIN:VCALENDAR";
- MimeMessage message = MimeMessageBuilder.mimeMessageFromStream(new ByteArrayInputStream(messageContent.getBytes(StandardCharsets.US_ASCII)));
+ MimeMessage message = MimeMessageUtil.mimeMessageFromStream(new ByteArrayInputStream(messageContent.getBytes(StandardCharsets.US_ASCII)));
Mail mail = FakeMail.builder()
.mimeMessage(message)
@@ -128,7 +128,7 @@ public class TextCalendarBodyToAttachmentTest {
"BEGIN:VCALENDAR\n" +
"END:VEVENT\n" +
"END:VCALENDAR";
- MimeMessage message = MimeMessageBuilder.mimeMessageFromStream(new ByteArrayInputStream(messageContent.getBytes(StandardCharsets.US_ASCII)));
+ MimeMessage message = MimeMessageUtil.mimeMessageFromStream(new ByteArrayInputStream(messageContent.getBytes(StandardCharsets.US_ASCII)));
Mail mail = FakeMail.builder()
.mimeMessage(message)
@@ -207,7 +207,7 @@ public class TextCalendarBodyToAttachmentTest {
"BEGIN:VCALENDAR\n" +
"END:VEVENT\n" +
"END:VCALENDAR";
- MimeMessage message = MimeMessageBuilder.mimeMessageFromStream(new ByteArrayInputStream(messageContent.getBytes(StandardCharsets.US_ASCII)));
+ MimeMessage message = MimeMessageUtil.mimeMessageFromStream(new ByteArrayInputStream(messageContent.getBytes(StandardCharsets.US_ASCII)));
Mail mail = FakeMail.builder()
.mimeMessage(message)
@@ -226,7 +226,7 @@ public class TextCalendarBodyToAttachmentTest {
"BEGIN:VCALENDAR\n" +
"END:VEVENT\n" +
"END:VCALENDAR";
- MimeMessage message = MimeMessageBuilder.mimeMessageFromStream(new ByteArrayInputStream(messageContent.getBytes(StandardCharsets.US_ASCII)));
+ MimeMessage message = MimeMessageUtil.mimeMessageFromStream(new ByteArrayInputStream(messageContent.getBytes(StandardCharsets.US_ASCII)));
Mail mail = FakeMail.builder()
.mimeMessage(message)
http://git-wip-us.apache.org/repos/asf/james-project/blob/9c13b922/server/queue/queue-api/pom.xml
----------------------------------------------------------------------
diff --git a/server/queue/queue-api/pom.xml b/server/queue/queue-api/pom.xml
index d9817d8..cb2f548 100644
--- a/server/queue/queue-api/pom.xml
+++ b/server/queue/queue-api/pom.xml
@@ -37,7 +37,12 @@
<groupId>${project.groupId}</groupId>
<artifactId>apache-mailet-api</artifactId>
</dependency>
-
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>apache-mailet-base</artifactId>
+ <scope>test</scope>
+ <type>test-jar</type>
+ </dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>james-server-core</artifactId>
@@ -66,6 +71,10 @@
<scope>test</scope>
</dependency>
<dependency>
+ <groupId>org.junit.jupiter</groupId>
+ <artifactId>junit-jupiter-engine</artifactId>
+ </dependency>
+ <dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<scope>test</scope>
http://git-wip-us.apache.org/repos/asf/james-project/blob/9c13b922/server/queue/queue-api/src/test/java/org/apache/james/queue/api/MailQueueContract.java
----------------------------------------------------------------------
diff --git a/server/queue/queue-api/src/test/java/org/apache/james/queue/api/MailQueueContract.java b/server/queue/queue-api/src/test/java/org/apache/james/queue/api/MailQueueContract.java
new file mode 100644
index 0000000..90d8ce7
--- /dev/null
+++ b/server/queue/queue-api/src/test/java/org/apache/james/queue/api/MailQueueContract.java
@@ -0,0 +1,289 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+
+package org.apache.james.queue.api;
+
+import static org.apache.james.queue.api.Mails.createMimeMessage;
+import static org.apache.james.queue.api.Mails.defaultMail;
+import static org.apache.mailet.base.MailAddressFixture.RECIPIENT1;
+import static org.apache.mailet.base.MailAddressFixture.RECIPIENT2;
+import static org.apache.mailet.base.MailAddressFixture.SENDER;
+import static org.apache.mailet.base.test.MimeMessageUtil.asString;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+
+import java.util.Date;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+
+import javax.mail.internet.MimeMessage;
+
+import org.apache.mailet.Mail;
+import org.apache.mailet.PerRecipientHeaders;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+
+import com.github.fge.lambdas.Throwing;
+
+@ExtendWith(ExecutorExtension.class)
+public interface MailQueueContract {
+
+ MailQueue getMailQueue();
+
+ @Test
+ default void queueShouldPreserveMailRecipients() throws Exception {
+ getMailQueue().enQueue(defaultMail()
+ .recipients(RECIPIENT1, RECIPIENT2)
+ .build());
+
+ MailQueue.MailQueueItem mailQueueItem = getMailQueue().deQueue();
+ assertThat(mailQueueItem.getMail().getRecipients())
+ .containsOnly(RECIPIENT1, RECIPIENT2);
+ }
+
+ @Test
+ default void queueShouldPreserveMailSender() throws Exception {
+ getMailQueue().enQueue(defaultMail()
+ .sender(SENDER)
+ .build());
+
+ MailQueue.MailQueueItem mailQueueItem = getMailQueue().deQueue();
+ assertThat(mailQueueItem.getMail().getSender())
+ .isEqualTo(SENDER);
+ }
+
+ @Test
+ default void queueShouldPreserveMimeMessage() throws Exception {
+ MimeMessage originalMimeMessage = createMimeMessage();
+ getMailQueue().enQueue(defaultMail()
+ .mimeMessage(originalMimeMessage)
+ .build());
+
+ MailQueue.MailQueueItem mailQueueItem = getMailQueue().deQueue();
+ assertThat(asString(mailQueueItem.getMail().getMessage()))
+ .isEqualTo(asString(originalMimeMessage));
+ }
+
+ @Test
+ default void queueShouldPreserveMailAttribute() throws Exception {
+ String attributeName = "any";
+ String attributeValue = "value";
+ getMailQueue().enQueue(defaultMail()
+ .attribute(attributeName, attributeValue)
+ .build());
+
+ MailQueue.MailQueueItem mailQueueItem = getMailQueue().deQueue();
+ assertThat(mailQueueItem.getMail().getAttribute(attributeName))
+ .isEqualTo(attributeValue);
+ }
+
+ @Test
+ default void queueShouldPreserveErrorMessage() throws Exception {
+ String errorMessage = "ErrorMessage";
+ getMailQueue().enQueue(defaultMail()
+ .errorMessage(errorMessage)
+ .build());
+
+ MailQueue.MailQueueItem mailQueueItem = getMailQueue().deQueue();
+ assertThat(mailQueueItem.getMail().getErrorMessage())
+ .isEqualTo(errorMessage);
+ }
+
+ @Test
+ default void queueShouldPreserveState() throws Exception {
+ String state = "state";
+ getMailQueue().enQueue(defaultMail()
+ .state(state)
+ .build());
+
+ MailQueue.MailQueueItem mailQueueItem = getMailQueue().deQueue();
+ assertThat(mailQueueItem.getMail().getState())
+ .isEqualTo(state);
+ }
+
+ @Test
+ default void queueShouldPreserveRemoteAddress() throws Exception {
+ String remoteAddress = "remote";
+ getMailQueue().enQueue(defaultMail()
+ .remoteAddr(remoteAddress)
+ .build());
+
+ MailQueue.MailQueueItem mailQueueItem = getMailQueue().deQueue();
+ assertThat(mailQueueItem.getMail().getRemoteAddr())
+ .isEqualTo(remoteAddress);
+ }
+
+ @Test
+ default void queueShouldPreserveRemoteHost() throws Exception {
+ String remoteHost = "remote";
+ getMailQueue().enQueue(defaultMail()
+ .remoteHost(remoteHost)
+ .build());
+
+ MailQueue.MailQueueItem mailQueueItem = getMailQueue().deQueue();
+ assertThat(mailQueueItem.getMail().getRemoteHost())
+ .isEqualTo(remoteHost);
+ }
+
+ @Test
+ default void queueShouldPreserveLastUpdated() throws Exception {
+ Date lastUpdated = new Date();
+ getMailQueue().enQueue(defaultMail()
+ .lastUpdated(lastUpdated)
+ .build());
+
+ MailQueue.MailQueueItem mailQueueItem = getMailQueue().deQueue();
+ assertThat(mailQueueItem.getMail().getLastUpdated())
+ .isEqualTo(lastUpdated);
+ }
+
+ @Test
+ default void queueShouldPreserveName() throws Exception {
+ String expectedName = "name";
+ getMailQueue().enQueue(defaultMail()
+ .name(expectedName)
+ .build());
+
+ MailQueue.MailQueueItem mailQueueItem = getMailQueue().deQueue();
+ assertThat(mailQueueItem.getMail().getName())
+ .isEqualTo(expectedName);
+ }
+
+ @Test
+ default void queueShouldPreservePerRecipientHeaders() throws Exception {
+ PerRecipientHeaders.Header header = PerRecipientHeaders.Header.builder()
+ .name("any")
+ .value("any")
+ .build();
+ getMailQueue().enQueue(defaultMail()
+ .addHeaderForRecipient(header, RECIPIENT1)
+ .build());
+
+ MailQueue.MailQueueItem mailQueueItem = getMailQueue().deQueue();
+ assertThat(mailQueueItem.getMail().getPerRecipientSpecificHeaders()
+ .getHeadersForRecipient(RECIPIENT1))
+ .containsOnly(header);
+ }
+
+ @Test
+ default void dequeueShouldBeFifo() throws Exception {
+ String firstExpectedName = "name1";
+ getMailQueue().enQueue(defaultMail()
+ .name(firstExpectedName)
+ .build());
+ String secondExpectedName = "name2";
+ getMailQueue().enQueue(defaultMail()
+ .name(secondExpectedName)
+ .build());
+
+ MailQueue.MailQueueItem mailQueueItem1 = getMailQueue().deQueue();
+ mailQueueItem1.done(true);
+ MailQueue.MailQueueItem mailQueueItem2 = getMailQueue().deQueue();
+ mailQueueItem2.done(true);
+ assertThat(mailQueueItem1.getMail().getName()).isEqualTo(firstExpectedName);
+ assertThat(mailQueueItem2.getMail().getName()).isEqualTo(secondExpectedName);
+ }
+
+ @Test
+ default void dequeueCanBeChainedBeforeAck() throws Exception {
+ getMailQueue().enQueue(defaultMail()
+ .name("name1")
+ .build());
+ getMailQueue().enQueue(defaultMail()
+ .name("name2")
+ .build());
+
+ MailQueue.MailQueueItem mailQueueItem1 = getMailQueue().deQueue();
+ MailQueue.MailQueueItem mailQueueItem2 = getMailQueue().deQueue();
+ mailQueueItem1.done(true);
+ mailQueueItem2.done(true);
+ assertThat(mailQueueItem1.getMail().getName()).isEqualTo("name1");
+ assertThat(mailQueueItem2.getMail().getName()).isEqualTo("name2");
+ }
+
+
+ @Test
+ default void dequeueCouldBeInterleavingWithOutOfOrderAck() throws Exception {
+ getMailQueue().enQueue(defaultMail()
+ .name("name1")
+ .build());
+ getMailQueue().enQueue(defaultMail()
+ .name("name2")
+ .build());
+
+ MailQueue.MailQueueItem mailQueueItem1 = getMailQueue().deQueue();
+ MailQueue.MailQueueItem mailQueueItem2 = getMailQueue().deQueue();
+ mailQueueItem2.done(true);
+ mailQueueItem1.done(true);
+ assertThat(mailQueueItem1.getMail().getName()).isEqualTo("name1");
+ assertThat(mailQueueItem2.getMail().getName()).isEqualTo("name2");
+ }
+
+ @Test
+ default void dequeueShouldAllowRetrieveFailItems() throws Exception {
+ getMailQueue().enQueue(defaultMail()
+ .name("name1")
+ .build());
+ getMailQueue().enQueue(defaultMail()
+ .name("name1")
+ .build());
+
+ MailQueue.MailQueueItem mailQueueItem1 = getMailQueue().deQueue();
+ mailQueueItem1.done(false);
+ MailQueue.MailQueueItem mailQueueItem2 = getMailQueue().deQueue();
+ mailQueueItem2.done(true);
+ assertThat(mailQueueItem1.getMail().getName()).isEqualTo("name1");
+ assertThat(mailQueueItem2.getMail().getName()).isEqualTo("name1");
+ }
+
+ @Test
+ default void dequeueShouldNotReturnInProcessingEmails(ExecutorService executorService) throws Exception {
+ getMailQueue().enQueue(defaultMail()
+ .name("name")
+ .build());
+
+ getMailQueue().deQueue();
+
+ Future<?> future = executorService.submit(Throwing.runnable(() -> getMailQueue().deQueue()));
+ assertThatThrownBy(() -> future.get(2, TimeUnit.SECONDS))
+ .isInstanceOf(TimeoutException.class);
+ }
+
+ @Test
+ default void deQueueShouldBlockWhenNoMail(ExecutorService executorService) throws Exception {
+ Future<?> future = executorService.submit(Throwing.runnable(() -> getMailQueue().deQueue()));
+
+ assertThatThrownBy(() -> future.get(2, TimeUnit.SECONDS))
+ .isInstanceOf(TimeoutException.class);
+ }
+
+ @Test
+ default void deQueueShouldWaitForAMailToBeEnqueued(ExecutorService executorService) throws Exception {
+ Mail mail = defaultMail()
+ .name("name")
+ .build();
+ Future<MailQueue.MailQueueItem> tryDequeue = executorService.submit(() -> getMailQueue().deQueue());
+ getMailQueue().enQueue(mail);
+
+ assertThat(tryDequeue.get().getMail().getName()).isEqualTo("name");
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/9c13b922/server/queue/queue-api/src/test/java/org/apache/james/queue/api/Mails.java
----------------------------------------------------------------------
diff --git a/server/queue/queue-api/src/test/java/org/apache/james/queue/api/Mails.java b/server/queue/queue-api/src/test/java/org/apache/james/queue/api/Mails.java
new file mode 100644
index 0000000..32e986b
--- /dev/null
+++ b/server/queue/queue-api/src/test/java/org/apache/james/queue/api/Mails.java
@@ -0,0 +1,51 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+
+package org.apache.james.queue.api;
+
+import static org.apache.mailet.base.MailAddressFixture.RECIPIENT1;
+import static org.apache.mailet.base.MailAddressFixture.RECIPIENT2;
+import static org.apache.mailet.base.MailAddressFixture.SENDER;
+
+import java.util.Date;
+
+import javax.mail.MessagingException;
+import javax.mail.internet.MimeMessage;
+
+import org.apache.james.core.builder.MimeMessageBuilder;
+import org.apache.mailet.base.test.FakeMail;
+
+public interface Mails {
+
+ static FakeMail.Builder defaultMail() throws MessagingException {
+ return FakeMail.builder()
+ .name("name")
+ .mimeMessage(createMimeMessage())
+ .sender(SENDER)
+ .recipients(RECIPIENT1, RECIPIENT2)
+ .lastUpdated(new Date());
+ }
+
+ static MimeMessage createMimeMessage() throws MessagingException {
+ return MimeMessageBuilder.mimeMessageBuilder()
+ .setText("test")
+ .addHeader("testheader", "testvalue")
+ .build();
+ }
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/9c13b922/server/queue/queue-jms/pom.xml
----------------------------------------------------------------------
diff --git a/server/queue/queue-jms/pom.xml b/server/queue/queue-jms/pom.xml
index 9271792..7e99ce3 100644
--- a/server/queue/queue-jms/pom.xml
+++ b/server/queue/queue-jms/pom.xml
@@ -39,6 +39,12 @@
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
+ <artifactId>apache-mailet-base</artifactId>
+ <scope>test</scope>
+ <type>test-jar</type>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
<artifactId>james-server-core</artifactId>
</dependency>
<dependency>
@@ -56,6 +62,12 @@
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
+ <artifactId>james-server-queue-api</artifactId>
+ <type>test-jar</type>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
<artifactId>metrics-api</artifactId>
</dependency>
<dependency>
@@ -93,6 +105,16 @@
<scope>test</scope>
</dependency>
<dependency>
+ <groupId>org.junit.jupiter</groupId>
+ <artifactId>junit-jupiter-engine</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.junit.platform</groupId>
+ <artifactId>junit-platform-launcher</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
<scope>test</scope>
http://git-wip-us.apache.org/repos/asf/james-project/blob/9c13b922/server/queue/queue-jms/src/test/java/org/apache/james/queue/jms/JMSMailQueueTest.java
----------------------------------------------------------------------
diff --git a/server/queue/queue-jms/src/test/java/org/apache/james/queue/jms/JMSMailQueueTest.java b/server/queue/queue-jms/src/test/java/org/apache/james/queue/jms/JMSMailQueueTest.java
new file mode 100644
index 0000000..a5708ce
--- /dev/null
+++ b/server/queue/queue-jms/src/test/java/org/apache/james/queue/jms/JMSMailQueueTest.java
@@ -0,0 +1,104 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+
+package org.apache.james.queue.jms;
+
+import javax.jms.ConnectionFactory;
+
+import org.apache.activemq.ActiveMQConnectionFactory;
+import org.apache.activemq.broker.BrokerService;
+import org.apache.activemq.broker.region.policy.PolicyEntry;
+import org.apache.activemq.broker.region.policy.PolicyMap;
+import org.apache.james.metrics.api.NoopMetricFactory;
+import org.apache.james.queue.api.MailQueue;
+import org.apache.james.queue.api.MailQueueContract;
+import org.apache.james.queue.api.RawMailQueueItemDecoratorFactory;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+
+import com.google.common.collect.ImmutableList;
+
+public class JMSMailQueueTest implements MailQueueContract {
+
+ private final static String QUEUE_NAME = "test";
+
+ private JMSMailQueue mailQueue;
+
+ private BrokerService broker;
+
+ @BeforeEach
+ public void setUp() throws Exception {
+ broker = createBroker();
+ broker.start();
+ ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("vm://localhost?create=false");
+ RawMailQueueItemDecoratorFactory mailQueueItemDecoratorFactory = new RawMailQueueItemDecoratorFactory();
+ NoopMetricFactory metricFactory = new NoopMetricFactory();
+ mailQueue = new JMSMailQueue(connectionFactory, mailQueueItemDecoratorFactory, QUEUE_NAME, metricFactory);
+ }
+
+ private BrokerService createBroker() throws Exception {
+ BrokerService aBroker = new BrokerService();
+ aBroker.setPersistent(false);
+ aBroker.setUseJmx(false);
+ aBroker.addConnector("tcp://127.0.0.1:61616");
+
+ // Enable priority support
+ PolicyMap pMap = new PolicyMap();
+ PolicyEntry entry = new PolicyEntry();
+ entry.setPrioritizedMessages(true);
+ entry.setQueue(QUEUE_NAME);
+ pMap.setPolicyEntries(ImmutableList.of(entry));
+ aBroker.setDestinationPolicy(pMap);
+
+ return aBroker;
+ }
+
+ @AfterEach
+ public void tearDown() throws Exception {
+ broker.stop();
+ }
+
+ @Override
+ public MailQueue getMailQueue() {
+ return mailQueue;
+ }
+
+ @Test
+ @Override
+ @Disabled("JAMES-2295 Disabled as test was dead-locking")
+ public void dequeueCanBeChainedBeforeAck() {
+
+ }
+
+ @Test
+ @Override
+ @Disabled("JAMES-2295 Disabled as test was dead-locking")
+ public void dequeueCouldBeInterleavingWithOutOfOrderAck() {
+
+ }
+
+ @Test
+ @Override
+ @Disabled("JAMES-2301 Per recipients headers are not attached to the message.")
+ public void queueShouldPreservePerRecipientHeaders() {
+
+ }
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org