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 2017/01/24 01:26:20 UTC
[06/10] james-project git commit: MAILET-149 Adding integration tests
for Base64 ICS attachments
MAILET-149 Adding integration tests for Base64 ICS attachments
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/f1955243
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/f1955243
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/f1955243
Branch: refs/heads/master
Commit: f19552431b9c751f3c1342f79cefd51d53d4ae6c
Parents: 03c8f69
Author: Benoit Tellier <bt...@linagora.com>
Authored: Fri Jan 20 11:05:15 2017 +0700
Committer: Antoine Duprat <ad...@linagora.com>
Committed: Mon Jan 23 16:19:24 2017 +0100
----------------------------------------------------------------------
.../mailet/base/test/MimeMessageBuilder.java | 16 ++--
.../mailets/ICSAttachmentWorkflowTest.java | 89 ++++++++++++++++++++
2 files changed, 99 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/f1955243/mailet/base/src/test/java/org/apache/mailet/base/test/MimeMessageBuilder.java
----------------------------------------------------------------------
diff --git a/mailet/base/src/test/java/org/apache/mailet/base/test/MimeMessageBuilder.java b/mailet/base/src/test/java/org/apache/mailet/base/test/MimeMessageBuilder.java
index 1246bf7..40a7e18 100644
--- a/mailet/base/src/test/java/org/apache/mailet/base/test/MimeMessageBuilder.java
+++ b/mailet/base/src/test/java/org/apache/mailet/base/test/MimeMessageBuilder.java
@@ -21,6 +21,7 @@ package org.apache.mailet.base.test;
import java.io.ByteArrayInputStream;
import java.io.IOException;
+import java.io.InputStream;
import java.util.Arrays;
import java.util.List;
import java.util.Properties;
@@ -136,21 +137,20 @@ public class MimeMessageBuilder {
}
public BodyPart build() throws IOException, MessagingException {
- Preconditions.checkState(dataAsString.isPresent() ^ dataAsBytes.isPresent(), "one and only one of data as string or data as bytes should be specified");
+ Preconditions.checkState(!(dataAsString.isPresent() && dataAsBytes.isPresent()), "Can not specify data as bytes and data as string at the same time");
MimeBodyPart bodyPart = new MimeBodyPart();
- if (dataAsString.isPresent()) {
+ if (dataAsBytes.isPresent()) {
bodyPart.setDataHandler(
new DataHandler(
new ByteArrayDataSource(
- dataAsString.or(DEFAULT_VALUE),
+ dataAsBytes.get(),
type.or(DEFAULT_TEXT_PLAIN_UTF8_TYPE))
));
- }
- if (dataAsBytes.isPresent()) {
+ } else {
bodyPart.setDataHandler(
new DataHandler(
new ByteArrayDataSource(
- dataAsBytes.get(),
+ dataAsString.or(DEFAULT_VALUE),
type.or(DEFAULT_TEXT_PLAIN_UTF8_TYPE))
));
}
@@ -198,6 +198,10 @@ public class MimeMessageBuilder {
return new BodyPartBuilder();
}
+ public static BodyPart bodyPartFromBytes(byte[] bytes) throws MessagingException {
+ return new MimeBodyPart(new ByteArrayInputStream(bytes));
+ }
+
private Optional<String> text = Optional.absent();
private Optional<String> subject = Optional.absent();
private Optional<InternetAddress> sender = Optional.absent();
http://git-wip-us.apache.org/repos/asf/james-project/blob/f1955243/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 2a6ffe1..376f5fe 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
@@ -201,6 +201,35 @@ public class ICSAttachmentWorkflowTest {
"END:VEVENT\n" +
"END:VCALENDAR\n";
+ private static final String ICS_BASE64 = "Content-Type: application/ics;\n" +
+ " name=\"invite.ics\"\n" +
+ "Content-Transfer-Encoding: base64\n" +
+ "Content-Disposition: attachment;\n" +
+ " filename=\"invite.ics\"\n" +
+ "\n" +
+ "QkVHSU46VkNBTEVOREFSDQpQUk9ESUQ6LS8vR29vZ2xlIEluYy8vR29vZ2xlIENhbGVuZGFy\n" +
+ "IDcwLjkwNTQvL0VODQpWRVJTSU9OOjIuMA0KQ0FMU0NBTEU6R1JFR09SSUFODQpNRVRIT0Q6\n" +
+ "UkVRVUVTVA0KQkVHSU46VkVWRU5UDQpEVFNUQVJUOjIwMTcwMTIwVDEzMDAwMFoNCkRURU5E\n" +
+ "OjIwMTcwMTIwVDE0MDAwMFoNCkRUU1RBTVA6MjAxNzAxMTlUMTkxODIzWg0KT1JHQU5JWkVS\n" +
+ "O0NOPUFudG9pbmUgRHVwcmF0Om1haWx0bzphbnRkdXByYXRAZ21haWwuY29tDQpVSUQ6YWg4\n" +
+ "Nms1bTM0MmJtY3JiZTlraGtraGxuMDBAZ29vZ2xlLmNvbQ0KQVRURU5ERUU7Q1VUWVBFPUlO\n" +
+ "RElWSURVQUw7Uk9MRT1SRVEtUEFSVElDSVBBTlQ7UEFSVFNUQVQ9TkVFRFMtQUNUSU9OO1JT\n" +
+ "VlA9DQogVFJVRTtDTj1hZHVwcmF0QGxpbmFnb3JhLmNvbTtYLU5VTS1HVUVTVFM9MDptYWls\n" +
+ "dG86YWR1cHJhdEBsaW5hZ29yYS5jb20NCkFUVEVOREVFO0NVVFlQRT1JTkRJVklEVUFMO1JP\n" +
+ "TEU9UkVRLVBBUlRJQ0lQQU5UO1BBUlRTVEFUPUFDQ0VQVEVEO1JTVlA9VFJVRQ0KIDtDTj1B\n" +
+ "bnRvaW5lIER1cHJhdDtYLU5VTS1HVUVTVFM9MDptYWlsdG86YW50ZHVwcmF0QGdtYWlsLmNv\n" +
+ "bQ0KQ1JFQVRFRDoyMDE3MDExOVQxOTE4MjNaDQpERVNDUklQVElPTjpBZmZpY2hleiB2b3Ry\n" +
+ "ZSDDqXbDqW5lbWVudCBzdXIgbGEgcGFnZSBodHRwczovL3d3dy5nb29nbGUuY29tL2NhbA0K\n" +
+ "IGVuZGFyL2V2ZW50P2FjdGlvbj1WSUVXJmVpZD1ZV2c0Tm1zMWJUTTBNbUp0WTNKaVpUbHJh\n" +
+ "R3RyYUd4dU1EQWdZV1IxY0hKaGRFQg0KIHNhVzVoWjI5eVlTNWpiMjAmdG9rPU1Ua2pZVzUw\n" +
+ "WkhWd2NtRjBRR2R0WVdsc0xtTnZiVGcxT1RNNU5XTTRNR1JsWW1FMVlUSTROeg0KIFJqTjJV\n" +
+ "eU5qVTBNMll5Wm1RNE56UmtOVGhoWVRRJmN0ej1FdXJvcGUvUGFyaXMmaGw9ZnIuDQpMQVNU\n" +
+ "LU1PRElGSUVEOjIwMTcwMTE5VDE5MTgyM1oNCkxPQ0FUSU9OOg0KU0VRVUVOQ0U6MA0KU1RB\n" +
+ "VFVTOkNPTkZJUk1FRA0KU1VNTUFSWToNClRSQU5TUDpPUEFRVUUNCkVORDpWRVZFTlQNCkVO\n" +
+ "RDpWQ0FMRU5EQVINCg==";
+ public static final String ICS_BASE64_UID = "ah86k5m342bmcrbe9khkkhln00@google.com";
+ public static final String ICS_BASE64_DTSTAMP = "20170119T191823Z";
+
public SwarmGenericContainer rabbitMqContainer = new SwarmGenericContainer("rabbitmq:3")
.withAffinityToContainer();
public TemporaryFolder temporaryFolder = new TemporaryFolder();
@@ -213,6 +242,7 @@ public class ICSAttachmentWorkflowTest {
private TemporaryJamesServer jamesServer;
private MimeMessage messageWithoutICSAttached;
private MimeMessage messageWithICSAttached;
+ private MimeMessage messageWithICSBase64Attached;
@Before
public void setup() throws Exception {
@@ -310,6 +340,15 @@ public class ICSAttachmentWorkflowTest {
.build())
.setSubject("test")
.build();
+
+ messageWithICSBase64Attached = MimeMessageBuilder.mimeMessageBuilder()
+ .setMultipartWithBodyParts(
+ MimeMessageBuilder.bodyPartBuilder()
+ .data("simple text")
+ .build(),
+ MimeMessageBuilder.bodyPartFromBytes(ICS_BASE64.getBytes(Charsets.UTF_8)))
+ .setSubject("test")
+ .build();
}
@After
@@ -417,6 +456,56 @@ public class ICSAttachmentWorkflowTest {
}
@Test
+ public void headersShouldBeAddedInMailWhenOneBase64ICalAttachment() throws Exception {
+ Mail mail = FakeMail.builder()
+ .mimeMessage(messageWithICSBase64Attached)
+ .sender(new MailAddress(FROM))
+ .recipient(new MailAddress(RECIPIENT))
+ .build();
+
+ try (SMTPMessageSender messageSender = SMTPMessageSender.noAuthentication(LOCALHOST_IP, SMTP_PORT, JAMES_APACHE_ORG);
+ IMAPMessageReader imapMessageReader = new IMAPMessageReader(LOCALHOST_IP, IMAP_PORT)) {
+ messageSender.sendMessage(mail);
+ calmlyAwait.atMost(Duration.ONE_MINUTE).until(messageSender::messageHasBeenSent);
+ calmlyAwait.atMost(Duration.ONE_MINUTE).until(() -> imapMessageReader.userReceivedMessage(RECIPIENT, PASSWORD));
+
+ String receivedHeaders = imapMessageReader.readFirstMessageHeadersInInbox(RECIPIENT, PASSWORD);
+
+ assertThat(receivedHeaders).contains("X-MEETING-UID: " + ICS_BASE64_UID);
+ assertThat(receivedHeaders).contains("X-MEETING-METHOD: " + ICS_METHOD);
+ assertThat(receivedHeaders).contains("X-MEETING-SEQUENCE: " + ICS_SEQUENCE);
+ assertThat(receivedHeaders).contains("X-MEETING-DTSTAMP: " + ICS_BASE64_DTSTAMP);
+ }
+ }
+
+ @Test
+ public void base64CalendarAttachmentShouldBePublishedInMQWhenMatchingWorkflowConfiguration() throws Exception {
+ Mail mail = FakeMail.builder()
+ .mimeMessage(messageWithICSBase64Attached)
+ .sender(new MailAddress(FROM))
+ .recipient(new MailAddress(RECIPIENT))
+ .build();
+
+ try (SMTPMessageSender messageSender = SMTPMessageSender.noAuthentication(LOCALHOST_IP, SMTP_PORT, JAMES_APACHE_ORG);
+ IMAPMessageReader imapMessageReader = new IMAPMessageReader(LOCALHOST_IP, IMAP_PORT)) {
+ messageSender.sendMessage(mail);
+ calmlyAwait.atMost(Duration.ONE_MINUTE).until(messageSender::messageHasBeenSent);
+ calmlyAwait.atMost(Duration.ONE_MINUTE).until(() -> imapMessageReader.userReceivedMessage(RECIPIENT, PASSWORD));
+ }
+
+ Optional<String> content = amqpRule.readContent();
+ assertThat(content).isPresent();
+ DocumentContext jsonPath = toJsonPath(content.get());
+ assertThat(jsonPath.<String> read("sender")).isEqualTo(FROM);
+ assertThat(jsonPath.<String> read("recipient")).isEqualTo(RECIPIENT);
+ assertThat(jsonPath.<String> read("uid")).isEqualTo(ICS_BASE64_UID);
+ assertThat(jsonPath.<String> read("sequence")).isEqualTo(ICS_SEQUENCE);
+ assertThat(jsonPath.<String> read("dtstamp")).isEqualTo(ICS_BASE64_DTSTAMP);
+ assertThat(jsonPath.<String> read("method")).isEqualTo(ICS_METHOD);
+ assertThat(jsonPath.<String> read("recurrence-id")).isNull();
+ }
+
+ @Test
public void headersShouldBeFilledOnlyWithOneICalAttachmentWhenMailHasSeveral() throws Exception {
MimeMessage messageWithThreeICSAttached = MimeMessageBuilder.mimeMessageBuilder()
.setMultipartWithBodyParts(
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org