You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2019/11/20 01:57:05 UTC

[james-project] 37/49: [Refactoring] UsersRepository should not rely on setter injections

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

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

commit 30d7a837279a48a8d60f2cc5f5dfbfb8d02f05e5
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Sun Nov 17 20:46:26 2019 +0700

    [Refactoring] UsersRepository should not rely on setter injections
    
    This causes issues while binding it as a constant with guice
---
 .../listeners/QuotaThresholdListenersTestSystem.java   |  4 +++-
 .../ElasticSearchQuotaSearchTestSystemExtension.java   |  4 +---
 .../scanning/MemoryQuotaSearchTestSystemExtension.java |  4 +---
 .../org/apache/james/mpt/host/JamesImapHostSystem.java |  4 +++-
 .../cassandra/host/CassandraHostSystem.java            |  6 +++++-
 .../mpt/managesieve/file/host/FileHostSystem.java      |  4 +++-
 .../apache/james/modules/data/MemoryDataModule.java    | 11 ++++++++---
 .../james/user/cassandra/CassandraUsersRepository.java |  4 +++-
 .../user/cassandra/CassandraUsersRepositoryTest.java   |  3 +--
 .../org/apache/james/user/jpa/JPAUsersRepository.java  |  6 ++++++
 .../apache/james/user/jpa/JpaUsersRepositoryTest.java  |  2 +-
 .../apache/james/user/lib/AbstractUsersRepository.java | 12 ++++++------
 .../james/user/lib/AbstractUsersRepositoryTest.java    |  8 +++-----
 .../james/user/memory/MemoryUsersRepository.java       | 12 +++++++-----
 .../james/user/memory/MemoryUsersRepositoryTest.java   | 18 ++++++++----------
 .../user/memory/UsersRepositoryManagementTest.java     |  4 +++-
 .../mailetcontainer/impl/JamesMailetContextTest.java   |  3 +--
 .../james/transport/mailets/SpamAssassinTest.java      |  4 +++-
 .../transport/mailets/WithStorageDirectiveTest.java    |  4 +++-
 .../jmap/draft/JWTAuthenticationStrategyTest.java      |  4 +++-
 .../james/jmap/draft/UserProvisioningFilterTest.java   |  4 +++-
 .../jmap/draft/UserProvisioningFilterThreadTest.java   |  5 +++--
 .../jmap/mailet/filter/JMAPFilteringExtension.java     |  4 +++-
 .../org/apache/james/pop3server/POP3ServerTest.java    |  5 +++--
 .../org/apache/james/smtpserver/SMTPServerTest.java    |  3 ++-
 .../apache/james/webadmin/routes/AliasRoutesTest.java  |  3 +--
 .../james/webadmin/routes/ForwardRoutesTest.java       |  3 +--
 .../apache/james/webadmin/routes/GroupsRoutesTest.java |  3 +--
 .../james/webadmin/routes/SieveQuotaRoutesTest.java    |  4 +++-
 .../james/webadmin/routes/SieveScriptRoutesTest.java   |  4 +++-
 .../apache/james/webadmin/routes/UserRoutesTest.java   | 15 +++++++++------
 .../vault/routes/DeletedMessagesVaultRoutesTest.java   |  3 +--
 .../routes/DomainQuotaRoutesNoVirtualHostingTest.java  |  2 +-
 .../routes/ElasticSearchQuotaSearchExtension.java      |  3 +--
 .../webadmin/routes/ScanningQuotaSearchExtension.java  |  3 +--
 35 files changed, 108 insertions(+), 77 deletions(-)

diff --git a/mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdListenersTestSystem.java b/mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdListenersTestSystem.java
index 14b4ab9..2ba6e93 100644
--- a/mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdListenersTestSystem.java
+++ b/mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdListenersTestSystem.java
@@ -19,6 +19,7 @@
 
 package org.apache.james.mailbox.quota.mailing.listeners;
 
+import org.apache.james.domainlist.api.DomainList;
 import org.apache.james.eventsourcing.eventstore.EventStore;
 import org.apache.james.filesystem.api.FileSystem;
 import org.apache.james.mailbox.events.Event;
