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