You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by ad...@apache.org on 2017/06/09 21:29:14 UTC

[6/7] james-project git commit: JAMES-2037 Offer direct UID retrieval from MessageManager

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 <bt...@linagora.com>
Authored: Thu May 25 17:31:20 2017 +0700
Committer: Antoine Duprat <ad...@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-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org