JAMES-2159 Use strong objects in MailetConfiguration
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/1fe32b91 Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/1fe32b91 Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/1fe32b91 Branch: refs/heads/master Commit: 1fe32b9170f1f11e433f0a1f915f216b6c71302e Parents: 4c3e040 Author: Matthieu Baechler <matth...@apache.org> Authored: Mon Sep 11 15:22:18 2017 +0200 Committer: Antoine Duprat <adup...@linagora.com> Committed: Wed Sep 27 16:07:08 2017 +0200 ---------------------------------------------------------------------- .../mailets/configuration/CommonProcessors.java | 161 +++++++++++-------- .../configuration/MailetConfiguration.java | 66 +++++--- .../configuration/MailetConfigurationTest.java | 70 ++++++++ .../crypto/SMIMEDecryptIntegrationTest.java | 26 +-- .../crypto/SMIMESignIntegrationTest.java | 54 ++++--- .../mailets/AmqpForwardAttachmentTest.java | 41 ++--- .../transport/mailets/GroupMappingTest.java | 42 ++--- .../mailets/ICSAttachmentWorkflowTest.java | 50 +++--- .../transport/mailets/StripAttachmentTest.java | 33 ++-- 9 files changed, 352 insertions(+), 191 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/1fe32b91/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/configuration/CommonProcessors.java ---------------------------------------------------------------------- diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/configuration/CommonProcessors.java b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/configuration/CommonProcessors.java index 3af7fd0..130dae7 100644 --- a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/configuration/CommonProcessors.java +++ b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/configuration/CommonProcessors.java @@ -20,6 +20,29 @@ package org.apache.james.mailets.configuration; +import org.apache.james.jmap.mailet.VacationMailet; +import org.apache.james.transport.mailets.AddDeliveredToHeader; +import org.apache.james.transport.mailets.Bounce; +import org.apache.james.transport.mailets.DSNBounce; +import org.apache.james.transport.mailets.LocalDelivery; +import org.apache.james.transport.mailets.Null; +import org.apache.james.transport.mailets.PostmasterAlias; +import org.apache.james.transport.mailets.RecipientRewriteTable; +import org.apache.james.transport.mailets.RemoteDelivery; +import org.apache.james.transport.mailets.RemoveMimeHeader; +import org.apache.james.transport.mailets.SetMailAttribute; +import org.apache.james.transport.mailets.SetMimeHeader; +import org.apache.james.transport.mailets.Sieve; +import org.apache.james.transport.mailets.ToProcessor; +import org.apache.james.transport.mailets.ToRepository; +import org.apache.james.transport.mailets.managesieve.ManageSieveMailet; +import org.apache.james.transport.matchers.All; +import org.apache.james.transport.matchers.HasMailAttribute; +import org.apache.james.transport.matchers.InSpammerBlacklist; +import org.apache.james.transport.matchers.RecipientIs; +import org.apache.james.transport.matchers.RecipientIsLocal; +import org.apache.james.transport.matchers.RelayLimit; +import org.apache.james.transport.matchers.SMTPAuthSuccessful; import org.apache.mailet.Mail; public class CommonProcessors { @@ -29,47 +52,52 @@ public class CommonProcessors { .state("root") .enableJmx(true) .addMailet(MailetConfiguration.builder() - .match("All") - .clazz("PostmasterAlias") + .matcher(All.class) + .mailet(PostmasterAlias.class) .build()) .addMailet(MailetConfiguration.builder() - .match("RelayLimit=30") - .clazz("Null") + .matcher(RelayLimit.class) + .matcherCondition("30") + .mailet(Null.class) .build()) .addMailet(MailetConfiguration.builder() - .match("RecipientIs=sievemana...@james.linagora.com") - .clazz("ToProcessor") + .matcher(RecipientIs.class) + .matcherCondition("sievemana...@james.linagora.com") + .mailet(ToProcessor.class) .addProperty("processor", "sieve-manager-check") .build()) .addMailet(MailetConfiguration.builder() - .match("HasMailAttribute=spamChecked") - .clazz("ToProcessor") + .matcher(HasMailAttribute.class) + .matcherCondition("spamChecked") + .mailet(ToProcessor.class) .addProperty("processor", "transport") .build()) .addMailet(MailetConfiguration.builder() - .match("All") - .clazz("SetMailAttribute") + .matcher(All.class) + .mailet(SetMailAttribute.class) .addProperty("spamChecked", "true") .build()) .addMailet(MailetConfiguration.builder() - .match("SMTPAuthSuccessful") - .clazz("ToProcessor") + .matcher(SMTPAuthSuccessful.class) + .mailet(ToProcessor.class) .addProperty("processor", "transport") .build()) .addMailet(MailetConfiguration.builder() - .match("InSpammerBlacklist=query.bondedsender.org.") - .clazz("ToProcessor") + .matcher(InSpammerBlacklist.class) + .matcherCondition("query.bondedsender.org.") + .mailet(ToProcessor.class) .addProperty("processor", "transport") .build()) .addMailet(MailetConfiguration.builder() - .match("InSpammerBlacklist=dnsbl.njabl.org.") - .clazz("ToProcessor") + .matcher(InSpammerBlacklist.class) + .matcherCondition("dnsbl.njabl.org.") + .mailet(ToProcessor.class) .addProperty("processor", "spam") .addProperty("notice", "550 Requested action not taken: rejected - see http://njabl.org/") .build()) .addMailet(MailetConfiguration.builder() - .match("All") - .clazz("ToProcessor") + .matcher(All.class) + .mailet(ToProcessor.class) .addProperty("processor", "transport") .build()) .build(); @@ -80,12 +108,12 @@ public class CommonProcessors { .state("error") .enableJmx(true) .addMailet(MailetConfiguration.builder() - .match("All") - .clazz("Bounce") + .matcher(All.class) + .mailet(Bounce.class) .build()) .addMailet(MailetConfiguration.builder() - .match("All") - .clazz("ToRepository") + .matcher(All.class) + .mailet(ToRepository.class) .addProperty("repositoryPath", "file://var/mail/error/") .build()) .build(); @@ -96,45 +124,46 @@ public class CommonProcessors { .state("transport") .enableJmx(true) .addMailet(MailetConfiguration.builder() - .match("SMTPAuthSuccessful") - .clazz("SetMimeHeader") + .matcher(SMTPAuthSuccessful.class) + .mailet(SetMimeHeader.class) .addProperty("name", "X-UserIsAuth") .addProperty("value", "true") .build()) .addMailet(MailetConfiguration.builder() - .match("HasMailAttribute=org.apache.james.SMIMECheckSignature") - .clazz("SetMimeHeader") + .matcher(HasMailAttribute.class) + .matcherCondition("org.apache.james.SMIMECheckSignature") + .mailet(SetMimeHeader.class) .addProperty("name", "X-WasSigned") .addProperty("value", "true") .build()) .addMailet(MailetConfiguration.builder() - .match("All") - .clazz("RemoveMimeHeader") + .matcher(All.class) + .mailet(RemoveMimeHeader.class) .addProperty("name", "bcc") .build()) .addMailet(MailetConfiguration.builder() - .match("All") - .clazz("RecipientRewriteTable") + .matcher(All.class) + .mailet(RecipientRewriteTable.class) .build()) .addMailet(MailetConfiguration.builder() - .match("RecipientIsLocal") - .clazz("org.apache.james.jmap.mailet.VacationMailet") + .matcher(RecipientIsLocal.class) + .mailet(VacationMailet.class) .build()) .addMailet(MailetConfiguration.builder() - .match("RecipientIsLocal") - .clazz("Sieve") + .matcher(RecipientIsLocal.class) + .mailet(Sieve.class) .build()) .addMailet(MailetConfiguration.builder() - .match("RecipientIsLocal") - .clazz("AddDeliveredToHeader") + .matcher(RecipientIsLocal.class) + .mailet(AddDeliveredToHeader.class) .build()) .addMailet(MailetConfiguration.builder() - .match("RecipientIsLocal") - .clazz("LocalDelivery") + .matcher(RecipientIsLocal.class) + .mailet(LocalDelivery.class) .build()) .addMailet(MailetConfiguration.builder() - .match("SMTPAuthSuccessful") - .clazz("RemoteDelivery") + .matcher(SMTPAuthSuccessful.class) + .mailet(RemoteDelivery.class) .addProperty("outgoingQueue", "outgoing") .addProperty("delayTime", "5000, 100000, 500000") .addProperty("maxRetries", "25") @@ -144,8 +173,8 @@ public class CommonProcessors { .addProperty("bounceProcessor", "bounces") .build()) .addMailet(MailetConfiguration.builder() - .match("All") - .clazz("ToProcessor") + .matcher(All.class) + .mailet(ToProcessor.class) .addProperty("processor", "relay-denied") .build()) .build(); @@ -156,8 +185,8 @@ public class CommonProcessors { .state("spam") .enableJmx(true) .addMailet(MailetConfiguration.builder() - .match("All") - .clazz("ToRepository") + .matcher(All.class) + .mailet(ToRepository.class) .addProperty("repositoryPath", "file://var/mail/spam/") .build()) .build(); @@ -168,13 +197,13 @@ public class CommonProcessors { .state("local-address-error") .enableJmx(true) .addMailet(MailetConfiguration.builder() - .match("All") - .clazz("Bounce") + .matcher(All.class) + .mailet(Bounce.class) .addProperty("attachment", "none") .build()) .addMailet(MailetConfiguration.builder() - .match("All") - .clazz("ToRepository") + .matcher(All.class) + .mailet(ToRepository.class) .addProperty("repositoryPath", "file://var/mail/address-error/") .build()) .build(); @@ -185,13 +214,13 @@ public class CommonProcessors { .state("replay-denied") .enableJmx(true) .addMailet(MailetConfiguration.builder() - .match("All") - .clazz("Bounce") + .matcher(All.class) + .mailet(Bounce.class) .addProperty("attachment", "none") .build()) .addMailet(MailetConfiguration.builder() - .match("All") - .clazz("ToRepository") + .matcher(All.class) + .mailet(ToRepository.class) .addProperty("repositoryPath", "file://var/mail/relay-denied/") .addProperty("notice", "Warning: You are sending an e-mail to a remote server. You must be authentified to perform such an operation") .build()) @@ -203,8 +232,8 @@ public class CommonProcessors { .state("bounces") .enableJmx(true) .addMailet(MailetConfiguration.builder() - .match("All") - .clazz("DSNBounce") + .matcher(All.class) + .mailet(DSNBounce.class) .addProperty("passThrough", "false") .build()) .build(); @@ -215,13 +244,13 @@ public class CommonProcessors { .state("sieve-manager-check") .enableJmx(true) .addMailet(MailetConfiguration.builder() - .match("RecipientIsLocal") - .clazz("ToProcessor") + .matcher(RecipientIsLocal.class) + .mailet(ToProcessor.class) .addProperty("processor", "sieve-manager") .build()) .addMailet(MailetConfiguration.builder() - .match("All") - .clazz("Bounce") + .matcher(All.class) + .mailet(Bounce.class) .addProperty("inline", "heads") .addProperty("attachment", "none") .addProperty("passThrough", "false") @@ -229,8 +258,8 @@ public class CommonProcessors { .addProperty("notice", "You can't send messages to configure SIEVE on this serveur unless you are the official SIEVE manager.") .build()) .addMailet(MailetConfiguration.builder() - .match("All") - .clazz("Null") + .matcher(All.class) + .mailet(Null.class) .build()) .build(); } @@ -240,18 +269,18 @@ public class CommonProcessors { .state("sieve-manager") .enableJmx(true) .addMailet(MailetConfiguration.builder() - .match("All") - .clazz("SetMailAttribute") + .matcher(All.class) + .mailet(SetMailAttribute.class) .addProperty(Mail.SMTP_AUTH_USER_ATTRIBUTE_NAME, "true") .build()) .addMailet(MailetConfiguration.builder() - .match("All") - .clazz("org.apache.james.transport.mailets.managesieve.ManageSieveMailet") + .matcher(All.class) + .mailet(ManageSieveMailet.class) .addProperty("helpURL", "file:/root/james-server-app-3.0.0-beta5-SNAPSHOT/conf/managesieve.help.txt") .build()) .addMailet(MailetConfiguration.builder() - .match("All") - .clazz("Null") + .matcher(All.class) + .mailet(Null.class) .build()) .build(); } http://git-wip-us.apache.org/repos/asf/james-project/blob/1fe32b91/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/configuration/MailetConfiguration.java ---------------------------------------------------------------------- diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/configuration/MailetConfiguration.java b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/configuration/MailetConfiguration.java index f841bfb..ae91bc4 100644 --- a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/configuration/MailetConfiguration.java +++ b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/configuration/MailetConfiguration.java @@ -21,9 +21,13 @@ package org.apache.james.mailets.configuration; import java.util.Map; +import java.util.Optional; +import org.apache.mailet.Mailet; +import org.apache.mailet.Matcher; + +import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Preconditions; -import com.google.common.base.Strings; import com.google.common.collect.ImmutableMap; public class MailetConfiguration implements SerializableAsXml { @@ -34,21 +38,28 @@ public class MailetConfiguration implements SerializableAsXml { public static class Builder { - private String match; - private String clazz; + private Class<? extends Matcher> matcher; + private Optional<String> matcherCondition; + private Class<? extends Mailet> mailet; private ImmutableMap.Builder<String, String> properties; private Builder() { properties = ImmutableMap.builder(); + matcherCondition = Optional.empty(); + } + + public Builder matcher(Class<? extends Matcher> matcher) { + this.matcher = matcher; + return this; } - public Builder match(String match) { - this.match = match; + public Builder matcherCondition(String condition) { + this.matcherCondition = Optional.ofNullable(condition); return this; } - public Builder clazz(String clazz) { - this.clazz = clazz; + public Builder mailet(Class<? extends Mailet> mailet) { + this.mailet = mailet; return this; } @@ -58,28 +69,34 @@ public class MailetConfiguration implements SerializableAsXml { } public MailetConfiguration build() { - Preconditions.checkState(!Strings.isNullOrEmpty(match), "'match' is mandatory"); - Preconditions.checkState(!Strings.isNullOrEmpty(clazz), "'class' is mandatory"); - return new MailetConfiguration(match, clazz, properties.build()); + Preconditions.checkState(matcher != null, "'matcher' is mandatory"); + Preconditions.checkState(mailet != null, "'mailet' is mandatory"); + return new MailetConfiguration(matcher, matcherCondition, mailet, properties.build()); } } - private final String match; - private final String clazz; + private final Class<? extends Matcher> matcher; + private final Optional<String> matcherCondition; + private final Class<? extends Mailet> mailet; private final Map<String, String> properties; - private MailetConfiguration(String match, String clazz, ImmutableMap<String, String> properties) { - this.match = match; - this.clazz = clazz; + private MailetConfiguration(Class<? extends Matcher> matcher, Optional<String> matcherCondition, Class<? extends Mailet> mailet, ImmutableMap<String, String> properties) { + this.matcher = matcher; + this.matcherCondition = matcherCondition; + this.mailet = mailet; this.properties = properties; } - public String getMatch() { - return match; + public Class<? extends Matcher> getMatcher() { + return matcher; } - public String getClazz() { - return clazz; + public Optional<String> getMatcherCondition() { + return matcherCondition; + } + + public Class<? extends Mailet> getMailet() { + return mailet; } public Map<String, String> getProperties() { @@ -89,11 +106,20 @@ public class MailetConfiguration implements SerializableAsXml { @Override public String serializeAsXml() { StringBuilder builder = new StringBuilder(); - builder.append("<mailet match=\"").append(getMatch()).append("\" class=\"").append(getClazz()).append("\">\n"); + builder + .append("<mailet match=\"").append(matcherWithCondition()) + .append("\" class=\"").append(getMailet().getCanonicalName()) + .append("\">\n"); for (Map.Entry<String, String> entry : getProperties().entrySet()) { builder.append("<").append(entry.getKey()).append(">").append(entry.getValue()).append("</").append(entry.getKey()).append(">\n"); } builder.append("</mailet>\n"); return builder.toString(); } + + @VisibleForTesting String matcherWithCondition() { + StringBuilder match = new StringBuilder().append(matcher.getCanonicalName()); + matcherCondition.ifPresent(condition -> match.append("=").append(condition)); + return match.toString(); + } } http://git-wip-us.apache.org/repos/asf/james-project/blob/1fe32b91/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/configuration/MailetConfigurationTest.java ---------------------------------------------------------------------- diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/configuration/MailetConfigurationTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/configuration/MailetConfigurationTest.java new file mode 100644 index 0000000..3144adf --- /dev/null +++ b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/configuration/MailetConfigurationTest.java @@ -0,0 +1,70 @@ +/**************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one * + * or more contributor license agreements. See the NOTICE file * + * distributed with this work for additional information * + * regarding copyright ownership. The ASF licenses this file * + * to you under the Apache License, Version 2.0 (the * + * "License"); you may not use this file except in compliance * + * with the License. You may obtain a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, * + * software distributed under the License is distributed on an * + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * + * KIND, either express or implied. See the License for the * + * specific language governing permissions and limitations * + * under the License. * + ****************************************************************/ +package org.apache.james.mailets.configuration; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.apache.james.transport.mailets.ToProcessor; +import org.apache.james.transport.matchers.All; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; + +public class MailetConfigurationTest { + + @Rule + public ExpectedException expectedException = ExpectedException.none(); + + @Test + public void builderShouldThrowWhenMatcherIsNull() { + expectedException.expect(IllegalStateException.class); + MailetConfiguration.builder() + .mailet(ToProcessor.class) + .build(); + } + + @Test + public void builderShouldThrowWhenMailetIsNull() { + expectedException.expect(IllegalStateException.class); + MailetConfiguration.builder() + .matcher(All.class) + .build(); + } + + @Test + public void matcherWithConditionShouldReturnMatcherWhenNoCondition() { + MailetConfiguration mailetConfiguration = MailetConfiguration.builder() + .matcher(All.class) + .mailet(ToProcessor.class) + .build(); + + assertThat(mailetConfiguration.matcherWithCondition()).isEqualTo("org.apache.james.transport.matchers.All"); + } + + @Test + public void matcherWithConditionShouldReturnMatcherWithConditionWhenSomeCondition() { + MailetConfiguration mailetConfiguration = MailetConfiguration.builder() + .matcher(All.class) + .matcherCondition("condition") + .mailet(ToProcessor.class) + .build(); + + assertThat(mailetConfiguration.matcherWithCondition()).isEqualTo("org.apache.james.transport.matchers.All=condition"); + } +} http://git-wip-us.apache.org/repos/asf/james-project/blob/1fe32b91/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/crypto/SMIMEDecryptIntegrationTest.java ---------------------------------------------------------------------- diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/crypto/SMIMEDecryptIntegrationTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/crypto/SMIMEDecryptIntegrationTest.java index 7055506..3d09a73 100644 --- a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/crypto/SMIMEDecryptIntegrationTest.java +++ b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/crypto/SMIMEDecryptIntegrationTest.java @@ -25,17 +25,23 @@ import java.nio.charset.StandardCharsets; import java.time.ZonedDateTime; import org.apache.commons.io.IOUtils; +import org.apache.james.jmap.mailet.VacationMailet; import org.apache.james.mailbox.model.MailboxConstants; import org.apache.james.mailets.TemporaryJamesServer; import org.apache.james.mailets.configuration.CommonProcessors; import org.apache.james.mailets.configuration.MailetConfiguration; import org.apache.james.mailets.configuration.MailetContainer; import org.apache.james.mailets.configuration.ProcessorConfiguration; -import org.apache.james.utils.SMTPMessageSender; import org.apache.james.modules.MailboxProbeImpl; +import org.apache.james.transport.mailets.LocalDelivery; +import org.apache.james.transport.mailets.RemoveMimeHeader; +import org.apache.james.transport.mailets.SMIMEDecrypt; +import org.apache.james.transport.matchers.All; +import org.apache.james.transport.matchers.RecipientIsLocal; import org.apache.james.util.date.ZonedDateTimeProvider; -import org.apache.james.utils.IMAPMessageReader; import org.apache.james.utils.DataProbeImpl; +import org.apache.james.utils.IMAPMessageReader; +import org.apache.james.utils.SMTPMessageSender; import org.junit.After; import org.junit.Before; import org.junit.Rule; @@ -75,25 +81,25 @@ public class SMIMEDecryptIntegrationTest { .state("transport") .enableJmx(true) .addMailet(MailetConfiguration.builder() - .match("All") - .clazz("RemoveMimeHeader") + .matcher(All.class) + .mailet(RemoveMimeHeader.class) .addProperty("name", "bcc") .build()) .addMailet(MailetConfiguration.builder() - .clazz("SMIMEDecrypt") - .match("All") + .mailet(SMIMEDecrypt.class) + .matcher(All.class) .addProperty("keyStoreFileName", temporaryFolder.getRoot().getAbsoluteFile().getAbsolutePath() + "/conf/smime.p12") .addProperty("keyStorePassword", "secret") .addProperty("keyStoreType", "PKCS12") .addProperty("debug", "true") .build()) .addMailet(MailetConfiguration.builder() - .match("RecipientIsLocal") - .clazz("org.apache.james.jmap.mailet.VacationMailet") + .matcher(RecipientIsLocal.class) + .mailet(VacationMailet.class) .build()) .addMailet(MailetConfiguration.builder() - .match("RecipientIsLocal") - .clazz("LocalDelivery") + .matcher(RecipientIsLocal.class) + .mailet(LocalDelivery.class) .build()) .build()) .build(); http://git-wip-us.apache.org/repos/asf/james-project/blob/1fe32b91/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/crypto/SMIMESignIntegrationTest.java ---------------------------------------------------------------------- diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/crypto/SMIMESignIntegrationTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/crypto/SMIMESignIntegrationTest.java index d84a28d..bee6474 100644 --- a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/crypto/SMIMESignIntegrationTest.java +++ b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/crypto/SMIMESignIntegrationTest.java @@ -23,18 +23,31 @@ import static org.assertj.core.api.Assertions.assertThat; import java.time.ZonedDateTime; +import org.apache.james.jmap.mailet.VacationMailet; import org.apache.james.mailbox.model.MailboxConstants; import org.apache.james.mailets.TemporaryJamesServer; import org.apache.james.mailets.configuration.CommonProcessors; import org.apache.james.mailets.configuration.MailetConfiguration; import org.apache.james.mailets.configuration.MailetContainer; import org.apache.james.mailets.configuration.ProcessorConfiguration; -import org.apache.james.utils.SMTPMessageSender; import org.apache.james.modules.MailboxProbeImpl; import org.apache.james.probe.DataProbe; +import org.apache.james.transport.mailets.LocalDelivery; +import org.apache.james.transport.mailets.RecipientRewriteTable; +import org.apache.james.transport.mailets.RemoteDelivery; +import org.apache.james.transport.mailets.RemoveMimeHeader; +import org.apache.james.transport.mailets.SMIMESign; +import org.apache.james.transport.mailets.SetMimeHeader; +import org.apache.james.transport.mailets.ToProcessor; +import org.apache.james.transport.matchers.All; +import org.apache.james.transport.matchers.HasMailAttribute; +import org.apache.james.transport.matchers.RecipientIsLocal; +import org.apache.james.transport.matchers.SMTPAuthSuccessful; +import org.apache.james.transport.matchers.SenderIsLocal; import org.apache.james.util.date.ZonedDateTimeProvider; -import org.apache.james.utils.IMAPMessageReader; import org.apache.james.utils.DataProbeImpl; +import org.apache.james.utils.IMAPMessageReader; +import org.apache.james.utils.SMTPMessageSender; import org.junit.After; import org.junit.Before; import org.junit.Rule; @@ -74,45 +87,46 @@ public class SMIMESignIntegrationTest { .state("transport") .enableJmx(true) .addMailet(MailetConfiguration.builder() - .match("SMTPAuthSuccessful") - .clazz("SetMimeHeader") + .matcher(SMTPAuthSuccessful.class) + .mailet(SetMimeHeader.class) .addProperty("name", "X-UserIsAuth") .addProperty("value", "true") .build()) .addMailet(MailetConfiguration.builder() - .match("HasMailAttribute=org.apache.james.SMIMECheckSignature") - .clazz("SetMimeHeader") + .matcher(HasMailAttribute.class) + .matcherCondition("org.apache.james.SMIMECheckSignature") + .mailet(SetMimeHeader.class) .addProperty("name", "X-WasSigned") .addProperty("value", "true") .build()) .addMailet(MailetConfiguration.builder() - .match("All") - .clazz("RemoveMimeHeader") + .matcher(All.class) + .mailet(RemoveMimeHeader.class) .addProperty("name", "bcc") .build()) .addMailet(MailetConfiguration.builder() - .match("All") - .clazz("RecipientRewriteTable") + .matcher(All.class) + .mailet(RecipientRewriteTable.class) .build()) .addMailet(MailetConfiguration.builder() - .match("RecipientIsLocal") - .clazz("org.apache.james.jmap.mailet.VacationMailet") + .matcher(RecipientIsLocal.class) + .mailet(VacationMailet.class) .build()) .addMailet(MailetConfiguration.builder() - .clazz("SMIMESign") - .match("SenderIsLocal") + .mailet(SMIMESign.class) + .matcher(SenderIsLocal.class) .addProperty("keyStoreFileName", temporaryFolder.getRoot().getAbsoluteFile().getAbsolutePath() + "/conf/smime.p12") .addProperty("keyStorePassword", "secret") .addProperty("keyStoreType", "PKCS12") .addProperty("debug", "true") .build()) .addMailet(MailetConfiguration.builder() - .match("RecipientIsLocal") - .clazz("LocalDelivery") + .matcher(RecipientIsLocal.class) + .mailet(LocalDelivery.class) .build()) .addMailet(MailetConfiguration.builder() - .match("SMTPAuthSuccessful") - .clazz("RemoteDelivery") + .matcher(SMTPAuthSuccessful.class) + .mailet(RemoteDelivery.class) .addProperty("outgoingQueue", "outgoing") .addProperty("delayTime", "5000, 100000, 500000") .addProperty("maxRetries", "25") @@ -122,8 +136,8 @@ public class SMIMESignIntegrationTest { .addProperty("bounceProcessor", "bounces") .build()) .addMailet(MailetConfiguration.builder() - .match("All") - .clazz("ToProcessor") + .matcher(All.class) + .mailet(ToProcessor.class) .addProperty("processor", "relay-denied") .build()) .build()) http://git-wip-us.apache.org/repos/asf/james-project/blob/1fe32b91/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AmqpForwardAttachmentTest.java ---------------------------------------------------------------------- diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AmqpForwardAttachmentTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AmqpForwardAttachmentTest.java index db43632..fd13da2 100644 --- a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AmqpForwardAttachmentTest.java +++ b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AmqpForwardAttachmentTest.java @@ -23,12 +23,15 @@ import static org.assertj.core.api.Assertions.assertThat; import javax.mail.internet.MimeMessage; +import org.apache.james.jmap.mailet.VacationMailet; import org.apache.james.mailbox.model.MailboxConstants; import org.apache.james.mailets.TemporaryJamesServer; import org.apache.james.mailets.configuration.CommonProcessors; import org.apache.james.mailets.configuration.MailetConfiguration; import org.apache.james.mailets.configuration.MailetContainer; import org.apache.james.mailets.configuration.ProcessorConfiguration; +import org.apache.james.transport.matchers.All; +import org.apache.james.transport.matchers.RecipientIsLocal; import org.apache.james.utils.SMTPMessageSender; import org.apache.james.modules.MailboxProbeImpl; import org.apache.james.probe.DataProbe; @@ -93,36 +96,36 @@ public class AmqpForwardAttachmentTest { .state("transport") .enableJmx(true) .addMailet(MailetConfiguration.builder() - .match("All") - .clazz("RemoveMimeHeader") + .matcher(All.class) + .mailet(RemoveMimeHeader.class) .addProperty("name", "bcc") .build()) .addMailet(MailetConfiguration.builder() - .match("All") - .clazz("StripAttachment") - .addProperty("attribute", MAIL_ATTRIBUTE) - .addProperty("pattern", ".*\\.txt") + .matcher(All.class) + .mailet(StripAttachment.class) + .addProperty(StripAttachment.ATTRIBUTE_PARAMETER_NAME, MAIL_ATTRIBUTE) + .addProperty(StripAttachment.PATTERN_PARAMETER_NAME, ".*\\.txt") .build()) .addMailet(MailetConfiguration.builder() - .match("All") - .clazz("MimeDecodingMailet") - .addProperty("attribute", MAIL_ATTRIBUTE) + .matcher(All.class) + .mailet(MimeDecodingMailet.class) + .addProperty(MimeDecodingMailet.ATTRIBUTE_PARAMETER_NAME, MAIL_ATTRIBUTE) .build()) .addMailet(MailetConfiguration.builder() - .match("All") - .clazz("AmqpForwardAttribute") - .addProperty("uri", amqpRule.getAmqpUri()) - .addProperty("exchange", EXCHANGE_NAME) - .addProperty("attribute", MAIL_ATTRIBUTE) - .addProperty("routing_key", ROUTING_KEY) + .matcher(All.class) + .mailet(AmqpForwardAttribute.class) + .addProperty(AmqpForwardAttribute.URI_PARAMETER_NAME, amqpRule.getAmqpUri()) + .addProperty(AmqpForwardAttribute.EXCHANGE_PARAMETER_NAME, EXCHANGE_NAME) + .addProperty(AmqpForwardAttribute.ATTRIBUTE_PARAMETER_NAME, MAIL_ATTRIBUTE) + .addProperty(AmqpForwardAttribute.ROUTING_KEY_PARAMETER_NAME, ROUTING_KEY) .build()) .addMailet(MailetConfiguration.builder() - .match("RecipientIsLocal") - .clazz("org.apache.james.jmap.mailet.VacationMailet") + .matcher(RecipientIsLocal.class) + .mailet(VacationMailet.class) .build()) .addMailet(MailetConfiguration.builder() - .match("RecipientIsLocal") - .clazz("LocalDelivery") + .matcher(RecipientIsLocal.class) + .mailet(LocalDelivery.class) .build()) .build()) .build(); http://git-wip-us.apache.org/repos/asf/james-project/blob/1fe32b91/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/GroupMappingTest.java ---------------------------------------------------------------------- diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/GroupMappingTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/GroupMappingTest.java index cd2e86d..8e773ae 100644 --- a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/GroupMappingTest.java +++ b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/GroupMappingTest.java @@ -31,6 +31,7 @@ import javax.mail.internet.MimeMessage; import org.apache.james.core.MailAddress; import org.apache.james.dnsservice.api.DNSService; import org.apache.james.dnsservice.api.InMemoryDNSService; +import org.apache.james.jmap.mailet.VacationMailet; import org.apache.james.mailbox.model.MailboxConstants; import org.apache.james.mailets.TemporaryJamesServer; import org.apache.james.mailets.configuration.CommonProcessors; @@ -39,6 +40,10 @@ import org.apache.james.mailets.configuration.MailetContainer; import org.apache.james.mailets.configuration.ProcessorConfiguration; import org.apache.james.modules.MailboxProbeImpl; import org.apache.james.probe.DataProbe; +import org.apache.james.transport.matchers.All; +import org.apache.james.transport.matchers.RecipientIsLocal; +import org.apache.james.transport.matchers.RelayLimit; +import org.apache.james.transport.matchers.SMTPAuthSuccessful; import org.apache.james.util.streams.SwarmGenericContainer; import org.apache.james.utils.DataProbeImpl; import org.apache.james.utils.IMAPMessageReader; @@ -105,21 +110,22 @@ public class GroupMappingTest { .state("root") .enableJmx(true) .addMailet(MailetConfiguration.builder() - .match("All") - .clazz("PostmasterAlias") + .matcher(All.class) + .mailet(PostmasterAlias.class) .build()) .addMailet(MailetConfiguration.builder() - .match("RelayLimit=30") - .clazz("Null") + .matcher(RelayLimit.class) + .matcherCondition("30") + .mailet(Null.class) .build()) .addMailet(MailetConfiguration.builder() - .match("SMTPAuthSuccessful") - .clazz("ToProcessor") + .matcher(SMTPAuthSuccessful.class) + .mailet(ToProcessor.class) .addProperty("processor", "transport") .build()) .addMailet(MailetConfiguration.builder() - .match("All") - .clazz("ToProcessor") + .matcher(All.class) + .mailet(ToProcessor.class) .addProperty("processor", "transport") .build()) .build()) @@ -127,25 +133,25 @@ public class GroupMappingTest { .addProcessor(ProcessorConfiguration.transport() .enableJmx(true) .addMailet(MailetConfiguration.builder() - .match("All") - .clazz("RemoveMimeHeader") + .matcher(All.class) + .mailet(RemoveMimeHeader.class) .addProperty("name", "bcc") .build()) .addMailet(MailetConfiguration.builder() - .match("All") - .clazz("RecipientRewriteTable") + .matcher(All.class) + .mailet(RecipientRewriteTable.class) .build()) .addMailet(MailetConfiguration.builder() - .match("RecipientIsLocal") - .clazz("org.apache.james.jmap.mailet.VacationMailet") + .matcher(RecipientIsLocal.class) + .mailet(VacationMailet.class) .build()) .addMailet(MailetConfiguration.builder() - .match("RecipientIsLocal") - .clazz("LocalDelivery") + .matcher(RecipientIsLocal.class) + .mailet(LocalDelivery.class) .build()) .addMailet(MailetConfiguration.builder() - .match("All") - .clazz("RemoteDelivery") + .matcher(All.class) + .mailet(RemoteDelivery.class) .addProperty("outgoingQueue", "outgoing") .addProperty("delayTime", "5000, 100000, 500000") .addProperty("maxRetries", "25") http://git-wip-us.apache.org/repos/asf/james-project/blob/1fe32b91/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ICSAttachmentWorkflowTest.java ---------------------------------------------------------------------- diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ICSAttachmentWorkflowTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ICSAttachmentWorkflowTest.java index 5c6e777..3a9f664 100644 --- a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ICSAttachmentWorkflowTest.java +++ b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ICSAttachmentWorkflowTest.java @@ -25,21 +25,25 @@ import java.util.Optional; import javax.mail.internet.MimeMessage; +import org.apache.james.core.MailAddress; +import org.apache.james.jmap.mailet.TextCalendarBodyToAttachment; +import org.apache.james.jmap.mailet.VacationMailet; import org.apache.james.mailbox.model.MailboxConstants; import org.apache.james.mailets.TemporaryJamesServer; import org.apache.james.mailets.configuration.CommonProcessors; import org.apache.james.mailets.configuration.MailetConfiguration; import org.apache.james.mailets.configuration.MailetContainer; import org.apache.james.mailets.configuration.ProcessorConfiguration; -import org.apache.james.utils.SMTPMessageSender; import org.apache.james.modules.MailboxProbeImpl; import org.apache.james.probe.DataProbe; import org.apache.james.transport.mailets.amqp.AmqpRule; +import org.apache.james.transport.matchers.All; +import org.apache.james.transport.matchers.RecipientIsLocal; import org.apache.james.util.streams.SwarmGenericContainer; import org.apache.james.utils.DataProbeImpl; import org.apache.james.utils.IMAPMessageReader; +import org.apache.james.utils.SMTPMessageSender; import org.apache.mailet.Mail; -import org.apache.james.core.MailAddress; import org.apache.mailet.base.test.FakeMail; import org.apache.mailet.base.test.MimeMessageBuilder; import org.junit.After; @@ -457,58 +461,58 @@ public class ICSAttachmentWorkflowTest { .state("transport") .enableJmx(true) .addMailet(MailetConfiguration.builder() - .match("All") - .clazz("RemoveMimeHeader") + .matcher(All.class) + .mailet(RemoveMimeHeader.class) .addProperty("name", "bcc") .build()) .addMailet(MailetConfiguration.builder() - .match("All") - .clazz("StripAttachment") + .matcher(All.class) + .mailet(StripAttachment.class) .addProperty("attribute", MAIL_ATTRIBUTE) .addProperty("pattern", ".*") .build()) .addMailet(MailetConfiguration.builder() - .match("All") - .clazz("MimeDecodingMailet") + .matcher(All.class) + .mailet(MimeDecodingMailet.class) .addProperty("attribute", MAIL_ATTRIBUTE) .build()) .addMailet(MailetConfiguration.builder() - .match("All") - .clazz("ICalendarParser") + .matcher(All.class) + .mailet(ICalendarParser.class) .addProperty("sourceAttribute", MAIL_ATTRIBUTE) .addProperty("destinationAttribute", PARSED_ICAL_MAIL_ATTRIBUTE) .build()) .addMailet(MailetConfiguration.builder() - .match("All") - .clazz("ICALToHeader") + .matcher(All.class) + .mailet(ICALToHeader.class) .addProperty("attribute", PARSED_ICAL_MAIL_ATTRIBUTE) .build()) .addMailet(MailetConfiguration.builder() - .match("All") - .clazz("ICALToJsonAttribute") + .matcher(All.class) + .mailet(ICALToJsonAttribute.class) .addProperty("source", PARSED_ICAL_MAIL_ATTRIBUTE) .addProperty("rawSource", MAIL_ATTRIBUTE) .addProperty("destination", JSON_MAIL_ATTRIBUTE) .build()) .addMailet(MailetConfiguration.builder() - .match("All") - .clazz("org.apache.james.jmap.mailet.TextCalendarBodyToAttachment") - .build()) + .matcher(All.class) + .mailet(TextCalendarBodyToAttachment.class) + .build()) .addMailet(MailetConfiguration.builder() - .match("All") - .clazz("AmqpForwardAttribute") + .matcher(All.class) + .mailet(AmqpForwardAttribute.class) .addProperty("uri", amqpRule.getAmqpUri()) .addProperty("exchange", EXCHANGE_NAME) .addProperty("attribute", JSON_MAIL_ATTRIBUTE) .addProperty("routing_key", ROUTING_KEY) .build()) .addMailet(MailetConfiguration.builder() - .match("RecipientIsLocal") - .clazz("org.apache.james.jmap.mailet.VacationMailet") + .matcher(RecipientIsLocal.class) + .mailet(VacationMailet.class) .build()) .addMailet(MailetConfiguration.builder() - .match("RecipientIsLocal") - .clazz("LocalDelivery") + .matcher(RecipientIsLocal.class) + .mailet(LocalDelivery.class) .build()) .build()) .build(); http://git-wip-us.apache.org/repos/asf/james-project/blob/1fe32b91/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/StripAttachmentTest.java ---------------------------------------------------------------------- diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/StripAttachmentTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/StripAttachmentTest.java index 24a3ecb..132b661 100644 --- a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/StripAttachmentTest.java +++ b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/StripAttachmentTest.java @@ -23,19 +23,22 @@ import static org.assertj.core.api.Assertions.assertThat; import javax.mail.internet.MimeMessage; +import org.apache.james.core.MailAddress; +import org.apache.james.jmap.mailet.VacationMailet; import org.apache.james.mailbox.model.MailboxConstants; import org.apache.james.mailets.TemporaryJamesServer; import org.apache.james.mailets.configuration.CommonProcessors; import org.apache.james.mailets.configuration.MailetConfiguration; import org.apache.james.mailets.configuration.MailetContainer; import org.apache.james.mailets.configuration.ProcessorConfiguration; -import org.apache.james.utils.SMTPMessageSender; import org.apache.james.modules.MailboxProbeImpl; import org.apache.james.probe.DataProbe; -import org.apache.james.utils.IMAPMessageReader; +import org.apache.james.transport.matchers.All; +import org.apache.james.transport.matchers.RecipientIsLocal; import org.apache.james.utils.DataProbeImpl; +import org.apache.james.utils.IMAPMessageReader; +import org.apache.james.utils.SMTPMessageSender; import org.apache.mailet.Mail; -import org.apache.james.core.MailAddress; import org.apache.mailet.base.test.FakeMail; import org.apache.mailet.base.test.MimeMessageBuilder; import org.junit.After; @@ -77,33 +80,33 @@ public class StripAttachmentTest { .state("transport") .enableJmx(true) .addMailet(MailetConfiguration.builder() - .match("All") - .clazz("RemoveMimeHeader") + .matcher(All.class) + .mailet(RemoveMimeHeader.class) .addProperty("name", "bcc") .build()) .addMailet(MailetConfiguration.builder() - .match("All") - .clazz("StripAttachment") + .matcher(All.class) + .mailet(StripAttachment.class) .addProperty("attribute", "my.attribute") .addProperty("remove", "all") .addProperty("notpattern", ".*.tmp.*") .build()) .addMailet(MailetConfiguration.builder() - .match("All") - .clazz("OnlyText") + .matcher(All.class) + .mailet(OnlyText.class) .build()) .addMailet(MailetConfiguration.builder() - .match("All") - .clazz("RecoverAttachment") + .matcher(All.class) + .mailet(RecoverAttachment.class) .addProperty("attribute", "my.attribute") .build()) .addMailet(MailetConfiguration.builder() - .match("RecipientIsLocal") - .clazz("org.apache.james.jmap.mailet.VacationMailet") + .matcher(RecipientIsLocal.class) + .mailet(VacationMailet.class) .build()) .addMailet(MailetConfiguration.builder() - .match("RecipientIsLocal") - .clazz("LocalDelivery") + .matcher(RecipientIsLocal.class) + .mailet(LocalDelivery.class) .build()) .build()) .build(); --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org