@@ -38,6 +39,7 @@ import com.google.common.collect.ImmutableSet;
 
 class QuotaThresholdListenersTestSystem {
     private static final ImmutableSet<RegistrationKey> NO_KEYS = ImmutableSet.of();
+    private static final DomainList NO_DOMAIN_LIST = null;
 
     private final EventBus eventBus;
 
@@ -47,7 +49,7 @@ class QuotaThresholdListenersTestSystem {
         FileSystem fileSystem = new FileSystemImpl(new JamesServerResourceLoader("."));
 
         QuotaThresholdCrossingListener thresholdCrossingListener =
-            new QuotaThresholdCrossingListener(mailetContext, MemoryUsersRepository.withVirtualHosting(), fileSystem, eventStore, configuration);
+            new QuotaThresholdCrossingListener(mailetContext, MemoryUsersRepository.withVirtualHosting(NO_DOMAIN_LIST), fileSystem, eventStore, configuration);
 
         eventBus.register(thresholdCrossingListener);
     }
diff --git a/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/ElasticSearchQuotaSearchTestSystemExtension.java b/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/ElasticSearchQuotaSearchTestSystemExtension.java
index 9af1dc6..cc7d8b2 100644
--- a/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/ElasticSearchQuotaSearchTestSystemExtension.java
+++ b/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/ElasticSearchQuotaSearchTestSystemExtension.java
@@ -61,11 +61,9 @@ public class ElasticSearchQuotaSearchTestSystemExtension implements ParameterRes
 
             InMemoryIntegrationResources resources = InMemoryIntegrationResources.defaultResources();
 
-            MemoryUsersRepository usersRepository = MemoryUsersRepository.withVirtualHosting();
-
             DNSService dnsService = mock(DNSService.class);
             MemoryDomainList domainList = new MemoryDomainList(dnsService);
-            usersRepository.setDomainList(domainList);
+            MemoryUsersRepository usersRepository = MemoryUsersRepository.withVirtualHosting(domainList);
 
             ElasticSearchQuotaMailboxListener listener = new ElasticSearchQuotaMailboxListener(
                 new ElasticSearchIndexer(client,
diff --git a/mailbox/plugin/quota-search-scanning/src/test/java/org/apache/james/quota/search/scanning/MemoryQuotaSearchTestSystemExtension.java b/mailbox/plugin/quota-search-scanning/src/test/java/org/apache/james/quota/search/scanning/MemoryQuotaSearchTestSystemExtension.java
index 325a237..23eb317 100644
--- a/mailbox/plugin/quota-search-scanning/src/test/java/org/apache/james/quota/search/scanning/MemoryQuotaSearchTestSystemExtension.java
+++ b/mailbox/plugin/quota-search-scanning/src/test/java/org/apache/james/quota/search/scanning/MemoryQuotaSearchTestSystemExtension.java
@@ -46,11 +46,9 @@ public class MemoryQuotaSearchTestSystemExtension implements ParameterResolver {
         try {
             InMemoryIntegrationResources resources = InMemoryIntegrationResources.defaultResources();
 
-            MemoryUsersRepository usersRepository = MemoryUsersRepository.withVirtualHosting();
-
             DNSService dnsService = mock(DNSService.class);
             MemoryDomainList domainList = new MemoryDomainList(dnsService);
-            usersRepository.setDomainList(domainList);
+            MemoryUsersRepository usersRepository = MemoryUsersRepository.withVirtualHosting(domainList);
 
             QuotaComponents quotaComponents = resources.getMailboxManager().getQuotaComponents();
 
diff --git a/mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/host/JamesImapHostSystem.java b/mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/host/JamesImapHostSystem.java
index 1f5a3b9..d2a2270 100644
--- a/mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/host/JamesImapHostSystem.java
+++ b/mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/host/JamesImapHostSystem.java
@@ -26,6 +26,7 @@ import org.apache.commons.configuration2.tree.ImmutableNode;
 import org.apache.james.adapter.mailbox.store.UserRepositoryAuthenticator;
 import org.apache.james.adapter.mailbox.store.UserRepositoryAuthorizator;
 import org.apache.james.core.Username;
+import org.apache.james.domainlist.api.DomainList;
 import org.apache.james.imap.api.ImapConfiguration;
 import org.apache.james.imap.api.process.ImapProcessor;
 import org.apache.james.imap.decode.ImapDecoder;
@@ -46,6 +47,7 @@ import org.apache.james.mpt.imapmailbox.GrantRightsOnHost;
 import org.apache.james.user.memory.MemoryUsersRepository;
 
 public abstract class JamesImapHostSystem implements ImapHostSystem, GrantRightsOnHost {
+    private static final DomainList NO_DOMAIN_LIST = null;
 
     private MemoryUsersRepository memoryUsersRepository;
     protected Authorizator authorizator;
@@ -58,7 +60,7 @@ public abstract class JamesImapHostSystem implements ImapHostSystem, GrantRights
 
     @Override
     public void beforeTest() throws Exception {
-        memoryUsersRepository = MemoryUsersRepository.withoutVirtualHosting();
+        memoryUsersRepository = MemoryUsersRepository.withoutVirtualHosting(NO_DOMAIN_LIST);
         try {
             memoryUsersRepository.configure(userRepositoryConfiguration());
         } catch (ConfigurationException e) {
diff --git a/mpt/impl/managesieve/cassandra/src/test/java/org/apache/james/mpt/managesieve/cassandra/host/CassandraHostSystem.java b/mpt/impl/managesieve/cassandra/src/test/java/org/apache/james/mpt/managesieve/cassandra/host/CassandraHostSystem.java
index cdbbb82..882eb3b 100644
--- a/mpt/impl/managesieve/cassandra/src/test/java/org/apache/james/mpt/managesieve/cassandra/host/CassandraHostSystem.java
+++ b/mpt/impl/managesieve/cassandra/src/test/java/org/apache/james/mpt/managesieve/cassandra/host/CassandraHostSystem.java
@@ -21,6 +21,8 @@ package org.apache.james.mpt.managesieve.cassandra.host;
 
 import org.apache.james.backends.cassandra.CassandraCluster;
 import org.apache.james.backends.cassandra.components.CassandraModule;
+import org.apache.james.domainlist.api.DomainList;
+import org.apache.james.domainlist.cassandra.CassandraDomainListModule;
 import org.apache.james.mpt.host.JamesManageSieveHostSystem;
 import org.apache.james.sieve.cassandra.CassandraActiveScriptDAO;
 import org.apache.james.sieve.cassandra.CassandraSieveDAO;
@@ -34,6 +36,7 @@ import org.apache.james.user.cassandra.CassandraUsersRepositoryModule;
 import org.apache.james.util.Host;
 
 public class CassandraHostSystem extends JamesManageSieveHostSystem {
+    private static final DomainList NO_DOMAIN_LIST = null;
     private final Host cassandraHost;
     private CassandraCluster cassandra;
 
@@ -44,6 +47,7 @@ public class CassandraHostSystem extends JamesManageSieveHostSystem {
     @Override
     public void beforeTest() throws Exception {
         CassandraModule modules = CassandraModule.aggregateModules(
+            CassandraDomainListModule.MODULE,
             CassandraSieveRepositoryModule.MODULE,
             CassandraUsersRepositoryModule.MODULE);
         cassandra = CassandraCluster.create(modules, cassandraHost);
@@ -60,7 +64,7 @@ public class CassandraHostSystem extends JamesManageSieveHostSystem {
 
     @Override
     protected UsersRepository createUsersRepository() {
-        CassandraUsersRepository cassandraUsersRepository = new CassandraUsersRepository(cassandra.getConf());
+        CassandraUsersRepository cassandraUsersRepository = new CassandraUsersRepository(NO_DOMAIN_LIST, cassandra.getConf());
         cassandraUsersRepository.setEnableVirtualHosting(false);
         return cassandraUsersRepository;
     }
diff --git a/mpt/impl/managesieve/file/src/test/java/org/apache/james/mpt/managesieve/file/host/FileHostSystem.java b/mpt/impl/managesieve/file/src/test/java/org/apache/james/mpt/managesieve/file/host/FileHostSystem.java
index 384c454..f1ee12e 100644
--- a/mpt/impl/managesieve/file/src/test/java/org/apache/james/mpt/managesieve/file/host/FileHostSystem.java
+++ b/mpt/impl/managesieve/file/src/test/java/org/apache/james/mpt/managesieve/file/host/FileHostSystem.java
@@ -26,6 +26,7 @@ import java.io.IOException;
 import java.io.InputStream;
 
 import org.apache.commons.io.FileUtils;
+import org.apache.james.domainlist.api.DomainList;
 import org.apache.james.filesystem.api.FileSystem;
 import org.apache.james.mpt.host.JamesManageSieveHostSystem;
 import org.apache.james.sieverepository.api.SieveRepository;
@@ -37,6 +38,7 @@ public class FileHostSystem extends JamesManageSieveHostSystem {
 
     private static final String SIEVE_ROOT = FileSystem.FILE_PROTOCOL + "sieve";
     private static final FileSystem fileSystem = getFileSystem();
+    private static final DomainList NO_DOMAIN_LIST = null;
 
     private static FileSystem getFileSystem() {
         return new FileSystem() {
@@ -59,7 +61,7 @@ public class FileHostSystem extends JamesManageSieveHostSystem {
 
     @Override
     protected UsersRepository createUsersRepository() {
-        return MemoryUsersRepository.withoutVirtualHosting();
+        return MemoryUsersRepository.withoutVirtualHosting(NO_DOMAIN_LIST);
     }
 
     @Override
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 5914a08..7daf4b5 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
@@ -69,17 +69,22 @@ public class MemoryDataModule extends AbstractModule {
         bind(MemoryMailRepositoryUrlStore.class).in(Scopes.SINGLETON);
         bind(MailRepositoryUrlStore.class).to(MemoryMailRepositoryUrlStore.class);
 
-        bind(MemoryUsersRepository.class).toInstance(MemoryUsersRepository.withVirtualHosting());
-        bind(UsersRepository.class).to(MemoryUsersRepository.class);
-
         bind(EventSourcingDLPConfigurationStore.class).in(Scopes.SINGLETON);
         bind(DLPConfigurationStore.class).to(EventSourcingDLPConfigurationStore.class);
 
+        bind(UsersRepository.class).to(MemoryUsersRepository.class);
+
         bind(MailStoreRepositoryModule.DefaultItemSupplier.class).toInstance(() -> MEMORY_MAILREPOSITORY_DEFAULT_DECLARATION);
     }
 
     @Provides
     @Singleton
+    public MemoryUsersRepository providesUsersRepository(DomainList domainList) {
+        return MemoryUsersRepository.withVirtualHosting(domainList);
+    }
+
+    @Provides
+    @Singleton
     public DomainListConfiguration provideDomainListConfiguration(ConfigurationProvider configurationProvider) {
         try {
             return DomainListConfiguration.from(configurationProvider.getConfiguration("domainlist"));
diff --git a/server/data/data-cassandra/src/main/java/org/apache/james/user/cassandra/CassandraUsersRepository.java b/server/data/data-cassandra/src/main/java/org/apache/james/user/cassandra/CassandraUsersRepository.java
index 2cdcc7c..f1ac2a8 100644
--- a/server/data/data-cassandra/src/main/java/org/apache/james/user/cassandra/CassandraUsersRepository.java
+++ b/server/data/data-cassandra/src/main/java/org/apache/james/user/cassandra/CassandraUsersRepository.java
@@ -39,6 +39,7 @@ import javax.inject.Inject;
 
 import org.apache.james.backends.cassandra.utils.CassandraAsyncExecutor;
 import org.apache.james.core.Username;
+import org.apache.james.domainlist.api.DomainList;
 import org.apache.james.user.api.AlreadyExistInUsersRepositoryException;
 import org.apache.james.user.api.UsersRepositoryException;
 import org.apache.james.user.api.model.User;
@@ -66,7 +67,8 @@ public class CassandraUsersRepository extends AbstractUsersRepository {
     private final PreparedStatement insertStatement;
 
     @Inject
-    public CassandraUsersRepository(Session session) {
+    public CassandraUsersRepository(DomainList domainList, Session session) {
+        super(domainList);
         this.executor = new CassandraAsyncExecutor(session);
         this.getUserStatement = prepareGetUserStatement(session);
         this.updateUserStatement = prepareUpdateUserStatement(session);
diff --git a/server/data/data-cassandra/src/test/java/org/apache/james/user/cassandra/CassandraUsersRepositoryTest.java b/server/data/data-cassandra/src/test/java/org/apache/james/user/cassandra/CassandraUsersRepositoryTest.java
index a77e80c..0341928 100644
--- a/server/data/data-cassandra/src/test/java/org/apache/james/user/cassandra/CassandraUsersRepositoryTest.java
+++ b/server/data/data-cassandra/src/test/java/org/apache/james/user/cassandra/CassandraUsersRepositoryTest.java
@@ -28,7 +28,6 @@ import org.junit.Before;
 import org.junit.Rule;
 
 public class CassandraUsersRepositoryTest extends AbstractUsersRepositoryTest {
-
     @Rule
     public DockerCassandraRule cassandraServer = new DockerCassandraRule();
     
@@ -51,6 +50,6 @@ public class CassandraUsersRepositoryTest extends AbstractUsersRepositoryTest {
 
     @Override
     protected AbstractUsersRepository getUsersRepository() {
-        return new CassandraUsersRepository(cassandra.getConf());
+        return new CassandraUsersRepository(domainList, cassandra.getConf());
     }
 }
diff --git a/server/data/data-jpa/src/main/java/org/apache/james/user/jpa/JPAUsersRepository.java b/server/data/data-jpa/src/main/java/org/apache/james/user/jpa/JPAUsersRepository.java
index 6308bfe..9eed717 100644
--- a/server/data/data-jpa/src/main/java/org/apache/james/user/jpa/JPAUsersRepository.java
+++ b/server/data/data-jpa/src/main/java/org/apache/james/user/jpa/JPAUsersRepository.java
@@ -36,6 +36,7 @@ import org.apache.commons.configuration2.HierarchicalConfiguration;
 import org.apache.commons.configuration2.ex.ConfigurationException;
 import org.apache.commons.configuration2.tree.ImmutableNode;
 import org.apache.james.core.Username;
+import org.apache.james.domainlist.api.DomainList;
 import org.apache.james.user.api.UsersRepositoryException;
 import org.apache.james.user.api.model.User;
 import org.apache.james.user.jpa.model.JPAUser;
@@ -55,6 +56,11 @@ public class JPAUsersRepository extends AbstractUsersRepository {
 
     private String algo;
 
+    @Inject
+    public JPAUsersRepository(DomainList domainList) {
+        super(domainList);
+    }
+
     /**
      * Sets entity manager.
      * 
diff --git a/server/data/data-jpa/src/test/java/org/apache/james/user/jpa/JpaUsersRepositoryTest.java b/server/data/data-jpa/src/test/java/org/apache/james/user/jpa/JpaUsersRepositoryTest.java
index acdf0a1..f81f3e2 100644
--- a/server/data/data-jpa/src/test/java/org/apache/james/user/jpa/JpaUsersRepositoryTest.java
+++ b/server/data/data-jpa/src/test/java/org/apache/james/user/jpa/JpaUsersRepositoryTest.java
@@ -45,7 +45,7 @@ public class JpaUsersRepositoryTest extends AbstractUsersRepositoryTest {
 
     @Override
     protected AbstractUsersRepository getUsersRepository() throws Exception {
-        JPAUsersRepository repos = new JPAUsersRepository();
+        JPAUsersRepository repos = new JPAUsersRepository(domainList);
         repos.setEntityManagerFactory(JPA_TEST_CLUSTER.getEntityManagerFactory());
         repos.configure(new BaseHierarchicalConfiguration());
         return repos;
diff --git a/server/data/data-library/src/main/java/org/apache/james/user/lib/AbstractUsersRepository.java b/server/data/data-library/src/main/java/org/apache/james/user/lib/AbstractUsersRepository.java
index 58d17a5..7dfcd17 100644
--- a/server/data/data-library/src/main/java/org/apache/james/user/lib/AbstractUsersRepository.java
+++ b/server/data/data-library/src/main/java/org/apache/james/user/lib/AbstractUsersRepository.java
@@ -41,10 +41,15 @@ import com.google.common.annotations.VisibleForTesting;
 
 public abstract class AbstractUsersRepository implements UsersRepository, Configurable {
 
-    private DomainList domainList;
+    private final DomainList domainList;
     private boolean virtualHosting;
     private Optional<Username> administratorId;
 
+    @Inject
+    protected AbstractUsersRepository(DomainList domainList) {
+        this.domainList = domainList;
+    }
+
     @Override
     public void configure(HierarchicalConfiguration<ImmutableNode> configuration) throws ConfigurationException {
 
@@ -66,11 +71,6 @@ public abstract class AbstractUsersRepository implements UsersRepository, Config
         this.virtualHosting = virtualHosting;
     }
 
-    @Inject
-    public void setDomainList(DomainList domainList) {
-        this.domainList = domainList;
-    }
-
     @Override
     public void assertValid(Username username) throws UsersRepositoryException {
         if (supportVirtualHosting()) {
diff --git a/server/data/data-library/src/test/java/org/apache/james/user/lib/AbstractUsersRepositoryTest.java b/server/data/data-library/src/test/java/org/apache/james/user/lib/AbstractUsersRepositoryTest.java
index 3919ea3..0503efb 100644
--- a/server/data/data-library/src/test/java/org/apache/james/user/lib/AbstractUsersRepositoryTest.java
+++ b/server/data/data-library/src/test/java/org/apache/james/user/lib/AbstractUsersRepositoryTest.java
@@ -41,7 +41,7 @@ public abstract class AbstractUsersRepositoryTest {
     private static final Domain DOMAIN = Domain.of("domain");
 
     protected AbstractUsersRepository usersRepository;
-    private SimpleDomainList domainList;
+    protected SimpleDomainList domainList;
 
     /**
      * Create the repository to be tested.
@@ -56,11 +56,10 @@ public abstract class AbstractUsersRepositoryTest {
     private Username user3;
     private Username admin;
     
-    public void setUp() throws Exception { 
-        this.usersRepository = getUsersRepository();
+    public void setUp() throws Exception {
         domainList = new SimpleDomainList();
         domainList.addDomain(DOMAIN);
-        usersRepository.setDomainList(domainList);
+        this.usersRepository = getUsersRepository();
         user1 = login("username");
         user2 = login("username2");
         user3 = login("username3");
@@ -382,7 +381,6 @@ public abstract class AbstractUsersRepositoryTest {
     @Test
     public void getMailAddressForShouldAppendDefaultDomainWhenNoVirtualHosting() throws Exception {
         usersRepository.setEnableVirtualHosting(false);
-        usersRepository.setDomainList(domainList);
 
         // Some implementations do not support changing virtual hosting value
         Assume.assumeFalse(usersRepository.supportVirtualHosting());
diff --git a/server/data/data-memory/src/main/java/org/apache/james/user/memory/MemoryUsersRepository.java b/server/data/data-memory/src/main/java/org/apache/james/user/memory/MemoryUsersRepository.java
index f7d74c2..7a4de59 100644
--- a/server/data/data-memory/src/main/java/org/apache/james/user/memory/MemoryUsersRepository.java
+++ b/server/data/data-memory/src/main/java/org/apache/james/user/memory/MemoryUsersRepository.java
@@ -28,6 +28,7 @@ import org.apache.commons.configuration2.HierarchicalConfiguration;
 import org.apache.commons.configuration2.ex.ConfigurationException;
 import org.apache.commons.configuration2.tree.ImmutableNode;
 import org.apache.james.core.Username;
+import org.apache.james.domainlist.api.DomainList;
 import org.apache.james.user.api.UsersRepositoryException;
 import org.apache.james.user.api.model.User;
 import org.apache.james.user.lib.AbstractUsersRepository;
@@ -35,19 +36,20 @@ import org.apache.james.user.lib.model.DefaultUser;
 
 public class MemoryUsersRepository extends AbstractUsersRepository {
 
-    public static MemoryUsersRepository withVirtualHosting() {
-        return new MemoryUsersRepository(true);
+    public static MemoryUsersRepository withVirtualHosting(DomainList domainList) {
+        return new MemoryUsersRepository(domainList, true);
     }
 
-    public static MemoryUsersRepository withoutVirtualHosting() {
-        return new MemoryUsersRepository(false);
+    public static MemoryUsersRepository withoutVirtualHosting(DomainList domainList) {
+        return new MemoryUsersRepository(domainList, false);
     }
     
     private final Map<String, User> userByName;
     private final boolean supportVirtualHosting;
     private String algo;
 
-    private MemoryUsersRepository(boolean supportVirtualHosting) {
+    private MemoryUsersRepository(DomainList domainList, boolean supportVirtualHosting) {
+        super(domainList);
         this.userByName = new HashMap<>();
         this.algo = "MD5";
         this.supportVirtualHosting = supportVirtualHosting;
diff --git a/server/data/data-memory/src/test/java/org/apache/james/user/memory/MemoryUsersRepositoryTest.java b/server/data/data-memory/src/test/java/org/apache/james/user/memory/MemoryUsersRepositoryTest.java
index c0a0aa6..3ac57c5 100644
--- a/server/data/data-memory/src/test/java/org/apache/james/user/memory/MemoryUsersRepositoryTest.java
+++ b/server/data/data-memory/src/test/java/org/apache/james/user/memory/MemoryUsersRepositoryTest.java
@@ -42,12 +42,12 @@ public class MemoryUsersRepositoryTest extends AbstractUsersRepositoryTest {
     
     @Override
     protected AbstractUsersRepository getUsersRepository() {
-        return MemoryUsersRepository.withVirtualHosting();
+        return MemoryUsersRepository.withVirtualHosting(domainList);
     }
 
     @Test
     public void assertValidShouldThrowWhenDomainPartAndNoVirtualHosting() {
-        MemoryUsersRepository memoryUsersRepository = MemoryUsersRepository.withoutVirtualHosting();
+        MemoryUsersRepository memoryUsersRepository = MemoryUsersRepository.withoutVirtualHosting(domainList);
 
         assertThatThrownBy(() -> memoryUsersRepository.assertValid(Username.of("user@domain.tld")))
             .isInstanceOf(UsersRepositoryException.class);
@@ -55,7 +55,7 @@ public class MemoryUsersRepositoryTest extends AbstractUsersRepositoryTest {
 
     @Test
     public void assertValidShouldThrowWhenNoDomainPartAndVirtualHosting() {
-        MemoryUsersRepository memoryUsersRepository = MemoryUsersRepository.withVirtualHosting();
+        MemoryUsersRepository memoryUsersRepository = MemoryUsersRepository.withVirtualHosting(domainList);
 
         assertThatThrownBy(() -> memoryUsersRepository.assertValid(Username.of("user")))
             .isInstanceOf(UsersRepositoryException.class);
@@ -63,15 +63,14 @@ public class MemoryUsersRepositoryTest extends AbstractUsersRepositoryTest {
 
     @Test
     public void assertValidShouldNotThrowWhenDomainPartAndVirtualHosting() throws Exception {
-        MemoryUsersRepository memoryUsersRepository = MemoryUsersRepository.withVirtualHosting();
-
         MemoryDomainList domainList = new MemoryDomainList(new InMemoryDNSService()
             .registerMxRecord("localhost", "127.0.0.1")
             .registerMxRecord("127.0.0.1", "127.0.0.1"));
         domainList.setAutoDetect(false);
         domainList.setAutoDetectIP(false);
         domainList.addDomain(Domain.of("domain.tld"));
-        memoryUsersRepository.setDomainList(domainList);
+
+        MemoryUsersRepository memoryUsersRepository = MemoryUsersRepository.withVirtualHosting(domainList);
 
         assertThatCode(() -> memoryUsersRepository.assertValid(Username.of("user@domain.tld")))
             .doesNotThrowAnyException();
@@ -79,14 +78,13 @@ public class MemoryUsersRepositoryTest extends AbstractUsersRepositoryTest {
 
     @Test
     public void assertValidShouldNotThrowWhenDomainPartAndDomainNotFound() throws Exception {
-        MemoryUsersRepository memoryUsersRepository = MemoryUsersRepository.withVirtualHosting();
-
         MemoryDomainList domainList = new MemoryDomainList(new InMemoryDNSService()
             .registerMxRecord("localhost", "127.0.0.1")
             .registerMxRecord("127.0.0.1", "127.0.0.1"));
         domainList.setAutoDetect(false);
         domainList.setAutoDetectIP(false);
-        memoryUsersRepository.setDomainList(domainList);
+
+        MemoryUsersRepository memoryUsersRepository = MemoryUsersRepository.withVirtualHosting(domainList);
 
         assertThatThrownBy(() -> memoryUsersRepository.assertValid(Username.of("user@domain.tld")))
             .isInstanceOf(UsersRepositoryException.class);
@@ -94,7 +92,7 @@ public class MemoryUsersRepositoryTest extends AbstractUsersRepositoryTest {
 
     @Test
     public void assertValidShouldNotThrowWhenNoDomainPartAndNoVirtualHosting() {
-        MemoryUsersRepository memoryUsersRepository = MemoryUsersRepository.withoutVirtualHosting();
+        MemoryUsersRepository memoryUsersRepository = MemoryUsersRepository.withoutVirtualHosting(domainList);
 
         assertThatCode(() -> memoryUsersRepository.assertValid(Username.of("user")))
             .doesNotThrowAnyException();
diff --git a/server/data/data-memory/src/test/java/org/apache/james/user/memory/UsersRepositoryManagementTest.java b/server/data/data-memory/src/test/java/org/apache/james/user/memory/UsersRepositoryManagementTest.java
index a99091b..fb7fa30 100644
--- a/server/data/data-memory/src/test/java/org/apache/james/user/memory/UsersRepositoryManagementTest.java
+++ b/server/data/data-memory/src/test/java/org/apache/james/user/memory/UsersRepositoryManagementTest.java
@@ -25,19 +25,21 @@ import java.util.Arrays;
 import java.util.List;
 
 import org.apache.james.core.Username;
+import org.apache.james.domainlist.api.DomainList;
 import org.apache.james.user.api.UsersRepository;
 import org.apache.james.user.lib.UsersRepositoryManagement;
 import org.junit.Before;
 import org.junit.Test;
 
 public class UsersRepositoryManagementTest {
+    private static final DomainList NO_DOMAIN_LIST = null;
 
     private UsersRepository usersRepository;
     private UsersRepositoryManagement userManagement;
 
     @Before
     public void setUp() throws Exception {
-        usersRepository = MemoryUsersRepository.withoutVirtualHosting();
+        usersRepository = MemoryUsersRepository.withoutVirtualHosting(NO_DOMAIN_LIST);
 
         userManagement = new UsersRepositoryManagement();
         userManagement.setUsersRepository(usersRepository);
diff --git a/server/mailet/mailetcontainer-camel/src/test/java/org/apache/james/mailetcontainer/impl/JamesMailetContextTest.java b/server/mailet/mailetcontainer-camel/src/test/java/org/apache/james/mailetcontainer/impl/JamesMailetContextTest.java
index 42c3dee..6dccf9c 100644
--- a/server/mailet/mailetcontainer-camel/src/test/java/org/apache/james/mailetcontainer/impl/JamesMailetContextTest.java
+++ b/server/mailet/mailetcontainer-camel/src/test/java/org/apache/james/mailetcontainer/impl/JamesMailetContextTest.java
@@ -79,8 +79,7 @@ public class JamesMailetContextTest {
             .autoDetectIp(false)
             .build());
 
-        usersRepository = MemoryUsersRepository.withVirtualHosting();
-        usersRepository.setDomainList(domainList);
+        usersRepository = MemoryUsersRepository.withVirtualHosting(domainList);
         MailQueueFactory<MailQueue> mailQueueFactory = mock(MailQueueFactory.class);
         spoolMailQueue = mock(MailQueue.class);
         when(mailQueueFactory.createQueue(MailQueueFactory.SPOOL)).thenReturn(spoolMailQueue);
diff --git a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/SpamAssassinTest.java b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/SpamAssassinTest.java
index 0d9c776..ba840fc 100644
--- a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/SpamAssassinTest.java
+++ b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/SpamAssassinTest.java
@@ -26,6 +26,7 @@ import javax.mail.MessagingException;
 
 import org.apache.james.core.MailAddress;
 import org.apache.james.core.builder.MimeMessageBuilder;
+import org.apache.james.domainlist.api.DomainList;
 import org.apache.james.metrics.api.NoopMetricFactory;
 import org.apache.james.spamassassin.SpamAssassinResult;
 import org.apache.james.spamassassin.mock.MockSpamd;
@@ -43,10 +44,11 @@ import com.github.steveash.guavate.Guavate;
 
 public class SpamAssassinTest {
 
+    public static final DomainList NO_DOMAIN_LIST = null;
     @Rule
     public MockSpamdTestRule spamd = new MockSpamdTestRule();
 
-    private SpamAssassin mailet = new SpamAssassin(new NoopMetricFactory(), MemoryUsersRepository.withVirtualHosting());
+    private SpamAssassin mailet = new SpamAssassin(new NoopMetricFactory(), MemoryUsersRepository.withVirtualHosting(NO_DOMAIN_LIST));
 
     @Test
     public void initShouldSetDefaultSpamdHostWhenNone() throws Exception {
diff --git a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/WithStorageDirectiveTest.java b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/WithStorageDirectiveTest.java
index 518baab..e2a6a36 100644
--- a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/WithStorageDirectiveTest.java
+++ b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/WithStorageDirectiveTest.java
@@ -22,6 +22,7 @@ package org.apache.james.transport.mailets;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
+import org.apache.james.domainlist.api.DomainList;
 import org.apache.james.user.memory.MemoryUsersRepository;
 import org.apache.mailet.Attribute;
 import org.apache.mailet.AttributeName;
@@ -35,6 +36,7 @@ import org.junit.Rule;
 import org.junit.Test;
 
 public class WithStorageDirectiveTest {
+    private static final DomainList NO_DOMAIN_LIST = null;
 
     private WithStorageDirective testee;
 
@@ -43,7 +45,7 @@ public class WithStorageDirectiveTest {
 
     @Before
     public void setUp() {
-        testee = new WithStorageDirective(MemoryUsersRepository.withVirtualHosting());
+        testee = new WithStorageDirective(MemoryUsersRepository.withVirtualHosting(NO_DOMAIN_LIST));
     }
 
     @Test
diff --git a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/JWTAuthenticationStrategyTest.java b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/JWTAuthenticationStrategyTest.java
index 08110c0..733b626 100644
--- a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/JWTAuthenticationStrategyTest.java
+++ b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/JWTAuthenticationStrategyTest.java
@@ -29,6 +29,7 @@ import java.util.stream.Stream;
 import javax.servlet.http.HttpServletRequest;
 
 import org.apache.james.core.Username;
+import org.apache.james.domainlist.api.DomainList;
 import org.apache.james.jmap.draft.exceptions.MailboxSessionCreationException;
 import org.apache.james.jmap.draft.exceptions.NoValidAuthHeaderException;
 import org.apache.james.jmap.draft.utils.HeadersAuthenticationExtractor;
@@ -41,6 +42,7 @@ import org.junit.Before;
 import org.junit.Test;
 
 public class JWTAuthenticationStrategyTest {
+    private static final DomainList NO_DOMAIN_LIST = null;
 
     private JWTAuthenticationStrategy testee;
     private MailboxManager mockedMailboxManager;
@@ -54,7 +56,7 @@ public class JWTAuthenticationStrategyTest {
         mockedMailboxManager = mock(MailboxManager.class);
         mockAuthenticationExtractor = mock(HeadersAuthenticationExtractor.class);
         request = mock(HttpServletRequest.class);
-        MemoryUsersRepository usersRepository = MemoryUsersRepository.withoutVirtualHosting();
+        MemoryUsersRepository usersRepository = MemoryUsersRepository.withoutVirtualHosting(NO_DOMAIN_LIST);
 
         testee = new JWTAuthenticationStrategy(stubTokenVerifier, mockedMailboxManager, mockAuthenticationExtractor, usersRepository);
     }
diff --git a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/UserProvisioningFilterTest.java b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/UserProvisioningFilterTest.java
index 5b03808..3fec2ca 100644
--- a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/UserProvisioningFilterTest.java
+++ b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/UserProvisioningFilterTest.java
@@ -35,6 +35,7 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
 import org.apache.james.core.Username;
+import org.apache.james.domainlist.api.DomainList;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MailboxSessionUtil;
 import org.apache.james.metrics.api.NoopMetricFactory;
@@ -47,6 +48,7 @@ import org.junit.Test;
 public class UserProvisioningFilterTest {
     private static final Username USERNAME = Username.of("username");
     private static final Username USERNAME_WITH_DOMAIN = Username.of("username@james.org");
+    private static final DomainList NO_DOMAIN_LIST = null;
 
     private UserProvisioningFilter sut;
     private MemoryUsersRepository usersRepository;
@@ -56,7 +58,7 @@ public class UserProvisioningFilterTest {
 
     @Before
     public void setup() throws Exception {
-        usersRepository = MemoryUsersRepository.withoutVirtualHosting();
+        usersRepository = MemoryUsersRepository.withoutVirtualHosting(NO_DOMAIN_LIST);
         sut = new UserProvisioningFilter(usersRepository, new NoopMetricFactory());
         request = mock(HttpServletRequest.class);
         response = mock(HttpServletResponse.class);
diff --git a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/UserProvisioningFilterThreadTest.java b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/UserProvisioningFilterThreadTest.java
index ce96d1d..43b3984 100644
--- a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/UserProvisioningFilterThreadTest.java
+++ b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/UserProvisioningFilterThreadTest.java
@@ -22,7 +22,7 @@ import java.time.Duration;
 import java.util.concurrent.ExecutionException;
 
 import org.apache.james.core.Username;
-import org.apache.james.jmap.draft.UserProvisioningFilter;
+import org.apache.james.domainlist.api.DomainList;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MailboxSessionUtil;
 import org.apache.james.metrics.api.NoopMetricFactory;
@@ -32,6 +32,7 @@ import org.junit.Before;
 import org.junit.Test;
 
 public class UserProvisioningFilterThreadTest {
+    private static final DomainList NO_DOMAIN_LIST = null;
 
     private UserProvisioningFilter sut;
     private MemoryUsersRepository usersRepository;
@@ -39,7 +40,7 @@ public class UserProvisioningFilterThreadTest {
 
     @Before
     public void before() {
-        usersRepository = MemoryUsersRepository.withoutVirtualHosting();
+        usersRepository = MemoryUsersRepository.withoutVirtualHosting(NO_DOMAIN_LIST);
         session = MailboxSessionUtil.create(Username.of("username"));
         sut = new UserProvisioningFilter(usersRepository, new NoopMetricFactory());
     }
diff --git a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/mailet/filter/JMAPFilteringExtension.java b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/mailet/filter/JMAPFilteringExtension.java
index 72da3c9..4232100 100644
--- a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/mailet/filter/JMAPFilteringExtension.java
+++ b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/mailet/filter/JMAPFilteringExtension.java
@@ -32,6 +32,7 @@ import javax.mail.MessagingException;
 
 import org.apache.james.core.Username;
 import org.apache.james.core.builder.MimeMessageBuilder;
+import org.apache.james.domainlist.api.DomainList;
 import org.apache.james.eventsourcing.eventstore.memory.InMemoryEventStore;
 import org.apache.james.jmap.api.filtering.FilteringManagement;
 import org.apache.james.jmap.api.filtering.Rule;
@@ -53,6 +54,7 @@ import org.junit.jupiter.api.extension.ParameterResolver;
 import com.google.common.collect.ImmutableList;
 
 public class JMAPFilteringExtension implements BeforeEachCallback, ParameterResolver {
+    private static final DomainList NO_DOMAIN_LIST = null;
 
     class JMAPFilteringTestSystem {
 
@@ -130,7 +132,7 @@ public class JMAPFilteringExtension implements BeforeEachCallback, ParameterReso
     @Override
     public void beforeEach(ExtensionContext extensionContext) {
         FilteringManagement filteringManagement = new EventSourcingFilteringManagement(new InMemoryEventStore());
-        MemoryUsersRepository usersRepository = MemoryUsersRepository.withoutVirtualHosting();
+        MemoryUsersRepository usersRepository = MemoryUsersRepository.withoutVirtualHosting(NO_DOMAIN_LIST);
         InMemoryMailboxManager mailboxManager = InMemoryIntegrationResources.defaultResources().getMailboxManager();
         ActionApplier.Factory actionApplierFactory = ActionApplier.factory(mailboxManager, new InMemoryId.Factory());
 
diff --git a/server/protocols/protocols-pop3/src/test/java/org/apache/james/pop3server/POP3ServerTest.java b/server/protocols/protocols-pop3/src/test/java/org/apache/james/pop3server/POP3ServerTest.java
index 6e7083c..00d6d96 100644
--- a/server/protocols/protocols-pop3/src/test/java/org/apache/james/pop3server/POP3ServerTest.java
+++ b/server/protocols/protocols-pop3/src/test/java/org/apache/james/pop3server/POP3ServerTest.java
@@ -31,6 +31,7 @@ import org.apache.commons.net.pop3.POP3Client;
 import org.apache.commons.net.pop3.POP3MessageInfo;
 import org.apache.commons.net.pop3.POP3Reply;
 import org.apache.james.core.Username;
+import org.apache.james.domainlist.api.DomainList;
 import org.apache.james.filesystem.api.FileSystem;
 import org.apache.james.filesystem.api.mock.MockFileSystem;
 import org.apache.james.mailbox.MailboxManager;
@@ -48,7 +49,6 @@ import org.apache.james.protocols.lib.mock.MockProtocolHandlerLoader;
 import org.apache.james.user.api.UsersRepository;
 import org.apache.james.user.api.UsersRepositoryException;
 import org.apache.james.user.memory.MemoryUsersRepository;
-
 import org.jboss.netty.util.HashedWheelTimer;
 import org.junit.After;
 import org.junit.Before;
@@ -56,9 +56,10 @@ import org.junit.Ignore;
 import org.junit.Test;
 
 public class POP3ServerTest {
+    private static final DomainList NO_DOMAIN_LIST = null;
 
     private POP3TestConfiguration pop3Configuration;
-    private final MemoryUsersRepository usersRepository = MemoryUsersRepository.withoutVirtualHosting();
+    private final MemoryUsersRepository usersRepository = MemoryUsersRepository.withoutVirtualHosting(NO_DOMAIN_LIST);
     private POP3Client pop3Client = null;
     protected MockFileSystem fileSystem;
     protected MockProtocolHandlerLoader protocolHandlerChain;
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 b0c094d..2bed383 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
@@ -171,11 +171,12 @@ public class SMTPServerTest {
 
     private static final long HALF_SECOND = 500;
     private static final int MAX_ITERATIONS = 10;
+    private static final DomainList NO_DOMAIN_LIST = null;
     private static final Logger LOGGER = LoggerFactory.getLogger(SMTPServerTest.class);
 
     protected SMTPTestConfiguration smtpConfiguration;
     protected HashedWheelTimer hashedWheelTimer;
-    protected final MemoryUsersRepository usersRepository = MemoryUsersRepository.withoutVirtualHosting();
+    protected final MemoryUsersRepository usersRepository = MemoryUsersRepository.withoutVirtualHosting(NO_DOMAIN_LIST);
     protected AlterableDNSServer dnsServer;
     protected MemoryMailRepositoryStore mailRepositoryStore;
     protected FileSystemImpl fileSystem;
diff --git a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/AliasRoutesTest.java b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/AliasRoutesTest.java
index 57f6809..64ebf18 100644
--- a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/AliasRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/AliasRoutesTest.java
@@ -116,8 +116,7 @@ class AliasRoutesTest {
             MappingSourceModule module = new MappingSourceModule();
             memoryRecipientRewriteTable.setDomainList(domainList);
 
-            usersRepository = MemoryUsersRepository.withVirtualHosting();
-            usersRepository.setDomainList(domainList);
+            usersRepository = MemoryUsersRepository.withVirtualHosting(domainList);
             usersRepository.configure(new BaseHierarchicalConfiguration());
 
             usersRepository.addUser(Username.of(BOB), BOB_PASSWORD);
diff --git a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/ForwardRoutesTest.java b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/ForwardRoutesTest.java
index 51b18b2..27c8ec9 100644
--- a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/ForwardRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/ForwardRoutesTest.java
@@ -115,8 +115,7 @@ class ForwardRoutesTest {
             memoryRecipientRewriteTable.setDomainList(domainList);
             MappingSourceModule mappingSourceModule = new MappingSourceModule();
 
-            usersRepository = MemoryUsersRepository.withVirtualHosting();
-            usersRepository.setDomainList(domainList);
+            usersRepository = MemoryUsersRepository.withVirtualHosting(domainList);
             usersRepository.configure(new BaseHierarchicalConfiguration());
 
             usersRepository.addUser(Username.of(BOB), BOB_PASSWORD);
diff --git a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/GroupsRoutesTest.java b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/GroupsRoutesTest.java
index 910121f..6c2f9c7 100644
--- a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/GroupsRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/GroupsRoutesTest.java
@@ -107,8 +107,7 @@ class GroupsRoutesTest {
             domainList.addDomain(DOMAIN);
             domainList.addDomain(ALIAS_DOMAIN);
             memoryRecipientRewriteTable.setDomainList(domainList);
-            usersRepository = MemoryUsersRepository.withVirtualHosting();
-            usersRepository.setDomainList(domainList);
+            usersRepository = MemoryUsersRepository.withVirtualHosting(domainList);
             MappingSourceModule mappingSourceModule = new MappingSourceModule();
             createServer(new GroupsRoutes(memoryRecipientRewriteTable, usersRepository, new JsonTransformer(mappingSourceModule)));
         }
diff --git a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/SieveQuotaRoutesTest.java b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/SieveQuotaRoutesTest.java
index 759b556..d256947 100644
--- a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/SieveQuotaRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/SieveQuotaRoutesTest.java
@@ -25,6 +25,7 @@ import static org.hamcrest.Matchers.is;
 
 import org.apache.james.core.Username;
 import org.apache.james.core.quota.QuotaSizeLimit;
+import org.apache.james.domainlist.api.DomainList;
 import org.apache.james.sieverepository.api.SieveQuotaRepository;
 import org.apache.james.sieverepository.memory.InMemorySieveQuotaRepository;
 import org.apache.james.user.api.UsersRepositoryException;
@@ -45,6 +46,7 @@ class SieveQuotaRoutesTest {
     private static final String USER_NAME_A = "userA";
     private static final String PASSWORD_A = "123456";
     private static final Username USERNAME_A = Username.of(USER_NAME_A);
+    private static final DomainList NO_DOMAIN_LIST = null;
 
     private WebAdminServer webAdminServer;
     private SieveQuotaRepository sieveRepository;
@@ -53,7 +55,7 @@ class SieveQuotaRoutesTest {
     void setUp() throws UsersRepositoryException {
         sieveRepository = new InMemorySieveQuotaRepository();
 
-        MemoryUsersRepository usersRepository = MemoryUsersRepository.withoutVirtualHosting();
+        MemoryUsersRepository usersRepository = MemoryUsersRepository.withoutVirtualHosting(NO_DOMAIN_LIST);
         usersRepository.addUser(Username.of(USER_NAME_A), PASSWORD_A);
 
         webAdminServer = WebAdminUtils.createWebAdminServer(new SieveQuotaRoutes(sieveRepository, usersRepository, new JsonTransformer()))
diff --git a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/SieveScriptRoutesTest.java b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/SieveScriptRoutesTest.java
index 7570b23..f103643 100644
--- a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/SieveScriptRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/SieveScriptRoutesTest.java
@@ -34,6 +34,7 @@ import java.nio.charset.StandardCharsets;
 
 import org.apache.commons.io.IOUtils;
 import org.apache.james.core.Username;
+import org.apache.james.domainlist.api.DomainList;
 import org.apache.james.filesystem.api.FileSystem;
 import org.apache.james.junit.TemporaryFolderExtension;
 import org.apache.james.sieverepository.api.ScriptContent;
@@ -55,6 +56,7 @@ import io.restassured.RestAssured;
 
 @ExtendWith(TemporaryFolderExtension.class)
 class SieveScriptRoutesTest {
+    private static final DomainList NO_DOMAIN_LIST = null;
 
     private WebAdminServer webAdminServer;
     private SieveRepository sieveRepository;
@@ -80,7 +82,7 @@ class SieveScriptRoutesTest {
         };
 
         sieveRepository = new SieveFileRepository(fileSystem);
-        UsersRepository usersRepository = MemoryUsersRepository.withoutVirtualHosting();
+        UsersRepository usersRepository = MemoryUsersRepository.withoutVirtualHosting(NO_DOMAIN_LIST);
         usersRepository.addUser(Username.of("userA"), "password");
 
         URL sieveResource = ClassLoader.getSystemResource("sieve/my_sieve");
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 34a59a2..fc83f11 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
@@ -68,31 +68,34 @@ class UserRoutesTest {
     private static class UserRoutesExtension implements BeforeEachCallback, AfterEachCallback, ParameterResolver {
 
         static UserRoutesExtension withVirtualHosting() {
-            return new UserRoutesExtension(MemoryUsersRepository.withVirtualHosting());
+            SimpleDomainList domainList = new SimpleDomainList();
+            return new UserRoutesExtension(MemoryUsersRepository.withVirtualHosting(domainList), domainList);
         }
+
         static UserRoutesExtension withoutVirtualHosting() {
-            return new UserRoutesExtension(MemoryUsersRepository.withoutVirtualHosting());
+            SimpleDomainList domainList = new SimpleDomainList();
+            return new UserRoutesExtension(MemoryUsersRepository.withoutVirtualHosting(domainList), domainList);
         }
 
         final MemoryUsersRepository usersRepository;
+        final SimpleDomainList domainList;
 
         WebAdminServer webAdminServer;
 
-        UserRoutesExtension(MemoryUsersRepository usersRepository) {
+        UserRoutesExtension(MemoryUsersRepository usersRepository, SimpleDomainList domainList) {
             this.usersRepository = spy(usersRepository);
+            this.domainList = domainList;
         }
 
         @Override
         public void beforeEach(ExtensionContext extensionContext) throws Exception {
-            DomainList domainList = new SimpleDomainList();
             domainList.addDomain(DOMAIN);
-            usersRepository.setDomainList(domainList);
 
             webAdminServer = startServer(usersRepository);
         }
 
         @Override
-        public void afterEach(ExtensionContext extensionContext) throws Exception {
+        public void afterEach(ExtensionContext extensionContext) {
             webAdminServer.destroy();
         }
 
diff --git a/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutesTest.java b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutesTest.java
index 1049075..6cb20b1 100644
--- a/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutesTest.java
@@ -210,8 +210,7 @@ class DeletedMessagesVaultRoutesTest {
             .autoDetectIp(false));
         domainList.addDomain(DOMAIN);
 
-        MemoryUsersRepository usersRepository = MemoryUsersRepository.withVirtualHosting();
-        usersRepository.setDomainList(domainList);
+        MemoryUsersRepository usersRepository = MemoryUsersRepository.withVirtualHosting(domainList);
         usersRepository.configure(new BaseHierarchicalConfiguration());
 
         usersRepository.addUser(USERNAME, "userPassword");
diff --git a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/DomainQuotaRoutesNoVirtualHostingTest.java b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/DomainQuotaRoutesNoVirtualHostingTest.java
index 1fc9ffc..1d77722 100644
--- a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/DomainQuotaRoutesNoVirtualHostingTest.java
+++ b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/DomainQuotaRoutesNoVirtualHostingTest.java
@@ -57,7 +57,7 @@ class DomainQuotaRoutesNoVirtualHostingTest {
         memoryDomainList.addDomain(Domain.of(FOUND_LOCAL));
         DomainQuotaService domainQuotaService = new DomainQuotaService(maxQuotaManager);
         QuotaModule quotaModule = new QuotaModule();
-        MemoryUsersRepository usersRepository = MemoryUsersRepository.withoutVirtualHosting();
+        MemoryUsersRepository usersRepository = MemoryUsersRepository.withoutVirtualHosting(memoryDomainList);
         DomainQuotaRoutes domainQuotaRoutes = new DomainQuotaRoutes(memoryDomainList, domainQuotaService, usersRepository, new JsonTransformer(quotaModule), ImmutableSet.of(quotaModule));
         webAdminServer = WebAdminUtils.createWebAdminServer(domainQuotaRoutes)
             .start();
diff --git a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ElasticSearchQuotaSearchExtension.java b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ElasticSearchQuotaSearchExtension.java
index 5cbe210..e57771f 100644
--- a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ElasticSearchQuotaSearchExtension.java
+++ b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ElasticSearchQuotaSearchExtension.java
@@ -69,11 +69,10 @@ public class ElasticSearchQuotaSearchExtension implements ParameterResolver, Bef
 
             InMemoryIntegrationResources resources = InMemoryIntegrationResources.defaultResources();
 
-            MemoryUsersRepository usersRepository = MemoryUsersRepository.withVirtualHosting();
 
             DNSService dnsService = mock(DNSService.class);
             MemoryDomainList domainList = new MemoryDomainList(dnsService);
-            usersRepository.setDomainList(domainList);
+            MemoryUsersRepository usersRepository = MemoryUsersRepository.withVirtualHosting(domainList);
 
             ElasticSearchQuotaMailboxListener listener = new ElasticSearchQuotaMailboxListener(
                 new ElasticSearchIndexer(client, QuotaRatioElasticSearchConstants.DEFAULT_QUOTA_RATIO_WRITE_ALIAS),
diff --git a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ScanningQuotaSearchExtension.java b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ScanningQuotaSearchExtension.java
index 51bddb4..997476c 100644
--- a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ScanningQuotaSearchExtension.java
+++ b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ScanningQuotaSearchExtension.java
@@ -47,14 +47,13 @@ public class ScanningQuotaSearchExtension implements ParameterResolver, BeforeEa
         try {
             InMemoryIntegrationResources resources = InMemoryIntegrationResources.defaultResources();
 
-            MemoryUsersRepository usersRepository = MemoryUsersRepository.withVirtualHosting();
 
             DNSService dnsService = mock(DNSService.class);
             MemoryDomainList domainList = new MemoryDomainList(dnsService);
             domainList.configure(DomainListConfiguration.builder()
                 .autoDetect(false)
                 .autoDetectIp(false));
-            usersRepository.setDomainList(domainList);
+            MemoryUsersRepository usersRepository = MemoryUsersRepository.withVirtualHosting(domainList);
 
 
             QuotaComponents quotaComponents = resources.getMailboxManager().getQuotaComponents();


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org