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