MAILBOX-337 Get ride of stored leveled mocked tests We should rather play them directly on the memory implementation
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/75f1d70f Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/75f1d70f Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/75f1d70f Branch: refs/heads/master Commit: 75f1d70f0d7fd5b50d6458f24517db7375059152 Parents: b25ee7f Author: benwa <[email protected]> Authored: Thu May 24 15:14:24 2018 +0700 Committer: Matthieu Baechler <[email protected]> Committed: Fri May 25 11:07:39 2018 +0200 ---------------------------------------------------------------------- .../CassandraMessageIdManagerTestSystem.java | 95 +----- .../InMemoryMessageIdManagerTestSystem.java | 123 +------ .../manager/InMemoryIntegrationResources.java | 40 ++- .../InMemoryMessageIdManagerSideEffectTest.java | 82 +++++ .../store/AbstractCombinationManagerTest.java | 15 + .../AbstractMessageIdManagerSideEffectTest.java | 4 + .../store/MessageIdManagerTestSystem.java | 84 ++++- .../StoreMessageIdManagerSideEffectTest.java | 64 ---- .../store/StoreMessageIdManagerTestSystem.java | 115 ------- .../store/TestMailboxSessionMapperFactory.java | 327 ------------------- 10 files changed, 208 insertions(+), 741 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/75f1d70f/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 7adc220..31eefc2 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 @@ -19,47 +19,25 @@ package org.apache.james.mailbox.cassandra; -import java.nio.charset.StandardCharsets; -import java.util.Date; - -import javax.mail.Flags; -import javax.mail.util.SharedByteArrayInputStream; - import org.apache.james.backends.cassandra.CassandraCluster; -import org.apache.james.mailbox.MailboxSession; -import org.apache.james.mailbox.MessageIdManager; -import org.apache.james.mailbox.MessageUid; import org.apache.james.mailbox.cassandra.ids.CassandraMessageId; -import org.apache.james.mailbox.exception.MailboxException; -import org.apache.james.mailbox.model.MailboxACL; -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.quota.CurrentQuotaManager; import org.apache.james.mailbox.quota.QuotaManager; import org.apache.james.mailbox.store.MessageIdManagerTestSystem; -import org.apache.james.mailbox.store.SimpleMessageMetaData; import org.apache.james.mailbox.store.event.MailboxEventDispatcher; -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.PropertyBuilder; -import org.apache.james.mailbox.store.mail.model.impl.SimpleMailboxMessage; import org.apache.james.mailbox.store.quota.ListeningCurrentQuotaUpdater; import org.apache.james.mailbox.store.quota.StoreCurrentQuotaManager; -import com.google.common.base.Throwables; - -public class CassandraMessageIdManagerTestSystem extends MessageIdManagerTestSystem { - - private static final byte[] MESSAGE_CONTENT = "subject: any\n\nbody".getBytes(StandardCharsets.UTF_8); +public class CassandraMessageIdManagerTestSystem { public static MessageIdManagerTestSystem createTestingData(CassandraCluster cassandra, QuotaManager quotaManager, MailboxEventDispatcher dispatcher) throws Exception { CassandraMailboxSessionMapperFactory mapperFactory = CassandraTestSystemFixture.createMapperFactory(cassandra); - return new CassandraMessageIdManagerTestSystem(CassandraTestSystemFixture.createMessageIdManager(mapperFactory, quotaManager, dispatcher), + return new MessageIdManagerTestSystem(CassandraTestSystemFixture.createMessageIdManager(mapperFactory, quotaManager, dispatcher), new CassandraMessageId.Factory(), mapperFactory, - CassandraTestSystemFixture.createMailboxManager(mapperFactory)); + CassandraTestSystemFixture.createMailboxManager(mapperFactory)) { + }; } public static MessageIdManagerTestSystem createTestingDataWithQuota(CassandraCluster cassandra, QuotaManager quotaManager, CurrentQuotaManager currentQuotaManager) throws Exception { @@ -70,73 +48,10 @@ public class CassandraMessageIdManagerTestSystem extends MessageIdManagerTestSys (StoreCurrentQuotaManager) currentQuotaManager, mailboxManager.getQuotaRootResolver(), mailboxManager.getEventDispatcher(), quotaManager); mailboxManager.addGlobalListener(listeningCurrentQuotaUpdater, mailboxManager.createSystemSession("System")); - return new CassandraMessageIdManagerTestSystem(CassandraTestSystemFixture.createMessageIdManager(mapperFactory, quotaManager, mailboxManager.getEventDispatcher()), + return new MessageIdManagerTestSystem(CassandraTestSystemFixture.createMessageIdManager(mapperFactory, quotaManager, mailboxManager.getEventDispatcher()), new CassandraMessageId.Factory(), mapperFactory, mailboxManager); } - private final CassandraMessageId.Factory messageIdFactory; - private final CassandraMailboxSessionMapperFactory mapperFactory; - private final CassandraMailboxManager cassandraMailboxManager; - - public CassandraMessageIdManagerTestSystem(MessageIdManager messageIdManager, CassandraMessageId.Factory messageIdFactory, CassandraMailboxSessionMapperFactory mapperFactory, CassandraMailboxManager cassandraMailboxManager) { - super(messageIdManager); - this.messageIdFactory = messageIdFactory; - this.mapperFactory = mapperFactory; - this.cassandraMailboxManager = cassandraMailboxManager; - } - - @Override - 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); - MailboxMessage message = createMessage(mailboxId, flags, messageId, uid); - mapperFactory.getMessageMapper(mailboxSession).add(mailbox, message); - cassandraMailboxManager.getEventDispatcher().added(mailboxSession, new SimpleMessageMetaData(message), mailbox); - return messageId; - } catch (Exception e) { - throw Throwables.propagate(e); - } - } - - @Override - public MessageId createNotUsedMessageId() { - return messageIdFactory.generate(); - } - - @Override - 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); - } catch (Exception e) { - throw Throwables.propagate(e); - } - } - - private static MailboxMessage createMessage(MailboxId mailboxId, Flags flags, MessageId messageId, MessageUid uid) { - MailboxMessage mailboxMessage = new SimpleMailboxMessage(messageId, new Date(), MESSAGE_CONTENT.length, 1256, - new SharedByteArrayInputStream(MESSAGE_CONTENT), flags, new PropertyBuilder(), mailboxId); - mailboxMessage.setModSeq(CassandraTestSystemFixture.MOD_SEQ); - mailboxMessage.setUid(uid); - return mailboxMessage; - } - - @Override - public int getConstantMessageSize() { - return MESSAGE_CONTENT.length; - } - - @Override - public void setACL(MailboxId mailboxId, MailboxACL mailboxACL, MailboxSession session) throws MailboxException { - cassandraMailboxManager.setRights(mailboxId, mailboxACL, session); - } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/james-project/blob/75f1d70f/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 7163e74..5447b59 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 @@ -18,130 +18,23 @@ ****************************************************************/ package org.apache.james.mailbox.inmemory; -import java.io.IOException; -import java.nio.charset.StandardCharsets; -import java.util.Optional; - -import javax.mail.Flags; - -import org.apache.james.mailbox.MailboxManager; -import org.apache.james.mailbox.MailboxSession; -import org.apache.james.mailbox.MessageIdManager; -import org.apache.james.mailbox.MessageManager; -import org.apache.james.mailbox.MessageUid; import org.apache.james.mailbox.acl.SimpleGroupMembershipResolver; import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.inmemory.manager.InMemoryIntegrationResources; -import org.apache.james.mailbox.model.MailboxACL; -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.MessageId; -import org.apache.james.mailbox.model.search.MailboxQuery; import org.apache.james.mailbox.store.MessageIdManagerTestSystem; import org.apache.james.mailbox.store.StoreMailboxManager; -import org.apache.james.mailbox.store.mail.model.Mailbox; -import org.apache.james.mailbox.store.mail.model.impl.SimpleMailbox; -import org.apache.james.mime4j.dom.Message; -import org.apache.james.mime4j.message.DefaultMessageWriter; - -import com.google.common.base.Throwables; -public class InMemoryMessageIdManagerTestSystem extends MessageIdManagerTestSystem { +public class InMemoryMessageIdManagerTestSystem { - public static InMemoryMessageIdManagerTestSystem create() throws MailboxException { + public static MessageIdManagerTestSystem create() throws MailboxException { InMemoryIntegrationResources inMemoryIntegrationResources = new InMemoryIntegrationResources(); - StoreMailboxManager mailboxManager = inMemoryIntegrationResources.createMailboxManager(new SimpleGroupMembershipResolver()); - return new InMemoryMessageIdManagerTestSystem( - inMemoryIntegrationResources.createMessageIdManager(mailboxManager), + InMemoryIntegrationResources.Resources resources = inMemoryIntegrationResources.createResources(new SimpleGroupMembershipResolver()); + StoreMailboxManager mailboxManager = resources.getMailboxManager(); + return new MessageIdManagerTestSystem( + inMemoryIntegrationResources.createMessageIdManager(mailboxManager, resources.getMessageIdFactory()), + resources.getMessageIdFactory(), + resources.getMailboxManager().getMapperFactory(), mailboxManager); } - 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 Optional<MessageId> lastMessageIdUsed; - private final Message message; - - private InMemoryMessageIdManagerTestSystem(MessageIdManager messageIdManager, MailboxManager mailboxManager) { - super(messageIdManager); - this.mailboxManager = mailboxManager; - this.lastMessageIdUsed = Optional.empty(); - try { - this.message = Message.Builder.of() - .setSubject("test") - .setBody("testmail", StandardCharsets.UTF_8) - .build(); - } catch (IOException e) { - throw Throwables.propagate(e); - } - } - - @Override - 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, session); - MessageId messageId = messageManager.appendMessage(MessageManager.AppendCommand - .builder() - .notRecent() - .withFlags(flags) - .build(message), - session) - .getMessageId(); - lastMessageIdUsed = Optional.of(messageId); - return messageId; - } catch (MailboxException | IOException e) { - throw Throwables.propagate(e); - } - } - - @Override - public MessageId createNotUsedMessageId() { - return InMemoryMessageId.of(Long.valueOf(lastMessageIdUsed.orElse(FIRST_MESSAGE_ID).serialize()) + ONE_HUNDRED); - } - - @Override - public void deleteMailbox(MailboxId mailboxId, MailboxSession session) { - try { - Optional<MailboxMetaData> mailbox = retrieveMailbox(mailboxId, session); - if (mailbox.isPresent()) { - mailboxManager.deleteMailbox(mailbox.get().getPath(), session); - } - } catch (MailboxException e) { - Throwables.propagate(e); - } - } - - private Optional<MailboxMetaData> retrieveMailbox(MailboxId mailboxId, MailboxSession mailboxSession) throws MailboxException { - MailboxQuery userMailboxesQuery = MailboxQuery.privateMailboxesBuilder(mailboxSession) - .matchesAllMailboxNames() - .build(); - return mailboxManager.search(userMailboxesQuery, mailboxSession) - .stream() - .filter(mailboxMetaData -> mailboxMetaData.getId().equals(mailboxId)) - .findFirst(); - } - - @Override - public int getConstantMessageSize() { - try { - return DefaultMessageWriter.asBytes(message).length; - } catch (IOException e) { - throw Throwables.propagate(e); - } - } - - @Override - public void setACL(MailboxId mailboxId, MailboxACL mailboxAcl, MailboxSession session) throws MailboxException { - mailboxManager.setRights(mailboxId, mailboxAcl, session); - } } http://git-wip-us.apache.org/repos/asf/james-project/blob/75f1d70f/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java ---------------------------------------------------------------------- diff --git a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java index 3b2014a..4b6c9a3 100644 --- a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java +++ b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java @@ -33,6 +33,7 @@ import org.apache.james.mailbox.inmemory.quota.InMemoryCurrentQuotaManager; import org.apache.james.mailbox.inmemory.quota.InMemoryPerUserMaxQuotaManager; import org.apache.james.mailbox.manager.IntegrationResources; import org.apache.james.mailbox.manager.ManagerTestResources; +import org.apache.james.mailbox.model.MessageId; import org.apache.james.mailbox.quota.CurrentQuotaManager; import org.apache.james.mailbox.quota.MaxQuotaManager; import org.apache.james.mailbox.quota.QuotaManager; @@ -66,14 +67,16 @@ public class InMemoryIntegrationResources implements IntegrationResources<StoreM private final CurrentQuotaManager currentQuotaManager; private final DefaultUserQuotaRootResolver quotaRootResolver; private final StoreRightManager storeRightManager; + private final MessageId.Factory messageIdFactory; - public Resources(InMemoryMailboxManager mailboxManager, MaxQuotaManager maxQuotaManager, QuotaManager quotaManager, CurrentQuotaManager currentQuotaManager, DefaultUserQuotaRootResolver quotaRootResolver, StoreRightManager storeRightManager) { + public Resources(InMemoryMailboxManager mailboxManager, MaxQuotaManager maxQuotaManager, QuotaManager quotaManager, CurrentQuotaManager currentQuotaManager, DefaultUserQuotaRootResolver quotaRootResolver, StoreRightManager storeRightManager, MessageId.Factory messageIdFactory) { this.mailboxManager = mailboxManager; this.maxQuotaManager = maxQuotaManager; this.quotaManager = quotaManager; this.currentQuotaManager = currentQuotaManager; this.quotaRootResolver = quotaRootResolver; this.storeRightManager = storeRightManager; + this.messageIdFactory = messageIdFactory; } public InMemoryMailboxManager getMailboxManager() { @@ -99,6 +102,10 @@ public class InMemoryIntegrationResources implements IntegrationResources<StoreM public StoreRightManager getStoreRightManager() { return storeRightManager; } + + public MessageId.Factory getMessageIdFactory() { + return messageIdFactory; + } } private SimpleGroupMembershipResolver groupMembershipResolver; @@ -131,7 +138,7 @@ public class InMemoryIntegrationResources implements IntegrationResources<StoreM } private Resources createMailboxManager(GroupMembershipResolver groupMembershipResolver, - BiFunction<StoreRightManager, InMemoryMailboxSessionMapperFactory, StoreMailboxAnnotationManager> annotationManagerBiFunction) throws MailboxException { + BiFunction<StoreRightManager, InMemoryMailboxSessionMapperFactory, StoreMailboxAnnotationManager> annotationManagerBiFunction) throws MailboxException { FakeAuthenticator fakeAuthenticator = new FakeAuthenticator(); fakeAuthenticator.addUser(ManagerTestResources.USER, ManagerTestResources.USER_PASS); fakeAuthenticator.addUser(ManagerTestResources.OTHER_USER, ManagerTestResources.OTHER_USER_PASS); @@ -139,7 +146,7 @@ public class InMemoryIntegrationResources implements IntegrationResources<StoreM DefaultDelegatingMailboxListener delegatingListener = new DefaultDelegatingMailboxListener(); MailboxEventDispatcher mailboxEventDispatcher = new MailboxEventDispatcher(delegatingListener); StoreRightManager storeRightManager = new StoreRightManager(mailboxSessionMapperFactory, new UnionMailboxACLResolver(), - groupMembershipResolver, mailboxEventDispatcher); + groupMembershipResolver, mailboxEventDispatcher); StoreMailboxAnnotationManager annotationManager = annotationManagerBiFunction .apply(storeRightManager, mailboxSessionMapperFactory); @@ -158,16 +165,17 @@ public class InMemoryIntegrationResources implements IntegrationResources<StoreM MaxQuotaManager maxQuotaManager = createMaxQuotaManager(); try { QuotaManager quotaManager = createQuotaManager(maxQuotaManager, manager); - return new Resources( - manager, - maxQuotaManager, - quotaManager, - currentQuotaManager, - quotaRootResolver, - storeRightManager); - } catch (Exception e) { - throw Throwables.propagate(e); - } + return new Resources( + manager, + maxQuotaManager, + quotaManager, + currentQuotaManager, + quotaRootResolver, + storeRightManager, + new InMemoryMessageId.Factory()); + } catch (Exception e) { + throw Throwables.propagate(e); + } } public StoreMailboxManager createMailboxManager(GroupMembershipResolver groupMembershipResolver, @@ -195,11 +203,15 @@ public class InMemoryIntegrationResources implements IntegrationResources<StoreM @Override public MessageIdManager createMessageIdManager(StoreMailboxManager mailboxManager) { + return createMessageIdManager(mailboxManager, new InMemoryMessageId.Factory()); + } + + public MessageIdManager createMessageIdManager(StoreMailboxManager mailboxManager, MessageId.Factory factory) { return new StoreMessageIdManager( mailboxManager, mailboxManager.getMapperFactory(), mailboxManager.getEventDispatcher(), - new InMemoryMessageId.Factory(), + factory, mailboxManager.getQuotaManager(), mailboxManager.getQuotaRootResolver()); } http://git-wip-us.apache.org/repos/asf/james-project/blob/75f1d70f/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryMessageIdManagerSideEffectTest.java ---------------------------------------------------------------------- diff --git a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryMessageIdManagerSideEffectTest.java b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryMessageIdManagerSideEffectTest.java new file mode 100644 index 0000000..43295bd --- /dev/null +++ b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryMessageIdManagerSideEffectTest.java @@ -0,0 +1,82 @@ +/**************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one * + * or more contributor license agreements. See the NOTICE file * + * distributed with this work for additional information * + * regarding copyright ownership. The ASF licenses this file * + * to you under the Apache License, Version 2.0 (the * + * "License"); you may not use this file except in compliance * + * with the License. You may obtain a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, * + * software distributed under the License is distributed on an * + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * + * KIND, either express or implied. See the License for the * + * specific language governing permissions and limitations * + * under the License. * + ****************************************************************/ + +package org.apache.james.mailbox.inmemory.manager; + +import org.apache.james.mailbox.acl.SimpleGroupMembershipResolver; +import org.apache.james.mailbox.acl.UnionMailboxACLResolver; +import org.apache.james.mailbox.inmemory.InMemoryMailboxManager; +import org.apache.james.mailbox.inmemory.InMemoryMailboxSessionMapperFactory; +import org.apache.james.mailbox.inmemory.InMemoryMessageId; +import org.apache.james.mailbox.manager.ManagerTestResources; +import org.apache.james.mailbox.quota.QuotaManager; +import org.apache.james.mailbox.store.AbstractMessageIdManagerSideEffectTest; +import org.apache.james.mailbox.store.FakeAuthenticator; +import org.apache.james.mailbox.store.FakeAuthorizator; +import org.apache.james.mailbox.store.JVMMailboxPathLocker; +import org.apache.james.mailbox.store.MessageIdManagerTestSystem; +import org.apache.james.mailbox.store.StoreMailboxAnnotationManager; +import org.apache.james.mailbox.store.StoreMessageIdManager; +import org.apache.james.mailbox.store.StoreRightManager; +import org.apache.james.mailbox.store.event.DefaultDelegatingMailboxListener; +import org.apache.james.mailbox.store.event.MailboxEventDispatcher; +import org.apache.james.mailbox.store.mail.model.impl.MessageParser; +import org.apache.james.mailbox.store.quota.DefaultUserQuotaRootResolver; +import org.junit.Before; + +public class InMemoryMessageIdManagerSideEffectTest extends AbstractMessageIdManagerSideEffectTest { + + @Override + @Before + public void setUp() throws Exception { + super.setUp(); + } + + @Override + protected MessageIdManagerTestSystem createTestSystem(QuotaManager quotaManager, MailboxEventDispatcher dispatcher) { + InMemoryMailboxSessionMapperFactory mapperFactory = new InMemoryMailboxSessionMapperFactory(); + + FakeAuthenticator fakeAuthenticator = new FakeAuthenticator(); + fakeAuthenticator.addUser(ManagerTestResources.USER, ManagerTestResources.USER_PASS); + fakeAuthenticator.addUser(ManagerTestResources.OTHER_USER, ManagerTestResources.OTHER_USER_PASS); + FakeAuthorizator fakeAuthorizator = FakeAuthorizator.defaultReject(); + + StoreRightManager rightManager = new StoreRightManager(mapperFactory, new UnionMailboxACLResolver(), new SimpleGroupMembershipResolver(), dispatcher); + JVMMailboxPathLocker locker = new JVMMailboxPathLocker(); + InMemoryMessageId.Factory messageIdFactory = new InMemoryMessageId.Factory(); + InMemoryMailboxManager mailboxManager = new InMemoryMailboxManager(mapperFactory, + fakeAuthenticator, + fakeAuthorizator, + locker, + new MessageParser(), + messageIdFactory, + dispatcher, + new DefaultDelegatingMailboxListener(), + new StoreMailboxAnnotationManager(mapperFactory, rightManager), + rightManager); + StoreMessageIdManager messageIdManager = new StoreMessageIdManager( + mailboxManager, + mapperFactory, + dispatcher, + messageIdFactory, + quotaManager, + new DefaultUserQuotaRootResolver(mapperFactory)); + return new MessageIdManagerTestSystem(messageIdManager, messageIdFactory, mapperFactory, mailboxManager); + } +} http://git-wip-us.apache.org/repos/asf/james-project/blob/75f1d70f/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractCombinationManagerTest.java ---------------------------------------------------------------------- diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractCombinationManagerTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractCombinationManagerTest.java index 4506b6a..ac11def 100644 --- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractCombinationManagerTest.java +++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractCombinationManagerTest.java @@ -515,6 +515,21 @@ public abstract class AbstractCombinationManagerTest { assertThat(messageManager1.search(searchQuery, session)).isEmpty(); } + @Test + public void getUidsShouldInteractWellWithDeletes() throws Exception { + MessageId messageId1 = messageManager1 + .appendMessage(MessageManager.AppendCommand.from(mailContent), session) + .getMessageId(); + MessageId messageId2 = messageManager1 + .appendMessage(MessageManager.AppendCommand.from(mailContent), session) + .getMessageId(); + + messageIdManager.delete(ImmutableList.of(messageId1, messageId2), session); + + SearchQuery searchQuery = new SearchQuery(SearchQuery.all()); + assertThat(messageManager1.search(searchQuery, session)).isEmpty(); + } + private Predicate<MessageResult> messageInMailbox2() { return messageResult -> messageResult.getMailboxId().equals(mailbox2.getMailboxId()); } http://git-wip-us.apache.org/repos/asf/james-project/blob/75f1d70f/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 92431a9..3f38a6f 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 @@ -290,6 +290,8 @@ public abstract class AbstractMessageIdManagerSideEffectTest { givenUnlimitedQuota(); MessageId messageId = testingData.createNotUsedMessageId(); + reset(dispatcher); + messageIdManager.delete(messageId, ImmutableList.of(mailbox1.getMailboxId()), session); verifyNoMoreInteractions(dispatcher); @@ -299,6 +301,7 @@ public abstract class AbstractMessageIdManagerSideEffectTest { public void setFlagsShouldNotDispatchEventWhenMessageDoesNotExist() throws Exception { givenUnlimitedQuota(); MessageId messageId = testingData.createNotUsedMessageId(); + reset(dispatcher); messageIdManager.setFlags(FLAGS, FlagsUpdateMode.ADD, messageId, ImmutableList.of(mailbox2.getMailboxId()), session); @@ -309,6 +312,7 @@ public abstract class AbstractMessageIdManagerSideEffectTest { public void setInMailboxesShouldNotDispatchEventWhenMessageDoesNotExist() throws Exception { givenUnlimitedQuota(); MessageId messageId = testingData.createNotUsedMessageId(); + reset(dispatcher); messageIdManager.setInMailboxes(messageId, ImmutableList.of(mailbox1.getMailboxId()), session); http://git-wip-us.apache.org/repos/asf/james-project/blob/75f1d70f/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 c04aed9..21de9e1 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 @@ -19,7 +19,11 @@ package org.apache.james.mailbox.store; +import java.nio.charset.StandardCharsets; +import java.util.Date; + import javax.mail.Flags; +import javax.mail.util.SharedByteArrayInputStream; import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.MessageIdManager; @@ -30,20 +34,18 @@ 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; +import org.apache.james.mailbox.store.mail.model.impl.PropertyBuilder; +import org.apache.james.mailbox.store.mail.model.impl.SimpleMailboxMessage; -public abstract class MessageIdManagerTestSystem { +public class MessageIdManagerTestSystem { + private static final byte[] MESSAGE_CONTENT = "subject: any\n\nbody".getBytes(StandardCharsets.UTF_8); + public static final int MOD_SEQ = 452; private final MessageIdManager messageIdManager; - - public MessageIdManagerTestSystem(MessageIdManager messageIdManager) { - this.messageIdManager = messageIdManager; - } - - public MessageIdManager getMessageIdManager() { - return messageIdManager; - } - - public abstract Mailbox createMailbox(MailboxPath mailboxPath, MailboxSession session) throws MailboxException; + private final MessageId.Factory messageIdFactory; + private final MailboxSessionMapperFactory mapperFactory; + private final StoreMailboxManager mailboxManager; /** * Should take care of find returning the MailboxMessage @@ -55,13 +57,63 @@ public abstract class MessageIdManagerTestSystem { * @param flags * @return the id of persisted message */ - public abstract MessageId persist(MailboxId mailboxId, MessageUid uid, Flags flags, MailboxSession session); - public abstract MessageId createNotUsedMessageId(); + public MessageIdManagerTestSystem(MessageIdManager messageIdManager, MessageId.Factory messageIdFactory, MailboxSessionMapperFactory mapperFactory, StoreMailboxManager mailboxManager) { + this.messageIdManager = messageIdManager; + this.messageIdFactory = messageIdFactory; + this.mapperFactory = mapperFactory; + this.mailboxManager = mailboxManager; + } - public abstract void deleteMailbox(MailboxId mailboxId, MailboxSession session); - public abstract int getConstantMessageSize(); + public MessageIdManager getMessageIdManager() { + return messageIdManager; + } - public abstract void setACL(MailboxId mailboxId, MailboxACL mailboxACL, MailboxSession session) throws MailboxException; + public Mailbox createMailbox(MailboxPath mailboxPath, MailboxSession session) throws MailboxException { + mailboxManager.createMailbox(mailboxPath, session); + return mapperFactory.getMailboxMapper(session).findMailboxByPath(mailboxPath); + } + + public MessageId persist(MailboxId mailboxId, MessageUid uid, Flags flags, MailboxSession mailboxSession) { + try { + MessageId messageId = messageIdFactory.generate(); + Mailbox mailbox = mapperFactory.getMailboxMapper(mailboxSession).findMailboxById(mailboxId); + MailboxMessage message = createMessage(mailboxId, flags, messageId, uid); + mapperFactory.getMessageMapper(mailboxSession).add(mailbox, message); + mailboxManager.getEventDispatcher().added(mailboxSession, new SimpleMessageMetaData(message), mailbox); + return messageId; + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + public MessageId createNotUsedMessageId() { + return messageIdFactory.generate(); + } + + public void deleteMailbox(MailboxId mailboxId, MailboxSession mailboxSession) { + try { + Mailbox mailbox = mapperFactory.getMailboxMapper(mailboxSession).findMailboxById(mailboxId); + mailboxManager.deleteMailbox(new MailboxPath(mailbox.getNamespace(), mailbox.getUser(), mailbox.getName()), mailboxSession); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + private static MailboxMessage createMessage(MailboxId mailboxId, Flags flags, MessageId messageId, MessageUid uid) { + MailboxMessage mailboxMessage = new SimpleMailboxMessage(messageId, new Date(), MESSAGE_CONTENT.length, 1256, + new SharedByteArrayInputStream(MESSAGE_CONTENT), flags, new PropertyBuilder(), mailboxId); + mailboxMessage.setModSeq(MOD_SEQ); + mailboxMessage.setUid(uid); + return mailboxMessage; + } + + public int getConstantMessageSize() { + return MESSAGE_CONTENT.length; + } + + public void setACL(MailboxId mailboxId, MailboxACL mailboxACL, MailboxSession session) throws MailboxException { + mailboxManager.setRights(mailboxId, mailboxACL, session); + } } http://git-wip-us.apache.org/repos/asf/james-project/blob/75f1d70f/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 deleted file mode 100644 index 1006292..0000000 --- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMessageIdManagerSideEffectTest.java +++ /dev/null @@ -1,64 +0,0 @@ -/**************************************************************** - * Licensed to the Apache Software Foundation (ASF) under one * - * or more contributor license agreements. See the NOTICE file * - * distributed with this work for additional information * - * regarding copyright ownership. The ASF licenses this file * - * to you under the Apache License, Version 2.0 (the * - * "License"); you may not use this file except in compliance * - * with the License. You may obtain a copy of the License at * - * * - * http://www.apache.org/licenses/LICENSE-2.0 * - * * - * Unless required by applicable law or agreed to in writing, * - * software distributed under the License is distributed on an * - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * - * KIND, either express or implied. See the License for the * - * specific language governing permissions and limitations * - * under the License. * - ****************************************************************/ - -package org.apache.james.mailbox.store; - -import static org.mockito.Matchers.any; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -import org.apache.james.mailbox.MailboxManager; -import org.apache.james.mailbox.MailboxSession; -import org.apache.james.mailbox.MessageIdManager; -import org.apache.james.mailbox.model.MailboxACL; -import org.apache.james.mailbox.model.MailboxId; -import org.apache.james.mailbox.model.MessageId; -import org.apache.james.mailbox.model.TestMessageId; -import org.apache.james.mailbox.quota.QuotaManager; -import org.apache.james.mailbox.store.event.MailboxEventDispatcher; -import org.apache.james.mailbox.store.quota.DefaultUserQuotaRootResolver; -import org.junit.Before; - -public class StoreMessageIdManagerSideEffectTest extends AbstractMessageIdManagerSideEffectTest { - - @Override - @Before - public void setUp() throws Exception { - super.setUp(); - } - - @Override - protected MessageIdManagerTestSystem createTestSystem(QuotaManager quotaManager, MailboxEventDispatcher dispatcher) throws Exception { - - TestMailboxSessionMapperFactory testMailboxSessionMapperFactory = new TestMailboxSessionMapperFactory(); - MessageId.Factory messageIdFactory = new TestMessageId.Factory(); - MailboxManager mailboxManager = mock(MailboxManager.class); - when(mailboxManager.myRights(any(MailboxId.class), any(MailboxSession.class))) - .thenReturn(MailboxACL.FULL_RIGHTS); - - MessageIdManager messageIdManager = new StoreMessageIdManager(mailboxManager, - testMailboxSessionMapperFactory, dispatcher, messageIdFactory, - quotaManager, new DefaultUserQuotaRootResolver(testMailboxSessionMapperFactory)); - - return new StoreMessageIdManagerTestSystem(messageIdManager, - messageIdFactory, - testMailboxSessionMapperFactory); - } - -} http://git-wip-us.apache.org/repos/asf/james-project/blob/75f1d70f/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 deleted file mode 100644 index 266722b..0000000 --- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMessageIdManagerTestSystem.java +++ /dev/null @@ -1,115 +0,0 @@ -/**************************************************************** - * Licensed to the Apache Software Foundation (ASF) under one * - * or more contributor license agreements. See the NOTICE file * - * distributed with this work for additional information * - * regarding copyright ownership. The ASF licenses this file * - * to you under the Apache License, Version 2.0 (the * - * "License"); you may not use this file except in compliance * - * with the License. You may obtain a copy of the License at * - * * - * http://www.apache.org/licenses/LICENSE-2.0 * - * * - * Unless required by applicable law or agreed to in writing, * - * software distributed under the License is distributed on an * - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * - * KIND, either express or implied. See the License for the * - * specific language governing permissions and limitations * - * under the License. * - ****************************************************************/ - -package org.apache.james.mailbox.store; - -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.time.Instant; -import java.util.Date; - -import javax.mail.Flags; - -import org.apache.commons.lang3.NotImplementedException; -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.mock.MockMailboxSession; -import org.apache.james.mailbox.model.MailboxACL; -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; - -import com.google.common.base.Throwables; - -public class StoreMessageIdManagerTestSystem extends MessageIdManagerTestSystem { - 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; - private final MailboxSession defaultMailboxSession; - - public StoreMessageIdManagerTestSystem(MessageIdManager messageIdManager, MessageId.Factory messageIdFactory, TestMailboxSessionMapperFactory mapperFactory) { - super(messageIdManager); - - this.messageIdFactory = messageIdFactory; - this.mapperFactory = mapperFactory; - this.defaultMailboxSession = new MockMailboxSession("user"); - } - - @Override - 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(defaultMailboxSession) - .save(createMessage(mailboxId, flags, messageId, uid)); - return messageId; - } catch (MailboxException e) { - throw Throwables.propagate(e); - } - } - - @Override - public void deleteMailbox(MailboxId mailboxId, MailboxSession mailboxSession) { - throw new NotImplementedException("Not implemented"); - } - - @Override - public MessageId createNotUsedMessageId() { - return messageIdFactory.generate(); - } - - private MailboxMessage createMessage(MailboxId mailboxId, Flags flags, MessageId messageId, MessageUid uid) { - MailboxMessage mailboxMessage = mock(MailboxMessage.class); - when(mailboxMessage.getMessageId()).thenReturn(messageId); - when(mailboxMessage.getUid()).thenReturn(uid); - when(mailboxMessage.getModSeq()).thenReturn(MOD_SEQ); - when(mailboxMessage.getMailboxId()).thenReturn(mailboxId); - when(mailboxMessage.getInternalDate()).thenReturn(Date.from(Instant.parse("2007-12-03T10:15:30.00Z"))); - try { - when(mailboxMessage.getFullContent()).thenReturn(ARRAY_INPUT_STREAM); - } catch (IOException e) { - throw Throwables.propagate(e); - } - when(mailboxMessage.createFlags()).thenReturn(flags); - return mailboxMessage; - } - - @Override - public int getConstantMessageSize() { - throw new NotImplementedException("Not implemented"); - } - - @Override - public void setACL(MailboxId mailboxId, MailboxACL mailboxACL, MailboxSession session) throws MailboxException { - throw new NotImplementedException("Not implemented"); - } -} http://git-wip-us.apache.org/repos/asf/james-project/blob/75f1d70f/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 deleted file mode 100644 index f356d94..0000000 --- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/TestMailboxSessionMapperFactory.java +++ /dev/null @@ -1,327 +0,0 @@ -/**************************************************************** - * Licensed to the Apache Software Foundation (ASF) under one * - * or more contributor license agreements. See the NOTICE file * - * distributed with this work for additional information * - * regarding copyright ownership. The ASF licenses this file * - * to you under the Apache License, Version 2.0 (the * - * "License"); you may not use this file except in compliance * - * with the License. You may obtain a copy of the License at * - * * - * http://www.apache.org/licenses/LICENSE-2.0 * - * * - * Unless required by applicable law or agreed to in writing, * - * software distributed under the License is distributed on an * - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * - * KIND, either express or implied. See the License for the * - * specific language governing permissions and limitations * - * under the License. * - ****************************************************************/ - -package org.apache.james.mailbox.store; - -import static org.mockito.Matchers.any; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -import java.util.AbstractMap; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.Map; -import java.util.function.Function; -import java.util.function.Predicate; - -import javax.mail.Flags; - -import org.apache.commons.lang3.NotImplementedException; -import org.apache.james.mailbox.MailboxSession; -import org.apache.james.mailbox.MessageManager; -import org.apache.james.mailbox.MessageUid; -import org.apache.james.mailbox.acl.ACLDiff; -import org.apache.james.mailbox.exception.MailboxException; -import org.apache.james.mailbox.exception.MailboxNotFoundException; -import org.apache.james.mailbox.exception.SubscriptionException; -import org.apache.james.mailbox.fixture.MailboxFixture; -import org.apache.james.mailbox.model.MailboxACL; -import org.apache.james.mailbox.model.MailboxACL.Right; -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.model.TestId; -import org.apache.james.mailbox.model.UpdatedFlags; -import org.apache.james.mailbox.store.mail.AnnotationMapper; -import org.apache.james.mailbox.store.mail.MailboxMapper; -import org.apache.james.mailbox.store.mail.MessageIdMapper; -import org.apache.james.mailbox.store.mail.MessageMapper; -import org.apache.james.mailbox.store.mail.ModSeqProvider; -import org.apache.james.mailbox.store.mail.UidProvider; -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.SimpleMailbox; -import org.apache.james.mailbox.store.user.SubscriptionMapper; - -import com.github.steveash.guavate.Guavate; -import com.google.common.base.Preconditions; -import com.google.common.base.Throwables; -import com.google.common.collect.ImmutableMap; - -public class TestMailboxSessionMapperFactory extends MailboxSessionMapperFactory { - private static final long MOD_SEQ = 18; - private static final MessageUid UID = MessageUid.of(28); - private static final long UID_VALIDITY = 42; - - private final SimpleMailbox mailbox1; - private final SimpleMailbox mailbox2; - private final SimpleMailbox mailbox3; - private final SimpleMailbox mailbox4; - - private final List<MailboxMessage> messages = new ArrayList<>(); - private final MailboxMapper mailboxMapper; - private final MessageIdMapper messageIdMapper; - - public TestMailboxSessionMapperFactory() { - mailbox1 = new SimpleMailbox(MailboxFixture.INBOX_ALICE, UID_VALIDITY, TestId.of(36)); - mailbox2 = new SimpleMailbox(MailboxFixture.OUTBOX_ALICE, UID_VALIDITY, TestId.of(46)); - mailbox3 = new SimpleMailbox(MailboxFixture.SENT_ALICE, UID_VALIDITY, TestId.of(56)); - mailbox4 = new SimpleMailbox(MailboxFixture.INBOX_BOB, UID_VALIDITY, TestId.of(66)); - - mailboxMapper = new MailboxMapper() { - @Override - public MailboxId save(Mailbox mailbox) throws MailboxException { - throw new NotImplementedException("Not implemented"); - } - - @Override - public void delete(Mailbox mailbox) throws MailboxException { - throw new NotImplementedException("Not implemented"); - - } - - @Override - public Mailbox findMailboxByPath(MailboxPath mailboxName) throws MailboxException { - if (mailboxName.equals(MailboxFixture.INBOX_ALICE)) { - return mailbox1; - } - if (mailboxName.equals(MailboxFixture.OUTBOX_ALICE)) { - return mailbox2; - } - if (mailboxName.equals(MailboxFixture.SENT_ALICE)) { - return mailbox3; - } - throw new IllegalArgumentException("Unknown mailbox : " + mailboxName + " must be one of " - + MailboxFixture.INBOX_ALICE + " " - + MailboxFixture.OUTBOX_ALICE + " " - + MailboxFixture.SENT_ALICE); - } - - @Override - public Mailbox findMailboxById(MailboxId mailboxId) throws MailboxException { - if (mailboxId.equals(mailbox1.getMailboxId())) { - return mailbox1; - } - if (mailboxId.equals(mailbox2.getMailboxId())) { - return mailbox2; - } - if (mailboxId.equals(mailbox3.getMailboxId())) { - return mailbox3; - } - throw new IllegalArgumentException("Unknown mailboxId : " + mailboxId + " must be one of " + mailbox1.getMailboxId() + " " + mailbox2.getMailboxId() + " " + mailbox3.getMailboxId()); - } - - @Override - public List<Mailbox> findMailboxWithPathLike(MailboxPath mailboxPath) throws MailboxException { - throw new NotImplementedException("Not implemented"); - } - - @Override - public boolean hasChildren(Mailbox mailbox, char delimiter) throws MailboxException { - throw new NotImplementedException("Not implemented"); - } - - @Override - public ACLDiff updateACL(Mailbox mailbox, MailboxACL.ACLCommand mailboxACLCommand) throws MailboxException { - throw new NotImplementedException("Not implemented"); - } - - @Override - public ACLDiff setACL(Mailbox mailbox, MailboxACL mailboxACL) throws MailboxException { - throw new NotImplementedException("Not implemented"); - } - - @Override - public List<Mailbox> list() throws MailboxException { - throw new NotImplementedException("Not implemented"); - } - - @Override - public void endRequest() { - throw new NotImplementedException("Not implemented"); - } - - @Override - public <T> T execute(Transaction<T> transaction) throws MailboxException { - throw new NotImplementedException("Not implemented"); - } - - @Override - public List<Mailbox> findNonPersonalMailboxes(String userName, Right right) throws MailboxException { - throw new NotImplementedException("Not implemented"); - } - }; - messageIdMapper = new MessageIdMapper() { - - @Override - public List<MailboxMessage> find(Collection<MessageId> messageIds, MessageMapper.FetchType fetchType) { - return messages.stream() - .filter(withMessageIdOneOf(messageIds)) - .collect(Guavate.toImmutableList()); - } - - @Override - public List<MailboxId> findMailboxes(MessageId messageId) { - return messages.stream() - .filter(withMessageId(messageId)) - .map(MailboxMessage::getMailboxId) - .collect(Guavate.toImmutableList()); - } - - @Override - public void save(MailboxMessage mailboxMessage) throws MailboxException { - messages.add(mailboxMessage); - } - - @Override - public void copyInMailbox(MailboxMessage mailboxMessage) throws MailboxNotFoundException, MailboxException { - messages.add(mailboxMessage); - } - - @Override - public void delete(MessageId messageId) { - messages.removeAll( - messages.stream() - .filter(withMessageId(messageId)) - .collect(Guavate.toImmutableList())); - } - - @Override - public void delete(MessageId messageId, Collection<MailboxId> mailboxIds) { - messages.removeAll( - messages.stream() - .filter(withMessageId(messageId)) - .filter(inMailboxes(mailboxIds)) - .collect(Guavate.toImmutableList())); - } - - @Override - public Map<MailboxId, UpdatedFlags> setFlags(MessageId messageId, List<MailboxId> mailboxIds, Flags newState, MessageManager.FlagsUpdateMode updateMode) throws MailboxException { - List<Map.Entry<MailboxId, UpdatedFlags>> entries = messages.stream() - .filter(withMessageId(messageId)) - .filter(inMailboxes(mailboxIds)) - .map(toMapEntryOfUpdatedFlags(newState, updateMode)) - .filter(isChanged()) - .collect(Guavate.toImmutableList()); - ImmutableMap.Builder<MailboxId, UpdatedFlags> builder = ImmutableMap.builder(); - for (Map.Entry<MailboxId, UpdatedFlags> entry : entries) { - builder.put(entry); - } - return builder.build(); - } - }; - } - - public SimpleMailbox getMailbox1() { - return mailbox1; - } - - public SimpleMailbox getMailbox2() { - return mailbox2; - } - - public SimpleMailbox getMailbox3() { - return mailbox3; - } - - public SimpleMailbox getMailbox4() { - return mailbox4; - } - - @Override - public UidProvider getUidProvider() { - UidProvider uidProvider = mock(UidProvider.class); - try { - when(uidProvider.nextUid(any(MailboxSession.class), any(MailboxId.class))).thenReturn(UID); - } catch (MailboxException e) { - throw Throwables.propagate(e); - } - return uidProvider; - } - - @Override - public ModSeqProvider getModSeqProvider() { - ModSeqProvider modSeqProvider = mock(ModSeqProvider.class); - try { - when(modSeqProvider.nextModSeq(any(MailboxSession.class), any(MailboxId.class))).thenReturn(MOD_SEQ); - } catch (MailboxException e) { - throw Throwables.propagate(e); - } - return modSeqProvider; - } - - @Override - public AnnotationMapper createAnnotationMapper(MailboxSession session) throws MailboxException { - throw new NotImplementedException("Not implemented"); - } - - @Override - public MessageMapper createMessageMapper(MailboxSession session) throws MailboxException { - throw new NotImplementedException("Not implemented"); - } - - @Override - public MailboxMapper createMailboxMapper(MailboxSession session) throws MailboxException { - return mailboxMapper; - } - - @Override - public MessageIdMapper createMessageIdMapper(MailboxSession session) throws MailboxException { - return messageIdMapper; - } - - @Override - public SubscriptionMapper createSubscriptionMapper(MailboxSession session) throws SubscriptionException { - throw new NotImplementedException("Not implemented"); - } - - public void clean() { - messages.clear(); - } - - private Predicate<MailboxMessage> withMessageIdOneOf(Collection<MessageId> messageIds) { - return mailboxMessage -> messageIds.contains(mailboxMessage.getMessageId()); - } - - private Predicate<MailboxMessage> inMailboxes(Collection<MailboxId> mailboxIds) { - return mailboxMessage -> mailboxIds.contains(mailboxMessage.getMailboxId()); - } - - private Predicate<MailboxMessage> withMessageId(MessageId messageId) { - return mailboxMessage -> mailboxMessage.getMessageId().equals(messageId); - } - - private Predicate<Map.Entry<MailboxId, UpdatedFlags>> isChanged() { - return entry -> entry.getValue().flagsChanged(); - } - - private Function<MailboxMessage, Map.Entry<MailboxId, UpdatedFlags>> toMapEntryOfUpdatedFlags(Flags newState, MessageManager.FlagsUpdateMode updateMode) { - return mailboxMessage -> { - Preconditions.checkState(updateMode.equals(MessageManager.FlagsUpdateMode.ADD)); - return new AbstractMap.SimpleEntry<>(mailboxMessage.getMailboxId(), - UpdatedFlags.builder() - .uid(mailboxMessage.getUid()) - .modSeq(mailboxMessage.getModSeq()) - .newFlags(newState) - .oldFlags(mailboxMessage.createFlags()) - .build()); - }; - } -} --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
