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/09/01 01:18:17 UTC

[04/27] james-project git commit: JAMES-2132 support various Address type

JAMES-2132 support various Address type

The address-type field indicates the type of the original recipient
   address.  If the message originated within the Internet, the address-
   type field will normally be "rfc822", and the address will be
   according to the syntax specified in RFC-MSGFMT [RFC5322].  The value
   "unknown" should be used if the Reporting MUA cannot determine the
   type of the original recipient address from the message envelope.


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

Branch: refs/heads/master
Commit: eb1670891c34efd17a08ec99edaf8bea83af9ffa
Parents: bbc128a
Author: benwa <bt...@linagora.com>
Authored: Mon Aug 28 17:21:33 2017 +0700
Committer: benwa <bt...@linagora.com>
Committed: Thu Aug 31 18:00:19 2017 +0700

----------------------------------------------------------------------
 .../apache/james/mdn/fields/FinalRecipient.java |  20 ++-
 .../james/mdn/fields/OriginalRecipient.java     |  24 ++-
 .../org/apache/james/mdn/MDNFactoryTest.java    | 167 ++++++++++++++-----
 3 files changed, 159 insertions(+), 52 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/eb167089/mdn/src/main/java/org/apache/james/mdn/fields/FinalRecipient.java
----------------------------------------------------------------------
diff --git a/mdn/src/main/java/org/apache/james/mdn/fields/FinalRecipient.java b/mdn/src/main/java/org/apache/james/mdn/fields/FinalRecipient.java
index a9799d2..5d0772e 100644
--- a/mdn/src/main/java/org/apache/james/mdn/fields/FinalRecipient.java
+++ b/mdn/src/main/java/org/apache/james/mdn/fields/FinalRecipient.java
@@ -19,25 +19,33 @@
 
 package org.apache.james.mdn.fields;
 
-import java.util.Optional;
-
 import org.apache.james.mdn.Constants;
 
