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 ro...@apache.org on 2016/12/21 08:48:45 UTC

[1/4] james-project git commit: JAMES-1888: MessageIdManager, persist and delete must be attached to MailboxSession

Repository: james-project
Updated Branches:
  refs/heads/master 27f1e48d4 -> 36b0ef6e8


JAMES-1888: MessageIdManager, persist and delete must be attached to MailboxSession


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

Branch: refs/heads/master
Commit: 36b0ef6e89e3eea5941322450ebff623e4028c19
Parents: 81832ae
Author: Quynh Nguyen <qn...@linagora.com>
Authored: Tue Dec 20 17:16:47 2016 +0700
Committer: Quynh Nguyen <qn...@linagora.com>
Committed: Wed Dec 21 09:08:18 2016 +0700

----------------------------------------------------------------------
 .../mailbox/manager/MailboxManagerFixture.java  |  34 +++++
 .../CassandraMessageIdManagerTestSystem.java    |  33 ++---
 .../inmemory/InMemoryMessageIdManager.java      |  21 +--
 .../InMemoryMessageIdManagerTestSystem.java     |  31 +++--
 .../MessageIdManagerTestSystemProvider.java     |  44 +-----
 .../mailbox/store/StoreMessageIdManager.java    |   9 +-
 .../mailbox/store/StoreMessageManager.java      |   4 +-
 .../AbstractMessageIdManagerSideEffectTest.java |  35 ++---
 .../AbstractMessageIdManagerStorageTest.java    | 136 ++++++++-----------
 .../store/MessageIdManagerTestSystem.java       |  35 +----
 .../StoreMessageIdManagerSideEffectTest.java    |   4 -
 .../store/StoreMessageIdManagerTestSystem.java  |  19 ++-
 .../store/TestMailboxSessionMapperFactory.java  |  26 +++-
 .../apache/mailet/base/MailAddressFixture.java  |   1 -
 14 files changed, 202 insertions(+), 230 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/36b0ef6e/mailbox/api/src/test/java/org/apache/james/mailbox/manager/MailboxManagerFixture.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/manager/MailboxManagerFixture.java b/mailbox/api/src/test/java/org/apache/james/mailbox/manager/MailboxManagerFixture.java
new file mode 100644
index 0000000..516e578
--- /dev/null
+++ b/mailbox/api/src/test/java/org/apache/james/mailbox/manager/MailboxManagerFixture.java
@@ -0,0 +1,34 @@
+/****************************************************************
+ * 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.manager;
+
+import org.apache.james.mailbox.model.MailboxPath;
+
+public class MailboxManagerFixture {
+    public static final String PRIVATE_NAMESPACE = "#private";
+
+    public static final String USER = "user";
+    public static final String OTHER_USER = "otheruser";
+
+    public static final MailboxPath MAILBOX_PATH1 = new MailboxPath(PRIVATE_NAMESPACE, USER, "INBOX");
+    public static final MailboxPath MAILBOX_PATH2 = new MailboxPath(PRIVATE_NAMESPACE, USER, "OUTBOX");
+    public static final MailboxPath MAILBOX_PATH3 = new MailboxPath(PRIVATE_NAMESPACE, USER, "SENT");
+    public static final MailboxPath MAILBOX_PATH4 = new MailboxPath(PRIVATE_NAMESPACE, OTHER_USER, "INBOX");
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/36b0ef6e/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerTestSystem.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerTestSystem.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerTestSystem.java
index fcbdca3..b5faa01 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerTestSystem.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerTestSystem.java
@@ -44,7 +44,7 @@ import org.apache.james.mailbox.cassandra.modules.CassandraMailboxModule;
 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.mock.MockMailboxSession;
+import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.model.MessageId;
@@ -54,12 +54,10 @@ import org.apache.james.mailbox.store.MessageIdManagerTestSystem;
 import org.apache.james.mailbox.store.NoMailboxPathLocker;
 import org.apache.james.mailbox.store.StoreMessageIdManager;
 import org.apache.james.mailbox.store.event.MailboxEventDispatcher;
-import org.apache.james.mailbox.store.mail.MailboxMapper;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
 import org.apache.james.mailbox.store.mail.model.MailboxMessage;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
 import org.apache.james.mailbox.store.mail.model.impl.PropertyBuilder;
-import org.apache.james.mailbox.store.mail.model.impl.SimpleMailbox;
 import org.apache.james.mailbox.store.mail.model.impl.SimpleMailboxMessage;
 import org.apache.james.mailbox.store.quota.DefaultQuotaRootResolver;
 
@@ -101,39 +99,32 @@ public class CassandraMessageIdManagerTestSystem extends MessageIdManagerTestSys
             new CassandraMessageId.Factory(),
             quotaManager,
             new DefaultQuotaRootResolver(mapperFactory));
-        SimpleMailbox mailbox1 = new SimpleMailbox(new MailboxPath("#private", "user", "INBOX"), UID_VALIDITY, CassandraId.timeBased());
-        SimpleMailbox mailbox2 = new SimpleMailbox(new MailboxPath("#private", "user", "OUTBOX"), UID_VALIDITY, CassandraId.timeBased());
-        SimpleMailbox mailbox3 = new SimpleMailbox(new MailboxPath("#private", "user", "SENT"), UID_VALIDITY, CassandraId.timeBased());
-        SimpleMailbox mailbox4 = new SimpleMailbox(new MailboxPath("#public", "otheruser", "INBOX"), UID_VALIDITY, CassandraId.timeBased());
-        MockMailboxSession mailboxSession = new MockMailboxSession("user");
-        MailboxMapper mailboxMapper = mapperFactory.getMailboxMapper(mailboxSession);
-        mailboxMapper.save(mailbox1);
-        mailboxMapper.save(mailbox2);
-        mailboxMapper.save(mailbox3);
-        mailboxMapper.save(mailbox4);
 
         CassandraMailboxManager cassandraMailboxManager = new CassandraMailboxManager(mapperFactory, mock(Authenticator.class), new NoMailboxPathLocker(), new MessageParser(), messageIdFactory);
         cassandraMailboxManager.init();
 
-        return new CassandraMessageIdManagerTestSystem(messageIdManager, mailboxSession, mailbox1, mailbox2, mailbox3, mailbox4,
-            messageIdFactory, mapperFactory, mailboxSession, cassandraMailboxManager);
+        return new CassandraMessageIdManagerTestSystem(messageIdManager, messageIdFactory, mapperFactory, cassandraMailboxManager);
     }
 
     private final CassandraMessageId.Factory messageIdFactory;
     private final CassandraMailboxSessionMapperFactory mapperFactory;
-    private final MailboxSession mailboxSession;
     private final CassandraMailboxManager cassandraMailboxManager;
 
-    public CassandraMessageIdManagerTestSystem(MessageIdManager messageIdManager, MailboxSession session, Mailbox mailbox1, Mailbox mailbox2, Mailbox mailbox3, Mailbox mailbox4, CassandraMessageId.Factory messageIdFactory, CassandraMailboxSessionMapperFactory mapperFactory, MailboxSession mailboxSession, CassandraMailboxManager cassandraMailboxManager) {
-        super(messageIdManager, session, mailbox1, mailbox2, mailbox3, mailbox4);
+    public CassandraMessageIdManagerTestSystem(MessageIdManager messageIdManager, CassandraMessageId.Factory messageIdFactory, CassandraMailboxSessionMapperFactory mapperFactory, CassandraMailboxManager cassandraMailboxManager) {
+        super(messageIdManager);
         this.messageIdFactory = messageIdFactory;
         this.mapperFactory = mapperFactory;
-        this.mailboxSession = mailboxSession;
         this.cassandraMailboxManager = cassandraMailboxManager;
     }
 
     @Override
-    public MessageId persist(MailboxId mailboxId, MessageUid uid, Flags flags) {
+    public Mailbox createMailbox(MailboxPath mailboxPath, MailboxSession session) throws MailboxException {
+        cassandraMailboxManager.createMailbox(mailboxPath, session);
+        return mapperFactory.getMailboxMapper(session).findMailboxByPath(mailboxPath);
+    }
+
+    @Override
+    public MessageId persist(MailboxId mailboxId, MessageUid uid, Flags flags, MailboxSession mailboxSession) {
         try {
             CassandraMessageId messageId = messageIdFactory.generate();
             Mailbox mailbox = mapperFactory.getMailboxMapper(mailboxSession).findMailboxById(mailboxId);
@@ -150,7 +141,7 @@ public class CassandraMessageIdManagerTestSystem extends MessageIdManagerTestSys
     }
 
     @Override
-    public void deleteMailbox(MailboxId mailboxId) {
+    public void deleteMailbox(MailboxId mailboxId, MailboxSession mailboxSession) {
         try {
             Mailbox mailbox = mapperFactory.getMailboxMapper(mailboxSession).findMailboxById(mailboxId);
             cassandraMailboxManager.deleteMailbox(new MailboxPath(mailbox.getNamespace(), mailbox.getUser(), mailbox.getName()), mailboxSession);

http://git-wip-us.apache.org/repos/asf/james-project/blob/36b0ef6e/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMessageIdManager.java
----------------------------------------------------------------------
diff --git a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMessageIdManager.java b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMessageIdManager.java
index b10b599..4d40e1b 100644
--- a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMessageIdManager.java
+++ b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMessageIdManager.java
@@ -27,7 +27,6 @@ import javax.mail.Flags;
 
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession;
-import org.apache.james.mailbox.MailboxSession.SessionType;
 import org.apache.james.mailbox.MessageIdManager;
 import org.apache.james.mailbox.MessageManager;
 import org.apache.james.mailbox.MessageManager.FlagsUpdateMode;
@@ -202,18 +201,22 @@ public class InMemoryMessageIdManager implements MessageIdManager {
         });
     }
 
-    private Optional<MessageResult> findMessageWithId(MailboxId mailboxId, final MessageId messageId, FetchGroup fetchGroup, MailboxSession mailboxSession) throws MailboxException {
+    private Optional<MessageResult> findMessageWithId(MailboxId mailboxId, MessageId messageId, FetchGroup fetchGroup, MailboxSession mailboxSession) throws MailboxException {
         return FluentIterable.from(retrieveAllMessages(mailboxId, fetchGroup, mailboxSession))
-            .filter(new Predicate<MessageResult>() {
-
-                @Override
-                public boolean apply(MessageResult messageResult) {
-                    return messageResult.getMessageId().equals(messageId);
-                }
-            })
+            .filter(filterByMessageId(messageId))
             .first();
     }
 
+    private Predicate<MessageResult> filterByMessageId(final MessageId messageId) {
+        return new Predicate<MessageResult>() {
+
+            @Override
+            public boolean apply(MessageResult messageResult) {
+                return messageResult.getMessageId().equals(messageId);
+            }
+        };
+    }
+
     private ImmutableList<MessageResult> retrieveAllMessages(MailboxId mailboxId, FetchGroup fetchGroup, MailboxSession mailboxSession) throws MailboxException {
         MessageManager messageManager = mailboxManager.getMailbox(mailboxId, mailboxSession);
         return ImmutableList.copyOf(messageManager.getMessages(MessageRange.all(), fetchGroup, mailboxSession));

http://git-wip-us.apache.org/repos/asf/james-project/blob/36b0ef6e/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryMessageIdManagerTestSystem.java
----------------------------------------------------------------------
diff --git a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryMessageIdManagerTestSystem.java b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryMessageIdManagerTestSystem.java
index 466d698..649f6cb 100644
--- a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryMessageIdManagerTestSystem.java
+++ b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryMessageIdManagerTestSystem.java
@@ -30,10 +30,12 @@ import org.apache.james.mailbox.MessageUid;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MailboxMetaData;
+import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.model.MailboxQuery;
 import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.store.MessageIdManagerTestSystem;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
+import org.apache.james.mailbox.store.mail.model.impl.SimpleMailbox;
 
 import com.google.common.base.Optional;
 import com.google.common.base.Predicate;
@@ -44,24 +46,29 @@ public class InMemoryMessageIdManagerTestSystem extends MessageIdManagerTestSyst
 
     private static final MessageId FIRST_MESSAGE_ID = InMemoryMessageId.of(1);
     private static final long ONE_HUNDRED = 100;
+    private static final int UID_VALIDITY = 1024;
 
     private final MailboxManager mailboxManager;
-    private final MailboxSession mailboxSession;
     private Optional<MessageId> lastMessageIdUsed;
 
-    public InMemoryMessageIdManagerTestSystem(MailboxManager mailboxManager, MailboxSession mailboxSession, 
-            Mailbox mailbox1, Mailbox mailbox2, Mailbox mailbox3, Mailbox mailbox4) {
-        super(new InMemoryMessageIdManager(mailboxManager), mailboxSession, mailbox1, mailbox2, mailbox3, mailbox4);
+    public InMemoryMessageIdManagerTestSystem(MailboxManager mailboxManager) {
+        super(new InMemoryMessageIdManager(mailboxManager));
         this.mailboxManager = mailboxManager;
-        this.mailboxSession = mailboxSession;
         this.lastMessageIdUsed = Optional.absent();
     }
 
     @Override
-    public MessageId persist(MailboxId mailboxId, MessageUid uid, Flags flags) {
+    public Mailbox createMailbox(MailboxPath mailboxPath, MailboxSession mailboxSession) throws MailboxException {
+        mailboxManager.createMailbox(mailboxPath, mailboxSession);
+        MessageManager messageManager = mailboxManager.getMailbox(mailboxPath, mailboxSession);
+        return new SimpleMailbox(mailboxPath, UID_VALIDITY, messageManager.getId());
+    }
+
+    @Override
+    public MessageId persist(MailboxId mailboxId, MessageUid uid, Flags flags, MailboxSession session) {
         try {
-            MessageManager messageManager = mailboxManager.getMailbox(mailboxId, mailboxSession);
-            MessageId messageId = messageManager.appendMessage(new ByteArrayInputStream("Subject: test\r\n\r\ntestmail".getBytes()), new Date(), mailboxSession, false, flags)
+            MessageManager messageManager = mailboxManager.getMailbox(mailboxId, session);
+            MessageId messageId = messageManager.appendMessage(new ByteArrayInputStream("Subject: test\r\n\r\ntestmail".getBytes()), new Date(), session, false, flags)
                     .getMessageId();
             lastMessageIdUsed = Optional.of(messageId);
             return messageId;
@@ -76,18 +83,18 @@ public class InMemoryMessageIdManagerTestSystem extends MessageIdManagerTestSyst
     }
 
     @Override
-    public void deleteMailbox(final MailboxId mailboxId) {
+    public void deleteMailbox(final MailboxId mailboxId, MailboxSession session) {
         try {
-            Optional<MailboxMetaData> mailbox = retrieveMailbox(mailboxId);
+            Optional<MailboxMetaData> mailbox = retrieveMailbox(mailboxId, session);
             if (mailbox.isPresent()) {
-                mailboxManager.deleteMailbox(mailbox.get().getPath(), mailboxSession);
+                mailboxManager.deleteMailbox(mailbox.get().getPath(), session);
             }
         } catch (MailboxException e) {
             Throwables.propagate(e);
         }
     }
 
-    private Optional<MailboxMetaData> retrieveMailbox(final MailboxId mailboxId) throws MailboxException {
+    private Optional<MailboxMetaData> retrieveMailbox(final MailboxId mailboxId, MailboxSession mailboxSession) throws MailboxException {
         MailboxQuery userMailboxesQuery = MailboxQuery.builder(mailboxSession).expression("*").build();
         return FluentIterable.from(mailboxManager.search(userMailboxesQuery, mailboxSession))
             .filter(new Predicate<MailboxMetaData>() {

http://git-wip-us.apache.org/repos/asf/james-project/blob/36b0ef6e/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/MessageIdManagerTestSystemProvider.java
----------------------------------------------------------------------
diff --git a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/MessageIdManagerTestSystemProvider.java b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/MessageIdManagerTestSystemProvider.java
index 206c0d3..35736fe 100644
--- a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/MessageIdManagerTestSystemProvider.java
+++ b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/MessageIdManagerTestSystemProvider.java
@@ -18,22 +18,16 @@
  ****************************************************************/
 package org.apache.james.mailbox.inmemory;
 
