MAILET-149 Filename should be generated when none

Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/84ed5a28
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/84ed5a28
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/84ed5a28

Branch: refs/heads/master
Commit: 84ed5a28a266ec9102fc90896c52f62f10abf0db
Parents: d0b6169
Author: Antoine Duprat <adup...@linagora.com>
Authored: Mon Jan 23 10:09:37 2017 +0100
Committer: Antoine Duprat <adup...@linagora.com>
Committed: Mon Jan 23 16:19:26 2017 +0100

----------------------------------------------------------------------
 .../transport/mailets/StripAttachment.java      |  6 +--
 .../transport/mailets/StripAttachmentTest.java  | 52 ++++++++++++++++++--
 .../mailets/AmqpForwardAttachmentTest.java      |  2 +-
 3 files changed, 51 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/84ed5a28/mailet/standard/src/main/java/org/apache/james/transport/mailets/StripAttachment.java
----------------------------------------------------------------------
diff --git 
a/mailet/standard/src/main/java/org/apache/james/transport/mailets/StripAttachment.java
 
b/mailet/standard/src/main/java/org/apache/james/transport/mailets/StripAttachment.java
index 4bf7a5c..58b7304 100644
--- 
a/mailet/standard/src/main/java/org/apache/james/transport/mailets/StripAttachment.java
+++ 
b/mailet/standard/src/main/java/org/apache/james/transport/mailets/StripAttachment.java
@@ -31,6 +31,7 @@ import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
+import java.util.UUID;
 import java.util.regex.Pattern;
 
 import javax.mail.BodyPart;
