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 rc...@apache.org on 2020/02/06 03:54:33 UTC

[james-project] branch master updated (88d646f -> 4ebddfc)

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

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


    from 88d646f  JAMES-3033 Update imports policy with checkstyle
     new ef87f69  MAILBOX-395 ElasticSearch indexing should not fail upon invalid charset
     new 385c912  JAMES-2979 Fix ADR FileMailQueue deprecation number to 17
     new f9eb15b  JAMES-3035 Switch to apache/tika:1.22 image
     new 857eada  [REFACTORING] Split JMXDataProbe from DataProbeImpl
     new 077d74e  [REFACTORING] Split JMXMailboxProbe from MailboxProbeImpl
     new c03d999  [REFACTORING] Split JMXQuotaProbe from QuotaProbeImpl
     new d2359f4  [REFACTORING] QuotaProbe no longer need to be serializable
     new f79135a  [REFACTORING] Split JMXSieveProbe from SieveProbeImpl
     new d211615  [REFACTORING] QuotaProbe strong typing
     new 5568c87  JAMES-3031 Fix ENV variable in Dockerfiles
     new 2078574  [JAMES-2070] Fix LDAP disabled test
     new 23a96a8  [Refactoring] Remove some visibility classifiers for better readability
     new 9c5038d  JAMES-2950 Migrate UsersRepositoryTest classes to JUnit 5
     new fdf418b  JAMES-2950 Should not be possible to add a user with special characters in its local part
     new da95587  JAMES-2950 Add routes tests to check that we cannot create users with illegal characters in their local part
     new 4ebddfc  JAMES-2950 Add entries about the change in the changelog and upgrade-instructions documents

The 16 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 CHANGELOG.md                                       |   1 +
 JenkinsfileStressTests.groovy                      |   2 +-
 README.adoc                                        |   8 +-
 dockerfiles/run/docker-compose.yml                 |   2 +-
 dockerfiles/run/guice/cassandra-ldap/Dockerfile    |   2 +-
 .../run/guice/cassandra-rabbitmq-ldap/Dockerfile   |   2 +-
 .../run/guice/cassandra-rabbitmq/Dockerfile        |   2 +-
 dockerfiles/run/guice/cassandra/Dockerfile         |   2 +-
 dockerfiles/run/guice/jpa-smtp/Dockerfile          |   2 +-
 dockerfiles/run/guice/jpa/Dockerfile               |   4 +-
 dockerfiles/run/guice/memory/Dockerfile            |   2 +-
 .../apache/james/mailbox/probe/MailboxProbe.java   |  10 --
 .../org/apache/james/mailbox/probe/QuotaProbe.java |  29 ++--
 .../mailbox/elasticsearch/json/MimePartParser.java |  17 +-
 .../json/MessageToElasticSearchJsonTest.java       |  22 +++
 .../src/test/resources/eml/invalidCharset.eml      |  10 ++
 .../src/test/resources/eml/invalidCharset.json     |  39 +++++
 .../james/cli/QuotaCommandsIntegrationTest.java    |  10 +-
 .../main/java/org/apache/james/cli/ServerCmd.java  |  14 +-
 .../apache/james/cli/probe/impl/JmxDataProbe.java  |  39 +----
 .../james/cli/probe/impl/JmxMailboxProbe.java      |  37 +----
 .../apache/james/cli/probe/impl/JmxQuotaProbe.java |  16 +-
 .../apache/james/cli/probe/impl/JmxSieveProbe.java |  17 +-
 .../java/org/apache/james/cli/ServerCmdTest.java   |  24 +--
 .../java/org/apache/james/utils/DataProbeImpl.java |  31 ----
 .../java/org/apache/james/JPAJamesServerTest.java  |   3 +-
 .../org/apache/james/modules/MailboxProbeImpl.java |  38 -----
 .../org/apache/james/modules/QuotaProbesImpl.java  |  63 +++-----
 .../james/modules/protocols/SieveProbeImpl.java    |  12 --
 .../java/org/apache/james/probe/DataProbe.java     |  10 --
 .../java/org/apache/james/probe/SieveProbe.java    |   3 -
 .../cassandra/CassandraUsersRepositoryTest.java    |  38 ++---
 .../james/user/jpa/JpaUsersRepositoryTest.java     |  18 +--
 .../user/ldap/ReadOnlyUsersLDAPRepositoryTest.java |  62 ++++----
 .../james/user/lib/AbstractUsersRepository.java    |  12 ++
 .../user/lib/AbstractUsersRepositoryTest.java      | 174 ++++++++++++---------
 .../user/memory/MemoryUsersRepositoryTest.java     |  21 ++-
 .../integration/GetMailboxesMethodTest.java        |  10 +-
 .../methods/integration/QuotaMailingTest.java      |  13 +-
 .../methods/integration/SendMDNMethodTest.java     |   8 +-
 .../methods/integration/SetMessagesMethodTest.java |  15 +-
 .../james/webadmin/routes/UserRoutesTest.java      |  74 ++++++++-
 .../java/org/apache/james/util/docker/Images.java  |   2 +-
 src/adr/0017-file-mail-queue-deprecation.md        |   2 +-
 upgrade-instructions.md                            |  13 ++
 45 files changed, 450 insertions(+), 485 deletions(-)
 create mode 100644 mailbox/store/src/test/resources/eml/invalidCharset.eml
 create mode 100644 mailbox/store/src/test/resources/eml/invalidCharset.json


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


[james-project] 06/16: [REFACTORING] Split JMXQuotaProbe from QuotaProbeImpl

Posted by rc...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit c03d99957f2acfa8989ae1efb09f4f08ee43939f
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Tue Feb 4 09:14:55 2020 +0700

    [REFACTORING] Split JMXQuotaProbe from QuotaProbeImpl
---
 .../src/main/java/org/apache/james/cli/ServerCmd.java    |  5 ++---
 .../org/apache/james/cli/probe/impl/JmxQuotaProbe.java   | 16 +---------------
 .../test/java/org/apache/james/cli/ServerCmdTest.java    |  6 +++---
 3 files changed, 6 insertions(+), 21 deletions(-)

diff --git a/server/container/cli/src/main/java/org/apache/james/cli/ServerCmd.java b/server/container/cli/src/main/java/org/apache/james/cli/ServerCmd.java
index d4617ca..a7c77c4 100644
--- a/server/container/cli/src/main/java/org/apache/james/cli/ServerCmd.java
+++ b/server/container/cli/src/main/java/org/apache/james/cli/ServerCmd.java
@@ -51,7 +51,6 @@ import org.apache.james.core.quota.QuotaSizeLimit;
 import org.apache.james.core.quota.QuotaSizeUsage;
 import org.apache.james.mailbox.model.SerializableQuota;
 import org.apache.james.mailbox.model.SerializableQuotaLimitValue;
-import org.apache.james.mailbox.probe.QuotaProbe;
 import org.apache.james.probe.SieveProbe;
 import org.apache.james.rrt.lib.Mappings;
 import org.apache.james.util.Port;
