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 2020/07/10 01:49:09 UTC

[james-project] 07/09: JAMES-3295 Permanent delivery error matcher implementation/test

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 d8c498c7002323ebbd91011d6277c8d3095e4be3
Author: LanKhuat <dl...@linagora.com>
AuthorDate: Wed Jul 8 15:45:08 2020 +0700

    JAMES-3295 Permanent delivery error matcher implementation/test
---
 .../transport/mailets/RemoteDeliveryErrorHandlingTest.java     |  7 +++++--
 .../james/transport/mailets/remote/delivery/Bouncer.java       |  2 ++
 .../transport/mailets/remote/delivery/DeliveryRunnable.java    | 10 +++++++++-
 .../transport/matchers/IsRemoteDeliveryPermanentError.java     |  2 --
 4 files changed, 16 insertions(+), 5 deletions(-)

diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/RemoteDeliveryErrorHandlingTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/RemoteDeliveryErrorHandlingTest.java
index 0db780c..991d0f7 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/RemoteDeliveryErrorHandlingTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/RemoteDeliveryErrorHandlingTest.java
@@ -47,6 +47,7 @@ import org.apache.james.modules.protocols.SmtpGuiceProbe;
 import org.apache.james.queue.api.MailQueueFactory;
 import org.apache.james.transport.matchers.All;
 import org.apache.james.transport.matchers.AtMost;
+import org.apache.james.transport.matchers.IsRemoteDeliveryPermanentError;
 import org.apache.james.utils.DataProbeImpl;
 import org.apache.james.utils.MailRepositoryProbeImpl;
 import org.apache.james.utils.SMTPMessageSender;
@@ -55,7 +56,6 @@ import org.apache.james.utils.WebAdminGuiceProbe;
 import org.apache.james.webadmin.WebAdminUtils;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.RegisterExtension;
 import org.junit.jupiter.api.io.TempDir;
@@ -110,6 +110,10 @@ public class RemoteDeliveryErrorHandlingTest {
                 .putProcessor(ProcessorConfiguration.builder()
                     .state("remote-delivery-error")
                     .addMailet(MailetConfiguration.builder()
+                        .mailet(ToRepository.class)
+                        .matcher(IsRemoteDeliveryPermanentError.class)
+                        .addProperty("repositoryPath", REMOTE_DELIVERY_PERMANENT_ERROR_REPOSITORY.asString()))
+                    .addMailet(MailetConfiguration.builder()
                         .matcher(All.class)
                         .mailet(ToRepository.class)
                         .addProperty("repositoryPath", REMOTE_DELIVERY_TEMPORARY_ERROR_REPOSITORY.asString()))))
@@ -188,7 +192,6 @@ public class RemoteDeliveryErrorHandlingTest {
     }
 
     @Test
-    @Disabled("Remote delivery should attach failures information to the mail, and we should provide a Matcher for it")
     void remoteDeliveryShouldStorePermanentFailuresSeparately(SMTPMessageSender smtpMessageSender, DockerMockSmtp dockerMockSmtp) throws Exception {
         // Given a permanent failing remote server
         dockerMockSmtp.getConfigurationClient()
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remote/delivery/Bouncer.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remote/delivery/Bouncer.java
index b979cc6..92ae455 100644
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remote/delivery/Bouncer.java
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remote/delivery/Bouncer.java
@@ -43,6 +43,8 @@ public class Bouncer {
 
     public static final AttributeName DELIVERY_ERROR = AttributeName.of("delivery-error");
     public static final AttributeName DELIVERY_ERROR_CODE = AttributeName.of("delivery-error-code");
+    public static final AttributeName IS_DELIVERY_PERMANENT_ERROR = AttributeName.of("is-delivery-permanent-error");
+
     private final RemoteDeliveryConfiguration configuration;
     private final MailetContext mailetContext;
 
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remote/delivery/DeliveryRunnable.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remote/delivery/DeliveryRunnable.java
index ec38617..36e65e2 100644
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remote/delivery/DeliveryRunnable.java
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remote/delivery/DeliveryRunnable.java
@@ -20,6 +20,7 @@
 package org.apache.james.transport.mailets.remote.delivery;
 
 import static org.apache.james.metrics.api.TimeMetric.ExecutionResult.DEFAULT_100_MS_THRESHOLD;
+import static org.apache.james.transport.mailets.remote.delivery.Bouncer.IS_DELIVERY_PERMANENT_ERROR;
 
 import java.time.Duration;
 import java.util.Date;
@@ -32,6 +33,8 @@ import org.apache.james.metrics.api.MetricFactory;
 import org.apache.james.metrics.api.TimeMetric;
 import org.apache.james.queue.api.MailPrioritySupport;
 import org.apache.james.queue.api.MailQueue;
+import org.apache.mailet.Attribute;
+import org.apache.mailet.AttributeValue;
 import org.apache.mailet.Mail;
 import org.apache.mailet.MailetContext;
 import org.slf4j.Logger;
@@ -131,11 +134,16 @@ public class DeliveryRunnable implements Disposable {
                 handleTemporaryFailure(mail, executionResult);
                 break;
             case PERMANENT_FAILURE:
-                bouncer.bounce(mail, executionResult.getException().orElse(null));
+                handlePermanentFailure(mail, executionResult);
                 break;
         }
     }
 
+    private void handlePermanentFailure(Mail mail, ExecutionResult executionResult) {
+        mail.setAttribute(new Attribute(IS_DELIVERY_PERMANENT_ERROR, AttributeValue.of(true)));
+        bouncer.bounce(mail, executionResult.getException().orElse(null));
+    }
+
     private void handleTemporaryFailure(Mail mail, ExecutionResult executionResult) throws MailQueue.MailQueueException {
         if (!mail.getState().equals(Mail.ERROR)) {
             mail.setState(Mail.ERROR);
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/IsRemoteDeliveryPermanentError.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/IsRemoteDeliveryPermanentError.java
index 111a23c..9033e2b 100644
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/IsRemoteDeliveryPermanentError.java
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/IsRemoteDeliveryPermanentError.java
@@ -43,8 +43,6 @@ import com.google.common.collect.ImmutableList;
  */
 public class IsRemoteDeliveryPermanentError extends GenericMatcher {
 
-    public static final AttributeName IS_DELIVERY_PERMANENT_ERROR = AttributeName.of("is-delivery-permanent-error");
-
     @Override
     public Collection<MailAddress> match(Mail mail) {
         return AttributeUtils.getValueAndCastFromMail(mail, IS_DELIVERY_PERMANENT_ERROR, Boolean.class)


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