MAILBOX-307 Add MailboxMapper tests for ACL storage

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

Branch: refs/heads/master
Commit: d87584e522b26b98b12cdbac7694ef30c3663129
Parents: 3b247fd
Author: benwa <btell...@linagora.com>
Authored: Mon Sep 25 11:42:23 2017 +0700
Committer: Matthieu Baechler <matth...@apache.org>
Committed: Fri Sep 29 09:20:40 2017 +0200

----------------------------------------------------------------------
 .../mail/CassandraMailboxMapperAclTest.java     |  79 ++++++
 .../inmemory/mail/InMemoryMailboxMapper.java    |   2 +-
 .../inmemory/mail/InMemoryMapperProvider.java   |   3 +-
 .../mail/MemoryMailboxMapperAclTest.java        |  37 +++
 .../store/mail/model/impl/SimpleMailbox.java    |   1 +
 .../store/mail/model/MailboxMapperACLTest.java  | 256 +++++++++++++++++++
 .../store/mail/model/MapperProvider.java        |   3 +-
 7 files changed, 378 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/d87584e5/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperAclTest.java
----------------------------------------------------------------------
diff --git 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperAclTest.java
 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperAclTest.java
new file mode 100644
index 0000000..9490386
--- /dev/null
+++ 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperAclTest.java
@@ -0,0 +1,79 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+
+package org.apache.james.mailbox.cassandra.mail;
+
+import org.apache.james.backends.cassandra.CassandraCluster;
+import org.apache.james.backends.cassandra.DockerCassandraRule;
+import org.apache.james.backends.cassandra.init.CassandraModuleComposite;
+import org.apache.james.mailbox.cassandra.modules.CassandraAclModule;
+import org.apache.james.mailbox.cassandra.modules.CassandraAnnotationModule;
+import 
org.apache.james.mailbox.cassandra.modules.CassandraApplicableFlagsModule;
+import org.apache.james.mailbox.cassandra.modules.CassandraAttachmentModule;
+import org.apache.james.mailbox.cassandra.modules.CassandraBlobModule;
+import 
org.apache.james.mailbox.cassandra.modules.CassandraDeletedMessageModule;
+import org.apache.james.mailbox.cassandra.modules.CassandraFirstUnseenModule;
+import 
org.apache.james.mailbox.cassandra.modules.CassandraMailboxCounterModule;
+import org.apache.james.mailbox.cassandra.modules.CassandraMailboxModule;
+import 
org.apache.james.mailbox.cassandra.modules.CassandraMailboxRecentsModule;
+import org.apache.james.mailbox.cassandra.modules.CassandraMessageModule;
+import org.apache.james.mailbox.cassandra.modules.CassandraModSeqModule;
+import org.apache.james.mailbox.cassandra.modules.CassandraUidModule;
+import org.apache.james.mailbox.store.mail.model.MailboxMapperACLTest;
+import org.apache.james.mailbox.store.mail.model.MapperProvider;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.ClassRule;
+
+public class CassandraMailboxMapperAclTest extends MailboxMapperACLTest {
+    
+    @ClassRule public static DockerCassandraRule cassandraServer = new 
DockerCassandraRule();
+    
+    private CassandraCluster cassandra;
+
+    @Before
+    public void setUp() throws Exception {
+        CassandraModuleComposite modules = new CassandraModuleComposite(
+                new CassandraAclModule(),
+                new CassandraMailboxModule(),
+                new CassandraMessageModule(),
+                new CassandraMailboxCounterModule(),
+                new CassandraMailboxRecentsModule(),
+                new CassandraModSeqModule(),
+                new CassandraUidModule(),
+                new CassandraAttachmentModule(),
+                new CassandraAnnotationModule(),
+                new CassandraFirstUnseenModule(),
+                new CassandraApplicableFlagsModule(),
+                new CassandraDeletedMessageModule(),
+                new CassandraBlobModule());
+        this.cassandra = CassandraCluster.create(modules, 
cassandraServer.getIp(), cassandraServer.getBindingPort());
+        super.setUp();
+    }
+    
+    @After
+    public void tearDown() {
+        cassandra.close();
+    }
+    
+    @Override
+    protected MapperProvider createMapperProvider() {
+        return new CassandraMapperProvider(cassandra);
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/d87584e5/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxMapper.java
----------------------------------------------------------------------
diff --git 
a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxMapper.java
 
b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxMapper.java
index 2500e78..5d57d6c 100644
--- 
a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxMapper.java
+++ 
b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxMapper.java
@@ -156,6 +156,6 @@ public class InMemoryMailboxMapper implements MailboxMapper 
{
 
     @Override
     public void updateACL(Mailbox mailbox, MailboxACL.MailboxACLCommand 
mailboxACLCommand) throws MailboxException{
-        mailbox.setACL(mailbox.getACL().apply(mailboxACLCommand));
+        
mailboxesByPath.get(mailbox.generateAssociatedPath()).setACL(mailbox.getACL().apply(mailboxACLCommand));
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/d87584e5/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/InMemoryMapperProvider.java
----------------------------------------------------------------------
diff --git 
a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/InMemoryMapperProvider.java
 
b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/InMemoryMapperProvider.java
index f9463fe..5bbf330 100644
--- 
a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/InMemoryMapperProvider.java
+++ 
b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/InMemoryMapperProvider.java
@@ -113,7 +113,8 @@ public class InMemoryMapperProvider implements 
MapperProvider {
             Capabilities.MAILBOX,
             Capabilities.ATTACHMENT,
             Capabilities.ANNOTATION,
-            Capabilities.MOVE);
+            Capabilities.MOVE,
+            Capabilities.ACL_STORAGE);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/d87584e5/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/MemoryMailboxMapperAclTest.java
----------------------------------------------------------------------
diff --git 
a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/MemoryMailboxMapperAclTest.java
 
b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/MemoryMailboxMapperAclTest.java
new file mode 100644
index 0000000..fcce880
--- /dev/null
+++ 
b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/MemoryMailboxMapperAclTest.java
@@ -0,0 +1,37 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+
+package org.apache.james.mailbox.inmemory.mail;
+
+import org.apache.james.mailbox.store.mail.model.MailboxMapperACLTest;
+import org.apache.james.mailbox.store.mail.model.MapperProvider;
+import org.junit.Before;
+
+public class MemoryMailboxMapperAclTest extends MailboxMapperACLTest {
+    
+    @Before
+    public void setUp() throws Exception {
+        super.setUp();
+    }
+    
+    @Override
+    protected MapperProvider createMapperProvider() {
+        return new InMemoryMapperProvider();
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/d87584e5/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/SimpleMailbox.java
----------------------------------------------------------------------
diff --git 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/SimpleMailbox.java
 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/SimpleMailbox.java
index 23f4ad9..6727d8e 100644
--- 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/SimpleMailbox.java
+++ 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/SimpleMailbox.java
@@ -56,6 +56,7 @@ public class SimpleMailbox implements Mailbox {
         this.user = mailbox.getUser();
         this.name = mailbox.getName();
         this.uidValidity = mailbox.getUidValidity();
+        this.acl = new SimpleMailboxACL(mailbox.getACL().getEntries());
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/james-project/blob/d87584e5/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MailboxMapperACLTest.java
----------------------------------------------------------------------
diff --git 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MailboxMapperACLTest.java
 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MailboxMapperACLTest.java
new file mode 100644
index 0000000..fe5b593
--- /dev/null
+++ 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MailboxMapperACLTest.java
@@ -0,0 +1,256 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+
+package org.apache.james.mailbox.store.mail.model;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import org.apache.james.mailbox.exception.MailboxException;
+import org.apache.james.mailbox.model.MailboxACL;
+import org.apache.james.mailbox.model.MailboxPath;
+import org.apache.james.mailbox.model.SimpleMailboxACL;
+import org.apache.james.mailbox.store.mail.MailboxMapper;
+import org.apache.james.mailbox.store.mail.model.impl.SimpleMailbox;
+import org.junit.Assume;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+
+import com.google.common.collect.ImmutableMap;
+
+public abstract class MailboxMapperACLTest {
+    private final static long UID_VALIDITY = 42;
+    public static final boolean POSITIVE = true;
+    public static final boolean NEGATIVE = !POSITIVE;
+
+    private MailboxPath benwaInboxPath;
+    private Mailbox benwaInboxMailbox;
+
+    @Rule
+    public ExpectedException expected = ExpectedException.none();
+    private MailboxMapper mailboxMapper;
+    private MapperProvider mapperProvider;
+
+    protected abstract MapperProvider createMapperProvider();
+
+    public void setUp() throws Exception {
+        this.mapperProvider = createMapperProvider();
+        
Assume.assumeTrue(mapperProvider.getSupportedCapabilities().contains(MapperProvider.Capabilities.MAILBOX));
+        
Assume.assumeTrue(mapperProvider.getSupportedCapabilities().contains(MapperProvider.Capabilities.ACL_STORAGE));
+
+        this.mailboxMapper = mapperProvider.createMailboxMapper();
+
+        benwaInboxPath = new MailboxPath("#private", "benwa", "INBOX");
+        benwaInboxMailbox = createMailbox(benwaInboxPath);
+        mailboxMapper.save(benwaInboxMailbox);
+    }
+
+    @Test
+    public void storedAclShouldBeEmptyByDefault() throws MailboxException {
+        assertThat(
+            mailboxMapper.findMailboxById(benwaInboxMailbox.getMailboxId())
+                .getACL()
+                .getEntries())
+            .isEmpty();
+    }
+
+    @Test
+    public void updateAclShouldSaveAclWhenReplace() throws MailboxException {
+        SimpleMailboxACL.SimpleMailboxACLEntryKey key = new 
SimpleMailboxACL.SimpleMailboxACLEntryKey("user", MailboxACL.NameType.user, 
NEGATIVE);
+        SimpleMailboxACL.Rfc4314Rights rights = new 
SimpleMailboxACL.Rfc4314Rights("asew");
+        mailboxMapper.updateACL(benwaInboxMailbox,
+            new SimpleMailboxACL.SimpleMailboxACLCommand(key,
+                MailboxACL.EditMode.REPLACE,
+                rights));
+
+        assertThat(
+            mailboxMapper.findMailboxById(benwaInboxMailbox.getMailboxId())
+                .getACL()
+                .getEntries())
+            .hasSize(1)
+            .containsEntry(key, rights);
+    }
+
+    @Test
+    public void updateAclShouldOverrightStoredAclWhenReplace() throws 
MailboxException {
+        SimpleMailboxACL.SimpleMailboxACLEntryKey key = new 
SimpleMailboxACL.SimpleMailboxACLEntryKey("user", MailboxACL.NameType.user, 
NEGATIVE);
+        SimpleMailboxACL.Rfc4314Rights rights = new 
SimpleMailboxACL.Rfc4314Rights("asew");
+        SimpleMailboxACL.Rfc4314Rights newRights = new 
SimpleMailboxACL.Rfc4314Rights("skate");
+        mailboxMapper.updateACL(benwaInboxMailbox,
+            new SimpleMailboxACL.SimpleMailboxACLCommand(key,
+                MailboxACL.EditMode.REPLACE,
+                rights));
+        mailboxMapper.updateACL(benwaInboxMailbox,
+            new SimpleMailboxACL.SimpleMailboxACLCommand(key,
+                MailboxACL.EditMode.REPLACE,
+                newRights));
+
+        assertThat(
+            mailboxMapper.findMailboxById(benwaInboxMailbox.getMailboxId())
+                .getACL()
+                .getEntries())
+            .hasSize(1)
+            .containsEntry(key, newRights);
+    }
+
+    @Test
+    public void updateAclShouldTreatNegativeAndPositiveRightSeparately() 
throws MailboxException {
+        SimpleMailboxACL.SimpleMailboxACLEntryKey key1 = new 
SimpleMailboxACL.SimpleMailboxACLEntryKey("user", MailboxACL.NameType.user, 
NEGATIVE);
+        SimpleMailboxACL.SimpleMailboxACLEntryKey key2 = new 
SimpleMailboxACL.SimpleMailboxACLEntryKey("user", MailboxACL.NameType.user, 
POSITIVE);
+        SimpleMailboxACL.Rfc4314Rights rights = new 
SimpleMailboxACL.Rfc4314Rights("asew");
+        SimpleMailboxACL.Rfc4314Rights newRights = new 
SimpleMailboxACL.Rfc4314Rights("skate");
+        mailboxMapper.updateACL(benwaInboxMailbox,
+            new SimpleMailboxACL.SimpleMailboxACLCommand(key1,
+                MailboxACL.EditMode.REPLACE,
+                rights));
+        mailboxMapper.updateACL(benwaInboxMailbox,
+            new SimpleMailboxACL.SimpleMailboxACLCommand(key2,
+                MailboxACL.EditMode.REPLACE,
+                newRights));
+
+        assertThat(
+            mailboxMapper.findMailboxById(benwaInboxMailbox.getMailboxId())
+                .getACL()
+                .getEntries())
+            .hasSize(2)
+            .containsEntry(key1, rights)
+            .containsEntry(key2, newRights);
+    }
+
+    @Test
+    public void updateAclShouldTreatNameTypesRightSeparately() throws 
MailboxException {
+        SimpleMailboxACL.SimpleMailboxACLEntryKey key1 = new 
SimpleMailboxACL.SimpleMailboxACLEntryKey("user", MailboxACL.NameType.user, 
NEGATIVE);
+        SimpleMailboxACL.SimpleMailboxACLEntryKey key2 = new 
SimpleMailboxACL.SimpleMailboxACLEntryKey("user", MailboxACL.NameType.group, 
NEGATIVE);
+        SimpleMailboxACL.Rfc4314Rights rights = new 
SimpleMailboxACL.Rfc4314Rights("asew");
+        SimpleMailboxACL.Rfc4314Rights newRights = new 
SimpleMailboxACL.Rfc4314Rights("skate");
+        mailboxMapper.updateACL(benwaInboxMailbox,
+            new SimpleMailboxACL.SimpleMailboxACLCommand(key1,
+                MailboxACL.EditMode.REPLACE,
+                rights));
+        mailboxMapper.updateACL(benwaInboxMailbox,
+            new SimpleMailboxACL.SimpleMailboxACLCommand(key2,
+                MailboxACL.EditMode.REPLACE,
+                newRights));
+
+        assertThat(
+            mailboxMapper.findMailboxById(benwaInboxMailbox.getMailboxId())
+                .getACL()
+                .getEntries())
+            .hasSize(2)
+            .containsEntry(key1, rights)
+            .containsEntry(key2, newRights);
+    }
+
+    @Test
+    public void updateAclShouldCleanAclEntryWhenEmptyReplace() throws 
MailboxException {
+        SimpleMailboxACL.SimpleMailboxACLEntryKey key = new 
SimpleMailboxACL.SimpleMailboxACLEntryKey("user", MailboxACL.NameType.user, 
NEGATIVE);
+        SimpleMailboxACL.Rfc4314Rights rights = new 
SimpleMailboxACL.Rfc4314Rights("asew");
+        SimpleMailboxACL.Rfc4314Rights newRights = new 
SimpleMailboxACL.Rfc4314Rights("");
+        mailboxMapper.updateACL(benwaInboxMailbox,
+            new SimpleMailboxACL.SimpleMailboxACLCommand(key,
+                MailboxACL.EditMode.REPLACE,
+                rights));
+        mailboxMapper.updateACL(benwaInboxMailbox,
+            new SimpleMailboxACL.SimpleMailboxACLCommand(key,
+                MailboxACL.EditMode.REPLACE,
+                newRights));
+
+        assertThat(
+            mailboxMapper.findMailboxById(benwaInboxMailbox.getMailboxId())
+                .getACL()
+                .getEntries())
+            .isEmpty();
+    }
+
+    @Test
+    public void updateAclShouldCombineStoredAclWhenAdd() throws 
MailboxException {
+        SimpleMailboxACL.SimpleMailboxACLEntryKey key = new 
SimpleMailboxACL.SimpleMailboxACLEntryKey("user", MailboxACL.NameType.user, 
NEGATIVE);
+        SimpleMailboxACL.Rfc4314Rights rights = new 
SimpleMailboxACL.Rfc4314Rights("asew");
+        SimpleMailboxACL.Rfc4314Rights newRights = new 
SimpleMailboxACL.Rfc4314Rights("skate");
+        SimpleMailboxACL.Rfc4314Rights bothRights = new 
SimpleMailboxACL.Rfc4314Rights("asewkt");
+        mailboxMapper.updateACL(benwaInboxMailbox,
+            new SimpleMailboxACL.SimpleMailboxACLCommand(key,
+                MailboxACL.EditMode.REPLACE,
+                rights));
+        mailboxMapper.updateACL(benwaInboxMailbox,
+            new SimpleMailboxACL.SimpleMailboxACLCommand(key,
+                MailboxACL.EditMode.ADD,
+                newRights));
+
+        assertThat(
+            mailboxMapper.findMailboxById(benwaInboxMailbox.getMailboxId())
+                .getACL()
+                .getEntries())
+            .hasSize(1)
+            .containsEntry(key, bothRights);
+    }
+
+    @Test
+    public void removeAclShouldRemoveSomeStoredAclWhenAdd() throws 
MailboxException {
+        SimpleMailboxACL.SimpleMailboxACLEntryKey key = new 
SimpleMailboxACL.SimpleMailboxACLEntryKey("user", MailboxACL.NameType.user, 
NEGATIVE);
+        SimpleMailboxACL.Rfc4314Rights rights = new 
SimpleMailboxACL.Rfc4314Rights("asew");
+        SimpleMailboxACL.Rfc4314Rights removedRights = new 
SimpleMailboxACL.Rfc4314Rights("se");
+        SimpleMailboxACL.Rfc4314Rights finalRights = new 
SimpleMailboxACL.Rfc4314Rights("aw");
+        mailboxMapper.updateACL(benwaInboxMailbox,
+            new SimpleMailboxACL.SimpleMailboxACLCommand(key,
+                MailboxACL.EditMode.REPLACE,
+                rights));
+        mailboxMapper.updateACL(benwaInboxMailbox,
+            new SimpleMailboxACL.SimpleMailboxACLCommand(key,
+                MailboxACL.EditMode.REMOVE,
+                removedRights));
+
+        assertThat(
+            mailboxMapper.findMailboxById(benwaInboxMailbox.getMailboxId())
+                .getACL()
+                .getEntries())
+            .hasSize(1)
+            .containsEntry(key, finalRights);
+    }
+
+    @Test
+    public void removeAclShouldNotFailWhenRemovingNonExistingRight() throws 
MailboxException {
+        SimpleMailboxACL.SimpleMailboxACLEntryKey key = new 
SimpleMailboxACL.SimpleMailboxACLEntryKey("user", MailboxACL.NameType.user, 
NEGATIVE);
+        SimpleMailboxACL.Rfc4314Rights rights = new 
SimpleMailboxACL.Rfc4314Rights("asew");
+        SimpleMailboxACL.Rfc4314Rights removedRights = new 
SimpleMailboxACL.Rfc4314Rights("sel");
+        SimpleMailboxACL.Rfc4314Rights finalRights = new 
SimpleMailboxACL.Rfc4314Rights("aw");
+        mailboxMapper.updateACL(benwaInboxMailbox,
+            new SimpleMailboxACL.SimpleMailboxACLCommand(key,
+                MailboxACL.EditMode.REPLACE,
+                rights));
+        mailboxMapper.updateACL(benwaInboxMailbox,
+            new SimpleMailboxACL.SimpleMailboxACLCommand(key,
+                MailboxACL.EditMode.REMOVE,
+                removedRights));
+
+        assertThat(
+            mailboxMapper.findMailboxById(benwaInboxMailbox.getMailboxId())
+                .getACL()
+                .getEntries())
+            .hasSize(1)
+            .containsEntry(key, finalRights);
+    }
+
+    private SimpleMailbox createMailbox(MailboxPath mailboxPath) {
+        SimpleMailbox mailbox = new SimpleMailbox(mailboxPath, UID_VALIDITY);
+        mailbox.setMailboxId(mapperProvider.generateId());
+        return mailbox;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/d87584e5/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MapperProvider.java
----------------------------------------------------------------------
diff --git 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MapperProvider.java
 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MapperProvider.java
index cea5d59..1b7deec 100644
--- 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MapperProvider.java
+++ 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MapperProvider.java
@@ -40,7 +40,8 @@ public interface MapperProvider {
         MOVE,
         UNIQUE_MESSAGE_ID,
         THREAD_SAFE_FLAGS_UPDATE,
-        INCREMENTAL_APPLICABLE_FLAGS
+        INCREMENTAL_APPLICABLE_FLAGS,
+        ACL_STORAGE
     }
 
     List<Capabilities> getSupportedCapabilities();


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

Reply via email to