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 2020/12/05 07:10:20 UTC

[james-project] 13/17: JAMES-3431 MailRepository should test DsnParameters invariance

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

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

commit 0e9d559dfdb642d89e19acb44a7ee27bd1b960bb
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Thu Dec 3 11:32:36 2020 +0700

    JAMES-3431 MailRepository should test DsnParameters invariance
    
    The use of collections for attribute values is not compatible with the use of Java serialization the JDBC repository actively rely on.
---
 .../main/java/org/apache/mailet/AttributeValue.java  |  1 +
 .../mailrepository/jdbc/JDBCMailRepositoryTest.java  |  6 ++++++
 .../james/mailrepository/MailRepositoryContract.java | 20 ++++++++++++++++++++
 3 files changed, 27 insertions(+)

diff --git a/mailet/api/src/main/java/org/apache/mailet/AttributeValue.java b/mailet/api/src/main/java/org/apache/mailet/AttributeValue.java
index 9bb6d26..4b71eb8 100644
--- a/mailet/api/src/main/java/org/apache/mailet/AttributeValue.java
+++ b/mailet/api/src/main/java/org/apache/mailet/AttributeValue.java
@@ -221,6 +221,7 @@ public class AttributeValue<T> {
             return Optional.empty();
         }
     }
+    
     public <U> Optional<AttributeValue<Map<String, AttributeValue<U>>>> asMapAttributeValueOf(Class<U> type) {
         if (Map.class.isInstance(value)) {
             Map<String, AttributeValue<?>> aMap = (Map<String, AttributeValue<?>>) value;
diff --git a/server/data/data-jdbc/src/test/java/org/apache/james/mailrepository/jdbc/JDBCMailRepositoryTest.java b/server/data/data-jdbc/src/test/java/org/apache/james/mailrepository/jdbc/JDBCMailRepositoryTest.java
index ae72802..9ed92c8 100644
--- a/server/data/data-jdbc/src/test/java/org/apache/james/mailrepository/jdbc/JDBCMailRepositoryTest.java
+++ b/server/data/data-jdbc/src/test/java/org/apache/james/mailrepository/jdbc/JDBCMailRepositoryTest.java
@@ -79,4 +79,10 @@ public class JDBCMailRepositoryTest implements MailRepositoryContract {
     public void storeRegularMailShouldNotFailWhenNullSender() {
 
     }
+
+    @Override
+    @Disabled("JAMES-3431 No support for Attribute collection Java serialization yet")
+    public void shouldPreserveDsnParameters() {
+
+    }
 }
diff --git a/server/mailrepository/mailrepository-api/src/test/java/org/apache/james/mailrepository/MailRepositoryContract.java b/server/mailrepository/mailrepository-api/src/test/java/org/apache/james/mailrepository/MailRepositoryContract.java
index 7210620..72566ad 100644
--- a/server/mailrepository/mailrepository-api/src/test/java/org/apache/james/mailrepository/MailRepositoryContract.java
+++ b/server/mailrepository/mailrepository-api/src/test/java/org/apache/james/mailrepository/MailRepositoryContract.java
@@ -25,6 +25,7 @@ import static org.assertj.core.api.SoftAssertions.assertSoftly;
 import java.nio.charset.StandardCharsets;
 import java.time.Duration;
 import java.util.Date;
+import java.util.EnumSet;
 import java.util.List;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ThreadLocalRandom;
@@ -43,6 +44,7 @@ import org.apache.james.utils.DiscreteDistribution;
 import org.apache.james.utils.DiscreteDistribution.DistributionEntry;
 import org.apache.mailet.Attribute;
 import org.apache.mailet.AttributeValue;
+import org.apache.mailet.DsnParameters;
 import org.apache.mailet.Mail;
 import org.apache.mailet.PerRecipientHeaders;
 import org.apache.mailet.base.MailAddressFixture;
@@ -193,6 +195,24 @@ public interface MailRepositoryContract {
     }
 
     @Test
+    default void shouldPreserveDsnParameters() throws Exception {
+        MailRepository testee = retrieveRepository();
+        DsnParameters dsnParameters = 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();
+        Mail mail = createMail(MAIL_1);
+        mail.setDsnParameters(dsnParameters);
+
+        testee.store(mail);
+
+        assertThat(testee.retrieve(MAIL_1).dsnParameters()).contains(dsnParameters);
+    }
+
+    @Test
     default void retrieveShouldReturnNullAfterRemoveAll() throws Exception {
         MailRepository testee = retrieveRepository();
         testee.store(createMail(MAIL_1));


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