From 36b0ef6e89e3eea5941322450ebff623e4028c19 Mon Sep 17 00:00:00 2001 From: Quynh Nguyen Date: Tue, 20 Dec 2016 17:16:47 +0700 Subject: [PATCH] JAMES-1888: MessageIdManager, persist and delete must be attached to MailboxSession --- .../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 +- ...bstractMessageIdManagerSideEffectTest.java | 35 ++--- .../AbstractMessageIdManagerStorageTest.java | 136 ++++++++---------- .../store/MessageIdManagerTestSystem.java | 35 +---- .../StoreMessageIdManagerSideEffectTest.java | 4 - .../StoreMessageIdManagerTestSystem.java | 19 ++- .../TestMailboxSessionMapperFactory.java | 26 +++- .../mailet/base/MailAddressFixture.java | 1 - 14 files changed, 202 insertions(+), 230 deletions(-) create mode 100644 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 00000000000..516e5785248 --- /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"); +} 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 fcbdca3392c..b5faa01cf00 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.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.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 static MessageIdManagerTestSystem createTestingData(QuotaManager quotaMan 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 MessageId createNotUsedMessageId() { } @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); 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 b10b599777c..4d40e1b30a4 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 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 MailboxId apply(MessageResult message) { }); } - private Optional findMessageWithId(MailboxId mailboxId, final MessageId messageId, FetchGroup fetchGroup, MailboxSession mailboxSession) throws MailboxException { + private Optional findMessageWithId(MailboxId mailboxId, MessageId messageId, FetchGroup fetchGroup, MailboxSession mailboxSession) throws MailboxException { return FluentIterable.from(retrieveAllMessages(mailboxId, fetchGroup, mailboxSession)) - .filter(new Predicate() { - - @Override - public boolean apply(MessageResult messageResult) { - return messageResult.getMessageId().equals(messageId); - } - }) + .filter(filterByMessageId(messageId)) .first(); } + private Predicate filterByMessageId(final MessageId messageId) { + return new Predicate() { + + @Override + public boolean apply(MessageResult messageResult) { + return messageResult.getMessageId().equals(messageId); + } + }; + } + private ImmutableList retrieveAllMessages(MailboxId mailboxId, FetchGroup fetchGroup, MailboxSession mailboxSession) throws MailboxException { MessageManager messageManager = mailboxManager.getMailbox(mailboxId, mailboxSession); return ImmutableList.copyOf(messageManager.getMessages(MessageRange.all(), fetchGroup, mailboxSession)); 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 466d698372c..649f6cb0e72 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.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 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 MessageId createNotUsedMessageId() { } @Override - public void deleteMailbox(final MailboxId mailboxId) { + public void deleteMailbox(final MailboxId mailboxId, MailboxSession session) { try { - Optional mailbox = retrieveMailbox(mailboxId); + Optional 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 retrieveMailbox(final MailboxId mailboxId) throws MailboxException { + private Optional 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() { 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 206c0d3d6f0..35736fedd91 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 @@ private static InMemoryMailboxManager createMailboxManager() { 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); 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 fcbc10aee6d..6f436a1371a 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.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 boolean apply(MailboxMessage input) { } private void allowOnMailboxSession(List mailboxIds, MailboxSession mailboxSession, MailboxMapper mailboxMapper) throws MailboxNotFoundException { - boolean isForbidden = FluentIterable.from(mailboxIds) + Optional mailboxForbidden = FluentIterable.from(mailboxIds) .firstMatch(isMailboxOfOtherUser(mailboxSession, mailboxMapper)) - .isPresent(); + .or(Optional.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"); } } 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 452d87788fd..4a394d3891d 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.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 @@ protected MailboxMessage createMessage(Date internalDate, int size, int bodyStar * @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)); } /** 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 957d51dfded..ccf3aae3110 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.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.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 void setUp() throws Exception { 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 void tearDown() { @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 void deleteShouldCallEventDispatcher() throws Exception { @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 void deleteShouldNotCallEventDispatcherWhenMessageIsInWrongMailbox() thro @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 void setInMailboxesShouldNotCallDispatcherWhenMessageAlreadyInMailbox() t @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 void setInMailboxesShouldCallDispatcher() throws Exception { @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 void setInMailboxesShouldCallDispatcherWithMultipleMailboxes() throws Exc @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 void setInMailboxesShouldThrowExceptionWhenOverQuota() throws Exception { @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 void setInMailboxesShouldCallDispatchForOnlyAddedAndRemovedMailboxes() th 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 void setFlagsShouldNotDispatchWhenFlagAlreadySet() throws Exception { 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 void setFlagsShouldNotDispatchWhenMessageAlreadyInMailbox() throws Except 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 void setFlagsShouldNotDispatchWhenMessageDoesNotBelongToMailbox() throws 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.of(), session); @@ -263,7 +264,7 @@ public void setFlagsShouldNotDispatchWhenEmptyMailboxes() throws Exception { 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 void setFlagsShouldDispatchWhenMessageBelongsToAllMailboxes() throws Exce @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); 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 b8c8565786c..97d35fe88f7 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.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 @@ 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 MailboxId apply(MessageResult input) { private Mailbox mailbox3; private Mailbox mailbox4; private MailboxSession session; + private MailboxSession otherSession; @Rule public ExpectedException expectedException = ExpectedException.none(); @@ -101,14 +103,15 @@ public MailboxId apply(MessageResult input) { @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 void setInMailboxesShouldNotFailWhenMessageDoesNotExist() throws Exceptio @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 void setInMailboxesShouldSetMessageInBothMailboxes() throws Exception { @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 void setInMailboxesShouldNotDuplicateMessageIfSameMailbox() throws Except @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 void setInMailboxesShouldSetHighestUidInNewMailbox() throws Exception { @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 void setInMailboxesShouldSetHighestModSeqInNewMailbox() throws Exception @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 void setInMailboxesShouldNotChangeUidAndModSeqInOriginalMailbox() throws @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 void setInMailboxesShouldAddAndRemoveMailboxes() throws Exception { @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,42 +279,32 @@ public void setInMailboxesShouldReplaceFlagsOfMessageInAddedMailboxes() throws E 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); 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); + MessageId messageId = testingData.persist(mailbox1.getMailboxId(), messageUid1, FLAGS, session); messageIdManager.delete(messageId, ImmutableList.of(mailbox1.getMailboxId()), session); @@ -328,7 +313,7 @@ public void deleteMessageShouldRemoveMessageFromMailbox() throws Exception { @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 void deleteMessageShouldRemoveMessageOnlyFromMailbox() throws Exception { @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 void deleteMessageShouldNotRemoveMessageOnAnotherMailbox() throws Excepti 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 void deleteMessageShouldThrowExceptionWhenOneMailboxDoesNotBelongToUser() @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 void setFlagsShouldUpdateFlags() throws Exception { @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 void setFlagsShouldNotChangeTheUid() throws Exception { @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 void setFlagsShouldChangeTheModSeq() throws Exception { @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 void setFlagsShouldChangeFlagsInAllMailboxes() throws Exception { @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 void setFlagsShouldNotChangeFlagsOfAnotherMessageInSameMailbox() throws E @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.of(), session); @@ -472,7 +458,7 @@ public void setFlagsShouldNotChangeFlagsWhenEmptyMailboxes() throws Exception { @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 void setFlagsShouldNotChangeFlagsWhenMessageDoesNotBelongToTheMailboxes() @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 void setFlagsShouldThrowExceptionWhenSetFlagsOnOtherSession() throws Exce 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 = 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 void setFlagsShouldThrowExceptionWhenMailboxDoesNotBelongToMailboxSession @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 messageResults = messageIdManager.getMessages(ImmutableList.of(messageId), FetchGroupImpl.MINIMAL, session); assertThat(messageResults).hasSize(1); 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 06f1a1ecc36..eeae592fc1c 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 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 Mailbox getMailbox4() { * @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(); } 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 bfc0f932b77..d4445e93f8b 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 @@ protected MessageIdManagerTestSystem createTestSystem(QuotaManager quotaManager, quotaManager, new DefaultQuotaRootResolver(testMailboxSessionMapperFactory)); return new StoreMessageIdManagerTestSystem(messageIdManager, - testMailboxSessionMapperFactory.getMailbox1(), - testMailboxSessionMapperFactory.getMailbox2(), - testMailboxSessionMapperFactory.getMailbox3(), - testMailboxSessionMapperFactory.getMailbox4(), messageIdFactory, testMailboxSessionMapperFactory); } 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 5c2d84e6591..7c0c1fab52f 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.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 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 MessageId persist(MailboxId mailboxId, MessageUid uid, Flags flags) { } @Override - public void deleteMailbox(MailboxId mailboxId) { + public void deleteMailbox(MailboxId mailboxId, MailboxSession mailboxSession) { throw new NotImplementedException(); } 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 9e8e236ea39..e90e982645d 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.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 messages = new ArrayList(); 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 void delete(Mailbox mailbox) throws MailboxException { @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 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 d3ffb361246..ca1725d5256 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 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";