-import org.apache.james.mailbox.MailboxSession;
-import org.apache.james.mailbox.MessageManager;
 import org.apache.james.mailbox.acl.GroupMembershipResolver;
 import org.apache.james.mailbox.acl.MailboxACLResolver;
 import org.apache.james.mailbox.acl.SimpleGroupMembershipResolver;
 import org.apache.james.mailbox.acl.UnionMailboxACLResolver;
-import org.apache.james.mailbox.exception.BadCredentialsException;
 import org.apache.james.mailbox.exception.MailboxException;
-import org.apache.james.mailbox.model.MailboxPath;
+import org.apache.james.mailbox.manager.MailboxManagerFixture;
 import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.store.FakeAuthenticator;
 import org.apache.james.mailbox.store.MessageIdManagerTestSystem;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
-import org.apache.james.mailbox.store.mail.model.impl.SimpleMailbox;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import com.google.common.base.Throwables;
 
@@ -41,39 +35,11 @@ public class MessageIdManagerTestSystemProvider {
 
     private static final int LIMIT_ANNOTATIONS = 3;
     private static final int LIMIT_ANNOTATION_SIZE = 30;
-    private static final int UID_VALIDITY = 1024;
-    private static final Logger LOGGER = LoggerFactory.getLogger(InMemoryMessageIdManagerStorageTest.class);
-    private static final String USER = "user";
-    private static final String OTHER_USER = "otheruser";
+
     private static final String PASSWORD = "password";
 
     public static MessageIdManagerTestSystem createTestingData() {
-        InMemoryMailboxManager mailboxManager = createMailboxManager();
-
-        MailboxSession mailboxSession = createMailboxSession(mailboxManager);
-        MailboxPath mailboxPath = new MailboxPath("#private", USER, "INBOX");
-        SimpleMailbox mailbox1 = createMailbox(mailboxManager, mailboxPath, mailboxSession);
-        MailboxPath mailboxPath2 = new MailboxPath("#private", USER, "mailbox2");
-        SimpleMailbox mailbox2 = createMailbox(mailboxManager, mailboxPath2, mailboxSession);
-        MailboxPath mailboxPath3 = new MailboxPath("#private", USER, "mailbox3");
-        SimpleMailbox mailbox3 = createMailbox(mailboxManager, mailboxPath3, mailboxSession);
-        MailboxPath mailboxPath4 = new MailboxPath("#public", OTHER_USER, "mailbox4");
-        SimpleMailbox mailbox4 = createMailbox(mailboxManager, mailboxPath4, mailboxSession);
-        return new InMemoryMessageIdManagerTestSystem(mailboxManager, mailboxSession, mailbox1, mailbox2, mailbox3, mailbox4);
-    }
-
-    private static MailboxSession createMailboxSession(InMemoryMailboxManager mailboxManager) {
-        return mailboxManager.createSystemSession(USER, LOGGER);
-    }
-
-    private static SimpleMailbox createMailbox(InMemoryMailboxManager mailboxManager, MailboxPath mailboxPath, MailboxSession mailboxSession) {
-        try {
-            mailboxManager.createMailbox(mailboxPath, mailboxSession);
-            MessageManager messageManager = mailboxManager.getMailbox(mailboxPath, mailboxSession);
-            return new SimpleMailbox(mailboxPath, UID_VALIDITY, messageManager.getId());
-        } catch (MailboxException e) {
-            throw Throwables.propagate(e);
-        }
+        return new InMemoryMessageIdManagerTestSystem(createMailboxManager());
     }
 
     private static InMemoryMailboxManager createMailboxManager() {
@@ -84,8 +50,8 @@ public class MessageIdManagerTestSystemProvider {
         InMemoryMailboxSessionMapperFactory mailboxSessionMapperFactory = new InMemoryMailboxSessionMapperFactory();
         MessageId.Factory messageIdFactory = new InMemoryMessageId.Factory();
         FakeAuthenticator authenticator = new FakeAuthenticator();
-        authenticator.addUser(USER, PASSWORD);
-        authenticator.addUser(OTHER_USER, PASSWORD);
+        authenticator.addUser(MailboxManagerFixture.USER, PASSWORD);
+        authenticator.addUser(MailboxManagerFixture.OTHER_USER, PASSWORD);
         InMemoryMailboxManager mailboxManager = new InMemoryMailboxManager(mailboxSessionMapperFactory, authenticator, 
                 aclResolver, groupMembershipResolver, messageParser, messageIdFactory, LIMIT_ANNOTATIONS, LIMIT_ANNOTATION_SIZE);
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/36b0ef6e/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageIdManager.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageIdManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageIdManager.java
index fcbc10a..6f436a1 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageIdManager.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageIdManager.java
@@ -31,7 +31,6 @@ import javax.mail.Flags;
 import javax.mail.internet.SharedInputStream;
 
 import org.apache.james.mailbox.MailboxSession;
-import org.apache.james.mailbox.MailboxSession.SessionType;
 import org.apache.james.mailbox.MessageIdManager;
 import org.apache.james.mailbox.MessageManager;
 import org.apache.james.mailbox.MessageUid;
@@ -274,12 +273,12 @@ public class StoreMessageIdManager implements MessageIdManager {
     }
 
     private void allowOnMailboxSession(List<MailboxId> mailboxIds, MailboxSession mailboxSession, MailboxMapper mailboxMapper) throws MailboxNotFoundException {
-        boolean isForbidden = FluentIterable.from(mailboxIds)
+        Optional<MailboxId> mailboxForbidden = FluentIterable.from(mailboxIds)
             .firstMatch(isMailboxOfOtherUser(mailboxSession, mailboxMapper))
-            .isPresent();
+            .or(Optional.<MailboxId>absent());
 
-        if (isForbidden) {
-            throw new MailboxNotFoundException("Mailbox does not belong to session: ");
+        if (mailboxForbidden.isPresent()) {
+            throw new MailboxNotFoundException("Mailbox with Id " + mailboxForbidden.get() + " does not belong to session");
         }
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/36b0ef6e/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
index 452d877..4a394d3 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
@@ -41,7 +41,6 @@ import org.apache.commons.io.input.TeeInputStream;
 import org.apache.james.mailbox.MailboxListener;
 import org.apache.james.mailbox.MailboxPathLocker;
 import org.apache.james.mailbox.MailboxSession;
-import org.apache.james.mailbox.MailboxSession.SessionType;
 import org.apache.james.mailbox.MailboxSession.User;
 import org.apache.james.mailbox.MessageManager;
 import org.apache.james.mailbox.MessageUid;
@@ -456,8 +455,7 @@ public class StoreMessageManager implements org.apache.james.mailbox.MessageMana
      * @throws MailboxException
      */
     public boolean isWriteable(MailboxSession session) throws MailboxException {
-        return session.getType() == SessionType.System
-            || aclResolver.isReadWrite(myRights(session), getSharedPermanentFlags(session));
+        return aclResolver.isReadWrite(myRights(session), getSharedPermanentFlags(session));
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/james-project/blob/36b0ef6e/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractMessageIdManagerSideEffectTest.java
----------------------------------------------------------------------
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 957d51d..ccf3aae 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
@@ -40,6 +40,7 @@ import org.apache.james.mailbox.MessageManager.FlagsUpdateMode;
 import org.apache.james.mailbox.MessageUid;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.exception.OverQuotaException;
+import org.apache.james.mailbox.manager.MailboxManagerFixture;
 import org.apache.james.mailbox.mock.MockMailboxSession;
 import org.apache.james.mailbox.model.FetchGroupImpl;
 import org.apache.james.mailbox.model.MailboxId;
@@ -63,7 +64,6 @@ import com.google.common.collect.FluentIterable;
 import com.google.common.collect.ImmutableList;
 
 public abstract class AbstractMessageIdManagerSideEffectTest {
-
     private static final Quota OVER_QUOTA = QuotaImpl.quota(102, 100);
     private static final MessageUid messageUid1 = MessageUid.of(111);
 
@@ -91,9 +91,10 @@ public abstract class AbstractMessageIdManagerSideEffectTest {
         session = new MockMailboxSession("user");
         testingData = createTestSystem(quotaManager, dispatcher);
         messageIdManager = testingData.getMessageIdManager();
-        mailbox1 = testingData.getMailbox1();
-        mailbox2 = testingData.getMailbox2();
-        mailbox3 = testingData.getMailbox3();
+
+        mailbox1 = testingData.createMailbox(MailboxManagerFixture.MAILBOX_PATH1, session);
+        mailbox2 = testingData.createMailbox(MailboxManagerFixture.MAILBOX_PATH2, session);
+        mailbox3 = testingData.createMailbox(MailboxManagerFixture.MAILBOX_PATH3, session);
     }
 
     @After
@@ -104,7 +105,7 @@ public abstract class AbstractMessageIdManagerSideEffectTest {
     @Test
     public void deleteShouldCallEventDispatcher() throws Exception {
         givenUnlimitedQuota();
-        MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS);
+        MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS, session);
         reset(dispatcher);
 
         MessageResult messageResult = messageIdManager.getMessages(ImmutableList.of(messageId), FetchGroupImpl.MINIMAL, session).get(0);
@@ -119,7 +120,7 @@ public abstract class AbstractMessageIdManagerSideEffectTest {
     @Test
     public void deleteShouldNotCallEventDispatcherWhenMessageIsInWrongMailbox() throws Exception {
         givenUnlimitedQuota();
-        MessageId messageId = testingData.persist(mailbox2.getMailboxId(), messageUid1, FLAGS);
+        MessageId messageId = testingData.persist(mailbox2.getMailboxId(), messageUid1, FLAGS, session);
         reset(dispatcher);
 
         messageIdManager.delete(messageId, ImmutableList.of(mailbox1.getMailboxId()), session);
@@ -130,7 +131,7 @@ public abstract class AbstractMessageIdManagerSideEffectTest {
     @Test
     public void setInMailboxesShouldNotCallDispatcherWhenMessageAlreadyInMailbox() throws Exception {
         givenUnlimitedQuota();
-        MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS);
+        MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS, session);
         reset(dispatcher);
 
         messageIdManager.setInMailboxes(messageId, ImmutableList.of(mailbox1.getMailboxId()), session);
@@ -141,7 +142,7 @@ public abstract class AbstractMessageIdManagerSideEffectTest {
     @Test
     public void setInMailboxesShouldCallDispatcher() throws Exception {
         givenUnlimitedQuota();
-        MessageId messageId = testingData.persist(mailbox2.getMailboxId(), messageUid1, FLAGS);
+        MessageId messageId = testingData.persist(mailbox2.getMailboxId(), messageUid1, FLAGS, session);
         reset(dispatcher);
 
         messageIdManager.setInMailboxes(messageId, ImmutableList.of(mailbox1.getMailboxId(), mailbox2.getMailboxId()), session);
@@ -159,7 +160,7 @@ public abstract class AbstractMessageIdManagerSideEffectTest {
     @Test
     public void setInMailboxesShouldCallDispatcherWithMultipleMailboxes() throws Exception {
         givenUnlimitedQuota();
-        MessageId messageId = testingData.persist(mailbox2.getMailboxId(), messageUid1, FLAGS);
+        MessageId messageId = testingData.persist(mailbox2.getMailboxId(), messageUid1, FLAGS, session);
         reset(dispatcher);
 
         messageIdManager.setInMailboxes(messageId, ImmutableList.of(mailbox1.getMailboxId(), mailbox2.getMailboxId(), mailbox3.getMailboxId()), session);
@@ -183,7 +184,7 @@ public abstract class AbstractMessageIdManagerSideEffectTest {
 
     @Test
     public void setInMailboxesShouldThrowExceptionWhenOverQuota() throws Exception {
-        MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS);
+        MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS, session);
         reset(dispatcher);
         when(quotaManager.getStorageQuota(any(QuotaRoot.class))).thenReturn(QuotaImpl.unlimited());
         when(quotaManager.getMessageQuota(any(QuotaRoot.class))).thenReturn(OVER_QUOTA);
@@ -197,7 +198,7 @@ public abstract class AbstractMessageIdManagerSideEffectTest {
     @Test
     public void setInMailboxesShouldCallDispatchForOnlyAddedAndRemovedMailboxes() throws Exception {
         givenUnlimitedQuota();
-        MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS);
+        MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS, session);
         messageIdManager.setInMailboxes(messageId, ImmutableList.of(mailbox1.getMailboxId(), mailbox2.getMailboxId()), session);
         reset(dispatcher);
 
@@ -214,7 +215,7 @@ public abstract class AbstractMessageIdManagerSideEffectTest {
     public void setFlagsShouldNotDispatchWhenFlagAlreadySet() throws Exception {
         givenUnlimitedQuota();
         Flags newFlags = new Flags(Flags.Flag.SEEN);
-        MessageId messageId = testingData.persist(mailbox2.getMailboxId(), messageUid1, newFlags);
+        MessageId messageId = testingData.persist(mailbox2.getMailboxId(), messageUid1, newFlags, session);
         reset(dispatcher);
 
         messageIdManager.setFlags(newFlags, MessageManager.FlagsUpdateMode.ADD, messageId, ImmutableList.of(mailbox2.getMailboxId()), session);
@@ -226,7 +227,7 @@ public abstract class AbstractMessageIdManagerSideEffectTest {
     public void setFlagsShouldNotDispatchWhenMessageAlreadyInMailbox() throws Exception {
         givenUnlimitedQuota();
         Flags newFlags = new Flags(Flags.Flag.SEEN);
-        MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, newFlags);
+        MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, newFlags, session);
         messageIdManager.setInMailboxes(messageId, ImmutableList.of(mailbox2.getMailboxId()), session);
         reset(dispatcher);
 
@@ -239,7 +240,7 @@ public abstract class AbstractMessageIdManagerSideEffectTest {
     public void setFlagsShouldNotDispatchWhenMessageDoesNotBelongToMailbox() throws Exception {
         givenUnlimitedQuota();
         Flags newFlags = new Flags(Flags.Flag.SEEN);
-        MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS);
+        MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS, session);
         reset(dispatcher);
 
         messageIdManager.setFlags(newFlags, MessageManager.FlagsUpdateMode.ADD, messageId, ImmutableList.of(mailbox2.getMailboxId()), session);
@@ -251,7 +252,7 @@ public abstract class AbstractMessageIdManagerSideEffectTest {
     public void setFlagsShouldNotDispatchWhenEmptyMailboxes() throws Exception {
         givenUnlimitedQuota();
         Flags newFlags = new Flags(Flags.Flag.SEEN);
-        MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS);
+        MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS, session);
         reset(dispatcher);
 
         messageIdManager.setFlags(newFlags, MessageManager.FlagsUpdateMode.ADD, messageId, ImmutableList.<MailboxId>of(), session);
@@ -263,7 +264,7 @@ public abstract class AbstractMessageIdManagerSideEffectTest {
     public void setFlagsShouldDispatchWhenMessageBelongsToAllMailboxes() throws Exception {
         givenUnlimitedQuota();
         Flags newFlags = new Flags(Flags.Flag.SEEN);
-        MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS);
+        MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS, session);
         messageIdManager.setInMailboxes(messageId, ImmutableList.of(mailbox1.getMailboxId(), mailbox2.getMailboxId()), session);
         reset(dispatcher);
 
@@ -276,7 +277,7 @@ public abstract class AbstractMessageIdManagerSideEffectTest {
     @Test
     public void setFlagsShouldDispatchWhenMessageBelongsToTheMailboxes() throws Exception {
         givenUnlimitedQuota();
-        MessageId messageId = testingData.persist(mailbox2.getMailboxId(), messageUid1, FLAGS);
+        MessageId messageId = testingData.persist(mailbox2.getMailboxId(), messageUid1, FLAGS, session);
         reset(dispatcher);
 
         Flags newFlags = new Flags(Flags.Flag.SEEN);

http://git-wip-us.apache.org/repos/asf/james-project/blob/36b0ef6e/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractMessageIdManagerStorageTest.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractMessageIdManagerStorageTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractMessageIdManagerStorageTest.java
index b8c8565..97d35fe 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractMessageIdManagerStorageTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractMessageIdManagerStorageTest.java
@@ -33,6 +33,7 @@ import org.apache.james.mailbox.MessageIdManager;
 import org.apache.james.mailbox.MessageManager;
 import org.apache.james.mailbox.MessageUid;
 import org.apache.james.mailbox.exception.MailboxNotFoundException;
+import org.apache.james.mailbox.manager.MailboxManagerFixture;
 import org.apache.james.mailbox.mock.MockMailboxSession;
 import org.apache.james.mailbox.model.FetchGroupImpl;
 import org.apache.james.mailbox.model.MailboxId;
@@ -54,8 +55,8 @@ import com.google.common.collect.ImmutableMap;
 public abstract class AbstractMessageIdManagerStorageTest {
     public static final Flags FLAGS = new Flags();
 
-    private static final MailboxSession OTHER_USER = new MockMailboxSession("otheruser");
     private static final MailboxSession SYSTEM_USER = new MockMailboxSession("systemuser", SessionType.System);
+
     private static final MessageUid messageUid1 = MessageUid.of(111);
     private static final MessageUid messageUid2 = MessageUid.of(222);
 
@@ -93,6 +94,7 @@ public abstract class AbstractMessageIdManagerStorageTest {
     private Mailbox mailbox3;
     private Mailbox mailbox4;
     private MailboxSession session;
+    private MailboxSession otherSession;
 
     @Rule
     public ExpectedException expectedException = ExpectedException.none();
@@ -101,14 +103,15 @@ public abstract class AbstractMessageIdManagerStorageTest {
 
     @Before
     public void setUp() throws Exception {
+        session = new MockMailboxSession(MailboxManagerFixture.USER);
+        otherSession = new MockMailboxSession(MailboxManagerFixture.OTHER_USER);
         testingData = createTestingData();
         messageIdManager = testingData.getMessageIdManager();
-        mailbox1 = testingData.getMailbox1();
-        mailbox2 = testingData.getMailbox2();
-        mailbox3 = testingData.getMailbox3();
-        mailbox4 = testingData.getMailbox4();
 
-        session = new MockMailboxSession("user");
+        mailbox1 = testingData.createMailbox(MailboxManagerFixture.MAILBOX_PATH1, session);
+        mailbox2 = testingData.createMailbox(MailboxManagerFixture.MAILBOX_PATH2, session);
+        mailbox3 = testingData.createMailbox(MailboxManagerFixture.MAILBOX_PATH3, session);
+        mailbox4 = testingData.createMailbox(MailboxManagerFixture.MAILBOX_PATH4, otherSession);
     }
 
     @After
@@ -147,31 +150,23 @@ public abstract class AbstractMessageIdManagerStorageTest {
 
     @Test
     public void getMessagesShouldReturnStoredResults() throws Exception {
-        MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS);
+        MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS, session);
 
         assertThat(messageIdManager.getMessages(ImmutableList.of(messageId), FetchGroupImpl.MINIMAL, session))
             .hasSize(1);
     }
 
     @Test
-    public void getMessageShouldReturnMessageBelongToUser() throws Exception {
-        MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS);
+    public void getMessageShouldReturnOnlyMessageBelongingToCurrentUser() throws Exception {
+        MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS, session);
 
         assertThat(messageIdManager.getMessages(ImmutableList.of(messageId), FetchGroupImpl.MINIMAL, session)).hasSize(1);
-        assertThat(messageIdManager.getMessages(ImmutableList.of(messageId), FetchGroupImpl.MINIMAL, OTHER_USER)).isEmpty();
-    }
-
-    @Test
-    public void getMessageShouldReturnAllWithSystemSession() throws Exception {
-        MessageId messageId = testingData.persist(mailbox4.getMailboxId(), messageUid1, FLAGS);
-
-        assertThat(messageIdManager.getMessages(ImmutableList.of(messageId), FetchGroupImpl.MINIMAL, session)).isEmpty();;
-        assertThat(messageIdManager.getMessages(ImmutableList.of(messageId), FetchGroupImpl.MINIMAL, SYSTEM_USER)).hasSize(1);
+        assertThat(messageIdManager.getMessages(ImmutableList.of(messageId), FetchGroupImpl.MINIMAL, otherSession)).isEmpty();
     }
 
     @Test
     public void setInMailboxesShouldSetMessageInBothMailboxes() throws Exception {
-        MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS);
+        MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS, session);
 
         messageIdManager.setInMailboxes(messageId, ImmutableList.of(mailbox1.getMailboxId(), mailbox2.getMailboxId()), session);
 
@@ -181,7 +176,7 @@ public abstract class AbstractMessageIdManagerStorageTest {
 
     @Test
     public void setInMailboxesShouldNotDuplicateMessageIfSameMailbox() throws Exception {
-        MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS);
+        MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS, session);
 
         messageIdManager.setInMailboxes(messageId, ImmutableList.of(mailbox1.getMailboxId()), session);
 
@@ -191,8 +186,8 @@ public abstract class AbstractMessageIdManagerStorageTest {
 
     @Test
     public void setInMailboxesShouldSetHighestUidInNewMailbox() throws Exception {
-        MessageId messageId1 = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS);
-        MessageId messageId2 = testingData.persist(mailbox2.getMailboxId(), messageUid2, FLAGS);
+        MessageId messageId1 = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS, session);
+        MessageId messageId2 = testingData.persist(mailbox2.getMailboxId(), messageUid2, FLAGS, session);
 
         messageIdManager.setInMailboxes(messageId2, ImmutableList.of(mailbox1.getMailboxId()), session);
 
@@ -211,8 +206,8 @@ public abstract class AbstractMessageIdManagerStorageTest {
 
     @Test
     public void setInMailboxesShouldSetHighestModSeqInNewMailbox() throws Exception {
-        MessageId messageId1 = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS);
-        MessageId messageId2 = testingData.persist(mailbox2.getMailboxId(), messageUid2, FLAGS);
+        MessageId messageId1 = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS, session);
+        MessageId messageId2 = testingData.persist(mailbox2.getMailboxId(), messageUid2, FLAGS, session);
 
         messageIdManager.setInMailboxes(messageId2, ImmutableList.of(mailbox1.getMailboxId(), mailbox2.getMailboxId()), session);
 
@@ -231,7 +226,7 @@ public abstract class AbstractMessageIdManagerStorageTest {
 
     @Test
     public void setInMailboxesShouldNotChangeUidAndModSeqInOriginalMailbox() throws Exception {
-        MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS);
+        MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS, session);
         MessageResult messageResult1 = messageIdManager.getMessages(ImmutableList.of(messageId), FetchGroupImpl.MINIMAL, session).get(0);
         MessageUid messageUid1 = messageResult1.getUid();
         long modSeq1 = messageResult1.getModSeq();
@@ -252,7 +247,7 @@ public abstract class AbstractMessageIdManagerStorageTest {
 
     @Test
     public void setInMailboxesShouldAddAndRemoveMailboxes() throws Exception {
-        MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS);
+        MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS, session);
         messageIdManager.setInMailboxes(messageId, ImmutableList.of(mailbox1.getMailboxId(), mailbox2.getMailboxId()), session);
         messageIdManager.setInMailboxes(messageId, ImmutableList.of(mailbox1.getMailboxId(), mailbox3.getMailboxId()), session);
 
@@ -266,7 +261,7 @@ public abstract class AbstractMessageIdManagerStorageTest {
     @Test
     public void setInMailboxesShouldReplaceFlagsOfMessageInAddedMailboxes() throws Exception {
         Flags newFlags = new Flags(Flags.Flag.SEEN);
-        MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS);
+        MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS, session);
         messageIdManager.setInMailboxes(messageId, ImmutableList.of(mailbox1.getMailboxId(), mailbox2.getMailboxId()), session);
         messageIdManager.setFlags(newFlags, MessageManager.FlagsUpdateMode.ADD, messageId, ImmutableList.of(mailbox1.getMailboxId(), mailbox2.getMailboxId()), session);
 
@@ -284,23 +279,23 @@ public abstract class AbstractMessageIdManagerStorageTest {
     public void setInMailboxesShouldThrowExceptionWhenSetInMailboxesInAnotherSession() throws Exception {
         expectedException.expect(MailboxNotFoundException.class);
 
-        MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS);
+        MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS, session);
 
-        messageIdManager.setInMailboxes(messageId, ImmutableList.of(mailbox1.getMailboxId(), mailbox2.getMailboxId()), OTHER_USER);
+        messageIdManager.setInMailboxes(messageId, ImmutableList.of(mailbox1.getMailboxId(), mailbox2.getMailboxId()), otherSession);
     }
 
     @Test
     public void setInMailboxesShouldThrowExceptionWhenOneMailboxDoesNotBelongToMailboxSession() throws Exception {
         expectedException.expect(MailboxNotFoundException.class);
 
-        MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS);
+        MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS, session);
 
         messageIdManager.setInMailboxes(messageId, ImmutableList.of(mailbox1.getMailboxId(), mailbox4.getMailboxId()), session);
     }
 
     @Test
     public void setInMailboxesShouldIgnoreMessagesBelongingToOtherUsers() throws Exception {
-        MessageId messageId = testingData.persist(mailbox4.getMailboxId(), messageUid1, FLAGS);
+        MessageId messageId = testingData.persist(mailbox4.getMailboxId(), messageUid1, FLAGS, otherSession);
 
         messageIdManager.setInMailboxes(messageId, ImmutableList.of(mailbox1.getMailboxId()), session);
 
@@ -308,18 +303,8 @@ public abstract class AbstractMessageIdManagerStorageTest {
     }
 
     @Test
-    public void setInMailboxesShouldSetMessageWhenSystemSession() throws Exception {
-        MessageId messageId = testingData.persist(mailbox4.getMailboxId(), messageUid1, FLAGS);
-
-        messageIdManager.setInMailboxes(messageId, ImmutableList.of(mailbox1.getMailboxId()), SYSTEM_USER);
-
-        assertThat(messageIdManager.getMessages(ImmutableList.of(messageId), FetchGroupImpl.MINIMAL, session)).hasSize(1);
-        assertThat(messageIdManager.getMessages(ImmutableList.of(messageId), FetchGroupImpl.MINIMAL, SYSTEM_USER)).hasSize(1);
-    }
-
-    @Test
     public void deleteMessageShouldRemoveMessageFromMailbox() throws Exception {
-        MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS);
+        MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS, session);
 
         messageIdManager.delete(messageId, ImmutableList.of(mailbox1.getMailboxId()), session);
 
@@ -328,7 +313,7 @@ public abstract class AbstractMessageIdManagerStorageTest {
 
     @Test
     public void deleteMessageShouldRemoveMessageOnlyFromMailbox() throws Exception {
-        MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS);
+        MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS, session);
         messageIdManager.setInMailboxes(messageId, ImmutableList.of(mailbox1.getMailboxId(), mailbox2.getMailboxId()), session);
 
         messageIdManager.delete(messageId, ImmutableList.of(mailbox1.getMailboxId()), session);
@@ -340,7 +325,7 @@ public abstract class AbstractMessageIdManagerStorageTest {
 
     @Test
     public void deleteMessageShouldNotRemoveMessageOnAnotherMailbox() throws Exception {
-        MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS);
+        MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS, session);
 
         messageIdManager.delete(messageId, ImmutableList.of(mailbox2.getMailboxId()), session);
 
@@ -353,24 +338,25 @@ public abstract class AbstractMessageIdManagerStorageTest {
     public void deleteMessageShouldThrowExceptionWhenDeletingOnOtherSession() throws Exception {
         expectedException.expect(MailboxNotFoundException.class);
 
-        MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS);
+        MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS, session);
 
-        messageIdManager.delete(messageId, ImmutableList.of(mailbox1.getMailboxId()), OTHER_USER);
+        messageIdManager.delete(messageId, ImmutableList.of(mailbox1.getMailboxId()), otherSession);
     }
 
     @Test
-    public void deleteMessageShouldWorkWhenDeletingOnSystemSession() throws Exception {
-        MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS);
+    public void deleteMessageShouldThrowExceptionWhenDeletingOnSystemSession() throws Exception {
+        expectedException.expect(MailboxNotFoundException.class);
 
-        messageIdManager.delete(messageId, ImmutableList.of(mailbox1.getMailboxId()), SYSTEM_USER);
+        MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS, session);
 
-        assertThat(messageIdManager.getMessages(ImmutableList.of(messageId), FetchGroupImpl.MINIMAL, session)).isEmpty();
+        messageIdManager.delete(messageId, ImmutableList.of(mailbox1.getMailboxId()), SYSTEM_USER);
     }
 
     @Test
     public void deleteMessageShouldThrowExceptionWhenOneMailboxDoesNotBelongToUser() throws Exception {
         expectedException.expect(MailboxNotFoundException.class);
-        MessageId messageId = testingData.persist(mailbox4.getMailboxId(), messageUid1, FLAGS);
+
+        MessageId messageId = testingData.persist(mailbox4.getMailboxId(), messageUid1, FLAGS, otherSession);
 
         messageIdManager.delete(messageId, ImmutableList.of(mailbox4.getMailboxId()), session);
     }
@@ -378,7 +364,7 @@ public abstract class AbstractMessageIdManagerStorageTest {
     @Test
     public void setFlagsShouldUpdateFlags() throws Exception {
         Flags newFlags = new Flags(Flags.Flag.SEEN);
-        MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS);
+        MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS, session);
 
         messageIdManager.setFlags(newFlags, MessageManager.FlagsUpdateMode.ADD, messageId, ImmutableList.of(mailbox1.getMailboxId()), session);
 
@@ -389,7 +375,7 @@ public abstract class AbstractMessageIdManagerStorageTest {
     @Test
     public void setFlagsShouldNotChangeTheUid() throws Exception {
         Flags newFlags = new Flags(Flags.Flag.SEEN);
-        MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS);
+        MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS, session);
 
         MessageResult messageResult1 = messageIdManager.getMessages(ImmutableList.of(messageId), FetchGroupImpl.MINIMAL, session).get(0);
         MessageUid messageUid1 = messageResult1.getUid();
@@ -405,7 +391,7 @@ public abstract class AbstractMessageIdManagerStorageTest {
     @Test
     public void setFlagsShouldChangeTheModSeq() throws Exception {
         Flags newFlags = new Flags(Flags.Flag.SEEN);
-        MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS);
+        MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS, session);
 
         MessageResult messageResult1 = messageIdManager.getMessages(ImmutableList.of(messageId), FetchGroupImpl.MINIMAL, session).get(0);
         long modSeq1 = messageResult1.getModSeq();
@@ -421,7 +407,7 @@ public abstract class AbstractMessageIdManagerStorageTest {
     @Test
     public void setFlagsShouldChangeFlagsInAllMailboxes() throws Exception {
         Flags newFlags = new Flags(Flags.Flag.SEEN);
-        MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS);
+        MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS, session);
         messageIdManager.setInMailboxes(messageId, ImmutableList.of(mailbox1.getMailboxId(), mailbox2.getMailboxId()), session);
 
         messageIdManager.setFlags(newFlags, MessageManager.FlagsUpdateMode.ADD, messageId, ImmutableList.of(mailbox1.getMailboxId(), mailbox2.getMailboxId()), session);
@@ -439,8 +425,8 @@ public abstract class AbstractMessageIdManagerStorageTest {
     @Test
     public void setFlagsShouldNotChangeFlagsOfAnotherMessageInSameMailbox() throws Exception {
         Flags newFlags = new Flags(Flags.Flag.SEEN);
-        MessageId messageId1 = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS);
-        MessageId messageId2 = testingData.persist(mailbox1.getMailboxId(), messageUid2, FLAGS);
+        MessageId messageId1 = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS, session);
+        MessageId messageId2 = testingData.persist(mailbox1.getMailboxId(), messageUid2, FLAGS, session);
 
         messageIdManager.setFlags(newFlags, MessageManager.FlagsUpdateMode.ADD, messageId2, ImmutableList.of(mailbox1.getMailboxId()), session);
         
@@ -456,7 +442,7 @@ public abstract class AbstractMessageIdManagerStorageTest {
     @Test
     public void setFlagsShouldNotChangeFlagsWhenEmptyMailboxes() throws Exception {
         Flags newFlags = new Flags(Flags.Flag.SEEN);
-        MessageId messageId1 = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS);
+        MessageId messageId1 = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS, session);
 
         messageIdManager.setFlags(newFlags, MessageManager.FlagsUpdateMode.ADD, messageId1, ImmutableList.<MailboxId>of(), session);
 
@@ -472,7 +458,7 @@ public abstract class AbstractMessageIdManagerStorageTest {
     @Test
     public void setFlagsShouldNotChangeFlagsWhenMessageDoesNotBelongToTheMailboxes() throws Exception {
         Flags newFlags = new Flags(Flags.Flag.SEEN);
-        MessageId messageId1 = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS);
+        MessageId messageId1 = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS, session);
 
         messageIdManager.setFlags(newFlags, MessageManager.FlagsUpdateMode.ADD, messageId1, ImmutableList.of(mailbox2.getMailboxId()), session);
 
@@ -488,8 +474,8 @@ public abstract class AbstractMessageIdManagerStorageTest {
     @Test
     public void setFlagsShouldChangeFlagsWhenMessageBelongsToTheMailboxes() throws Exception {
         Flags newFlags = new Flags(Flags.Flag.SEEN);
-        MessageId messageId1 = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS);
-        MessageId messageId2 = testingData.persist(mailbox2.getMailboxId(), messageUid2, FLAGS);
+        MessageId messageId1 = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS, session);
+        MessageId messageId2 = testingData.persist(mailbox2.getMailboxId(), messageUid2, FLAGS, session);
 
         messageIdManager.setFlags(newFlags, MessageManager.FlagsUpdateMode.ADD, messageId1, ImmutableList.of(mailbox1.getMailboxId(), mailbox2.getMailboxId()), session);
 
@@ -512,32 +498,26 @@ public abstract class AbstractMessageIdManagerStorageTest {
         expectedException.expect(MailboxNotFoundException.class);
 
         Flags newFlags = new Flags(Flags.Flag.SEEN);
-        MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS);
+        MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS, session);
 
-        messageIdManager.setFlags(newFlags, MessageManager.FlagsUpdateMode.ADD, messageId, ImmutableList.of(mailbox1.getMailboxId()), OTHER_USER);
+        messageIdManager.setFlags(newFlags, MessageManager.FlagsUpdateMode.ADD, messageId, ImmutableList.of(mailbox1.getMailboxId()), otherSession);
     }
 
     @Test
-    public void setFlagsShouldShouldWorkWhenSetFlagsOnSystemSession() throws Exception {
+    public void setFlagsShouldThrowExceptionWhenSetFlagsOnSystemSession() throws Exception {
+        expectedException.expect(MailboxNotFoundException.class);
+
         Flags newFlags = new Flags(Flags.Flag.SEEN);
-        MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS);
+        MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS, session);
 
         messageIdManager.setFlags(newFlags, MessageManager.FlagsUpdateMode.ADD, messageId, ImmutableList.of(mailbox1.getMailboxId()), SYSTEM_USER);
-
-        List<Flags> flags = FluentIterable
-            .from(messageIdManager.getMessages(ImmutableList.of(messageId), FetchGroupImpl.MINIMAL, session))
-            .transform(getFlags())
-            .toList();
-
-        assertThat(flags).hasSize(1);
-        assertThat(flags.get(0)).isEqualTo(newFlags);
     }
 
     @Test
     public void setFlagsShouldThrowExceptionWhenMailboxDoesNotBelongToMailboxSession() throws Exception {
         expectedException.expect(MailboxNotFoundException.class);
         Flags newFlags = new Flags(Flags.Flag.SEEN);
-        MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS);
+        MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS, session);
 
         messageIdManager.setFlags(newFlags, MessageManager.FlagsUpdateMode.ADD, messageId, ImmutableList.of(mailbox1.getMailboxId(), mailbox4.getMailboxId()), session);
 
@@ -545,19 +525,19 @@ public abstract class AbstractMessageIdManagerStorageTest {
 
     @Test
     public void getMessageShouldBeEmptyWhenMessageHasNoMoreMailboxes() throws Exception {
-        MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS);
+        MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS, session);
 
-        testingData.deleteMailbox(mailbox1.getMailboxId());
+        testingData.deleteMailbox(mailbox1.getMailboxId(), session);
 
         assertThat(messageIdManager.getMessages(ImmutableList.of(messageId), FetchGroupImpl.MINIMAL, session)).isEmpty();
     }
 
     @Test
     public void setInMailboxesShouldPreserveMessageFromOneMailboxDeletion() throws Exception {
-        MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS);
+        MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS, session);
         messageIdManager.setInMailboxes(messageId, ImmutableList.of(mailbox2.getMailboxId()), session);
 
-        testingData.deleteMailbox(mailbox1.getMailboxId());
+        testingData.deleteMailbox(mailbox1.getMailboxId(), session);
 
         List<MessageResult> messageResults = messageIdManager.getMessages(ImmutableList.of(messageId), FetchGroupImpl.MINIMAL, session);
         assertThat(messageResults).hasSize(1);

http://git-wip-us.apache.org/repos/asf/james-project/blob/36b0ef6e/mailbox/store/src/test/java/org/apache/james/mailbox/store/MessageIdManagerTestSystem.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/MessageIdManagerTestSystem.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/MessageIdManagerTestSystem.java
index 06f1a1e..eeae592 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/MessageIdManagerTestSystem.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/MessageIdManagerTestSystem.java
@@ -24,48 +24,25 @@ import javax.mail.Flags;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageIdManager;
 import org.apache.james.mailbox.MessageUid;
+import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.MailboxId;
+import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
 
 public abstract class MessageIdManagerTestSystem {
 
     private final MessageIdManager messageIdManager;
-    private final MailboxSession session;
-    private final Mailbox mailbox1;
-    private final Mailbox mailbox2;
-    private final Mailbox mailbox3;
-    private final Mailbox mailbox4;
 
-    public MessageIdManagerTestSystem(MessageIdManager messageIdManager, MailboxSession session, 
-            Mailbox mailbox1, Mailbox mailbox2, Mailbox mailbox3, Mailbox mailbox4) {
+    public MessageIdManagerTestSystem(MessageIdManager messageIdManager) {
         this.messageIdManager = messageIdManager;
-        this.session = session;
-        this.mailbox1 = mailbox1;
-        this.mailbox2 = mailbox2;
-        this.mailbox3 = mailbox3;
-        this.mailbox4 = mailbox4;
     }
 
     public MessageIdManager getMessageIdManager() {
         return messageIdManager;
     }
 
-    public Mailbox getMailbox1() {
-        return mailbox1;
-    }
-
-    public Mailbox getMailbox2() {
-        return mailbox2;
-    }
-
-    public Mailbox getMailbox3() {
-        return mailbox3;
-    }
-
-    public Mailbox getMailbox4() {
-        return mailbox4;
-    }
+    public abstract Mailbox createMailbox(MailboxPath mailboxPath, MailboxSession session) throws MailboxException;
 
     /**
      * Should take care of find returning the MailboxMessage
@@ -77,11 +54,11 @@ public abstract class MessageIdManagerTestSystem {
      * @param flags
      * @return the id of persisted message
      */
-    public abstract MessageId persist(MailboxId mailboxId, MessageUid uid, Flags flags);
+    public abstract MessageId persist(MailboxId mailboxId, MessageUid uid, Flags flags, MailboxSession session);
 
     public abstract MessageId createNotUsedMessageId();
 
-    public abstract void deleteMailbox(MailboxId mailboxId);
+    public abstract void deleteMailbox(MailboxId mailboxId, MailboxSession session);
 
     public abstract void clean();
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/36b0ef6e/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMessageIdManagerSideEffectTest.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMessageIdManagerSideEffectTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMessageIdManagerSideEffectTest.java
index bfc0f93..d4445e9 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMessageIdManagerSideEffectTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMessageIdManagerSideEffectTest.java
@@ -38,10 +38,6 @@ public class StoreMessageIdManagerSideEffectTest extends AbstractMessageIdManage
             quotaManager, new DefaultQuotaRootResolver(testMailboxSessionMapperFactory));
 
         return new StoreMessageIdManagerTestSystem(messageIdManager,
-            testMailboxSessionMapperFactory.getMailbox1(),
-            testMailboxSessionMapperFactory.getMailbox2(),
-            testMailboxSessionMapperFactory.getMailbox3(),
-            testMailboxSessionMapperFactory.getMailbox4(),
             messageIdFactory,
             testMailboxSessionMapperFactory);
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/36b0ef6e/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMessageIdManagerTestSystem.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMessageIdManagerTestSystem.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMessageIdManagerTestSystem.java
index 5c2d84e..7c0c1fa 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMessageIdManagerTestSystem.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMessageIdManagerTestSystem.java
@@ -35,6 +35,7 @@ import org.apache.james.mailbox.MessageUid;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.mock.MockMailboxSession;
 import org.apache.james.mailbox.model.MailboxId;
+import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
 import org.apache.james.mailbox.store.mail.model.MailboxMessage;
@@ -42,26 +43,30 @@ import org.apache.james.mailbox.store.mail.model.MailboxMessage;
 import com.google.common.base.Throwables;
 
 public class StoreMessageIdManagerTestSystem extends MessageIdManagerTestSystem {
-    private static final MailboxSession EMPTY_MAILBOX_SESSION = new MockMailboxSession("user", SessionType.System);
+    private static final MailboxSession DEFAULT_MAILBOX_SESSION = new MockMailboxSession("user", SessionType.System);
     private static final long MOD_SEQ = 18;
     private static final ByteArrayInputStream ARRAY_INPUT_STREAM = new ByteArrayInputStream("".getBytes());
 
     private final MessageId.Factory messageIdFactory;
     private final TestMailboxSessionMapperFactory mapperFactory;
 
-    public StoreMessageIdManagerTestSystem(MessageIdManager messageIdManager, Mailbox mailbox1, Mailbox mailbox2, Mailbox mailbox3, Mailbox mailbox4,
-                                           MessageId.Factory messageIdFactory, TestMailboxSessionMapperFactory mapperFactory) {
-        super(messageIdManager, EMPTY_MAILBOX_SESSION, mailbox1, mailbox2, mailbox3, mailbox4);
+    public StoreMessageIdManagerTestSystem(MessageIdManager messageIdManager, MessageId.Factory messageIdFactory, TestMailboxSessionMapperFactory mapperFactory) {
+        super(messageIdManager);
 
         this.messageIdFactory = messageIdFactory;
         this.mapperFactory = mapperFactory;
     }
 
     @Override
-    public MessageId persist(MailboxId mailboxId, MessageUid uid, Flags flags) {
+    public Mailbox createMailbox(MailboxPath mailboxPath, MailboxSession session) throws MailboxException{
+        return mapperFactory.createMailboxMapper(session).findMailboxByPath(mailboxPath);
+    }
+
+    @Override
+    public MessageId persist(MailboxId mailboxId, MessageUid uid, Flags flags, MailboxSession session) {
         MessageId messageId = messageIdFactory.generate();
         try {
-            mapperFactory.createMessageIdMapper(EMPTY_MAILBOX_SESSION)
+            mapperFactory.createMessageIdMapper(DEFAULT_MAILBOX_SESSION)
                 .save(createMessage(mailboxId, flags, messageId, uid));
             return messageId;
         } catch (MailboxException e) {
@@ -70,7 +75,7 @@ public class StoreMessageIdManagerTestSystem extends MessageIdManagerTestSystem
     }
 
     @Override
-    public void deleteMailbox(MailboxId mailboxId) {
+    public void deleteMailbox(MailboxId mailboxId, MailboxSession mailboxSession) {
         throw new NotImplementedException();
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/36b0ef6e/mailbox/store/src/test/java/org/apache/james/mailbox/store/TestMailboxSessionMapperFactory.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/TestMailboxSessionMapperFactory.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/TestMailboxSessionMapperFactory.java
index 9e8e236..e90e982 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/TestMailboxSessionMapperFactory.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/TestMailboxSessionMapperFactory.java
@@ -36,6 +36,7 @@ import org.apache.james.mailbox.MessageManager;
 import org.apache.james.mailbox.MessageUid;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.exception.SubscriptionException;
+import org.apache.james.mailbox.manager.MailboxManagerFixture;
 import org.apache.james.mailbox.model.MailboxACL;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MailboxPath;
@@ -70,15 +71,18 @@ public class TestMailboxSessionMapperFactory extends MailboxSessionMapperFactory
     private final SimpleMailbox mailbox2;
     private final SimpleMailbox mailbox3;
     private final SimpleMailbox mailbox4;
+
     private final List<MailboxMessage> messages = new ArrayList<MailboxMessage>();
     private final MailboxMapper mailboxMapper;
     private final MessageIdMapper messageIdMapper;
 
     public TestMailboxSessionMapperFactory() {
-        mailbox1 = new SimpleMailbox(new MailboxPath("#private", "user", "INBOX"), UID_VALIDITY, TestId.of(36));
-        mailbox2 = new SimpleMailbox(new MailboxPath("#private", "user", "OUTBOX"), UID_VALIDITY, TestId.of(46));
-        mailbox3 = new SimpleMailbox(new MailboxPath("#private", "user", "SENT"), UID_VALIDITY, TestId.of(56));
-        mailbox4 = new SimpleMailbox(new MailboxPath("#public", "otheruser", "INBOX"), UID_VALIDITY, TestId.of(66));
+
+
+        mailbox1 = new SimpleMailbox(MailboxManagerFixture.MAILBOX_PATH1, UID_VALIDITY, TestId.of(36));
+        mailbox2 = new SimpleMailbox(MailboxManagerFixture.MAILBOX_PATH2, UID_VALIDITY, TestId.of(46));
+        mailbox3 = new SimpleMailbox(MailboxManagerFixture.MAILBOX_PATH3, UID_VALIDITY, TestId.of(56));
+        mailbox4 = new SimpleMailbox(MailboxManagerFixture.MAILBOX_PATH4, UID_VALIDITY, TestId.of(66));
 
         mailboxMapper = new MailboxMapper() {
             @Override
@@ -94,7 +98,19 @@ public class TestMailboxSessionMapperFactory extends MailboxSessionMapperFactory
 
             @Override
             public Mailbox findMailboxByPath(MailboxPath mailboxName) throws MailboxException {
-                throw new NotImplementedException();
+                if (mailboxName.equals(MailboxManagerFixture.MAILBOX_PATH1)) {
+                    return mailbox1;
+                }
+                if (mailboxName.equals(MailboxManagerFixture.MAILBOX_PATH2)) {
+                    return mailbox2;
+                }
+                if (mailboxName.equals(MailboxManagerFixture.MAILBOX_PATH3)) {
+                    return mailbox3;
+                }
+                throw new IllegalArgumentException("Unknown mailbox : " + mailboxName + " must be one of "
+                    + MailboxManagerFixture.MAILBOX_PATH1 + " "
+                    + MailboxManagerFixture.MAILBOX_PATH2 + " "
+                    + MailboxManagerFixture.MAILBOX_PATH3);
             }
 
             @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/36b0ef6e/mailet/base/src/test/java/org/apache/mailet/base/MailAddressFixture.java
----------------------------------------------------------------------
diff --git a/mailet/base/src/test/java/org/apache/mailet/base/MailAddressFixture.java b/mailet/base/src/test/java/org/apache/mailet/base/MailAddressFixture.java
index d3ffb36..ca1725d 100644
--- a/mailet/base/src/test/java/org/apache/mailet/base/MailAddressFixture.java
+++ b/mailet/base/src/test/java/org/apache/mailet/base/MailAddressFixture.java
@@ -26,7 +26,6 @@ import org.apache.mailet.MailAddress;
 import com.google.common.base.Throwables;
 
 public class MailAddressFixture {
-
     public static final String JAMES_LOCAL = "localhost";
     public static final String JAMES_APACHE_ORG = "james.apache.org";
     public static final String JAMES2_APACHE_ORG = "james2.apache.org";


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


[2/4] james-project git commit: JAMES-1888: MockMailboxSession allows to create system session

Posted by ro...@apache.org.
JAMES-1888: MockMailboxSession allows to create system session


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

Branch: refs/heads/master
Commit: cc8bac6884908ff33960bfe4d3cc4e2113a81480
Parents: 82f4b30
Author: Quynh Nguyen <qn...@linagora.com>
Authored: Mon Dec 19 16:38:02 2016 +0700
Committer: Quynh Nguyen <qn...@linagora.com>
Committed: Wed Dec 21 09:08:18 2016 +0700

----------------------------------------------------------------------
 .../org/apache/james/mailbox/mock/MockMailboxSession.java   | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/cc8bac68/mailbox/api/src/test/java/org/apache/james/mailbox/mock/MockMailboxSession.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/mock/MockMailboxSession.java b/mailbox/api/src/test/java/org/apache/james/mailbox/mock/MockMailboxSession.java
index 9a241a7..be13c68 100644
--- a/mailbox/api/src/test/java/org/apache/james/mailbox/mock/MockMailboxSession.java
+++ b/mailbox/api/src/test/java/org/apache/james/mailbox/mock/MockMailboxSession.java
@@ -39,6 +39,7 @@ public class MockMailboxSession implements MailboxSession{
     private final static Random RANDOM = new Random();
 
     private final long sessionId = RANDOM.nextLong();
+    private SessionType type = SessionType.User;
     
     public MockMailboxSession(final String username) {
         this.user = new User() {
@@ -64,7 +65,11 @@ public class MockMailboxSession implements MailboxSession{
             }
         };
     }
-    
+
+    public MockMailboxSession(final String username, SessionType type) {
+        this(username);
+        this.type = type;
+    }
     public void close() {
         this.close = true;
     }
@@ -106,7 +111,7 @@ public class MockMailboxSession implements MailboxSession{
 	}
 
     public SessionType getType() {
-        return SessionType.User;
+        return type;
     }
 
 }


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


[3/4] james-project git commit: JAMES-1888: Add more testing on MessageIdManager with different user sessions.

Posted by ro...@apache.org.
JAMES-1888: Add more testing on MessageIdManager with different user sessions.


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

Branch: refs/heads/master
Commit: 81832aed62b571e454f76e35fa65d7cc00a7999e
Parents: cc8bac6
Author: Quynh Nguyen <qn...@linagora.com>
Authored: Mon Dec 19 16:39:51 2016 +0700
Committer: Quynh Nguyen <qn...@linagora.com>
Committed: Wed Dec 21 09:08:18 2016 +0700

----------------------------------------------------------------------
 .../CassandraMessageIdManagerTestSystem.java    |   8 +-
 .../inmemory/InMemoryMessageIdManager.java      | 142 +++++++++++++------
 .../mailbox/store/StoreMailboxManager.java      |   3 -
 .../mailbox/store/StoreMessageIdManager.java    |  60 +++++++-
 .../mailbox/store/StoreMessageManager.java      |   4 +-
 .../AbstractMessageIdManagerSideEffectTest.java |   3 +-
 .../AbstractMessageIdManagerStorageTest.java    | 131 ++++++++++++++++-
 .../store/StoreMessageIdManagerTestSystem.java  |   4 +-
 8 files changed, 300 insertions(+), 55 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/81832aed/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerTestSystem.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerTestSystem.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerTestSystem.java
index 41749ed..fcbdca3 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerTestSystem.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerTestSystem.java
@@ -104,16 +104,18 @@ public class CassandraMessageIdManagerTestSystem extends MessageIdManagerTestSys
         SimpleMailbox mailbox1 = new SimpleMailbox(new MailboxPath("#private", "user", "INBOX"), UID_VALIDITY, CassandraId.timeBased());
         SimpleMailbox mailbox2 = new SimpleMailbox(new MailboxPath("#private", "user", "OUTBOX"), UID_VALIDITY, CassandraId.timeBased());
         SimpleMailbox mailbox3 = new SimpleMailbox(new MailboxPath("#private", "user", "SENT"), UID_VALIDITY, CassandraId.timeBased());
+        SimpleMailbox mailbox4 = new SimpleMailbox(new MailboxPath("#public", "otheruser", "INBOX"), UID_VALIDITY, CassandraId.timeBased());
         MockMailboxSession mailboxSession = new MockMailboxSession("user");
         MailboxMapper mailboxMapper = mapperFactory.getMailboxMapper(mailboxSession);
         mailboxMapper.save(mailbox1);
         mailboxMapper.save(mailbox2);
         mailboxMapper.save(mailbox3);
+        mailboxMapper.save(mailbox4);
 
         CassandraMailboxManager cassandraMailboxManager = new CassandraMailboxManager(mapperFactory, mock(Authenticator.class), new NoMailboxPathLocker(), new MessageParser(), messageIdFactory);
         cassandraMailboxManager.init();
 
-        return new CassandraMessageIdManagerTestSystem(messageIdManager, mailboxSession, mailbox1, mailbox2, mailbox3,
+        return new CassandraMessageIdManagerTestSystem(messageIdManager, mailboxSession, mailbox1, mailbox2, mailbox3, mailbox4,
             messageIdFactory, mapperFactory, mailboxSession, cassandraMailboxManager);
     }
 
@@ -122,8 +124,8 @@ public class CassandraMessageIdManagerTestSystem extends MessageIdManagerTestSys
     private final MailboxSession mailboxSession;
     private final CassandraMailboxManager cassandraMailboxManager;
 
-    public CassandraMessageIdManagerTestSystem(MessageIdManager messageIdManager, MailboxSession session, Mailbox mailbox1, Mailbox mailbox2, Mailbox mailbox3, CassandraMessageId.Factory messageIdFactory, CassandraMailboxSessionMapperFactory mapperFactory, MailboxSession mailboxSession, CassandraMailboxManager cassandraMailboxManager) {
-        super(messageIdManager, session, mailbox1, mailbox2, mailbox3);
+    public CassandraMessageIdManagerTestSystem(MessageIdManager messageIdManager, MailboxSession session, Mailbox mailbox1, Mailbox mailbox2, Mailbox mailbox3, Mailbox mailbox4, CassandraMessageId.Factory messageIdFactory, CassandraMailboxSessionMapperFactory mapperFactory, MailboxSession mailboxSession, CassandraMailboxManager cassandraMailboxManager) {
+        super(messageIdManager, session, mailbox1, mailbox2, mailbox3, mailbox4);
         this.messageIdFactory = messageIdFactory;
         this.mapperFactory = mapperFactory;
         this.mailboxSession = mailboxSession;

http://git-wip-us.apache.org/repos/asf/james-project/blob/81832aed/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMessageIdManager.java
----------------------------------------------------------------------
diff --git a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMessageIdManager.java b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMessageIdManager.java
index bbde9cc..b10b599 100644
--- a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMessageIdManager.java
+++ b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMessageIdManager.java
@@ -27,13 +27,16 @@ import javax.mail.Flags;
 
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession;
+import org.apache.james.mailbox.MailboxSession.SessionType;
 import org.apache.james.mailbox.MessageIdManager;
 import org.apache.james.mailbox.MessageManager;
 import org.apache.james.mailbox.MessageManager.FlagsUpdateMode;
 import org.apache.james.mailbox.exception.MailboxException;
+import org.apache.james.mailbox.exception.MailboxNotFoundException;
 import org.apache.james.mailbox.model.FetchGroupImpl;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MailboxMetaData;
+import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.model.MailboxQuery;
 import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.model.MessageRange;
@@ -43,6 +46,7 @@ import org.apache.james.mailbox.model.MessageResult.FetchGroup;
 import com.google.common.base.Function;
 import com.google.common.base.Optional;
 import com.google.common.base.Predicate;
+import com.google.common.base.Throwables;
 import com.google.common.collect.FluentIterable;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
@@ -59,23 +63,6 @@ public class InMemoryMessageIdManager implements MessageIdManager {
         this.mailboxManager = mailboxManager;
     }
     
-    private Optional<MessageResult> findMessageWithId(MailboxId mailboxId, final MessageId messageId, FetchGroup fetchGroup, MailboxSession mailboxSession) throws MailboxException {
-        return FluentIterable.from(retrieveAllMessages(mailboxId, fetchGroup, mailboxSession))
-            .filter(new Predicate<MessageResult>() {
-
-                @Override
-                public boolean apply(MessageResult messageResult) {
-                    return messageResult.getMessageId().equals(messageId);
-                }
-            })
-            .first();
-    }
-
-    private ImmutableList<MessageResult> retrieveAllMessages(MailboxId mailboxId, FetchGroup fetchGroup, MailboxSession mailboxSession) throws MailboxException {
-        MessageManager messageManager = mailboxManager.getMailbox(mailboxId, mailboxSession);
-        return ImmutableList.copyOf(messageManager.getMessages(MessageRange.all(), fetchGroup, mailboxSession));
-    }
-    
     @Override
     public void setFlags(Flags newState, FlagsUpdateMode flagsUpdateMode, MessageId messageId, List<MailboxId> mailboxIds, MailboxSession mailboxSession) throws MailboxException {
         for (MailboxId mailboxId: mailboxIds) {
@@ -88,29 +75,11 @@ public class InMemoryMessageIdManager implements MessageIdManager {
     }
 
     @Override
-    public List<MessageResult> getMessages(List<MessageId> messages, FetchGroup fetchGroup, MailboxSession mailboxSession) throws MailboxException {
-        ImmutableList.Builder<MessageResult> builder = ImmutableList.builder();
-        List<MailboxMetaData> userMailboxes = mailboxManager.search(userMailboxes(mailboxSession), mailboxSession);
-        for (MailboxMetaData mailboxMetaData: userMailboxes) {
-            builder.addAll(retrieveMailboxMessages(mailboxMetaData.getId(), messages, fetchGroup, mailboxSession));
-        }
-        return builder.build();
-    }
-
-    private MailboxQuery userMailboxes(MailboxSession mailboxSession) {
-        return MailboxQuery.builder()
-                .matchesAll()
-                .username(mailboxSession.getUser().getUserName())
-                .build();
-    }
-
-    private List<MessageResult> retrieveMailboxMessages(MailboxId mailboxId, List<MessageId> messages, FetchGroup fetchGroup, MailboxSession mailboxSession) throws MailboxException {
+    public List<MessageResult> getMessages(List<MessageId> messages, FetchGroup fetchGroup, final MailboxSession mailboxSession) throws MailboxException {
         ImmutableList.Builder<MessageResult> builder = ImmutableList.builder();
-        for (MessageId messageId: messages) {
-            Optional<MessageResult> maybeMessage = findMessageWithId(mailboxId, messageId, fetchGroup, mailboxSession);
-            if (maybeMessage.isPresent()) {
-                builder.add(maybeMessage.get());
-            }
+        List<MailboxId> userMailboxIds = getUsersMailboxIds(mailboxSession);
+        for (MailboxId mailboxId: userMailboxIds) {
+            builder.addAll(retrieveMailboxMessages(mailboxId, messages, fetchGroup, mailboxSession));
         }
         return builder.build();
     }
@@ -131,13 +100,16 @@ public class InMemoryMessageIdManager implements MessageIdManager {
     @Override
     public void setInMailboxes(MessageId messageId, List<MailboxId> mailboxIds, MailboxSession mailboxSession) throws MailboxException {
         List<MessageResult> messages = getMessages(ImmutableList.of(messageId), FetchGroupImpl.MINIMAL, mailboxSession);
+
+        filterOnMailboxSession(mailboxIds, mailboxSession);
+
         if (!messages.isEmpty()) {
             ImmutableSet<MailboxId> currentMailboxes = currentMailboxes(messages).toSet();
-            
+
             HashSet<MailboxId> targetMailboxes = Sets.newHashSet(mailboxIds);
             List<MailboxId> mailboxesToRemove = ImmutableList.copyOf(Sets.difference(currentMailboxes, targetMailboxes));
             SetView<MailboxId> mailboxesToAdd = Sets.difference(targetMailboxes, currentMailboxes);
-            
+
             MessageResult referenceMessage = Iterables.getLast(messages);
             for (MailboxId mailboxId: mailboxesToAdd) {
                 MessageRange messageRange = referenceMessage.getUid().toRange();
@@ -145,13 +117,82 @@ public class InMemoryMessageIdManager implements MessageIdManager {
                 mailboxManager.getMailbox(mailboxId, mailboxSession)
                     .setFlags(referenceMessage.getFlags(), FlagsUpdateMode.REPLACE, messageRange, mailboxSession);
             }
-            
+
             for (MessageResult message: messages) {
                 delete(message.getMessageId(), mailboxesToRemove, mailboxSession);
             }
         }
     }
 
+    private List<MailboxId> getUsersMailboxIds(final MailboxSession mailboxSession) throws MailboxException {
+        return FluentIterable.from(mailboxManager.search(userMailboxes(mailboxSession), mailboxSession))
+            .transform(getMailboxIdFromMetadata()).toList();
+    }
+
+    private Function<MailboxMetaData, MailboxId> getMailboxIdFromMetadata() {
+        return new Function<MailboxMetaData, MailboxId>() {
+            @Override
+            public MailboxId apply(MailboxMetaData input) {
+                return input.getId();
+            }
+        };
+    }
+
+    private Function<MailboxPath, MailboxId> getMailboxIdFromMailboxPath(final MailboxSession mailboxSession) {
+        return new Function<MailboxPath, MailboxId>() {
+            @Override
+            public MailboxId apply(MailboxPath input) {
+                try {
+                    return mailboxManager.getMailbox(input, mailboxSession).getId();
+                } catch (MailboxException e) {
+                    throw Throwables.propagate(e);
+                }
+            }
+        };
+    }
+
+    private MailboxQuery userMailboxes(MailboxSession mailboxSession) {
+        return MailboxQuery.builder()
+                .matchesAll()
+                .username(mailboxSession.getUser().getUserName())
+                .build();
+    }
+
+    private List<MessageResult> retrieveMailboxMessages(MailboxId mailboxId, List<MessageId> messages, FetchGroup fetchGroup, MailboxSession mailboxSession) throws MailboxException {
+        ImmutableList.Builder<MessageResult> builder = ImmutableList.builder();
+        for (MessageId messageId: messages) {
+            Optional<MessageResult> maybeMessage = findMessageWithId(mailboxId, messageId, fetchGroup, mailboxSession);
+            if (maybeMessage.isPresent()) {
+                builder.add(maybeMessage.get());
+            }
+        }
+        return builder.build();
+    }
+
+    private void filterOnMailboxSession(List<MailboxId> mailboxIds, MailboxSession mailboxSession) throws MailboxNotFoundException {
+        boolean isForbidden = FluentIterable.from(mailboxIds)
+            .firstMatch(findMailboxBelongsToAnotherSession(mailboxSession))
+            .isPresent();
+
+        if (isForbidden) {
+            throw new MailboxNotFoundException("Mailbox does not belong to session");
+        }
+    }
+
+    private Predicate<MailboxId> findMailboxBelongsToAnotherSession(final MailboxSession mailboxSession) {
+        return new Predicate<MailboxId>() {
+            @Override
+            public boolean apply(MailboxId input) {
+                try {
+                    MailboxPath currentMailbox = mailboxManager.getMailbox(input, mailboxSession).getMailboxPath();
+                    return !mailboxSession.getUser().isSameUser(currentMailbox.getUser());
+                } catch (MailboxException e) {
+                    return true;
+                }
+            }
+        };
+    }
+
     private FluentIterable<MailboxId> currentMailboxes(List<MessageResult> messages) {
         return FluentIterable.from(messages).transform(new Function<MessageResult, MailboxId>() {
             @Override
@@ -161,4 +202,21 @@ public class InMemoryMessageIdManager implements MessageIdManager {
         });
     }
 
+    private Optional<MessageResult> findMessageWithId(MailboxId mailboxId, final MessageId messageId, FetchGroup fetchGroup, MailboxSession mailboxSession) throws MailboxException {
+        return FluentIterable.from(retrieveAllMessages(mailboxId, fetchGroup, mailboxSession))
+            .filter(new Predicate<MessageResult>() {
+
+                @Override
+                public boolean apply(MessageResult messageResult) {
+                    return messageResult.getMessageId().equals(messageId);
+                }
+            })
+            .first();
+    }
+
+    private ImmutableList<MessageResult> retrieveAllMessages(MailboxId mailboxId, FetchGroup fetchGroup, MailboxSession mailboxSession) throws MailboxException {
+        MessageManager messageManager = mailboxManager.getMailbox(mailboxId, mailboxSession);
+        return ImmutableList.copyOf(messageManager.getMessages(MessageRange.all(), fetchGroup, mailboxSession));
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/81832aed/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
index 760ea6c..8bee086 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
@@ -496,9 +496,6 @@ public class StoreMailboxManager implements MailboxManager {
     }
 
     private boolean belongsToCurrentUser(Mailbox mailbox, MailboxSession session) {
-        if (session.getUser() == null) {
-            return mailbox.getUser() == null;
-        }
         return session.getUser().isSameUser(mailbox.getUser());
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/81832aed/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageIdManager.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageIdManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageIdManager.java
index 0a482c1..fcbc10a 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageIdManager.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageIdManager.java
@@ -31,10 +31,12 @@ import javax.mail.Flags;
 import javax.mail.internet.SharedInputStream;
 
 import org.apache.james.mailbox.MailboxSession;
+import org.apache.james.mailbox.MailboxSession.SessionType;
 import org.apache.james.mailbox.MessageIdManager;
 import org.apache.james.mailbox.MessageManager;
 import org.apache.james.mailbox.MessageUid;
 import org.apache.james.mailbox.exception.MailboxException;
+import org.apache.james.mailbox.exception.MailboxNotFoundException;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.model.MessageAttachment;
@@ -100,6 +102,10 @@ public class StoreMessageIdManager implements MessageIdManager {
     @Override
     public void setFlags(Flags newState, MessageManager.FlagsUpdateMode replace, MessageId messageId, List<MailboxId> mailboxIds, MailboxSession mailboxSession) throws MailboxException {
         MessageIdMapper messageIdMapper = mailboxSessionMapperFactory.getMessageIdMapper(mailboxSession);
+        MailboxMapper mailboxMapper = mailboxSessionMapperFactory.getMailboxMapper(mailboxSession);
+
+        allowOnMailboxSession(mailboxIds, mailboxSession, mailboxMapper);
+
         Map<MailboxId, UpdatedFlags> updatedFlags = messageIdMapper.setFlags(messageId, mailboxIds, newState, replace);
         for (Map.Entry<MailboxId, UpdatedFlags> entry : updatedFlags.entrySet()) {
             dispatchFlagsChange(mailboxSession, entry.getKey(), entry.getValue());
@@ -107,10 +113,12 @@ public class StoreMessageIdManager implements MessageIdManager {
     }
 
     @Override
-    public List<MessageResult> getMessages(List<MessageId> messageIds, final MessageResult.FetchGroup fetchGroup, MailboxSession mailboxSession) throws MailboxException {
+    public List<MessageResult> getMessages(List<MessageId> messageIds, final MessageResult.FetchGroup fetchGroup, final MailboxSession mailboxSession) throws MailboxException {
         try {
             MessageIdMapper messageIdMapper = mailboxSessionMapperFactory.getMessageIdMapper(mailboxSession);
+            final MailboxMapper mailboxMapper = mailboxSessionMapperFactory.getMailboxMapper(mailboxSession);
             return FluentIterable.from(messageIdMapper.find(messageIds, MessageMapper.FetchType.Full))
+                .filter(belongsToUser(mailboxSession, mailboxMapper))
                 .transform(messageResultConverter(fetchGroup))
                 .toList();
         } catch (WrappedException wrappedException) {
@@ -123,6 +131,8 @@ public class StoreMessageIdManager implements MessageIdManager {
         MessageIdMapper messageIdMapper = mailboxSessionMapperFactory.getMessageIdMapper(mailboxSession);
         MailboxMapper mailboxMapper = mailboxSessionMapperFactory.getMailboxMapper(mailboxSession);
 
+        allowOnMailboxSession(mailboxIds, mailboxSession, mailboxMapper);
+
         Iterable<MetadataWithMailboxId> metadatasWithMailbox = FluentIterable
             .from(messageIdMapper.find(ImmutableList.of(messageId), MessageMapper.FetchType.Metadata))
             .filter(inMailbox(mailboxIds))
@@ -138,8 +148,13 @@ public class StoreMessageIdManager implements MessageIdManager {
     @Override
     public void setInMailboxes(MessageId messageId, List<MailboxId> mailboxIds, MailboxSession mailboxSession) throws MailboxException {
         MessageIdMapper messageIdMapper = mailboxSessionMapperFactory.getMessageIdMapper(mailboxSession);
+        MailboxMapper mailboxMapper = mailboxSessionMapperFactory.getMailboxMapper(mailboxSession);
+
+        allowOnMailboxSession(mailboxIds, mailboxSession, mailboxMapper);
 
-        List<MailboxMessage> mailboxMessages = messageIdMapper.find(ImmutableList.of(messageId), MessageMapper.FetchType.Full);
+        List<MailboxMessage> mailboxMessages = FluentIterable.from(messageIdMapper.find(ImmutableList.of(messageId), MessageMapper.FetchType.Full))
+            .filter(belongsToUser(mailboxSession, mailboxMapper))
+            .toList();
 
         if (!mailboxMessages.isEmpty()) {
             ImmutableSet<MailboxId> currentMailboxes = FluentIterable.from(mailboxMessages)
@@ -244,6 +259,47 @@ public class StoreMessageIdManager implements MessageIdManager {
         };
     }
 
+    private Predicate<MailboxMessage> belongsToUser(final MailboxSession mailboxSession, final MailboxMapper mailboxMapper) {
+        return new Predicate<MailboxMessage>() {
+            @Override
+            public boolean apply(MailboxMessage input) {
+                try {
+                    Mailbox currentMailbox = mailboxMapper.findMailboxById(input.getMailboxId());
+                    return belongsToCurrentUser(currentMailbox, mailboxSession);
+                } catch (MailboxException e) {
+                    return false;
+                }
+            }
+        };
+    }
+
+    private void allowOnMailboxSession(List<MailboxId> mailboxIds, MailboxSession mailboxSession, MailboxMapper mailboxMapper) throws MailboxNotFoundException {
+        boolean isForbidden = FluentIterable.from(mailboxIds)
+            .firstMatch(isMailboxOfOtherUser(mailboxSession, mailboxMapper))
+            .isPresent();
+
+        if (isForbidden) {
+            throw new MailboxNotFoundException("Mailbox does not belong to session: ");
+        }
+    }
+
+    private Predicate<MailboxId> isMailboxOfOtherUser(final MailboxSession mailboxSession, final MailboxMapper mailboxMapper) {
+        return new Predicate<MailboxId>() {
+            @Override
+            public boolean apply(MailboxId mailboxId) {
+                try {
+                    return !belongsToCurrentUser(mailboxMapper.findMailboxById(mailboxId), mailboxSession);
+                } catch (MailboxException e) {
+                    return true;
+                }
+            }
+        };
+    }
+
+    private boolean belongsToCurrentUser(Mailbox mailbox, MailboxSession session) {
+        return session.getUser().isSameUser(mailbox.getUser());
+    }
+
     private static class MetadataWithMailboxId {
         private final MessageMetaData messageMetaData;
         private final MailboxId mailboxId;

http://git-wip-us.apache.org/repos/asf/james-project/blob/81832aed/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
index 4a394d3..452d877 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
@@ -41,6 +41,7 @@ import org.apache.commons.io.input.TeeInputStream;
 import org.apache.james.mailbox.MailboxListener;
 import org.apache.james.mailbox.MailboxPathLocker;
 import org.apache.james.mailbox.MailboxSession;
+import org.apache.james.mailbox.MailboxSession.SessionType;
 import org.apache.james.mailbox.MailboxSession.User;
 import org.apache.james.mailbox.MessageManager;
 import org.apache.james.mailbox.MessageUid;
@@ -455,7 +456,8 @@ public class StoreMessageManager implements org.apache.james.mailbox.MessageMana
      * @throws MailboxException
      */
     public boolean isWriteable(MailboxSession session) throws MailboxException {
-        return aclResolver.isReadWrite(myRights(session), getSharedPermanentFlags(session));
+        return session.getType() == SessionType.System
+            || aclResolver.isReadWrite(myRights(session), getSharedPermanentFlags(session));
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/james-project/blob/81832aed/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractMessageIdManagerSideEffectTest.java
----------------------------------------------------------------------
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 9151a70..957d51d 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
@@ -40,6 +40,7 @@ import org.apache.james.mailbox.MessageManager.FlagsUpdateMode;
 import org.apache.james.mailbox.MessageUid;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.exception.OverQuotaException;
+import org.apache.james.mailbox.mock.MockMailboxSession;
 import org.apache.james.mailbox.model.FetchGroupImpl;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MessageId;
@@ -85,9 +86,9 @@ public abstract class AbstractMessageIdManagerSideEffectTest {
     @Before
     public void setUp() throws Exception {
         dispatcher = mock(MailboxEventDispatcher.class);
-        session = mock(MailboxSession.class);
         quotaManager = mock(QuotaManager.class);
 
+        session = new MockMailboxSession("user");
         testingData = createTestSystem(quotaManager, dispatcher);
         messageIdManager = testingData.getMessageIdManager();
         mailbox1 = testingData.getMailbox1();

http://git-wip-us.apache.org/repos/asf/james-project/blob/81832aed/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractMessageIdManagerStorageTest.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractMessageIdManagerStorageTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractMessageIdManagerStorageTest.java
index 82684f9..b8c8565 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractMessageIdManagerStorageTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractMessageIdManagerStorageTest.java
@@ -28,9 +28,12 @@ import java.util.Map;
 import javax.mail.Flags;
 
 import org.apache.james.mailbox.MailboxSession;
+import org.apache.james.mailbox.MailboxSession.SessionType;
 import org.apache.james.mailbox.MessageIdManager;
 import org.apache.james.mailbox.MessageManager;
 import org.apache.james.mailbox.MessageUid;
+import org.apache.james.mailbox.exception.MailboxNotFoundException;
+import org.apache.james.mailbox.mock.MockMailboxSession;
 import org.apache.james.mailbox.model.FetchGroupImpl;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MessageId;
@@ -38,7 +41,9 @@ import org.apache.james.mailbox.model.MessageResult;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
 import org.junit.After;
 import org.junit.Before;
+import org.junit.Rule;
 import org.junit.Test;
+import org.junit.rules.ExpectedException;
 
 import com.google.common.base.Function;
 import com.google.common.base.Predicate;
@@ -47,8 +52,10 @@ import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 
 public abstract class AbstractMessageIdManagerStorageTest {
-
     public static final Flags FLAGS = new Flags();
+
+    private static final MailboxSession OTHER_USER = new MockMailboxSession("otheruser");
+    private static final MailboxSession SYSTEM_USER = new MockMailboxSession("systemuser", SessionType.System);
     private static final MessageUid messageUid1 = MessageUid.of(111);
     private static final MessageUid messageUid2 = MessageUid.of(222);
 
@@ -84,8 +91,12 @@ public abstract class AbstractMessageIdManagerStorageTest {
     private Mailbox mailbox1;
     private Mailbox mailbox2;
     private Mailbox mailbox3;
+    private Mailbox mailbox4;
     private MailboxSession session;
 
+    @Rule
+    public ExpectedException expectedException = ExpectedException.none();
+
     protected abstract MessageIdManagerTestSystem createTestingData() throws Exception;
 
     @Before
@@ -95,8 +106,9 @@ public abstract class AbstractMessageIdManagerStorageTest {
         mailbox1 = testingData.getMailbox1();
         mailbox2 = testingData.getMailbox2();
         mailbox3 = testingData.getMailbox3();
+        mailbox4 = testingData.getMailbox4();
 
-        session = testingData.getSession();
+        session = new MockMailboxSession("user");
     }
 
     @After
@@ -142,6 +154,22 @@ public abstract class AbstractMessageIdManagerStorageTest {
     }
 
     @Test
+    public void getMessageShouldReturnMessageBelongToUser() throws Exception {
+        MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS);
+
+        assertThat(messageIdManager.getMessages(ImmutableList.of(messageId), FetchGroupImpl.MINIMAL, session)).hasSize(1);
+        assertThat(messageIdManager.getMessages(ImmutableList.of(messageId), FetchGroupImpl.MINIMAL, OTHER_USER)).isEmpty();
+    }
+
+    @Test
+    public void getMessageShouldReturnAllWithSystemSession() throws Exception {
+        MessageId messageId = testingData.persist(mailbox4.getMailboxId(), messageUid1, FLAGS);
+
+        assertThat(messageIdManager.getMessages(ImmutableList.of(messageId), FetchGroupImpl.MINIMAL, session)).isEmpty();;
+        assertThat(messageIdManager.getMessages(ImmutableList.of(messageId), FetchGroupImpl.MINIMAL, SYSTEM_USER)).hasSize(1);
+    }
+
+    @Test
     public void setInMailboxesShouldSetMessageInBothMailboxes() throws Exception {
         MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS);
 
@@ -253,6 +281,43 @@ public abstract class AbstractMessageIdManagerStorageTest {
     }
 
     @Test
+    public void setInMailboxesShouldThrowExceptionWhenSetInMailboxesInAnotherSession() throws Exception {
+        expectedException.expect(MailboxNotFoundException.class);
+
+        MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS);
+
+        messageIdManager.setInMailboxes(messageId, ImmutableList.of(mailbox1.getMailboxId(), mailbox2.getMailboxId()), OTHER_USER);
+    }
+
+    @Test
+    public void setInMailboxesShouldThrowExceptionWhenOneMailboxDoesNotBelongToMailboxSession() throws Exception {
+        expectedException.expect(MailboxNotFoundException.class);
+
+        MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS);
+
+        messageIdManager.setInMailboxes(messageId, ImmutableList.of(mailbox1.getMailboxId(), mailbox4.getMailboxId()), session);
+    }
+
+    @Test
+    public void setInMailboxesShouldIgnoreMessagesBelongingToOtherUsers() throws Exception {
+        MessageId messageId = testingData.persist(mailbox4.getMailboxId(), messageUid1, FLAGS);
+
+        messageIdManager.setInMailboxes(messageId, ImmutableList.of(mailbox1.getMailboxId()), session);
+
+        assertThat(messageIdManager.getMessages(ImmutableList.of(messageId), FetchGroupImpl.MINIMAL, session)).isEmpty();
+    }
+
+    @Test
+    public void setInMailboxesShouldSetMessageWhenSystemSession() throws Exception {
+        MessageId messageId = testingData.persist(mailbox4.getMailboxId(), messageUid1, FLAGS);
+
+        messageIdManager.setInMailboxes(messageId, ImmutableList.of(mailbox1.getMailboxId()), SYSTEM_USER);
+
+        assertThat(messageIdManager.getMessages(ImmutableList.of(messageId), FetchGroupImpl.MINIMAL, session)).hasSize(1);
+        assertThat(messageIdManager.getMessages(ImmutableList.of(messageId), FetchGroupImpl.MINIMAL, SYSTEM_USER)).hasSize(1);
+    }
+
+    @Test
     public void deleteMessageShouldRemoveMessageFromMailbox() throws Exception {
         MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS);
 
@@ -285,6 +350,32 @@ public abstract class AbstractMessageIdManagerStorageTest {
     }
 
     @Test
+    public void deleteMessageShouldThrowExceptionWhenDeletingOnOtherSession() throws Exception {
+        expectedException.expect(MailboxNotFoundException.class);
+
+        MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS);
+
+        messageIdManager.delete(messageId, ImmutableList.of(mailbox1.getMailboxId()), OTHER_USER);
+    }
+
+    @Test
+    public void deleteMessageShouldWorkWhenDeletingOnSystemSession() throws Exception {
+        MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS);
+
+        messageIdManager.delete(messageId, ImmutableList.of(mailbox1.getMailboxId()), SYSTEM_USER);
+
+        assertThat(messageIdManager.getMessages(ImmutableList.of(messageId), FetchGroupImpl.MINIMAL, session)).isEmpty();
+    }
+
+    @Test
+    public void deleteMessageShouldThrowExceptionWhenOneMailboxDoesNotBelongToUser() throws Exception {
+        expectedException.expect(MailboxNotFoundException.class);
+        MessageId messageId = testingData.persist(mailbox4.getMailboxId(), messageUid1, FLAGS);
+
+        messageIdManager.delete(messageId, ImmutableList.of(mailbox4.getMailboxId()), session);
+    }
+
+    @Test
     public void setFlagsShouldUpdateFlags() throws Exception {
         Flags newFlags = new Flags(Flags.Flag.SEEN);
         MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS);
@@ -417,6 +508,42 @@ public abstract class AbstractMessageIdManagerStorageTest {
     }
 
     @Test
+    public void setFlagsShouldThrowExceptionWhenSetFlagsOnOtherSession() throws Exception {
+        expectedException.expect(MailboxNotFoundException.class);
+
+        Flags newFlags = new Flags(Flags.Flag.SEEN);
+        MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS);
+
+        messageIdManager.setFlags(newFlags, MessageManager.FlagsUpdateMode.ADD, messageId, ImmutableList.of(mailbox1.getMailboxId()), OTHER_USER);
+    }
+
+    @Test
+    public void setFlagsShouldShouldWorkWhenSetFlagsOnSystemSession() throws Exception {
+        Flags newFlags = new Flags(Flags.Flag.SEEN);
+        MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS);
+
+        messageIdManager.setFlags(newFlags, MessageManager.FlagsUpdateMode.ADD, messageId, ImmutableList.of(mailbox1.getMailboxId()), SYSTEM_USER);
+
+        List<Flags> flags = FluentIterable
+            .from(messageIdManager.getMessages(ImmutableList.of(messageId), FetchGroupImpl.MINIMAL, session))
+            .transform(getFlags())
+            .toList();
+
+        assertThat(flags).hasSize(1);
+        assertThat(flags.get(0)).isEqualTo(newFlags);
+    }
+
+    @Test
+    public void setFlagsShouldThrowExceptionWhenMailboxDoesNotBelongToMailboxSession() throws Exception {
+        expectedException.expect(MailboxNotFoundException.class);
+        Flags newFlags = new Flags(Flags.Flag.SEEN);
+        MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS);
+
+        messageIdManager.setFlags(newFlags, MessageManager.FlagsUpdateMode.ADD, messageId, ImmutableList.of(mailbox1.getMailboxId(), mailbox4.getMailboxId()), session);
+
+    }
+
+    @Test
     public void getMessageShouldBeEmptyWhenMessageHasNoMoreMailboxes() throws Exception {
         MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS);
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/81832aed/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMessageIdManagerTestSystem.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMessageIdManagerTestSystem.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMessageIdManagerTestSystem.java
index a5cd64e..5c2d84e 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMessageIdManagerTestSystem.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMessageIdManagerTestSystem.java
@@ -29,9 +29,11 @@ import javax.mail.Flags;
 
 import org.apache.commons.lang.NotImplementedException;
 import org.apache.james.mailbox.MailboxSession;
+import org.apache.james.mailbox.MailboxSession.SessionType;
 import org.apache.james.mailbox.MessageIdManager;
 import org.apache.james.mailbox.MessageUid;
 import org.apache.james.mailbox.exception.MailboxException;
+import org.apache.james.mailbox.mock.MockMailboxSession;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
@@ -40,7 +42,7 @@ import org.apache.james.mailbox.store.mail.model.MailboxMessage;
 import com.google.common.base.Throwables;
 
 public class StoreMessageIdManagerTestSystem extends MessageIdManagerTestSystem {
-    private static final MailboxSession EMPTY_MAILBOX_SESSION = null;
+    private static final MailboxSession EMPTY_MAILBOX_SESSION = new MockMailboxSession("user", SessionType.System);
     private static final long MOD_SEQ = 18;
     private static final ByteArrayInputStream ARRAY_INPUT_STREAM = new ByteArrayInputStream("".getBytes());
 


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


[4/4] james-project git commit: JAMES-1888: Add more mailbox4 for testing which belong to another session

Posted by ro...@apache.org.
JAMES-1888: Add more mailbox4 for testing which belong to another session


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

Branch: refs/heads/master
Commit: 82f4b30d26e54c9cb69e0dc515a74c00311b1528
Parents: 27f1e48
Author: Quynh Nguyen <qn...@linagora.com>
Authored: Mon Dec 19 16:33:05 2016 +0700
Committer: Quynh Nguyen <qn...@linagora.com>
Committed: Wed Dec 21 09:08:18 2016 +0700

----------------------------------------------------------------------
 .../inmemory/InMemoryMessageIdManagerTestSystem.java  |  4 ++--
 .../inmemory/MessageIdManagerTestSystemProvider.java  | 14 ++++++--------
 .../mailbox/store/MessageIdManagerTestSystem.java     | 12 +++++++-----
 .../store/StoreMessageIdManagerSideEffectTest.java    |  8 ++++++--
 .../store/StoreMessageIdManagerTestSystem.java        |  4 ++--
 .../store/TestMailboxSessionMapperFactory.java        |  6 ++++++
 6 files changed, 29 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/82f4b30d/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryMessageIdManagerTestSystem.java
----------------------------------------------------------------------
diff --git a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryMessageIdManagerTestSystem.java b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryMessageIdManagerTestSystem.java
index 6c6b271..466d698 100644
--- a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryMessageIdManagerTestSystem.java
+++ b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryMessageIdManagerTestSystem.java
@@ -50,8 +50,8 @@ public class InMemoryMessageIdManagerTestSystem extends MessageIdManagerTestSyst
     private Optional<MessageId> lastMessageIdUsed;
 
     public InMemoryMessageIdManagerTestSystem(MailboxManager mailboxManager, MailboxSession mailboxSession, 
-            Mailbox mailbox1, Mailbox mailbox2, Mailbox mailbox3) {
-        super(new InMemoryMessageIdManager(mailboxManager), mailboxSession, mailbox1, mailbox2, mailbox3);
+            Mailbox mailbox1, Mailbox mailbox2, Mailbox mailbox3, Mailbox mailbox4) {
+        super(new InMemoryMessageIdManager(mailboxManager), mailboxSession, mailbox1, mailbox2, mailbox3, mailbox4);
         this.mailboxManager = mailboxManager;
         this.mailboxSession = mailboxSession;
         this.lastMessageIdUsed = Optional.absent();

http://git-wip-us.apache.org/repos/asf/james-project/blob/82f4b30d/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/MessageIdManagerTestSystemProvider.java
----------------------------------------------------------------------
diff --git a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/MessageIdManagerTestSystemProvider.java b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/MessageIdManagerTestSystemProvider.java
index 7049360..206c0d3 100644
--- a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/MessageIdManagerTestSystemProvider.java
+++ b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/MessageIdManagerTestSystemProvider.java
@@ -44,6 +44,7 @@ public class MessageIdManagerTestSystemProvider {
     private static final int UID_VALIDITY = 1024;
     private static final Logger LOGGER = LoggerFactory.getLogger(InMemoryMessageIdManagerStorageTest.class);
     private static final String USER = "user";
+    private static final String OTHER_USER = "otheruser";
     private static final String PASSWORD = "password";
 
     public static MessageIdManagerTestSystem createTestingData() {
@@ -56,17 +57,13 @@ public class MessageIdManagerTestSystemProvider {
         SimpleMailbox mailbox2 = createMailbox(mailboxManager, mailboxPath2, mailboxSession);
         MailboxPath mailboxPath3 = new MailboxPath("#private", USER, "mailbox3");
         SimpleMailbox mailbox3 = createMailbox(mailboxManager, mailboxPath3, mailboxSession);
-        return new InMemoryMessageIdManagerTestSystem(mailboxManager, mailboxSession, mailbox1, mailbox2, mailbox3);
+        MailboxPath mailboxPath4 = new MailboxPath("#public", OTHER_USER, "mailbox4");
+        SimpleMailbox mailbox4 = createMailbox(mailboxManager, mailboxPath4, mailboxSession);
+        return new InMemoryMessageIdManagerTestSystem(mailboxManager, mailboxSession, mailbox1, mailbox2, mailbox3, mailbox4);
     }
 
     private static MailboxSession createMailboxSession(InMemoryMailboxManager mailboxManager) {
-        try {
-            return mailboxManager.login(USER, PASSWORD, LOGGER);
-        } catch (BadCredentialsException e) {
-            throw Throwables.propagate(e);
-        } catch (MailboxException e) {
-            throw Throwables.propagate(e);
-        }
+        return mailboxManager.createSystemSession(USER, LOGGER);
     }
 
     private static SimpleMailbox createMailbox(InMemoryMailboxManager mailboxManager, MailboxPath mailboxPath, MailboxSession mailboxSession) {
@@ -88,6 +85,7 @@ public class MessageIdManagerTestSystemProvider {
         MessageId.Factory messageIdFactory = new InMemoryMessageId.Factory();
         FakeAuthenticator authenticator = new FakeAuthenticator();
         authenticator.addUser(USER, PASSWORD);
+        authenticator.addUser(OTHER_USER, PASSWORD);
         InMemoryMailboxManager mailboxManager = new InMemoryMailboxManager(mailboxSessionMapperFactory, authenticator, 
                 aclResolver, groupMembershipResolver, messageParser, messageIdFactory, LIMIT_ANNOTATIONS, LIMIT_ANNOTATION_SIZE);
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/82f4b30d/mailbox/store/src/test/java/org/apache/james/mailbox/store/MessageIdManagerTestSystem.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/MessageIdManagerTestSystem.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/MessageIdManagerTestSystem.java
index b57aff1..06f1a1e 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/MessageIdManagerTestSystem.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/MessageIdManagerTestSystem.java
@@ -35,24 +35,22 @@ public abstract class MessageIdManagerTestSystem {
     private final Mailbox mailbox1;
     private final Mailbox mailbox2;
     private final Mailbox mailbox3;
+    private final Mailbox mailbox4;
 
     public MessageIdManagerTestSystem(MessageIdManager messageIdManager, MailboxSession session, 
-            Mailbox mailbox1, Mailbox mailbox2, Mailbox mailbox3) {
+            Mailbox mailbox1, Mailbox mailbox2, Mailbox mailbox3, Mailbox mailbox4) {
         this.messageIdManager = messageIdManager;
         this.session = session;
         this.mailbox1 = mailbox1;
         this.mailbox2 = mailbox2;
         this.mailbox3 = mailbox3;
+        this.mailbox4 = mailbox4;
     }
 
     public MessageIdManager getMessageIdManager() {
         return messageIdManager;
     }
 
-    public MailboxSession getSession() {
-        return session;
-    }
-
     public Mailbox getMailbox1() {
         return mailbox1;
     }
@@ -65,6 +63,10 @@ public abstract class MessageIdManagerTestSystem {
         return mailbox3;
     }
 
+    public Mailbox getMailbox4() {
+        return mailbox4;
+    }
+
     /**
      * Should take care of find returning the MailboxMessage
      * Should take care of findMailboxes returning the mailbox the message is in

http://git-wip-us.apache.org/repos/asf/james-project/blob/82f4b30d/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMessageIdManagerSideEffectTest.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMessageIdManagerSideEffectTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMessageIdManagerSideEffectTest.java
index d397526..bfc0f93 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMessageIdManagerSideEffectTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMessageIdManagerSideEffectTest.java
@@ -37,8 +37,12 @@ public class StoreMessageIdManagerSideEffectTest extends AbstractMessageIdManage
         MessageIdManager messageIdManager = new StoreMessageIdManager(testMailboxSessionMapperFactory, dispatcher, messageIdFactory,
             quotaManager, new DefaultQuotaRootResolver(testMailboxSessionMapperFactory));
 
-        return new StoreMessageIdManagerTestSystem(messageIdManager, testMailboxSessionMapperFactory.getMailbox1(),
-            testMailboxSessionMapperFactory.getMailbox2(), testMailboxSessionMapperFactory.getMailbox3(), messageIdFactory,
+        return new StoreMessageIdManagerTestSystem(messageIdManager,
+            testMailboxSessionMapperFactory.getMailbox1(),
+            testMailboxSessionMapperFactory.getMailbox2(),
+            testMailboxSessionMapperFactory.getMailbox3(),
+            testMailboxSessionMapperFactory.getMailbox4(),
+            messageIdFactory,
             testMailboxSessionMapperFactory);
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/82f4b30d/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMessageIdManagerTestSystem.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMessageIdManagerTestSystem.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMessageIdManagerTestSystem.java
index ea946a1..a5cd64e 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMessageIdManagerTestSystem.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMessageIdManagerTestSystem.java
@@ -47,9 +47,9 @@ public class StoreMessageIdManagerTestSystem extends MessageIdManagerTestSystem
     private final MessageId.Factory messageIdFactory;
     private final TestMailboxSessionMapperFactory mapperFactory;
 
-    public StoreMessageIdManagerTestSystem(MessageIdManager messageIdManager, Mailbox mailbox1, Mailbox mailbox2, Mailbox mailbox3,
+    public StoreMessageIdManagerTestSystem(MessageIdManager messageIdManager, Mailbox mailbox1, Mailbox mailbox2, Mailbox mailbox3, Mailbox mailbox4,
                                            MessageId.Factory messageIdFactory, TestMailboxSessionMapperFactory mapperFactory) {
-        super(messageIdManager, EMPTY_MAILBOX_SESSION, mailbox1, mailbox2, mailbox3);
+        super(messageIdManager, EMPTY_MAILBOX_SESSION, mailbox1, mailbox2, mailbox3, mailbox4);
 
         this.messageIdFactory = messageIdFactory;
         this.mapperFactory = mapperFactory;

http://git-wip-us.apache.org/repos/asf/james-project/blob/82f4b30d/mailbox/store/src/test/java/org/apache/james/mailbox/store/TestMailboxSessionMapperFactory.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/TestMailboxSessionMapperFactory.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/TestMailboxSessionMapperFactory.java
index 531bd8e..9e8e236 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/TestMailboxSessionMapperFactory.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/TestMailboxSessionMapperFactory.java
@@ -69,6 +69,7 @@ public class TestMailboxSessionMapperFactory extends MailboxSessionMapperFactory
     private final SimpleMailbox mailbox1;
     private final SimpleMailbox mailbox2;
     private final SimpleMailbox mailbox3;
+    private final SimpleMailbox mailbox4;
     private final List<MailboxMessage> messages = new ArrayList<MailboxMessage>();
     private final MailboxMapper mailboxMapper;
     private final MessageIdMapper messageIdMapper;
@@ -77,6 +78,7 @@ public class TestMailboxSessionMapperFactory extends MailboxSessionMapperFactory
         mailbox1 = new SimpleMailbox(new MailboxPath("#private", "user", "INBOX"), UID_VALIDITY, TestId.of(36));
         mailbox2 = new SimpleMailbox(new MailboxPath("#private", "user", "OUTBOX"), UID_VALIDITY, TestId.of(46));
         mailbox3 = new SimpleMailbox(new MailboxPath("#private", "user", "SENT"), UID_VALIDITY, TestId.of(56));
+        mailbox4 = new SimpleMailbox(new MailboxPath("#public", "otheruser", "INBOX"), UID_VALIDITY, TestId.of(66));
 
         mailboxMapper = new MailboxMapper() {
             @Override
@@ -207,6 +209,10 @@ public class TestMailboxSessionMapperFactory extends MailboxSessionMapperFactory
         return mailbox3;
     }
 
+    public SimpleMailbox getMailbox4() {
+        return mailbox4;
+    }
+
     @Override
     public UidProvider getUidProvider() {
         UidProvider uidProvider = mock(UidProvider.class);


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