+import com.google.common.base.Preconditions;
+
 public class FinalRecipient implements Field {
     public static final String FIELD_NAME = "Final-Recepient";
 
-    private final Optional<String> finalRecipient;
+    private final String finalRecipient;
+    private final String addressType;
 
-    public FinalRecipient(Optional<String> finalRecipient) {
+    public FinalRecipient(String addressType, String finalRecipient) {
+        Preconditions.checkNotNull(finalRecipient);
+        Preconditions.checkNotNull(addressType);
         this.finalRecipient = finalRecipient;
+        this.addressType = addressType;
+    }
+
+    public FinalRecipient(String finalRecipient) {
+        this(Constants.RFC_822, finalRecipient);
     }
 
-    public Optional<String> getFinalRecipient() {
+    public String getFinalRecipient() {
         return finalRecipient;
     }
 
     @Override
     public String formattedValue() {
-        return FIELD_NAME + ": " + Constants.RFC_822 + "; " + finalRecipient.orElse("");
+        return FIELD_NAME + ": " + addressType + "; " + finalRecipient;
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/eb167089/mdn/src/main/java/org/apache/james/mdn/fields/OriginalRecipient.java
----------------------------------------------------------------------
diff --git a/mdn/src/main/java/org/apache/james/mdn/fields/OriginalRecipient.java b/mdn/src/main/java/org/apache/james/mdn/fields/OriginalRecipient.java
index a44c055..9c399ff 100644
--- a/mdn/src/main/java/org/apache/james/mdn/fields/OriginalRecipient.java
+++ b/mdn/src/main/java/org/apache/james/mdn/fields/OriginalRecipient.java
@@ -21,19 +21,39 @@ package org.apache.james.mdn.fields;
 
 import org.apache.james.mdn.Constants;
 
+import com.google.common.base.Preconditions;
+
 public class OriginalRecipient implements Field{
+    private static final String UNKNOWN = "unknown";
+
+    public static OriginalRecipient ofUnknown(String address) {
+        return new OriginalRecipient(UNKNOWN, address);
+    }
+
     private final String originalRecipient;
+    private final String addressType;
 
-    public OriginalRecipient(String originalRecipient) {
+    public OriginalRecipient(String addressType, String originalRecipient) {
+        Preconditions.checkNotNull(addressType);
+        Preconditions.checkNotNull(originalRecipient);
+        this.addressType = addressType;
         this.originalRecipient = originalRecipient;
     }
 
+    public OriginalRecipient(String originalRecipient) {
+        this(Constants.RFC_822, originalRecipient);
+    }
+
     public String getOriginalRecipient() {
         return originalRecipient;
     }
 
+    public String getAddressType() {
+        return addressType;
+    }
+
     @Override
     public String formattedValue() {
-        return "Original-Recipient: " + Constants.RFC_822 + "; " + originalRecipient;
+        return "Original-Recipient: " + addressType + "; " + originalRecipient;
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/eb167089/mdn/src/test/java/org/apache/james/mdn/MDNFactoryTest.java
----------------------------------------------------------------------
diff --git a/mdn/src/test/java/org/apache/james/mdn/MDNFactoryTest.java b/mdn/src/test/java/org/apache/james/mdn/MDNFactoryTest.java
index 5fd3cee..0cd3cde 100644
--- a/mdn/src/test/java/org/apache/james/mdn/MDNFactoryTest.java
+++ b/mdn/src/test/java/org/apache/james/mdn/MDNFactoryTest.java
@@ -56,7 +56,7 @@ public class MDNFactoryTest {
             .reportingUserAgentField(new ReportingUserAgent(
                 "UA_name",
                 Optional.of("UA_product")))
-            .finalRecipientField(new FinalRecipient(Optional.of("final_recipient")))
+            .finalRecipientField(new FinalRecipient("final_recipient"))
             .originalRecipientField(new OriginalRecipient("originalRecipient"))
             .originalMessageIdField(new OriginalMessageId(Optional.of("original_message_id")))
             .dispositionField(disposition)
@@ -85,7 +85,7 @@ public class MDNFactoryTest {
             .reportingUserAgentField(new ReportingUserAgent(
                 "UA_name",
                 Optional.of("UA_product")))
-            .finalRecipientField(new FinalRecipient(Optional.of("final_recipient")))
+            .finalRecipientField(new FinalRecipient("final_recipient"))
             .originalRecipientField(new OriginalRecipient("originalRecipient"))
             .originalMessageIdField(new OriginalMessageId(Optional.of("original_message_id")))
             .dispositionField(disposition)
@@ -114,7 +114,7 @@ public class MDNFactoryTest {
             .reportingUserAgentField(new ReportingUserAgent(
                 "UA_name",
                 Optional.of("UA_product")))
-            .finalRecipientField(new FinalRecipient(Optional.of("final_recipient")))
+            .finalRecipientField(new FinalRecipient("final_recipient"))
             .originalRecipientField(new OriginalRecipient("originalRecipient"))
             .originalMessageIdField(new OriginalMessageId(Optional.of("original_message_id")))
             .dispositionField(disposition)
@@ -143,7 +143,7 @@ public class MDNFactoryTest {
             .reportingUserAgentField(new ReportingUserAgent(
                 "UA_name",
                 Optional.of("UA_product")))
-            .finalRecipientField(new FinalRecipient(Optional.of("final_recipient")))
+            .finalRecipientField(new FinalRecipient("final_recipient"))
             .originalRecipientField(new OriginalRecipient("originalRecipient"))
             .originalMessageIdField(new OriginalMessageId(Optional.of("original_message_id")))
             .dispositionField(disposition)
@@ -172,7 +172,7 @@ public class MDNFactoryTest {
             .reportingUserAgentField(new ReportingUserAgent(
                 "UA_name",
                 Optional.of("UA_product")))
-            .finalRecipientField(new FinalRecipient(Optional.of("final_recipient")))
+            .finalRecipientField(new FinalRecipient("final_recipient"))
             .originalRecipientField(new OriginalRecipient("originalRecipient"))
             .originalMessageIdField(new OriginalMessageId(Optional.of("original_message_id")))
             .dispositionField(disposition)
@@ -201,7 +201,7 @@ public class MDNFactoryTest {
             .reportingUserAgentField(new ReportingUserAgent(
                 "UA_name",
                 Optional.of("UA_product")))
-            .finalRecipientField(new FinalRecipient(Optional.of("final_recipient")))
+            .finalRecipientField(new FinalRecipient("final_recipient"))
             .originalRecipientField(new OriginalRecipient("originalRecipient"))
             .originalMessageIdField(new OriginalMessageId(Optional.of("original_message_id")))
             .dispositionField(disposition)
@@ -230,7 +230,7 @@ public class MDNFactoryTest {
             .reportingUserAgentField(new ReportingUserAgent(
                 "UA_name",
                 Optional.of("UA_product")))
-            .finalRecipientField(new FinalRecipient(Optional.of("final_recipient")))
+            .finalRecipientField(new FinalRecipient("final_recipient"))
             .originalRecipientField(new OriginalRecipient("originalRecipient"))
             .originalMessageIdField(new OriginalMessageId(Optional.of("original_message_id")))
             .dispositionField(disposition)
@@ -259,7 +259,7 @@ public class MDNFactoryTest {
             .reportingUserAgentField(new ReportingUserAgent(
                 "UA_name",
                 Optional.of("UA_product")))
-            .finalRecipientField(new FinalRecipient(Optional.of("final_recipient")))
+            .finalRecipientField(new FinalRecipient("final_recipient"))
             .originalRecipientField(new OriginalRecipient("originalRecipient"))
             .originalMessageIdField(new OriginalMessageId(Optional.of("original_message_id")))
             .dispositionField(disposition)
@@ -287,7 +287,7 @@ public class MDNFactoryTest {
             .reportingUserAgentField(new ReportingUserAgent(
                 "UA_name",
                 Optional.of("UA_product")))
-            .finalRecipientField(new FinalRecipient(Optional.of("final_recipient")))
+            .finalRecipientField(new FinalRecipient("final_recipient"))
             .originalRecipientField(new OriginalRecipient("originalRecipient"))
             .originalMessageIdField(new OriginalMessageId(Optional.of("original_message_id")))
             .dispositionField(disposition)
@@ -314,7 +314,7 @@ public class MDNFactoryTest {
             .reportingUserAgentField(new ReportingUserAgent(
                 "UA_name",
                 Optional.of("UA_product")))
-            .finalRecipientField(new FinalRecipient(Optional.of("final_recipient")))
+            .finalRecipientField(new FinalRecipient("final_recipient"))
             .originalRecipientField(new OriginalRecipient("originalRecipient"))
             .originalMessageIdField(new OriginalMessageId(Optional.of("original_message_id")))
             .dispositionField(disposition)
@@ -340,7 +340,7 @@ public class MDNFactoryTest {
             .reportingUserAgentField(new ReportingUserAgent(
                 "UA_name",
                 Optional.of("UA_product")))
-            .finalRecipientField(new FinalRecipient(Optional.of("final_recipient")))
+            .finalRecipientField(new FinalRecipient("final_recipient"))
             .originalRecipientField(new OriginalRecipient("originalRecipient"))
             .originalMessageIdField(new OriginalMessageId(Optional.of("original_message_id")))
             .dispositionField(disposition)
@@ -368,7 +368,7 @@ public class MDNFactoryTest {
             .reportingUserAgentField(new ReportingUserAgent(
                 "UA_name",
                 Optional.of("UA_product")))
-            .finalRecipientField(new FinalRecipient(Optional.of("final_recipient")))
+            .finalRecipientField(new FinalRecipient("final_recipient"))
             .originalRecipientField(new OriginalRecipient("originalRecipient"))
             .originalMessageIdField(new OriginalMessageId(Optional.of("original_message_id")))
             .dispositionField(disposition)
@@ -396,7 +396,7 @@ public class MDNFactoryTest {
             .reportingUserAgentField(new ReportingUserAgent(
                 "UA_name",
                 Optional.of("UA_product")))
-            .finalRecipientField(new FinalRecipient(Optional.of("final_recipient")))
+            .finalRecipientField(new FinalRecipient("final_recipient"))
             .originalRecipientField(new OriginalRecipient("originalRecipient"))
             .originalMessageIdField(new OriginalMessageId(Optional.of("original_message_id")))
             .dispositionField(disposition)
@@ -425,7 +425,7 @@ public class MDNFactoryTest {
             .reportingUserAgentField(new ReportingUserAgent(
                 "UA_name",
                 Optional.empty()))
-            .finalRecipientField(new FinalRecipient(Optional.of("final_recipient")))
+            .finalRecipientField(new FinalRecipient("final_recipient"))
             .originalRecipientField(new OriginalRecipient("originalRecipient"))
             .originalMessageIdField(new OriginalMessageId(Optional.of("original_message_id")))
             .dispositionField(disposition)
@@ -454,7 +454,7 @@ public class MDNFactoryTest {
             .reportingUserAgentField(new ReportingUserAgent(
                 "UA_name",
                 Optional.of("UA_product")))
-            .finalRecipientField(new FinalRecipient(Optional.of("final_recipient")))
+            .finalRecipientField(new FinalRecipient("final_recipient"))
             .originalMessageIdField(new OriginalMessageId(Optional.of("original_message_id")))
             .dispositionField(disposition)
             .build()
@@ -468,7 +468,7 @@ public class MDNFactoryTest {
     }
 
     @Test
-    public void generateMDNReportShouldFormatNullFinalRecipient() {
+    public void generateMDNReportShouldFormatNullOriginalMessageId() {
         Disposition disposition = Disposition.builder()
             .actionMode(DispositionActionMode.Manual)
             .sendingMode(DispositionSendingMode.Automatic)
@@ -481,9 +481,9 @@ public class MDNFactoryTest {
             .reportingUserAgentField(new ReportingUserAgent(
                 "UA_name",
                 Optional.of("UA_product")))
-            .finalRecipientField(new FinalRecipient(Optional.empty()))
+            .finalRecipientField(new FinalRecipient("final_recipient"))
             .originalRecipientField(new OriginalRecipient("originalRecipient"))
-            .originalMessageIdField(new OriginalMessageId(Optional.of("original_message_id")))
+            .originalMessageIdField(new OriginalMessageId(Optional.empty()))
             .dispositionField(disposition)
             .build()
             .formattedValue();
@@ -491,17 +491,30 @@ public class MDNFactoryTest {
         assertThat(report)
             .isEqualTo("Reporting-UA: UA_name; UA_product\r\n" +
                 "Original-Recipient: rfc822; originalRecipient\r\n" +
-                "Final-Recepient: rfc822; \r\n" +
-                "Original-Message-ID: original_message_id\r\n" +
+                "Final-Recepient: rfc822; final_recipient\r\n" +
+                "Original-Message-ID: \r\n" +
                 "Disposition: manual-action/MDN-sent-automatically;deleted/error,failed\r\n");
     }
 
     @Test
-    public void generateMDNReportShouldFormatNullOriginalMessageId() {
+    public void generateMDNReportThrowOnNullDisposition() {
+        expectedException.expect(IllegalStateException.class);
+
+        MDNReport.builder()
+            .reportingUserAgentField(new ReportingUserAgent(
+                "UA_name",
+                Optional.of("UA_product")))
+            .finalRecipientField(new FinalRecipient("final_recipient"))
+            .originalRecipientField(new OriginalRecipient("originalRecipient"))
+            .build();
+    }
+
+    @Test
+    public void generateMDNReportShouldFormatGateway() {
         Disposition disposition = Disposition.builder()
-            .actionMode(DispositionActionMode.Manual)
+            .actionMode(DispositionActionMode.Automatic)
             .sendingMode(DispositionSendingMode.Automatic)
-            .type(DispositionType.Deleted)
+            .type(DispositionType.Processed)
             .addModifier(DispositionModifier.Error)
             .addModifier(DispositionModifier.Failed)
             .build();
@@ -510,37 +523,85 @@ public class MDNFactoryTest {
             .reportingUserAgentField(new ReportingUserAgent(
                 "UA_name",
                 Optional.of("UA_product")))
-            .finalRecipientField(new FinalRecipient(Optional.of("final_recipient")))
+            .gatewayField(new Gateway("host.com"))
+            .finalRecipientField(new FinalRecipient("final_recipient"))
             .originalRecipientField(new OriginalRecipient("originalRecipient"))
-            .originalMessageIdField(new OriginalMessageId(Optional.empty()))
+            .originalMessageIdField(new OriginalMessageId(Optional.of("original_message_id")))
             .dispositionField(disposition)
             .build()
             .formattedValue();
 
         assertThat(report)
             .isEqualTo("Reporting-UA: UA_name; UA_product\r\n" +
+                "MDN-Gateway: dns;host.com\r\n" +
                 "Original-Recipient: rfc822; originalRecipient\r\n" +
                 "Final-Recepient: rfc822; final_recipient\r\n" +
-                "Original-Message-ID: \r\n" +
-                "Disposition: manual-action/MDN-sent-automatically;deleted/error,failed\r\n");
+                "Original-Message-ID: original_message_id\r\n" +
+                "Disposition: automatic-action/MDN-sent-automatically;processed/error,failed\r\n");
     }
 
     @Test
-    public void generateMDNReportThrowOnNullDisposition() {
-        Disposition disposition = null;
-        expectedException.expect(IllegalStateException.class);
+    public void generateMDNReportShouldFormatGatewayWithExoticNameType() {
+        Disposition disposition = Disposition.builder()
+            .actionMode(DispositionActionMode.Automatic)
+            .sendingMode(DispositionSendingMode.Automatic)
+            .type(DispositionType.Processed)
+            .addModifier(DispositionModifier.Error)
+            .addModifier(DispositionModifier.Failed)
+            .build();
 
-        MDNReport.builder()
+        String report = MDNReport.builder()
             .reportingUserAgentField(new ReportingUserAgent(
                 "UA_name",
                 Optional.of("UA_product")))
-            .finalRecipientField(new FinalRecipient(Optional.of("final_recipient")))
+            .gatewayField(new Gateway("postal", "5 rue Charles mercier"))
+            .finalRecipientField(new FinalRecipient("final_recipient"))
             .originalRecipientField(new OriginalRecipient("originalRecipient"))
+            .originalMessageIdField(new OriginalMessageId(Optional.of("original_message_id")))
+            .dispositionField(disposition)
+            .build()
+            .formattedValue();
+
+        assertThat(report)
+            .isEqualTo("Reporting-UA: UA_name; UA_product\r\n" +
+                "MDN-Gateway: postal;5 rue Charles mercier\r\n" +
+                "Original-Recipient: rfc822; originalRecipient\r\n" +
+                "Final-Recepient: rfc822; final_recipient\r\n" +
+                "Original-Message-ID: original_message_id\r\n" +
+                "Disposition: automatic-action/MDN-sent-automatically;processed/error,failed\r\n");
+    }
+
+    @Test
+    public void generateMDNReportShouldFormatExoticAddressTypeForOriginalRecipient() {
+        Disposition disposition = Disposition.builder()
+            .actionMode(DispositionActionMode.Automatic)
+            .sendingMode(DispositionSendingMode.Automatic)
+            .type(DispositionType.Processed)
+            .addModifier(DispositionModifier.Error)
+            .addModifier(DispositionModifier.Failed)
             .build();
+
+        String report = MDNReport.builder()
+            .reportingUserAgentField(new ReportingUserAgent(
+                "UA_name",
+                Optional.of("UA_product")))
+            .finalRecipientField(new FinalRecipient("final_recipient"))
+            .originalRecipientField(new OriginalRecipient("roomNumber", "385"))
+            .originalMessageIdField(new OriginalMessageId(Optional.of("original_message_id")))
+            .dispositionField(disposition)
+            .build()
+            .formattedValue();
+
+        assertThat(report)
+            .isEqualTo("Reporting-UA: UA_name; UA_product\r\n" +
+                "Original-Recipient: roomNumber; 385\r\n" +
+                "Final-Recepient: rfc822; final_recipient\r\n" +
+                "Original-Message-ID: original_message_id\r\n" +
+                "Disposition: automatic-action/MDN-sent-automatically;processed/error,failed\r\n");
     }
 
     @Test
-    public void generateMDNReportShouldFormatGateway() {
+    public void generateMDNReportShouldFormatUnknownAddressTypeForOriginalRecipient() {
         Disposition disposition = Disposition.builder()
             .actionMode(DispositionActionMode.Automatic)
             .sendingMode(DispositionSendingMode.Automatic)
@@ -553,9 +614,8 @@ public class MDNFactoryTest {
             .reportingUserAgentField(new ReportingUserAgent(
                 "UA_name",
                 Optional.of("UA_product")))
-            .gatewayField(new Gateway("host.com"))
-            .finalRecipientField(new FinalRecipient(Optional.of("final_recipient")))
-            .originalRecipientField(new OriginalRecipient("originalRecipient"))
+            .finalRecipientField(new FinalRecipient("final_recipient"))
+            .originalRecipientField(OriginalRecipient.ofUnknown("#$%*"))
             .originalMessageIdField(new OriginalMessageId(Optional.of("original_message_id")))
             .dispositionField(disposition)
             .build()
@@ -563,15 +623,14 @@ public class MDNFactoryTest {
 
         assertThat(report)
             .isEqualTo("Reporting-UA: UA_name; UA_product\r\n" +
-                "MDN-Gateway: dns;host.com\r\n" +
-                "Original-Recipient: rfc822; originalRecipient\r\n" +
+                "Original-Recipient: unknown; #$%*\r\n" +
                 "Final-Recepient: rfc822; final_recipient\r\n" +
                 "Original-Message-ID: original_message_id\r\n" +
                 "Disposition: automatic-action/MDN-sent-automatically;processed/error,failed\r\n");
     }
-    
+
     @Test
-    public void generateMDNReportShouldFormatGatewayWithExoticNameType() {
+    public void generateMDNReportShouldFormatExoticFinalRecipientAddressType() {
         Disposition disposition = Disposition.builder()
             .actionMode(DispositionActionMode.Automatic)
             .sendingMode(DispositionSendingMode.Automatic)
@@ -584,8 +643,7 @@ public class MDNFactoryTest {
             .reportingUserAgentField(new ReportingUserAgent(
                 "UA_name",
                 Optional.of("UA_product")))
-            .gatewayField(new Gateway("postal", "5 rue Charles mercier"))
-            .finalRecipientField(new FinalRecipient(Optional.of("final_recipient")))
+            .finalRecipientField(new FinalRecipient("roomNumber", "781"))
             .originalRecipientField(new OriginalRecipient("originalRecipient"))
             .originalMessageIdField(new OriginalMessageId(Optional.of("original_message_id")))
             .dispositionField(disposition)
@@ -594,10 +652,31 @@ public class MDNFactoryTest {
 
         assertThat(report)
             .isEqualTo("Reporting-UA: UA_name; UA_product\r\n" +
-                "MDN-Gateway: postal;5 rue Charles mercier\r\n" +
                 "Original-Recipient: rfc822; originalRecipient\r\n" +
-                "Final-Recepient: rfc822; final_recipient\r\n" +
+                "Final-Recepient: roomNumber; 781\r\n" +
                 "Original-Message-ID: original_message_id\r\n" +
                 "Disposition: automatic-action/MDN-sent-automatically;processed/error,failed\r\n");
     }
+
+    @Test
+    public void generateMDNReportShouldThrowWhenMissingFinalField() {
+        Disposition disposition = Disposition.builder()
+            .actionMode(DispositionActionMode.Automatic)
+            .sendingMode(DispositionSendingMode.Automatic)
+            .type(DispositionType.Processed)
+            .addModifier(DispositionModifier.Error)
+            .addModifier(DispositionModifier.Failed)
+            .build();
+
+        expectedException.expect(IllegalStateException.class);
+
+        MDNReport.builder()
+            .reportingUserAgentField(new ReportingUserAgent(
+                "UA_name",
+                Optional.of("UA_product")))
+            .originalRecipientField(new OriginalRecipient("originalRecipient"))
+            .originalMessageIdField(new OriginalMessageId(Optional.of("original_message_id")))
+            .dispositionField(disposition)
+            .build();
+    }
 }


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