You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by bt...@apache.org on 2022/09/23 01:45:07 UTC

[james-project] 03/05: JAMES-343 Mail: Fix resetting DSN parameters

This is an automated email from the ASF dual-hosted git repository.

btellier pushed a commit to branch 3.7.x
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit a29d2db2436dbf3a80c52a20cd9a8158670c811e
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Thu Jun 2 10:34:08 2022 +0700

    JAMES-343 Mail: Fix resetting DSN parameters
    
    Updating from DSN_PARAMETERS_1 to DSN_PARAMETERS_2 where
    DSN_PARAMETERS_2 misses some parameters present in
    DSN_PARAMETERS_1 causes those parameters to still be present
    in DSN_PARAMETERS_2.
    
    (cherry picked from commit 6003ecb236b4a2cab38ba73056e9babbaac15fc7)
---
 .../main/java/org/apache/mailet/DsnParameters.java |  8 +++++++
 .../api/src/main/java/org/apache/mailet/Mail.java  |  1 +
 .../org/apache/james/server/core/MailImplTest.java | 25 ++++++++++++++++++++++
 3 files changed, 34 insertions(+)

diff --git a/mailet/api/src/main/java/org/apache/mailet/DsnParameters.java b/mailet/api/src/main/java/org/apache/mailet/DsnParameters.java
index a426dceb01..9919da4dea 100644
--- a/mailet/api/src/main/java/org/apache/mailet/DsnParameters.java
+++ b/mailet/api/src/main/java/org/apache/mailet/DsnParameters.java
@@ -25,6 +25,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 import java.util.Optional;
+import java.util.function.Consumer;
 
 import javax.mail.internet.AddressException;
 
@@ -388,6 +389,13 @@ public class DsnParameters {
             return new DsnAttributeValues(notify, orcpt, envId, ret);
         }
 
+        public static void forEachDsnAttributeName(Consumer<AttributeName> action) {
+            action.accept(ENVID_ATTRIBUTE_NAME);
+            action.accept(RET_ATTRIBUTE_NAME);
+            action.accept(NOTIFY_ATTRIBUTE_NAME);
+            action.accept(ORCPT_ATTRIBUTE_NAME);
+        }
+
         private final Optional<AttributeValue<Map<String, AttributeValue<String>>>> notifyAttributeValue;
         private final Optional<AttributeValue<Map<String, AttributeValue<String>>>> orcptAttributeValue;
         private final Optional<AttributeValue<String>> envIdAttributeValue;
diff --git a/mailet/api/src/main/java/org/apache/mailet/Mail.java b/mailet/api/src/main/java/org/apache/mailet/Mail.java
index fe7ca1ab6d..5d918ffb3f 100644
--- a/mailet/api/src/main/java/org/apache/mailet/Mail.java
+++ b/mailet/api/src/main/java/org/apache/mailet/Mail.java
@@ -444,6 +444,7 @@ public interface Mail extends Serializable, Cloneable {
     }
 
     default void setDsnParameters(DsnParameters dsnParameters) {
+        DsnParameters.DsnAttributeValues.forEachDsnAttributeName(this::removeAttribute);
         dsnParameters.toAttributes()
             .asAttributes()
             .forEach(this::setAttribute);
diff --git a/server/container/core/src/test/java/org/apache/james/server/core/MailImplTest.java b/server/container/core/src/test/java/org/apache/james/server/core/MailImplTest.java
index 390879be9c..cca06ce2f0 100644
--- a/server/container/core/src/test/java/org/apache/james/server/core/MailImplTest.java
+++ b/server/container/core/src/test/java/org/apache/james/server/core/MailImplTest.java
@@ -404,6 +404,31 @@ public class MailImplTest extends ContractMailTest {
             .contains(dsnParameters);
     }
 
+    @Test
+    void setDsnParametersShouldUpdateStoredValue() throws Exception {
+        DsnParameters dsnParameters1 = DsnParameters.builder()
+            .envId(DsnParameters.EnvId.of("434554-55445-33443"))
+            .ret(DsnParameters.Ret.FULL)
+            .addRcptParameter(new MailAddress("bob@apache.org"), DsnParameters.RecipientDsnParameters.of(new MailAddress("andy@apache.org")))
+            .addRcptParameter(new MailAddress("cedric@apache.org"), DsnParameters.RecipientDsnParameters.of(EnumSet.of(DsnParameters.Notify.SUCCESS)))
+            .addRcptParameter(new MailAddress("domi@apache.org"), DsnParameters.RecipientDsnParameters.of(EnumSet.of(DsnParameters.Notify.FAILURE), new MailAddress("eric@apache.org")))
+            .build().get();
+        DsnParameters dsnParameters2 = DsnParameters.builder()
+            .envId(DsnParameters.EnvId.of("434554-55445-33434ee4"))
+            .addRcptParameter(new MailAddress("domi@apache.org"), DsnParameters.RecipientDsnParameters.of(EnumSet.of(DsnParameters.Notify.FAILURE), new MailAddress("eric@apache.org")))
+            .build().get();
+
+        MailImpl mail = MailImpl.builder()
+            .name("mail-id")
+            .build();
+
+        mail.setDsnParameters(dsnParameters1);
+        mail.setDsnParameters(dsnParameters2);
+
+        assertThat(mail.dsnParameters())
+            .contains(dsnParameters2);
+    }
+
     @Test
     void dsnParametersShouldBeEmptyByDefault() {
         MailImpl mail = MailImpl.builder()


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