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 d987d40135b128ca494e54c93cc3ab319e1c30cd
Author: Benoit Tellier <[email protected]>
AuthorDate: Fri Nov 13 17:02:44 2020 +0700

    JAMES-3444 Allow moving JMAP mailets in a local-delivery processor
---
 .../api/src/main/java/org/apache/mailet/Mail.java  |  18 ++++
 .../modules/server/CamelMailetContainerModule.java | 101 ++++++++++++++++-----
 .../server/CamelMailetContainerModuleTest.java     |   2 +-
 .../org/apache/james/jmap/draft/JMAPModule.java    |  30 ++++--
 .../james/jmap/draft/MailetPreconditionTest.java   |  49 ++++++----
 5 files changed, 148 insertions(+), 52 deletions(-)

diff --git a/mailet/api/src/main/java/org/apache/mailet/Mail.java 
b/mailet/api/src/main/java/org/apache/mailet/Mail.java
index 2250811..3b37521 100644
--- a/mailet/api/src/main/java/org/apache/mailet/Mail.java
+++ b/mailet/api/src/main/java/org/apache/mailet/Mail.java
@@ -78,10 +78,28 @@ import com.google.common.collect.ImmutableMap;
  * {@link #removeAllAttributes() all} attributes of a Mail instance.
  */
 public interface Mail extends Serializable, Cloneable {
+    /**
+     * "ghost" state applies to mail that should no longer be processed
+     */
     String GHOST = "ghost";
+    /**
+     * "root" state applies to mail entering mail processing
+     */
     String DEFAULT = "root";
+    /**
+     * "error" state applies to mail whose processing fails. This is the 
default
+     * way of handling errors.
+     */
     String ERROR = "error";
+    /**
+     * "transport" is commonly used for expressing decisions taken on an email
+     * (whether to relay it? Deliver it to local recipients? Etc...).
+     */
     String TRANSPORT = "transport";
+    /**
+     * "local-delivery" is commonly used operations to perform for local 
recipients upon receiving emails.
+     */
+    String LOCAL_DELIVERY = "local-delivery";
 
     AttributeName SMTP_AUTH_USER = 
AttributeName.of("org.apache.james.SMTPAuthUser");
     AttributeName MAILET_ERROR = 
AttributeName.of("org.apache.james.MailetError");
diff --git 
a/server/container/guice/mailet/src/main/java/org/apache/james/modules/server/CamelMailetContainerModule.java
 
b/server/container/guice/mailet/src/main/java/org/apache/james/modules/server/CamelMailetContainerModule.java
index 532c1cd..68c7d06 100644
--- 
a/server/container/guice/mailet/src/main/java/org/apache/james/modules/server/CamelMailetContainerModule.java
+++ 
b/server/container/guice/mailet/src/main/java/org/apache/james/modules/server/CamelMailetContainerModule.java
@@ -19,10 +19,12 @@
 
 package org.apache.james.modules.server;
 
-import java.util.List;
+import java.util.Arrays;
+import java.util.Collection;
 import java.util.Optional;
 import java.util.Set;
 import java.util.function.Predicate;
+import java.util.stream.Stream;
 
 import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.impl.SimpleRegistry;
@@ -31,6 +33,7 @@ import 
org.apache.commons.configuration2.HierarchicalConfiguration;
 import org.apache.commons.configuration2.ex.ConfigurationException;
 import org.apache.commons.configuration2.ex.ConfigurationRuntimeException;
 import org.apache.commons.configuration2.tree.ImmutableNode;
+import org.apache.commons.lang3.tuple.Pair;
 import org.apache.james.lifecycle.api.Startable;
 import org.apache.james.mailetcontainer.AutomaticallySentMailDetectorImpl;
 import org.apache.james.mailetcontainer.api.MailProcessor;
@@ -59,8 +62,13 @@ import org.apache.mailet.base.AutomaticallySentMailDetector;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.github.steveash.guavate.Guavate;
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableListMultimap;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Multimap;
 import com.google.inject.AbstractModule;
 import com.google.inject.Inject;
 import com.google.inject.Provides;
@@ -73,7 +81,8 @@ public class CamelMailetContainerModule extends 
AbstractModule {
 
     private static final Logger LOGGER = 
LoggerFactory.getLogger(CamelMailetContainerModule.class);
 
-    public static final TransportProcessorCheck.Impl BCC_Check = new 
TransportProcessorCheck.Impl(
+    public static final ProcessorsCheck.Impl BCC_Check = new 
ProcessorsCheck.Impl(
+        "transport",
         All.class,
         RemoveMimeHeader.class,
         pair -> 
pair.getMailet().getMailetConfig().getInitParameter("name").equals("bcc"),
@@ -101,7 +110,7 @@ public class CamelMailetContainerModule extends 
AbstractModule {
         Multibinder<InitializationOperation> initialisationOperations = 
Multibinder.newSetBinder(binder(), InitializationOperation.class);
         
initialisationOperations.addBinding().to(MailetModuleInitializationOperation.class);
 
-        Multibinder<CamelMailetContainerModule.TransportProcessorCheck> 
transportProcessorChecks = Multibinder.newSetBinder(binder(), 
CamelMailetContainerModule.TransportProcessorCheck.class);
+        Multibinder<ProcessorsCheck> transportProcessorChecks = 
Multibinder.newSetBinder(binder(), ProcessorsCheck.class);
         transportProcessorChecks.addBinding().toInstance(BCC_Check);
     }
 
@@ -157,18 +166,18 @@ public class CamelMailetContainerModule extends 
AbstractModule {
         private final ConfigurationProvider configurationProvider;
         private final CamelCompositeProcessor camelCompositeProcessor;
         private final DefaultProcessorsConfigurationSupplier 
defaultProcessorsConfigurationSupplier;
-        private final Set<TransportProcessorCheck> transportProcessorCheckSet;
+        private final Set<ProcessorsCheck> processorsCheckSet;
         private final DefaultCamelContext camelContext;
 
         @Inject
         public MailetModuleInitializationOperation(ConfigurationProvider 
configurationProvider,
                                                    CamelCompositeProcessor 
camelCompositeProcessor,
-                                                   
Set<TransportProcessorCheck> transportProcessorCheckSet,
+                                                   Set<ProcessorsCheck> 
processorsCheckSet,
                                                    
DefaultProcessorsConfigurationSupplier defaultProcessorsConfigurationSupplier,
                                                    DefaultCamelContext 
camelContext) {
             this.configurationProvider = configurationProvider;
             this.camelCompositeProcessor = camelCompositeProcessor;
-            this.transportProcessorCheckSet = transportProcessorCheckSet;
+            this.processorsCheckSet = processorsCheckSet;
             this.defaultProcessorsConfigurationSupplier = 
defaultProcessorsConfigurationSupplier;
             this.camelContext = camelContext;
         }
@@ -197,15 +206,22 @@ public class CamelMailetContainerModule extends 
AbstractModule {
         }
 
         private void checkProcessors() throws ConfigurationException {
-            MailProcessor mailProcessor = 
Optional.ofNullable(camelCompositeProcessor.getProcessor("transport"))
-                .orElseThrow(() -> new RuntimeException("JMAP needs a 
transport processor"));
-            if (mailProcessor instanceof CamelMailetProcessor) {
-                List<MatcherMailetPair> matcherMailetPairs = 
((CamelMailetProcessor) mailProcessor).getPairs();
-                for (TransportProcessorCheck check : 
transportProcessorCheckSet) {
-                    check.check(matcherMailetPairs);
-                }
-            } else {
-                throw new RuntimeException("Can not perform checks as 
transport processor is not an instance of " + MailProcessor.class);
+            ImmutableListMultimap<String, MatcherMailetPair> processors = 
Arrays.stream(camelCompositeProcessor.getProcessorStates())
+                .flatMap(state -> {
+                    MailProcessor processor = 
camelCompositeProcessor.getProcessor(state);
+                    if (processor instanceof CamelMailetProcessor) {
+                        CamelMailetProcessor camelProcessor = 
(CamelMailetProcessor) processor;
+                        return camelProcessor.getPairs().stream()
+                            .map(pair -> Pair.of(state, pair));
+                    } else {
+                        throw new RuntimeException("Can not perform checks as 
transport processor is not an instance of " + MailProcessor.class);
+                    }
+                })
+                .collect(Guavate.toImmutableListMultimap(
+                    Pair::getKey,
+                    Pair::getValue));
+            for (ProcessorsCheck check : processorsCheckSet) {
+                check.check(processors);
             }
         }
 
@@ -216,24 +232,55 @@ public class CamelMailetContainerModule extends 
AbstractModule {
     }
 
     @FunctionalInterface
-    public interface TransportProcessorCheck {
-        void check(List<MatcherMailetPair> pairs) throws 
ConfigurationException;
+    public interface ProcessorsCheck {
+        void check(Multimap<String, MatcherMailetPair> processors) throws 
ConfigurationException;
+
+        class Or implements ProcessorsCheck {
+            public static ProcessorsCheck of(ProcessorsCheck... checks) {
+                return new Or(ImmutableSet.copyOf(checks));
+            }
+
+            private final Set<ProcessorsCheck> checks;
+
+            public Or(Set<ProcessorsCheck> checks) {
+                Preconditions.checkArgument(checks.size() > 0);
+                this.checks = checks;
+            }
 
-        class Impl implements TransportProcessorCheck {
+            @Override
+            public void check(Multimap<String, MatcherMailetPair> processors) 
throws ConfigurationException {
+                ImmutableList<ConfigurationException> failures = 
checks.stream().flatMap(check -> {
+                    try {
+                        check.check(processors);
+                        return Stream.empty();
+                    } catch (ConfigurationException e) {
+                        return Stream.of(e);
+                    }
+                }).collect(Guavate.toImmutableList());
+
+                if (failures.size() == checks.size()) {
+                    throw failures.get(0);
+                }
+            }
+        }
+
+        class Impl implements ProcessorsCheck {
+            private final String processorName;
             private final Class<? extends Matcher> matcherClass;
             private final Class<? extends Mailet> mailetClass;
             private final Optional<Predicate<? super MatcherMailetPair>> 
additionalFilter;
             private final Optional<String> additionalErrorMessage;
 
-            public Impl(Class<? extends Matcher> matcherClass, Class<? extends 
Mailet> mailetClass) {
-                this(matcherClass, mailetClass, Optional.empty(), 
Optional.empty());
+            public Impl(String processorName, Class<? extends Matcher> 
matcherClass, Class<? extends Mailet> mailetClass) {
+                this(processorName, matcherClass, mailetClass, 
Optional.empty(), Optional.empty());
             }
 
-            public Impl(Class<? extends Matcher> matcherClass, Class<? extends 
Mailet> mailetClass, Predicate<? super MatcherMailetPair> additionalFilter, 
String additionalErrorMessage) {
-                this(matcherClass, mailetClass, Optional.of(additionalFilter), 
Optional.of(additionalErrorMessage));
+            public Impl(String processorName, Class<? extends Matcher> 
matcherClass, Class<? extends Mailet> mailetClass, Predicate<? super 
MatcherMailetPair> additionalFilter, String additionalErrorMessage) {
+                this(processorName, matcherClass, mailetClass, 
Optional.of(additionalFilter), Optional.of(additionalErrorMessage));
             }
 
-            private Impl(Class<? extends Matcher> matcherClass, Class<? 
extends Mailet> mailetClass, Optional<Predicate<? super MatcherMailetPair>> 
additionalFilter, Optional<String> additionalErrorMessage) {
+            private Impl(String processorName, Class<? extends Matcher> 
matcherClass, Class<? extends Mailet> mailetClass, Optional<Predicate<? super 
MatcherMailetPair>> additionalFilter, Optional<String> additionalErrorMessage) {
+                this.processorName = processorName;
                 this.matcherClass = matcherClass;
                 this.mailetClass = mailetClass;
                 this.additionalFilter = additionalFilter;
@@ -241,14 +288,18 @@ public class CamelMailetContainerModule extends 
AbstractModule {
             }
 
             @Override
-            public void check(List<MatcherMailetPair> pairs) throws 
ConfigurationException {
+            public void check(Multimap<String, MatcherMailetPair> processors) 
throws ConfigurationException {
+                Collection<MatcherMailetPair> pairs = 
processors.get(processorName);
+                if (pairs == null) {
+                    throw new ConfigurationException(processorName + " is 
missing");
+                }
                 Preconditions.checkNotNull(pairs);
                 pairs.stream()
                     .filter(pair -> 
pair.getMailet().getClass().equals(mailetClass))
                     .filter(pair -> 
pair.getMatcher().getClass().equals(matcherClass))
                     .filter(additionalFilter.orElse(any -> true))
                     .findAny()
-                    .orElseThrow(() -> new ConfigurationException("Missing " + 
mailetClass.getName() + " in mailets configuration (mailetcontainer -> 
processors -> transport). " +
+                    .orElseThrow(() -> new ConfigurationException("Missing " + 
mailetClass.getName() + " in mailets configuration (mailetcontainer -> 
processors -> " + processorName + "). " +
                         additionalErrorMessage.orElse("")));
             }
         }
diff --git 
a/server/container/guice/mailet/src/test/java/org/apache/james/modules/server/CamelMailetContainerModuleTest.java
 
b/server/container/guice/mailet/src/test/java/org/apache/james/modules/server/CamelMailetContainerModuleTest.java
index c740f49..93468b5 100644
--- 
a/server/container/guice/mailet/src/test/java/org/apache/james/modules/server/CamelMailetContainerModuleTest.java
+++ 
b/server/container/guice/mailet/src/test/java/org/apache/james/modules/server/CamelMailetContainerModuleTest.java
@@ -43,7 +43,7 @@ import com.google.common.collect.ImmutableSet;
 
 class CamelMailetContainerModuleTest {
 
-    public static final 
ImmutableSet<CamelMailetContainerModule.TransportProcessorCheck> 
NO_TRANSPORT_CHECKS = ImmutableSet.of();
+    public static final 
ImmutableSet<CamelMailetContainerModule.ProcessorsCheck> NO_TRANSPORT_CHECKS = 
ImmutableSet.of();
 
     @Test
     void getMailetContextConfigurationShouldReturnEmptyWhenNoContextSection() 
throws Exception {
diff --git 
a/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/draft/JMAPModule.java
 
b/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/draft/JMAPModule.java
index 7acbe92..934da8e 100644
--- 
a/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/draft/JMAPModule.java
+++ 
b/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/draft/JMAPModule.java
@@ -50,10 +50,12 @@ import org.apache.james.mailbox.events.MailboxListener;
 import org.apache.james.modules.server.CamelMailetContainerModule;
 import org.apache.james.queue.api.MailQueueItemDecoratorFactory;
 import org.apache.james.server.core.configuration.FileConfigurationProvider;
+import org.apache.james.transport.matchers.All;
 import org.apache.james.transport.matchers.RecipientIsLocal;
 import org.apache.james.util.Port;
 import org.apache.james.util.html.HtmlTextExtractor;
 import org.apache.james.utils.PropertiesProvider;
+import org.apache.mailet.Mail;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -79,14 +81,26 @@ public class JMAPModule extends AbstractModule {
                 throw new RuntimeException(e);
             }
         };
-    public static final CamelMailetContainerModule.TransportProcessorCheck 
VACATION_MAILET_CHECK =
-        new CamelMailetContainerModule.TransportProcessorCheck.Impl(
+    public static final CamelMailetContainerModule.ProcessorsCheck 
VACATION_MAILET_CHECK =
+        CamelMailetContainerModule.ProcessorsCheck.Or.of(
+            new CamelMailetContainerModule.ProcessorsCheck.Impl(
+                Mail.TRANSPORT,
+                RecipientIsLocal.class,
+                VacationMailet.class),
+            new CamelMailetContainerModule.ProcessorsCheck.Impl(
+                Mail.LOCAL_DELIVERY,
+                All.class,
+                VacationMailet.class));
+    public static final CamelMailetContainerModule.ProcessorsCheck 
FILTERING_MAILET_CHECK =
+        CamelMailetContainerModule.ProcessorsCheck.Or.of(
+        new CamelMailetContainerModule.ProcessorsCheck.Impl(
+            Mail.TRANSPORT,
             RecipientIsLocal.class,
-            VacationMailet.class);
-    public static final CamelMailetContainerModule.TransportProcessorCheck 
FILTERING_MAILET_CHECK =
-        new CamelMailetContainerModule.TransportProcessorCheck.Impl(
-            RecipientIsLocal.class,
-            JMAPFiltering.class);
+            JMAPFiltering.class),
+        new CamelMailetContainerModule.ProcessorsCheck.Impl(
+            Mail.LOCAL_DELIVERY,
+            All.class,
+            JMAPFiltering.class));
 
     @Override
     protected void configure() {
@@ -104,7 +118,7 @@ public class JMAPModule extends AbstractModule {
         bind(HtmlTextExtractor.class).to(JsoupHtmlTextExtractor.class);
         Multibinder.newSetBinder(binder(), 
StartUpCheck.class).addBinding().to(RequiredCapabilitiesStartUpCheck.class);
 
-        Multibinder<CamelMailetContainerModule.TransportProcessorCheck> 
transportProcessorChecks = Multibinder.newSetBinder(binder(), 
CamelMailetContainerModule.TransportProcessorCheck.class);
+        Multibinder<CamelMailetContainerModule.ProcessorsCheck> 
transportProcessorChecks = Multibinder.newSetBinder(binder(), 
CamelMailetContainerModule.ProcessorsCheck.class);
         
transportProcessorChecks.addBinding().toInstance(VACATION_MAILET_CHECK);
         
transportProcessorChecks.addBinding().toInstance(FILTERING_MAILET_CHECK);
 
diff --git 
a/server/container/guice/protocols/jmap/src/test/java/org/apache/james/jmap/draft/MailetPreconditionTest.java
 
b/server/container/guice/protocols/jmap/src/test/java/org/apache/james/jmap/draft/MailetPreconditionTest.java
index 228538c..7706911 100644
--- 
a/server/container/guice/protocols/jmap/src/test/java/org/apache/james/jmap/draft/MailetPreconditionTest.java
+++ 
b/server/container/guice/protocols/jmap/src/test/java/org/apache/james/jmap/draft/MailetPreconditionTest.java
@@ -38,6 +38,7 @@ import org.apache.mailet.base.test.FakeMailetConfig;
 import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
 
+import com.google.common.collect.ImmutableMultimap;
 import com.google.common.collect.Lists;
 
 class MailetPreconditionTest {
@@ -49,7 +50,7 @@ class MailetPreconditionTest {
     class VacationMailetCheck {
         @Test
         void vacationMailetCheckShouldThrowOnEmptyList() {
-            assertThatThrownBy(() -> 
JMAPModule.VACATION_MAILET_CHECK.check(Lists.newArrayList()))
+            assertThatThrownBy(() -> 
JMAPModule.VACATION_MAILET_CHECK.check(ImmutableMultimap.of()))
                 .isInstanceOf(ConfigurationException.class);
         }
 
@@ -61,25 +62,29 @@ class MailetPreconditionTest {
 
         @Test
         void vacationMailetCheckShouldThrowOnWrongMatcher() {
-            List<MatcherMailetPair> pairs = Lists.newArrayList(new 
MatcherMailetPair(new All(), new VacationMailet(null, null, null, null, null)));
-
-            assertThatThrownBy(() -> 
JMAPModule.VACATION_MAILET_CHECK.check(pairs))
+            assertThatThrownBy(() -> 
JMAPModule.VACATION_MAILET_CHECK.check(ImmutableMultimap.of(
+                "transport", new MatcherMailetPair(new All(), new 
VacationMailet(null, null, null, null, null)))))
                 .isInstanceOf(ConfigurationException.class);
         }
 
         @Test
         void vacationMailetCheckShouldThrowOnWrongMailet() {
-            List<MatcherMailetPair> pairs = Lists.newArrayList(new 
MatcherMailetPair(new RecipientIsLocal(), new Null()));
-
-            assertThatThrownBy(() -> 
JMAPModule.VACATION_MAILET_CHECK.check(pairs))
+            assertThatThrownBy(() -> 
JMAPModule.VACATION_MAILET_CHECK.check(ImmutableMultimap.of(
+                "transport", new MatcherMailetPair(new All(), new Null()))))
                 .isInstanceOf(ConfigurationException.class);
         }
 
         @Test
         void vacationMailetCheckShouldNotThrowIfValidPairPresent() {
-            List<MatcherMailetPair> pairs = Lists.newArrayList(new 
MatcherMailetPair(new RecipientIsLocal(), new VacationMailet(null, null, null, 
null, null)));
+            assertThatCode(() -> 
JMAPModule.VACATION_MAILET_CHECK.check(ImmutableMultimap.of(
+                "transport", new MatcherMailetPair(new RecipientIsLocal(), new 
VacationMailet(null, null, null, null, null)))))
+                .doesNotThrowAnyException();
+        }
 
-            assertThatCode(() -> JMAPModule.VACATION_MAILET_CHECK.check(pairs))
+        @Test
+        void vacationMailetCheckShouldSupportLocalDeliveryProcessor() {
+            assertThatCode(() -> 
JMAPModule.VACATION_MAILET_CHECK.check(ImmutableMultimap.of(
+                "local-delivery", new MatcherMailetPair(new All(), new 
VacationMailet(null, null, null, null, null)))))
                 .doesNotThrowAnyException();
         }
     }
@@ -88,7 +93,7 @@ class MailetPreconditionTest {
     class FilteringMailetCheck {
         @Test
         void filteringMailetCheckShouldThrowOnEmptyList() {
-            assertThatThrownBy(() -> 
JMAPModule.FILTERING_MAILET_CHECK.check(Lists.newArrayList()))
+            assertThatThrownBy(() -> 
JMAPModule.FILTERING_MAILET_CHECK.check(ImmutableMultimap.of()))
                 .isInstanceOf(ConfigurationException.class);
         }
 
@@ -100,7 +105,7 @@ class MailetPreconditionTest {
 
         @Test
         void filteringMailetCheckShouldThrowOnWrongMatcher() {
-            List<MatcherMailetPair> pairs = Lists.newArrayList(new 
MatcherMailetPair(new All(), new JMAPFiltering(null, null, null)));
+            ImmutableMultimap<String, MatcherMailetPair> pairs = 
ImmutableMultimap.of("tansport", new MatcherMailetPair(new All(), new 
JMAPFiltering(null, null, null)));
 
             assertThatThrownBy(() -> 
JMAPModule.FILTERING_MAILET_CHECK.check(pairs))
                 .isInstanceOf(ConfigurationException.class);
@@ -108,7 +113,7 @@ class MailetPreconditionTest {
 
         @Test
         void filteringMailetCheckShouldThrowOnWrongMailet() {
-            List<MatcherMailetPair> pairs = Lists.newArrayList(new 
MatcherMailetPair(new RecipientIsLocal(), new Null()));
+            ImmutableMultimap<String, MatcherMailetPair> pairs = 
ImmutableMultimap.of("tansport", new MatcherMailetPair(new All(), new Null()));
 
             assertThatThrownBy(() -> 
JMAPModule.FILTERING_MAILET_CHECK.check(pairs))
                 .isInstanceOf(ConfigurationException.class);
@@ -116,7 +121,15 @@ class MailetPreconditionTest {
 
         @Test
         void filteringMailetCheckShouldNotThrowIfValidPairPresent() {
-            List<MatcherMailetPair> pairs = Lists.newArrayList(new 
MatcherMailetPair(new RecipientIsLocal(), new JMAPFiltering(null, null, null)));
+            ImmutableMultimap<String, MatcherMailetPair> pairs = 
ImmutableMultimap.of("transport", new MatcherMailetPair(new RecipientIsLocal(), 
new JMAPFiltering(null, null, null)));
+
+            assertThatCode(() -> 
JMAPModule.FILTERING_MAILET_CHECK.check(pairs))
+                .doesNotThrowAnyException();
+        }
+
+        @Test
+        void filteringMailetCheckShouldSupportLocalDeliveryProcessor() {
+            ImmutableMultimap<String, MatcherMailetPair> pairs = 
ImmutableMultimap.of("local-delivery", new MatcherMailetPair(new All(), new 
JMAPFiltering(null, null, null)));
 
             assertThatCode(() -> 
JMAPModule.FILTERING_MAILET_CHECK.check(pairs))
                 .doesNotThrowAnyException();
@@ -127,7 +140,7 @@ class MailetPreconditionTest {
     class BccCheck {
         @Test
         void bccMailetCheckShouldThrowOnEmptyList() {
-            assertThatThrownBy(() -> 
CamelMailetContainerModule.BCC_Check.check(Lists.newArrayList()))
+            assertThatThrownBy(() -> 
CamelMailetContainerModule.BCC_Check.check(ImmutableMultimap.of()))
                 .isInstanceOf(ConfigurationException.class);
         }
 
@@ -139,7 +152,7 @@ class MailetPreconditionTest {
 
         @Test
         void bccMailetCheckShouldThrowOnWrongMatcher() {
-            List<MatcherMailetPair> pairs = Lists.newArrayList(new 
MatcherMailetPair(new RecipientIsLocal(), new RemoveMimeHeader()));
+            ImmutableMultimap<String, MatcherMailetPair> pairs = 
ImmutableMultimap.of("tansport", new MatcherMailetPair(new RecipientIsLocal(), 
new RemoveMimeHeader()));
 
             assertThatThrownBy(() -> 
CamelMailetContainerModule.BCC_Check.check(pairs))
                 .isInstanceOf(ConfigurationException.class);
@@ -147,7 +160,7 @@ class MailetPreconditionTest {
 
         @Test
         void bccMailetCheckShouldThrowOnWrongMailet() {
-            List<MatcherMailetPair> pairs = Lists.newArrayList(new 
MatcherMailetPair(new All(), new Null()));
+            ImmutableMultimap<String, MatcherMailetPair> pairs = 
ImmutableMultimap.of("tansport", new MatcherMailetPair(new All(), new Null()));
 
             assertThatThrownBy(() -> 
CamelMailetContainerModule.BCC_Check.check(pairs))
                 .isInstanceOf(ConfigurationException.class);
@@ -162,7 +175,7 @@ class MailetPreconditionTest {
                 .setProperty("name", "bad")
                 .build());
 
-            List<MatcherMailetPair> pairs = Lists.newArrayList(new 
MatcherMailetPair(new All(), removeMimeHeader));
+            ImmutableMultimap<String, MatcherMailetPair> pairs = 
ImmutableMultimap.of("tansport", new MatcherMailetPair(new All(), 
removeMimeHeader));
 
             assertThatThrownBy(() -> 
CamelMailetContainerModule.BCC_Check.check(pairs))
                 .isInstanceOf(ConfigurationException.class);
@@ -177,7 +190,7 @@ class MailetPreconditionTest {
                 .setProperty("name", BCC)
                 .build());
 
-            List<MatcherMailetPair> pairs = Lists.newArrayList(new 
MatcherMailetPair(new All(), removeMimeHeader));
+            ImmutableMultimap<String, MatcherMailetPair> pairs = 
ImmutableMultimap.of("transport", new MatcherMailetPair(new All(), 
removeMimeHeader));
             assertThatCode(() -> 
CamelMailetContainerModule.BCC_Check.check(pairs))
                 .doesNotThrowAnyException();
         }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to