@@ -128,10 +127,10 @@ public class ServerCmd {
 
     private final JmxDataProbe probe;
     private final JmxMailboxProbe mailboxProbe;
-    private final QuotaProbe quotaProbe;
+    private final JmxQuotaProbe quotaProbe;
     private final SieveProbe sieveProbe;
 
-    public ServerCmd(JmxDataProbe probe, JmxMailboxProbe mailboxProbe, QuotaProbe quotaProbe, SieveProbe sieveProbe) {
+    public ServerCmd(JmxDataProbe probe, JmxMailboxProbe mailboxProbe, JmxQuotaProbe quotaProbe, SieveProbe sieveProbe) {
         this.probe = probe;
         this.mailboxProbe = mailboxProbe;
         this.quotaProbe = quotaProbe;
diff --git a/server/container/cli/src/main/java/org/apache/james/cli/probe/impl/JmxQuotaProbe.java b/server/container/cli/src/main/java/org/apache/james/cli/probe/impl/JmxQuotaProbe.java
index 6f73f3a..9edfcef 100644
--- a/server/container/cli/src/main/java/org/apache/james/cli/probe/impl/JmxQuotaProbe.java
+++ b/server/container/cli/src/main/java/org/apache/james/cli/probe/impl/JmxQuotaProbe.java
@@ -31,14 +31,12 @@ import org.apache.james.core.quota.QuotaSizeUsage;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.SerializableQuota;
 import org.apache.james.mailbox.model.SerializableQuotaLimitValue;
-import org.apache.james.mailbox.probe.QuotaProbe;
 
-public class JmxQuotaProbe implements QuotaProbe, JmxProbe {
+public class JmxQuotaProbe implements JmxProbe {
     private static final String QUOTAMANAGER_OBJECT_NAME = "org.apache.james:type=component,name=quotamanagerbean";
 
     private QuotaManagementMBean quotaManagement;
 
-    @Override
     public JmxQuotaProbe connect(JmxConnection jmxc) throws IOException {
         try {
             quotaManagement = jmxc.retrieveBean(QuotaManagementMBean.class, QUOTAMANAGER_OBJECT_NAME);
@@ -48,59 +46,47 @@ public class JmxQuotaProbe implements QuotaProbe, JmxProbe {
         return this;
     }
 
-    @Override
     public String getQuotaRoot(String namespace, String user, String name) throws MailboxException {
         return quotaManagement.getQuotaRoot(namespace, user, name);
     }
 
-    @Override
     public SerializableQuota<QuotaCountLimit, QuotaCountUsage> getMessageCountQuota(String quotaRoot) throws MailboxException {
         return quotaManagement.getMessageCountQuota(quotaRoot);
     }
 
-    @Override
     public SerializableQuota<QuotaSizeLimit, QuotaSizeUsage> getStorageQuota(String quotaRoot) throws MailboxException {
         return quotaManagement.getStorageQuota(quotaRoot);
     }
 
-    @Override
     public SerializableQuotaLimitValue<QuotaCountLimit> getMaxMessageCount(String quotaRoot) throws MailboxException {
         return quotaManagement.getMaxMessageCount(quotaRoot);
     }
 
-    @Override
     public SerializableQuotaLimitValue<QuotaSizeLimit> getMaxStorage(String quotaRoot) throws MailboxException {
         return quotaManagement.getMaxStorage(quotaRoot);
     }
 
-    @Override
     public SerializableQuotaLimitValue<QuotaCountLimit> getGlobalMaxMessageCount() throws MailboxException {
         return quotaManagement.getGlobalMaxMessageCount();
     }
 
-    @Override
     public SerializableQuotaLimitValue<QuotaSizeLimit> getGlobalMaxStorage() throws MailboxException {
         return quotaManagement.getGlobalMaxStorage();
     }
 
-    @Override
     public void setMaxMessageCount(String quotaRoot, SerializableQuotaLimitValue<QuotaCountLimit> maxMessageCount) throws MailboxException {
         quotaManagement.setMaxMessageCount(quotaRoot, maxMessageCount);
     }
 
-    @Override
     public void setMaxStorage(String quotaRoot, SerializableQuotaLimitValue<QuotaSizeLimit> maxSize) throws MailboxException {
         quotaManagement.setMaxStorage(quotaRoot, maxSize);
     }
 
-    @Override
     public void setGlobalMaxMessageCount(SerializableQuotaLimitValue<QuotaCountLimit> maxGlobalMessageCount) throws MailboxException {
         quotaManagement.setGlobalMaxMessageCount(maxGlobalMessageCount);
     }
 
-    @Override
     public void setGlobalMaxStorage(SerializableQuotaLimitValue<QuotaSizeLimit> maxGlobalSize) throws MailboxException {
         quotaManagement.setGlobalMaxStorage(maxGlobalSize);
     }
-
 }
\ No newline at end of file
diff --git a/server/container/cli/src/test/java/org/apache/james/cli/ServerCmdTest.java b/server/container/cli/src/test/java/org/apache/james/cli/ServerCmdTest.java
index 46b3195..c9bdb30 100644
--- a/server/container/cli/src/test/java/org/apache/james/cli/ServerCmdTest.java
+++ b/server/container/cli/src/test/java/org/apache/james/cli/ServerCmdTest.java
@@ -35,6 +35,7 @@ import org.apache.james.cli.exceptions.MissingCommandException;
 import org.apache.james.cli.exceptions.UnrecognizedCommandException;
 import org.apache.james.cli.probe.impl.JmxDataProbe;
 import org.apache.james.cli.probe.impl.JmxMailboxProbe;
+import org.apache.james.cli.probe.impl.JmxQuotaProbe;
 import org.apache.james.cli.type.CmdType;
 import org.apache.james.core.quota.QuotaCountLimit;
 import org.apache.james.core.quota.QuotaCountUsage;
@@ -43,7 +44,6 @@ import org.apache.james.core.quota.QuotaSizeUsage;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.SerializableQuota;
 import org.apache.james.mailbox.model.SerializableQuotaLimitValue;
-import org.apache.james.mailbox.probe.QuotaProbe;
 import org.apache.james.probe.SieveProbe;
 import org.apache.james.rrt.lib.MappingsImpl;
 import org.junit.Before;
@@ -57,7 +57,7 @@ public class ServerCmdTest {
 
     private JmxDataProbe dataProbe;
     private JmxMailboxProbe mailboxProbe;
-    private QuotaProbe quotaProbe;
+    private JmxQuotaProbe quotaProbe;
     private SieveProbe sieveProbe;
 
     private ServerCmd testee;
@@ -66,7 +66,7 @@ public class ServerCmdTest {
     public void setup() {
         dataProbe = mock(JmxDataProbe.class);
         mailboxProbe = mock(JmxMailboxProbe.class);
-        quotaProbe = mock(QuotaProbe.class);
+        quotaProbe = mock(JmxQuotaProbe.class);
         sieveProbe = mock(SieveProbe.class);
         testee = new ServerCmd(dataProbe, mailboxProbe, quotaProbe, sieveProbe);
     }


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


[james-project] 09/16: [REFACTORING] QuotaProbe strong typing

Posted by rc...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit d21161532cafb6711d45a788e128c52fdbdb4f36
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Tue Feb 4 10:11:22 2020 +0700

    [REFACTORING] QuotaProbe strong typing
---
 .../org/apache/james/mailbox/probe/QuotaProbe.java | 16 +++++++-----
 .../james/cli/QuotaCommandsIntegrationTest.java    |  4 +--
 .../org/apache/james/modules/QuotaProbesImpl.java  | 30 +++++++++++-----------
 .../integration/GetMailboxesMethodTest.java        |  4 +--
 .../methods/integration/QuotaMailingTest.java      | 12 ++++-----
 .../methods/integration/SendMDNMethodTest.java     |  4 ++-
 .../methods/integration/SetMessagesMethodTest.java |  7 ++---
 7 files changed, 40 insertions(+), 37 deletions(-)

diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/probe/QuotaProbe.java b/mailbox/api/src/main/java/org/apache/james/mailbox/probe/QuotaProbe.java
index 617fa07..b3fa677 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/probe/QuotaProbe.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/probe/QuotaProbe.java
@@ -26,27 +26,29 @@ import org.apache.james.core.quota.QuotaCountUsage;
 import org.apache.james.core.quota.QuotaSizeLimit;
 import org.apache.james.core.quota.QuotaSizeUsage;
 import org.apache.james.mailbox.exception.MailboxException;
+import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.model.Quota;
+import org.apache.james.mailbox.model.QuotaRoot;
 
 public interface QuotaProbe {
 
-    String getQuotaRoot(String namespace, String user, String name) throws MailboxException;
+    QuotaRoot getQuotaRoot(MailboxPath mailboxPath) throws MailboxException;
 
-    Quota<QuotaCountLimit, QuotaCountUsage> getMessageCountQuota(String quotaRoot) throws MailboxException;
+    Quota<QuotaCountLimit, QuotaCountUsage> getMessageCountQuota(QuotaRoot quotaRoot) throws MailboxException;
 
-    Quota<QuotaSizeLimit, QuotaSizeUsage> getStorageQuota(String quotaRoot) throws MailboxException;
+    Quota<QuotaSizeLimit, QuotaSizeUsage> getStorageQuota(QuotaRoot quotaRoot) throws MailboxException;
 
-    Optional<QuotaCountLimit> getMaxMessageCount(String quotaRoot) throws MailboxException;
+    Optional<QuotaCountLimit> getMaxMessageCount(QuotaRoot quotaRoot) throws MailboxException;
 
-    Optional<QuotaSizeLimit> getMaxStorage(String quotaRoot) throws MailboxException;
+    Optional<QuotaSizeLimit> getMaxStorage(QuotaRoot quotaRoot) throws MailboxException;
 
     Optional<QuotaCountLimit> getGlobalMaxMessageCount() throws MailboxException;
 
     Optional<QuotaSizeLimit> getGlobalMaxStorage() throws MailboxException;
 
-    void setMaxMessageCount(String quotaRoot, QuotaCountLimit maxMessageCount) throws MailboxException;
+    void setMaxMessageCount(QuotaRoot quotaRoot, QuotaCountLimit maxMessageCount) throws MailboxException;
 
-    void setMaxStorage(String quotaRoot, QuotaSizeLimit maxSize) throws MailboxException;
+    void setMaxStorage(QuotaRoot quotaRoot, QuotaSizeLimit maxSize) throws MailboxException;
 
     void setGlobalMaxMessageCount(QuotaCountLimit maxGlobalMessageCount) throws MailboxException;
 
diff --git a/server/container/cli-integration/src/test/java/org/apache/james/cli/QuotaCommandsIntegrationTest.java b/server/container/cli-integration/src/test/java/org/apache/james/cli/QuotaCommandsIntegrationTest.java
index 07ca0ee..50d61ff 100644
--- a/server/container/cli-integration/src/test/java/org/apache/james/cli/QuotaCommandsIntegrationTest.java
+++ b/server/container/cli-integration/src/test/java/org/apache/james/cli/QuotaCommandsIntegrationTest.java
@@ -102,7 +102,7 @@ public class QuotaCommandsIntegrationTest {
     public void setMaxStorageShouldWork() throws Exception {
         ServerCmd.doMain(new String[] {"-h", "127.0.0.1", "-p", "9999", "setmaxstoragequota", QUOTA_ROOT.getValue(), "36"});
 
-        assertThat(quotaProbe.getMaxStorage(QUOTA_ROOT.getValue()).map(QuotaSizeLimit::asLong)).contains(36L);
+        assertThat(quotaProbe.getMaxStorage(QUOTA_ROOT).map(QuotaSizeLimit::asLong)).contains(36L);
     }
 
     @Test
@@ -120,7 +120,7 @@ public class QuotaCommandsIntegrationTest {
     public void setMaxMessageCountShouldWork() throws Exception {
         ServerCmd.doMain(new String[] {"-h", "127.0.0.1", "-p", "9999", "setmaxmessagecountquota", QUOTA_ROOT.getValue(), "36"});
 
-        assertThat(quotaProbe.getMaxMessageCount(QUOTA_ROOT.getValue()).map(QuotaCountLimit::asLong)).contains(36L);
+        assertThat(quotaProbe.getMaxMessageCount(QUOTA_ROOT).map(QuotaCountLimit::asLong)).contains(36L);
     }
 
     @Test
diff --git a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/QuotaProbesImpl.java b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/QuotaProbesImpl.java
index 7adf9f2..58fa279 100644
--- a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/QuotaProbesImpl.java
+++ b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/QuotaProbesImpl.java
@@ -23,7 +23,6 @@ import java.util.Optional;
 
 import javax.inject.Inject;
 
-import org.apache.james.core.Username;
 import org.apache.james.core.quota.QuotaCountLimit;
 import org.apache.james.core.quota.QuotaCountUsage;
 import org.apache.james.core.quota.QuotaSizeLimit;
@@ -31,6 +30,7 @@ import org.apache.james.core.quota.QuotaSizeUsage;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.model.Quota;
+import org.apache.james.mailbox.model.QuotaRoot;
 import org.apache.james.mailbox.probe.QuotaProbe;
 import org.apache.james.mailbox.quota.MaxQuotaManager;
 import org.apache.james.mailbox.quota.QuotaManager;
@@ -51,28 +51,28 @@ public class QuotaProbesImpl implements QuotaProbe, GuiceProbe {
     }
 
     @Override
-    public String getQuotaRoot(String namespace, String user, String name) throws MailboxException {
-        return quotaRootResolver.getQuotaRoot(new MailboxPath(namespace, Username.of(user), name)).getValue();
+    public QuotaRoot getQuotaRoot(MailboxPath mailboxPath) throws MailboxException {
+        return quotaRootResolver.getQuotaRoot(mailboxPath);
     }
 
     @Override
-    public Quota<QuotaCountLimit, QuotaCountUsage> getMessageCountQuota(String quotaRoot) throws MailboxException {
-        return quotaManager.getMessageQuota(quotaRootResolver.fromString(quotaRoot));
+    public Quota<QuotaCountLimit, QuotaCountUsage> getMessageCountQuota(QuotaRoot quotaRoot) throws MailboxException {
+        return quotaManager.getMessageQuota(quotaRoot);
     }
 
     @Override
-    public Quota<QuotaSizeLimit, QuotaSizeUsage> getStorageQuota(String quotaRoot) throws MailboxException {
-        return quotaManager.getStorageQuota(quotaRootResolver.fromString(quotaRoot));
+    public Quota<QuotaSizeLimit, QuotaSizeUsage> getStorageQuota(QuotaRoot quotaRoot) throws MailboxException {
+        return quotaManager.getStorageQuota(quotaRoot);
     }
 
     @Override
-    public Optional<QuotaCountLimit> getMaxMessageCount(String quotaRoot) throws MailboxException {
-        return maxQuotaManager.getMaxMessage(quotaRootResolver.fromString(quotaRoot));
+    public Optional<QuotaCountLimit> getMaxMessageCount(QuotaRoot quotaRoot) throws MailboxException {
+        return maxQuotaManager.getMaxMessage(quotaRoot);
     }
 
     @Override
-    public Optional<QuotaSizeLimit> getMaxStorage(String quotaRoot) throws MailboxException {
-        return maxQuotaManager.getMaxStorage(quotaRootResolver.fromString(quotaRoot));
+    public Optional<QuotaSizeLimit> getMaxStorage(QuotaRoot quotaRoot) throws MailboxException {
+        return maxQuotaManager.getMaxStorage(quotaRoot);
     }
 
     @Override
@@ -86,13 +86,13 @@ public class QuotaProbesImpl implements QuotaProbe, GuiceProbe {
     }
 
     @Override
-    public void setMaxMessageCount(String quotaRoot, QuotaCountLimit maxMessageCount) throws MailboxException {
-        maxQuotaManager.setMaxMessage(quotaRootResolver.fromString(quotaRoot), maxMessageCount);
+    public void setMaxMessageCount(QuotaRoot quotaRoot, QuotaCountLimit maxMessageCount) throws MailboxException {
+        maxQuotaManager.setMaxMessage(quotaRoot, maxMessageCount);
     }
 
     @Override
-    public void setMaxStorage(String quotaRoot, QuotaSizeLimit maxSize) throws MailboxException {
-        maxQuotaManager.setMaxStorage(quotaRootResolver.fromString(quotaRoot), maxSize);
+    public void setMaxStorage(QuotaRoot quotaRoot, QuotaSizeLimit maxSize) throws MailboxException {
+        maxQuotaManager.setMaxStorage(quotaRoot, maxSize);
     }
 
     @Override
diff --git a/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/GetMailboxesMethodTest.java b/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/GetMailboxesMethodTest.java
index bedb01e..a3d4320 100644
--- a/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/GetMailboxesMethodTest.java
+++ b/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/GetMailboxesMethodTest.java
@@ -827,8 +827,8 @@ public abstract class GetMailboxesMethodTest {
         MailboxPath bobMailboxPath = MailboxPath.forUser(BOB, sharedMailboxName);
         aclProbe.replaceRights(bobMailboxPath, ALICE.asString(), new Rfc4314Rights(Right.Lookup, Right.Read));
 
-        quotaProbe.setMaxMessageCount("#private&alice@domain.tld", QuotaCountLimit.count(42));
-        quotaProbe.setMaxMessageCount("#private&bob@domain.tld", QuotaCountLimit.count(43));
+        quotaProbe.setMaxMessageCount(quotaProbe.getQuotaRoot(MailboxPath.inbox(ALICE)), QuotaCountLimit.count(42));
+        quotaProbe.setMaxMessageCount(quotaProbe.getQuotaRoot(MailboxPath.inbox(BOB)), QuotaCountLimit.count(43));
 
         given()
             .header("Authorization", accessToken.asString())
diff --git a/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/QuotaMailingTest.java b/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/QuotaMailingTest.java
index b990feb..da25670 100644
--- a/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/QuotaMailingTest.java
+++ b/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/QuotaMailingTest.java
@@ -43,7 +43,7 @@ import org.apache.james.jmap.AccessToken;
 import org.apache.james.jmap.draft.JmapGuiceProbe;
 import org.apache.james.junit.categories.BasicFeature;
 import org.apache.james.mailbox.DefaultMailboxes;
-import org.apache.james.mailbox.model.MailboxConstants;
+import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.probe.MailboxProbe;
 import org.apache.james.modules.MailboxProbeImpl;
 import org.apache.james.modules.QuotaProbesImpl;
@@ -67,6 +67,7 @@ public abstract class QuotaMailingTest {
     private static final String PASSWORD = "password";
     private static final String BOB_PASSWORD = "bobPassword";
     private static final ConditionFactory WAIT_TWO_MINUTES = calmlyAwait.atMost(Duration.TWO_MINUTES);
+    private QuotaProbesImpl quotaProbe;
 
     protected abstract GuiceJamesServer createJmapServer() throws IOException;
 
@@ -80,6 +81,7 @@ public abstract class QuotaMailingTest {
         jmapServer.start();
         MailboxProbe mailboxProbe = jmapServer.getProbe(MailboxProbeImpl.class);
         DataProbe dataProbe = jmapServer.getProbe(DataProbeImpl.class);
+        quotaProbe = jmapServer.getProbe(QuotaProbesImpl.class);
 
         RestAssured.requestSpecification = jmapRequestSpecBuilder
             .setPort(jmapServer.getProbe(JmapGuiceProbe.class).getJmapPort().getValue())
@@ -102,9 +104,7 @@ public abstract class QuotaMailingTest {
     @Category(BasicFeature.class)
     @Test
     public void shouldSendANoticeWhenThresholdExceeded() throws Exception {
-        jmapServer.getProbe(QuotaProbesImpl.class)
-            .setMaxStorage(MailboxConstants.USER_NAMESPACE + "&" + HOMER.asString(),
-                QuotaSizeLimit.size(100 * 1000));
+        quotaProbe.setMaxStorage(quotaProbe.getQuotaRoot(MailboxPath.inbox(HOMER)), QuotaSizeLimit.size(100 * 1000));
 
         bartSendMessageToHomer();
         // Homer receives a mail big enough to trigger a configured threshold
@@ -128,9 +128,7 @@ public abstract class QuotaMailingTest {
 
     @Test
     public void configurationShouldBeWellLoaded() throws Exception {
-        jmapServer.getProbe(QuotaProbesImpl.class)
-            .setMaxStorage(MailboxConstants.USER_NAMESPACE + "&" + HOMER.asString(),
-                QuotaSizeLimit.size(100 * 1000));
+        quotaProbe.setMaxStorage(quotaProbe.getQuotaRoot(MailboxPath.inbox(HOMER)), QuotaSizeLimit.size(100 * 1000));
 
         bartSendMessageToHomer();
         // Homer receives a mail big enough to trigger a 10% configured threshold
diff --git a/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/SendMDNMethodTest.java b/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/SendMDNMethodTest.java
index 2b2b855..6667197 100644
--- a/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/SendMDNMethodTest.java
+++ b/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/SendMDNMethodTest.java
@@ -53,7 +53,9 @@ import org.apache.james.junit.categories.BasicFeature;
 import org.apache.james.mailbox.DefaultMailboxes;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.MailboxConstants;
+import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.model.MessageId;
+import org.apache.james.mailbox.model.QuotaRoot;
 import org.apache.james.mailbox.probe.MailboxProbe;
 import org.apache.james.mailbox.probe.QuotaProbe;
 import org.apache.james.modules.MailboxProbeImpl;
@@ -403,7 +405,7 @@ public abstract class SendMDNMethodTest {
         List<String> messageIds = listMessageIdsForAccount(homerAccessToken);
 
         QuotaProbe quotaProbe = jmapServer.getProbe(QuotaProbesImpl.class);
-        String inboxQuotaRoot = quotaProbe.getQuotaRoot("#private", HOMER.asString(), DefaultMailboxes.INBOX);
+        QuotaRoot inboxQuotaRoot = quotaProbe.getQuotaRoot(MailboxPath.inbox(HOMER));
         quotaProbe.setMaxStorage(inboxQuotaRoot, QuotaSizeLimit.size(100));
 
         MessageAppender.fillMailbox(jmapServer.getProbe(MailboxProbeImpl.class), HOMER.asString(), MailboxConstants.INBOX);
diff --git a/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/SetMessagesMethodTest.java b/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/SetMessagesMethodTest.java
index 79a7c69..39470b5 100644
--- a/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/SetMessagesMethodTest.java
+++ b/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/SetMessagesMethodTest.java
@@ -94,6 +94,7 @@ import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.model.MessageResult;
+import org.apache.james.mailbox.model.QuotaRoot;
 import org.apache.james.mailbox.probe.ACLProbe;
 import org.apache.james.mailbox.probe.MailboxProbe;
 import org.apache.james.mailbox.probe.QuotaProbe;
@@ -1325,7 +1326,7 @@ public abstract class SetMessagesMethodTest {
     @Test
     public void setMessagesShouldNotAllowDraftCreationWhenOverQuota() throws MailboxException {
         QuotaProbe quotaProbe = jmapServer.getProbe(QuotaProbesImpl.class);
-        String inboxQuotaRoot = quotaProbe.getQuotaRoot("#private", USERNAME.asString(), DefaultMailboxes.INBOX);
+        QuotaRoot inboxQuotaRoot = quotaProbe.getQuotaRoot(MailboxPath.inbox(USERNAME));
         quotaProbe.setMaxStorage(inboxQuotaRoot, QuotaSizeLimit.size(100));
 
         MessageAppender.fillMailbox(mailboxProbe, USERNAME.asString(), MailboxConstants.INBOX);
@@ -1442,7 +1443,7 @@ public abstract class SetMessagesMethodTest {
     @Test
     public void setMessagesShouldNotAllowCopyWhenOverQuota() throws MailboxException {
         QuotaProbe quotaProbe = jmapServer.getProbe(QuotaProbesImpl.class);
-        String inboxQuotaRoot = quotaProbe.getQuotaRoot("#private", USERNAME.asString(), DefaultMailboxes.INBOX);
+        QuotaRoot inboxQuotaRoot = quotaProbe.getQuotaRoot(MailboxPath.inbox(USERNAME));
         quotaProbe.setMaxStorage(inboxQuotaRoot, QuotaSizeLimit.size(100));
 
         List<ComposedMessageId> composedMessageIds = MessageAppender.fillMailbox(mailboxProbe, USERNAME.asString(), MailboxConstants.INBOX);
@@ -2772,7 +2773,7 @@ public abstract class SetMessagesMethodTest {
     @Test
     public void setMessagesShouldTriggerMaxQuotaReachedWhenTryingToSendMessageAndQuotaReached() throws Exception {
         QuotaProbe quotaProbe = jmapServer.getProbe(QuotaProbesImpl.class);
-        String inboxQuotaRoot = quotaProbe.getQuotaRoot("#private", USERNAME.asString(), DefaultMailboxes.INBOX);
+        QuotaRoot inboxQuotaRoot = quotaProbe.getQuotaRoot(MailboxPath.inbox(USERNAME));
         quotaProbe.setMaxStorage(inboxQuotaRoot, QuotaSizeLimit.size(100));
 
         MessageAppender.fillMailbox(mailboxProbe, USERNAME.asString(), MailboxConstants.INBOX);


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


[james-project] 04/16: [REFACTORING] Split JMXDataProbe from DataProbeImpl

Posted by rc...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 857eada2af54c4b672741dd5ecd307491d2cd8ba
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Tue Feb 4 09:08:31 2020 +0700

    [REFACTORING] Split JMXDataProbe from DataProbeImpl
---
 .../main/java/org/apache/james/cli/ServerCmd.java  |  5 ++-
 .../apache/james/cli/probe/impl/JmxDataProbe.java  | 39 +---------------------
 .../java/org/apache/james/cli/ServerCmdTest.java   |  6 ++--
 .../java/org/apache/james/utils/DataProbeImpl.java | 31 -----------------
 .../java/org/apache/james/probe/DataProbe.java     | 10 ------
 5 files changed, 6 insertions(+), 85 deletions(-)

diff --git a/server/container/cli/src/main/java/org/apache/james/cli/ServerCmd.java b/server/container/cli/src/main/java/org/apache/james/cli/ServerCmd.java
index ffceb09..27a4aa4 100644
--- a/server/container/cli/src/main/java/org/apache/james/cli/ServerCmd.java
+++ b/server/container/cli/src/main/java/org/apache/james/cli/ServerCmd.java
@@ -53,7 +53,6 @@ import org.apache.james.mailbox.model.SerializableQuota;
 import org.apache.james.mailbox.model.SerializableQuotaLimitValue;
 import org.apache.james.mailbox.probe.MailboxProbe;
 import org.apache.james.mailbox.probe.QuotaProbe;
-import org.apache.james.probe.DataProbe;
 import org.apache.james.probe.SieveProbe;
 import org.apache.james.rrt.lib.Mappings;
 import org.apache.james.util.Port;
@@ -128,12 +127,12 @@ public class ServerCmd {
         stopWatch.stop();
     }
 
-    private final DataProbe probe;
+    private final JmxDataProbe probe;
     private final MailboxProbe mailboxProbe;
     private final QuotaProbe quotaProbe;
     private final SieveProbe sieveProbe;
 
-    public ServerCmd(DataProbe probe, MailboxProbe mailboxProbe, QuotaProbe quotaProbe, SieveProbe sieveProbe) {
+    public ServerCmd(JmxDataProbe probe, MailboxProbe mailboxProbe, QuotaProbe quotaProbe, SieveProbe sieveProbe) {
         this.probe = probe;
         this.mailboxProbe = mailboxProbe;
         this.quotaProbe = quotaProbe;
diff --git a/server/container/cli/src/main/java/org/apache/james/cli/probe/impl/JmxDataProbe.java b/server/container/cli/src/main/java/org/apache/james/cli/probe/impl/JmxDataProbe.java
index 6006916..4fdcf85 100644
--- a/server/container/cli/src/main/java/org/apache/james/cli/probe/impl/JmxDataProbe.java
+++ b/server/container/cli/src/main/java/org/apache/james/cli/probe/impl/JmxDataProbe.java
@@ -27,13 +27,12 @@ import java.util.Map;
 import javax.management.MalformedObjectNameException;
 
 import org.apache.james.domainlist.api.DomainListManagementMBean;
-import org.apache.james.probe.DataProbe;
 import org.apache.james.rrt.api.RecipientRewriteTableManagementMBean;
 import org.apache.james.rrt.lib.Mappings;
 import org.apache.james.user.api.UsersRepositoryManagementMBean;
 import org.apache.james.util.MDCBuilder;
 
-public class JmxDataProbe implements DataProbe, JmxProbe {
+public class JmxDataProbe implements JmxProbe {
 
     private static final String DOMAINLIST_OBJECT_NAME = "org.apache.james:type=component,name=domainlist";
     private static final String VIRTUALUSERTABLE_OBJECT_NAME = "org.apache.james:type=component,name=recipientrewritetable";
@@ -56,7 +55,6 @@ public class JmxDataProbe implements DataProbe, JmxProbe {
         return this;
     }
 
-    @Override
     public void addUser(String userName, String password) throws Exception {
         try (Closeable closeable =
                  MDCBuilder.create()
@@ -68,7 +66,6 @@ public class JmxDataProbe implements DataProbe, JmxProbe {
         }
     }
 
-    @Override
     public void removeUser(String username) throws Exception {
         try (Closeable closeable =
                  MDCBuilder.create()
@@ -80,7 +77,6 @@ public class JmxDataProbe implements DataProbe, JmxProbe {
         }
     }
 
-    @Override
     public String[] listUsers() throws Exception {
         try (Closeable closeable =
                  MDCBuilder.create()
@@ -91,7 +87,6 @@ public class JmxDataProbe implements DataProbe, JmxProbe {
         }
     }
 
-    @Override
     public void setPassword(String userName, String password) throws Exception {
         try (Closeable closeable =
                  MDCBuilder.create()
@@ -103,7 +98,6 @@ public class JmxDataProbe implements DataProbe, JmxProbe {
         }
     }
 
-    @Override
     public boolean containsDomain(String domain) throws Exception {
         try (Closeable closeable =
                  MDCBuilder.create()
@@ -115,18 +109,6 @@ public class JmxDataProbe implements DataProbe, JmxProbe {
         }
     }
 
-    @Override
-    public String getDefaultDomain() throws Exception {
-        try (Closeable closeable =
-                 MDCBuilder.create()
-                     .addContext(MDCBuilder.PROTOCOL, JMX)
-                     .addContext(MDCBuilder.ACTION, "getDefaultDomain")
-                     .build()) {
-            return domainListProxy.getDefaultDomain();
-        }
-    }
-
-    @Override
     public void addDomain(String domain) throws Exception {
         try (Closeable closeable =
                  MDCBuilder.create()
@@ -138,7 +120,6 @@ public class JmxDataProbe implements DataProbe, JmxProbe {
         }
     }
 
-    @Override
     public void removeDomain(String domain) throws Exception {
         try (Closeable closeable =
                  MDCBuilder.create()
@@ -150,7 +131,6 @@ public class JmxDataProbe implements DataProbe, JmxProbe {
         }
     }
 
-    @Override
     public List<String> listDomains() throws Exception {
         try (Closeable closeable =
                  MDCBuilder.create()
@@ -161,7 +141,6 @@ public class JmxDataProbe implements DataProbe, JmxProbe {
         }
     }
 
-    @Override
     public Map<String, Mappings> listMappings() throws Exception {
         try (Closeable closeable =
                  MDCBuilder.create()
@@ -172,7 +151,6 @@ public class JmxDataProbe implements DataProbe, JmxProbe {
         }
     }
 
-    @Override
     public void addAddressMapping(String fromUser, String fromDomain, String toAddress) throws Exception {
         try (Closeable closeable =
                  MDCBuilder.create()
@@ -183,7 +161,6 @@ public class JmxDataProbe implements DataProbe, JmxProbe {
         }
     }
 
-    @Override
     public void removeAddressMapping(String fromUser, String fromDomain, String toAddress) throws Exception {
         try (Closeable closeable =
                  MDCBuilder.create()
@@ -194,7 +171,6 @@ public class JmxDataProbe implements DataProbe, JmxProbe {
         }
     }
 
-    @Override
     public Mappings listUserDomainMappings(String user, String domain) throws Exception {
         try (Closeable closeable =
                  MDCBuilder.create()
@@ -205,7 +181,6 @@ public class JmxDataProbe implements DataProbe, JmxProbe {
         }
     }
 
-    @Override
     public void addRegexMapping(String user, String domain, String regex) throws Exception {
         try (Closeable closeable =
                  MDCBuilder.create()
@@ -216,7 +191,6 @@ public class JmxDataProbe implements DataProbe, JmxProbe {
         }
     }
 
-    @Override
     public void removeRegexMapping(String user, String domain, String regex) throws Exception {
         try (Closeable closeable =
                  MDCBuilder.create()
@@ -226,15 +200,4 @@ public class JmxDataProbe implements DataProbe, JmxProbe {
             virtualUserTableProxy.removeRegexMapping(user, domain, regex);
         }
     }
-
-    @Override
-    public void addDomainAliasMapping(String aliasDomain, String deliveryDomain) throws Exception {
-        try (Closeable closeable =
-                 MDCBuilder.create()
-                     .addContext(MDCBuilder.PROTOCOL, JMX)
-                     .addContext(MDCBuilder.ACTION, "addDomainAliasMapping")
-                     .build()) {
-            virtualUserTableProxy.addDomainMapping(aliasDomain, deliveryDomain);
-        }
-    }
 }
\ No newline at end of file
diff --git a/server/container/cli/src/test/java/org/apache/james/cli/ServerCmdTest.java b/server/container/cli/src/test/java/org/apache/james/cli/ServerCmdTest.java
index ddba90a..4dff457 100644
--- a/server/container/cli/src/test/java/org/apache/james/cli/ServerCmdTest.java
+++ b/server/container/cli/src/test/java/org/apache/james/cli/ServerCmdTest.java
@@ -33,6 +33,7 @@ import org.apache.commons.cli.ParseException;
 import org.apache.james.cli.exceptions.InvalidArgumentNumberException;
 import org.apache.james.cli.exceptions.MissingCommandException;
 import org.apache.james.cli.exceptions.UnrecognizedCommandException;
+import org.apache.james.cli.probe.impl.JmxDataProbe;
 import org.apache.james.cli.type.CmdType;
 import org.apache.james.core.quota.QuotaCountLimit;
 import org.apache.james.core.quota.QuotaCountUsage;
@@ -43,7 +44,6 @@ import org.apache.james.mailbox.model.SerializableQuota;
 import org.apache.james.mailbox.model.SerializableQuotaLimitValue;
 import org.apache.james.mailbox.probe.MailboxProbe;
 import org.apache.james.mailbox.probe.QuotaProbe;
-import org.apache.james.probe.DataProbe;
 import org.apache.james.probe.SieveProbe;
 import org.apache.james.rrt.lib.MappingsImpl;
 import org.junit.Before;
@@ -55,7 +55,7 @@ public class ServerCmdTest {
 
     private static final String ADDITIONAL_ARGUMENT = "additionalArgument";
 
-    private DataProbe dataProbe;
+    private JmxDataProbe dataProbe;
     private MailboxProbe mailboxProbe;
     private QuotaProbe quotaProbe;
     private SieveProbe sieveProbe;
@@ -64,7 +64,7 @@ public class ServerCmdTest {
 
     @Before
     public void setup() {
-        dataProbe = mock(DataProbe.class);
+        dataProbe = mock(JmxDataProbe.class);
         mailboxProbe = mock(MailboxProbe.class);
         quotaProbe = mock(QuotaProbe.class);
         sieveProbe = mock(SieveProbe.class);
diff --git a/server/container/guice/guice-common/src/main/java/org/apache/james/utils/DataProbeImpl.java b/server/container/guice/guice-common/src/main/java/org/apache/james/utils/DataProbeImpl.java
index 7e7b4c1..7fe0ccf 100644
--- a/server/container/guice/guice-common/src/main/java/org/apache/james/utils/DataProbeImpl.java
+++ b/server/container/guice/guice-common/src/main/java/org/apache/james/utils/DataProbeImpl.java
@@ -24,7 +24,6 @@ import java.util.Map;
 
 import javax.inject.Inject;
 
-import org.apache.commons.lang3.NotImplementedException;
 import org.apache.james.core.Domain;
 import org.apache.james.core.Username;
 import org.apache.james.domainlist.api.DomainList;
@@ -38,7 +37,6 @@ import org.apache.james.util.streams.Iterators;
 import com.github.steveash.guavate.Guavate;
 
 public class DataProbeImpl implements GuiceProbe, DataProbe {
-    
     private final DomainList domainList;
     private final UsersRepository usersRepository;
     private final RecipientRewriteTable recipientRewriteTable;
@@ -64,11 +62,6 @@ public class DataProbeImpl implements GuiceProbe, DataProbe {
     }
 
     @Override
-    public void setPassword(String userName, String password) {
-        throw new NotImplementedException("not implemented");
-    }
-
-    @Override
     public String[] listUsers() throws Exception {
         return Iterators.toStream(usersRepository.list())
             .map(Username::asString)
@@ -113,36 +106,12 @@ public class DataProbeImpl implements GuiceProbe, DataProbe {
     }
 
     @Override
-    public Mappings listUserDomainMappings(String user, String domain) {
-        throw new NotImplementedException("not implemented");
-    }
-
-    @Override
     public void addAddressMapping(String fromUser, String fromDomain, String toAddress) throws Exception {
         MappingSource source = MappingSource.fromUser(fromUser, fromDomain);
         recipientRewriteTable.addAddressMapping(source, toAddress);
     }
 
     @Override
-    public void removeAddressMapping(String fromUser, String fromDomain, String toAddress) throws Exception {
-        MappingSource source = MappingSource.fromUser(fromUser, fromDomain);
-        recipientRewriteTable.removeAddressMapping(source, toAddress);
-    }
-
-    @Override
-    public void addRegexMapping(String user, String domain, String regex) throws Exception {
-        MappingSource source = MappingSource.fromUser(user, domain);
-        recipientRewriteTable.addRegexMapping(source, regex);
-    }
-
-
-    @Override
-    public void removeRegexMapping(String user, String domain, String regex) throws Exception {
-        MappingSource source = MappingSource.fromUser(user, domain);
-        recipientRewriteTable.removeRegexMapping(source, regex);
-    }
-
-    @Override
     public void addDomainAliasMapping(String aliasDomain, String deliveryDomain) throws Exception {
         recipientRewriteTable.addAliasDomainMapping(MappingSource.fromDomain(Domain.of(aliasDomain)), Domain.of(deliveryDomain));
     }
diff --git a/server/data/data-api/src/main/java/org/apache/james/probe/DataProbe.java b/server/data/data-api/src/main/java/org/apache/james/probe/DataProbe.java
index 30d8050..f680340 100644
--- a/server/data/data-api/src/main/java/org/apache/james/probe/DataProbe.java
+++ b/server/data/data-api/src/main/java/org/apache/james/probe/DataProbe.java
@@ -57,8 +57,6 @@ public interface DataProbe {
 
     void removeUser(String username) throws Exception;
 
-    void setPassword(String userName, String password) throws Exception;
-
     String[] listUsers() throws Exception;
 
     void addDomain(String domain) throws Exception;
@@ -73,15 +71,7 @@ public interface DataProbe {
 
     Map<String, Mappings> listMappings() throws Exception;
 
-    Mappings listUserDomainMappings(String user, String domain) throws Exception;
-
     void addAddressMapping(String fromUser, String fromDomain, String toAddress) throws Exception;
 
-    void removeAddressMapping(String fromUser, String fromDomain, String toAddress) throws Exception;
-
-    void addRegexMapping(String user, String domain, String regex) throws Exception;
-
-    void removeRegexMapping(String user, String domain, String regex) throws Exception;
-
     void addDomainAliasMapping(String aliasDomain, String deliveryDomain) throws Exception;
 }
\ No newline at end of file


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


[james-project] 11/16: [JAMES-2070] Fix LDAP disabled test

Posted by rc...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 20785746082ef0714d0e97c0ebc5162fdc6aacf6
Author: Raphael Ouazana <ra...@linagora.com>
AuthorDate: Mon Jan 27 15:52:42 2020 +0100

    [JAMES-2070] Fix LDAP disabled test
---
 .../user/ldap/ReadOnlyUsersLDAPRepositoryTest.java    | 19 +++++++++++--------
 1 file changed, 11 insertions(+), 8 deletions(-)

diff --git a/server/data/data-ldap/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryTest.java b/server/data/data-ldap/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryTest.java
index a1e7af8..e5e9484 100644
--- a/server/data/data-ldap/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryTest.java
+++ b/server/data/data-ldap/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryTest.java
@@ -133,8 +133,7 @@ public class ReadOnlyUsersLDAPRepositoryTest {
         }
 
         @Test
-        @Disabled("JAMES-2270 : pause issue after the fix in JAMES-2666")
-        public void testShouldStillWorksAfterRestartingLDAP() throws Exception {
+        public void testShouldStillWorkAfterRestartingLDAP() throws Exception {
             ReadOnlyUsersLDAPRepository ldapRepository = startUsersRepository(ldapRepositoryConfigurationWithVirtualHosting());
             ldapRepository.test(JAMES_USER_MAIL, PASSWORD);
 
@@ -203,10 +202,12 @@ public class ReadOnlyUsersLDAPRepositoryTest {
         configuration.addProperty("[@userBase]", "ou=People,dc=james,dc=org");
         configuration.addProperty("[@userIdAttribute]", "uid");
         configuration.addProperty("[@userObjectClass]", "inetOrgPerson");
-        configuration.addProperty("[@maxRetries]", "4");
+        configuration.addProperty("[@maxRetries]", "1");
         configuration.addProperty("[@retryStartInterval]", "0");
-        configuration.addProperty("[@retryMaxInterval]", "8");
-        configuration.addProperty("[@retryIntervalScale]", "1000");
+        configuration.addProperty("[@retryMaxInterval]", "2");
+        configuration.addProperty("[@retryIntervalScale]", "100");
+        configuration.addProperty("[@connectionTimeout]", "100");
+        configuration.addProperty("[@readTimeout]", "100");
         return configuration;
     }
 
@@ -218,11 +219,13 @@ public class ReadOnlyUsersLDAPRepositoryTest {
         configuration.addProperty("[@userBase]", "ou=People,dc=james,dc=org");
         configuration.addProperty("[@userIdAttribute]", "mail");
         configuration.addProperty("[@userObjectClass]", "inetOrgPerson");
-        configuration.addProperty("[@maxRetries]", "4");
+        configuration.addProperty("[@maxRetries]", "1");
         configuration.addProperty("[@retryStartInterval]", "0");
-        configuration.addProperty("[@retryMaxInterval]", "8");
-        configuration.addProperty("[@retryIntervalScale]", "1000");
+        configuration.addProperty("[@retryMaxInterval]", "2");
+        configuration.addProperty("[@retryIntervalScale]", "100");
         configuration.addProperty("supportsVirtualHosting", true);
+        configuration.addProperty("[@connectionTimeout]", "100");
+        configuration.addProperty("[@readTimeout]", "100");
         return configuration;
     }
 }


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


[james-project] 08/16: [REFACTORING] Split JMXSieveProbe from SieveProbeImpl

Posted by rc...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit f79135af3e33996f87501c03ccbc48efd4f6716f
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Tue Feb 4 10:00:42 2020 +0700

    [REFACTORING] Split JMXSieveProbe from SieveProbeImpl
---
 .../src/main/java/org/apache/james/cli/ServerCmd.java   |  5 ++---
 .../org/apache/james/cli/probe/impl/JmxSieveProbe.java  | 17 +----------------
 .../test/java/org/apache/james/cli/ServerCmdTest.java   |  6 +++---
 .../apache/james/modules/protocols/SieveProbeImpl.java  | 12 ------------
 .../main/java/org/apache/james/probe/SieveProbe.java    |  3 ---
 5 files changed, 6 insertions(+), 37 deletions(-)

diff --git a/server/container/cli/src/main/java/org/apache/james/cli/ServerCmd.java b/server/container/cli/src/main/java/org/apache/james/cli/ServerCmd.java
index a7c77c4..d43d56c 100644
--- a/server/container/cli/src/main/java/org/apache/james/cli/ServerCmd.java
+++ b/server/container/cli/src/main/java/org/apache/james/cli/ServerCmd.java
@@ -51,7 +51,6 @@ import org.apache.james.core.quota.QuotaSizeLimit;
 import org.apache.james.core.quota.QuotaSizeUsage;
 import org.apache.james.mailbox.model.SerializableQuota;
 import org.apache.james.mailbox.model.SerializableQuotaLimitValue;
-import org.apache.james.probe.SieveProbe;
 import org.apache.james.rrt.lib.Mappings;
 import org.apache.james.util.Port;
 import org.apache.james.util.Size;
@@ -128,9 +127,9 @@ public class ServerCmd {
     private final JmxDataProbe probe;
     private final JmxMailboxProbe mailboxProbe;
     private final JmxQuotaProbe quotaProbe;
-    private final SieveProbe sieveProbe;
+    private final JmxSieveProbe sieveProbe;
 
-    public ServerCmd(JmxDataProbe probe, JmxMailboxProbe mailboxProbe, JmxQuotaProbe quotaProbe, SieveProbe sieveProbe) {
+    public ServerCmd(JmxDataProbe probe, JmxMailboxProbe mailboxProbe, JmxQuotaProbe quotaProbe, JmxSieveProbe sieveProbe) {
         this.probe = probe;
         this.mailboxProbe = mailboxProbe;
         this.quotaProbe = quotaProbe;
diff --git a/server/container/cli/src/main/java/org/apache/james/cli/probe/impl/JmxSieveProbe.java b/server/container/cli/src/main/java/org/apache/james/cli/probe/impl/JmxSieveProbe.java
index 85e2a55..41e0793 100644
--- a/server/container/cli/src/main/java/org/apache/james/cli/probe/impl/JmxSieveProbe.java
+++ b/server/container/cli/src/main/java/org/apache/james/cli/probe/impl/JmxSieveProbe.java
@@ -23,11 +23,9 @@ import java.io.IOException;
 
 import javax.management.MalformedObjectNameException;
 
-import org.apache.james.probe.SieveProbe;
 import org.apache.james.sieverepository.api.SieveRepositoryManagementMBean;
 
-public class JmxSieveProbe implements SieveProbe, JmxProbe {
-    
+public class JmxSieveProbe implements JmxProbe {
     private static final String SIEVEMANAGER_OBJECT_NAME = "org.apache.james:type=component,name=sievemanagerbean";
     
     private SieveRepositoryManagementMBean sieveRepositoryManagement;
@@ -42,44 +40,31 @@ public class JmxSieveProbe implements SieveProbe, JmxProbe {
         return this;
     }
 
-    @Override
     public long getSieveQuota() throws Exception {
         return sieveRepositoryManagement.getQuota();
     }
 
-    @Override
     public void setSieveQuota(long quota) throws Exception {
         sieveRepositoryManagement.setQuota(quota);
     }
 
-    @Override
     public void removeSieveQuota() throws Exception {
         sieveRepositoryManagement.removeQuota();
     }
 
-    @Override
     public long getSieveQuota(String user) throws Exception {
         return sieveRepositoryManagement.getQuota(user);
     }
 
-    @Override
     public void setSieveQuota(String user, long quota) throws Exception {
         sieveRepositoryManagement.setQuota(user, quota);
     }
 
-    @Override
     public void removeSieveQuota(String user) throws Exception {
         sieveRepositoryManagement.removeQuota(user);
     }
 
-    @Override
-    public void addActiveSieveScript(String user, String name, String script) throws Exception {
-        sieveRepositoryManagement.addActiveSieveScript(user, name, script);
-    }
-
-    @Override
     public void addActiveSieveScriptFromFile(String user, String name, String path) throws Exception {
         sieveRepositoryManagement.addActiveSieveScriptFromFile(user, name, path);
     }
-
 }
\ No newline at end of file
diff --git a/server/container/cli/src/test/java/org/apache/james/cli/ServerCmdTest.java b/server/container/cli/src/test/java/org/apache/james/cli/ServerCmdTest.java
index c9bdb30..915aab4 100644
--- a/server/container/cli/src/test/java/org/apache/james/cli/ServerCmdTest.java
+++ b/server/container/cli/src/test/java/org/apache/james/cli/ServerCmdTest.java
@@ -36,6 +36,7 @@ import org.apache.james.cli.exceptions.UnrecognizedCommandException;
 import org.apache.james.cli.probe.impl.JmxDataProbe;
 import org.apache.james.cli.probe.impl.JmxMailboxProbe;
 import org.apache.james.cli.probe.impl.JmxQuotaProbe;
+import org.apache.james.cli.probe.impl.JmxSieveProbe;
 import org.apache.james.cli.type.CmdType;
 import org.apache.james.core.quota.QuotaCountLimit;
 import org.apache.james.core.quota.QuotaCountUsage;
@@ -44,7 +45,6 @@ import org.apache.james.core.quota.QuotaSizeUsage;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.SerializableQuota;
 import org.apache.james.mailbox.model.SerializableQuotaLimitValue;
-import org.apache.james.probe.SieveProbe;
 import org.apache.james.rrt.lib.MappingsImpl;
 import org.junit.Before;
 import org.junit.Test;
@@ -58,7 +58,7 @@ public class ServerCmdTest {
     private JmxDataProbe dataProbe;
     private JmxMailboxProbe mailboxProbe;
     private JmxQuotaProbe quotaProbe;
-    private SieveProbe sieveProbe;
+    private JmxSieveProbe sieveProbe;
 
     private ServerCmd testee;
 
@@ -67,7 +67,7 @@ public class ServerCmdTest {
         dataProbe = mock(JmxDataProbe.class);
         mailboxProbe = mock(JmxMailboxProbe.class);
         quotaProbe = mock(JmxQuotaProbe.class);
-        sieveProbe = mock(SieveProbe.class);
+        sieveProbe = mock(JmxSieveProbe.class);
         testee = new ServerCmd(dataProbe, mailboxProbe, quotaProbe, sieveProbe);
     }
 
diff --git a/server/container/guice/protocols/managedsieve/src/main/java/org/apache/james/modules/protocols/SieveProbeImpl.java b/server/container/guice/protocols/managedsieve/src/main/java/org/apache/james/modules/protocols/SieveProbeImpl.java
index 6713690..57260b8 100644
--- a/server/container/guice/protocols/managedsieve/src/main/java/org/apache/james/modules/protocols/SieveProbeImpl.java
+++ b/server/container/guice/protocols/managedsieve/src/main/java/org/apache/james/modules/protocols/SieveProbeImpl.java
@@ -18,13 +18,8 @@
  ****************************************************************/
 package org.apache.james.modules.protocols;
 
-import java.io.FileInputStream;
-import java.io.InputStream;
-import java.nio.charset.StandardCharsets;
-
 import javax.inject.Inject;
 
-import org.apache.commons.io.IOUtils;
 import org.apache.james.core.Username;
 import org.apache.james.core.quota.QuotaSizeLimit;
 import org.apache.james.probe.SieveProbe;
@@ -79,11 +74,4 @@ public class SieveProbeImpl implements GuiceProbe, SieveProbe {
         sieveRepository.putScript(username, new ScriptName(name), new ScriptContent(script));
         sieveRepository.setActive(username, new ScriptName(name));
     }
-
-    @Override
-    public void addActiveSieveScriptFromFile(String userName, String name, String path) throws Exception {
-        try (InputStream scriptFileAsStream = new FileInputStream(path)) {
-            addActiveSieveScript(userName, name, IOUtils.toString(scriptFileAsStream, StandardCharsets.UTF_8));
-        }
-    }
 }
diff --git a/server/data/data-api/src/main/java/org/apache/james/probe/SieveProbe.java b/server/data/data-api/src/main/java/org/apache/james/probe/SieveProbe.java
index d7cb6db..79881cd 100644
--- a/server/data/data-api/src/main/java/org/apache/james/probe/SieveProbe.java
+++ b/server/data/data-api/src/main/java/org/apache/james/probe/SieveProbe.java
@@ -20,7 +20,6 @@
 package org.apache.james.probe;
 
 public interface SieveProbe {
-
     long getSieveQuota() throws Exception;
 
     void setSieveQuota(long quota) throws Exception;
@@ -34,6 +33,4 @@ public interface SieveProbe {
     void removeSieveQuota(String user) throws Exception;
 
     void addActiveSieveScript(String userName, String name, String script) throws Exception;
-
-    void addActiveSieveScriptFromFile(String userName, String name, String path) throws Exception;
 }


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


[james-project] 16/16: JAMES-2950 Add entries about the change in the changelog and upgrade-instructions documents

Posted by rc...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 4ebddfc107f7f47c29ff1d25dd045f314ff28672
Author: Rene Cordier <rc...@linagora.com>
AuthorDate: Tue Feb 4 11:09:57 2020 +0700

    JAMES-2950 Add entries about the change in the changelog and upgrade-instructions documents
---
 CHANGELOG.md            |  1 +
 upgrade-instructions.md | 13 +++++++++++++
 2 files changed, 14 insertions(+)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 667b0c5..5df9c24 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -24,6 +24,7 @@ of tasks being currently executed.
 - Usernames are assumed to be always lower cased. Many users recently complained about mails non received when sending to upper cased local recipients. We decided to simplify the handling of case for local recipients and users by always storing them lower cased.
 - Unhealthy health checks now return HTTP 503 instead of 500, degraded now returns 200 instead of 500. See JAMES-2576.
 - In order to fasten JMAP-draft message retrieval upon calls on properties expected to be fast to fetch, we now compute the preview and hasAttachment properties asynchronously and persist them in Cassandra to improve performance. See JAMES-2919.
+- It is now forbidden to create new Usernames with the following set of characters in its local part : `"(),:; <>@\[]`, as we prefer it to stay simple to handle. However, the read of Usernames already existing with some of those characters is still allowed, to not introduce any breaking change. See JAMES-2950.
 
 ### Fixed
 - JAMES-2828 & JAMES-2929 bugs affecting JDBCMailRepository usage with PostgresSQL thanks to Jörg Thomas & Sergey B
diff --git a/upgrade-instructions.md b/upgrade-instructions.md
index dd9c470..c1ca041 100644
--- a/upgrade-instructions.md
+++ b/upgrade-instructions.md
@@ -25,6 +25,19 @@ Change list:
  - [Health checks routes return code changes](#health-checks-routes-return-code-changes)
  - [User mailboxes reIndexing endpoint change](#user-mailboxes-reindexing-endpoint-change)
  - [Hybrid blobStore replaces Union blobStore](#hybrid-blobstore-replaces-union-blobstore)
+ - [New forbidden set of characters in Usernames local part](#new-forbidden-set-of-characters-in-usernames-local-part)
+ 
+### New forbidden set of characters in Usernames local part
+
+Date 04/02/2020
+
+SHA-1 XXX
+
+JIRA: https://issues.apache.org/jira/browse/JAMES-2950
+
+Even if this set of characters should be allowed for the local part of a Username regarding some context, as defined by the [RFC3696#section-3](https://tools.ietf.org/html/rfc3696#section-3), we decided that for reducing code complexity and more safety to not allow them anymore when creating new Usernames.
+
+However, the read of Usernames already existing with some of those characters is still allowed, to not introduce any breaking change.
 
 ### Hybrid blobStore replaces Union blobStore
 


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


[james-project] 15/16: JAMES-2950 Add routes tests to check that we cannot create users with illegal characters in their local part

Posted by rc...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit da95587404a3f658b7978b602ed8068acd049bc4
Author: Rene Cordier <rc...@linagora.com>
AuthorDate: Thu Oct 31 16:33:05 2019 +0700

    JAMES-2950 Add routes tests to check that we cannot create users with illegal characters in their local part
---
 .../james/user/lib/AbstractUsersRepository.java    |  4 +-
 .../james/webadmin/routes/UserRoutesTest.java      | 74 +++++++++++++++++++---
 2 files changed, 68 insertions(+), 10 deletions(-)

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 d0dd787..b770ff1 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
@@ -96,7 +96,7 @@ public abstract class AbstractUsersRepository implements UsersRepository, Config
             }
         }
 
-        if (!assertLocalPartValid(username)) {
+        if (!isLocalPartValid(username)) {
             throw new InvalidUsernameException(String.format("Given Username '%s' should not contain any of those characters: %s",
                 username.asString(), ILLEGAL_USERNAME_CHARACTERS));
         }
@@ -156,7 +156,7 @@ public abstract class AbstractUsersRepository implements UsersRepository, Config
         }
     }
 
-    private boolean assertLocalPartValid(Username username) {
+    private boolean isLocalPartValid(Username username) {
         return CharMatcher.anyOf(ILLEGAL_USERNAME_CHARACTERS)
             .matchesNoneOf(username.getLocalPart());
     }
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 fc83f11..89112c7 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
@@ -32,11 +32,12 @@ import static org.mockito.Mockito.when;
 
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Stream;
 
 import org.apache.commons.lang3.StringUtils;
 import org.apache.james.core.Domain;
 import org.apache.james.core.Username;
-import org.apache.james.domainlist.api.DomainList;
+import org.apache.james.domainlist.api.DomainListException;
 import org.apache.james.domainlist.api.mock.SimpleDomainList;
 import org.apache.james.user.api.UsersRepository;
 import org.apache.james.user.api.UsersRepositoryException;
@@ -50,6 +51,7 @@ import org.apache.james.webadmin.utils.JsonTransformer;
 import org.eclipse.jetty.http.HttpStatus;
 import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInstance;
 import org.junit.jupiter.api.extension.AfterEachCallback;
 import org.junit.jupiter.api.extension.BeforeEachCallback;
 import org.junit.jupiter.api.extension.ExtensionContext;
@@ -57,6 +59,9 @@ import org.junit.jupiter.api.extension.ParameterContext;
 import org.junit.jupiter.api.extension.ParameterResolutionException;
 import org.junit.jupiter.api.extension.ParameterResolver;
 import org.junit.jupiter.api.extension.RegisterExtension;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
 
 import com.google.common.collect.ImmutableMap;
 
@@ -67,16 +72,22 @@ class UserRoutesTest {
 
     private static class UserRoutesExtension implements BeforeEachCallback, AfterEachCallback, ParameterResolver {
 
-        static UserRoutesExtension withVirtualHosting() {
-            SimpleDomainList domainList = new SimpleDomainList();
+        static UserRoutesExtension withVirtualHosting() throws DomainListException {
+            SimpleDomainList domainList = setupDomainList();
             return new UserRoutesExtension(MemoryUsersRepository.withVirtualHosting(domainList), domainList);
         }
 
-        static UserRoutesExtension withoutVirtualHosting() {
-            SimpleDomainList domainList = new SimpleDomainList();
+        static UserRoutesExtension withoutVirtualHosting() throws DomainListException {
+            SimpleDomainList domainList = setupDomainList();
             return new UserRoutesExtension(MemoryUsersRepository.withoutVirtualHosting(domainList), domainList);
         }
 
+        private static SimpleDomainList setupDomainList() throws DomainListException {
+            SimpleDomainList domainList = new SimpleDomainList();
+            domainList.addDomain(DOMAIN);
+            return domainList;
+        }
+
         final MemoryUsersRepository usersRepository;
         final SimpleDomainList domainList;
 
@@ -88,9 +99,7 @@ class UserRoutesTest {
         }
 
         @Override
-        public void beforeEach(ExtensionContext extensionContext) throws Exception {
-            domainList.addDomain(DOMAIN);
-
+        public void beforeEach(ExtensionContext extensionContext) {
             webAdminServer = startServer(usersRepository);
         }
 
@@ -310,6 +319,39 @@ class UserRoutesTest {
             }
         }
 
+        @TestInstance(TestInstance.Lifecycle.PER_CLASS)
+        interface IllegalCharactersErrorHandlingContract {
+
+            default Stream<Arguments> illegalCharacters() {
+                return Stream.of(
+                    Arguments.of("\""),
+                    Arguments.of("("),
+                    Arguments.of(")"),
+                    Arguments.of(","),
+                    Arguments.of(":"),
+                    Arguments.of(";"),
+                    Arguments.of("<"),
+                    Arguments.of(">"),
+                    Arguments.of("@"),
+                    Arguments.of("["),
+                    Arguments.of("\\"),
+                    Arguments.of("]"),
+                    Arguments.of(" ")
+                );
+            }
+
+            @ParameterizedTest
+            @MethodSource("illegalCharacters")
+            default void putShouldReturnBadRequestWhenUsernameContainsSpecialCharacter(String illegalCharacter) {
+                given()
+                    .body("{\"password\":\"password\"}")
+                .when()
+                    .put("user" + illegalCharacter + "name@" + DOMAIN.name())
+                .then()
+                    .statusCode(HttpStatus.BAD_REQUEST_400);
+            }
+        }
+
         interface MockBehaviorErrorHandlingContract {
 
             @Test
@@ -443,6 +485,9 @@ class UserRoutesTest {
         @RegisterExtension
         UserRoutesExtension extension = UserRoutesExtension.withVirtualHosting();
 
+        WithVirtualHosting() throws DomainListException {
+        }
+
         @Test
         void puttingWithDomainPartInUsernameTwoTimesShouldBeAllowed() {
             // Given
@@ -527,6 +572,11 @@ class UserRoutesTest {
             .then()
                 .statusCode(HttpStatus.NO_CONTENT_204);
         }
+
+        @Nested
+        class IllegalCharacterErrorHandlingTest implements UserRoutesContract.IllegalCharactersErrorHandlingContract {
+
+        }
     }
 
     @Nested
@@ -535,6 +585,9 @@ class UserRoutesTest {
         @RegisterExtension
         UserRoutesExtension extension = UserRoutesExtension.withoutVirtualHosting();
 
+        WithoutVirtualHosting() throws DomainListException {
+        }
+
         @Test
         void puttingWithoutDomainPartInUsernameTwoTimesShouldBeAllowed() {
             // Given
@@ -619,5 +672,10 @@ class UserRoutesTest {
             .then()
                 .statusCode(HttpStatus.NO_CONTENT_204);
         }
+
+        @Nested
+        class IllegalCharacterErrorHandlingTest implements UserRoutesContract.IllegalCharactersErrorHandlingContract {
+
+        }
     }
 }


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


[james-project] 12/16: [Refactoring] Remove some visibility classifiers for better readability

Posted by rc...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 23a96a85fd66c90cc049daff14f11b141a311bca
Author: Raphael Ouazana <ra...@linagora.com>
AuthorDate: Mon Jan 27 15:54:43 2020 +0100

    [Refactoring] Remove some visibility classifiers for better readability
---
 .../user/ldap/ReadOnlyUsersLDAPRepositoryTest.java | 45 +++++++++++-----------
 1 file changed, 22 insertions(+), 23 deletions(-)

diff --git a/server/data/data-ldap/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryTest.java b/server/data/data-ldap/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryTest.java
index e5e9484..fd26257 100644
--- a/server/data/data-ldap/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryTest.java
+++ b/server/data/data-ldap/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryTest.java
@@ -34,20 +34,19 @@ import org.apache.commons.configuration2.tree.ImmutableNode;
 import org.apache.james.core.Username;
 import org.apache.james.domainlist.api.DomainList;
 import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class ReadOnlyUsersLDAPRepositoryTest {
+class ReadOnlyUsersLDAPRepositoryTest {
 
-    private static final Logger LOGGER = LoggerFactory.getLogger(ReadOnlyUsersLDAPRepositoryTest.class);
-    private static final Username JAMES_USER_MAIL = Username.of(JAMES_USER.getLocalPart()+ "@" + DOMAIN);
-    private static final Username UNKNOWN = Username.of("unknown");
-    private static final String BAD_PASSWORD = "badpassword";
+    static final Logger LOGGER = LoggerFactory.getLogger(ReadOnlyUsersLDAPRepositoryTest.class);
+    static final Username JAMES_USER_MAIL = Username.of(JAMES_USER.getLocalPart()+ "@" + DOMAIN);
+    static final Username UNKNOWN = Username.of("unknown");
+    static final String BAD_PASSWORD = "badpassword";
 
-    private DomainList domainList;
+    DomainList domainList;
 
     @BeforeEach
     void setUp() {
@@ -58,7 +57,7 @@ public class ReadOnlyUsersLDAPRepositoryTest {
     class SupportVirtualHosting {
 
         @Test
-        public void supportVirtualHostingShouldReturnFalseByDefault() throws Exception {
+        void supportVirtualHostingShouldReturnFalseByDefault() throws Exception {
             ReadOnlyUsersLDAPRepository usersLDAPRepository = new ReadOnlyUsersLDAPRepository(domainList);
             usersLDAPRepository.configure(ldapRepositoryConfiguration());
 
@@ -66,7 +65,7 @@ public class ReadOnlyUsersLDAPRepositoryTest {
         }
 
         @Test
-        public void supportVirtualHostingShouldReturnTrueWhenReportedInConfig() throws Exception {
+        void supportVirtualHostingShouldReturnTrueWhenReportedInConfig() throws Exception {
             HierarchicalConfiguration<ImmutableNode> configuration = ldapRepositoryConfiguration();
             configuration.addProperty(ReadOnlyUsersLDAPRepository.SUPPORTS_VIRTUAL_HOSTING, "true");
 
@@ -77,7 +76,7 @@ public class ReadOnlyUsersLDAPRepositoryTest {
         }
 
         @Test
-        public void supportVirtualHostingShouldReturnFalseWhenReportedInConfig() throws Exception {
+        void supportVirtualHostingShouldReturnFalseWhenReportedInConfig() throws Exception {
             HierarchicalConfiguration<ImmutableNode> configuration = ldapRepositoryConfiguration();
             configuration.addProperty(ReadOnlyUsersLDAPRepository.SUPPORTS_VIRTUAL_HOSTING, "false");
 
@@ -88,7 +87,7 @@ public class ReadOnlyUsersLDAPRepositoryTest {
         }
 
         @Test
-        public void configureShouldThrowOnNonBooleanValueForSupportsVirtualHosting() throws Exception {
+        void configureShouldThrowOnNonBooleanValueForSupportsVirtualHosting() {
             HierarchicalConfiguration<ImmutableNode> configuration = ldapRepositoryConfiguration();
             configuration.addProperty(ReadOnlyUsersLDAPRepository.SUPPORTS_VIRTUAL_HOSTING, "bad");
 
@@ -103,37 +102,37 @@ public class ReadOnlyUsersLDAPRepositoryTest {
     class TestUser {
 
         @Test
-        public void knownUserShouldBeAbleToLogInWhenPasswordIsCorrect() throws Exception {
+        void knownUserShouldBeAbleToLogInWhenPasswordIsCorrect() throws Exception {
             ReadOnlyUsersLDAPRepository ldapRepository = startUsersRepository(ldapRepositoryConfiguration());
             assertThat(ldapRepository.test(JAMES_USER, PASSWORD)).isTrue();
         }
 
         @Test
-        public void knownUserShouldNotBeAbleToLogInWhenPasswordIsNotCorrect() throws Exception {
+        void knownUserShouldNotBeAbleToLogInWhenPasswordIsNotCorrect() throws Exception {
             ReadOnlyUsersLDAPRepository ldapRepository = startUsersRepository(ldapRepositoryConfiguration());
             assertThat(ldapRepository.test(JAMES_USER, BAD_PASSWORD)).isFalse();
         }
 
         @Test
-        public void unknownUserShouldNotBeAbleToLogIn() throws Exception {
+        void unknownUserShouldNotBeAbleToLogIn() throws Exception {
             ReadOnlyUsersLDAPRepository ldapRepository = startUsersRepository(ldapRepositoryConfiguration());
             assertThat(ldapRepository.test(UNKNOWN, BAD_PASSWORD)).isFalse();
         }
 
         @Test
-        public void unknownUserShouldNotBeAbleToLogInWhenPasswordIsCorrect() throws Exception {
+        void unknownUserShouldNotBeAbleToLogInWhenPasswordIsCorrect() throws Exception {
             ReadOnlyUsersLDAPRepository ldapRepository = startUsersRepository(ldapRepositoryConfiguration());
             assertThat(ldapRepository.test(UNKNOWN, PASSWORD)).isFalse();
         }
 
         @Test
-        public void knownUserShouldBeAbleToLogInWhenPasswordIsCorrectWithVirtualHosting() throws Exception {
+        void knownUserShouldBeAbleToLogInWhenPasswordIsCorrectWithVirtualHosting() throws Exception {
             ReadOnlyUsersLDAPRepository ldapRepository = startUsersRepository(ldapRepositoryConfigurationWithVirtualHosting());
             assertThat(ldapRepository.test(JAMES_USER_MAIL, PASSWORD)).isTrue();
         }
 
         @Test
-        public void testShouldStillWorkAfterRestartingLDAP() throws Exception {
+        void testShouldStillWorkAfterRestartingLDAP() throws Exception {
             ReadOnlyUsersLDAPRepository ldapRepository = startUsersRepository(ldapRepositoryConfigurationWithVirtualHosting());
             ldapRepository.test(JAMES_USER_MAIL, PASSWORD);
 
@@ -149,25 +148,25 @@ public class ReadOnlyUsersLDAPRepositoryTest {
         }
 
         @Test
-        public void knownUserShouldNotBeAbleToLogInWhenPasswordIsNotCorrectWithVirtualHosting() throws Exception {
+        void knownUserShouldNotBeAbleToLogInWhenPasswordIsNotCorrectWithVirtualHosting() throws Exception {
             ReadOnlyUsersLDAPRepository ldapRepository = startUsersRepository(ldapRepositoryConfigurationWithVirtualHosting());
             assertThat(ldapRepository.test(JAMES_USER, BAD_PASSWORD)).isFalse();
         }
 
         @Test
-        public void unknownUserShouldNotBeAbleToLogInWithVirtualHosting() throws Exception {
+        void unknownUserShouldNotBeAbleToLogInWithVirtualHosting() throws Exception {
             ReadOnlyUsersLDAPRepository ldapRepository = startUsersRepository(ldapRepositoryConfigurationWithVirtualHosting());
             assertThat(ldapRepository.test(UNKNOWN, BAD_PASSWORD)).isFalse();
         }
 
         @Test
-        public void unknownUserShouldNotBeAbleToLogInWhenPasswordIsCorrectWithVirtualHosting() throws Exception {
+        void unknownUserShouldNotBeAbleToLogInWhenPasswordIsCorrectWithVirtualHosting() throws Exception {
             ReadOnlyUsersLDAPRepository ldapRepository = startUsersRepository(ldapRepositoryConfigurationWithVirtualHosting());
             assertThat(ldapRepository.test(UNKNOWN, PASSWORD)).isFalse();
         }
 
         @Test
-        public void specialCharacterInUserInputShouldBeSanitized() throws Exception {
+        void specialCharacterInUserInputShouldBeSanitized() throws Exception {
             Username patternMatchingMultipleUsers = Username.of("j*");
 
             ReadOnlyUsersLDAPRepository ldapRepository = startUsersRepository(ldapRepositoryConfigurationWithVirtualHosting());
@@ -175,13 +174,13 @@ public class ReadOnlyUsersLDAPRepositoryTest {
         }
 
         @Test
-        public void containsWithGetUserShouldBeTrue() throws Exception {
+        void containsWithGetUserShouldBeTrue() throws Exception {
             ReadOnlyUsersLDAPRepository ldapRepository = startUsersRepository(ldapRepositoryConfiguration());
             assertThat(ldapRepository.contains(ldapRepository.getUser(JAMES_USER_MAIL.asMailAddress()))).isTrue();
         }
 
         @Test
-        public void containsWithGetUserShouldBeTrueWithVirtualHosting() throws Exception {
+        void containsWithGetUserShouldBeTrueWithVirtualHosting() throws Exception {
             ReadOnlyUsersLDAPRepository ldapRepository = startUsersRepository(ldapRepositoryConfigurationWithVirtualHosting());
             assertThat(ldapRepository.contains(ldapRepository.getUser(JAMES_USER_MAIL.asMailAddress()))).isTrue();
         }


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


[james-project] 14/16: JAMES-2950 Should not be possible to add a user with special characters in its local part

Posted by rc...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit fdf418bca5365ea52356b78d1457691202e6b369
Author: Rene Cordier <rc...@linagora.com>
AuthorDate: Fri Jan 17 17:09:33 2020 +0700

    JAMES-2950 Should not be possible to add a user with special characters in its local part
    
    We check this only when adding a user to not break compatibility with existing users having some of those characters
---
 .../james/user/lib/AbstractUsersRepository.java    | 12 +++++++++
 .../user/lib/AbstractUsersRepositoryTest.java      | 30 ++++++++++++++++++++++
 2 files changed, 42 insertions(+)

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 24558f2..d0dd787 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
@@ -38,8 +38,10 @@ import org.apache.james.user.api.UsersRepository;
 import org.apache.james.user.api.UsersRepositoryException;
 
 import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.CharMatcher;
 
 public abstract class AbstractUsersRepository implements UsersRepository, Configurable {
+    private static String ILLEGAL_USERNAME_CHARACTERS = "\"(),:; <>@[\\]";
 
     private final DomainList domainList;
     private boolean virtualHosting;
@@ -93,6 +95,11 @@ public abstract class AbstractUsersRepository implements UsersRepository, Config
                 throw new InvalidUsernameException("Given Username contains a @domainpart but virtualhosting support is disabled");
             }
         }
+
+        if (!assertLocalPartValid(username)) {
+            throw new InvalidUsernameException(String.format("Given Username '%s' should not contain any of those characters: %s",
+                username.asString(), ILLEGAL_USERNAME_CHARACTERS));
+        }
     }
 
     @Override
@@ -148,4 +155,9 @@ public abstract class AbstractUsersRepository implements UsersRepository, Config
             throw new UsersRepositoryException("Failed to compute mail address associated with the user", e);
         }
     }
+
+    private boolean assertLocalPartValid(Username username) {
+        return CharMatcher.anyOf(ILLEGAL_USERNAME_CHARACTERS)
+            .matchesNoneOf(username.getLocalPart());
+    }
 }
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 99a967d..09ec685 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
@@ -24,6 +24,7 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.Optional;
+import java.util.stream.Stream;
 
 import org.apache.james.core.Domain;
 import org.apache.james.core.MailAddress;
@@ -31,10 +32,14 @@ import org.apache.james.core.Username;
 import org.apache.james.domainlist.api.mock.SimpleDomainList;
 import org.apache.james.lifecycle.api.LifecycleUtil;
 import org.apache.james.user.api.AlreadyExistInUsersRepositoryException;
+import org.apache.james.user.api.InvalidUsernameException;
 import org.apache.james.user.api.UsersRepositoryException;
 import org.apache.james.user.api.model.User;
 import org.junit.jupiter.api.Assumptions;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
 
 
 public abstract class AbstractUsersRepositoryTest {
@@ -509,4 +514,29 @@ public abstract class AbstractUsersRepositoryTest {
         assertThat(usersRepository.getMailAddressFor(Username.of(username)))
             .isEqualTo(new MailAddress(username, domainList.getDefaultDomain()));
     }
+
+    @ParameterizedTest
+    @MethodSource("illegalCharacters")
+    void assertValidShouldThrowWhenUsernameLocalPartWithIllegalCharacter(String illegalCharacter) {
+        assertThatThrownBy(() -> usersRepository.assertValid(Username.of("a" + illegalCharacter + "a")))
+            .isInstanceOf(InvalidUsernameException.class);
+    }
+
+    private static Stream<Arguments> illegalCharacters() {
+        return Stream.of(
+            "\"",
+            "(",
+            ")",
+            ",",
+            ":",
+            ";",
+            "<",
+            ">",
+            "@",
+            "[",
+            "\\",
+            "]",
+            " ")
+            .map(Arguments::of);
+    }
 }


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


[james-project] 13/16: JAMES-2950 Migrate UsersRepositoryTest classes to JUnit 5

Posted by rc...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 9c5038dd754b355e65f5c8df23c56490f045d604
Author: Rene Cordier <rc...@linagora.com>
AuthorDate: Fri Jan 17 16:58:20 2020 +0700

    JAMES-2950 Migrate UsersRepositoryTest classes to JUnit 5
---
 .../cassandra/CassandraUsersRepositoryTest.java    |  38 +++---
 .../james/user/jpa/JpaUsersRepositoryTest.java     |  18 ++-
 .../user/lib/AbstractUsersRepositoryTest.java      | 144 ++++++++++-----------
 .../user/memory/MemoryUsersRepositoryTest.java     |  21 ++-
 4 files changed, 106 insertions(+), 115 deletions(-)

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 7009cd7..8781f71 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
@@ -20,37 +20,31 @@
 package org.apache.james.user.cassandra;
 
 import org.apache.commons.configuration2.BaseHierarchicalConfiguration;
-import org.apache.james.backends.cassandra.CassandraCluster;
-import org.apache.james.backends.cassandra.DockerCassandraRule;
+import org.apache.james.backends.cassandra.CassandraClusterExtension;
 import org.apache.james.user.lib.AbstractUsersRepository;
 import org.apache.james.user.lib.AbstractUsersRepositoryTest;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Rule;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.extension.RegisterExtension;
 
-public class CassandraUsersRepositoryTest extends AbstractUsersRepositoryTest {
-    @Rule
-    public DockerCassandraRule cassandraServer = new DockerCassandraRule();
-    
-    private CassandraCluster cassandra;
+class CassandraUsersRepositoryTest extends AbstractUsersRepositoryTest {
 
-    @Override
-    @Before
-    public void setUp() throws Exception {
-        cassandra = CassandraCluster.create(CassandraUsersRepositoryModule.MODULE, cassandraServer.getHost());
+    @RegisterExtension
+    static CassandraClusterExtension cassandraCluster = new CassandraClusterExtension(CassandraUsersRepositoryModule.MODULE);
+
+    @BeforeEach
+    void setup() throws Exception {
         super.setUp();
     }
-    
-    @Override
-    @After
-    public void tearDown() throws Exception {
+
+    @AfterEach
+    void teardown() throws Exception {
         super.tearDown();
-        cassandra.clearTables();
-        cassandra.closeCluster();
     }
 
-    @Override    protected AbstractUsersRepository getUsersRepository() throws Exception {
-        CassandraUsersRepository cassandraUsersRepository = new CassandraUsersRepository(domainList, cassandra.getConf());
+    @Override
+    protected AbstractUsersRepository getUsersRepository() throws Exception {
+        CassandraUsersRepository cassandraUsersRepository = new CassandraUsersRepository(domainList, cassandraCluster.getCassandraCluster().getConf());
         BaseHierarchicalConfiguration configuration = new BaseHierarchicalConfiguration();
         configuration.addProperty("enableVirtualHosting", "true");
         cassandraUsersRepository.configure(configuration);
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 1cff3ee..6c44c6e 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
@@ -23,22 +23,20 @@ import org.apache.james.backends.jpa.JpaTestCluster;
 import org.apache.james.user.jpa.model.JPAUser;
 import org.apache.james.user.lib.AbstractUsersRepository;
 import org.apache.james.user.lib.AbstractUsersRepositoryTest;
-import org.junit.After;
-import org.junit.Before;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
 
-public class JpaUsersRepositoryTest extends AbstractUsersRepositoryTest {
+class JpaUsersRepositoryTest extends AbstractUsersRepositoryTest {
 
-    private static final JpaTestCluster JPA_TEST_CLUSTER = JpaTestCluster.create(JPAUser.class);
+    static final JpaTestCluster JPA_TEST_CLUSTER = JpaTestCluster.create(JPAUser.class);
 
-    @Before
-    @Override
-    public void setUp() throws Exception {
+    @BeforeEach
+    void setup() throws Exception {
         super.setUp();
     }
 
-    @Override
-    @After
-    public void tearDown() throws Exception {
+    @AfterEach
+    void teardown() throws Exception {
         super.tearDown();
         JPA_TEST_CLUSTER.clear("JAMES_USER");
     }
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 203f431..99a967d 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
@@ -33,13 +33,13 @@ import org.apache.james.lifecycle.api.LifecycleUtil;
 import org.apache.james.user.api.AlreadyExistInUsersRepositoryException;
 import org.apache.james.user.api.UsersRepositoryException;
 import org.apache.james.user.api.model.User;
-import org.junit.Assume;
-import org.junit.Test;
+import org.junit.jupiter.api.Assumptions;
+import org.junit.jupiter.api.Test;
 
 
 public abstract class AbstractUsersRepositoryTest {
 
-    private static final Domain DOMAIN = Domain.of("domain");
+    static final Domain DOMAIN = Domain.of("domain");
 
     protected AbstractUsersRepository usersRepository;
     protected SimpleDomainList domainList;
@@ -52,14 +52,14 @@ public abstract class AbstractUsersRepositoryTest {
      */
     protected abstract AbstractUsersRepository getUsersRepository() throws Exception;
 
-    private Username user1;
-    private Username user1CaseVariation;
-    private Username user2;
-    private Username user3;
-    private Username admin;
-    private Username adminCaseVariation;
+    Username user1;
+    Username user1CaseVariation;
+    Username user2;
+    Username user3;
+    Username admin;
+    Username adminCaseVariation;
 
-    public void setUp() throws Exception {
+    protected void setUp() throws Exception {
         domainList = new SimpleDomainList();
         domainList.addDomain(DOMAIN);
         this.usersRepository = getUsersRepository();
@@ -71,8 +71,8 @@ public abstract class AbstractUsersRepositoryTest {
         adminCaseVariation = login("adMin");
     }
 
-    public void tearDown() throws Exception {
-        disposeUsersRepository();
+    protected void tearDown() throws Exception {
+        LifecycleUtil.dispose(this.usersRepository);
     }
     
     private Username login(String login) {
@@ -84,7 +84,7 @@ public abstract class AbstractUsersRepositoryTest {
     }
     
     @Test
-    public void countUsersShouldReturnZeroWhenEmptyRepository() throws UsersRepositoryException {
+    void countUsersShouldReturnZeroWhenEmptyRepository() throws UsersRepositoryException {
         //Given
         int expected = 0;
         //When
@@ -94,7 +94,7 @@ public abstract class AbstractUsersRepositoryTest {
     }
     
     @Test
-    public void countUsersShouldReturnNumberOfUsersWhenNotEmptyRepository() throws UsersRepositoryException {
+    void countUsersShouldReturnNumberOfUsersWhenNotEmptyRepository() throws UsersRepositoryException {
         //Given
         ArrayList<Username> keys = new ArrayList<>(3);
         keys.add(user1);
@@ -110,7 +110,7 @@ public abstract class AbstractUsersRepositoryTest {
     }
     
     @Test
-    public void listShouldReturnEmptyIteratorWhenEmptyRepository() throws UsersRepositoryException {
+    void listShouldReturnEmptyIteratorWhenEmptyRepository() throws UsersRepositoryException {
         //When
         Iterator<Username> actual = usersRepository.list();
         //Then
@@ -120,7 +120,7 @@ public abstract class AbstractUsersRepositoryTest {
     }
     
     @Test
-    public void listShouldReturnExactlyUsersInRepository() throws UsersRepositoryException {
+    void listShouldReturnExactlyUsersInRepository() throws UsersRepositoryException {
         //Given
         ArrayList<Username> keys = new ArrayList<>(3);
         keys.add(user1);
@@ -138,7 +138,7 @@ public abstract class AbstractUsersRepositoryTest {
     }
     
     @Test
-    public void addUserShouldAddAUserWhenEmptyRepository() throws UsersRepositoryException {
+    void addUserShouldAddAUserWhenEmptyRepository() throws UsersRepositoryException {
         //When
         usersRepository.addUser(user2, "password2");
         //Then
@@ -146,28 +146,28 @@ public abstract class AbstractUsersRepositoryTest {
     }
 
     @Test
-    public void containsShouldPreserveCaseVariation() throws UsersRepositoryException {
+    void containsShouldPreserveCaseVariation() throws UsersRepositoryException {
         usersRepository.addUser(user1CaseVariation, "password2");
 
         assertThat(usersRepository.contains(user1CaseVariation)).isTrue();
     }
 
     @Test
-    public void containsShouldBeCaseInsentive() throws UsersRepositoryException {
+    void containsShouldBeCaseInsentive() throws UsersRepositoryException {
         usersRepository.addUser(user1CaseVariation, "password2");
 
         assertThat(usersRepository.contains(user1)).isTrue();
     }
 
     @Test
-    public void containsShouldBeCaseInsentiveWhenOriginalValueLowerCased() throws UsersRepositoryException {
+    void containsShouldBeCaseInsentiveWhenOriginalValueLowerCased() throws UsersRepositoryException {
         usersRepository.addUser(user1, "password2");
 
         assertThat(usersRepository.contains(user1CaseVariation)).isTrue();
     }
 
     @Test
-    public void addUserShouldDisableCaseVariationWhenOriginalValueLowerCased() throws UsersRepositoryException {
+    void addUserShouldDisableCaseVariationWhenOriginalValueLowerCased() throws UsersRepositoryException {
         usersRepository.addUser(user1, "password2");
 
         assertThatThrownBy(() -> usersRepository.addUser(user1CaseVariation, "pass"))
@@ -175,7 +175,7 @@ public abstract class AbstractUsersRepositoryTest {
     }
 
     @Test
-    public void addUserShouldDisableCaseVariation() throws UsersRepositoryException {
+    void addUserShouldDisableCaseVariation() throws UsersRepositoryException {
         usersRepository.addUser(user1CaseVariation, "password2");
 
         assertThatThrownBy(() -> usersRepository.addUser(user1, "pass"))
@@ -183,7 +183,7 @@ public abstract class AbstractUsersRepositoryTest {
     }
 
     @Test
-    public void listShouldReturnLowerCaseUser() throws UsersRepositoryException {
+    void listShouldReturnLowerCaseUser() throws UsersRepositoryException {
         usersRepository.addUser(user1CaseVariation, "password2");
 
         assertThat(usersRepository.list())
@@ -192,7 +192,7 @@ public abstract class AbstractUsersRepositoryTest {
     }
 
     @Test
-    public void removeUserShouldBeCaseInsentiveOnCaseVariationUser() throws UsersRepositoryException {
+    void removeUserShouldBeCaseInsentiveOnCaseVariationUser() throws UsersRepositoryException {
         usersRepository.addUser(user1CaseVariation, "password2");
 
         usersRepository.removeUser(user1);
@@ -203,7 +203,7 @@ public abstract class AbstractUsersRepositoryTest {
     }
 
     @Test
-    public void removeUserShouldBeCaseInsentive() throws UsersRepositoryException {
+    void removeUserShouldBeCaseInsentive() throws UsersRepositoryException {
         usersRepository.addUser(user1, "password2");
 
         usersRepository.removeUser(user1CaseVariation);
@@ -214,7 +214,7 @@ public abstract class AbstractUsersRepositoryTest {
     }
 
     @Test
-    public void getUserByNameShouldBeCaseInsentive() throws UsersRepositoryException {
+    void getUserByNameShouldBeCaseInsentive() throws UsersRepositoryException {
         usersRepository.addUser(user1, "password2");
 
         assertThat(usersRepository.getUserByName(user1CaseVariation).getUserName())
@@ -222,7 +222,7 @@ public abstract class AbstractUsersRepositoryTest {
     }
 
     @Test
-    public void getUserByNameShouldReturnLowerCaseAddedUser() throws UsersRepositoryException {
+    void getUserByNameShouldReturnLowerCaseAddedUser() throws UsersRepositoryException {
         usersRepository.addUser(user1CaseVariation, "password2");
 
         assertThat(usersRepository.getUserByName(user1).getUserName())
@@ -230,20 +230,20 @@ public abstract class AbstractUsersRepositoryTest {
     }
 
     @Test
-    public void getUserShouldBeCaseInsentive() throws Exception {
+    void getUserShouldBeCaseInsentive() throws Exception {
         assertThat(usersRepository.getUser(user1CaseVariation.asMailAddress()))
             .isEqualTo(user1);
     }
 
     @Test
-    public void isAdministratorShouldBeCaseInsentive() throws Exception {
+    void isAdministratorShouldBeCaseInsentive() throws Exception {
         usersRepository.setAdministratorId(Optional.of(admin));
         assertThat(usersRepository.isAdministrator(adminCaseVariation))
             .isTrue();
     }
 
     @Test
-    public void testShouldBeCaseInsentiveOnCaseVariationUser() throws UsersRepositoryException {
+    void testShouldBeCaseInsentiveOnCaseVariationUser() throws UsersRepositoryException {
         String password = "password2";
         usersRepository.addUser(user1CaseVariation, password);
 
@@ -252,7 +252,7 @@ public abstract class AbstractUsersRepositoryTest {
     }
 
     @Test
-    public void testShouldBeCaseInsentive() throws UsersRepositoryException {
+    void testShouldBeCaseInsentive() throws UsersRepositoryException {
         String password = "password2";
         usersRepository.addUser(user1, password);
 
@@ -261,7 +261,7 @@ public abstract class AbstractUsersRepositoryTest {
     }
     
     @Test 
-    public void addUserShouldAddAUserWhenNotEmptyRepository() throws UsersRepositoryException {
+    void addUserShouldAddAUserWhenNotEmptyRepository() throws UsersRepositoryException {
         //Given
         usersRepository.addUser(user2, "password2");
         //When
@@ -270,24 +270,26 @@ public abstract class AbstractUsersRepositoryTest {
         assertThat(usersRepository.contains(user3)).isTrue();
     }
     
-    @Test(expected = AlreadyExistInUsersRepositoryException.class)
-    public void addUserShouldThrowWhenSameUsernameWithDifferentCase() throws UsersRepositoryException {
+    @Test
+    void addUserShouldThrowWhenSameUsernameWithDifferentCase() throws UsersRepositoryException {
         //Given
         usersRepository.addUser(login("myUsername"), "password");
         //When
-        usersRepository.addUser(login("MyUsername"), "password"); 
+        assertThatThrownBy(() -> usersRepository.addUser(login("MyUsername"), "password"))
+            .isInstanceOf(AlreadyExistInUsersRepositoryException.class);
     }
     
-    @Test(expected = AlreadyExistInUsersRepositoryException.class)
-    public void addUserShouldThrowWhenUserAlreadyPresentInRepository() throws UsersRepositoryException {
+    @Test
+    void addUserShouldThrowWhenUserAlreadyPresentInRepository() throws UsersRepositoryException {
         //Given
         usersRepository.addUser(user1, "password");
         //When
-        usersRepository.addUser(user1, "password2");
+        assertThatThrownBy(() -> usersRepository.addUser(user1, "password2"))
+            .isInstanceOf(AlreadyExistInUsersRepositoryException.class);
     }
     
     @Test
-    public void getUserByNameShouldReturnAUserWhenContainedInRepository() throws UsersRepositoryException {
+    void getUserByNameShouldReturnAUserWhenContainedInRepository() throws UsersRepositoryException {
         //Given
         usersRepository.addUser(user1, "password");
         //When
@@ -298,7 +300,7 @@ public abstract class AbstractUsersRepositoryTest {
     }
 
     @Test
-    public void getUserByNameShouldReturnUserWhenDifferentCase() throws UsersRepositoryException {
+    void getUserByNameShouldReturnUserWhenDifferentCase() throws UsersRepositoryException {
         //Given
         usersRepository.addUser(login("username"), "password");
         //When
@@ -309,7 +311,7 @@ public abstract class AbstractUsersRepositoryTest {
     }
    
     @Test
-    public void testShouldReturnTrueWhenAUserHasACorrectPassword() throws UsersRepositoryException { 
+    void testShouldReturnTrueWhenAUserHasACorrectPassword() throws UsersRepositoryException { 
         //Given
         usersRepository.addUser(user1, "password");
         //When
@@ -319,7 +321,7 @@ public abstract class AbstractUsersRepositoryTest {
     }
     
     @Test
-    public void testShouldReturnTrueWhenAUserHasACorrectPasswordAndOtherCaseInDomain() throws Exception { 
+    void testShouldReturnTrueWhenAUserHasACorrectPasswordAndOtherCaseInDomain() throws Exception { 
         usersRepository.setEnableVirtualHosting(true);
 
         domainList.addDomain(Domain.of("jAmEs.oRg"));
@@ -333,7 +335,7 @@ public abstract class AbstractUsersRepositoryTest {
     }
 
     @Test
-    public void testShouldReturnFalseWhenAUserHasAnIncorrectPassword() throws UsersRepositoryException { 
+    void testShouldReturnFalseWhenAUserHasAnIncorrectPassword() throws UsersRepositoryException { 
         //Given
         usersRepository.addUser(user1, "password");
         //When
@@ -343,7 +345,7 @@ public abstract class AbstractUsersRepositoryTest {
     }
     
     @Test
-    public void testShouldReturnFalseWhenAUserHasAnIncorrectCasePassword() throws UsersRepositoryException { 
+    void testShouldReturnFalseWhenAUserHasAnIncorrectCasePassword() throws UsersRepositoryException { 
         //Given
         usersRepository.addUser(user1, "password");
         //When
@@ -353,7 +355,7 @@ public abstract class AbstractUsersRepositoryTest {
     }
     
     @Test
-    public void testShouldReturnFalseWhenAUserIsNotInRepository() throws UsersRepositoryException { 
+    void testShouldReturnFalseWhenAUserIsNotInRepository() throws UsersRepositoryException { 
         //Given
         usersRepository.addUser(login("username"), "password");
         //When
@@ -363,7 +365,7 @@ public abstract class AbstractUsersRepositoryTest {
     }
 
     @Test
-    public void testShouldReturnTrueWhenAUserHasAnIncorrectCaseName() throws UsersRepositoryException {
+    void testShouldReturnTrueWhenAUserHasAnIncorrectCaseName() throws UsersRepositoryException {
         //Given
         usersRepository.addUser(login("username"), "password");
         //When
@@ -373,7 +375,7 @@ public abstract class AbstractUsersRepositoryTest {
     }
 
     @Test
-    public void testShouldReturnFalseWhenEmptyRepository() throws UsersRepositoryException {
+    void testShouldReturnFalseWhenEmptyRepository() throws UsersRepositoryException {
         //When
         boolean actual = usersRepository.test(user1, "password");
         //Then
@@ -381,7 +383,7 @@ public abstract class AbstractUsersRepositoryTest {
     }
 
     @Test
-    public void testShouldReturnFalseWhenAUserIsRemovedFromRepository() throws UsersRepositoryException {
+    void testShouldReturnFalseWhenAUserIsRemovedFromRepository() throws UsersRepositoryException {
         //Given
         usersRepository.addUser(user1, "password");
         usersRepository.removeUser(user1);
@@ -392,7 +394,7 @@ public abstract class AbstractUsersRepositoryTest {
     }
     
     @Test
-    public void removeUserShouldRemoveAUserWhenPresentInRepository() throws UsersRepositoryException {
+    void removeUserShouldRemoveAUserWhenPresentInRepository() throws UsersRepositoryException {
         //Given
         usersRepository.addUser(user1, "password");
         //When
@@ -401,14 +403,15 @@ public abstract class AbstractUsersRepositoryTest {
         assertThat(usersRepository.contains(user1)).isFalse();
     }
     
-    @Test(expected = UsersRepositoryException.class)
-    public void removeUserShouldThrowWhenUserNotInRepository() throws UsersRepositoryException {
+    @Test
+    void removeUserShouldThrowWhenUserNotInRepository() {
         //When
-        usersRepository.removeUser(user1);
+        assertThatThrownBy(() -> usersRepository.removeUser(user1))
+            .isInstanceOf(UsersRepositoryException.class);
     }
     
     @Test
-    public void updateUserShouldAllowToAuthenticateWithNewPassword() throws UsersRepositoryException { 
+    void updateUserShouldAllowToAuthenticateWithNewPassword() throws UsersRepositoryException { 
         //Given
         usersRepository.addUser(user1, "password");
         User user = usersRepository.getUserByName(user1);
@@ -420,7 +423,7 @@ public abstract class AbstractUsersRepositoryTest {
     }
    
     @Test
-    public void updateUserShouldNotAllowToAuthenticateWithOldPassword() throws UsersRepositoryException {
+    void updateUserShouldNotAllowToAuthenticateWithOldPassword() throws UsersRepositoryException {
         //Given
         usersRepository.addUser(user1, "password");
         User user = usersRepository.getUserByName(user1);
@@ -431,67 +434,64 @@ public abstract class AbstractUsersRepositoryTest {
         assertThat(usersRepository.test(user1, "password")).isFalse();
     }
     
-    @Test(expected = UsersRepositoryException.class)
-    public void updateUserShouldThrowWhenAUserIsNoMoreInRepository() throws UsersRepositoryException {
+    @Test
+    void updateUserShouldThrowWhenAUserIsNoMoreInRepository() throws UsersRepositoryException {
         //Given
         usersRepository.addUser(user1, "password");
         User user = usersRepository.getUserByName(user1);
         usersRepository.removeUser(user1);
         //When
-        usersRepository.updateUser(user);
+        assertThatThrownBy(() -> usersRepository.updateUser(user))
+            .isInstanceOf(UsersRepositoryException.class);
     }
 
     @Test
-    public void virtualHostedUsersRepositoryShouldUseFullMailAddressAsUsername() throws Exception {
+    void virtualHostedUsersRepositoryShouldUseFullMailAddressAsUsername() throws Exception {
         usersRepository.setEnableVirtualHosting(true);
 
         // Some implementations do not support changing virtual hosting value
-        Assume.assumeTrue(usersRepository.supportVirtualHosting());
+        Assumptions.assumeTrue(usersRepository.supportVirtualHosting());
 
         assertThat(usersRepository.getUser(new MailAddress("local@domain"))).isEqualTo(Username.of("local@domain"));
     }
 
     @Test
-    public void nonVirtualHostedUsersRepositoryShouldUseLocalPartAsUsername() throws Exception {
+    void nonVirtualHostedUsersRepositoryShouldUseLocalPartAsUsername() throws Exception {
         usersRepository.setEnableVirtualHosting(false);
 
         // Some implementations do not support changing virtual hosting value
-        Assume.assumeFalse(usersRepository.supportVirtualHosting());
+        Assumptions.assumeFalse(usersRepository.supportVirtualHosting());
 
         assertThat(usersRepository.getUser(new MailAddress("local@domain"))).isEqualTo(Username.of("local"));
     }
 
-    protected void disposeUsersRepository() throws UsersRepositoryException {
-        LifecycleUtil.dispose(this.usersRepository);
-    }
-
     @Test
-    public void isAdministratorShouldReturnFalseWhenNotConfigured() throws Exception {
+    void isAdministratorShouldReturnFalseWhenNotConfigured() throws Exception {
         usersRepository.setAdministratorId(Optional.empty());
 
         assertThat(usersRepository.isAdministrator(admin)).isFalse();
     }
 
     @Test
-    public void isAdministratorShouldReturnTrueWhenConfiguredAndUserIsAdmin() throws Exception {
+    void isAdministratorShouldReturnTrueWhenConfiguredAndUserIsAdmin() throws Exception {
         usersRepository.setAdministratorId(Optional.of(admin));
 
         assertThat(usersRepository.isAdministrator(admin)).isTrue();
     }
 
     @Test
-    public void isAdministratorShouldReturnFalseWhenConfiguredAndUserIsNotAdmin() throws Exception {
+    void isAdministratorShouldReturnFalseWhenConfiguredAndUserIsNotAdmin() throws Exception {
         usersRepository.setAdministratorId(Optional.of(admin));
 
         assertThat(usersRepository.isAdministrator(user1)).isFalse();
     }
 
     @Test
-    public void getMailAddressForShouldBeIdentityWhenVirtualHosting() throws Exception {
+    void getMailAddressForShouldBeIdentityWhenVirtualHosting() throws Exception {
         usersRepository.setEnableVirtualHosting(true);
 
         // Some implementations do not support changing virtual hosting value
-        Assume.assumeTrue(usersRepository.supportVirtualHosting());
+        Assumptions.assumeTrue(usersRepository.supportVirtualHosting());
 
         String username = "user@domain";
         assertThat(usersRepository.getMailAddressFor(Username.of(username)))
@@ -499,11 +499,11 @@ public abstract class AbstractUsersRepositoryTest {
     }
 
     @Test
-    public void getMailAddressForShouldAppendDefaultDomainWhenNoVirtualHosting() throws Exception {
+    void getMailAddressForShouldAppendDefaultDomainWhenNoVirtualHosting() throws Exception {
         usersRepository.setEnableVirtualHosting(false);
 
         // Some implementations do not support changing virtual hosting value
-        Assume.assumeFalse(usersRepository.supportVirtualHosting());
+        Assumptions.assumeFalse(usersRepository.supportVirtualHosting());
 
         String username = "user";
         assertThat(usersRepository.getMailAddressFor(Username.of(username)))
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 3ac57c5..6cd6c4f 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
@@ -29,14 +29,13 @@ import org.apache.james.domainlist.memory.MemoryDomainList;
 import org.apache.james.user.api.UsersRepositoryException;
 import org.apache.james.user.lib.AbstractUsersRepository;
 import org.apache.james.user.lib.AbstractUsersRepositoryTest;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
-public class MemoryUsersRepositoryTest extends AbstractUsersRepositoryTest {
+class MemoryUsersRepositoryTest extends AbstractUsersRepositoryTest {
 
-    @Override
-    @Before
-    public void setUp() throws Exception {
+    @BeforeEach
+    void setup() throws Exception {
         super.setUp();
     }
     
@@ -46,7 +45,7 @@ public class MemoryUsersRepositoryTest extends AbstractUsersRepositoryTest {
     }
 
     @Test
-    public void assertValidShouldThrowWhenDomainPartAndNoVirtualHosting() {
+    void assertValidShouldThrowWhenDomainPartAndNoVirtualHosting() {
         MemoryUsersRepository memoryUsersRepository = MemoryUsersRepository.withoutVirtualHosting(domainList);
 
         assertThatThrownBy(() -> memoryUsersRepository.assertValid(Username.of("user@domain.tld")))
@@ -54,7 +53,7 @@ public class MemoryUsersRepositoryTest extends AbstractUsersRepositoryTest {
     }
 
     @Test
-    public void assertValidShouldThrowWhenNoDomainPartAndVirtualHosting() {
+    void assertValidShouldThrowWhenNoDomainPartAndVirtualHosting() {
         MemoryUsersRepository memoryUsersRepository = MemoryUsersRepository.withVirtualHosting(domainList);
 
         assertThatThrownBy(() -> memoryUsersRepository.assertValid(Username.of("user")))
@@ -62,7 +61,7 @@ public class MemoryUsersRepositoryTest extends AbstractUsersRepositoryTest {
     }
 
     @Test
-    public void assertValidShouldNotThrowWhenDomainPartAndVirtualHosting() throws Exception {
+    void assertValidShouldNotThrowWhenDomainPartAndVirtualHosting() throws Exception {
         MemoryDomainList domainList = new MemoryDomainList(new InMemoryDNSService()
             .registerMxRecord("localhost", "127.0.0.1")
             .registerMxRecord("127.0.0.1", "127.0.0.1"));
@@ -77,7 +76,7 @@ public class MemoryUsersRepositoryTest extends AbstractUsersRepositoryTest {
     }
 
     @Test
-    public void assertValidShouldNotThrowWhenDomainPartAndDomainNotFound() throws Exception {
+    void assertValidShouldNotThrowWhenDomainPartAndDomainNotFound() throws Exception {
         MemoryDomainList domainList = new MemoryDomainList(new InMemoryDNSService()
             .registerMxRecord("localhost", "127.0.0.1")
             .registerMxRecord("127.0.0.1", "127.0.0.1"));
@@ -91,7 +90,7 @@ public class MemoryUsersRepositoryTest extends AbstractUsersRepositoryTest {
     }
 
     @Test
-    public void assertValidShouldNotThrowWhenNoDomainPartAndNoVirtualHosting() {
+    void assertValidShouldNotThrowWhenNoDomainPartAndNoVirtualHosting() {
         MemoryUsersRepository memoryUsersRepository = MemoryUsersRepository.withoutVirtualHosting(domainList);
 
         assertThatCode(() -> memoryUsersRepository.assertValid(Username.of("user")))


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


[james-project] 03/16: JAMES-3035 Switch to apache/tika:1.22 image

Posted by rc...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit f9eb15bbb0e4ce4d5b0166733ca9efc40699cb2f
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Tue Feb 4 10:58:36 2020 +0700

    JAMES-3035 Switch to apache/tika:1.22 image
    
    See https://github.com/LogicalSpark/docker-tikaserver/issues/21#issuecomment-581365043
    for details
---
 JenkinsfileStressTests.groovy                                     | 2 +-
 README.adoc                                                       | 8 ++++----
 dockerfiles/run/docker-compose.yml                                | 2 +-
 .../src/main/java/org/apache/james/util/docker/Images.java        | 2 +-
 4 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/JenkinsfileStressTests.groovy b/JenkinsfileStressTests.groovy
index 8950aea..38d7d10 100644
--- a/JenkinsfileStressTests.groovy
+++ b/JenkinsfileStressTests.groovy
@@ -57,7 +57,7 @@ pipeline {
                             sh "cd /srv && sudo btrfs subvolume snapshot bench-snapshot bench-running-docker"
                             sh 'docker run -d --name=cassandra -p 9042:9042 -v /srv/bench-running-docker/cassandra:/var/lib/cassandra cassandra:3.11.3'
                             sh 'docker run -d --name=elasticsearch -p 9200:9200 -v /srv/bench-running-docker/elasticsearch:/usr/share/elasticsearch/data/elasticsearch  --env "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:6.3.2'
-                            sh 'docker run -d --name=tika linagora/docker-tikaserver:1.22'
+                            sh 'docker run -d --name=tika apache/tika:1.22'
                             sh 'docker run -d --name=swift -p 8080:8080 -v /srv/bench-running-docker/swift:/srv/1/node/sdb1 jeantil/openstack-keystone-swift:pike'
                             sh 'docker run -d --name=rabbitmq -p 15672:15672 -p 5672:5672 rabbitmq:3.8.1-management'
 
diff --git a/README.adoc b/README.adoc
index 3bb24da..3eb45f0 100644
--- a/README.adoc
+++ b/README.adoc
@@ -236,7 +236,7 @@ You need a running *ElasticSearch* in docker. To achieve this run:
 
 If you want to use all the JMAP search capabilities, you may also need to start Tika:
 
-    $ docker run -d --name=tika linagora/docker-tikaserver:1.22
+    $ docker run -d --name=tika apache/tika:1.22
 
 You can find more explanation on the need of Tika in this page http://james.apache.org/server/config-elasticsearch.html
 
@@ -287,7 +287,7 @@ You can handle attachment text extraction before indexing in ElasticSearch. This
 
 Run tika:
 
-    $ docker run --name tika linagora/docker-tikaserver:1.22
+    $ docker run --name tika apache/tika:1.22
 
 Add a link for the tika container in the above command line:
 
@@ -318,7 +318,7 @@ You need a running *ElasticSearch* in docker. To achieve this run:
 
 If you want to use all the JMAP search capabilities, you may also need to start Tika:
 
-    $ docker run -d --name=tika linagora/docker-tikaserver:1.22
+    $ docker run -d --name=tika apache/tika:1.22
 
 You can find more explanation on the need of Tika in this page http://james.apache.org/server/config-elasticsearch.html
 
@@ -350,7 +350,7 @@ You can handle attachment text extraction before indexing in ElasticSearch. This
 
 Run tika:
 
-    $ docker run --name tika linagora/docker-tikaserver:1.22
+    $ docker run --name tika apache/tika:1.22
 
 Add a link for the tika container in the above command line:
 
diff --git a/dockerfiles/run/docker-compose.yml b/dockerfiles/run/docker-compose.yml
index af11f01..a3aff78 100644
--- a/dockerfiles/run/docker-compose.yml
+++ b/dockerfiles/run/docker-compose.yml
@@ -34,7 +34,7 @@ services:
       - "9042:9042"
 
   tika:
-    image: linagora/docker-tikaserver:1.22
+    image: apache/tika:1.22
 
   rabbitmq:
     image: rabbitmq:3.8.1-management
diff --git a/server/testing/src/main/java/org/apache/james/util/docker/Images.java b/server/testing/src/main/java/org/apache/james/util/docker/Images.java
index 2464cbc..f880197 100644
--- a/server/testing/src/main/java/org/apache/james/util/docker/Images.java
+++ b/server/testing/src/main/java/org/apache/james/util/docker/Images.java
@@ -25,6 +25,6 @@ public interface Images {
     String ELASTICSEARCH_2 = "elasticsearch:2.4.6";
     String ELASTICSEARCH_6 = "docker.elastic.co/elasticsearch/elasticsearch:6.3.2";
     String NGINX = "nginx:1.15.1";
-    String TIKA = "linagora/docker-tikaserver:1.22";
+    String TIKA = "apache/tika:1.22";
     String SPAMASSASSIN = "dinkel/spamassassin:3.4.0";
 }


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


[james-project] 05/16: [REFACTORING] Split JMXMailboxProbe from MailboxProbeImpl

Posted by rc...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 077d74e9ef8ea732d78bdd8c115ad8cc00e22c09
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Tue Feb 4 09:11:26 2020 +0700

    [REFACTORING] Split JMXMailboxProbe from MailboxProbeImpl
---
 .../apache/james/mailbox/probe/MailboxProbe.java   | 10 ------
 .../main/java/org/apache/james/cli/ServerCmd.java  |  5 ++-
 .../james/cli/probe/impl/JmxMailboxProbe.java      | 37 +--------------------
 .../java/org/apache/james/cli/ServerCmdTest.java   |  6 ++--
 .../org/apache/james/modules/MailboxProbeImpl.java | 38 ----------------------
 5 files changed, 6 insertions(+), 90 deletions(-)

diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/probe/MailboxProbe.java b/mailbox/api/src/main/java/org/apache/james/mailbox/probe/MailboxProbe.java
index fb57c4e..1aefa88 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/probe/MailboxProbe.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/probe/MailboxProbe.java
@@ -40,18 +40,8 @@ public interface MailboxProbe {
 
     void deleteMailbox(String namespace, String user, String name);
 
-    void importEmlFileToMailbox(String namespace, String user, String name, String emlpath) throws Exception;
-
     ComposedMessageId appendMessage(String username, MailboxPath mailboxPath, InputStream message, Date internalDate,
             boolean isRecent, Flags flags) throws MailboxException;
 
-    void copyMailbox(String srcBean, String dstBean) throws Exception;
-
-    void deleteUserMailboxesNames(String user) throws Exception;
-
-    void reIndexMailbox(String namespace, String user, String name) throws Exception;
-
-    void reIndexAll() throws Exception;
-
     Collection<String> listSubscriptions(String user) throws Exception;
 }
\ No newline at end of file
diff --git a/server/container/cli/src/main/java/org/apache/james/cli/ServerCmd.java b/server/container/cli/src/main/java/org/apache/james/cli/ServerCmd.java
index 27a4aa4..d4617ca 100644
--- a/server/container/cli/src/main/java/org/apache/james/cli/ServerCmd.java
+++ b/server/container/cli/src/main/java/org/apache/james/cli/ServerCmd.java
@@ -51,7 +51,6 @@ import org.apache.james.core.quota.QuotaSizeLimit;
 import org.apache.james.core.quota.QuotaSizeUsage;
 import org.apache.james.mailbox.model.SerializableQuota;
 import org.apache.james.mailbox.model.SerializableQuotaLimitValue;
-import org.apache.james.mailbox.probe.MailboxProbe;
 import org.apache.james.mailbox.probe.QuotaProbe;
 import org.apache.james.probe.SieveProbe;
 import org.apache.james.rrt.lib.Mappings;
@@ -128,11 +127,11 @@ public class ServerCmd {
     }
 
     private final JmxDataProbe probe;
-    private final MailboxProbe mailboxProbe;
+    private final JmxMailboxProbe mailboxProbe;
     private final QuotaProbe quotaProbe;
     private final SieveProbe sieveProbe;
 
-    public ServerCmd(JmxDataProbe probe, MailboxProbe mailboxProbe, QuotaProbe quotaProbe, SieveProbe sieveProbe) {
+    public ServerCmd(JmxDataProbe probe, JmxMailboxProbe mailboxProbe, QuotaProbe quotaProbe, SieveProbe sieveProbe) {
         this.probe = probe;
         this.mailboxProbe = mailboxProbe;
         this.quotaProbe = quotaProbe;
diff --git a/server/container/cli/src/main/java/org/apache/james/cli/probe/impl/JmxMailboxProbe.java b/server/container/cli/src/main/java/org/apache/james/cli/probe/impl/JmxMailboxProbe.java
index 4edee8c..fe8df9c 100644
--- a/server/container/cli/src/main/java/org/apache/james/cli/probe/impl/JmxMailboxProbe.java
+++ b/server/container/cli/src/main/java/org/apache/james/cli/probe/impl/JmxMailboxProbe.java
@@ -20,25 +20,16 @@
 package org.apache.james.cli.probe.impl;
 
 import java.io.IOException;
-import java.io.InputStream;
 import java.util.Collection;
-import java.util.Date;
 
-import javax.mail.Flags;
 import javax.management.MalformedObjectNameException;
 
-import org.apache.commons.lang3.NotImplementedException;
 import org.apache.james.adapter.mailbox.MailboxCopierManagementMBean;
 import org.apache.james.adapter.mailbox.MailboxManagerManagementMBean;
 import org.apache.james.adapter.mailbox.ReIndexerManagementMBean;
-import org.apache.james.mailbox.exception.MailboxException;
-import org.apache.james.mailbox.model.ComposedMessageId;
 import org.apache.james.mailbox.model.MailboxId;
-import org.apache.james.mailbox.model.MailboxPath;
-import org.apache.james.mailbox.probe.MailboxProbe;
-
-public class JmxMailboxProbe implements MailboxProbe, JmxProbe {
 
+public class JmxMailboxProbe implements JmxProbe {
     private static final String MAILBOXCOPIER_OBJECT_NAME = "org.apache.james:type=component,name=mailboxcopier";
     private static final String MAILBOXMANAGER_OBJECT_NAME = "org.apache.james:type=component,name=mailboxmanagerbean";
     private static final String REINDEXER_OBJECT_NAME = "org.apache.james:type=component,name=reindexerbean";
@@ -59,61 +50,35 @@ public class JmxMailboxProbe implements MailboxProbe, JmxProbe {
         return this;
     }
 
-
-    @Override
     public void copyMailbox(String srcBean, String dstBean) throws Exception {
         mailboxCopierManagement.copy(srcBean, dstBean);
     }
 
-    @Override
     public void deleteUserMailboxesNames(String user) throws Exception {
         mailboxManagerManagement.deleteMailboxes(user);
     }
 
-    @Override
     public MailboxId createMailbox(String namespace, String user, String name) {
         return mailboxManagerManagement.createMailbox(namespace, user, name);
     }
 
-    @Override
     public Collection<String> listUserMailboxes(String user) {
         return mailboxManagerManagement.listMailboxes(user);
     }
 
-    @Override
     public void deleteMailbox(String namespace, String user, String name) {
         mailboxManagerManagement.deleteMailbox(namespace, user, name);
     }
 
-    @Override
     public void importEmlFileToMailbox(String namespace, String user, String name, String emlpath) {
         mailboxManagerManagement.importEmlFileToMailbox(namespace, user, name, emlpath);
     }
 
-    @Override
     public void reIndexMailbox(String namespace, String user, String name) throws Exception {
         reIndexerManagement.reIndex(namespace, user, name);
     }
 
-    @Override
     public void reIndexAll() throws Exception {
         reIndexerManagement.reIndex();
     }
-
-    @Override
-    public MailboxId getMailboxId(String namespace, String user, String name) {
-        throw new NotImplementedException("Not implemented");
-    }
-
-    @Override
-    public ComposedMessageId appendMessage(String username, MailboxPath mailboxPath, InputStream message,
-            Date internalDate, boolean isRecent, Flags flags) throws MailboxException {
-        throw new NotImplementedException("Not implemented");
-    }
-
-
-    @Override
-    public Collection<String> listSubscriptions(String user) throws Exception {
-        throw new NotImplementedException("Not implemented");
-    }
 }
\ No newline at end of file
diff --git a/server/container/cli/src/test/java/org/apache/james/cli/ServerCmdTest.java b/server/container/cli/src/test/java/org/apache/james/cli/ServerCmdTest.java
index 4dff457..46b3195 100644
--- a/server/container/cli/src/test/java/org/apache/james/cli/ServerCmdTest.java
+++ b/server/container/cli/src/test/java/org/apache/james/cli/ServerCmdTest.java
@@ -34,6 +34,7 @@ import org.apache.james.cli.exceptions.InvalidArgumentNumberException;
 import org.apache.james.cli.exceptions.MissingCommandException;
 import org.apache.james.cli.exceptions.UnrecognizedCommandException;
 import org.apache.james.cli.probe.impl.JmxDataProbe;
+import org.apache.james.cli.probe.impl.JmxMailboxProbe;
 import org.apache.james.cli.type.CmdType;
 import org.apache.james.core.quota.QuotaCountLimit;
 import org.apache.james.core.quota.QuotaCountUsage;
@@ -42,7 +43,6 @@ import org.apache.james.core.quota.QuotaSizeUsage;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.SerializableQuota;
 import org.apache.james.mailbox.model.SerializableQuotaLimitValue;
-import org.apache.james.mailbox.probe.MailboxProbe;
 import org.apache.james.mailbox.probe.QuotaProbe;
 import org.apache.james.probe.SieveProbe;
 import org.apache.james.rrt.lib.MappingsImpl;
@@ -56,7 +56,7 @@ public class ServerCmdTest {
     private static final String ADDITIONAL_ARGUMENT = "additionalArgument";
 
     private JmxDataProbe dataProbe;
-    private MailboxProbe mailboxProbe;
+    private JmxMailboxProbe mailboxProbe;
     private QuotaProbe quotaProbe;
     private SieveProbe sieveProbe;
 
@@ -65,7 +65,7 @@ public class ServerCmdTest {
     @Before
     public void setup() {
         dataProbe = mock(JmxDataProbe.class);
-        mailboxProbe = mock(MailboxProbe.class);
+        mailboxProbe = mock(JmxMailboxProbe.class);
         quotaProbe = mock(QuotaProbe.class);
         sieveProbe = mock(SieveProbe.class);
         testee = new ServerCmd(dataProbe, mailboxProbe, quotaProbe, sieveProbe);
diff --git a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/MailboxProbeImpl.java b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/MailboxProbeImpl.java
index 18b3458..d8cb4e8 100644
--- a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/MailboxProbeImpl.java
+++ b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/MailboxProbeImpl.java
@@ -19,7 +19,6 @@
 
 package org.apache.james.modules;
 
-import java.io.FileInputStream;
 import java.io.InputStream;
 import java.util.Collection;
 import java.util.Date;
@@ -29,7 +28,6 @@ import java.util.stream.Collectors;
 import javax.inject.Inject;
 import javax.mail.Flags;
 
-import org.apache.commons.lang3.NotImplementedException;
 import org.apache.james.core.Username;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession;
@@ -144,22 +142,6 @@ public class MailboxProbeImpl implements GuiceProbe, MailboxProbe {
     }
 
     @Override
-    public void importEmlFileToMailbox(String namespace, String user, String name, String emlPath) throws Exception {
-        Username username = Username.of(user);
-        MailboxSession mailboxSession = mailboxManager.createSystemSession(username);
-        mailboxManager.startProcessingRequest(mailboxSession);
-
-        MessageManager messageManager = mailboxManager.getMailbox(new MailboxPath(namespace, username, name), mailboxSession);
-        InputStream emlFileAsStream = new FileInputStream(emlPath);
-        messageManager.appendMessage(MessageManager.AppendCommand.builder()
-            .recent()
-            .build(emlFileAsStream), mailboxSession);
-
-        mailboxManager.endProcessingRequest(mailboxSession);
-        mailboxSession.close();
-    }
-
-    @Override
     public ComposedMessageId appendMessage(String username, MailboxPath mailboxPath, InputStream message, Date internalDate, boolean isRecent, Flags flags)
             throws MailboxException {
 
@@ -177,26 +159,6 @@ public class MailboxProbeImpl implements GuiceProbe, MailboxProbe {
     }
 
     @Override
-    public void copyMailbox(String srcBean, String dstBean) throws Exception {
-        throw new NotImplementedException("not implemented");
-    }
-
-    @Override
-    public void deleteUserMailboxesNames(String user) throws Exception {
-        throw new NotImplementedException("not implemented");
-    }
-
-    @Override
-    public void reIndexMailbox(String namespace, String user, String name) throws Exception {
-        throw new NotImplementedException("not implemented");
-    }
-
-    @Override
-    public void reIndexAll() throws Exception {
-        throw new NotImplementedException("not implemented");
-    }
-
-    @Override
     public Collection<String> listSubscriptions(String user) throws Exception {
         MailboxSession mailboxSession = mailboxManager.createSystemSession(Username.of(user));
         return subscriptionManager.subscriptions(mailboxSession);


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


[james-project] 02/16: JAMES-2979 Fix ADR FileMailQueue deprecation number to 17

Posted by rc...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 385c91285c5a3d96f81c81018ac182c67f1601bb
Author: Rene Cordier <rc...@linagora.com>
AuthorDate: Tue Feb 4 11:47:38 2020 +0700

    JAMES-2979 Fix ADR FileMailQueue deprecation number to 17
---
 src/adr/0017-file-mail-queue-deprecation.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/adr/0017-file-mail-queue-deprecation.md b/src/adr/0017-file-mail-queue-deprecation.md
index e51e12f..aba7396 100644
--- a/src/adr/0017-file-mail-queue-deprecation.md
+++ b/src/adr/0017-file-mail-queue-deprecation.md
@@ -1,4 +1,4 @@
-# 15. FileMailQueue deprecation
+# 17. FileMailQueue deprecation
 
 Date: 2019-12-04
 


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


[james-project] 10/16: JAMES-3031 Fix ENV variable in Dockerfiles

Posted by rc...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 5568c87a679a5f8aebce4730b87e4b6a86389cf7
Author: Antoine DUPRAT <ad...@linagora.com>
AuthorDate: Thu Jan 30 15:42:03 2020 +0100

    JAMES-3031 Fix ENV variable in Dockerfiles
---
 dockerfiles/run/guice/cassandra-ldap/Dockerfile          | 2 +-
 dockerfiles/run/guice/cassandra-rabbitmq-ldap/Dockerfile | 2 +-
 dockerfiles/run/guice/cassandra-rabbitmq/Dockerfile      | 2 +-
 dockerfiles/run/guice/cassandra/Dockerfile               | 2 +-
 dockerfiles/run/guice/jpa-smtp/Dockerfile                | 2 +-
 dockerfiles/run/guice/jpa/Dockerfile                     | 4 ++--
 dockerfiles/run/guice/memory/Dockerfile                  | 2 +-
 7 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/dockerfiles/run/guice/cassandra-ldap/Dockerfile b/dockerfiles/run/guice/cassandra-ldap/Dockerfile
index 499f4fd..4957918 100644
--- a/dockerfiles/run/guice/cassandra-ldap/Dockerfile
+++ b/dockerfiles/run/guice/cassandra-ldap/Dockerfile
@@ -36,7 +36,7 @@ VOLUME /root/conf
 VOLUME /root/glowroot/plugins
 VOLUME /root/glowroot/data
 
-ENV PATH "$PATH:/root/glowroot/lib" \
+ENV PATH="$PATH:/root/glowroot/lib" \
     JVM_OPTIONS="" \
     GLOWROOT_ACTIVATED="false"
 
diff --git a/dockerfiles/run/guice/cassandra-rabbitmq-ldap/Dockerfile b/dockerfiles/run/guice/cassandra-rabbitmq-ldap/Dockerfile
index 64e477a..1449f4f 100644
--- a/dockerfiles/run/guice/cassandra-rabbitmq-ldap/Dockerfile
+++ b/dockerfiles/run/guice/cassandra-rabbitmq-ldap/Dockerfile
@@ -36,7 +36,7 @@ VOLUME /root/conf
 VOLUME /root/glowroot/plugins
 VOLUME /root/glowroot/data
 
-ENV PATH "$PATH:/root/glowroot/lib" \
+ENV PATH="$PATH:/root/glowroot/lib" \
     JVM_OPTIONS="" \
     GLOWROOT_ACTIVATED="false"
 
diff --git a/dockerfiles/run/guice/cassandra-rabbitmq/Dockerfile b/dockerfiles/run/guice/cassandra-rabbitmq/Dockerfile
index 79f1a10..06f5251 100644
--- a/dockerfiles/run/guice/cassandra-rabbitmq/Dockerfile
+++ b/dockerfiles/run/guice/cassandra-rabbitmq/Dockerfile
@@ -36,7 +36,7 @@ VOLUME /root/conf
 VOLUME /root/glowroot/plugins
 VOLUME /root/glowroot/data
 
-ENV PATH "$PATH:/root/glowroot/lib" \
+ENV PATH="$PATH:/root/glowroot/lib" \
     JVM_OPTIONS="" \
     GLOWROOT_ACTIVATED="false"
 
diff --git a/dockerfiles/run/guice/cassandra/Dockerfile b/dockerfiles/run/guice/cassandra/Dockerfile
index c4fddf8..65a19ef 100644
--- a/dockerfiles/run/guice/cassandra/Dockerfile
+++ b/dockerfiles/run/guice/cassandra/Dockerfile
@@ -36,7 +36,7 @@ VOLUME /root/conf
 VOLUME /root/glowroot/plugins
 VOLUME /root/glowroot/data
 
-ENV PATH "$PATH:/root/glowroot/lib" \
+ENV PATH="$PATH:/root/glowroot/lib" \
     JVM_OPTIONS="" \
     GLOWROOT_ACTIVATED="false"
 
diff --git a/dockerfiles/run/guice/jpa-smtp/Dockerfile b/dockerfiles/run/guice/jpa-smtp/Dockerfile
index f0ba5d3..17217ff 100644
--- a/dockerfiles/run/guice/jpa-smtp/Dockerfile
+++ b/dockerfiles/run/guice/jpa-smtp/Dockerfile
@@ -34,7 +34,7 @@ VOLUME /root/conf
 VOLUME /root/glowroot/plugins
 VOLUME /root/glowroot/data
 
-ENV PATH "$PATH:/root/glowroot/lib" \
+ENV PATH="$PATH:/root/glowroot/lib" \
     JVM_OPTIONS="" \
     GLOWROOT_ACTIVATED="false"
 
diff --git a/dockerfiles/run/guice/jpa/Dockerfile b/dockerfiles/run/guice/jpa/Dockerfile
index e83fbf7..feb452b 100644
--- a/dockerfiles/run/guice/jpa/Dockerfile
+++ b/dockerfiles/run/guice/jpa/Dockerfile
@@ -36,8 +36,8 @@ VOLUME /root/conf
 VOLUME /root/glowroot/plugins
 VOLUME /root/glowroot/data
 
-ENV PATH "$PATH:/root/glowroot/lib" \
+ENV PATH="$PATH:/root/glowroot/lib" \
     JVM_OPTIONS="" \
     GLOWROOT_ACTIVATED="false"
 
-ENTRYPOINT ./run_james.sh
\ No newline at end of file
+ENTRYPOINT ./run_james.sh
diff --git a/dockerfiles/run/guice/memory/Dockerfile b/dockerfiles/run/guice/memory/Dockerfile
index f0ba1e2..7a18766 100644
--- a/dockerfiles/run/guice/memory/Dockerfile
+++ b/dockerfiles/run/guice/memory/Dockerfile
@@ -36,7 +36,7 @@ VOLUME /root/conf
 VOLUME /root/glowroot/plugins
 VOLUME /root/glowroot/data
 
-ENV PATH "$PATH:/root/glowroot/lib" \
+ENV PATH="$PATH:/root/glowroot/lib" \
     JVM_OPTIONS="" \
     GLOWROOT_ACTIVATED="false"
 


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


[james-project] 07/16: [REFACTORING] QuotaProbe no longer need to be serializable

Posted by rc...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit d2359f45fbf842574e336a8e37beb6cbe7dc9056
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Tue Feb 4 09:57:29 2020 +0700

    [REFACTORING] QuotaProbe no longer need to be serializable
---
 .../org/apache/james/mailbox/probe/QuotaProbe.java | 25 +++++-----
 .../james/cli/QuotaCommandsIntegrationTest.java    | 10 ++--
 .../java/org/apache/james/JPAJamesServerTest.java  |  3 +-
 .../org/apache/james/modules/QuotaProbesImpl.java  | 57 +++++++++-------------
 .../integration/GetMailboxesMethodTest.java        | 10 ++--
 .../methods/integration/QuotaMailingTest.java      |  5 +-
 .../methods/integration/SendMDNMethodTest.java     |  4 +-
 .../methods/integration/SetMessagesMethodTest.java |  8 ++-
 8 files changed, 53 insertions(+), 69 deletions(-)

diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/probe/QuotaProbe.java b/mailbox/api/src/main/java/org/apache/james/mailbox/probe/QuotaProbe.java
index 1a223a7..617fa07 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/probe/QuotaProbe.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/probe/QuotaProbe.java
@@ -19,36 +19,37 @@
 
 package org.apache.james.mailbox.probe;
 
+import java.util.Optional;
+
 import org.apache.james.core.quota.QuotaCountLimit;
 import org.apache.james.core.quota.QuotaCountUsage;
 import org.apache.james.core.quota.QuotaSizeLimit;
 import org.apache.james.core.quota.QuotaSizeUsage;
 import org.apache.james.mailbox.exception.MailboxException;
-import org.apache.james.mailbox.model.SerializableQuota;
-import org.apache.james.mailbox.model.SerializableQuotaLimitValue;
+import org.apache.james.mailbox.model.Quota;
 
 public interface QuotaProbe {
 
     String getQuotaRoot(String namespace, String user, String name) throws MailboxException;
 
-    SerializableQuota<QuotaCountLimit, QuotaCountUsage> getMessageCountQuota(String quotaRoot) throws MailboxException;
+    Quota<QuotaCountLimit, QuotaCountUsage> getMessageCountQuota(String quotaRoot) throws MailboxException;
 
-    SerializableQuota<QuotaSizeLimit, QuotaSizeUsage> getStorageQuota(String quotaRoot) throws MailboxException;
+    Quota<QuotaSizeLimit, QuotaSizeUsage> getStorageQuota(String quotaRoot) throws MailboxException;
 
-    SerializableQuotaLimitValue<QuotaCountLimit> getMaxMessageCount(String quotaRoot) throws MailboxException;
+    Optional<QuotaCountLimit> getMaxMessageCount(String quotaRoot) throws MailboxException;
 
-    SerializableQuotaLimitValue<QuotaSizeLimit> getMaxStorage(String quotaRoot) throws MailboxException;
+    Optional<QuotaSizeLimit> getMaxStorage(String quotaRoot) throws MailboxException;
 
-    SerializableQuotaLimitValue<QuotaCountLimit> getGlobalMaxMessageCount() throws MailboxException;
+    Optional<QuotaCountLimit> getGlobalMaxMessageCount() throws MailboxException;
 
-    SerializableQuotaLimitValue<QuotaSizeLimit> getGlobalMaxStorage() throws MailboxException;
+    Optional<QuotaSizeLimit> getGlobalMaxStorage() throws MailboxException;
 
-    void setMaxMessageCount(String quotaRoot, SerializableQuotaLimitValue<QuotaCountLimit> maxMessageCount) throws MailboxException;
+    void setMaxMessageCount(String quotaRoot, QuotaCountLimit maxMessageCount) throws MailboxException;
 
-    void setMaxStorage(String quotaRoot, SerializableQuotaLimitValue<QuotaSizeLimit> maxSize) throws MailboxException;
+    void setMaxStorage(String quotaRoot, QuotaSizeLimit maxSize) throws MailboxException;
 
-    void setGlobalMaxMessageCount(SerializableQuotaLimitValue<QuotaCountLimit> maxGlobalMessageCount) throws MailboxException;
+    void setGlobalMaxMessageCount(QuotaCountLimit maxGlobalMessageCount) throws MailboxException;
 
-    void setGlobalMaxStorage(SerializableQuotaLimitValue<QuotaSizeLimit> maxGlobalSize) throws MailboxException;
+    void setGlobalMaxStorage(QuotaSizeLimit maxGlobalSize) throws MailboxException;
 
 }
\ No newline at end of file
diff --git a/server/container/cli-integration/src/test/java/org/apache/james/cli/QuotaCommandsIntegrationTest.java b/server/container/cli-integration/src/test/java/org/apache/james/cli/QuotaCommandsIntegrationTest.java
index 4898871..07ca0ee 100644
--- a/server/container/cli-integration/src/test/java/org/apache/james/cli/QuotaCommandsIntegrationTest.java
+++ b/server/container/cli-integration/src/test/java/org/apache/james/cli/QuotaCommandsIntegrationTest.java
@@ -27,6 +27,8 @@ import java.util.Optional;
 import org.apache.james.GuiceJamesServer;
 import org.apache.james.MemoryJmapTestRule;
 import org.apache.james.cli.util.OutputCapture;
+import org.apache.james.core.quota.QuotaCountLimit;
+import org.apache.james.core.quota.QuotaSizeLimit;
 import org.apache.james.mailbox.model.QuotaRoot;
 import org.apache.james.mailbox.store.search.ListeningMessageSearchIndex;
 import org.apache.james.modules.QuotaProbesImpl;
@@ -64,7 +66,7 @@ public class QuotaCommandsIntegrationTest {
     public void setGlobalMaxStorageShouldWork() throws Exception {
         ServerCmd.doMain(new String[] {"-h", "127.0.0.1", "-p", "9999", "setglobalmaxstoragequota", "36"});
 
-        assertThat(quotaProbe.getGlobalMaxStorage().encodeAsLong()).isEqualTo(36);
+        assertThat(quotaProbe.getGlobalMaxStorage().map(QuotaSizeLimit::asLong)).contains(36L);
     }
 
     @Test
@@ -82,7 +84,7 @@ public class QuotaCommandsIntegrationTest {
     public void setGlobalMaxMessageCountShouldWork() throws Exception {
         ServerCmd.doMain(new String[] {"-h", "127.0.0.1", "-p", "9999", "setglobalmaxmessagecountquota", "36"});
 
-        assertThat(quotaProbe.getGlobalMaxMessageCount().encodeAsLong()).isEqualTo(36);
+        assertThat(quotaProbe.getGlobalMaxMessageCount().map(QuotaCountLimit::asLong)).contains(36L);
     }
 
     @Test
@@ -100,7 +102,7 @@ public class QuotaCommandsIntegrationTest {
     public void setMaxStorageShouldWork() throws Exception {
         ServerCmd.doMain(new String[] {"-h", "127.0.0.1", "-p", "9999", "setmaxstoragequota", QUOTA_ROOT.getValue(), "36"});
 
-        assertThat(quotaProbe.getMaxStorage(QUOTA_ROOT.getValue()).encodeAsLong()).isEqualTo(36);
+        assertThat(quotaProbe.getMaxStorage(QUOTA_ROOT.getValue()).map(QuotaSizeLimit::asLong)).contains(36L);
     }
 
     @Test
@@ -118,7 +120,7 @@ public class QuotaCommandsIntegrationTest {
     public void setMaxMessageCountShouldWork() throws Exception {
         ServerCmd.doMain(new String[] {"-h", "127.0.0.1", "-p", "9999", "setmaxmessagecountquota", QUOTA_ROOT.getValue(), "36"});
 
-        assertThat(quotaProbe.getMaxMessageCount(QUOTA_ROOT.getValue()).encodeAsLong()).isEqualTo(36);
+        assertThat(quotaProbe.getMaxMessageCount(QUOTA_ROOT.getValue()).map(QuotaCountLimit::asLong)).contains(36L);
     }
 
     @Test
diff --git a/server/container/guice/jpa-guice/src/test/java/org/apache/james/JPAJamesServerTest.java b/server/container/guice/jpa-guice/src/test/java/org/apache/james/JPAJamesServerTest.java
index 08edc58..26dd344 100644
--- a/server/container/guice/jpa-guice/src/test/java/org/apache/james/JPAJamesServerTest.java
+++ b/server/container/guice/jpa-guice/src/test/java/org/apache/james/JPAJamesServerTest.java
@@ -22,7 +22,6 @@ package org.apache.james;
 import static org.assertj.core.api.Assertions.assertThat;
 
 import org.apache.james.core.quota.QuotaSizeLimit;
-import org.apache.james.mailbox.model.SerializableQuotaLimitValue;
 import org.apache.james.modules.QuotaProbesImpl;
 import org.apache.james.modules.protocols.ImapGuiceProbe;
 import org.apache.james.modules.protocols.SmtpGuiceProbe;
@@ -70,7 +69,7 @@ class JPAJamesServerTest implements JamesServerContract {
             .fluent()
             .addDomain(DOMAIN)
             .addUser(USER, PASSWORD);
-        jamesServer.getProbe(QuotaProbesImpl.class).setGlobalMaxStorage(new SerializableQuotaLimitValue<>(QuotaSizeLimit.size(50 * 1024)));
+        jamesServer.getProbe(QuotaProbesImpl.class).setGlobalMaxStorage(QuotaSizeLimit.size(50 * 1024));
 
         // ~ 12 KB email
         int imapPort = jamesServer.getProbe(ImapGuiceProbe.class).getImapPort();
diff --git a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/QuotaProbesImpl.java b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/QuotaProbesImpl.java
index 6b163e6..7adf9f2 100644
--- a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/QuotaProbesImpl.java
+++ b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/QuotaProbesImpl.java
@@ -19,6 +19,8 @@
 
 package org.apache.james.modules;
 
+import java.util.Optional;
+
 import javax.inject.Inject;
 
 import org.apache.james.core.Username;
@@ -28,16 +30,13 @@ import org.apache.james.core.quota.QuotaSizeLimit;
 import org.apache.james.core.quota.QuotaSizeUsage;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.MailboxPath;
-import org.apache.james.mailbox.model.SerializableQuota;
-import org.apache.james.mailbox.model.SerializableQuotaLimitValue;
+import org.apache.james.mailbox.model.Quota;
 import org.apache.james.mailbox.probe.QuotaProbe;
 import org.apache.james.mailbox.quota.MaxQuotaManager;
 import org.apache.james.mailbox.quota.QuotaManager;
 import org.apache.james.mailbox.quota.QuotaRootResolver;
 import org.apache.james.utils.GuiceProbe;
 
-import com.github.fge.lambdas.Throwing;
-
 public class QuotaProbesImpl implements QuotaProbe, GuiceProbe {
 
     private final MaxQuotaManager maxQuotaManager;
@@ -57,62 +56,52 @@ public class QuotaProbesImpl implements QuotaProbe, GuiceProbe {
     }
 
     @Override
-    public SerializableQuota<QuotaCountLimit, QuotaCountUsage> getMessageCountQuota(String quotaRoot) throws MailboxException {
-        return SerializableQuota.newInstance(quotaManager.getMessageQuota(quotaRootResolver.fromString(quotaRoot)));
+    public Quota<QuotaCountLimit, QuotaCountUsage> getMessageCountQuota(String quotaRoot) throws MailboxException {
+        return quotaManager.getMessageQuota(quotaRootResolver.fromString(quotaRoot));
     }
 
     @Override
-    public SerializableQuota<QuotaSizeLimit, QuotaSizeUsage> getStorageQuota(String quotaRoot) throws MailboxException {
-        return SerializableQuota.newInstance(quotaManager.getStorageQuota(quotaRootResolver.fromString(quotaRoot)));
+    public Quota<QuotaSizeLimit, QuotaSizeUsage> getStorageQuota(String quotaRoot) throws MailboxException {
+        return quotaManager.getStorageQuota(quotaRootResolver.fromString(quotaRoot));
     }
 
     @Override
-    public SerializableQuotaLimitValue<QuotaCountLimit> getMaxMessageCount(String quotaRoot) throws MailboxException {
-        return SerializableQuotaLimitValue.valueOf(maxQuotaManager.getMaxMessage(quotaRootResolver.fromString(quotaRoot)));
+    public Optional<QuotaCountLimit> getMaxMessageCount(String quotaRoot) throws MailboxException {
+        return maxQuotaManager.getMaxMessage(quotaRootResolver.fromString(quotaRoot));
     }
 
     @Override
-    public SerializableQuotaLimitValue<QuotaSizeLimit> getMaxStorage(String quotaRoot) throws MailboxException {
-        return SerializableQuotaLimitValue.valueOf(maxQuotaManager.getMaxStorage(quotaRootResolver.fromString(quotaRoot)));
+    public Optional<QuotaSizeLimit> getMaxStorage(String quotaRoot) throws MailboxException {
+        return maxQuotaManager.getMaxStorage(quotaRootResolver.fromString(quotaRoot));
     }
 
     @Override
-    public SerializableQuotaLimitValue<QuotaCountLimit> getGlobalMaxMessageCount() throws MailboxException {
-        return SerializableQuotaLimitValue.valueOf(maxQuotaManager.getGlobalMaxMessage());
+    public Optional<QuotaCountLimit> getGlobalMaxMessageCount() throws MailboxException {
+        return maxQuotaManager.getGlobalMaxMessage();
     }
 
     @Override
-    public SerializableQuotaLimitValue<QuotaSizeLimit> getGlobalMaxStorage() throws MailboxException {
-        return SerializableQuotaLimitValue.valueOf(maxQuotaManager.getGlobalMaxStorage());
+    public Optional<QuotaSizeLimit> getGlobalMaxStorage() throws MailboxException {
+        return maxQuotaManager.getGlobalMaxStorage();
     }
 
     @Override
-    public void setMaxMessageCount(String quotaRoot, SerializableQuotaLimitValue<QuotaCountLimit> maxMessageCount) throws MailboxException {
-        maxMessageCount.toValue(QuotaCountLimit::count, QuotaCountLimit.unlimited())
-            .ifPresent(
-                Throwing.consumer(
-                    (QuotaCountLimit value) -> maxQuotaManager.setMaxMessage(quotaRootResolver.fromString(quotaRoot), value))
-                    .sneakyThrow());
+    public void setMaxMessageCount(String quotaRoot, QuotaCountLimit maxMessageCount) throws MailboxException {
+        maxQuotaManager.setMaxMessage(quotaRootResolver.fromString(quotaRoot), maxMessageCount);
     }
 
     @Override
-    public void setMaxStorage(String quotaRoot, SerializableQuotaLimitValue<QuotaSizeLimit> maxSize) throws MailboxException {
-        maxSize.toValue(QuotaSizeLimit::size, QuotaSizeLimit.unlimited())
-            .ifPresent(
-                Throwing.consumer(
-                    (QuotaSizeLimit value) -> maxQuotaManager.setMaxStorage(quotaRootResolver.fromString(quotaRoot), value))
-                    .sneakyThrow());
+    public void setMaxStorage(String quotaRoot, QuotaSizeLimit maxSize) throws MailboxException {
+        maxQuotaManager.setMaxStorage(quotaRootResolver.fromString(quotaRoot), maxSize);
     }
 
     @Override
-    public void setGlobalMaxMessageCount(SerializableQuotaLimitValue<QuotaCountLimit> maxGlobalMessageCount) throws MailboxException {
-        maxGlobalMessageCount.toValue(QuotaCountLimit::count, QuotaCountLimit.unlimited())
-            .ifPresent(Throwing.consumer(maxQuotaManager::setGlobalMaxMessage).sneakyThrow());
+    public void setGlobalMaxMessageCount(QuotaCountLimit maxGlobalMessageCount) throws MailboxException {
+        maxQuotaManager.setGlobalMaxMessage(maxGlobalMessageCount);
     }
 
     @Override
-    public void setGlobalMaxStorage(SerializableQuotaLimitValue<QuotaSizeLimit> maxGlobalSize) throws MailboxException {
-        maxGlobalSize.toValue(QuotaSizeLimit::size, QuotaSizeLimit.unlimited())
-            .ifPresent(Throwing.consumer(maxQuotaManager::setGlobalMaxStorage).sneakyThrow());
+    public void setGlobalMaxStorage(QuotaSizeLimit maxGlobalSize) throws MailboxException {
+        maxQuotaManager.setGlobalMaxStorage(maxGlobalSize);
     }
 }
diff --git a/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/GetMailboxesMethodTest.java b/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/GetMailboxesMethodTest.java
index 3465065..bedb01e 100644
--- a/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/GetMailboxesMethodTest.java
+++ b/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/GetMailboxesMethodTest.java
@@ -52,7 +52,6 @@ import java.nio.charset.StandardCharsets;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
-import java.util.Optional;
 
 import org.apache.james.GuiceJamesServer;
 import org.apache.james.core.quota.QuotaCountLimit;
@@ -68,7 +67,6 @@ import org.apache.james.mailbox.model.MailboxACL.Right;
 import org.apache.james.mailbox.model.MailboxConstants;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MailboxPath;
-import org.apache.james.mailbox.model.SerializableQuotaLimitValue;
 import org.apache.james.mailbox.probe.ACLProbe;
 import org.apache.james.mailbox.probe.QuotaProbe;
 import org.apache.james.mime4j.dom.Message;
@@ -788,7 +786,7 @@ public abstract class GetMailboxesMethodTest {
     @Category(BasicFeature.class)
     @Test
     public void getMailboxesShouldReturnMaxStorageQuotasForInboxWhenSet() throws Exception {
-        quotaProbe.setGlobalMaxStorage(SerializableQuotaLimitValue.valueOf(Optional.of(QuotaSizeLimit.size(42))));
+        quotaProbe.setGlobalMaxStorage(QuotaSizeLimit.size(42));
         String mailboxId = mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, ALICE.asString(), DefaultMailboxes.INBOX).serialize();
 
         given()
@@ -805,7 +803,7 @@ public abstract class GetMailboxesMethodTest {
 
     @Test
     public void getMailboxesShouldReturnMaxMessageQuotasForInboxWhenSet() throws Exception {
-        quotaProbe.setGlobalMaxMessageCount(SerializableQuotaLimitValue.valueOf(Optional.of(QuotaCountLimit.count(43))));
+        quotaProbe.setGlobalMaxMessageCount(QuotaCountLimit.count(43));
         String mailboxId = mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, ALICE.asString(), DefaultMailboxes.INBOX).serialize();
 
         given()
@@ -829,8 +827,8 @@ public abstract class GetMailboxesMethodTest {
         MailboxPath bobMailboxPath = MailboxPath.forUser(BOB, sharedMailboxName);
         aclProbe.replaceRights(bobMailboxPath, ALICE.asString(), new Rfc4314Rights(Right.Lookup, Right.Read));
 
-        quotaProbe.setMaxMessageCount("#private&alice@domain.tld", SerializableQuotaLimitValue.valueOf(Optional.of(QuotaCountLimit.count(42))));
-        quotaProbe.setMaxMessageCount("#private&bob@domain.tld", SerializableQuotaLimitValue.valueOf(Optional.of(QuotaCountLimit.count(43))));
+        quotaProbe.setMaxMessageCount("#private&alice@domain.tld", QuotaCountLimit.count(42));
+        quotaProbe.setMaxMessageCount("#private&bob@domain.tld", QuotaCountLimit.count(43));
 
         given()
             .header("Authorization", accessToken.asString())
diff --git a/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/QuotaMailingTest.java b/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/QuotaMailingTest.java
index 1b9289d..b990feb 100644
--- a/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/QuotaMailingTest.java
+++ b/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/QuotaMailingTest.java
@@ -44,7 +44,6 @@ import org.apache.james.jmap.draft.JmapGuiceProbe;
 import org.apache.james.junit.categories.BasicFeature;
 import org.apache.james.mailbox.DefaultMailboxes;
 import org.apache.james.mailbox.model.MailboxConstants;
-import org.apache.james.mailbox.model.SerializableQuotaLimitValue;
 import org.apache.james.mailbox.probe.MailboxProbe;
 import org.apache.james.modules.MailboxProbeImpl;
 import org.apache.james.modules.QuotaProbesImpl;
@@ -105,7 +104,7 @@ public abstract class QuotaMailingTest {
     public void shouldSendANoticeWhenThresholdExceeded() throws Exception {
         jmapServer.getProbe(QuotaProbesImpl.class)
             .setMaxStorage(MailboxConstants.USER_NAMESPACE + "&" + HOMER.asString(),
-                new SerializableQuotaLimitValue<>(QuotaSizeLimit.size(100 * 1000)));
+                QuotaSizeLimit.size(100 * 1000));
 
         bartSendMessageToHomer();
         // Homer receives a mail big enough to trigger a configured threshold
@@ -131,7 +130,7 @@ public abstract class QuotaMailingTest {
     public void configurationShouldBeWellLoaded() throws Exception {
         jmapServer.getProbe(QuotaProbesImpl.class)
             .setMaxStorage(MailboxConstants.USER_NAMESPACE + "&" + HOMER.asString(),
-                new SerializableQuotaLimitValue<>(QuotaSizeLimit.size(100 * 1000)));
+                QuotaSizeLimit.size(100 * 1000));
 
         bartSendMessageToHomer();
         // Homer receives a mail big enough to trigger a 10% configured threshold
diff --git a/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/SendMDNMethodTest.java b/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/SendMDNMethodTest.java
index 5321469..2b2b855 100644
--- a/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/SendMDNMethodTest.java
+++ b/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/SendMDNMethodTest.java
@@ -42,7 +42,6 @@ import static org.hamcrest.Matchers.notNullValue;
 import static org.hamcrest.Matchers.startsWith;
 
 import java.util.List;
-import java.util.Optional;
 
 import org.apache.james.GuiceJamesServer;
 import org.apache.james.core.Username;
@@ -55,7 +54,6 @@ import org.apache.james.mailbox.DefaultMailboxes;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.MailboxConstants;
 import org.apache.james.mailbox.model.MessageId;
-import org.apache.james.mailbox.model.SerializableQuotaLimitValue;
 import org.apache.james.mailbox.probe.MailboxProbe;
 import org.apache.james.mailbox.probe.QuotaProbe;
 import org.apache.james.modules.MailboxProbeImpl;
@@ -406,7 +404,7 @@ public abstract class SendMDNMethodTest {
 
         QuotaProbe quotaProbe = jmapServer.getProbe(QuotaProbesImpl.class);
         String inboxQuotaRoot = quotaProbe.getQuotaRoot("#private", HOMER.asString(), DefaultMailboxes.INBOX);
-        quotaProbe.setMaxStorage(inboxQuotaRoot, SerializableQuotaLimitValue.valueOf(Optional.of(QuotaSizeLimit.size(100))));
+        quotaProbe.setMaxStorage(inboxQuotaRoot, QuotaSizeLimit.size(100));
 
         MessageAppender.fillMailbox(jmapServer.getProbe(MailboxProbeImpl.class), HOMER.asString(), MailboxConstants.INBOX);
 
diff --git a/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/SetMessagesMethodTest.java b/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/SetMessagesMethodTest.java
index c584864..79a7c69 100644
--- a/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/SetMessagesMethodTest.java
+++ b/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/SetMessagesMethodTest.java
@@ -63,7 +63,6 @@ import java.time.ZonedDateTime;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
-import java.util.Optional;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
@@ -95,7 +94,6 @@ import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.model.MessageResult;
-import org.apache.james.mailbox.model.SerializableQuotaLimitValue;
 import org.apache.james.mailbox.probe.ACLProbe;
 import org.apache.james.mailbox.probe.MailboxProbe;
 import org.apache.james.mailbox.probe.QuotaProbe;
@@ -1328,7 +1326,7 @@ public abstract class SetMessagesMethodTest {
     public void setMessagesShouldNotAllowDraftCreationWhenOverQuota() throws MailboxException {
         QuotaProbe quotaProbe = jmapServer.getProbe(QuotaProbesImpl.class);
         String inboxQuotaRoot = quotaProbe.getQuotaRoot("#private", USERNAME.asString(), DefaultMailboxes.INBOX);
-        quotaProbe.setMaxStorage(inboxQuotaRoot, SerializableQuotaLimitValue.valueOf(Optional.of(QuotaSizeLimit.size(100))));
+        quotaProbe.setMaxStorage(inboxQuotaRoot, QuotaSizeLimit.size(100));
 
         MessageAppender.fillMailbox(mailboxProbe, USERNAME.asString(), MailboxConstants.INBOX);
 
@@ -1445,7 +1443,7 @@ public abstract class SetMessagesMethodTest {
     public void setMessagesShouldNotAllowCopyWhenOverQuota() throws MailboxException {
         QuotaProbe quotaProbe = jmapServer.getProbe(QuotaProbesImpl.class);
         String inboxQuotaRoot = quotaProbe.getQuotaRoot("#private", USERNAME.asString(), DefaultMailboxes.INBOX);
-        quotaProbe.setMaxStorage(inboxQuotaRoot, SerializableQuotaLimitValue.valueOf(Optional.of(QuotaSizeLimit.size(100))));
+        quotaProbe.setMaxStorage(inboxQuotaRoot, QuotaSizeLimit.size(100));
 
         List<ComposedMessageId> composedMessageIds = MessageAppender.fillMailbox(mailboxProbe, USERNAME.asString(), MailboxConstants.INBOX);
 
@@ -2775,7 +2773,7 @@ public abstract class SetMessagesMethodTest {
     public void setMessagesShouldTriggerMaxQuotaReachedWhenTryingToSendMessageAndQuotaReached() throws Exception {
         QuotaProbe quotaProbe = jmapServer.getProbe(QuotaProbesImpl.class);
         String inboxQuotaRoot = quotaProbe.getQuotaRoot("#private", USERNAME.asString(), DefaultMailboxes.INBOX);
-        quotaProbe.setMaxStorage(inboxQuotaRoot, SerializableQuotaLimitValue.valueOf(Optional.of(QuotaSizeLimit.size(100))));
+        quotaProbe.setMaxStorage(inboxQuotaRoot, QuotaSizeLimit.size(100));
 
         MessageAppender.fillMailbox(mailboxProbe, USERNAME.asString(), MailboxConstants.INBOX);
 


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


[james-project] 01/16: MAILBOX-395 ElasticSearch indexing should not fail upon invalid charset

Posted by rc...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit ef87f69290a724e9f6065173f91ad051e6268d02
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Tue Feb 4 16:27:35 2020 +0700

    MAILBOX-395 ElasticSearch indexing should not fail upon invalid charset
---
 .../mailbox/elasticsearch/json/MimePartParser.java | 17 +++++++---
 .../json/MessageToElasticSearchJsonTest.java       | 22 ++++++++++++
 .../src/test/resources/eml/invalidCharset.eml      | 10 ++++++
 .../src/test/resources/eml/invalidCharset.json     | 39 ++++++++++++++++++++++
 4 files changed, 84 insertions(+), 4 deletions(-)

diff --git a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/MimePartParser.java b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/MimePartParser.java
index 7cd6e3a..a87ae44 100644
--- a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/MimePartParser.java
+++ b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/MimePartParser.java
@@ -33,10 +33,13 @@ import org.apache.james.mime4j.message.MaximalBodyDescriptor;
 import org.apache.james.mime4j.stream.EntityState;
 import org.apache.james.mime4j.stream.MimeConfig;
 import org.apache.james.mime4j.stream.MimeTokenStream;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import com.google.common.base.Preconditions;
 
 public class MimePartParser {
+    private static final Logger LOGGER = LoggerFactory.getLogger(MimePartParser.class);
 
     private final Message message;
     private final TextExtractor textExtractor;
@@ -120,10 +123,16 @@ public class MimePartParser {
             .addSubType(descriptor.getSubType())
             .addContentDisposition(descriptor.getContentDispositionType())
             .addFileName(descriptor.getContentDispositionFilename());
-
-        Optional.ofNullable(descriptor.getCharset())
-            .map(Charset::forName)
-            .ifPresent(currentlyBuildMimePart::charset);
+        extractCharset(descriptor);
     }
 
+    private void extractCharset(MaximalBodyDescriptor descriptor) {
+        try {
+            Optional.ofNullable(descriptor.getCharset())
+                .map(Charset::forName)
+                .ifPresent(currentlyBuildMimePart::charset);
+        } catch (Exception e) {
+            LOGGER.info("Failed parsing charset", e);
+        }
+    }
 }
diff --git a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/MessageToElasticSearchJsonTest.java b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/MessageToElasticSearchJsonTest.java
index 8586c1a..7c7f5ba 100644
--- a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/MessageToElasticSearchJsonTest.java
+++ b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/MessageToElasticSearchJsonTest.java
@@ -110,6 +110,28 @@ class MessageToElasticSearchJsonTest {
     }
 
     @Test
+    void invalidCharsetShouldBeWellConvertedToJson() throws IOException {
+        MessageToElasticSearchJson messageToElasticSearchJson = new MessageToElasticSearchJson(
+            new DefaultTextExtractor(),
+            ZoneId.of("Europe/Paris"), IndexAttachments.YES);
+        MailboxMessage spamMail = new SimpleMailboxMessage(MESSAGE_ID,
+                date,
+                SIZE,
+                BODY_START_OCTET,
+                ClassLoaderUtils.getSystemResourceAsSharedStream("eml/invalidCharset.eml"),
+                new Flags(),
+                propertyBuilder,
+                MAILBOX_ID);
+        spamMail.setUid(UID);
+        spamMail.setModSeq(MOD_SEQ);
+
+        String actual = messageToElasticSearchJson.convertToJson(spamMail, ImmutableList.of(USERNAME));
+        assertThatJson(actual)
+            .when(IGNORING_ARRAY_ORDER)
+            .isEqualTo(ClassLoaderUtils.getSystemResourceAsString("eml/invalidCharset.json"));
+    }
+
+    @Test
     void htmlEmailShouldBeWellConvertedToJson() throws IOException {
         MessageToElasticSearchJson messageToElasticSearchJson = new MessageToElasticSearchJson(
             new DefaultTextExtractor(),
diff --git a/mailbox/store/src/test/resources/eml/invalidCharset.eml b/mailbox/store/src/test/resources/eml/invalidCharset.eml
new file mode 100644
index 0000000..62bc3fb
--- /dev/null
+++ b/mailbox/store/src/test/resources/eml/invalidCharset.eml
@@ -0,0 +1,10 @@
+To: Antoine DUPRAT <xy...@linagora.com>
+From: Antoine DUPRAT <xy...@linagora.com>
+Subject: Inline attachment
+Message-ID: <26...@linagora.com>
+Date: Tue, 5 Jul 2016 11:47:46 +0200
+MIME-Version: 1.0
+Content-Type: text/plain; charset=%invalid; format=flowed
+Content-Transfer-Encoding: 7bit
+
+This is an inline attachment: Cheers!
\ No newline at end of file
diff --git a/mailbox/store/src/test/resources/eml/invalidCharset.json b/mailbox/store/src/test/resources/eml/invalidCharset.json
new file mode 100644
index 0000000..eed4184
--- /dev/null
+++ b/mailbox/store/src/test/resources/eml/invalidCharset.json
@@ -0,0 +1,39 @@
+{
+  "attachments":[],
+  "bcc":[],
+  "htmlBody":null,
+  "textBody":"This is an inline attachment: Cheers!",
+  "cc":[],
+  "date":"2015-06-07T00:00:00+0200",
+  "from":[{"name":"Antoine DUPRAT","address":"xyz@linagora.com"}],
+  "hasAttachment":false,
+  "headers":[
+    {"name":"to","value":"Antoine DUPRAT <xy...@linagora.com>"},
+    {"name":"from","value":"Antoine DUPRAT <xy...@linagora.com>"},
+    {"name":"subject","value":"Inline attachment"},
+    {"name":"message-id","value":"<26...@linagora.com>"},
+    {"name":"date","value":"Tue, 5 Jul 2016 11:47:46 +0200"},
+    {"name":"mime-version","value":"1.0"},
+    {"name":"content-type","value":"text/plain; charset=%invalid; format=flowed"},
+    {"name":"content-transfer-encoding","value":"7bit"}
+  ],
+  "mailboxId":"18",
+  "mediaType":"plain",
+  "messageId":"184",
+  "modSeq":42,
+  "sentDate":"2016-07-05T11:47:46+0200",
+  "size":25,
+  "subject":["Inline attachment"],
+  "subtype":"text",
+  "text":"Antoine DUPRAT xyz@linagora.com Antoine DUPRAT xyz@linagora.com Inline attachment This is an inline attachment: Cheers!",
+  "to":[{"name":"Antoine DUPRAT","address":"xyz@linagora.com"}],
+  "uid":25,
+  "userFlags":[],
+  "mimeMessageID":"<26...@linagora.com>",
+  "isAnswered":false,
+  "isDeleted":false,
+  "isDraft":false,
+  "isFlagged":false,
+  "isRecent":false,
+  "isUnread":true
+}


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