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/06/30 10:52:56 UTC

[james-project] 03/07: JAMES-3277 Add a test about limiting mailboxes reads for StoreMessageIdManager::setInMailboxes

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 36c7e232bc65c1566178e14842ede43384ada159
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Fri Jun 26 10:19:00 2020 +0700

    JAMES-3277 Add a test about limiting mailboxes reads for StoreMessageIdManager::setInMailboxes
---
 .../CassandraMessageIdManagerSideEffectTest.java   | 29 ++++++++++++++++++++++
 .../AbstractMessageIdManagerSideEffectTest.java    | 20 +++++++--------
 2 files changed, 39 insertions(+), 10 deletions(-)

diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerSideEffectTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerSideEffectTest.java
index db4f8bb..1f60f1c 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerSideEffectTest.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerSideEffectTest.java
@@ -21,15 +21,23 @@ package org.apache.james.mailbox.cassandra;
 
 import java.util.Set;
 
+import org.apache.james.backends.cassandra.CassandraCluster;
 import org.apache.james.backends.cassandra.CassandraClusterExtension;
+import org.apache.james.backends.cassandra.StatementRecorder;
 import org.apache.james.mailbox.cassandra.mail.MailboxAggregateModule;
 import org.apache.james.mailbox.events.EventBus;
 import org.apache.james.mailbox.extension.PreDeletionHook;
+import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.quota.QuotaManager;
 import org.apache.james.mailbox.store.AbstractMessageIdManagerSideEffectTest;
 import org.apache.james.mailbox.store.MessageIdManagerTestSystem;
+import org.assertj.core.api.SoftAssertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.RegisterExtension;
 
+import com.google.common.collect.ImmutableList;
+
 class CassandraMessageIdManagerSideEffectTest extends AbstractMessageIdManagerSideEffectTest {
 
     @RegisterExtension
@@ -39,4 +47,25 @@ class CassandraMessageIdManagerSideEffectTest extends AbstractMessageIdManagerSi
     protected MessageIdManagerTestSystem createTestSystem(QuotaManager quotaManager, EventBus eventBus, Set<PreDeletionHook> preDeletionHooks) {
         return CassandraMessageIdManagerTestSystem.createTestingData(cassandraCluster.getCassandraCluster(), quotaManager, eventBus, preDeletionHooks);
     }
+
+    @Disabled("11 mailbox reads and 10 acl reads")
+    @Test
+    void setInMailboxesShouldLimitMailboxReads(CassandraCluster cassandra) throws Exception {
+        givenUnlimitedQuota();
+        MessageId messageId = testingData.persist(mailbox2.getMailboxId(), messageUid1, FLAGS, session);
+
+        StatementRecorder statementRecorder = new StatementRecorder();
+        cassandra.getConf().recordStatements(statementRecorder);
+
+        messageIdManager.setInMailboxes(messageId, ImmutableList.of(mailbox1.getMailboxId()), session);
+
+        SoftAssertions.assertSoftly(softly -> {
+            softly.assertThat(statementRecorder.listExecutedStatements(
+                StatementRecorder.Selector.preparedStatement("SELECT id,mailboxbase,uidvalidity,name FROM mailbox WHERE id=:id;")))
+                .hasSize(3); // an extra read is still performed
+            softly.assertThat(statementRecorder.listExecutedStatements(
+                StatementRecorder.Selector.preparedStatement("SELECT acl,version FROM acl WHERE id=:id;")))
+                .hasSize(2);
+        });
+    }
 }
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractMessageIdManagerSideEffectTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractMessageIdManagerSideEffectTest.java
index 52e7895..e351d9a 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractMessageIdManagerSideEffectTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractMessageIdManagerSideEffectTest.java
@@ -86,18 +86,18 @@ public abstract class AbstractMessageIdManagerSideEffectTest {
         .used(QuotaCountUsage.count(102))
         .computedLimit(QuotaCountLimit.count(100))
         .build();
-    private static final MessageUid messageUid1 = MessageUid.of(111);
-    private static final MessageUid messageUid2 = MessageUid.of(113);
+    protected static final MessageUid messageUid1 = MessageUid.of(111);
+    protected static final MessageUid messageUid2 = MessageUid.of(113);
 
-    private static final Flags FLAGS = new Flags();
+    protected static final Flags FLAGS = new Flags();
 
-    private MessageIdManager messageIdManager;
-    private MailboxSession session;
-    private Mailbox mailbox1;
-    private Mailbox mailbox2;
-    private Mailbox mailbox3;
+    protected MessageIdManager messageIdManager;
+    protected MailboxSession session;
+    protected Mailbox mailbox1;
+    protected Mailbox mailbox2;
+    protected Mailbox mailbox3;
     private QuotaManager quotaManager;
-    private MessageIdManagerTestSystem testingData;
+    protected MessageIdManagerTestSystem testingData;
     private EventCollector eventCollector;
     private EventBus eventBus;
     private PreDeletionHook preDeletionHook1;
@@ -525,7 +525,7 @@ public abstract class AbstractMessageIdManagerSideEffectTest {
         assertThat(eventCollector.getEvents()).isEmpty();
     }
 
-    private void givenUnlimitedQuota() throws MailboxException {
+    protected void givenUnlimitedQuota() throws MailboxException {
         when(quotaManager.getMessageQuota(any(QuotaRoot.class))).thenReturn(
             Quota.<QuotaCountLimit, QuotaCountUsage>builder().used(QuotaCountUsage.count(2)).computedLimit(QuotaCountLimit.unlimited()).build());
         when(quotaManager.getStorageQuota(any(QuotaRoot.class))).thenReturn(


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