This is an automated email from the ASF dual-hosted git repository. rcordier pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git
commit 9e7eefb22b3efc5c96896de40459865adeb5a3c4 Author: Gautier DI FOLCO <gdifo...@linagora.com> AuthorDate: Wed Feb 26 09:12:50 2020 +0100 JAMES-3067 Make RecipientRewriteTable configuration immutable --- .../data/CassandraRecipientRewriteTableModule.java | 8 +- .../data/JPARecipientRewriteTableModule.java | 8 +- .../james/modules/data/MemoryDataModule.java | 8 +- .../META-INF/org/apache/james/spring-server.xml | 2 +- .../java/org/apache/james/util/StreamUtils.java | 2 +- .../org/apache/james/util/StreamUtilsTest.java | 2 +- server/data/data-api/pom.xml | 9 + ...RewriteTable.java => AliasReverseResolver.java} | 2 +- .../james/rrt/api/RecipientRewriteTable.java | 2 +- .../api/RecipientRewriteTableConfiguration.java | 98 +++++++++ .../RecipientRewriteTableConfigurationTest.java | 83 ++++++++ ...ract.java => AliasReverseResolverContract.java} | 30 +-- .../apache/james/rrt/lib/CanSendFromContract.java | 6 +- .../CassandraRecipientRewriteTableV6Test.java | 1 - .../CassandraRecipientRewriteTableV7Test.java | 1 - .../james/rrt/cassandra/CassandraStepdefs.java | 5 +- .../rrt/file/XMLRecipientRewriteTableTest.java | 229 +++++++++++++++------ .../org/apache/james/rrt/file/XMLStepdefs.java | 4 +- .../rrt/jpa/JPARecipientRewriteTableTest.java | 2 - .../java/org/apache/james/rrt/jpa/JPAStepdefs.java | 6 +- .../rrt/lib/AbstractRecipientRewriteTable.java | 55 ++--- ...ableImpl.java => AliasReverseResolverImpl.java} | 12 +- .../org/apache/james/rrt/lib/CanSendFromImpl.java | 10 +- .../rrt/lib/AbstractRecipientRewriteTableTest.java | 44 ++-- .../james/rrt/lib/RewriteTablesStepdefs.java | 16 +- .../test/resources/cucumber/rewrite_tables.feature | 8 +- ...Test.java => AliasReverseResolverImplTest.java} | 16 +- .../apache/james/rrt/lib/CanSendFromImplTest.java | 10 +- .../apache/james/rrt/memory/InMemoryStepdefs.java | 5 +- .../memory/MemoryRecipientRewriteTableTest.java | 7 +- .../methods/SetMessagesCreationProcessorTest.java | 8 +- .../methods/SetMessagesUpdateProcessorTest.java | 8 +- .../apache/james/smtpserver/SMTPServerTest.java | 10 +- .../james/webadmin/routes/UserRoutesTest.java | 10 +- 34 files changed, 510 insertions(+), 217 deletions(-) diff --git a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraRecipientRewriteTableModule.java b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraRecipientRewriteTableModule.java index 4eaccfc..709a242 100644 --- a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraRecipientRewriteTableModule.java +++ b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraRecipientRewriteTableModule.java @@ -19,15 +19,15 @@ package org.apache.james.modules.data; import org.apache.james.backends.cassandra.components.CassandraModule; +import org.apache.james.rrt.api.AliasReverseResolver; import org.apache.james.rrt.api.CanSendFrom; import org.apache.james.rrt.api.RecipientRewriteTable; -import org.apache.james.rrt.api.ReverseRecipientRewriteTable; import org.apache.james.rrt.cassandra.CassandraMappingsSourcesDAO; import org.apache.james.rrt.cassandra.CassandraRRTModule; import org.apache.james.rrt.cassandra.CassandraRecipientRewriteTable; import org.apache.james.rrt.cassandra.CassandraRecipientRewriteTableDAO; +import org.apache.james.rrt.lib.AliasReverseResolverImpl; import org.apache.james.rrt.lib.CanSendFromImpl; -import org.apache.james.rrt.lib.ReverseRecipientRewriteTableImpl; import org.apache.james.server.core.configuration.ConfigurationProvider; import org.apache.james.utils.InitializationOperation; import org.apache.james.utils.InitilizationOperationBuilder; @@ -44,8 +44,8 @@ public class CassandraRecipientRewriteTableModule extends AbstractModule { bind(CassandraRecipientRewriteTableDAO.class).in(Scopes.SINGLETON); bind(CassandraMappingsSourcesDAO.class).in(Scopes.SINGLETON); bind(RecipientRewriteTable.class).to(CassandraRecipientRewriteTable.class); - bind(ReverseRecipientRewriteTableImpl.class).in(Scopes.SINGLETON); - bind(ReverseRecipientRewriteTable.class).to(ReverseRecipientRewriteTableImpl.class); + bind(AliasReverseResolverImpl.class).in(Scopes.SINGLETON); + bind(AliasReverseResolver.class).to(AliasReverseResolverImpl.class); bind(CanSendFromImpl.class).in(Scopes.SINGLETON); bind(CanSendFrom.class).to(CanSendFromImpl.class); Multibinder<CassandraModule> cassandraDataDefinitions = Multibinder.newSetBinder(binder(), CassandraModule.class); diff --git a/server/container/guice/jpa-common-guice/src/main/java/org/apache/james/modules/data/JPARecipientRewriteTableModule.java b/server/container/guice/jpa-common-guice/src/main/java/org/apache/james/modules/data/JPARecipientRewriteTableModule.java index a608538..f00af56 100644 --- a/server/container/guice/jpa-common-guice/src/main/java/org/apache/james/modules/data/JPARecipientRewriteTableModule.java +++ b/server/container/guice/jpa-common-guice/src/main/java/org/apache/james/modules/data/JPARecipientRewriteTableModule.java @@ -18,12 +18,12 @@ ****************************************************************/ package org.apache.james.modules.data; +import org.apache.james.rrt.api.AliasReverseResolver; import org.apache.james.rrt.api.CanSendFrom; import org.apache.james.rrt.api.RecipientRewriteTable; -import org.apache.james.rrt.api.ReverseRecipientRewriteTable; import org.apache.james.rrt.jpa.JPARecipientRewriteTable; +import org.apache.james.rrt.lib.AliasReverseResolverImpl; import org.apache.james.rrt.lib.CanSendFromImpl; -import org.apache.james.rrt.lib.ReverseRecipientRewriteTableImpl; import org.apache.james.server.core.configuration.ConfigurationProvider; import org.apache.james.utils.InitializationOperation; import org.apache.james.utils.InitilizationOperationBuilder; @@ -37,8 +37,8 @@ public class JPARecipientRewriteTableModule extends AbstractModule { public void configure() { bind(JPARecipientRewriteTable.class).in(Scopes.SINGLETON); bind(RecipientRewriteTable.class).to(JPARecipientRewriteTable.class); - bind(ReverseRecipientRewriteTableImpl.class).in(Scopes.SINGLETON); - bind(ReverseRecipientRewriteTable.class).to(ReverseRecipientRewriteTableImpl.class); + bind(AliasReverseResolverImpl.class).in(Scopes.SINGLETON); + bind(AliasReverseResolver.class).to(AliasReverseResolverImpl.class); bind(CanSendFromImpl.class).in(Scopes.SINGLETON); bind(CanSendFrom.class).to(CanSendFromImpl.class); } diff --git a/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/data/MemoryDataModule.java b/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/data/MemoryDataModule.java index d33c1ea..a99a408 100644 --- a/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/data/MemoryDataModule.java +++ b/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/data/MemoryDataModule.java @@ -32,11 +32,11 @@ import org.apache.james.mailrepository.memory.MailRepositoryStoreConfiguration; import org.apache.james.mailrepository.memory.MemoryMailRepository; import org.apache.james.mailrepository.memory.MemoryMailRepositoryUrlStore; import org.apache.james.modules.server.MailStoreRepositoryModule; +import org.apache.james.rrt.api.AliasReverseResolver; import org.apache.james.rrt.api.CanSendFrom; import org.apache.james.rrt.api.RecipientRewriteTable; -import org.apache.james.rrt.api.ReverseRecipientRewriteTable; +import org.apache.james.rrt.lib.AliasReverseResolverImpl; import org.apache.james.rrt.lib.CanSendFromImpl; -import org.apache.james.rrt.lib.ReverseRecipientRewriteTableImpl; import org.apache.james.rrt.memory.MemoryRecipientRewriteTable; import org.apache.james.server.core.configuration.ConfigurationProvider; import org.apache.james.user.api.UsersRepository; @@ -70,8 +70,8 @@ public class MemoryDataModule extends AbstractModule { bind(MemoryRecipientRewriteTable.class).in(Scopes.SINGLETON); bind(RecipientRewriteTable.class).to(MemoryRecipientRewriteTable.class); - bind(ReverseRecipientRewriteTableImpl.class).in(Scopes.SINGLETON); - bind(ReverseRecipientRewriteTable.class).to(ReverseRecipientRewriteTableImpl.class); + bind(AliasReverseResolverImpl.class).in(Scopes.SINGLETON); + bind(AliasReverseResolver.class).to(AliasReverseResolverImpl.class); bind(CanSendFromImpl.class).in(Scopes.SINGLETON); bind(CanSendFrom.class).to(CanSendFromImpl.class); diff --git a/server/container/spring/src/main/resources/META-INF/org/apache/james/spring-server.xml b/server/container/spring/src/main/resources/META-INF/org/apache/james/spring-server.xml index 8a37ab5..b4a0753 100644 --- a/server/container/spring/src/main/resources/META-INF/org/apache/james/spring-server.xml +++ b/server/container/spring/src/main/resources/META-INF/org/apache/james/spring-server.xml @@ -326,6 +326,6 @@ <bean id="jspfLogger" class="org.apache.james.smtpserver.fastfail.SPFHandler.SPFLogger"/> - <bean id="reverserecipientrewritetable" class="org.apache.james.rrt.lib.ReverseRecipientRewriteTableImpl" /> + <bean id="aliasreverseresolver" class="org.apache.james.rrt.lib.AliasReverseResolverImpl" /> <bean id="cansendfrom" class="org.apache.james.rrt.lib.CanSendFromImpl" /> </beans> diff --git a/server/container/util/src/main/java/org/apache/james/util/StreamUtils.java b/server/container/util/src/main/java/org/apache/james/util/StreamUtils.java index aea59a1..73452ad 100644 --- a/server/container/util/src/main/java/org/apache/james/util/StreamUtils.java +++ b/server/container/util/src/main/java/org/apache/james/util/StreamUtils.java @@ -69,7 +69,7 @@ public class StreamUtils { } public static <T> Stream<T> iterate(T seed, Long limit, Function<T, Stream<T>> generator) { - Preconditions.checkArgument(limit >= 0, "StreamUtils.iterate have a given limit ok '{}', while it should not be negative", limit); + Preconditions.checkArgument(limit >= 0, "StreamUtils.iterate have a given limit '{}', while it should not be negative", limit); return StreamUtils.unfold(Arrays.asList(seed), conservativeGenerator(generator)) .limit(limit + 1) .flatMap(List::stream); diff --git a/server/container/util/src/test/java/org/apache/james/util/StreamUtilsTest.java b/server/container/util/src/test/java/org/apache/james/util/StreamUtilsTest.java index 67f8527..f29ae43 100644 --- a/server/container/util/src/test/java/org/apache/james/util/StreamUtilsTest.java +++ b/server/container/util/src/test/java/org/apache/james/util/StreamUtilsTest.java @@ -117,7 +117,7 @@ class StreamUtilsTest { } @Test - void unfoldShouldGenerateAnFiniteStream() { + void unfoldShouldGenerateAFiniteStream() { Stream<Integer> unfolded = StreamUtils.unfold(1, i -> { if (i < 10) { return Optional.of(i + 1); diff --git a/server/data/data-api/pom.xml b/server/data/data-api/pom.xml index 3818153..94f8b62 100644 --- a/server/data/data-api/pom.xml +++ b/server/data/data-api/pom.xml @@ -47,6 +47,10 @@ <scope>test</scope> </dependency> <dependency> + <groupId>org.apache.commons</groupId> + <artifactId>commons-configuration2</artifactId> + </dependency> + <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> </dependency> @@ -54,5 +58,10 @@ <groupId>com.sun.mail</groupId> <artifactId>javax.mail</artifactId> </dependency> + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>jcl-over-slf4j</artifactId> + <scope>test</scope> + </dependency> </dependencies> </project> diff --git a/server/data/data-api/src/main/java/org/apache/james/rrt/api/ReverseRecipientRewriteTable.java b/server/data/data-api/src/main/java/org/apache/james/rrt/api/AliasReverseResolver.java similarity index 96% rename from server/data/data-api/src/main/java/org/apache/james/rrt/api/ReverseRecipientRewriteTable.java rename to server/data/data-api/src/main/java/org/apache/james/rrt/api/AliasReverseResolver.java index 3f17aff..05117c5 100644 --- a/server/data/data-api/src/main/java/org/apache/james/rrt/api/ReverseRecipientRewriteTable.java +++ b/server/data/data-api/src/main/java/org/apache/james/rrt/api/AliasReverseResolver.java @@ -24,6 +24,6 @@ import java.util.stream.Stream; import org.apache.james.core.MailAddress; import org.apache.james.core.Username; -public interface ReverseRecipientRewriteTable { +public interface AliasReverseResolver { Stream<MailAddress> listAddresses(Username user) throws RecipientRewriteTable.ErrorMappingException, RecipientRewriteTableException; } diff --git a/server/data/data-api/src/main/java/org/apache/james/rrt/api/RecipientRewriteTable.java b/server/data/data-api/src/main/java/org/apache/james/rrt/api/RecipientRewriteTable.java index ece8f55..d11d338 100644 --- a/server/data/data-api/src/main/java/org/apache/james/rrt/api/RecipientRewriteTable.java +++ b/server/data/data-api/src/main/java/org/apache/james/rrt/api/RecipientRewriteTable.java @@ -122,7 +122,7 @@ public interface RecipientRewriteTable { */ Map<MappingSource, Mappings> getAllMappings() throws RecipientRewriteTableException; - int getMappingLimit(); + RecipientRewriteTableConfiguration getConfiguration(); default Stream<MappingSource> listSources(Mapping mapping) throws RecipientRewriteTableException { Preconditions.checkArgument(listSourcesSupportedType.contains(mapping.getType()), diff --git a/server/data/data-api/src/main/java/org/apache/james/rrt/api/RecipientRewriteTableConfiguration.java b/server/data/data-api/src/main/java/org/apache/james/rrt/api/RecipientRewriteTableConfiguration.java new file mode 100644 index 0000000..e349ccc --- /dev/null +++ b/server/data/data-api/src/main/java/org/apache/james/rrt/api/RecipientRewriteTableConfiguration.java @@ -0,0 +1,98 @@ +/**************************************************************** + * 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.rrt.api; + +import java.util.Objects; + +import org.apache.commons.configuration2.HierarchicalConfiguration; +import org.apache.commons.configuration2.ex.ConfigurationException; +import org.apache.commons.configuration2.tree.ImmutableNode; + +import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.MoreObjects; +import com.google.common.base.Preconditions; + +public class RecipientRewriteTableConfiguration { + + public static final boolean RECURSIVE_MAPPING_ENABLE = true; + public static final int DEFAULT_ENABLED_MAPPING_LIMIT = 10; + public static final int DISABLED_MAPPING_LIMIT = 0; + + // The maximum mappings which will process before throwing exception + private final int mappingLimit; + + private final boolean recursive; + + @VisibleForTesting + public RecipientRewriteTableConfiguration(boolean recursive, int mappingLimit) { + Preconditions.checkArgument(mappingLimit == 0 || recursive, "mappingLimit can not be different than 0 when recursive mode is disabled"); + this.recursive = recursive; + this.mappingLimit = mappingLimit; + } + + public static RecipientRewriteTableConfiguration fromConfiguration(HierarchicalConfiguration<ImmutableNode> config) throws ConfigurationException { + boolean recursive = config.getBoolean("recursiveMapping", RECURSIVE_MAPPING_ENABLE); + int mappingLimit; + if (recursive) { + mappingLimit = config.getInt("mappingLimit", DEFAULT_ENABLED_MAPPING_LIMIT); + checkMappingLimit(mappingLimit); + } else { + mappingLimit = DISABLED_MAPPING_LIMIT; + } + return new RecipientRewriteTableConfiguration(recursive, mappingLimit); + } + + private static void checkMappingLimit(int mappingLimit) throws ConfigurationException { + if (mappingLimit < 1) { + throw new ConfigurationException("The minimum mappingLimit is 1"); + } + } + + public int getMappingLimit() { + return mappingLimit; + } + + public boolean isRecursive() { + return recursive; + } + + @Override + public final boolean equals(Object other) { + if (other instanceof RecipientRewriteTableConfiguration) { + RecipientRewriteTableConfiguration that = (RecipientRewriteTableConfiguration) other; + return Objects.equals(mappingLimit, that.mappingLimit) && Objects.equals(recursive, that.recursive); + } + + return false; + } + + @Override + public final int hashCode() { + return Objects.hash(mappingLimit, recursive); + } + + @Override + public String toString() { + return MoreObjects.toStringHelper(this) + .add("mappingLimit", mappingLimit) + .add("recursive", recursive) + .toString(); + } +} diff --git a/server/data/data-api/src/test/java/org/apache/james/rrt/api/RecipientRewriteTableConfigurationTest.java b/server/data/data-api/src/test/java/org/apache/james/rrt/api/RecipientRewriteTableConfigurationTest.java new file mode 100644 index 0000000..f92e79b --- /dev/null +++ b/server/data/data-api/src/test/java/org/apache/james/rrt/api/RecipientRewriteTableConfigurationTest.java @@ -0,0 +1,83 @@ +/**************************************************************** + * 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.rrt.api; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatCode; + +import org.apache.commons.configuration2.BaseHierarchicalConfiguration; +import org.apache.commons.configuration2.ex.ConfigurationException; +import org.junit.jupiter.api.Test; + +import nl.jqno.equalsverifier.EqualsVerifier; + +class RecipientRewriteTableConfigurationTest { + @Test + void shouldRespectBeanContract() { + EqualsVerifier.forClass(RecipientRewriteTableConfiguration.class).verify(); + } + + @Test + void emptyConfigurationShouldHaveDefaults() throws ConfigurationException { + BaseHierarchicalConfiguration configuration = new BaseHierarchicalConfiguration(); + RecipientRewriteTableConfiguration recipientRewriteTableConfiguration = RecipientRewriteTableConfiguration.fromConfiguration(configuration); + + assertThat(recipientRewriteTableConfiguration.getMappingLimit()) + .isEqualTo(10); + assertThat(recipientRewriteTableConfiguration.isRecursive()) + .isTrue(); + } + + @Test + void negativeLimitShouldThrows() { + BaseHierarchicalConfiguration configuration = new BaseHierarchicalConfiguration(); + configuration.addProperty("recursiveMapping", "true"); + configuration.addProperty("mappingLimit", -1); + + assertThatCode(() -> RecipientRewriteTableConfiguration.fromConfiguration(configuration)) + .isInstanceOf(ConfigurationException.class); + } + + @Test + void goodConfigurationShouldPopulateTheConfiguration() throws ConfigurationException { + BaseHierarchicalConfiguration configuration = new BaseHierarchicalConfiguration(); + configuration.addProperty("recursiveMapping", "true"); + configuration.addProperty("mappingLimit", 42); + RecipientRewriteTableConfiguration recipientRewriteTableConfiguration = RecipientRewriteTableConfiguration.fromConfiguration(configuration); + + assertThat(recipientRewriteTableConfiguration.getMappingLimit()) + .isEqualTo(42); + assertThat(recipientRewriteTableConfiguration.isRecursive()) + .isTrue(); + } + + @Test + void goodConfigurationWithoutMappingShouldHaveANullMappingLevel() throws ConfigurationException { + BaseHierarchicalConfiguration configuration = new BaseHierarchicalConfiguration(); + configuration.addProperty("recursiveMapping", "false"); + configuration.addProperty("mappingLimit", 42); + RecipientRewriteTableConfiguration recipientRewriteTableConfiguration = RecipientRewriteTableConfiguration.fromConfiguration(configuration); + + assertThat(recipientRewriteTableConfiguration.getMappingLimit()) + .isEqualTo(0); + assertThat(recipientRewriteTableConfiguration.isRecursive()) + .isFalse(); + } +} \ No newline at end of file diff --git a/server/data/data-api/src/test/java/org/apache/james/rrt/lib/ReverseRecipientRewriteTableContract.java b/server/data/data-api/src/test/java/org/apache/james/rrt/lib/AliasReverseResolverContract.java similarity index 84% rename from server/data/data-api/src/test/java/org/apache/james/rrt/lib/ReverseRecipientRewriteTableContract.java rename to server/data/data-api/src/test/java/org/apache/james/rrt/lib/AliasReverseResolverContract.java index edf4372..d0d7f66 100644 --- a/server/data/data-api/src/test/java/org/apache/james/rrt/lib/ReverseRecipientRewriteTableContract.java +++ b/server/data/data-api/src/test/java/org/apache/james/rrt/lib/AliasReverseResolverContract.java @@ -26,12 +26,12 @@ import java.util.stream.IntStream; import org.apache.james.core.Domain; import org.apache.james.core.Username; -import org.apache.james.rrt.api.ReverseRecipientRewriteTable; +import org.apache.james.rrt.api.AliasReverseResolver; import org.junit.jupiter.api.Test; import com.github.fge.lambdas.Throwing; -public interface ReverseRecipientRewriteTableContract { +public interface AliasReverseResolverContract { Domain DOMAIN = Domain.of("example.com"); Domain OTHER_DOMAIN = Domain.of("other.org"); @@ -39,7 +39,7 @@ public interface ReverseRecipientRewriteTableContract { Username USER_ALIAS = Username.of("al...@example.com"); Username OTHER_USER = Username.of("ot...@example.com"); - ReverseRecipientRewriteTable reverseRecipientRewriteTable(); + AliasReverseResolver aliasReverseResolver(); void addAliasMapping(Username alias, Username user) throws Exception; @@ -70,14 +70,14 @@ public interface ReverseRecipientRewriteTableContract { } @Test default void listAddressesShouldContainOnlyUserAddressWhenUserHasNoAlias() throws Exception { - assertThat(reverseRecipientRewriteTable().listAddresses(USER)) + assertThat(aliasReverseResolver().listAddresses(USER)) .containsExactly(USER.asMailAddress()); } @Test default void listAddressesShouldContainOnlyUserAddressWhenUserHasNoAliasAndAnotherUserHasOne() throws Exception { redirectUser(USER_ALIAS).to(OTHER_USER); - assertThat(reverseRecipientRewriteTable().listAddresses(USER)) + assertThat(aliasReverseResolver().listAddresses(USER)) .containsExactly(USER.asMailAddress()); } @@ -85,17 +85,17 @@ public interface ReverseRecipientRewriteTableContract { default void listAddressesShouldContainUserAddressAndAnAliasOfTheUser() throws Exception { redirectUser(USER_ALIAS).to(USER); - assertThat(reverseRecipientRewriteTable().listAddresses(USER)) + assertThat(aliasReverseResolver().listAddresses(USER)) .containsExactlyInAnyOrder(USER.asMailAddress(), USER_ALIAS.asMailAddress()); } @Test - default void listAddressesFromShouldBeTrueWhenSenderIsAnAliasOfAnAliasOfTheUser() throws Exception { + default void listAddressesShouldBeTrueWhenSenderIsAnAliasOfAnAliasOfTheUser() throws Exception { Username userAliasBis = Username.of("aliasbis@" + DOMAIN.asString()); redirectUser(userAliasBis).to(USER_ALIAS); redirectUser(USER_ALIAS).to(USER); - assertThat(reverseRecipientRewriteTable().listAddresses(USER)) + assertThat(aliasReverseResolver().listAddresses(USER)) .containsExactlyInAnyOrder(USER.asMailAddress(), USER_ALIAS.asMailAddress(), userAliasBis.asMailAddress()); } @@ -105,7 +105,7 @@ public interface ReverseRecipientRewriteTableContract { redirectDomain(OTHER_DOMAIN).to(DOMAIN); - assertThat(reverseRecipientRewriteTable().listAddresses(USER)) + assertThat(aliasReverseResolver().listAddresses(USER)) .containsExactlyInAnyOrder(USER.asMailAddress(), fromUser.asMailAddress()); } @@ -118,7 +118,7 @@ public interface ReverseRecipientRewriteTableContract { Username userAliasMainDomain = USER_ALIAS.withOtherDomain(Optional.of(DOMAIN)); Username userOtherDomain = USER.withOtherDomain(Optional.of(OTHER_DOMAIN)); - assertThat(reverseRecipientRewriteTable().listAddresses(USER)) + assertThat(aliasReverseResolver().listAddresses(USER)) .containsExactlyInAnyOrder(USER.asMailAddress(), userAliasOtherDomain.asMailAddress(), userAliasMainDomain.asMailAddress(), userOtherDomain.asMailAddress()); } @@ -140,28 +140,28 @@ public interface ReverseRecipientRewriteTableContract { Username userAliasExcluded = Username.of("alias" + (recursionLevel - 1) + "@" + DOMAIN.asString()); redirectUser(USER_ALIAS).to(USER); - assertThat(reverseRecipientRewriteTable().listAddresses(USER)) + assertThat(aliasReverseResolver().listAddresses(USER)) .doesNotContain(userAliasExcluded.asMailAddress()); } @Test - default void listAddressesShouldContainASendersAliasOfAnAliasInAnotherDomainOfTheUser() throws Exception { + default void listAddressesShouldContainASenderAliasOfAnAliasInAnotherDomainOfTheUser() throws Exception { Username userAlias = Username.of("aliasbis@" + OTHER_DOMAIN.asString()); Username userAliasBis = Username.of("aliaster@" + OTHER_DOMAIN.asString()); redirectUser(userAliasBis).to(userAlias); redirectUser(userAlias).to(USER); - assertThat(reverseRecipientRewriteTable().listAddresses(USER)) + assertThat(aliasReverseResolver().listAddresses(USER)) .contains(userAliasBis.asMailAddress()); } @Test - default void listAddressesShouldContainAnUserAliasFollowingADomainAliasResolution() throws Exception { + default void listAddressesShouldContainAUserAliasFollowingADomainAliasResolution() throws Exception { Username userAliasBis = Username.of("aliasbis@" + OTHER_DOMAIN.asString()); redirectUser(userAliasBis).to(USER_ALIAS); redirectUser(USER_ALIAS).to(USER); - assertThat(reverseRecipientRewriteTable().listAddresses(USER)) + assertThat(aliasReverseResolver().listAddresses(USER)) .contains(userAliasBis.asMailAddress()); } } diff --git a/server/data/data-api/src/test/java/org/apache/james/rrt/lib/CanSendFromContract.java b/server/data/data-api/src/test/java/org/apache/james/rrt/lib/CanSendFromContract.java index 0a0201d..5a182ec 100644 --- a/server/data/data-api/src/test/java/org/apache/james/rrt/lib/CanSendFromContract.java +++ b/server/data/data-api/src/test/java/org/apache/james/rrt/lib/CanSendFromContract.java @@ -206,7 +206,7 @@ public interface CanSendFromContract { } @Test - default void allValidFromAddressesShouldContainASendersAliasOfAnAliasOfTheUser() throws Exception { + default void allValidFromAddressesShouldContainASenderAliasOfAnAliasOfTheUser() throws Exception { Username userAliasBis = Username.of("aliasbis@" + DOMAIN.asString()); redirectUser(userAliasBis).to(USER_ALIAS); redirectUser(USER_ALIAS).to(USER); @@ -237,7 +237,7 @@ public interface CanSendFromContract { } @Test - default void allValidFromAddressesShouldContainASendersAliasOfAnAliasInAnotherDomainOfTheUser() throws Exception { + default void allValidFromAddressesShouldContainASenderAliasOfAnAliasInAnotherDomainOfTheUser() throws Exception { Username userAlias = Username.of("aliasbis@" + OTHER_DOMAIN.asString()); Username userAliasBis = Username.of("aliaster@" + OTHER_DOMAIN.asString()); redirectUser(userAliasBis).to(userAlias); @@ -248,7 +248,7 @@ public interface CanSendFromContract { } @Test - default void allValidFromAddressesShouldContainAnUserAliasFollowingADomainAliasResolution() throws Exception { + default void allValidFromAddressesShouldContainAUserAliasFollowingADomainAliasResolution() throws Exception { Username userAliasBis = Username.of("aliasbis@" + OTHER_DOMAIN.asString()); redirectUser(userAliasBis).to(USER_ALIAS); redirectUser(USER_ALIAS).to(USER); diff --git a/server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/CassandraRecipientRewriteTableV6Test.java b/server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/CassandraRecipientRewriteTableV6Test.java index 9412389..34e51ad 100644 --- a/server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/CassandraRecipientRewriteTableV6Test.java +++ b/server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/CassandraRecipientRewriteTableV6Test.java @@ -69,7 +69,6 @@ public class CassandraRecipientRewriteTableV6Test extends AbstractRecipientRewri new CassandraRecipientRewriteTableDAO(cassandra.getConf(), CassandraUtils.WITH_DEFAULT_CONFIGURATION), new CassandraMappingsSourcesDAO(cassandra.getConf()), cassandraSchemaVersionDAO); - rrt.configure(new BaseHierarchicalConfiguration()); cassandraSchemaVersionDAO.updateVersion(SCHEMA_VERSION_V6); diff --git a/server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/CassandraRecipientRewriteTableV7Test.java b/server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/CassandraRecipientRewriteTableV7Test.java index 0523ed6..2c6a205 100644 --- a/server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/CassandraRecipientRewriteTableV7Test.java +++ b/server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/CassandraRecipientRewriteTableV7Test.java @@ -69,7 +69,6 @@ public class CassandraRecipientRewriteTableV7Test extends AbstractRecipientRewri new CassandraRecipientRewriteTableDAO(cassandra.getConf(), CassandraUtils.WITH_DEFAULT_CONFIGURATION), new CassandraMappingsSourcesDAO(cassandra.getConf()), cassandraSchemaVersionDAO); - rrt.configure(new BaseHierarchicalConfiguration()); cassandraSchemaVersionDAO.updateVersion(SCHEMA_VERSION_V7); diff --git a/server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/CassandraStepdefs.java b/server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/CassandraStepdefs.java index a32812f..eb16b46 100644 --- a/server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/CassandraStepdefs.java +++ b/server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/CassandraStepdefs.java @@ -18,7 +18,6 @@ ****************************************************************/ package org.apache.james.rrt.cassandra; -import org.apache.commons.configuration2.BaseHierarchicalConfiguration; import org.apache.james.backends.cassandra.CassandraCluster; import org.apache.james.backends.cassandra.DockerCassandraRule; import org.apache.james.backends.cassandra.components.CassandraModule; @@ -30,6 +29,7 @@ import org.apache.james.rrt.lib.RecipientRewriteTableFixture; import org.apache.james.rrt.lib.RewriteTablesStepdefs; import org.junit.Rule; +import com.github.fge.lambdas.Throwing; import cucumber.api.java.After; import cucumber.api.java.Before; @@ -51,7 +51,7 @@ public class CassandraStepdefs { cassandra = CassandraCluster.create( CassandraModule.aggregateModules(CassandraRRTModule.MODULE, CassandraSchemaVersionModule.MODULE), cassandraServer.getHost()); - mainStepdefs.rewriteTable = getRecipientRewriteTable(); + mainStepdefs.setUp(Throwing.supplier(this::getRecipientRewriteTable).sneakyThrow()); } @After @@ -64,7 +64,6 @@ public class CassandraStepdefs { new CassandraRecipientRewriteTableDAO(cassandra.getConf(), CassandraUtils.WITH_DEFAULT_CONFIGURATION), new CassandraMappingsSourcesDAO(cassandra.getConf()), new CassandraSchemaVersionDAO(cassandra.getConf())); - rrt.configure(new BaseHierarchicalConfiguration()); rrt.setDomainList(RecipientRewriteTableFixture.domainListForCucumberTests()); return rrt; } diff --git a/server/data/data-file/src/test/java/org/apache/james/rrt/file/XMLRecipientRewriteTableTest.java b/server/data/data-file/src/test/java/org/apache/james/rrt/file/XMLRecipientRewriteTableTest.java index 4b3f4d4..7ef0a37 100644 --- a/server/data/data-file/src/test/java/org/apache/james/rrt/file/XMLRecipientRewriteTableTest.java +++ b/server/data/data-file/src/test/java/org/apache/james/rrt/file/XMLRecipientRewriteTableTest.java @@ -18,19 +18,10 @@ ****************************************************************/ package org.apache.james.rrt.file; -import java.util.ArrayList; -import java.util.List; - import org.apache.commons.configuration2.BaseHierarchicalConfiguration; import org.apache.commons.configuration2.convert.DisabledListDelimiterHandler; -import org.apache.james.rrt.api.RecipientRewriteTableException; import org.apache.james.rrt.lib.AbstractRecipientRewriteTable; import org.apache.james.rrt.lib.AbstractRecipientRewriteTableTest; -import org.apache.james.rrt.lib.Mapping; -import org.apache.james.rrt.lib.Mapping.Type; -import org.apache.james.rrt.lib.MappingSource; -import org.apache.james.rrt.lib.Mappings; -import org.apache.james.rrt.lib.MappingsImpl; import org.junit.After; import org.junit.Before; import org.junit.Ignore; @@ -55,22 +46,7 @@ public class XMLRecipientRewriteTableTest extends AbstractRecipientRewriteTableT @Override protected AbstractRecipientRewriteTable getRecipientRewriteTable() { - return new XMLRecipientRewriteTable() { - @Override - public void addMapping(MappingSource source, Mapping mapping) throws RecipientRewriteTableException { - addMappingToConfiguration(source, mapping.getType().withoutPrefix(mapping.asString()), mapping.getType()); - } - - @Override - public void removeMapping(MappingSource source, Mapping mapping) throws RecipientRewriteTableException { - removeMappingFromConfiguration(source, mapping.getType().withoutPrefix(mapping.asString()), mapping.getType()); - } - - @Override - public void addAddressMapping(MappingSource source, String address) throws RecipientRewriteTableException { - addMapping(source, Mapping.address(address)); - } - }; + return new XMLRecipientRewriteTable(); } @Test @@ -85,57 +61,182 @@ public class XMLRecipientRewriteTableTest extends AbstractRecipientRewriteTableT public void addMappingShouldThrowWhenMappingAlreadyExists() { } - protected void addMappingToConfiguration(MappingSource source, String mapping, Type type) throws RecipientRewriteTableException { - Mappings mappings = virtualUserTable.getStoredMappings(source); + @Test + @Ignore("XMLRecipientRewriteTable is read only") + public void testStoreAndGetMappings() { + } + + @Test + @Ignore("XMLRecipientRewriteTable is read only") + public void testStoreAndRetrieveRegexMapping() { + } + + @Test + @Ignore("XMLRecipientRewriteTable is read only") + public void getAllMappingsShouldListAllEntries() { + } + + @Test + @Ignore("XMLRecipientRewriteTable is read only") + public void testStoreAndRetrieveAddressMapping() { + } + + @Test + @Ignore("XMLRecipientRewriteTable is read only") + public void testStoreAndRetrieveErrorMapping() { + } + + @Test + @Ignore("XMLRecipientRewriteTable is read only") + public void testStoreAndRetrieveWildCardAddressMapping() { + } + + @Test + @Ignore("XMLRecipientRewriteTable is read only") + public void testNonRecursiveMapping() { + } + + @Test + @Ignore("XMLRecipientRewriteTable is read only") + public void testAliasDomainMapping() { + } + + @Test + @Ignore("XMLRecipientRewriteTable is read only") + public void addMappingShouldNotThrowWhenMappingAlreadyExistsWithAnOtherType() { + } - Mappings updatedMappings = MappingsImpl.from(mappings) - .add(Mapping.of(type, mapping)) - .build(); + @Test + @Ignore("XMLRecipientRewriteTable is read only") + public void addForwardMappingShouldStore() { + } - updateConfiguration(source, mappings, updatedMappings); + @Test + @Ignore("XMLRecipientRewriteTable is read only") + public void removeForwardMappingShouldDelete() { } - protected void removeMappingFromConfiguration(MappingSource source, String mapping, Type type) throws RecipientRewriteTableException { - Mappings oldMappings = virtualUserTable.getStoredMappings(source); + @Test + @Ignore("XMLRecipientRewriteTable is read only") + public void addGroupMappingShouldStore() { + } - if (oldMappings.isEmpty()) { - throw new RecipientRewriteTableException("Cannot remove from null mappings"); - } + @Test + @Ignore("XMLRecipientRewriteTable is read only") + public void removeGroupMappingShouldDelete() { + } - Mappings updatedMappings = oldMappings.remove(Mapping.of(type, mapping)); + @Test + @Ignore("XMLRecipientRewriteTable is read only") + public void addAliasMappingShouldStore() { - updateConfiguration(source, oldMappings, updatedMappings); } - private void updateConfiguration(MappingSource source, Mappings oldMappings, Mappings updatedMappings) throws RecipientRewriteTableException { - removeMappingsFromConfig(source, oldMappings); + @Test + @Ignore("XMLRecipientRewriteTable is read only") + public void removeAliasMappingShouldDelete() { - if (!updatedMappings.isEmpty()) { - defaultConfiguration.addProperty("mapping", source.getFixedUser() + "@" + source.getFixedDomain() + "=" + updatedMappings.serialize()); - } + } + + @Test + @Ignore("XMLRecipientRewriteTable is read only") + public void listSourcesShouldReturnWhenHasMapping() { + + } + + @Test + @Ignore("XMLRecipientRewriteTable is read only") + public void listSourcesShouldReturnWhenMultipleSourceMapping() { + + } + + @Test + @Ignore("XMLRecipientRewriteTable is read only") + public void listSourcesShouldReturnWhenHasForwardMapping() { - try { - virtualUserTable.configure(defaultConfiguration); - } catch (Exception e) { - if (updatedMappings.size() > 0) { - throw new RecipientRewriteTableException("Error update mapping", e); - } - } } - private void removeMappingsFromConfig(MappingSource source, Mappings mappings) { - List<String> stored = new ArrayList<>(); - for (String c : defaultConfiguration.getStringArray("mapping")) { - String mapping = source.getFixedUser() + "@" + source.getFixedDomain() + "=" + mappings.serialize(); - if (!c.equalsIgnoreCase(mapping)) { - stored.add(c); - } - } - // clear old values - defaultConfiguration.clear(); - // add stored mappings - for (String aStored : stored) { - defaultConfiguration.addProperty("mapping", aStored); - } + @Test + @Ignore("XMLRecipientRewriteTable is read only") + public void listSourcesShouldReturnAliasMappings() { + + } + + @Test + @Ignore("XMLRecipientRewriteTable is read only") + public void listSourcesShouldReturnWhenHasAddressMapping() { + + } + + @Test + @Ignore("XMLRecipientRewriteTable is read only") + public void listSourcesShouldThrowExceptionWhenHasRegexMapping() { + + } + + @Test + @Ignore("XMLRecipientRewriteTable is read only") + public void listSourcesShouldHandleDomainMapping() { + + } + + @Test + @Ignore("XMLRecipientRewriteTable is read only") + public void listSourcesShouldHandleDomainSource() { + } + + @Test + @Ignore("XMLRecipientRewriteTable is read only") + public void listSourcesShouldHandleDomainSources() { + } + + @Test + @Ignore("XMLRecipientRewriteTable is read only") + public void listSourcesShouldThrowExceptionWhenHasErrorMapping() { + } + + @Test + @Ignore("XMLRecipientRewriteTable is read only") + public void listSourcesShouldReturnEmptyWhenMappingDoesNotExist() { + } + + @Test + @Ignore("XMLRecipientRewriteTable is read only") + public void getSourcesForTypeShouldReturnEmptyWhenNoMatchingMapping() { + } + + @Test + @Ignore("XMLRecipientRewriteTable is read only") + public void getSourcesForTypeShouldReturnMatchingMapping() { + } + + @Test + @Ignore("XMLRecipientRewriteTable is read only") + public void getSourcesForTypeShouldNotReturnDuplicatedSources() { + } + + @Test + @Ignore("XMLRecipientRewriteTable is read only") + public void getSourcesForTypeShouldReturnSortedStream() { + } + + @Test + @Ignore("XMLRecipientRewriteTable is read only") + public void getMappingsForTypeShouldReturnEmptyWhenNoMatchingMapping() { + } + + @Test + @Ignore("XMLRecipientRewriteTable is read only") + public void getMappingsForTypeShouldReturnMatchingMapping() { + } + + @Test + @Ignore("XMLRecipientRewriteTable is read only") + public void getMappingsForTypeShouldNotReturnDuplicatedDestinations() { + } + + @Test + @Ignore("XMLRecipientRewriteTable is read only") + public void getMappingsForTypeShouldReturnSortedStream() { } } diff --git a/server/data/data-file/src/test/java/org/apache/james/rrt/file/XMLStepdefs.java b/server/data/data-file/src/test/java/org/apache/james/rrt/file/XMLStepdefs.java index 580f928..789f9b3 100644 --- a/server/data/data-file/src/test/java/org/apache/james/rrt/file/XMLStepdefs.java +++ b/server/data/data-file/src/test/java/org/apache/james/rrt/file/XMLStepdefs.java @@ -33,10 +33,10 @@ public class XMLStepdefs { @Before public void setup() throws Throwable { - mainStepdefs.rewriteTable = getRecipientRewriteTable(); + mainStepdefs.setUp(this::getRecipientRewriteTable); } - private AbstractRecipientRewriteTable getRecipientRewriteTable() throws Exception { + private AbstractRecipientRewriteTable getRecipientRewriteTable() { return new XMLRecipientRewriteTable(); } } diff --git a/server/data/data-jpa/src/test/java/org/apache/james/rrt/jpa/JPARecipientRewriteTableTest.java b/server/data/data-jpa/src/test/java/org/apache/james/rrt/jpa/JPARecipientRewriteTableTest.java index 80f02fa..5f50ab9 100644 --- a/server/data/data-jpa/src/test/java/org/apache/james/rrt/jpa/JPARecipientRewriteTableTest.java +++ b/server/data/data-jpa/src/test/java/org/apache/james/rrt/jpa/JPARecipientRewriteTableTest.java @@ -46,8 +46,6 @@ public class JPARecipientRewriteTableTest extends AbstractRecipientRewriteTableT protected AbstractRecipientRewriteTable getRecipientRewriteTable() throws Exception { JPARecipientRewriteTable localVirtualUserTable = new JPARecipientRewriteTable(); localVirtualUserTable.setEntityManagerFactory(JPA_TEST_CLUSTER.getEntityManagerFactory()); - BaseHierarchicalConfiguration defaultConfiguration = new BaseHierarchicalConfiguration(); - localVirtualUserTable.configure(defaultConfiguration); return localVirtualUserTable; } } diff --git a/server/data/data-jpa/src/test/java/org/apache/james/rrt/jpa/JPAStepdefs.java b/server/data/data-jpa/src/test/java/org/apache/james/rrt/jpa/JPAStepdefs.java index 4b27b75..249b0b2 100644 --- a/server/data/data-jpa/src/test/java/org/apache/james/rrt/jpa/JPAStepdefs.java +++ b/server/data/data-jpa/src/test/java/org/apache/james/rrt/jpa/JPAStepdefs.java @@ -18,13 +18,13 @@ ****************************************************************/ package org.apache.james.rrt.jpa; -import org.apache.commons.configuration2.BaseHierarchicalConfiguration; import org.apache.james.backends.jpa.JpaTestCluster; import org.apache.james.rrt.jpa.model.JPARecipientRewrite; import org.apache.james.rrt.lib.AbstractRecipientRewriteTable; import org.apache.james.rrt.lib.RecipientRewriteTableFixture; import org.apache.james.rrt.lib.RewriteTablesStepdefs; +import com.github.fge.lambdas.Throwing; import cucumber.api.java.After; import cucumber.api.java.Before; @@ -40,7 +40,7 @@ public class JPAStepdefs { @Before public void setup() throws Throwable { - mainStepdefs.rewriteTable = getRecipientRewriteTable(); + mainStepdefs.setUp(Throwing.supplier(this::getRecipientRewriteTable).sneakyThrow()); } @After @@ -51,8 +51,6 @@ public class JPAStepdefs { private AbstractRecipientRewriteTable getRecipientRewriteTable() throws Exception { JPARecipientRewriteTable localVirtualUserTable = new JPARecipientRewriteTable(); localVirtualUserTable.setEntityManagerFactory(JPA_TEST_CLUSTER.getEntityManagerFactory()); - BaseHierarchicalConfiguration defaultConfiguration = new BaseHierarchicalConfiguration(); - localVirtualUserTable.configure(defaultConfiguration); localVirtualUserTable.setDomainList(RecipientRewriteTableFixture.domainListForCucumberTests()); return localVirtualUserTable; } diff --git a/server/data/data-library/src/main/java/org/apache/james/rrt/lib/AbstractRecipientRewriteTable.java b/server/data/data-library/src/main/java/org/apache/james/rrt/lib/AbstractRecipientRewriteTable.java index cafc427..b341d92 100644 --- a/server/data/data-library/src/main/java/org/apache/james/rrt/lib/AbstractRecipientRewriteTable.java +++ b/server/data/data-library/src/main/java/org/apache/james/rrt/lib/AbstractRecipientRewriteTable.java @@ -40,6 +40,7 @@ import org.apache.james.lifecycle.api.Configurable; import org.apache.james.rrt.api.InvalidRegexException; import org.apache.james.rrt.api.MappingAlreadyExistsException; import org.apache.james.rrt.api.RecipientRewriteTable; +import org.apache.james.rrt.api.RecipientRewriteTableConfiguration; import org.apache.james.rrt.api.RecipientRewriteTableException; import org.apache.james.rrt.api.SameSourceAndDestinationException; import org.apache.james.rrt.api.SourceDomainIsNotInDomainListException; @@ -49,24 +50,17 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.github.fge.lambdas.Throwing; +import com.google.common.base.Preconditions; public abstract class AbstractRecipientRewriteTable implements RecipientRewriteTable, Configurable { private static final Logger LOGGER = LoggerFactory.getLogger(AbstractRecipientRewriteTable.class); - // The maximum mappings which will process before throwing exception - private int mappingLimit = 10; - - private boolean recursive = true; - + private RecipientRewriteTableConfiguration configuration; private DomainList domainList; - @Override - public int getMappingLimit() { - if (recursive) { - return mappingLimit; - } else { - return 0; - } + public void setConfiguration(RecipientRewriteTableConfiguration configuration) { + Preconditions.checkState(this.configuration == null, "A configuration cannot be set twice"); + this.configuration = configuration; } @Inject @@ -76,44 +70,23 @@ public abstract class AbstractRecipientRewriteTable implements RecipientRewriteT @Override public void configure(HierarchicalConfiguration<ImmutableNode> config) throws ConfigurationException { - setRecursiveMapping(config.getBoolean("recursiveMapping", true)); - try { - setMappingLimit(config.getInt("mappingLimit", 10)); - } catch (IllegalArgumentException e) { - throw new ConfigurationException(e.getMessage()); - } + setConfiguration(RecipientRewriteTableConfiguration.fromConfiguration(config)); doConfigure(config); } - /** - * Override to handle config - */ - protected void doConfigure(HierarchicalConfiguration<ImmutableNode> conf) throws ConfigurationException { - } + protected void doConfigure(HierarchicalConfiguration<ImmutableNode> arg0) throws ConfigurationException { - public void setRecursiveMapping(boolean recursive) { - this.recursive = recursive; } - /** - * Set the mappingLimit - * - * @param mappingLimit - * the mappingLimit - * @throws IllegalArgumentException - * get thrown if mappingLimit smaller then 1 is used - */ - public void setMappingLimit(int mappingLimit) throws IllegalArgumentException { - if (mappingLimit < 1) { - throw new IllegalArgumentException("The minimum mappingLimit is 1"); - } - this.mappingLimit = mappingLimit; + @Override + public RecipientRewriteTableConfiguration getConfiguration() { + return configuration; } @Override public Mappings getResolvedMappings(String user, Domain domain, EnumSet<Type> mappingTypes) throws ErrorMappingException, RecipientRewriteTableException { - - return getMappings(Username.fromLocalPartWithDomain(user, domain), mappingLimit, mappingTypes); + Preconditions.checkState(this.configuration != null, "RecipientRewriteTable is not configured"); + return getMappings(Username.fromLocalPartWithDomain(user, domain), configuration.getMappingLimit(), mappingTypes); } private Mappings getMappings(Username username, int mappingLimit, EnumSet<Type> mappingTypes) throws ErrorMappingException, RecipientRewriteTableException { @@ -155,7 +128,7 @@ public abstract class AbstractRecipientRewriteTable implements RecipientRewriteT LOGGER.debug("Valid virtual user mapping {} to {}", originalUsername.asString(), rewrittenUsername.asString()); Stream<Mapping> nonRecursiveResult = Stream.of(toMapping(rewrittenUsername, mapping.getType())); - if (!recursive) { + if (!configuration.isRecursive()) { return nonRecursiveResult; } diff --git a/server/data/data-library/src/main/java/org/apache/james/rrt/lib/ReverseRecipientRewriteTableImpl.java b/server/data/data-library/src/main/java/org/apache/james/rrt/lib/AliasReverseResolverImpl.java similarity index 91% rename from server/data/data-library/src/main/java/org/apache/james/rrt/lib/ReverseRecipientRewriteTableImpl.java rename to server/data/data-library/src/main/java/org/apache/james/rrt/lib/AliasReverseResolverImpl.java index 419a69b..5bec3f7 100644 --- a/server/data/data-library/src/main/java/org/apache/james/rrt/lib/ReverseRecipientRewriteTableImpl.java +++ b/server/data/data-library/src/main/java/org/apache/james/rrt/lib/AliasReverseResolverImpl.java @@ -31,21 +31,23 @@ import javax.inject.Inject; import org.apache.james.core.Domain; import org.apache.james.core.MailAddress; import org.apache.james.core.Username; +import org.apache.james.rrt.api.AliasReverseResolver; import org.apache.james.rrt.api.RecipientRewriteTable; import org.apache.james.rrt.api.RecipientRewriteTableException; -import org.apache.james.rrt.api.ReverseRecipientRewriteTable; import org.apache.james.util.OptionalUtils; import org.apache.james.util.StreamUtils; import com.github.fge.lambdas.Throwing; import com.github.steveash.guavate.Guavate; -public class ReverseRecipientRewriteTableImpl implements ReverseRecipientRewriteTable { +public class AliasReverseResolverImpl implements AliasReverseResolver { private final RecipientRewriteTable recipientRewriteTable; + private final int mappingLimit; @Inject - public ReverseRecipientRewriteTableImpl(RecipientRewriteTable recipientRewriteTable) { + public AliasReverseResolverImpl(RecipientRewriteTable recipientRewriteTable) { this.recipientRewriteTable = recipientRewriteTable; + this.mappingLimit = recipientRewriteTable.getConfiguration().getMappingLimit(); } @Override @@ -64,7 +66,7 @@ public class ReverseRecipientRewriteTableImpl implements ReverseRecipientRewrite private Stream<Username> relatedAliases(Username user) { return StreamUtils.iterate( user, - (long) recipientRewriteTable.getMappingLimit(), + (long) mappingLimit, Throwing.<Username, Stream<Username>>function(targetUser -> recipientRewriteTable .listSources(Mapping.alias(targetUser.asString())) @@ -94,7 +96,7 @@ public class ReverseRecipientRewriteTableImpl implements ReverseRecipientRewrite private Stream<Domain> fetchDomains(Domain domain) { return StreamUtils.iterate( domain, - (long) recipientRewriteTable.getMappingLimit(), + (long) mappingLimit, Throwing.<Domain, Stream<Domain>>function(targetDomain -> recipientRewriteTable .listSources(Mapping.domain(targetDomain)) diff --git a/server/data/data-library/src/main/java/org/apache/james/rrt/lib/CanSendFromImpl.java b/server/data/data-library/src/main/java/org/apache/james/rrt/lib/CanSendFromImpl.java index b2bedc8..70d7a82 100644 --- a/server/data/data-library/src/main/java/org/apache/james/rrt/lib/CanSendFromImpl.java +++ b/server/data/data-library/src/main/java/org/apache/james/rrt/lib/CanSendFromImpl.java @@ -30,10 +30,10 @@ import javax.inject.Inject; import org.apache.james.core.Domain; import org.apache.james.core.MailAddress; import org.apache.james.core.Username; +import org.apache.james.rrt.api.AliasReverseResolver; import org.apache.james.rrt.api.CanSendFrom; import org.apache.james.rrt.api.RecipientRewriteTable; import org.apache.james.rrt.api.RecipientRewriteTableException; -import org.apache.james.rrt.api.ReverseRecipientRewriteTable; import org.apache.james.util.OptionalUtils; public class CanSendFromImpl implements CanSendFrom { @@ -45,12 +45,12 @@ public class CanSendFromImpl implements CanSendFrom { public static final EnumSet<Mapping.Type> ALIAS_TYPES_ACCEPTED_IN_FROM = EnumSet.of(Alias, Domain); private final RecipientRewriteTable recipientRewriteTable; - private final ReverseRecipientRewriteTable reverseRecipientRewriteTable; + private final AliasReverseResolver aliasReverseResolver; @Inject - public CanSendFromImpl(RecipientRewriteTable recipientRewriteTable, ReverseRecipientRewriteTable reverseRecipientRewriteTable) { + public CanSendFromImpl(RecipientRewriteTable recipientRewriteTable, AliasReverseResolver aliasReverseResolver) { this.recipientRewriteTable = recipientRewriteTable; - this.reverseRecipientRewriteTable = reverseRecipientRewriteTable; + this.aliasReverseResolver = aliasReverseResolver; } @Override @@ -64,7 +64,7 @@ public class CanSendFromImpl implements CanSendFrom { @Override public Stream<MailAddress> allValidFromAddressesForUser(Username user) throws RecipientRewriteTable.ErrorMappingException, RecipientRewriteTableException { - return reverseRecipientRewriteTable.listAddresses(user); + return aliasReverseResolver.listAddresses(user); } private boolean emailIsAnAliasOfTheConnectedUser(Username connectedUser, Username fromUser) throws RecipientRewriteTable.ErrorMappingException, RecipientRewriteTableException { diff --git a/server/data/data-library/src/test/java/org/apache/james/rrt/lib/AbstractRecipientRewriteTableTest.java b/server/data/data-library/src/test/java/org/apache/james/rrt/lib/AbstractRecipientRewriteTableTest.java index fab6ab3..4f9928c 100644 --- a/server/data/data-library/src/test/java/org/apache/james/rrt/lib/AbstractRecipientRewriteTableTest.java +++ b/server/data/data-library/src/test/java/org/apache/james/rrt/lib/AbstractRecipientRewriteTableTest.java @@ -19,6 +19,7 @@ package org.apache.james.rrt.lib; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatCode; import static org.assertj.core.api.Assertions.assertThatThrownBy; import java.util.Map; @@ -28,6 +29,7 @@ import org.apache.james.core.Domain; import org.apache.james.domainlist.api.mock.SimpleDomainList; import org.apache.james.lifecycle.api.LifecycleUtil; import org.apache.james.rrt.api.RecipientRewriteTable.ErrorMappingException; +import org.apache.james.rrt.api.RecipientRewriteTableConfiguration; import org.apache.james.rrt.api.RecipientRewriteTableException; import org.apache.james.rrt.api.SourceDomainIsNotInDomainListException; import org.junit.Rule; @@ -58,6 +60,20 @@ public abstract class AbstractRecipientRewriteTableTest { protected AbstractRecipientRewriteTable virtualUserTable; public void setUp() throws Exception { + setRecursiveRecipientRewriteTable(); + } + + private void setRecursiveRecipientRewriteTable() throws Exception { + setNotConfiguredRecipientRewriteTable(); + virtualUserTable.setConfiguration(new RecipientRewriteTableConfiguration(true, 10)); + } + + private void setNonRecursiveRecipientRewriteTable() throws Exception { + setNotConfiguredRecipientRewriteTable(); + virtualUserTable.setConfiguration(new RecipientRewriteTableConfiguration(false, 0)); + } + + private void setNotConfiguredRecipientRewriteTable() throws Exception { virtualUserTable = getRecipientRewriteTable(); SimpleDomainList domainList = new SimpleDomainList(); @@ -89,6 +105,19 @@ public abstract class AbstractRecipientRewriteTableTest { } @Test + public void notConfiguredResolutionShouldThrow() throws Exception { + setNotConfiguredRecipientRewriteTable(); + assertThatCode(() -> virtualUserTable.getResolvedMappings(USER, Domain.LOCALHOST)) + .isInstanceOf(IllegalStateException.class); + } + + @Test + public void configuringTwiceShouldThrow() { + assertThatCode(() -> virtualUserTable.setConfiguration(new RecipientRewriteTableConfiguration(true, 10))) + .isInstanceOf(IllegalStateException.class); + } + + @Test public void testStoreAndRetrieveRegexMapping() throws Exception { String regex = "(.*)@localhost"; String regex2 = "(.+)@test"; @@ -211,7 +240,7 @@ public abstract class AbstractRecipientRewriteTableTest { } @Test - public void testRecursiveMapping() throws Exception { + public void testNonRecursiveMapping() throws Exception { String user1 = "user1"; String user2 = "user2"; String user3 = "user3"; @@ -220,26 +249,17 @@ public abstract class AbstractRecipientRewriteTableTest { Domain domain3 = Domain.of("domain3"); MappingSource source1 = MappingSource.fromUser(user1, domain1); MappingSource source2 = MappingSource.fromUser(user2, domain2); - MappingSource source3 = MappingSource.fromUser(user3, domain3); - virtualUserTable.setRecursiveMapping(true); + setNonRecursiveRecipientRewriteTable(); assertThat(virtualUserTable.getAllMappings()).describedAs("No mapping").isEmpty(); virtualUserTable.addMapping(source1, Mapping.address(user2 + "@" + domain2.asString())); virtualUserTable.addMapping(source2, Mapping.address(user3 + "@" + domain3.asString())); - assertThat(virtualUserTable.getResolvedMappings(user1, domain1)).containsOnly(Mapping.address(user3 + "@" + domain3.asString())); - virtualUserTable.addMapping(source3, Mapping.address(user1 + "@" + domain1.asString())); - assertThatThrownBy(() -> virtualUserTable.getResolvedMappings(user1, domain1)) - .describedAs("Exception thrown on to many mappings") + .describedAs("Exception thrown on too many mappings") .isInstanceOf(ErrorMappingException.class); - - // disable recursive mapping - virtualUserTable.setRecursiveMapping(false); - assertThat(virtualUserTable.getResolvedMappings(user1, domain1)).describedAs("Not recursive mapped") - .containsExactly(Mapping.address(user2 + "@" + domain2.asString())); } @Test diff --git a/server/data/data-library/src/test/java/org/apache/james/rrt/lib/RewriteTablesStepdefs.java b/server/data/data-library/src/test/java/org/apache/james/rrt/lib/RewriteTablesStepdefs.java index 3b3d80e..23d7684 100644 --- a/server/data/data-library/src/test/java/org/apache/james/rrt/lib/RewriteTablesStepdefs.java +++ b/server/data/data-library/src/test/java/org/apache/james/rrt/lib/RewriteTablesStepdefs.java @@ -22,9 +22,11 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; import java.util.List; +import java.util.function.Supplier; import org.apache.james.core.Domain; import org.apache.james.rrt.api.RecipientRewriteTable.ErrorMappingException; +import org.apache.james.rrt.api.RecipientRewriteTableConfiguration; import org.apache.james.rrt.api.RecipientRewriteTableException; import cucumber.api.java.en.Given; @@ -33,9 +35,16 @@ import cucumber.api.java.en.When; public class RewriteTablesStepdefs { - public AbstractRecipientRewriteTable rewriteTable; + private Supplier<AbstractRecipientRewriteTable> recipientRewriteTableSupplier; + private AbstractRecipientRewriteTable rewriteTable; private Exception exception; + public void setUp(Supplier<AbstractRecipientRewriteTable> recipientRewriteTableSupplier) { + this.recipientRewriteTableSupplier = recipientRewriteTableSupplier; + this.rewriteTable = this.recipientRewriteTableSupplier.get(); + this.rewriteTable.setConfiguration(new RecipientRewriteTableConfiguration(true, 10)); + } + @Given("store \"([^\"]*)\" regexp mapping for user \"([^\"]*)\" at domain \"([^\"]*)\"") public void storeRegexpMappingForUserAtDomain(String regexp, String user, String domain) throws Throwable { MappingSource source = MappingSource.fromUser(user, domain); @@ -98,12 +107,13 @@ public class RewriteTablesStepdefs { @Given("recursive mapping is disable") public void disableRecursiveMapping() { - rewriteTable.setRecursiveMapping(false); + this.rewriteTable = this.recipientRewriteTableSupplier.get(); + this.rewriteTable.setConfiguration(new RecipientRewriteTableConfiguration(false, 0)); } @Given("recursive mapping is enable") public void enableRecursiveMapping() { - rewriteTable.setRecursiveMapping(true); + // default case } @When("user \"([^\"]*)\" at domain \"([^\"]*)\" removes a regexp mapping \"([^\"]*)\"") diff --git a/server/data/data-library/src/test/resources/cucumber/rewrite_tables.feature b/server/data/data-library/src/test/resources/cucumber/rewrite_tables.feature index 9e1a367..c4367de 100644 --- a/server/data/data-library/src/test/resources/cucumber/rewrite_tables.feature +++ b/server/data/data-library/src/test/resources/cucumber/rewrite_tables.feature @@ -107,13 +107,13 @@ Feature: Rewrite Tables tests Given recursive mapping is disable Given store "test@localhost" address mapping as wildcard for domain "localhost" And store "mine@localhost" address mapping for user "user" at domain "localhost" - Then mappings for user "user" at domain "localhost" should contain only "mine@localhost" + Then retrieving mappings for user "user" at domain "localhost" should raise an ErrorMappingException with message "554 Too many mappings to process" Scenario: direct mapping should override address mapping as wildcard (reverse insertion order) Given recursive mapping is disable Given store "mine@localhost" address mapping for user "user" at domain "localhost" And store "test@localhost" address mapping as wildcard for domain "localhost" - Then mappings for user "user" at domain "localhost" should contain only "mine@localhost" + Then retrieving mappings for user "user" at domain "localhost" should raise an ErrorMappingException with message "554 Too many mappings to process" Scenario: direct mapping should not override address mapping as wildcard when other user Given store "test@localhost" address mapping as wildcard for domain "localhost" @@ -188,11 +188,11 @@ Feature: Rewrite Tables tests # Recursive mapping - Scenario: direct mapping should be returned when recursive mapping is disable + Scenario: direct mapping should throw when recursive mapping is disable Given recursive mapping is disable And store "user2@domain2" address mapping for user "user1" at domain "domain1" And store "user3@domain3" address mapping for user "user2" at domain "domain2" - Then mappings for user "user1" at domain "domain1" should contain only "user2@domain2" + Then retrieving mappings for user "user1" at domain "localhost1" should raise an ErrorMappingException with message "554 Too many mappings to process" Scenario: recursive mapping should work when two levels Given recursive mapping is enable diff --git a/server/data/data-memory/src/test/java/org/apache/james/rrt/lib/ReverseRecipientRewriteTableImplTest.java b/server/data/data-memory/src/test/java/org/apache/james/rrt/lib/AliasReverseResolverImplTest.java similarity index 78% rename from server/data/data-memory/src/test/java/org/apache/james/rrt/lib/ReverseRecipientRewriteTableImplTest.java rename to server/data/data-memory/src/test/java/org/apache/james/rrt/lib/AliasReverseResolverImplTest.java index fe0d17b..7230ee5 100644 --- a/server/data/data-memory/src/test/java/org/apache/james/rrt/lib/ReverseRecipientRewriteTableImplTest.java +++ b/server/data/data-memory/src/test/java/org/apache/james/rrt/lib/AliasReverseResolverImplTest.java @@ -19,6 +19,8 @@ package org.apache.james.rrt.lib; +import static org.apache.james.rrt.api.RecipientRewriteTableConfiguration.DEFAULT_ENABLED_MAPPING_LIMIT; +import static org.apache.james.rrt.api.RecipientRewriteTableConfiguration.RECURSIVE_MAPPING_ENABLE; import static org.mockito.Mockito.mock; import org.apache.james.core.Domain; @@ -26,14 +28,15 @@ import org.apache.james.core.Username; import org.apache.james.dnsservice.api.DNSService; import org.apache.james.domainlist.lib.DomainListConfiguration; import org.apache.james.domainlist.memory.MemoryDomainList; -import org.apache.james.rrt.api.ReverseRecipientRewriteTable; +import org.apache.james.rrt.api.AliasReverseResolver; +import org.apache.james.rrt.api.RecipientRewriteTableConfiguration; import org.apache.james.rrt.memory.MemoryRecipientRewriteTable; import org.junit.jupiter.api.BeforeEach; -public class ReverseRecipientRewriteTableImplTest implements ReverseRecipientRewriteTableContract { +public class AliasReverseResolverImplTest implements AliasReverseResolverContract { AbstractRecipientRewriteTable recipientRewriteTable; - ReverseRecipientRewriteTableImpl reverseRecipientRewriteTable; + AliasReverseResolverImpl aliasReverseResolver; @BeforeEach void setup() throws Exception { @@ -47,13 +50,14 @@ public class ReverseRecipientRewriteTableImplTest implements ReverseRecipientRew domainList.addDomain(DOMAIN); domainList.addDomain(OTHER_DOMAIN); recipientRewriteTable.setDomainList(domainList); + recipientRewriteTable.setConfiguration(new RecipientRewriteTableConfiguration(RECURSIVE_MAPPING_ENABLE, DEFAULT_ENABLED_MAPPING_LIMIT)); - this.reverseRecipientRewriteTable = new ReverseRecipientRewriteTableImpl(recipientRewriteTable); + this.aliasReverseResolver = new AliasReverseResolverImpl(recipientRewriteTable); } @Override - public ReverseRecipientRewriteTable reverseRecipientRewriteTable() { - return reverseRecipientRewriteTable; + public AliasReverseResolver aliasReverseResolver() { + return aliasReverseResolver; } @Override diff --git a/server/data/data-memory/src/test/java/org/apache/james/rrt/lib/CanSendFromImplTest.java b/server/data/data-memory/src/test/java/org/apache/james/rrt/lib/CanSendFromImplTest.java index 47863a1..99265c1 100644 --- a/server/data/data-memory/src/test/java/org/apache/james/rrt/lib/CanSendFromImplTest.java +++ b/server/data/data-memory/src/test/java/org/apache/james/rrt/lib/CanSendFromImplTest.java @@ -18,6 +18,8 @@ ****************************************************************/ package org.apache.james.rrt.lib; +import static org.apache.james.rrt.api.RecipientRewriteTableConfiguration.DEFAULT_ENABLED_MAPPING_LIMIT; +import static org.apache.james.rrt.api.RecipientRewriteTableConfiguration.RECURSIVE_MAPPING_ENABLE; import static org.mockito.Mockito.mock; import org.apache.james.core.Domain; @@ -26,7 +28,8 @@ import org.apache.james.dnsservice.api.DNSService; import org.apache.james.domainlist.lib.DomainListConfiguration; import org.apache.james.domainlist.memory.MemoryDomainList; import org.apache.james.rrt.api.CanSendFrom; -import org.apache.james.rrt.api.ReverseRecipientRewriteTable; +import org.apache.james.rrt.api.AliasReverseResolver; +import org.apache.james.rrt.api.RecipientRewriteTableConfiguration; import org.apache.james.rrt.memory.MemoryRecipientRewriteTable; import org.junit.jupiter.api.BeforeEach; @@ -47,9 +50,10 @@ public class CanSendFromImplTest implements CanSendFromContract { domainList.addDomain(DOMAIN); domainList.addDomain(OTHER_DOMAIN); recipientRewriteTable.setDomainList(domainList); + recipientRewriteTable.setConfiguration(new RecipientRewriteTableConfiguration(RECURSIVE_MAPPING_ENABLE, DEFAULT_ENABLED_MAPPING_LIMIT)); - ReverseRecipientRewriteTable reverseRecipientRewriteTable = new ReverseRecipientRewriteTableImpl(recipientRewriteTable); - canSendFrom = new CanSendFromImpl(recipientRewriteTable, reverseRecipientRewriteTable); + AliasReverseResolver aliasReverseResolver = new AliasReverseResolverImpl(recipientRewriteTable); + canSendFrom = new CanSendFromImpl(recipientRewriteTable, aliasReverseResolver); } @Override diff --git a/server/data/data-memory/src/test/java/org/apache/james/rrt/memory/InMemoryStepdefs.java b/server/data/data-memory/src/test/java/org/apache/james/rrt/memory/InMemoryStepdefs.java index c3176a8..a2c36da 100644 --- a/server/data/data-memory/src/test/java/org/apache/james/rrt/memory/InMemoryStepdefs.java +++ b/server/data/data-memory/src/test/java/org/apache/james/rrt/memory/InMemoryStepdefs.java @@ -19,11 +19,11 @@ package org.apache.james.rrt.memory; -import org.apache.commons.configuration2.BaseHierarchicalConfiguration; import org.apache.james.rrt.lib.AbstractRecipientRewriteTable; import org.apache.james.rrt.lib.RecipientRewriteTableFixture; import org.apache.james.rrt.lib.RewriteTablesStepdefs; +import com.github.fge.lambdas.Throwing; import cucumber.api.java.Before; public class InMemoryStepdefs { @@ -36,12 +36,11 @@ public class InMemoryStepdefs { @Before public void setup() throws Throwable { - mainStepdefs.rewriteTable = getRecipientRewriteTable(); + mainStepdefs.setUp(Throwing.supplier(this::getRecipientRewriteTable).sneakyThrow()); } private AbstractRecipientRewriteTable getRecipientRewriteTable() throws Exception { MemoryRecipientRewriteTable rrt = new MemoryRecipientRewriteTable(); - rrt.configure(new BaseHierarchicalConfiguration()); rrt.setDomainList(RecipientRewriteTableFixture.domainListForCucumberTests()); return rrt; } diff --git a/server/data/data-memory/src/test/java/org/apache/james/rrt/memory/MemoryRecipientRewriteTableTest.java b/server/data/data-memory/src/test/java/org/apache/james/rrt/memory/MemoryRecipientRewriteTableTest.java index da7853f..7725797 100644 --- a/server/data/data-memory/src/test/java/org/apache/james/rrt/memory/MemoryRecipientRewriteTableTest.java +++ b/server/data/data-memory/src/test/java/org/apache/james/rrt/memory/MemoryRecipientRewriteTableTest.java @@ -19,7 +19,6 @@ package org.apache.james.rrt.memory; -import org.apache.commons.configuration2.BaseHierarchicalConfiguration; import org.apache.james.rrt.lib.AbstractRecipientRewriteTable; import org.apache.james.rrt.lib.AbstractRecipientRewriteTableTest; import org.junit.After; @@ -40,9 +39,7 @@ public class MemoryRecipientRewriteTableTest extends AbstractRecipientRewriteTab } @Override - protected AbstractRecipientRewriteTable getRecipientRewriteTable() throws Exception { - AbstractRecipientRewriteTable rrt = new MemoryRecipientRewriteTable(); - rrt.configure(new BaseHierarchicalConfiguration()); - return rrt; + protected AbstractRecipientRewriteTable getRecipientRewriteTable() { + return new MemoryRecipientRewriteTable(); } } diff --git a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/SetMessagesCreationProcessorTest.java b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/SetMessagesCreationProcessorTest.java index 6740ff1..a4a25fc 100644 --- a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/SetMessagesCreationProcessorTest.java +++ b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/SetMessagesCreationProcessorTest.java @@ -74,11 +74,11 @@ import org.apache.james.mailbox.model.TestMessageId; import org.apache.james.metrics.tests.RecordingMetricFactory; import org.apache.james.rrt.api.CanSendFrom; import org.apache.james.rrt.api.RecipientRewriteTableException; -import org.apache.james.rrt.api.ReverseRecipientRewriteTable; +import org.apache.james.rrt.api.AliasReverseResolver; +import org.apache.james.rrt.lib.AliasReverseResolverImpl; import org.apache.james.rrt.lib.Mapping; import org.apache.james.rrt.lib.MappingSource; import org.apache.james.rrt.lib.CanSendFromImpl; -import org.apache.james.rrt.lib.ReverseRecipientRewriteTableImpl; import org.apache.james.rrt.memory.MemoryRecipientRewriteTable; import org.apache.james.util.OptionalUtils; import org.apache.james.util.html.HtmlTextExtractor; @@ -156,8 +156,8 @@ public class SetMessagesCreationProcessorTest { domainList.addDomain(Domain.of("example.com")); domainList.addDomain(Domain.of("other.org")); recipientRewriteTable.setDomainList(domainList); - ReverseRecipientRewriteTable reverseRecipientRewriteTable = new ReverseRecipientRewriteTableImpl(recipientRewriteTable); - canSendFrom = new CanSendFromImpl(recipientRewriteTable, reverseRecipientRewriteTable); + AliasReverseResolver aliasReverseResolver = new AliasReverseResolverImpl(recipientRewriteTable); + canSendFrom = new CanSendFromImpl(recipientRewriteTable, aliasReverseResolver); messageFullViewFactory = new MessageFullViewFactory(blobManager, messageContentExtractor, htmlTextExtractor, messageIdManager, new MemoryMessageFastViewProjection(new RecordingMetricFactory())); diff --git a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/SetMessagesUpdateProcessorTest.java b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/SetMessagesUpdateProcessorTest.java index 4b8f472..e3c9bf8 100644 --- a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/SetMessagesUpdateProcessorTest.java +++ b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/SetMessagesUpdateProcessorTest.java @@ -67,10 +67,10 @@ import org.apache.james.mailbox.model.TestMessageId; import org.apache.james.metrics.tests.RecordingMetricFactory; import org.apache.james.rrt.api.CanSendFrom; import org.apache.james.rrt.api.RecipientRewriteTableException; -import org.apache.james.rrt.api.ReverseRecipientRewriteTable; +import org.apache.james.rrt.api.AliasReverseResolver; +import org.apache.james.rrt.lib.AliasReverseResolverImpl; import org.apache.james.rrt.lib.CanSendFromImpl; import org.apache.james.rrt.lib.MappingSource; -import org.apache.james.rrt.lib.ReverseRecipientRewriteTableImpl; import org.apache.james.rrt.memory.MemoryRecipientRewriteTable; import org.apache.james.util.OptionalUtils; import org.apache.james.util.html.HtmlTextExtractor; @@ -169,8 +169,8 @@ public class SetMessagesUpdateProcessorTest { domainList.addDomain(Domain.of("example.com")); domainList.addDomain(Domain.of("other.org")); recipientRewriteTable.setDomainList(domainList); - ReverseRecipientRewriteTable reverseRecipientRewriteTable = new ReverseRecipientRewriteTableImpl(recipientRewriteTable); - canSendFrom = new CanSendFromImpl(recipientRewriteTable, reverseRecipientRewriteTable); + AliasReverseResolver aliasReverseResolver = new AliasReverseResolverImpl(recipientRewriteTable); + canSendFrom = new CanSendFromImpl(recipientRewriteTable, aliasReverseResolver); mockedMailSpool = mock(MailSpool.class); mockedMailboxManager = mock(MailboxManager.class); mockedMailboxIdFactory = mock(MailboxId.Factory.class); diff --git a/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPServerTest.java b/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPServerTest.java index c471f72..fbfb0a0 100644 --- a/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPServerTest.java +++ b/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPServerTest.java @@ -70,12 +70,12 @@ import org.apache.james.protocols.netty.AbstractChannelPipelineFactory; import org.apache.james.queue.api.MailQueueFactory; import org.apache.james.queue.api.RawMailQueueItemDecoratorFactory; import org.apache.james.queue.memory.MemoryMailQueueFactory; +import org.apache.james.rrt.api.AliasReverseResolver; import org.apache.james.rrt.api.CanSendFrom; import org.apache.james.rrt.api.RecipientRewriteTable; -import org.apache.james.rrt.api.ReverseRecipientRewriteTable; +import org.apache.james.rrt.lib.AliasReverseResolverImpl; import org.apache.james.rrt.lib.CanSendFromImpl; import org.apache.james.rrt.lib.MappingSource; -import org.apache.james.rrt.lib.ReverseRecipientRewriteTableImpl; import org.apache.james.rrt.memory.MemoryRecipientRewriteTable; import org.apache.james.server.core.configuration.Configuration; import org.apache.james.server.core.filesystem.FileSystemImpl; @@ -200,7 +200,7 @@ public class SMTPServerTest { protected MemoryMailQueueFactory queueFactory; protected MemoryMailQueueFactory.MemoryMailQueue queue; protected MemoryRecipientRewriteTable rewriteTable; - private ReverseRecipientRewriteTable reverseRewriteTable; + private AliasReverseResolver aliasReverseResolver; protected CanSendFrom canSendFrom; private SMTPServer smtpServer; @@ -279,8 +279,8 @@ public class SMTPServerTest { dnsServer = new AlterableDNSServer(); rewriteTable = new MemoryRecipientRewriteTable(); - reverseRewriteTable = new ReverseRecipientRewriteTableImpl(rewriteTable); - canSendFrom = new CanSendFromImpl(rewriteTable, reverseRewriteTable); + aliasReverseResolver = new AliasReverseResolverImpl(rewriteTable); + canSendFrom = new CanSendFromImpl(rewriteTable, aliasReverseResolver); queueFactory = new MemoryMailQueueFactory(new RawMailQueueItemDecoratorFactory()); queue = queueFactory.createQueue(MailQueueFactory.SPOOL); diff --git a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/UserRoutesTest.java b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/UserRoutesTest.java index d45f79e..d876ce2 100644 --- a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/UserRoutesTest.java +++ b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/UserRoutesTest.java @@ -40,13 +40,13 @@ import org.apache.james.core.Domain; import org.apache.james.core.Username; import org.apache.james.domainlist.api.DomainListException; import org.apache.james.domainlist.api.mock.SimpleDomainList; +import org.apache.james.rrt.api.AliasReverseResolver; import org.apache.james.rrt.api.CanSendFrom; import org.apache.james.rrt.api.RecipientRewriteTable; import org.apache.james.rrt.api.RecipientRewriteTableException; -import org.apache.james.rrt.api.ReverseRecipientRewriteTable; import org.apache.james.rrt.lib.CanSendFromImpl; import org.apache.james.rrt.lib.MappingSource; -import org.apache.james.rrt.lib.ReverseRecipientRewriteTableImpl; +import org.apache.james.rrt.lib.AliasReverseResolverImpl; import org.apache.james.rrt.memory.MemoryRecipientRewriteTable; import org.apache.james.user.api.UsersRepository; import org.apache.james.user.api.UsersRepositoryException; @@ -100,7 +100,7 @@ class UserRoutesTest { final MemoryUsersRepository usersRepository; final SimpleDomainList domainList; final MemoryRecipientRewriteTable recipientRewriteTable; - final ReverseRecipientRewriteTable reverseRecipientRewriteTable; + final AliasReverseResolver aliasReverseResolver; final CanSendFrom canSendFrom; WebAdminServer webAdminServer; @@ -110,8 +110,8 @@ class UserRoutesTest { this.domainList = domainList; this.recipientRewriteTable = new MemoryRecipientRewriteTable(); this.recipientRewriteTable.setDomainList(domainList); - this.reverseRecipientRewriteTable = new ReverseRecipientRewriteTableImpl(recipientRewriteTable); - this.canSendFrom = new CanSendFromImpl(recipientRewriteTable, reverseRecipientRewriteTable); + this.aliasReverseResolver = new AliasReverseResolverImpl(recipientRewriteTable); + this.canSendFrom = new CanSendFromImpl(recipientRewriteTable, aliasReverseResolver); } @Override --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org