This is an automated email from the ASF dual-hosted git repository.

rouazana pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 403471a017c626957afde539b1ccb148f6277f64
Author: Tran Tien Duc <[email protected]>
AuthorDate: Mon Apr 22 17:32:58 2019 +0700

    JAMES-2729 add...Mapping() domain existence validations
---
 .../james/cli/DataCommandsIntegrationTest.java     | 37 +++++++++++++++
 .../SourceDomainIsNotInDomainListException.java}   | 27 ++---------
 .../james/rrt/cassandra/CassandraStepdefs.java     |  2 +
 .../rrt/file/XMLRecipientRewriteTableTest.java     |  6 +++
 .../org/apache/james/rrt/jdbc/JDBCStepdefs.java    |  2 +
 .../java/org/apache/james/rrt/jpa/JPAStepdefs.java |  2 +
 .../rrt/lib/AbstractRecipientRewriteTable.java     | 31 ++++++++++++-
 .../rrt/lib/AbstractRecipientRewriteTableTest.java | 52 +++++++++++++++++++++-
 .../rrt/lib/RecipientRewriteTableFixture.java}     | 35 ++++++---------
 .../apache/james/rrt/memory/InMemoryStepdefs.java  |  2 +
 .../transport/matchers/IsSenderInRRTLoopTest.java  |  7 ++-
 .../integration/WebAdminServerIntegrationTest.java | 27 ++++-------
 12 files changed, 164 insertions(+), 66 deletions(-)

diff --git 
a/server/container/cli-integration/src/test/java/org/apache/james/cli/DataCommandsIntegrationTest.java
 
b/server/container/cli-integration/src/test/java/org/apache/james/cli/DataCommandsIntegrationTest.java
index 7cb8fbd..bdd9e80 100644
--- 
a/server/container/cli-integration/src/test/java/org/apache/james/cli/DataCommandsIntegrationTest.java
+++ 
b/server/container/cli-integration/src/test/java/org/apache/james/cli/DataCommandsIntegrationTest.java
@@ -20,6 +20,7 @@
 package org.apache.james.cli;
 
 import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.mockito.Mockito.mock;
 
 import org.apache.james.GuiceJamesServer;
@@ -27,6 +28,7 @@ import org.apache.james.MemoryJmapTestRule;
 import org.apache.james.cli.util.OutputCapture;
 import org.apache.james.mailbox.store.search.ListeningMessageSearchIndex;
 import org.apache.james.modules.server.JMXServerModule;
+import org.apache.james.rrt.api.SourceDomainIsNotInDomainListException;
 import org.apache.james.rrt.lib.Mapping;
 import org.apache.james.rrt.lib.MappingsImpl;
 import org.apache.james.utils.DataProbeImpl;