@@ -310,9 +311,6 @@ public class StripAttachment extends GenericMailet {
 
     private boolean shouldBeRemoved(BodyPart bodyPart, Mail mail) throws 
MessagingException, Exception {
         String fileName = getFilename(bodyPart);
-        if (fileName == null) {
-            return false;
-        }
 
         boolean shouldRemove = removeAttachments.equals(REMOVE_ALL);
         String decodedName = DecoderUtil.decodeEncodedWords(fileName, 
DecodeMonitor.SILENT);
@@ -379,7 +377,7 @@ public class StripAttachment extends GenericMailet {
         if (fileName != null) {
             return renameWithConfigurationPattern(decodeFilename(fileName));
         }
-        return fileName;
+        return UUID.randomUUID().toString();
     }
 
     private String renameWithConfigurationPattern(String fileName) {

http://git-wip-us.apache.org/repos/asf/james-project/blob/84ed5a28/mailet/standard/src/test/java/org/apache/james/transport/mailets/StripAttachmentTest.java
----------------------------------------------------------------------
diff --git 
a/mailet/standard/src/test/java/org/apache/james/transport/mailets/StripAttachmentTest.java
 
b/mailet/standard/src/test/java/org/apache/james/transport/mailets/StripAttachmentTest.java
index 0c481c9..5995f98 100644
--- 
a/mailet/standard/src/test/java/org/apache/james/transport/mailets/StripAttachmentTest.java
+++ 
b/mailet/standard/src/test/java/org/apache/james/transport/mailets/StripAttachmentTest.java
@@ -55,6 +55,8 @@ import org.junit.rules.TemporaryFolder;
 
 import com.google.common.base.Charsets;
 import com.google.common.base.Optional;
+import com.google.common.base.Predicate;
+import com.google.common.collect.FluentIterable;
 
 public class StripAttachmentTest {
 
@@ -217,7 +219,7 @@ public class StripAttachmentTest {
                 MimeMessageBuilder.bodyPartBuilder()
                     .data("simple text")
                     .build(),
-                createAttachmentBodyPart(expectedAttachmentContent, 
"temp.tmp", TEXT_HEADERS),
+                createAttachmentBodyPart(expectedAttachmentContent, 
"temp_filname.tmp", TEXT_HEADERS),
                 createAttachmentBodyPart("\u0014\u00A3\u00E1\u00E2\u00E4", 
"winmail.dat", TEXT_HEADERS))
             .build();
 
@@ -230,13 +232,26 @@ public class StripAttachmentTest {
         @SuppressWarnings("unchecked")
         Collection<String> savedAttachments = (Collection<String>) 
mail.getAttribute(StripAttachment.SAVED_ATTACHMENTS_ATTRIBUTE_KEY);
         assertThat(savedAttachments).isNotNull();
-        assertThat(savedAttachments).hasSize(1);
-
-        String attachmentFilename = savedAttachments.iterator().next();
+        assertThat(savedAttachments).hasSize(2);
 
+        String attachmentFilename = 
retrieveFilenameStartingWith(savedAttachments, "temp_filname");
+        assertThat(attachmentFilename).isNotNull();
         assertThat(new File(folderPath + 
attachmentFilename)).hasContent(expectedAttachmentContent);
     }
 
+    private String retrieveFilenameStartingWith(Collection<String> 
savedAttachments, final String filename) {
+        return FluentIterable.from(savedAttachments)
+                .filter(new Predicate<String>() {
+
+                    @Override
+                    public boolean apply(String attachmentFilename) {
+                        return attachmentFilename.startsWith(filename);
+                    }
+                })
+                .first()
+                .get();
+    }
+
     @Test
     public void 
serviceShouldDecodeFilenameAndSaveAttachmentInAFolderWhenPatternMatchAndDecodeFilenameTrue()
 throws MessagingException, IOException {
         Mailet mailet = initMailet();
@@ -760,6 +775,35 @@ public class StripAttachmentTest {
     }
 
     @Test
+    public void 
processMultipartPartMessageShouldSetFilenameToMatchingAttachmentsWhenAttachmentWithoutFilename()
 throws Exception {
+        //Given
+        StripAttachment mailet = new StripAttachment();
+
+        FakeMailetConfig mci = FakeMailetConfig.builder()
+                .mailetName("Test")
+                .setProperty("remove", "matched")
+                .setProperty("directory", folderPath)
+                .setProperty("pattern", ".*")
+                .build();
+        mailet.init(mci);
+
+        MimeMessage mimeMessage = MimeMessageBuilder.mimeMessageBuilder()
+            .setMultipartWithBodyParts(
+                MimeMessageBuilder.bodyPartBuilder()
+                    .build())
+            .build();
+
+        Mail mail = FakeMail.builder().build();
+        //When
+        boolean actual = mailet.processMultipartPartMessage(mimeMessage, mail);
+        //Then
+        assertThat(actual).isTrue();
+        @SuppressWarnings("unchecked")
+        List<String> values = 
(List<String>)mail.getAttribute(StripAttachment.SAVED_ATTACHMENTS_ATTRIBUTE_KEY);
+        assertThat(values).hasSize(1);
+    }
+
+    @Test
     public void saveAttachmentShouldUsePartNameIfNoFilename() throws Exception 
{
         //Given
         StripAttachment mailet = new StripAttachment();

http://git-wip-us.apache.org/repos/asf/james-project/blob/84ed5a28/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AmqpForwardAttachmentTest.java
----------------------------------------------------------------------
diff --git 
a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AmqpForwardAttachmentTest.java
 
b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AmqpForwardAttachmentTest.java
index 2ebc972..500140f 100644
--- 
a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AmqpForwardAttachmentTest.java
+++ 
b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AmqpForwardAttachmentTest.java
@@ -98,7 +98,7 @@ public class AmqpForwardAttachmentTest {
                             .match("All")
                             .clazz("StripAttachment")
                             .addProperty("attribute", MAIL_ATTRIBUTE)
-                            .addProperty("pattern", ".*")
+                            .addProperty("pattern", ".*\\.txt")
                             .build())
                     .addMailet(MailetConfiguration.builder()
                             .match("All")


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
For additional commands, e-mail: server-dev-h...@james.apache.org

Reply via email to