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 <[email protected]> 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: [email protected] For additional commands, e-mail: [email protected]