@@ -132,6 +134,8 @@ public class DataCommandsIntegrationTest {
 
     @Test
     public void addAddressMappingShouldWork() throws Exception {
+        dataProbe.addDomain(DOMAIN);
+
         String redirectionAddress = "[email protected]";
         ServerCmd.doMain(new String[] {"-h", "127.0.0.1", "-p", "9999", 
"addaddressmapping", USER, DOMAIN, redirectionAddress});
 
@@ -145,7 +149,20 @@ public class DataCommandsIntegrationTest {
     }
 
     @Test
+    public void addAddressMappingsShouldThrowWhenDomainIsNotInDomainList() 
throws Exception {
+        String redirectionAddress = "[email protected]";
+
+        assertThatThrownBy(() -> ServerCmd.executeAndOutputToStream(
+                new String[] {"-h", "127.0.0.1", "-p", "9999", 
"addAddressMapping", USER, DOMAIN, redirectionAddress},
+                outputCapture.getPrintStream()))
+            .isInstanceOf(SourceDomainIsNotInDomainListException.class)
+            .hasMessage("Source domain '" + DOMAIN + "' is not managed by the 
domainList");
+    }
+
+    @Test
     public void listMappingsShouldWork() throws Exception {
+        dataProbe.addDomain(DOMAIN);
+
         String redirectionAddress = "[email protected]";
         ServerCmd.doMain(new String[] {"-h", "127.0.0.1", "-p", "9999", 
"addaddressmapping", USER, DOMAIN, redirectionAddress});
 
@@ -158,6 +175,8 @@ public class DataCommandsIntegrationTest {
 
     @Test
     public void listUsersDomainMappingShouldWork() throws Exception {
+        dataProbe.addDomain(DOMAIN);
+
         String redirectionAddress = "[email protected]";
         ServerCmd.doMain(new String[] {"-h", "127.0.0.1", "-p", "9999", 
"addaddressmapping", USER, DOMAIN, redirectionAddress});
 
@@ -170,6 +189,8 @@ public class DataCommandsIntegrationTest {
 
     @Test
     public void removeAddressMappingShouldWork() throws Exception {
+        dataProbe.addDomain(DOMAIN);
+
         String redirectionAddress = "[email protected]";
         ServerCmd.doMain(new String[] {"-h", "127.0.0.1", "-p", "9999", 
"addaddressmapping", USER, DOMAIN, redirectionAddress});
 
@@ -179,8 +200,22 @@ public class DataCommandsIntegrationTest {
             .isEmpty();
     }
 
+
+    @Test
+    public void addRegexMappingsShouldThrowWhenDomainIsNotInDomainList() 
throws Exception {
+        String regexMapping = ".*@apache.org";
+
+        assertThatThrownBy(() -> ServerCmd.executeAndOutputToStream(
+                new String[] {"-h", "127.0.0.1", "-p", "9999", 
"AddRegexMapping", USER, DOMAIN, regexMapping},
+                outputCapture.getPrintStream()))
+            .isInstanceOf(SourceDomainIsNotInDomainListException.class)
+            .hasMessage("Source domain '" + DOMAIN + "' is not managed by the 
domainList");
+    }
+
     @Test
     public void addRegexMappingShouldWork() throws Exception {
+        dataProbe.addDomain(DOMAIN);
+
         String regex = "regex";
         ServerCmd.doMain(new String[] {"-h", "127.0.0.1", "-p", "9999", 
"addregexmapping", USER, DOMAIN, regex});
 
@@ -195,6 +230,8 @@ public class DataCommandsIntegrationTest {
 
     @Test
     public void removeRegexMappingShouldWork() throws Exception {
+        dataProbe.addDomain(DOMAIN);
+
         String regex = "regex";
         ServerCmd.doMain(new String[] {"-h", "127.0.0.1", "-p", "9999", 
"addregexmapping", USER, DOMAIN, regex});
 
diff --git 
a/server/data/data-memory/src/test/java/org/apache/james/rrt/memory/InMemoryStepdefs.java
 
b/server/data/data-api/src/main/java/org/apache/james/rrt/api/SourceDomainIsNotInDomainListException.java
similarity index 59%
copy from 
server/data/data-memory/src/test/java/org/apache/james/rrt/memory/InMemoryStepdefs.java
copy to 
server/data/data-api/src/main/java/org/apache/james/rrt/api/SourceDomainIsNotInDomainListException.java
index 03be5ba..ae3275d 100644
--- 
a/server/data/data-memory/src/test/java/org/apache/james/rrt/memory/InMemoryStepdefs.java
+++ 
b/server/data/data-api/src/main/java/org/apache/james/rrt/api/SourceDomainIsNotInDomainListException.java
@@ -17,30 +17,11 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.rrt.memory;
+package org.apache.james.rrt.api;
 
-import org.apache.commons.configuration.DefaultConfigurationBuilder;
-import org.apache.james.rrt.lib.AbstractRecipientRewriteTable;
-import org.apache.james.rrt.lib.RewriteTablesStepdefs;
+public class SourceDomainIsNotInDomainListException extends 
RecipientRewriteTableException {
 
-import cucumber.api.java.Before;
-
-public class InMemoryStepdefs {
-
-    private final RewriteTablesStepdefs mainStepdefs;
-
-    public InMemoryStepdefs(RewriteTablesStepdefs mainStepdefs) {
-        this.mainStepdefs = mainStepdefs;
-    }
-
-    @Before
-    public void setup() throws Throwable {
-        mainStepdefs.rewriteTable = getRecipientRewriteTable(); 
-    }
-
-    private AbstractRecipientRewriteTable getRecipientRewriteTable() throws 
Exception {
-        MemoryRecipientRewriteTable rrt = new MemoryRecipientRewriteTable();
-        rrt.configure(new DefaultConfigurationBuilder());
-        return rrt;
+    public SourceDomainIsNotInDomainListException(String msg) {
+        super(msg);
     }
 }
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 73f4049..ddc4481 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
@@ -26,6 +26,7 @@ import 
org.apache.james.backends.cassandra.utils.CassandraUtils;
 import org.apache.james.backends.cassandra.versions.CassandraSchemaVersionDAO;
 import 
org.apache.james.backends.cassandra.versions.CassandraSchemaVersionModule;
 import org.apache.james.rrt.lib.AbstractRecipientRewriteTable;
+import org.apache.james.rrt.lib.RecipientRewriteTableFixture;
 import org.apache.james.rrt.lib.RewriteTablesStepdefs;
 import org.junit.Rule;
 
@@ -64,6 +65,7 @@ public class CassandraStepdefs {
             new CassandraMappingsSourcesDAO(cassandra.getConf()),
             new CassandraSchemaVersionDAO(cassandra.getConf()));
         rrt.configure(new DefaultConfigurationBuilder());
+        
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 057b225..57fd85b 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
@@ -73,6 +73,12 @@ public class XMLRecipientRewriteTableTest extends 
AbstractRecipientRewriteTableT
     }
 
     @Test
+    @Ignore("addMapping doesn't handle checking for domain existence in this 
test implementation")
+    @Override
+    public void 
addAddressMappingShouldThrowWhenSourceDomainIsNotInDomainList() {
+    }
+
+    @Test
     @Ignore("addMapping doesn't handle checking for duplicate in this test 
implementation")
     @Override
     public void addMappingShouldThrowWhenMappingAlreadyExists() {
diff --git 
a/server/data/data-jdbc/src/test/java/org/apache/james/rrt/jdbc/JDBCStepdefs.java
 
b/server/data/data-jdbc/src/test/java/org/apache/james/rrt/jdbc/JDBCStepdefs.java
index 284b79d..c6ae828 100644
--- 
a/server/data/data-jdbc/src/test/java/org/apache/james/rrt/jdbc/JDBCStepdefs.java
+++ 
b/server/data/data-jdbc/src/test/java/org/apache/james/rrt/jdbc/JDBCStepdefs.java
@@ -25,6 +25,7 @@ import org.apache.commons.dbcp.BasicDataSource;
 import org.apache.derby.jdbc.EmbeddedDriver;
 import org.apache.james.filesystem.api.mock.MockFileSystem;
 import org.apache.james.rrt.lib.AbstractRecipientRewriteTable;
+import org.apache.james.rrt.lib.RecipientRewriteTableFixture;
 import org.apache.james.rrt.lib.RewriteTablesStepdefs;
 
 import cucumber.api.java.Before;
@@ -51,6 +52,7 @@ public class JDBCStepdefs {
         defaultConfiguration.addProperty("[@destinationURL]", 
"db://maildb/RecipientRewriteTable");
         defaultConfiguration.addProperty("sqlFile", 
"file://conf/sqlResources.xml");
         localVirtualUserTable.configure(defaultConfiguration);
+        
localVirtualUserTable.setDomainList(RecipientRewriteTableFixture.domainListForCucumberTests());
         localVirtualUserTable.init();
         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 93a320c..70f6c82 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
@@ -22,6 +22,7 @@ import 
org.apache.commons.configuration.DefaultConfigurationBuilder;
 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 cucumber.api.java.After;
@@ -52,6 +53,7 @@ public class JPAStepdefs {
         
localVirtualUserTable.setEntityManagerFactory(JPA_TEST_CLUSTER.getEntityManagerFactory());
         DefaultConfigurationBuilder defaultConfiguration = new 
DefaultConfigurationBuilder();
         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 20c3fa5..598db33 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
@@ -19,6 +19,7 @@
 package org.apache.james.rrt.lib;
 
 import java.util.Map;
+import java.util.Optional;
 import java.util.function.Function;
 import java.util.regex.Pattern;
 import java.util.regex.PatternSyntaxException;
@@ -38,7 +39,9 @@ import org.apache.james.rrt.api.MappingAlreadyExistsException;
 import org.apache.james.rrt.api.RecipientRewriteTable;
 import org.apache.james.rrt.api.RecipientRewriteTableException;
 import org.apache.james.rrt.api.SameSourceAndDestinationException;
+import org.apache.james.rrt.api.SourceDomainIsNotInDomainListException;
 import org.apache.james.rrt.lib.Mapping.Type;
+import org.apache.james.util.OptionalUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -184,6 +187,7 @@ public abstract class AbstractRecipientRewriteTable 
implements RecipientRewriteT
 
         Mapping mapping = Mapping.regex(regex);
         checkDuplicateMapping(source, mapping);
+        checkDomainMappingSourceIsManaged(source);
         LOGGER.info("Add regex mapping => {} for source {}", regex, 
source.asString());
         addMapping(source, mapping);
     }
@@ -201,6 +205,7 @@ public abstract class AbstractRecipientRewriteTable 
implements RecipientRewriteT
 
         checkHasValidAddress(mapping);
         checkDuplicateMapping(source, mapping);
+        checkDomainMappingSourceIsManaged(source);
 
         LOGGER.info("Add address mapping => {} for source: {}", 
mapping.asString(), source.asString());
         addMapping(source, mapping);
@@ -234,6 +239,8 @@ public abstract class AbstractRecipientRewriteTable 
implements RecipientRewriteT
         Mapping mapping = Mapping.error(error);
 
         checkDuplicateMapping(source, mapping);
+        checkDomainMappingSourceIsManaged(source);
+
         LOGGER.info("Add error mapping => {} for source: {}", error, 
source.asString());
         addMapping(source, mapping);
 
@@ -247,6 +254,8 @@ public abstract class AbstractRecipientRewriteTable 
implements RecipientRewriteT
 
     @Override
     public void addAliasDomainMapping(MappingSource source, Domain realDomain) 
throws RecipientRewriteTableException {
+        checkDomainMappingSourceIsManaged(source);
+
         LOGGER.info("Add domain mapping: {} => {}", 
source.asDomain().map(Domain::asString).orElse("null"), realDomain);
         addMapping(source, Mapping.domain(realDomain));
     }
@@ -264,6 +273,7 @@ public abstract class AbstractRecipientRewriteTable 
implements RecipientRewriteT
 
         checkHasValidAddress(mapping);
         checkDuplicateMapping(source, mapping);
+        checkDomainMappingSourceIsManaged(source);
 
         LOGGER.info("Add forward mapping => {} for source: {}", 
mapping.asString(), source.asString());
         addMapping(source, mapping);
@@ -285,6 +295,7 @@ public abstract class AbstractRecipientRewriteTable 
implements RecipientRewriteT
 
         checkHasValidAddress(mapping);
         checkDuplicateMapping(source, mapping);
+        checkDomainMappingSourceIsManaged(source);
 
         LOGGER.info("Add group mapping => {} for source: {}", 
mapping.asString(), source.asString());
         addMapping(source, mapping);
@@ -307,6 +318,7 @@ public abstract class AbstractRecipientRewriteTable 
implements RecipientRewriteT
         checkHasValidAddress(mapping);
         checkDuplicateMapping(source, mapping);
         checkNotSameSourceAndDestination(source, address);
+        checkDomainMappingSourceIsManaged(source);
 
         LOGGER.info("Add alias source => {} for destination mapping: {}", 
source.asString(), mapping.asString());
         addMapping(source, mapping);
@@ -335,6 +347,24 @@ public abstract class AbstractRecipientRewriteTable 
implements RecipientRewriteT
      */
     protected abstract Mappings mapAddress(String user, Domain domain) throws 
RecipientRewriteTableException;
 
+    private void checkDomainMappingSourceIsManaged(MappingSource source) 
throws RecipientRewriteTableException {
+        Optional<Domain> notManagedSourceDomain = 
OptionalUtils.toStream(source.availableDomain())
+            .filter(Throwing.<Domain>predicate(domain -> 
!isManagedByDomainList(domain)).sneakyThrow())
+            .findFirst();
+
+        if (notManagedSourceDomain.isPresent()) {
+            throw new SourceDomainIsNotInDomainListException("Source domain '" 
+ notManagedSourceDomain.get().asString() + "' is not managed by the 
domainList");
+        }
+    }
+
+    private boolean isManagedByDomainList(Domain domain) throws 
RecipientRewriteTableException {
+        try {
+            return domainList.containsDomain(domain);
+        } catch (DomainListException e) {
+            throw new RecipientRewriteTableException("Cannot verify domainList 
contains the available domain in source");
+        }
+    }
+
     private void checkDuplicateMapping(MappingSource source, Mapping mapping) 
throws RecipientRewriteTableException {
         Mappings mappings = getStoredMappings(source);
         if (mappings.contains(mapping)) {
@@ -347,5 +377,4 @@ public abstract class AbstractRecipientRewriteTable 
implements RecipientRewriteT
             throw new SameSourceAndDestinationException("Source and 
destination can't be the same!");
         }
     }
-
 }
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 955fe75..be44328 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
@@ -25,9 +25,11 @@ import java.util.Map;
 
 import org.apache.commons.lang3.tuple.Pair;
 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.RecipientRewriteTableException;
+import org.apache.james.rrt.api.SourceDomainIsNotInDomainListException;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
@@ -44,7 +46,10 @@ public abstract class AbstractRecipientRewriteTableTest {
     private static final String USER = "test";
     private static final String ADDRESS = "test@localhost2";
     private static final String ADDRESS_2 = "test@james";
-    private static final MappingSource SOURCE = MappingSource.fromUser(USER, 
Domain.LOCALHOST);
+    private static final Domain SUPPORTED_DOMAIN = Domain.LOCALHOST;
+    private static final MappingSource SOURCE = MappingSource.fromUser(USER, 
SUPPORTED_DOMAIN);
+    private static final Domain NOT_SUPPORTED_DOMAIN = 
Domain.of("notAManagedDomain");
+    private static final MappingSource SOURCE_WITH_DOMAIN_NOT_IN_DOMAIN_LIST = 
MappingSource.fromUser(USER, NOT_SUPPORTED_DOMAIN);
 
     protected abstract AbstractRecipientRewriteTable 
getRecipientRewriteTable() throws Exception;
 
@@ -54,6 +59,10 @@ public abstract class AbstractRecipientRewriteTableTest {
 
     public void setUp() throws Exception {
         virtualUserTable = getRecipientRewriteTable();
+
+        SimpleDomainList domainList = new SimpleDomainList();
+        domainList.addDomain(SUPPORTED_DOMAIN);
+        virtualUserTable.setDomainList(domainList);
     }
 
     public void tearDown() throws Exception {
@@ -533,4 +542,45 @@ public abstract class AbstractRecipientRewriteTableTest {
             .containsExactly(mapping1, mapping2, mapping3);
     }
 
+    @Test
+    public void addRegexMappingShouldThrowWhenSourceDomainIsNotInDomainList() {
+        assertThatThrownBy(() -> 
virtualUserTable.addRegexMapping(SOURCE_WITH_DOMAIN_NOT_IN_DOMAIN_LIST, 
".*@localhost"))
+            .isInstanceOf(SourceDomainIsNotInDomainListException.class);
+    }
+
+    @Test
+    public void 
addAddressMappingShouldThrowWhenSourceDomainIsNotInDomainList() {
+        assertThatThrownBy(() -> 
virtualUserTable.addAddressMapping(SOURCE_WITH_DOMAIN_NOT_IN_DOMAIN_LIST, 
ADDRESS))
+            .isInstanceOf(SourceDomainIsNotInDomainListException.class);
+    }
+
+    @Test
+    public void addErrorMappingShouldThrowWhenSourceDomainIsNotInDomainList() {
+        assertThatThrownBy(() -> 
virtualUserTable.addErrorMapping(SOURCE_WITH_DOMAIN_NOT_IN_DOMAIN_LIST, 
"error"))
+            .isInstanceOf(SourceDomainIsNotInDomainListException.class);
+    }
+
+    @Test
+    public void 
addAliasDomainMappingShouldThrowWhenSourceDomainIsNotInDomainList() {
+        assertThatThrownBy(() -> 
virtualUserTable.addAliasDomainMapping(SOURCE_WITH_DOMAIN_NOT_IN_DOMAIN_LIST, 
SUPPORTED_DOMAIN))
+            .isInstanceOf(SourceDomainIsNotInDomainListException.class);
+    }
+
+    @Test
+    public void 
addForwardMappingShouldThrowWhenSourceDomainIsNotInDomainList() {
+        assertThatThrownBy(() -> 
virtualUserTable.addForwardMapping(SOURCE_WITH_DOMAIN_NOT_IN_DOMAIN_LIST, 
ADDRESS))
+            .isInstanceOf(SourceDomainIsNotInDomainListException.class);
+    }
+
+    @Test
+    public void addGroupMappingShouldThrowWhenSourceDomainIsNotInDomainList() {
+        assertThatThrownBy(() -> 
virtualUserTable.addGroupMapping(SOURCE_WITH_DOMAIN_NOT_IN_DOMAIN_LIST, 
ADDRESS))
+            .isInstanceOf(SourceDomainIsNotInDomainListException.class);
+    }
+
+    @Test
+    public void addAliasMappingShouldThrowWhenDomainIsNotInDomainList() {
+        assertThatThrownBy(() -> 
virtualUserTable.addAliasMapping(SOURCE_WITH_DOMAIN_NOT_IN_DOMAIN_LIST, 
ADDRESS))
+            .isInstanceOf(SourceDomainIsNotInDomainListException.class);
+    }
 }
diff --git 
a/server/data/data-memory/src/test/java/org/apache/james/rrt/memory/InMemoryStepdefs.java
 
b/server/data/data-library/src/test/java/org/apache/james/rrt/lib/RecipientRewriteTableFixture.java
similarity index 59%
copy from 
server/data/data-memory/src/test/java/org/apache/james/rrt/memory/InMemoryStepdefs.java
copy to 
server/data/data-library/src/test/java/org/apache/james/rrt/lib/RecipientRewriteTableFixture.java
index 03be5ba..c4aa68a 100644
--- 
a/server/data/data-memory/src/test/java/org/apache/james/rrt/memory/InMemoryStepdefs.java
+++ 
b/server/data/data-library/src/test/java/org/apache/james/rrt/lib/RecipientRewriteTableFixture.java
@@ -17,30 +17,23 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.rrt.memory;
+package org.apache.james.rrt.lib;
 
-import org.apache.commons.configuration.DefaultConfigurationBuilder;
-import org.apache.james.rrt.lib.AbstractRecipientRewriteTable;
-import org.apache.james.rrt.lib.RewriteTablesStepdefs;
+import org.apache.james.core.Domain;
+import org.apache.james.domainlist.api.DomainListException;
+import org.apache.james.domainlist.api.mock.SimpleDomainList;
 
-import cucumber.api.java.Before;
+public interface RecipientRewriteTableFixture {
 
-public class InMemoryStepdefs {
+    static SimpleDomainList domainListForCucumberTests() throws 
DomainListException {
+        SimpleDomainList domainList = new SimpleDomainList();
+        domainList.addDomain(Domain.LOCALHOST);
+        domainList.addDomain(Domain.of("aliasdomain"));
+        domainList.addDomain(Domain.of("domain1"));
+        domainList.addDomain(Domain.of("domain2"));
+        domainList.addDomain(Domain.of("domain3"));
+        domainList.addDomain(Domain.of("domain4"));
 
-    private final RewriteTablesStepdefs mainStepdefs;
-
-    public InMemoryStepdefs(RewriteTablesStepdefs mainStepdefs) {
-        this.mainStepdefs = mainStepdefs;
-    }
-
-    @Before
-    public void setup() throws Throwable {
-        mainStepdefs.rewriteTable = getRecipientRewriteTable(); 
-    }
-
-    private AbstractRecipientRewriteTable getRecipientRewriteTable() throws 
Exception {
-        MemoryRecipientRewriteTable rrt = new MemoryRecipientRewriteTable();
-        rrt.configure(new DefaultConfigurationBuilder());
-        return rrt;
+        return domainList;
     }
 }
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 03be5ba..e1f9f92 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
@@ -21,6 +21,7 @@ package org.apache.james.rrt.memory;
 
 import org.apache.commons.configuration.DefaultConfigurationBuilder;
 import org.apache.james.rrt.lib.AbstractRecipientRewriteTable;
+import org.apache.james.rrt.lib.RecipientRewriteTableFixture;
 import org.apache.james.rrt.lib.RewriteTablesStepdefs;
 
 import cucumber.api.java.Before;
@@ -41,6 +42,7 @@ public class InMemoryStepdefs {
     private AbstractRecipientRewriteTable getRecipientRewriteTable() throws 
Exception {
         MemoryRecipientRewriteTable rrt = new MemoryRecipientRewriteTable();
         rrt.configure(new DefaultConfigurationBuilder());
+        
rrt.setDomainList(RecipientRewriteTableFixture.domainListForCucumberTests());
         return rrt;
     }
 }
diff --git 
a/server/mailet/mailets/src/test/java/org/apache/james/transport/matchers/IsSenderInRRTLoopTest.java
 
b/server/mailet/mailets/src/test/java/org/apache/james/transport/matchers/IsSenderInRRTLoopTest.java
index 74f454f..64e5475 100644
--- 
a/server/mailet/mailets/src/test/java/org/apache/james/transport/matchers/IsSenderInRRTLoopTest.java
+++ 
b/server/mailet/mailets/src/test/java/org/apache/james/transport/matchers/IsSenderInRRTLoopTest.java
@@ -19,6 +19,7 @@
 
 package org.apache.james.transport.matchers;
 
+import static org.apache.mailet.base.MailAddressFixture.JAMES_LOCAL_DOMAIN;
 import static org.apache.mailet.base.MailAddressFixture.RECIPIENT1;
 import static org.apache.mailet.base.MailAddressFixture.RECIPIENT2;
 import static org.apache.mailet.base.MailAddressFixture.SENDER;
@@ -27,6 +28,7 @@ import static org.assertj.core.api.Assertions.assertThat;
 import java.util.Collection;
 
 import org.apache.james.core.MailAddress;
+import org.apache.james.domainlist.api.mock.SimpleDomainList;
 import org.apache.james.rrt.api.RecipientRewriteTable;
 import org.apache.james.rrt.lib.MappingSource;
 import org.apache.james.rrt.memory.MemoryRecipientRewriteTable;
@@ -40,8 +42,11 @@ public class IsSenderInRRTLoopTest {
     private IsSenderInRRTLoop testee;
 
     @Before
-    public void setUp() {
+    public void setUp() throws Exception {
         recipientRewriteTable = new MemoryRecipientRewriteTable();
+        SimpleDomainList domainList = new SimpleDomainList();
+        domainList.addDomain(JAMES_LOCAL_DOMAIN);
+        ((MemoryRecipientRewriteTable) 
recipientRewriteTable).setDomainList(domainList);
         testee = new IsSenderInRRTLoop(recipientRewriteTable);
     }
 
diff --git 
a/server/protocols/webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/WebAdminServerIntegrationTest.java
 
b/server/protocols/webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/WebAdminServerIntegrationTest.java
index 4d1b172..3df2137 100644
--- 
a/server/protocols/webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/WebAdminServerIntegrationTest.java
+++ 
b/server/protocols/webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/WebAdminServerIntegrationTest.java
@@ -69,6 +69,8 @@ public class WebAdminServerIntegrationTest {
     private static final String DOMAIN = "domain";
     private static final String USERNAME = "username@" + DOMAIN;
     private static final String USERNAME_2 = "username2@" + DOMAIN;
+    private static final String ALIAS_1 = "alias1@" + DOMAIN;
+    private static final String ALIAS_2 = "alias2@" + DOMAIN;
     private static final String GROUP = "group@" + DOMAIN;
     private static final String SPECIFIC_DOMAIN = DomainsRoutes.DOMAINS + 
SEPARATOR + DOMAIN;
     private static final String SPECIFIC_USER = UserRoutes.USERS + SEPARATOR + 
USERNAME;
@@ -93,6 +95,7 @@ public class WebAdminServerIntegrationTest {
         guiceJamesServer = 
cassandraJmapTestRule.jmapServer(cassandra.getModule());
         guiceJamesServer.start();
         dataProbe = guiceJamesServer.getProbe(DataProbeImpl.class);
+        dataProbe.addDomain(DOMAIN);
         WebAdminGuiceProbe webAdminGuiceProbe = 
guiceJamesServer.getProbe(WebAdminGuiceProbe.class);
 
         RestAssured.requestSpecification = 
WebAdminUtils.buildRequestSpecification(webAdminGuiceProbe.getWebAdminPort())
@@ -151,8 +154,6 @@ public class WebAdminServerIntegrationTest {
 
     @Test
     public void deleteShouldRemoveTheGivenDomain() throws Exception {
-        dataProbe.addDomain(DOMAIN);
-
         when()
             .delete(SPECIFIC_DOMAIN)
         .then()
@@ -163,8 +164,6 @@ public class WebAdminServerIntegrationTest {
 
     @Test
     public void postShouldAddTheUser() throws Exception {
-        dataProbe.addDomain(DOMAIN);
-
         given()
             .body("{\"password\":\"password\"}")
         .when()
@@ -177,7 +176,6 @@ public class WebAdminServerIntegrationTest {
 
     @Test
     public void deleteShouldRemoveTheUser() throws Exception {
-        dataProbe.addDomain(DOMAIN);
         dataProbe.addUser(USERNAME, "anyPassword");
 
         given()
@@ -192,7 +190,6 @@ public class WebAdminServerIntegrationTest {
 
     @Test
     public void getUsersShouldDisplayUsers() throws Exception {
-        dataProbe.addDomain(DOMAIN);
         dataProbe.addUser(USERNAME, "anyPassword");
 
         when()
@@ -205,7 +202,6 @@ public class WebAdminServerIntegrationTest {
 
     @Test
     public void putMailboxShouldAddAMailbox() throws Exception {
-        dataProbe.addDomain(DOMAIN);
         dataProbe.addUser(USERNAME, "anyPassword");
 
         when()
@@ -218,7 +214,6 @@ public class WebAdminServerIntegrationTest {
 
     @Test
     public void deleteMailboxShouldRemoveAMailbox() throws Exception {
-        dataProbe.addDomain(DOMAIN);
         dataProbe.addUser(USERNAME, "anyPassword");
         
guiceJamesServer.getProbe(MailboxProbeImpl.class).createMailbox("#private", 
USERNAME, MAILBOX);
 
@@ -292,8 +287,6 @@ public class WebAdminServerIntegrationTest {
 
     @Test
     public void addressGroupsEndpointShouldHandleRequests() throws Exception {
-        dataProbe.addDomain(DOMAIN);
-
         with()
             .put(GroupsRoutes.ROOT_PATH + SEPARATOR + GROUP + SEPARATOR + 
USERNAME);
         with()
@@ -312,7 +305,6 @@ public class WebAdminServerIntegrationTest {
 
     @Test
     public void addressForwardsEndpointShouldListForwardAddresses() throws 
Exception {
-        dataProbe.addDomain(DOMAIN);
         dataProbe.addUser(USERNAME, "anyPassword");
         dataProbe.addUser(USERNAME_2, "anyPassword");
 
@@ -335,9 +327,9 @@ public class WebAdminServerIntegrationTest {
     @Test
     public void addressAliasesEndpointShouldListAliasesAddresses() {
         with()
-            .put(AliasRoutes.ROOT_PATH + SEPARATOR + USERNAME + 
"/sources/[email protected]");
+            .put(AliasRoutes.ROOT_PATH + SEPARATOR + USERNAME + "/sources/" + 
ALIAS_1);
         with()
-            .put(AliasRoutes.ROOT_PATH + SEPARATOR + USERNAME_2 + 
"/sources/[email protected]");
+            .put(AliasRoutes.ROOT_PATH + SEPARATOR + USERNAME_2 + "/sources/" 
+ ALIAS_2);
 
         List<String> members = when()
             .get(AliasRoutes.ROOT_PATH)
@@ -384,13 +376,10 @@ public class WebAdminServerIntegrationTest {
 
     @Test
     public void 
cassandraMappingsEndpointShouldKeepDataConsistencyWhenDataValid() {
-        String alias1 = "[email protected]";
-        String alias2 = "[email protected]";
-
         with()
-            .put(AliasRoutes.ROOT_PATH + SEPARATOR + USERNAME + "/sources/" + 
alias1);
+            .put(AliasRoutes.ROOT_PATH + SEPARATOR + USERNAME + "/sources/" + 
ALIAS_1);
         with()
-            .put(AliasRoutes.ROOT_PATH + SEPARATOR + USERNAME + "/sources/" + 
alias2);
+            .put(AliasRoutes.ROOT_PATH + SEPARATOR + USERNAME + "/sources/" + 
ALIAS_2);
 
         String taskId = with()
             .queryParam("action", "SolveInconsistencies")
@@ -410,6 +399,6 @@ public class WebAdminServerIntegrationTest {
         .then()
             .contentType(ContentType.JSON)
         .statusCode(HttpStatus.OK_200)
-            .body("source", hasItems(alias1, alias2));
+            .body("source", hasItems(ALIAS_1, ALIAS_2));
     }
 }
\ No newline at end of file


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

Reply via email to