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 ma...@apache.org on 2017/09/29 07:21:54 UTC

[16/31] james-project git commit: MAILBOX-307 Make CassandraAclMapper generic: MailboxId should not be a field

MAILBOX-307 Make CassandraAclMapper generic: MailboxId should not be a field


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/edf8a9a7
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/edf8a9a7
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/edf8a9a7

Branch: refs/heads/master
Commit: edf8a9a734cb98e4700d5b94829630a3f603a9ce
Parents: 5accac0
Author: benwa <bt...@linagora.com>
Authored: Mon Sep 25 16:47:03 2017 +0700
Committer: Matthieu Baechler <ma...@apache.org>
Committed: Fri Sep 29 09:20:40 2017 +0200

----------------------------------------------------------------------
 .../cassandra/mail/CassandraACLMapper.java      | 44 +++++------
 .../cassandra/mail/CassandraMailboxDAO.java     | 12 +--
 .../cassandra/mail/CassandraMailboxMapper.java  | 15 +---
 .../cassandra/mail/CassandraACLMapperTest.java  | 83 ++++++++++++--------
 4 files changed, 77 insertions(+), 77 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/edf8a9a7/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapper.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapper.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapper.java
index f7df7d5..5695ffc 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapper.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapper.java
@@ -49,7 +49,6 @@ import com.datastax.driver.core.ResultSet;
 import com.datastax.driver.core.Row;
 import com.datastax.driver.core.Session;
 import com.fasterxml.jackson.core.JsonProcessingException;
