JAMES-2037 Offer direct UID retrieval from MessageManager
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/e6f33c3c Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/e6f33c3c Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/e6f33c3c Branch: refs/heads/master Commit: e6f33c3c2d9e5974a2bd86a444ecc0e9388be650 Parents: 3f0aa54 Author: benwa <btell...@linagora.com> Authored: Thu May 25 17:31:20 2017 +0700 Committer: Antoine Duprat <adup...@linagora.com> Committed: Fri Jun 9 21:56:32 2017 +0200 ---------------------------------------------------------------------- .../apache/james/mailbox/model/SearchQuery.java | 28 ++++++------ .../james/mailbox/model/SearchQueryTest.java | 46 +++++++++++++++++++ .../mailbox/caching/CachingMessageMapper.java | 5 +++ .../cassandra/mail/CassandraMessageMapper.java | 9 ++++ .../mailbox/hbase/mail/HBaseMessageMapper.java | 16 +++++++ .../mailbox/jpa/mail/JPAMessageMapper.java | 15 +++++++ .../jpa/mail/TransactionalMessageMapper.java | 5 +++ .../mailbox/store/StoreMessageManager.java | 14 ++++++ .../store/mail/AbstractMessageMapper.java | 17 ++++++- .../james/mailbox/store/mail/MessageMapper.java | 5 +++ .../store/AbstractCombinationManagerTest.java | 47 +++++++++++++++----- .../StoreMailboxMessageResultIteratorTest.java | 7 ++- .../store/mail/model/MessageMapperTest.java | 28 +++++++++++- .../base/MailboxEventAnalyserTest.java | 7 +-- 14 files changed, 218 insertions(+), 31 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/e6f33c3c/mailbox/api/src/main/java/org/apache/james/mailbox/model/SearchQuery.java ---------------------------------------------------------------------- diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/model/SearchQuery.java b/mailbox/api/src/main/java/org/apache/james/mailbox/model/SearchQuery.java index d81b74d..ebfd6f1 100644 --- a/mailbox/api/src/main/java/org/apache/james/mailbox/model/SearchQuery.java +++ b/mailbox/api/src/main/java/org/apache/james/mailbox/model/SearchQuery.java @@ -740,18 +740,6 @@ public class SearchQuery implements Serializable { return new CustomFlagCriterion(flag, BooleanOperator.unset()); } - public SearchQuery() { - this(new ArrayList<Criterion>()); - } - - public SearchQuery(Criterion... criteria) { - this(ImmutableList.copyOf(criteria)); - } - - public SearchQuery(List<Criterion> criterias) { - this.criterias = criterias; - } - /** * Creates a filter matching all messages. * @@ -767,6 +755,18 @@ public class SearchQuery implements Serializable { private List<Sort> sorts = Collections.singletonList(new Sort(Sort.SortClause.Uid, Sort.Order.NATURAL)); + public SearchQuery(Criterion... criterias) { + this(new ArrayList<Criterion>(Arrays.asList(criterias))); + } + + public SearchQuery() { + this(new ArrayList<Criterion>()); + } + + private SearchQuery(List<Criterion> criterias) { + this.criterias = criterias; + } + public void andCriteria(Criterion crit) { criterias.add(crit); } @@ -827,12 +827,12 @@ public class SearchQuery implements Serializable { } @Override - public int hashCode() { + public final int hashCode() { return Objects.hashCode(criterias); } @Override - public boolean equals(Object obj) { + public final boolean equals(Object obj) { if (obj instanceof SearchQuery) { SearchQuery that = (SearchQuery) obj; http://git-wip-us.apache.org/repos/asf/james-project/blob/e6f33c3c/mailbox/api/src/test/java/org/apache/james/mailbox/model/SearchQueryTest.java ---------------------------------------------------------------------- diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/model/SearchQueryTest.java b/mailbox/api/src/test/java/org/apache/james/mailbox/model/SearchQueryTest.java new file mode 100644 index 0000000..b6ed574 --- /dev/null +++ b/mailbox/api/src/test/java/org/apache/james/mailbox/model/SearchQueryTest.java @@ -0,0 +1,46 @@ +/* + * 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.model; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.Test; + +import nl.jqno.equalsverifier.EqualsVerifier; + +public class SearchQueryTest { + + @Test + public void searchQueryShouldRespectBeanContract() { + EqualsVerifier.forClass(SearchQuery.class).verify(); + } + + @Test + public void equalsShouldCompareCriteria() { + SearchQuery searchQuery1 = new SearchQuery(); + SearchQuery searchQuery2 = new SearchQuery(); + searchQuery1.andCriteria(SearchQuery.all()); + searchQuery2.andCriteria(SearchQuery.all()); + + assertThat(searchQuery1).isEqualTo(searchQuery2); + } + +} http://git-wip-us.apache.org/repos/asf/james-project/blob/e6f33c3c/mailbox/caching/src/main/java/org/apache/james/mailbox/caching/CachingMessageMapper.java ---------------------------------------------------------------------- diff --git a/mailbox/caching/src/main/java/org/apache/james/mailbox/caching/CachingMessageMapper.java b/mailbox/caching/src/main/java/org/apache/james/mailbox/caching/CachingMessageMapper.java index 33433f0..0e1f4d5 100644 --- a/mailbox/caching/src/main/java/org/apache/james/mailbox/caching/CachingMessageMapper.java +++ b/mailbox/caching/src/main/java/org/apache/james/mailbox/caching/CachingMessageMapper.java @@ -35,6 +35,11 @@ public class CachingMessageMapper implements MessageMapper { } @Override + public Iterator<MessageUid> listAllMessageUids(Mailbox mailbox) throws MailboxException { + return underlying.listAllMessageUids(mailbox); + } + + @Override public void endRequest() { underlying.endRequest(); } http://git-wip-us.apache.org/repos/asf/james-project/blob/e6f33c3c/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java index 80fc5c1..2a6e74d 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java @@ -108,6 +108,15 @@ public class CassandraMessageMapper implements MessageMapper { } @Override + public Iterator<MessageUid> listAllMessageUids(Mailbox mailbox) throws MailboxException { + CassandraId cassandraId = (CassandraId) mailbox.getMailboxId(); + return messageIdDAO.retrieveMessages(cassandraId, MessageRange.all()) + .join() + .map(metaData -> metaData.getComposedMessageId().getUid()) + .iterator(); + } + + @Override public long countMessagesInMailbox(Mailbox mailbox) throws MailboxException { return mailboxCounterDAO.countMessagesInMailbox(mailbox) .join() http://git-wip-us.apache.org/repos/asf/james-project/blob/e6f33c3c/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/mail/HBaseMessageMapper.java ---------------------------------------------------------------------- diff --git a/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/mail/HBaseMessageMapper.java b/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/mail/HBaseMessageMapper.java index 791130e..10e65ae 100644 --- a/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/mail/HBaseMessageMapper.java +++ b/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/mail/HBaseMessageMapper.java @@ -48,6 +48,7 @@ import java.util.Iterator; import java.util.List; import java.util.Map; +import javax.annotation.Nullable; import javax.mail.Flags; import org.apache.hadoop.conf.Configuration; @@ -85,8 +86,10 @@ import org.apache.james.mailbox.store.mail.model.MailboxMessage; import org.apache.james.mailbox.store.mail.utils.ApplicableFlagCalculator; import org.apache.james.mailbox.store.transaction.NonTransactionalMapper; +import com.google.common.base.Function; import com.google.common.base.Optional; import com.google.common.collect.Iterables; +import com.google.common.collect.Iterators; /** * HBase implementation of a {@link MessageMapper}. @@ -95,6 +98,14 @@ import com.google.common.collect.Iterables; */ public class HBaseMessageMapper extends NonTransactionalMapper implements MessageMapper { + private static final int UNLIMITED = -1; + private static final Function<MailboxMessage, MessageUid> TO_UID = new Function<MailboxMessage, MessageUid>() { + @Override + public MessageUid apply(MailboxMessage mailboxMessage) { + return mailboxMessage.getUid(); + } + }; + private final Configuration conf; private final MailboxSession mailboxSession; private final UidProvider uidProvider; @@ -122,6 +133,11 @@ public class HBaseMessageMapper extends NonTransactionalMapper implements Messag } @Override + public Iterator<MessageUid> listAllMessageUids(final Mailbox mailbox) throws MailboxException { + return Iterators.transform(findInMailbox(mailbox, MessageRange.all(), FetchType.Full, UNLIMITED), TO_UID); + } + + @Override public void endRequest() { } http://git-wip-us.apache.org/repos/asf/james-project/blob/e6f33c3c/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java ---------------------------------------------------------------------- diff --git a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java index 1f641da..b2d8c2a 100644 --- a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java +++ b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java @@ -55,14 +55,24 @@ import org.apache.james.mailbox.store.mail.model.MailboxMessage; import org.apache.james.mailbox.store.mail.utils.ApplicableFlagCalculator; import org.apache.openjpa.persistence.ArgumentException; +import com.google.common.base.Function; import com.google.common.base.Optional; import com.google.common.collect.ImmutableList; +import com.google.common.collect.Iterators; /** * JPA implementation of a {@link MessageMapper}. This class is not thread-safe! */ public class JPAMessageMapper extends JPATransactionalMapper implements MessageMapper { private static final int UNLIMIT_MAX_SIZE = -1; + private static final int UNLIMITED = -1; + private static final Function<MailboxMessage, MessageUid> TO_UID = new Function<MailboxMessage, MessageUid>() { + @Override + public MessageUid apply(MailboxMessage mailboxMessage) { + return mailboxMessage.getUid(); + } + }; + private final MessageUtils messageMetadataMapper; public JPAMessageMapper(MailboxSession mailboxSession, UidProvider uidProvider, ModSeqProvider modSeqProvider, EntityManagerFactory entityManagerFactory) { @@ -78,6 +88,11 @@ public class JPAMessageMapper extends JPATransactionalMapper implements MessageM .build(); } + @Override + public Iterator<MessageUid> listAllMessageUids(final Mailbox mailbox) throws MailboxException { + return Iterators.transform(findInMailbox(mailbox, MessageRange.all(), FetchType.Full, UNLIMITED), TO_UID); + } + /** * @see org.apache.james.mailbox.store.mail.MessageMapper#findInMailbox(org.apache.james.mailbox.store.mail.model.Mailbox, * org.apache.james.mailbox.model.MessageRange, http://git-wip-us.apache.org/repos/asf/james-project/blob/e6f33c3c/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalMessageMapper.java ---------------------------------------------------------------------- diff --git a/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalMessageMapper.java b/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalMessageMapper.java index b33bcce..ab234c9 100644 --- a/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalMessageMapper.java +++ b/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalMessageMapper.java @@ -59,6 +59,11 @@ public class TransactionalMessageMapper implements MessageMapper { } @Override + public Iterator<MessageUid> listAllMessageUids(Mailbox mailbox) throws MailboxException { + return messageMapper.listAllMessageUids(mailbox); + } + + @Override public <T> T execute(Transaction<T> transaction) throws MailboxException { throw new NotImplementedException(); } http://git-wip-us.apache.org/repos/asf/james-project/blob/e6f33c3c/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java ---------------------------------------------------------------------- diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java index 5554acc..69233f7 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 @@ -748,6 +748,9 @@ public class StoreMessageManager implements org.apache.james.mailbox.MessageMana @Override public Iterator<MessageUid> search(SearchQuery query, MailboxSession mailboxSession) throws MailboxException { + if (query.equals(new SearchQuery(SearchQuery.all()))) { + return listAllMessageUids(mailboxSession); + } return index.search(mailboxSession, getMailboxEntity(), query); } @@ -872,4 +875,15 @@ public class StoreMessageManager implements org.apache.james.mailbox.MessageMana return mapperFactory.getMessageMapper(session) .getApplicableFlag(mailbox); } + + private Iterator<MessageUid> listAllMessageUids(MailboxSession session) throws MailboxException { + final MessageMapper messageMapper = mapperFactory.getMessageMapper(session); + + return messageMapper.execute(new Mapper.Transaction<Iterator<MessageUid>>() { + @Override + public Iterator<MessageUid> run() throws MailboxException { + return messageMapper.listAllMessageUids(mailbox); + } + }); + } } http://git-wip-us.apache.org/repos/asf/james-project/blob/e6f33c3c/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/AbstractMessageMapper.java ---------------------------------------------------------------------- diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/AbstractMessageMapper.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/AbstractMessageMapper.java index 93e27c6..cae0753 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/AbstractMessageMapper.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/AbstractMessageMapper.java @@ -36,7 +36,9 @@ import org.apache.james.mailbox.store.mail.model.Mailbox; import org.apache.james.mailbox.store.mail.model.MailboxMessage; import org.apache.james.mailbox.store.transaction.TransactionalMapper; +import com.google.common.base.Function; import com.google.common.base.Optional; +import com.google.common.collect.Iterators; /** * Abstract base class for {@link MessageMapper} implementation @@ -44,6 +46,15 @@ import com.google.common.base.Optional; * */ public abstract class AbstractMessageMapper extends TransactionalMapper implements MessageMapper { + private static final Function<MailboxMessage, MessageUid> TO_UID = new Function<MailboxMessage, MessageUid>() { + @Override + public MessageUid apply(MailboxMessage input) { + return input.getUid(); + } + }; + + private static final int UNLIMITED = -1; + protected final MailboxSession mailboxSession; private final UidProvider uidProvider; private final ModSeqProvider modSeqProvider; @@ -145,5 +156,9 @@ public abstract class AbstractMessageMapper extends TransactionalMapper implemen * Copy the MailboxMessage to the Mailbox, using the given uid and modSeq for the new MailboxMessage */ protected abstract MessageMetaData copy(Mailbox mailbox, MessageUid uid, long modSeq, MailboxMessage original) throws MailboxException; - + + @Override + public Iterator<MessageUid> listAllMessageUids(Mailbox mailbox) throws MailboxException { + return Iterators.transform(findInMailbox(mailbox, MessageRange.all(), FetchType.Metadata, UNLIMITED), TO_UID); + } } http://git-wip-us.apache.org/repos/asf/james-project/blob/e6f33c3c/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MessageMapper.java ---------------------------------------------------------------------- diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MessageMapper.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MessageMapper.java index 96701ae..22a938a 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MessageMapper.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MessageMapper.java @@ -173,6 +173,11 @@ public interface MessageMapper extends Mapper { Flags getApplicableFlag(Mailbox mailbox) throws MailboxException; /** + * Return a list containing all MessageUid of Messages that belongs to given {@link Mailbox} + */ + Iterator<MessageUid> listAllMessageUids(Mailbox mailbox) throws MailboxException; + + /** * Specify what data needs to get filled in a {@link MailboxMessage} before returning it * * http://git-wip-us.apache.org/repos/asf/james-project/blob/e6f33c3c/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 c2d1e41..b524d7c 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 @@ -377,8 +377,7 @@ public abstract class AbstractCombinationManagerTest { messageIdManager.setInMailboxes(messageId, ImmutableList.of(mailbox1.getMailboxId(), mailbox2.getMailboxId()), session); Flags expected = ApplicableFlagBuilder - .builder() - .add(messageFlag) + .from(messageFlag) .build(); assertThat(messageManager1.getApplicableFlags(session)) @@ -405,8 +404,8 @@ public abstract class AbstractCombinationManagerTest { messageIdManager.setFlags(deleted, FlagsUpdateMode.ADD, messageId, ImmutableList.of(mailbox1.getMailboxId()), session); assertThat(messageManager1.getApplicableFlags(session)) - .isEqualTo(ApplicableFlagBuilder.builder() - .add(USER_FLAGS_VALUE, ANOTHER_USER_FLAGS_VALUE) + .isEqualTo(ApplicableFlagBuilder + .from(USER_FLAGS_VALUE, ANOTHER_USER_FLAGS_VALUE) .build()); } @@ -422,9 +421,8 @@ public abstract class AbstractCombinationManagerTest { Flags applicableFlags = messageManager1.getApplicableFlags(session); assertThat(applicableFlags) - .isEqualTo(ApplicableFlagBuilder.builder() - .add(customFlag1) - .add(customFlag2) + .isEqualTo(ApplicableFlagBuilder + .from(customFlag1, customFlag2) .build()); } @@ -437,15 +435,44 @@ public abstract class AbstractCombinationManagerTest { messageIdManager.setInMailboxes(messageId, ImmutableList.of(mailbox1.getMailboxId(), mailbox2.getMailboxId()), session); messageManager2.setFlags(custom2, FlagsUpdateMode.ADD, MessageRange.all(), session); - Flags expected = ApplicableFlagBuilder.builder() - .add(custom1) - .add(custom2) + Flags expected = ApplicableFlagBuilder + .from(custom1, custom2) .build(); assertThat(messageManager2.getApplicableFlags(session)) .isEqualTo(expected); } + @Test + public void getUidsShouldInteractWellWithSetInMailboxes() throws Exception { + MessageId messageId = messageManager1.appendMessage(new ByteArrayInputStream(MAIL_CONTENT), new Date(), session, false, new Flags()) + .getMessageId(); + + messageIdManager.setInMailboxes(messageId, ImmutableList.of(mailbox1.getMailboxId(), mailbox2.getMailboxId()), session); + + List<MessageResult> listMessages = messageIdManager.getMessages(ImmutableList.of(messageId), FetchGroupImpl.MINIMAL, session); + MessageUid uid2 = FluentIterable.from(listMessages) + .filter(messageInMailbox2()) + .get(0) + .getUid(); + + SearchQuery searchQuery = new SearchQuery(SearchQuery.all()); + assertThat(messageManager2.search(searchQuery, session)) + .hasSize(1) + .containsOnly(uid2); + } + + @Test + public void getUidsShouldInteractWellWithDelete() throws Exception { + MessageId messageId = messageManager1.appendMessage(new ByteArrayInputStream(MAIL_CONTENT), new Date(), session, false, new Flags()) + .getMessageId(); + + messageIdManager.delete(messageId, ImmutableList.of(mailbox1.getMailboxId()), session); + + SearchQuery searchQuery = new SearchQuery(SearchQuery.all()); + assertThat(messageManager1.search(searchQuery, session)).isEmpty(); + } + private Predicate<MessageResult> messageInMailbox2() { return new Predicate<MessageResult>() { @Override http://git-wip-us.apache.org/repos/asf/james-project/blob/e6f33c3c/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxMessageResultIteratorTest.java ---------------------------------------------------------------------- diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxMessageResultIteratorTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxMessageResultIteratorTest.java index 8d4fb54..67107c2 100644 --- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxMessageResultIteratorTest.java +++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxMessageResultIteratorTest.java @@ -76,7 +76,12 @@ public class StoreMailboxMessageResultIteratorTest { public TestMessageMapper(MessageRange messageRange) { this.messageRange = messageRange; } - + + @Override + public Iterator<MessageUid> listAllMessageUids(Mailbox mailbox) throws MailboxException { + return messageRange.iterator(); + } + @Override public void endRequest() { throw new UnsupportedOperationException(); http://git-wip-us.apache.org/repos/asf/james-project/blob/e6f33c3c/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageMapperTest.java ---------------------------------------------------------------------- diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageMapperTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageMapperTest.java index aafbbed..c357ff8 100644 --- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageMapperTest.java +++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageMapperTest.java @@ -51,7 +51,6 @@ import org.apache.james.mailbox.store.mail.model.MapperProvider.Capabilities; 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.mail.model.impl.SimpleMessage; import org.apache.james.util.concurrency.ConcurrentTestRunner; import org.junit.After; import org.junit.Assume; @@ -1043,7 +1042,7 @@ public abstract class MessageMapperTest { } @Test - public void getApplicableFlagShouldShouldReturnDefaultApplicableFlagsWhenMailboxEmpty() throws Exception { + public void getApplicableFlagShouldReturnDefaultApplicableFlagsWhenMailboxEmpty() throws Exception { SimpleMailbox emptyMailbox = createMailbox(new MailboxPath("#private", "benwa", "EMPTY")); assertThat(messageMapper.getApplicableFlag(emptyMailbox)) @@ -1070,6 +1069,31 @@ public abstract class MessageMapperTest { .build()); } + @Test + public void getUidsShouldReturnUidsOfMessagesInTheMailbox() throws Exception { + saveMessages(); + + assertThat(messageMapper.listAllMessageUids(benwaInboxMailbox)) + .containsOnly(message1.getUid(), + message2.getUid(), + message3.getUid(), + message4.getUid(), + message5.getUid()); + } + + @Test + public void getUidsShouldNotReturnUidsOfExpungedMessages() throws Exception { + saveMessages(); + + messageMapper.updateFlags(benwaInboxMailbox, + new FlagsUpdateCalculator(new Flags(Flag.DELETED), FlagsUpdateMode.ADD), + MessageRange.range(message2.getUid(), message4.getUid())); + messageMapper.expungeMarkedForDeletionInMailbox(benwaInboxMailbox, MessageRange.all()); + + assertThat(messageMapper.listAllMessageUids(benwaInboxMailbox)) + .containsOnly(message1.getUid(), message5.getUid()); + } + private Map<MessageUid, MessageMetaData> markThenPerformExpunge(MessageRange range) throws MailboxException { messageMapper.updateFlags(benwaInboxMailbox, new FlagsUpdateCalculator(new Flags(Flags.Flag.DELETED), FlagsUpdateMode.REPLACE), MessageRange.one(message1.getUid())); messageMapper.updateFlags(benwaInboxMailbox, new FlagsUpdateCalculator(new Flags(Flags.Flag.DELETED), FlagsUpdateMode.REPLACE), MessageRange.one(message4.getUid())); http://git-wip-us.apache.org/repos/asf/james-project/blob/e6f33c3c/protocols/imap/src/test/java/org/apache/james/imap/processor/base/MailboxEventAnalyserTest.java ---------------------------------------------------------------------- diff --git a/protocols/imap/src/test/java/org/apache/james/imap/processor/base/MailboxEventAnalyserTest.java b/protocols/imap/src/test/java/org/apache/james/imap/processor/base/MailboxEventAnalyserTest.java index 5ce5ea5..b744b85 100644 --- a/protocols/imap/src/test/java/org/apache/james/imap/processor/base/MailboxEventAnalyserTest.java +++ b/protocols/imap/src/test/java/org/apache/james/imap/processor/base/MailboxEventAnalyserTest.java @@ -84,8 +84,9 @@ import com.google.common.collect.ImmutableList; public class MailboxEventAnalyserTest { private static final long BASE_SESSION_ID = 99; + public static final MessageUid MESSAGE_UID = MessageUid.of(1); + - private MailboxPath mailboxPath = new MailboxPath("namespace", "user", "name"); private final MailboxManager mockManager = new MailboxManager() { @@ -195,7 +196,7 @@ public class MailboxEventAnalyserTest { @Override public Iterator<MessageUid> search(SearchQuery searchQuery, MailboxSession mailboxSession) throws MailboxException { - throw new UnsupportedOperationException("Not implemented"); + return ImmutableList.of(MESSAGE_UID).iterator(); } @Override @@ -235,7 +236,7 @@ public class MailboxEventAnalyserTest { @Override public MessageUid getUid() { - return MessageUid.of(1); + return MESSAGE_UID; } @Override --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org