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/04/17 02:06:56 UTC

[james-project] 03/04: JAMES-3138 Refactor StoreCurrentQuotaManager to use QuotaOperation

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 284a4fe2a41b1ce4c48656ba58353853f6fc0639
Author: Rene Cordier <rc...@linagora.com>
AuthorDate: Wed Apr 8 17:42:02 2020 +0700

    JAMES-3138 Refactor StoreCurrentQuotaManager to use QuotaOperation
---
 .../quota/CassandraCurrentQuotaManager.java        | 26 +++----
 .../mailbox/jpa/quota/JpaCurrentQuotaManager.java  | 26 +++----
 .../quota/InMemoryCurrentQuotaManager.java         | 20 ++---
 .../quota/InMemoryCurrentQuotaManagerTest.java     | 54 +-------------
 .../store/quota/ListeningCurrentQuotaUpdater.java  | 86 ++++++++++++----------
 .../store/quota/StoreCurrentQuotaManager.java      |  6 +-
 .../quota/ListeningCurrentQuotaUpdaterTest.java    | 12 +--
 .../store/quota/StoreCurrentQuotaManagerTest.java  | 60 ++-------------
 .../james/webadmin/routes/UserQuotaRoutesTest.java |  9 ++-
 9 files changed, 103 insertions(+), 196 deletions(-)

diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/quota/CassandraCurrentQuotaManager.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/quota/CassandraCurrentQuotaManager.java
index eb23bf2..0254999 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/quota/CassandraCurrentQuotaManager.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/quota/CassandraCurrentQuotaManager.java
@@ -31,14 +31,13 @@ import javax.inject.Inject;
 import org.apache.james.core.quota.QuotaCountUsage;
 import org.apache.james.core.quota.QuotaSizeUsage;
 import org.apache.james.mailbox.cassandra.table.CassandraCurrentQuota;
-import org.apache.james.mailbox.exception.MailboxException;
+import org.apache.james.mailbox.model.QuotaOperation;
 import org.apache.james.mailbox.model.QuotaRoot;
 import org.apache.james.mailbox.store.quota.StoreCurrentQuotaManager;
 
 import com.datastax.driver.core.PreparedStatement;
 import com.datastax.driver.core.ResultSet;
 import com.datastax.driver.core.Session;
