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:42 UTC

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

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