-import com.google.common.base.Preconditions;
 import com.google.common.base.Throwables;
 
 public class CassandraACLMapper {
@@ -61,44 +60,41 @@ public class CassandraACLMapper {
         void inject();
     }
 
-    private final CassandraId cassandraId;
     private final CassandraAsyncExecutor executor;
     private final Session session;
     private final int maxRetry;
     private final CodeInjector codeInjector;
 
-    public CassandraACLMapper(CassandraId cassandraId, Session session, CassandraAsyncExecutor cassandraAsyncExecutor, CassandraConfiguration cassandraConfiguration) {
-        this(cassandraId, session, cassandraAsyncExecutor, cassandraConfiguration, () -> {});
+    public CassandraACLMapper(Session session, CassandraConfiguration cassandraConfiguration) {
+        this(session, cassandraConfiguration, () -> {});
     }
 
-    public CassandraACLMapper(CassandraId cassandraId, Session session, CassandraAsyncExecutor cassandraAsyncExecutor, CassandraConfiguration cassandraConfiguration, CodeInjector codeInjector) {
-        Preconditions.checkArgument(cassandraId != null);
-        this.cassandraId = cassandraId;
+    public CassandraACLMapper(Session session, CassandraConfiguration cassandraConfiguration, CodeInjector codeInjector) {
         this.session = session;
-        this.executor = cassandraAsyncExecutor;
+        this.executor = new CassandraAsyncExecutor(session);
         this.maxRetry = cassandraConfiguration.getAclMaxRetry();
         this.codeInjector = codeInjector;
     }
 
-    public CompletableFuture<MailboxACL> getACL() {
-        return  getStoredACLRow().thenApply(resultSet -> {
+    public CompletableFuture<MailboxACL> getACL(CassandraId cassandraId) {
+        return  getStoredACLRow(cassandraId).thenApply(resultSet -> {
             if (resultSet.isExhausted()) {
                 return SimpleMailboxACL.EMPTY;
             }
             String serializedACL = resultSet.one().getString(CassandraACLTable.ACL);
-            return deserializeACL(serializedACL);
+            return deserializeACL(cassandraId, serializedACL);
         });
     }
 
-    public void updateACL(MailboxACL.MailboxACLCommand command) throws MailboxException {
+    public void updateACL(CassandraId cassandraId, MailboxACL.MailboxACLCommand command) throws MailboxException {
         try {
             new FunctionRunnerWithRetry(maxRetry).execute(
                 () -> {
                     codeInjector.inject();
-                    ResultSet resultSet = getAclWithVersion()
-                        .map((x) -> x.apply(command))
-                        .map(this::updateStoredACL)
-                        .orElseGet(() -> insertACL(applyCommandOnEmptyACL(command)));
+                    ResultSet resultSet = getAclWithVersion(cassandraId)
+                        .map(aclWithVersion -> aclWithVersion.apply(command))
+                        .map(aclWithVersion -> updateStoredACL(cassandraId, aclWithVersion))
+                        .orElseGet(() -> insertACL(cassandraId, applyCommandOnEmptyACL(command)));
                     return resultSet.one().getBool(CassandraConstants.LIGHTWEIGHT_TRANSACTION_APPLIED);
                 }
             );
@@ -107,7 +103,7 @@ public class CassandraACLMapper {
         }
     }
 
-    public void resetACL(MailboxACL mailboxACL) {
+    public void resetACL(CassandraId cassandraId, MailboxACL mailboxACL) {
         try {
             session.execute(
                 insertInto(CassandraACLTable.TABLE_NAME)
@@ -127,13 +123,13 @@ public class CassandraACLMapper {
         }
     }
 
-    private CompletableFuture<ResultSet> getStoredACLRow() {
+    private CompletableFuture<ResultSet> getStoredACLRow(CassandraId cassandraId) {
         return executor.execute(select(CassandraACLTable.ACL, CassandraACLTable.VERSION)
             .from(CassandraACLTable.TABLE_NAME)
             .where(eq(CassandraMailboxTable.ID, cassandraId.asUuid())));
     }
 
-    private ResultSet updateStoredACL(ACLWithVersion aclWithVersion) {
+    private ResultSet updateStoredACL(CassandraId cassandraId, ACLWithVersion aclWithVersion) {
         try {
             return session.execute(
                 update(CassandraACLTable.TABLE_NAME)
@@ -147,7 +143,7 @@ public class CassandraACLMapper {
         }
     }
 
-    private ResultSet insertACL(MailboxACL acl) {
+    private ResultSet insertACL(CassandraId cassandraId, MailboxACL acl) {
         try {
             return session.execute(
                 insertInto(CassandraACLTable.TABLE_NAME)
@@ -161,16 +157,16 @@ public class CassandraACLMapper {
         }
     }
 
-    private Optional<ACLWithVersion> getAclWithVersion() {
-        ResultSet resultSet = getStoredACLRow().join();
+    private Optional<ACLWithVersion> getAclWithVersion(CassandraId cassandraId) {
+        ResultSet resultSet = getStoredACLRow(cassandraId).join();
         if (resultSet.isExhausted()) {
             return Optional.empty();
         }
         Row row = resultSet.one();
-        return Optional.of(new ACLWithVersion(row.getLong(CassandraACLTable.VERSION), deserializeACL(row.getString(CassandraACLTable.ACL))));
+        return Optional.of(new ACLWithVersion(row.getLong(CassandraACLTable.VERSION), deserializeACL(cassandraId, row.getString(CassandraACLTable.ACL))));
     }
 
-    private MailboxACL deserializeACL(String serializedACL) {
+    private MailboxACL deserializeACL(CassandraId cassandraId, String serializedACL) {
         try {
             return SimpleMailboxACLJsonConverter.toACL(serializedACL);
         } catch(IOException exception) {

http://git-wip-us.apache.org/repos/asf/james-project/blob/edf8a9a7/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxDAO.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxDAO.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxDAO.java
index 6d06e5e..7d0dead 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxDAO.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxDAO.java
@@ -62,27 +62,25 @@ public class CassandraMailboxDAO {
 
     private final CassandraAsyncExecutor executor;
     private final MailboxBaseTupleUtil mailboxBaseTupleUtil;
-    private final Session session;
     private final CassandraUtils cassandraUtils;
-    private CassandraConfiguration cassandraConfiguration;
     private final PreparedStatement readStatement;
     private final PreparedStatement listStatement;
     private final PreparedStatement deleteStatement;
     private final PreparedStatement insertStatement;
     private final PreparedStatement updateStatement;
+    private CassandraACLMapper cassandraACLMapper;
 
     @Inject
     public CassandraMailboxDAO(Session session, CassandraTypesProvider typesProvider, CassandraUtils cassandraUtils, CassandraConfiguration cassandraConfiguration) {
         this.executor = new CassandraAsyncExecutor(session);
         this.mailboxBaseTupleUtil = new MailboxBaseTupleUtil(typesProvider);
-        this.session = session;
         this.insertStatement = prepareInsert(session);
         this.updateStatement = prepareUpdate(session);
         this.deleteStatement = prepareDelete(session);
         this.listStatement = prepareList(session);
         this.readStatement = prepareRead(session);
         this.cassandraUtils = cassandraUtils;
-        this.cassandraConfiguration = cassandraConfiguration;
+        this.cassandraACLMapper = new CassandraACLMapper(session, cassandraConfiguration);
     }
 
     @VisibleForTesting
@@ -142,9 +140,7 @@ public class CassandraMailboxDAO {
     }
 
     public CompletableFuture<Optional<SimpleMailbox>> retrieveMailbox(CassandraId mailboxId) {
-        CompletableFuture<MailboxACL> aclCompletableFuture =
-            new CassandraACLMapper(mailboxId, session, executor, cassandraConfiguration)
-                .getACL();
+        CompletableFuture<MailboxACL> aclCompletableFuture = cassandraACLMapper.getACL(mailboxId);
 
         CompletableFuture<Optional<SimpleMailbox>> simpleMailboxFuture = executor.executeSingleRow(readStatement.bind()
             .setUUID(ID, mailboxId.asUuid()))
@@ -192,7 +188,7 @@ public class CassandraMailboxDAO {
 
     private CompletableFuture<SimpleMailbox> toMailboxWithAclFuture(SimpleMailbox mailbox) {
         CassandraId cassandraId = (CassandraId) mailbox.getMailboxId();
-        return new CassandraACLMapper(cassandraId, session, executor, cassandraConfiguration).getACL()
+        return cassandraACLMapper.getACL(cassandraId)
             .thenApply(acl -> {
                 mailbox.setACL(acl);
                 return mailbox;

http://git-wip-us.apache.org/repos/asf/james-project/blob/edf8a9a7/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java
index 81b43e7..a997152 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java
@@ -32,7 +32,6 @@ import javax.inject.Inject;
 
 import org.apache.commons.lang3.StringUtils;
 import org.apache.james.backends.cassandra.init.CassandraConfiguration;
-import org.apache.james.backends.cassandra.utils.CassandraAsyncExecutor;
 import org.apache.james.mailbox.cassandra.ids.CassandraId;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.exception.MailboxExistsException;
@@ -62,19 +61,15 @@ public class CassandraMailboxMapper implements MailboxMapper {
     public static final String CLUSTERING_COLUMNS_IS_TOO_LONG = "The sum of all clustering columns is too long";
     public static final Logger LOGGER = LoggerFactory.getLogger(CassandraMailboxMapper.class);
 
-    private final CassandraAsyncExecutor cassandraAsyncExecutor;
     private final CassandraMailboxPathDAO mailboxPathDAO;
     private final CassandraMailboxDAO mailboxDAO;
-    private final Session session;
-    private final CassandraConfiguration cassandraConfiguration;
+    private final CassandraACLMapper cassandraACLMapper;
 
     @Inject
     public CassandraMailboxMapper(Session session, CassandraMailboxDAO mailboxDAO, CassandraMailboxPathDAO mailboxPathDAO, CassandraConfiguration cassandraConfiguration) {
-        this.cassandraAsyncExecutor = new CassandraAsyncExecutor(session);
         this.mailboxDAO = mailboxDAO;
         this.mailboxPathDAO = mailboxPathDAO;
-        this.session = session;
-        this.cassandraConfiguration = cassandraConfiguration;
+        this.cassandraACLMapper = new CassandraACLMapper(session, cassandraConfiguration);
     }
 
     @Override
@@ -206,15 +201,13 @@ public class CassandraMailboxMapper implements MailboxMapper {
     @Override
     public void updateACL(Mailbox mailbox, MailboxACL.MailboxACLCommand mailboxACLCommand) throws MailboxException {
         CassandraId cassandraId = (CassandraId) mailbox.getMailboxId();
-        new CassandraACLMapper(cassandraId, session, cassandraAsyncExecutor, cassandraConfiguration)
-            .updateACL(mailboxACLCommand);
+        cassandraACLMapper.updateACL(cassandraId, mailboxACLCommand);
     }
 
     @Override
     public void resetACL(Mailbox mailbox, MailboxACL mailboxACL) throws MailboxException {
         CassandraId cassandraId = (CassandraId) mailbox.getMailboxId();
-        new CassandraACLMapper(cassandraId, session, cassandraAsyncExecutor, cassandraConfiguration)
-            .resetACL(mailboxACL);
+        cassandraACLMapper.resetACL(cassandraId, mailboxACL);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/edf8a9a7/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapperTest.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapperTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapperTest.java
index 6976f76..9c4ef70 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapperTest.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapperTest.java
@@ -33,7 +33,6 @@ import java.util.concurrent.TimeoutException;
 import org.apache.james.backends.cassandra.CassandraCluster;
 import org.apache.james.backends.cassandra.DockerCassandraRule;
 import org.apache.james.backends.cassandra.init.CassandraConfiguration;
-import org.apache.james.backends.cassandra.utils.CassandraAsyncExecutor;
 import org.apache.james.mailbox.cassandra.ids.CassandraId;
 import org.apache.james.mailbox.cassandra.modules.CassandraAclModule;
 import org.apache.james.mailbox.cassandra.table.CassandraACLTable;
@@ -52,7 +51,6 @@ public class CassandraACLMapperTest {
     public static final CassandraId MAILBOX_ID = CassandraId.of(UUID.fromString("464765a0-e4e7-11e4-aba4-710c1de3782b"));
     private CassandraACLMapper cassandraACLMapper;
     private CassandraCluster cassandra;
-    private CassandraAsyncExecutor cassandraAsyncExecutor;
     private ExecutorService executor;
 
     @ClassRule public static DockerCassandraRule cassandraServer = new DockerCassandraRule();
@@ -60,8 +58,7 @@ public class CassandraACLMapperTest {
     @Before
     public void setUp() {
         cassandra = CassandraCluster.create(new CassandraAclModule(), cassandraServer.getIp(), cassandraServer.getBindingPort());
-        cassandraAsyncExecutor = new CassandraAsyncExecutor(cassandra.getConf());
-        cassandraACLMapper = new CassandraACLMapper(MAILBOX_ID, cassandra.getConf(), cassandraAsyncExecutor, CassandraConfiguration.DEFAULT_CONFIGURATION);
+        cassandraACLMapper = new CassandraACLMapper(cassandra.getConf(), CassandraConfiguration.DEFAULT_CONFIGURATION);
         executor = Executors.newFixedThreadPool(2);
     }
 
@@ -77,9 +74,9 @@ public class CassandraACLMapperTest {
             insertInto(CassandraACLTable.TABLE_NAME)
                 .value(CassandraACLTable.ID, MAILBOX_ID.asUuid())
                 .value(CassandraACLTable.ACL, "{\"entries\":{\"bob\":64}}")
-                .value(CassandraACLTable.VERSION, 1)
-        );
-        assertThat(cassandraACLMapper.getACL().join())
+                .value(CassandraACLTable.VERSION, 1));
+
+        assertThat(cassandraACLMapper.getACL(MAILBOX_ID).join())
             .isEqualTo(
                 SimpleMailboxACL.EMPTY.union(
                     new SimpleMailboxACL.SimpleMailboxACLEntryKey("bob", MailboxACL.NameType.user, false),
@@ -93,58 +90,71 @@ public class CassandraACLMapperTest {
             insertInto(CassandraACLTable.TABLE_NAME)
                 .value(CassandraACLTable.ID, MAILBOX_ID.asUuid())
                 .value(CassandraACLTable.ACL, "{\"entries\":{\"bob\":invalid}}")
-                .value(CassandraACLTable.VERSION, 1)
-        );
-        assertThat(cassandraACLMapper.getACL().join()).isEqualTo(SimpleMailboxACL.EMPTY);
+                .value(CassandraACLTable.VERSION, 1));
+
+        assertThat(cassandraACLMapper.getACL(MAILBOX_ID).join()).isEqualTo(SimpleMailboxACL.EMPTY);
     }
 
     @Test
     public void retrieveACLWhenNoACLStoredShouldReturnEmptyACL() {
-        assertThat(cassandraACLMapper.getACL().join()).isEqualTo(SimpleMailboxACL.EMPTY);
+        assertThat(cassandraACLMapper.getACL(MAILBOX_ID).join()).isEqualTo(SimpleMailboxACL.EMPTY);
     }
 
     @Test
     public void addACLWhenNoneStoredShouldReturnUpdatedACL() throws Exception {
         SimpleMailboxACL.SimpleMailboxACLEntryKey key = new SimpleMailboxACL.SimpleMailboxACLEntryKey("bob", MailboxACL.NameType.user, false);
         SimpleMailboxACL.Rfc4314Rights rights = new SimpleMailboxACL.Rfc4314Rights(SimpleMailboxACL.Right.Read);
-        cassandraACLMapper.updateACL(new SimpleMailboxACL.SimpleMailboxACLCommand(key, MailboxACL.EditMode.ADD, rights));
-        assertThat(cassandraACLMapper.getACL().join()).isEqualTo(new SimpleMailboxACL().union(key, rights));
+
+        cassandraACLMapper.updateACL(MAILBOX_ID,
+            new SimpleMailboxACL.SimpleMailboxACLCommand(key, MailboxACL.EditMode.ADD, rights));
+
+        assertThat(cassandraACLMapper.getACL(MAILBOX_ID).join())
+            .isEqualTo(new SimpleMailboxACL().union(key, rights));
     }
 
     @Test
     public void modifyACLWhenStoredShouldReturnUpdatedACL() throws MailboxException {
         SimpleMailboxACL.SimpleMailboxACLEntryKey keyBob = new SimpleMailboxACL.SimpleMailboxACLEntryKey("bob", MailboxACL.NameType.user, false);
         SimpleMailboxACL.Rfc4314Rights rights = new SimpleMailboxACL.Rfc4314Rights(SimpleMailboxACL.Right.Read);
-        cassandraACLMapper.updateACL(new SimpleMailboxACL.SimpleMailboxACLCommand(keyBob, MailboxACL.EditMode.ADD, rights));
+
+        cassandraACLMapper.updateACL(MAILBOX_ID, new SimpleMailboxACL.SimpleMailboxACLCommand(keyBob, MailboxACL.EditMode.ADD, rights));
         SimpleMailboxACL.SimpleMailboxACLEntryKey keyAlice = new SimpleMailboxACL.SimpleMailboxACLEntryKey("alice", MailboxACL.NameType.user, false);
-        cassandraACLMapper.updateACL(new SimpleMailboxACL.SimpleMailboxACLCommand(keyAlice, MailboxACL.EditMode.ADD, rights));
-        assertThat(cassandraACLMapper.getACL().join()).isEqualTo(new SimpleMailboxACL().union(keyBob, rights).union(keyAlice, rights));
+        cassandraACLMapper.updateACL(MAILBOX_ID, new SimpleMailboxACL.SimpleMailboxACLCommand(keyAlice, MailboxACL.EditMode.ADD, rights));
+
+        assertThat(cassandraACLMapper.getACL(MAILBOX_ID).join())
+            .isEqualTo(new SimpleMailboxACL().union(keyBob, rights).union(keyAlice, rights));
     }
 
     @Test
     public void removeWhenStoredShouldReturnUpdatedACL() throws MailboxException {
         SimpleMailboxACL.SimpleMailboxACLEntryKey key = new SimpleMailboxACL.SimpleMailboxACLEntryKey("bob", MailboxACL.NameType.user, false);
         SimpleMailboxACL.Rfc4314Rights rights = new SimpleMailboxACL.Rfc4314Rights(SimpleMailboxACL.Right.Read);
-        cassandraACLMapper.updateACL(new SimpleMailboxACL.SimpleMailboxACLCommand(key, MailboxACL.EditMode.ADD, rights));
-        cassandraACLMapper.updateACL(new SimpleMailboxACL.SimpleMailboxACLCommand(key, MailboxACL.EditMode.REMOVE, rights));
-        assertThat(cassandraACLMapper.getACL().join()).isEqualTo(SimpleMailboxACL.EMPTY);
+
+        cassandraACLMapper.updateACL(MAILBOX_ID, new SimpleMailboxACL.SimpleMailboxACLCommand(key, MailboxACL.EditMode.ADD, rights));
+        cassandraACLMapper.updateACL(MAILBOX_ID, new SimpleMailboxACL.SimpleMailboxACLCommand(key, MailboxACL.EditMode.REMOVE, rights));
+
+        assertThat(cassandraACLMapper.getACL(MAILBOX_ID).join()).isEqualTo(SimpleMailboxACL.EMPTY);
     }
 
     @Test
     public void replaceForSingleKeyWithNullRightsWhenSingleKeyStoredShouldReturnEmptyACL() throws MailboxException {
         SimpleMailboxACL.SimpleMailboxACLEntryKey key = new SimpleMailboxACL.SimpleMailboxACLEntryKey("bob", MailboxACL.NameType.user, false);
         SimpleMailboxACL.Rfc4314Rights rights = new SimpleMailboxACL.Rfc4314Rights(SimpleMailboxACL.Right.Read);
-        cassandraACLMapper.updateACL(new SimpleMailboxACL.SimpleMailboxACLCommand(key, MailboxACL.EditMode.ADD, rights));
-        cassandraACLMapper.updateACL(new SimpleMailboxACL.SimpleMailboxACLCommand(key, MailboxACL.EditMode.REPLACE, null));
-        assertThat(cassandraACLMapper.getACL().join()).isEqualTo(SimpleMailboxACL.EMPTY);
+
+        cassandraACLMapper.updateACL(MAILBOX_ID, new SimpleMailboxACL.SimpleMailboxACLCommand(key, MailboxACL.EditMode.ADD, rights));
+        cassandraACLMapper.updateACL(MAILBOX_ID, new SimpleMailboxACL.SimpleMailboxACLCommand(key, MailboxACL.EditMode.REPLACE, null));
+
+        assertThat(cassandraACLMapper.getACL(MAILBOX_ID).join()).isEqualTo(SimpleMailboxACL.EMPTY);
     }
 
     @Test
     public void replaceWhenNotStoredShouldUpdateACLEntry() throws MailboxException {
         SimpleMailboxACL.SimpleMailboxACLEntryKey key = new SimpleMailboxACL.SimpleMailboxACLEntryKey("bob", MailboxACL.NameType.user, false);
         SimpleMailboxACL.Rfc4314Rights rights = new SimpleMailboxACL.Rfc4314Rights(SimpleMailboxACL.Right.Read);
-        cassandraACLMapper.updateACL(new SimpleMailboxACL.SimpleMailboxACLCommand(key, MailboxACL.EditMode.REPLACE, rights));
-        assertThat(cassandraACLMapper.getACL().join()).isEqualTo(new SimpleMailboxACL().union(key, rights));
+
+        cassandraACLMapper.updateACL(MAILBOX_ID, new SimpleMailboxACL.SimpleMailboxACLCommand(key, MailboxACL.EditMode.REPLACE, rights));
+
+        assertThat(cassandraACLMapper.getACL(MAILBOX_ID).join()).isEqualTo(new SimpleMailboxACL().union(key, rights));
     }
 
     @Test
@@ -153,12 +163,13 @@ public class CassandraACLMapperTest {
             insertInto(CassandraACLTable.TABLE_NAME)
                 .value(CassandraACLTable.ID, MAILBOX_ID.asUuid())
                 .value(CassandraACLTable.ACL, "{\"entries\":{\"bob\":invalid}}")
-                .value(CassandraACLTable.VERSION, 1)
-        );
+                .value(CassandraACLTable.VERSION, 1));
         SimpleMailboxACL.SimpleMailboxACLEntryKey key = new SimpleMailboxACL.SimpleMailboxACLEntryKey("bob", MailboxACL.NameType.user, false);
         SimpleMailboxACL.Rfc4314Rights rights = new SimpleMailboxACL.Rfc4314Rights(SimpleMailboxACL.Right.Read);
-        cassandraACLMapper.updateACL(new SimpleMailboxACL.SimpleMailboxACLCommand(key, MailboxACL.EditMode.ADD, rights));
-        assertThat(cassandraACLMapper.getACL().join()).isEqualTo(new SimpleMailboxACL().union(key, rights));
+
+        cassandraACLMapper.updateACL(MAILBOX_ID, new SimpleMailboxACL.SimpleMailboxACLCommand(key, MailboxACL.EditMode.ADD, rights));
+
+        assertThat(cassandraACLMapper.getACL(MAILBOX_ID).join()).isEqualTo(new SimpleMailboxACL().union(key, rights));
     }
 
     @Test
@@ -170,7 +181,9 @@ public class CassandraACLMapperTest {
         Future<Boolean> future1 = performACLUpdateInExecutor(executor, keyBob, rights, countDownLatch::countDown);
         Future<Boolean> future2 = performACLUpdateInExecutor(executor, keyAlice, rights, countDownLatch::countDown);
         awaitAll(future1, future2);
-        assertThat(cassandraACLMapper.getACL().join()).isEqualTo(new SimpleMailboxACL().union(keyBob, rights).union(keyAlice, rights));
+
+        assertThat(cassandraACLMapper.getACL(MAILBOX_ID).join())
+            .isEqualTo(new SimpleMailboxACL().union(keyBob, rights).union(keyAlice, rights));
     }
 
     @Test
@@ -178,13 +191,16 @@ public class CassandraACLMapperTest {
         CountDownLatch countDownLatch = new CountDownLatch(2);
         SimpleMailboxACL.SimpleMailboxACLEntryKey keyBenwa = new SimpleMailboxACL.SimpleMailboxACLEntryKey("benwa", MailboxACL.NameType.user, false);
         SimpleMailboxACL.Rfc4314Rights rights = new SimpleMailboxACL.Rfc4314Rights(SimpleMailboxACL.Right.Read);
-        cassandraACLMapper.updateACL(new SimpleMailboxACL.SimpleMailboxACLCommand(keyBenwa, MailboxACL.EditMode.ADD, rights));
+        cassandraACLMapper.updateACL(MAILBOX_ID, new SimpleMailboxACL.SimpleMailboxACLCommand(keyBenwa, MailboxACL.EditMode.ADD, rights));
+
         SimpleMailboxACL.SimpleMailboxACLEntryKey keyBob = new SimpleMailboxACL.SimpleMailboxACLEntryKey("bob", MailboxACL.NameType.user, false);
         SimpleMailboxACL.SimpleMailboxACLEntryKey keyAlice = new SimpleMailboxACL.SimpleMailboxACLEntryKey("alice", MailboxACL.NameType.user, false);
         Future<Boolean> future1 = performACLUpdateInExecutor(executor, keyBob, rights, countDownLatch::countDown);
         Future<Boolean> future2 = performACLUpdateInExecutor(executor, keyAlice, rights, countDownLatch::countDown);
         awaitAll(future1, future2);
-        assertThat(cassandraACLMapper.getACL().join()).isEqualTo(new SimpleMailboxACL().union(keyBob, rights).union(keyAlice, rights).union(keyBenwa, rights));
+
+        assertThat(cassandraACLMapper.getACL(MAILBOX_ID).join())
+            .isEqualTo(new SimpleMailboxACL().union(keyBob, rights).union(keyAlice, rights).union(keyBenwa, rights));
     }
 
     private void awaitAll(Future<?>... futures) 
@@ -196,13 +212,12 @@ public class CassandraACLMapperTest {
 
     private Future<Boolean> performACLUpdateInExecutor(ExecutorService executor, SimpleMailboxACL.SimpleMailboxACLEntryKey key, SimpleMailboxACL.Rfc4314Rights rights, CassandraACLMapper.CodeInjector runnable) {
         return executor.submit(() -> {
-            CassandraACLMapper aclMapper = new CassandraACLMapper(MAILBOX_ID,
+            CassandraACLMapper aclMapper = new CassandraACLMapper(
                 cassandra.getConf(),
-                new CassandraAsyncExecutor(cassandra.getConf()),
                 CassandraConfiguration.DEFAULT_CONFIGURATION,
                 runnable);
             try {
-                aclMapper.updateACL(new SimpleMailboxACL.SimpleMailboxACLCommand(key, MailboxACL.EditMode.ADD, rights));
+                aclMapper.updateACL(MAILBOX_ID, new SimpleMailboxACL.SimpleMailboxACLCommand(key, MailboxACL.EditMode.ADD, rights));
             } catch (MailboxException exception) {
                 throw Throwables.propagate(exception);
             }


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