-import com.google.common.base.Preconditions;
 
 public class CassandraCurrentQuotaManager implements StoreCurrentQuotaManager {
 
@@ -68,19 +67,21 @@ public class CassandraCurrentQuotaManager implements StoreCurrentQuotaManager {
     }
 
     @Override
-    public void increase(QuotaRoot quotaRoot, long count, long size) throws MailboxException {
-        checkArguments(count, size);
-        session.execute(increaseStatement.bind(count, size, quotaRoot.getValue()));
+    public void increase(QuotaOperation quotaOperation) {
+        session.execute(increaseStatement.bind(quotaOperation.count().asLong(),
+            quotaOperation.size().asLong(),
+            quotaOperation.quotaRoot().getValue()));
     }
 
     @Override
-    public void decrease(QuotaRoot quotaRoot, long count, long size) throws MailboxException {
-        checkArguments(count, size);
-        session.execute(decreaseStatement.bind(count, size, quotaRoot.getValue()));
+    public void decrease(QuotaOperation quotaOperation) {
+        session.execute(decreaseStatement.bind(quotaOperation.count().asLong(),
+            quotaOperation.size().asLong(),
+            quotaOperation.quotaRoot().getValue()));
     }
 
     @Override
-    public QuotaCountUsage getCurrentMessageCount(QuotaRoot quotaRoot) throws MailboxException {
+    public QuotaCountUsage getCurrentMessageCount(QuotaRoot quotaRoot) {
         ResultSet resultSet = session.execute(getCurrentMessageCountStatement.bind(quotaRoot.getValue()));
         if (resultSet.isExhausted()) {
             return QuotaCountUsage.count(0L);
@@ -89,16 +90,11 @@ public class CassandraCurrentQuotaManager implements StoreCurrentQuotaManager {
     }
 
     @Override
-    public QuotaSizeUsage getCurrentStorage(QuotaRoot quotaRoot) throws MailboxException {
+    public QuotaSizeUsage getCurrentStorage(QuotaRoot quotaRoot) {
         ResultSet resultSet = session.execute(getCurrentStorageStatement.bind(quotaRoot.getValue()));
         if (resultSet.isExhausted()) {
             return QuotaSizeUsage.size(0L);
         }
         return QuotaSizeUsage.size(resultSet.one().getLong(CassandraCurrentQuota.STORAGE));
     }
-
-    private void checkArguments(long count, long size) {
-        Preconditions.checkArgument(count > 0, "Count should be positive");
-        Preconditions.checkArgument(size > 0, "Size should be positive");
-    }
 }
diff --git a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/quota/JpaCurrentQuotaManager.java b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/quota/JpaCurrentQuotaManager.java
index 99ff928..48ef98a 100644
--- a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/quota/JpaCurrentQuotaManager.java
+++ b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/quota/JpaCurrentQuotaManager.java
@@ -28,13 +28,11 @@ import javax.persistence.EntityManagerFactory;
 import org.apache.james.backends.jpa.TransactionRunner;
 import org.apache.james.core.quota.QuotaCountUsage;
 import org.apache.james.core.quota.QuotaSizeUsage;
-import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.jpa.quota.model.JpaCurrentQuota;
+import org.apache.james.mailbox.model.QuotaOperation;
 import org.apache.james.mailbox.model.QuotaRoot;
 import org.apache.james.mailbox.store.quota.StoreCurrentQuotaManager;
 
-import com.google.common.base.Preconditions;
-
 public class JpaCurrentQuotaManager implements StoreCurrentQuotaManager {
 
     public static final long NO_MESSAGES = 0L;
@@ -66,34 +64,32 @@ public class JpaCurrentQuotaManager implements StoreCurrentQuotaManager {
     }
 
     @Override
-    public void increase(QuotaRoot quotaRoot, long count, long size) {
-        Preconditions.checkArgument(count > 0, "Counts should be positive");
-        Preconditions.checkArgument(size > 0, "Size should be positive");
-
+    public void increase(QuotaOperation quotaOperation) {
         transactionRunner.run(
             entityManager -> {
+                QuotaRoot quotaRoot = quotaOperation.quotaRoot();
+
                 JpaCurrentQuota jpaCurrentQuota = Optional.ofNullable(retrieveUserQuota(entityManager, quotaRoot))
                     .orElse(new JpaCurrentQuota(quotaRoot.getValue(), NO_MESSAGES, NO_STORED_BYTES));
 
                 entityManager.merge(new JpaCurrentQuota(quotaRoot.getValue(),
-                    jpaCurrentQuota.getMessageCount().asLong() + count,
-                    jpaCurrentQuota.getSize().asLong() + size));
+                    jpaCurrentQuota.getMessageCount().asLong() + quotaOperation.count().asLong(),
+                    jpaCurrentQuota.getSize().asLong() + quotaOperation.size().asLong()));
             });
     }
 
     @Override
-    public void decrease(QuotaRoot quotaRoot, long count, long size) throws MailboxException {
-        Preconditions.checkArgument(count > 0, "Counts should be positive");
-        Preconditions.checkArgument(size > 0, "Counts should be positive");
-
+    public void decrease(QuotaOperation quotaOperation) {
         transactionRunner.run(
             entityManager -> {
+                QuotaRoot quotaRoot = quotaOperation.quotaRoot();
+
                 JpaCurrentQuota jpaCurrentQuota = Optional.ofNullable(retrieveUserQuota(entityManager, quotaRoot))
                     .orElse(new JpaCurrentQuota(quotaRoot.getValue(), NO_MESSAGES, NO_STORED_BYTES));
 
                 entityManager.merge(new JpaCurrentQuota(quotaRoot.getValue(),
-                    jpaCurrentQuota.getMessageCount().asLong() - count,
-                    jpaCurrentQuota.getSize().asLong() - size));
+                    jpaCurrentQuota.getMessageCount().asLong() - quotaOperation.count().asLong(),
+                    jpaCurrentQuota.getSize().asLong() - quotaOperation.size().asLong()));
             });
     }
 
diff --git a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/quota/InMemoryCurrentQuotaManager.java b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/quota/InMemoryCurrentQuotaManager.java
index 392196a..fbd2330 100644
--- a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/quota/InMemoryCurrentQuotaManager.java
+++ b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/quota/InMemoryCurrentQuotaManager.java
@@ -29,12 +29,12 @@ import org.apache.james.core.quota.QuotaCountUsage;
 import org.apache.james.core.quota.QuotaSizeUsage;
 import org.apache.james.mailbox.SessionProvider;
 import org.apache.james.mailbox.exception.MailboxException;
+import org.apache.james.mailbox.model.QuotaOperation;
 import org.apache.james.mailbox.model.QuotaRoot;
 import org.apache.james.mailbox.store.quota.CurrentQuotaCalculator;
 import org.apache.james.mailbox.store.quota.CurrentQuotaCalculator.CurrentQuotas;
 import org.apache.james.mailbox.store.quota.StoreCurrentQuotaManager;
 
-import com.google.common.base.Preconditions;
 import com.google.common.cache.CacheBuilder;
 import com.google.common.cache.CacheLoader;
 import com.google.common.cache.LoadingCache;
@@ -54,15 +54,13 @@ public class InMemoryCurrentQuotaManager implements StoreCurrentQuotaManager {
     }
 
     @Override
-    public void increase(QuotaRoot quotaRoot, long count, long size) throws MailboxException {
-        checkArguments(count, size);
-        doIncrease(quotaRoot, count, size);
+    public void increase(QuotaOperation quotaOperation) throws MailboxException {
+        updateQuota(quotaOperation.quotaRoot(), quotaOperation.count().asLong(), quotaOperation.size().asLong());
     }
 
     @Override
-    public void decrease(QuotaRoot quotaRoot, long count, long size) throws MailboxException {
-        checkArguments(count, size);
-        doIncrease(quotaRoot, -count, -size);
+    public void decrease(QuotaOperation quotaOperation) throws MailboxException {
+        updateQuota(quotaOperation.quotaRoot(), -(quotaOperation.count().asLong()), -(quotaOperation.size().asLong()));
     }
 
     @Override
@@ -83,7 +81,7 @@ public class InMemoryCurrentQuotaManager implements StoreCurrentQuotaManager {
         }
     }
 
-    private void doIncrease(QuotaRoot quotaRoot, long count, long size) throws MailboxException {
+    private void updateQuota(QuotaRoot quotaRoot, long count, long size) throws MailboxException {
         try {
             Entry entry = quotaCache.get(quotaRoot);
             entry.getCount().addAndGet(count);
@@ -91,12 +89,6 @@ public class InMemoryCurrentQuotaManager implements StoreCurrentQuotaManager {
         } catch (ExecutionException e) {
             throw new MailboxException("Exception caught", e);
         }
-
-    }
-
-    private void checkArguments(long count, long size) {
-        Preconditions.checkArgument(count > 0, "Count should be positive");
-        Preconditions.checkArgument(size > 0, "Size should be positive");
     }
 
     static class Entry {
diff --git a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/quota/InMemoryCurrentQuotaManagerTest.java b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/quota/InMemoryCurrentQuotaManagerTest.java
index 75c9427..2014706 100644
--- a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/quota/InMemoryCurrentQuotaManagerTest.java
+++ b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/quota/InMemoryCurrentQuotaManagerTest.java
@@ -20,7 +20,6 @@
 package org.apache.james.mailbox.inmemory.quota;
 
 import static org.assertj.core.api.Assertions.assertThat;
-import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
@@ -29,6 +28,7 @@ import java.util.Optional;
 import org.apache.james.core.quota.QuotaCountUsage;
 import org.apache.james.core.quota.QuotaSizeUsage;
 import org.apache.james.mailbox.SessionProvider;
+import org.apache.james.mailbox.model.QuotaOperation;
 import org.apache.james.mailbox.model.QuotaRoot;
 import org.apache.james.mailbox.store.quota.CurrentQuotaCalculator;
 import org.apache.james.mailbox.store.quota.CurrentQuotaCalculator.CurrentQuotas;
@@ -72,58 +72,10 @@ class InMemoryCurrentQuotaManagerTest {
         when(mockedCurrentQuotaCalculator.recalculateCurrentQuotas(QUOTA_ROOT, null))
             .thenReturn(CURRENT_QUOTAS);
 
-        testee.increase(QUOTA_ROOT, 10, 100);
+        QuotaOperation quotaOperation = new QuotaOperation(QUOTA_ROOT, QuotaCountUsage.count(10), QuotaSizeUsage.size(100));
+        testee.increase(quotaOperation);
 
         assertThat(testee.getCurrentMessageCount(QUOTA_ROOT)).isEqualTo(QuotaCountUsage.count(28));
         assertThat(testee.getCurrentStorage(QUOTA_ROOT)).isEqualTo(QuotaSizeUsage.size(612));
     }
-
-    @Test
-    void increaseShouldThrowOnZeroCount() {
-        assertThatThrownBy(() -> testee.increase(QUOTA_ROOT, 0, 5))
-            .isInstanceOf(IllegalArgumentException.class);
-    }
-
-    @Test
-    void increaseShouldThrowOnNegativeCount() {
-        assertThatThrownBy(() -> testee.increase(QUOTA_ROOT, -1, 5))
-            .isInstanceOf(IllegalArgumentException.class);
-    }
-
-    @Test
-    void increaseShouldThrowOnZeroSize() {
-        assertThatThrownBy(() -> testee.increase(QUOTA_ROOT, 5, 0))
-            .isInstanceOf(IllegalArgumentException.class);
-    }
-
-    @Test
-    void increaseShouldThrowOnNegativeSize() {
-        assertThatThrownBy(() -> testee.increase(QUOTA_ROOT, 5, -1))
-            .isInstanceOf(IllegalArgumentException.class);
-    }
-
-    @Test
-    void decreaseShouldThrowOnZeroCount() {
-        assertThatThrownBy(() -> testee.decrease(QUOTA_ROOT, 0, 5))
-            .isInstanceOf(IllegalArgumentException.class);
-    }
-
-    @Test
-    void decreaseShouldThrowOnNegativeCount() {
-        assertThatThrownBy(() -> testee.decrease(QUOTA_ROOT, -1, 5))
-            .isInstanceOf(IllegalArgumentException.class);
-    }
-
-    @Test
-    void decreaseShouldThrowOnZeroSize() {
-        assertThatThrownBy(() -> testee.decrease(QUOTA_ROOT, 5, 0))
-            .isInstanceOf(IllegalArgumentException.class);
-    }
-
-    @Test
-    void decreaseShouldThrowOnNegativeSize() {
-        assertThatThrownBy(() -> testee.decrease(QUOTA_ROOT, 5, -1))
-            .isInstanceOf(IllegalArgumentException.class);
-    }
-
 }
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdater.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdater.java
index 13171cb..bf96d76 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdater.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdater.java
@@ -19,20 +19,25 @@
 package org.apache.james.mailbox.store.quota;
 
 import java.time.Instant;
+import java.util.Optional;
 
 import javax.inject.Inject;
 
+import org.apache.james.core.quota.QuotaCountUsage;
+import org.apache.james.core.quota.QuotaSizeUsage;
 import org.apache.james.mailbox.events.Event;
 import org.apache.james.mailbox.events.EventBus;
 import org.apache.james.mailbox.events.Group;
 import org.apache.james.mailbox.events.MailboxListener;
 import org.apache.james.mailbox.events.RegistrationKey;
 import org.apache.james.mailbox.exception.MailboxException;
+import org.apache.james.mailbox.model.QuotaOperation;
 import org.apache.james.mailbox.model.QuotaRoot;
 import org.apache.james.mailbox.quota.QuotaManager;
 import org.apache.james.mailbox.quota.QuotaRootResolver;
 import org.apache.james.mailbox.store.event.EventFactory;
 
+import com.github.fge.lambdas.Throwing;
 import com.google.common.collect.ImmutableSet;
 
 public class ListeningCurrentQuotaUpdater implements MailboxListener.GroupMailboxListener, QuotaUpdater {
@@ -82,43 +87,50 @@ public class ListeningCurrentQuotaUpdater implements MailboxListener.GroupMailbo
             }
     }
 
-    private void handleExpungedEvent(Expunged expunged, QuotaRoot quotaRoot) throws MailboxException {
-        long expungedSize = totalSize(expunged);
-        long expungedCount = (long) expunged.getUids().size();
-        // Expunge event can contain no data (expunge performed while no messages marked \Deleted)
-        if (expungedCount != 0 && expungedSize != 0) {
-            currentQuotaManager.decrease(quotaRoot, expungedCount, expungedSize);
-        }
-        eventBus.dispatch(
-            EventFactory.quotaUpdated()
-                .randomEventId()
-                .user(expunged.getUsername())
-                .quotaRoot(quotaRoot)
-                .quotaCount(quotaManager.getMessageQuota(quotaRoot))
-                .quotaSize(quotaManager.getStorageQuota(quotaRoot))
-                .instant(Instant.now())
-                .build(),
-            NO_REGISTRATION_KEYS)
-            .block();
+    private void handleExpungedEvent(Expunged expunged, QuotaRoot quotaRoot) {
+        computeQuotaOperation(expunged, quotaRoot).ifPresent(Throwing.<QuotaOperation>consumer(quotaOperation -> {
+            currentQuotaManager.decrease(quotaOperation);
+
+            eventBus.dispatch(
+                EventFactory.quotaUpdated()
+                    .randomEventId()
+                    .user(expunged.getUsername())
+                    .quotaRoot(quotaRoot)
+                    .quotaCount(quotaManager.getMessageQuota(quotaRoot))
+                    .quotaSize(quotaManager.getStorageQuota(quotaRoot))
+                    .instant(Instant.now())
+                    .build(),
+                NO_REGISTRATION_KEYS)
+                .block();
+        }).sneakyThrow());
+    }
+
+    private void handleAddedEvent(Added added, QuotaRoot quotaRoot) {
+        computeQuotaOperation(added, quotaRoot).ifPresent(Throwing.<QuotaOperation>consumer(quotaOperation -> {
+            currentQuotaManager.increase(quotaOperation);
+
+            eventBus.dispatch(
+                EventFactory.quotaUpdated()
+                    .randomEventId()
+                    .user(added.getUsername())
+                    .quotaRoot(quotaRoot)
+                    .quotaCount(quotaManager.getMessageQuota(quotaRoot))
+                    .quotaSize(quotaManager.getStorageQuota(quotaRoot))
+                    .instant(Instant.now())
+                    .build(),
+                NO_REGISTRATION_KEYS)
+                .block();
+        }).sneakyThrow());
     }
 
-    private void handleAddedEvent(Added added, QuotaRoot quotaRoot) throws MailboxException {
-        long addedSize = totalSize(added);
-        long addedCount = (long) added.getUids().size();
-        if (addedCount != 0 && addedSize != 0) {
-            currentQuotaManager.increase(quotaRoot, addedCount, addedSize);
+    private Optional<QuotaOperation> computeQuotaOperation(MetaDataHoldingEvent metaDataHoldingEvent, QuotaRoot quotaRoot) {
+        long size = totalSize(metaDataHoldingEvent);
+        long count = Integer.toUnsignedLong(metaDataHoldingEvent.getUids().size());
+
+        if (count != 0 && size != 0) {
+            return Optional.of(new QuotaOperation(quotaRoot, QuotaCountUsage.count(count), QuotaSizeUsage.size(size)));
         }
-        eventBus.dispatch(
-            EventFactory.quotaUpdated()
-                .randomEventId()
-                .user(added.getUsername())
-                .quotaRoot(quotaRoot)
-                .quotaCount(quotaManager.getMessageQuota(quotaRoot))
-                .quotaSize(quotaManager.getStorageQuota(quotaRoot))
-                .instant(Instant.now())
-                .build(),
-            NO_REGISTRATION_KEYS)
-            .block();
+        return Optional.empty();
     }
 
     private long totalSize(MetaDataHoldingEvent metaDataHoldingEvent) {
@@ -131,9 +143,9 @@ public class ListeningCurrentQuotaUpdater implements MailboxListener.GroupMailbo
     private void handleMailboxDeletionEvent(MailboxDeletion mailboxDeletionEvent) throws MailboxException {
         boolean mailboxContainedMessages = mailboxDeletionEvent.getDeletedMessageCount().asLong() > 0;
         if (mailboxContainedMessages) {
-            currentQuotaManager.decrease(mailboxDeletionEvent.getQuotaRoot(),
-                mailboxDeletionEvent.getDeletedMessageCount().asLong(),
-                mailboxDeletionEvent.getTotalDeletedSize().asLong());
+            currentQuotaManager.decrease(new QuotaOperation(mailboxDeletionEvent.getQuotaRoot(),
+                mailboxDeletionEvent.getDeletedMessageCount(),
+                mailboxDeletionEvent.getTotalDeletedSize()));
         }
     }
 
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/StoreCurrentQuotaManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/StoreCurrentQuotaManager.java
index d977dd2..d785f89 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/StoreCurrentQuotaManager.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/StoreCurrentQuotaManager.java
@@ -20,13 +20,13 @@
 package org.apache.james.mailbox.store.quota;
 
 import org.apache.james.mailbox.exception.MailboxException;
-import org.apache.james.mailbox.model.QuotaRoot;
+import org.apache.james.mailbox.model.QuotaOperation;
 import org.apache.james.mailbox.quota.CurrentQuotaManager;
 
 public interface StoreCurrentQuotaManager extends CurrentQuotaManager {
 
-    void increase(QuotaRoot quotaRoot, long count, long size) throws MailboxException;
+    void increase(QuotaOperation quotaOperation) throws MailboxException;
 
-    void decrease(QuotaRoot quotaRoot, long count, long size) throws MailboxException;
+    void decrease(QuotaOperation quotaOperation) throws MailboxException;
 
 }
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdaterTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdaterTest.java
index ccfcc9d..6825773 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdaterTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdaterTest.java
@@ -45,6 +45,7 @@ import org.apache.james.mailbox.events.Group;
 import org.apache.james.mailbox.events.MailboxListener;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MessageMetaData;
+import org.apache.james.mailbox.model.QuotaOperation;
 import org.apache.james.mailbox.model.QuotaRoot;
 import org.apache.james.mailbox.model.TestId;
 import org.apache.james.mailbox.quota.QuotaManager;
@@ -64,6 +65,7 @@ class ListeningCurrentQuotaUpdaterTest {
     static final String BENWA = "benwa";
     static final Username USERNAME_BENWA = Username.of(BENWA);
     static final QuotaRoot QUOTA_ROOT = QuotaRoot.quotaRoot(BENWA, Optional.empty());
+    static final QuotaOperation QUOTA = new QuotaOperation(QUOTA_ROOT, QuotaCountUsage.count(2), QuotaSizeUsage.size(2 * SIZE));
 
     StoreCurrentQuotaManager mockedCurrentQuotaManager;
     QuotaRootResolver mockedQuotaRootResolver;
@@ -97,7 +99,7 @@ class ListeningCurrentQuotaUpdaterTest {
 
         testee.event(added);
 
-        verify(mockedCurrentQuotaManager).increase(QUOTA_ROOT, 2, 2 * SIZE);
+        verify(mockedCurrentQuotaManager).increase(QUOTA);
     }
 
     @Test
@@ -112,7 +114,7 @@ class ListeningCurrentQuotaUpdaterTest {
 
         testee.event(expunged);
 
-        verify(mockedCurrentQuotaManager).decrease(QUOTA_ROOT, 2, 2 * SIZE);
+        verify(mockedCurrentQuotaManager).decrease(QUOTA);
     }
     
     @Test
@@ -125,7 +127,7 @@ class ListeningCurrentQuotaUpdaterTest {
 
         testee.event(expunged);
 
-        verify(mockedCurrentQuotaManager, never()).decrease(QUOTA_ROOT, 0, 0);
+        verify(mockedCurrentQuotaManager, never()).decrease(any());
     }
 
     @Test
@@ -138,7 +140,7 @@ class ListeningCurrentQuotaUpdaterTest {
 
         testee.event(added);
 
-        verify(mockedCurrentQuotaManager, never()).increase(QUOTA_ROOT, 0, 0);
+        verify(mockedCurrentQuotaManager, never()).increase(any());
     }
 
     @Test
@@ -153,7 +155,7 @@ class ListeningCurrentQuotaUpdaterTest {
 
         testee.event(deletion);
 
-        verify(mockedCurrentQuotaManager).decrease(QUOTA_ROOT, 10, 5);
+        verify(mockedCurrentQuotaManager).decrease(new QuotaOperation(QUOTA_ROOT, QuotaCountUsage.count(10), QuotaSizeUsage.size(5)));
     }
 
     @Test
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/quota/StoreCurrentQuotaManagerTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/quota/StoreCurrentQuotaManagerTest.java
index f6614ff..df39dd2 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/quota/StoreCurrentQuotaManagerTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/quota/StoreCurrentQuotaManagerTest.java
@@ -20,18 +20,18 @@
 package org.apache.james.mailbox.store.quota;
 
 import static org.assertj.core.api.Assertions.assertThat;
-import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
 import java.util.Optional;
 
 import org.apache.james.core.quota.QuotaCountUsage;
 import org.apache.james.core.quota.QuotaSizeUsage;
+import org.apache.james.mailbox.model.QuotaOperation;
 import org.apache.james.mailbox.model.QuotaRoot;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
 public abstract class StoreCurrentQuotaManagerTest {
-    public static final QuotaRoot QUOTA_ROOT = QuotaRoot.quotaRoot("benwa", Optional.empty());
+    private static final QuotaRoot QUOTA_ROOT = QuotaRoot.quotaRoot("benwa", Optional.empty());
     
     protected abstract StoreCurrentQuotaManager provideTestee();
     
@@ -49,7 +49,7 @@ public abstract class StoreCurrentQuotaManagerTest {
 
     @Test
     void increaseShouldWork() throws Exception {
-        testee.increase(QUOTA_ROOT, 10, 100);
+        testee.increase(new QuotaOperation(QUOTA_ROOT, QuotaCountUsage.count(10), QuotaSizeUsage.size(100)));
 
         assertThat(testee.getCurrentMessageCount(QUOTA_ROOT)).isEqualTo(QuotaCountUsage.count(10));
         assertThat(testee.getCurrentStorage(QUOTA_ROOT)).isEqualTo(QuotaSizeUsage.size(100));
@@ -57,9 +57,9 @@ public abstract class StoreCurrentQuotaManagerTest {
 
     @Test
     void decreaseShouldWork() throws Exception {
-        testee.increase(QUOTA_ROOT, 20, 200);
+        testee.increase(new QuotaOperation(QUOTA_ROOT, QuotaCountUsage.count(20), QuotaSizeUsage.size(200)));
 
-        testee.decrease(QUOTA_ROOT, 10, 100);
+        testee.decrease(new QuotaOperation(QUOTA_ROOT, QuotaCountUsage.count(10), QuotaSizeUsage.size(100)));
 
         assertThat(testee.getCurrentMessageCount(QUOTA_ROOT)).isEqualTo(QuotaCountUsage.count(10));
         assertThat(testee.getCurrentStorage(QUOTA_ROOT)).isEqualTo(QuotaSizeUsage.size(100));
@@ -67,57 +67,9 @@ public abstract class StoreCurrentQuotaManagerTest {
 
     @Test
     void decreaseShouldNotFailWhenItLeadsToNegativeValues() throws Exception {
-        testee.decrease(QUOTA_ROOT, 10, 100);
+        testee.decrease(new QuotaOperation(QUOTA_ROOT, QuotaCountUsage.count(10), QuotaSizeUsage.size(100)));
 
         assertThat(testee.getCurrentMessageCount(QUOTA_ROOT)).isEqualTo(QuotaCountUsage.count(-10));
         assertThat(testee.getCurrentStorage(QUOTA_ROOT)).isEqualTo(QuotaSizeUsage.size(-100));
     }
-
-    @Test
-    void increaseShouldThrowOnZeroCount() {
-        assertThatThrownBy(() -> testee.increase(QUOTA_ROOT, 0, 5))
-            .isInstanceOf(IllegalArgumentException.class);
-    }
-
-    @Test
-    void increaseShouldThrowOnNegativeCount() {
-        assertThatThrownBy(() -> testee.increase(QUOTA_ROOT, -1, 5))
-            .isInstanceOf(IllegalArgumentException.class);
-    }
-
-    @Test
-    void increaseShouldThrowOnZeroSize() {
-        assertThatThrownBy(() -> testee.increase(QUOTA_ROOT, 5, 0))
-            .isInstanceOf(IllegalArgumentException.class);
-    }
-
-    @Test
-    void increaseShouldThrowOnNegativeSize() {
-        assertThatThrownBy(() -> testee.increase(QUOTA_ROOT, 5, -1))
-            .isInstanceOf(IllegalArgumentException.class);
-    }
-
-    @Test
-    void decreaseShouldThrowOnZeroCount() {
-        assertThatThrownBy(() -> testee.decrease(QUOTA_ROOT, 0, 5))
-            .isInstanceOf(IllegalArgumentException.class);
-    }
-
-    @Test
-    void decreaseShouldThrowOnNegativeCount() {
-        assertThatThrownBy(() -> testee.decrease(QUOTA_ROOT, -1, 5))
-            .isInstanceOf(IllegalArgumentException.class);
-    }
-
-    @Test
-    void decreaseShouldThrowOnZeroSize() {
-        assertThatThrownBy(() -> testee.decrease(QUOTA_ROOT, 5, 0))
-            .isInstanceOf(IllegalArgumentException.class);
-    }
-
-    @Test
-    void decreaseShouldThrowOnNegativeSize() {
-        assertThatThrownBy(() -> testee.decrease(QUOTA_ROOT, 5, -1))
-            .isInstanceOf(IllegalArgumentException.class);
-    }
 }
diff --git a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/UserQuotaRoutesTest.java b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/UserQuotaRoutesTest.java
index 0763109..e320c5a 100644
--- a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/UserQuotaRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/UserQuotaRoutesTest.java
@@ -36,7 +36,9 @@ import java.util.Map;
 import org.apache.james.core.Domain;
 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;
+import org.apache.james.core.quota.QuotaSizeUsage;
 import org.apache.james.domainlist.api.DomainList;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession;
@@ -44,6 +46,7 @@ import org.apache.james.mailbox.MessageManager;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.inmemory.quota.InMemoryCurrentQuotaManager;
 import org.apache.james.mailbox.model.MailboxPath;
+import org.apache.james.mailbox.model.QuotaOperation;
 import org.apache.james.mailbox.quota.MaxQuotaManager;
 import org.apache.james.mailbox.quota.UserQuotaRootResolver;
 import org.apache.james.quota.search.QuotaSearchTestSystem;
@@ -845,10 +848,11 @@ class UserQuotaRoutesTest {
             MaxQuotaManager maxQuotaManager = testSystem.getQuotaSearchTestSystem().getMaxQuotaManager();
             UserQuotaRootResolver userQuotaRootResolver = testSystem.getQuotaSearchTestSystem().getQuotaRootResolver();
             InMemoryCurrentQuotaManager currentQuotaManager = testSystem.getQuotaSearchTestSystem().getCurrentQuotaManager();
+            QuotaOperation quotaIncrease = new QuotaOperation(userQuotaRootResolver.forUser(BOB), QuotaCountUsage.count(20), QuotaSizeUsage.size(40));
 
             maxQuotaManager.setMaxStorage(userQuotaRootResolver.forUser(BOB), QuotaSizeLimit.size(80));
             maxQuotaManager.setMaxMessage(userQuotaRootResolver.forUser(BOB), QuotaCountLimit.count(100));
-            currentQuotaManager.increase(userQuotaRootResolver.forUser(BOB), 20, 40);
+            currentQuotaManager.increase(quotaIncrease);
 
             JsonPath jsonPath =
                 when()
@@ -873,10 +877,11 @@ class UserQuotaRoutesTest {
             MaxQuotaManager maxQuotaManager = testSystem.getQuotaSearchTestSystem().getMaxQuotaManager();
             UserQuotaRootResolver userQuotaRootResolver = testSystem.getQuotaSearchTestSystem().getQuotaRootResolver();
             InMemoryCurrentQuotaManager currentQuotaManager = testSystem.getQuotaSearchTestSystem().getCurrentQuotaManager();
+            QuotaOperation quotaIncrease = new QuotaOperation(userQuotaRootResolver.forUser(BOB), QuotaCountUsage.count(20), QuotaSizeUsage.size(40));
 
             maxQuotaManager.setMaxStorage(userQuotaRootResolver.forUser(BOB), QuotaSizeLimit.unlimited());
             maxQuotaManager.setMaxMessage(userQuotaRootResolver.forUser(BOB), QuotaCountLimit.unlimited());
-            currentQuotaManager.increase(userQuotaRootResolver.forUser(BOB), 20, 40);
+            currentQuotaManager.increase(quotaIncrease);
 
             JsonPath jsonPath =
                 when()


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