This is an automated email from the ASF dual-hosted git repository. btellier pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git
commit c8d7d244260a72f49a9c2bb52b9e017037786e4c Author: Benoit Tellier <btell...@linagora.com> AuthorDate: Wed Oct 16 18:38:20 2019 +0700 JAMES-2632 Allow bulk mailbox counter retrieval StoreMailboxManager should have the capacity to load mailboxCounters all at one. --- .../cassandra/mail/CassandraMailboxCounterDAO.java | 4 +-- .../cassandra/mail/CassandraMessageMapper.java | 28 ++++++++++++++++++ .../mail/CassandraMailboxCounterDAOTest.java | 8 ++--- .../james/mailbox/jpa/mail/JPAMessageMapper.java | 33 ++++++++++++++++++--- .../jpa/mail/TransactionalMessageMapper.java | 7 +++++ .../mailbox/maildir/mail/MaildirMessageMapper.java | 9 ++++++ .../inmemory/mail/InMemoryMessageMapper.java | 34 ++++++++++++++++++++-- .../james/mailbox/store/StoreMailboxManager.java | 10 +++++++ .../james/mailbox/store/mail/MessageMapper.java | 4 +++ .../StoreMailboxMessageResultIteratorTest.java | 12 +++++--- .../store/mail/model/MessageMapperTest.java | 18 ++++++++++++ 11 files changed, 149 insertions(+), 18 deletions(-) diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxCounterDAO.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxCounterDAO.java index 1069bcc..d1c3180 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxCounterDAO.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxCounterDAO.java @@ -74,9 +74,7 @@ public class CassandraMailboxCounterDAO { .where(eq(CassandraMailboxCountersTable.MAILBOX_ID, bindMarker(CassandraMailboxCountersTable.MAILBOX_ID)))); } - public Mono<MailboxCounters> retrieveMailboxCounters(Mailbox mailbox) throws MailboxException { - CassandraId mailboxId = (CassandraId) mailbox.getMailboxId(); - + public Mono<MailboxCounters> retrieveMailboxCounters(CassandraId mailboxId) { return cassandraAsyncExecutor.executeSingleRow(bindWithMailbox(mailboxId, readStatement)) .map(row -> MailboxCounters.builder() .count(row.getLong(CassandraMailboxCountersTable.COUNT)) 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 18ac059..de6407ff 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 @@ -19,6 +19,7 @@ package org.apache.james.mailbox.cassandra.mail; +import java.util.Collection; import java.util.Comparator; import java.util.Iterator; import java.util.List; @@ -41,6 +42,7 @@ import org.apache.james.mailbox.model.ComposedMessageId; import org.apache.james.mailbox.model.ComposedMessageIdWithMetaData; import org.apache.james.mailbox.model.Mailbox; import org.apache.james.mailbox.model.MailboxCounters; +import org.apache.james.mailbox.model.MailboxId; import org.apache.james.mailbox.model.MessageMetaData; import org.apache.james.mailbox.model.MessageRange; import org.apache.james.mailbox.model.UpdatedFlags; @@ -60,6 +62,7 @@ import com.google.common.collect.ImmutableList; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; +import reactor.core.scheduler.Schedulers; public class CassandraMessageMapper implements MessageMapper { public static final MailboxCounters INITIAL_COUNTERS = MailboxCounters.builder() @@ -131,9 +134,34 @@ public class CassandraMessageMapper implements MessageMapper { @Override public MailboxCounters getMailboxCounters(Mailbox mailbox) throws MailboxException { +<<<<<<< HEAD return mailboxCounterDAO.retrieveMailboxCounters(mailbox) .defaultIfEmpty(INITIAL_COUNTERS) .block(); +======= + CassandraId mailboxId = (CassandraId) mailbox.getMailboxId(); + return getMailboxCounters(mailboxId) + .block(); + } + + private Mono<MailboxCounters> getMailboxCounters(CassandraId mailboxId) { + return mailboxCounterDAO.retrieveMailboxCounters(mailboxId) + .defaultIfEmpty(MailboxCounters.builder() + .mailboxId(mailboxId) + .count(0) + .unseen(0) + .build()); + } + + @Override + public List<MailboxCounters> getMailboxCounters(Collection<MailboxId> mailboxIds) { + return Flux.fromIterable(mailboxIds) + .publishOn(Schedulers.boundedElastic()) + .map(id -> (CassandraId) id) + .concatMap(this::getMailboxCounters) + .toStream() + .collect(Guavate.toImmutableList()); +>>>>>>> f4ef8da35d... JAMES-2632 Allow bulk mailbox counter retrieval } @Override diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxCounterDAOTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxCounterDAOTest.java index a9fae36..073b4a2 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxCounterDAOTest.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxCounterDAOTest.java @@ -65,7 +65,7 @@ class CassandraMailboxCounterDAOTest { @Test void retrieveMailboxCounterShouldReturnEmptyByDefault() throws Exception { - assertThat(testee.retrieveMailboxCounters(mailbox).hasElement().block()).isFalse(); + assertThat(testee.retrieveMailboxCounters(MAILBOX_ID).hasElement().block()).isFalse(); } @Test @@ -86,7 +86,7 @@ class CassandraMailboxCounterDAOTest { void incrementUnseenShouldAddOneWhenAbsentOnMailboxCounters() throws Exception { testee.incrementUnseen(MAILBOX_ID).block(); - assertThat(testee.retrieveMailboxCounters(mailbox).block()) + assertThat(testee.retrieveMailboxCounters(MAILBOX_ID).block()) .isEqualTo(MailboxCounters.builder() .count(0L) .unseen(1L) @@ -97,7 +97,7 @@ class CassandraMailboxCounterDAOTest { void incrementCountShouldAddOneWhenAbsentOnMailboxCounters() throws Exception { testee.incrementCount(MAILBOX_ID).block(); - assertThat(testee.retrieveMailboxCounters(mailbox).block()) + assertThat(testee.retrieveMailboxCounters(MAILBOX_ID).block()) .isEqualTo(MailboxCounters.builder() .count(1L) .unseen(0L) @@ -109,7 +109,7 @@ class CassandraMailboxCounterDAOTest { testee.incrementCount(MAILBOX_ID).block(); testee.incrementUnseen(MAILBOX_ID).block(); - assertThat(testee.retrieveMailboxCounters(mailbox).block()) + assertThat(testee.retrieveMailboxCounters(MAILBOX_ID).block()) .isEqualTo(MailboxCounters.builder() .count(1L) .unseen(1L) 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 f7fde59..a1ebacd 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 @@ -18,6 +18,7 @@ ****************************************************************/ package org.apache.james.mailbox.jpa.mail; +import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.List; @@ -41,6 +42,7 @@ import org.apache.james.mailbox.jpa.mail.model.openjpa.JPAMailboxMessage; import org.apache.james.mailbox.jpa.mail.model.openjpa.JPAStreamingMailboxMessage; import org.apache.james.mailbox.model.Mailbox; import org.apache.james.mailbox.model.MailboxCounters; +import org.apache.james.mailbox.model.MailboxId; import org.apache.james.mailbox.model.MessageMetaData; import org.apache.james.mailbox.model.MessageRange; import org.apache.james.mailbox.model.MessageRange.Type; @@ -55,6 +57,7 @@ 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.github.fge.lambdas.Throwing; import com.github.steveash.guavate.Guavate; import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterators; @@ -121,27 +124,49 @@ public class JPAMessageMapper extends JPATransactionalMapper implements MessageM @Override public long countMessagesInMailbox(Mailbox mailbox) throws MailboxException { + JPAId mailboxId = (JPAId) mailbox.getMailboxId(); + return countMessagesInMailbox(mailboxId); + } + + private long countMessagesInMailbox(JPAId mailboxId) throws MailboxException { try { - JPAId mailboxId = (JPAId) mailbox.getMailboxId(); return (Long) getEntityManager().createNamedQuery("countMessagesInMailbox") .setParameter("idParam", mailboxId.getRawId()).getSingleResult(); } catch (PersistenceException e) { - throw new MailboxException("Count of messages failed in mailbox " + mailbox, e); + throw new MailboxException("Count of messages failed in mailbox " + mailboxId, e); } } @Override public long countUnseenMessagesInMailbox(Mailbox mailbox) throws MailboxException { + JPAId mailboxId = (JPAId) mailbox.getMailboxId(); + return countUnseenMessagesInMailbox(mailboxId); + } + + private long countUnseenMessagesInMailbox(JPAId mailboxId) throws MailboxException { try { - JPAId mailboxId = (JPAId) mailbox.getMailboxId(); return (Long) getEntityManager().createNamedQuery("countUnseenMessagesInMailbox") .setParameter("idParam", mailboxId.getRawId()).getSingleResult(); } catch (PersistenceException e) { - throw new MailboxException("Count of useen messages failed in mailbox " + mailbox, e); + throw new MailboxException("Count of useen messages failed in mailbox " + mailboxId, e); } } @Override + public List<MailboxCounters> getMailboxCounters(Collection<MailboxId> mailboxIds) throws MailboxException { + return mailboxIds.stream() + .map(id -> (JPAId) id) + .map(Throwing.<JPAId, MailboxCounters>function( + id -> MailboxCounters.builder() + .mailboxId(id) + .count(countMessagesInMailbox(id)) + .unseen(countUnseenMessagesInMailbox(id)) + .build()) + .sneakyThrow()) + .collect(Guavate.toImmutableList()); + } + + @Override public void delete(Mailbox mailbox, MailboxMessage message) throws MailboxException { try { AbstractJPAMailboxMessage jpaMessage = getEntityManager().find(AbstractJPAMailboxMessage.class, buildKey(mailbox, message)); 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 6030d47..6b45c1d 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 @@ -19,6 +19,7 @@ package org.apache.james.mailbox.jpa.mail; +import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.Map; @@ -31,6 +32,7 @@ import org.apache.james.mailbox.MessageUid; import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.model.Mailbox; import org.apache.james.mailbox.model.MailboxCounters; +import org.apache.james.mailbox.model.MailboxId; import org.apache.james.mailbox.model.MessageMetaData; import org.apache.james.mailbox.model.MessageRange; import org.apache.james.mailbox.model.UpdatedFlags; @@ -151,4 +153,9 @@ public class TransactionalMessageMapper implements MessageMapper { public Flags getApplicableFlag(Mailbox mailbox) throws MailboxException { return messageMapper.getApplicableFlag(mailbox); } + + @Override + public List<MailboxCounters> getMailboxCounters(Collection<MailboxId> mailboxIds) throws MailboxException { + throw new NotImplementedException("not implemented"); + } } diff --git a/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMessageMapper.java b/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMessageMapper.java index a0295d4..17e6f44 100644 --- a/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMessageMapper.java +++ b/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMessageMapper.java @@ -24,6 +24,7 @@ import java.io.FilenameFilter; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; +import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.List; @@ -35,6 +36,7 @@ import javax.mail.Flags; import javax.mail.Flags.Flag; import org.apache.commons.io.FileUtils; +import org.apache.commons.lang3.NotImplementedException; import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.MessageUid; import org.apache.james.mailbox.exception.MailboxException; @@ -43,6 +45,8 @@ import org.apache.james.mailbox.maildir.MaildirMessageName; import org.apache.james.mailbox.maildir.MaildirStore; import org.apache.james.mailbox.maildir.mail.model.MaildirMailboxMessage; import org.apache.james.mailbox.model.Mailbox; +import org.apache.james.mailbox.model.MailboxCounters; +import org.apache.james.mailbox.model.MailboxId; import org.apache.james.mailbox.model.MessageMetaData; import org.apache.james.mailbox.model.MessageRange; import org.apache.james.mailbox.model.MessageRange.Type; @@ -149,6 +153,11 @@ public class MaildirMessageMapper extends AbstractMessageMapper { } @Override + public List<MailboxCounters> getMailboxCounters(Collection<MailboxId> mailboxIds) { + throw new NotImplementedException("Not available as maildir relies on mailboxPath"); + } + + @Override public Iterator<UpdatedFlags> updateFlags(Mailbox mailbox, FlagsUpdateCalculator flagsUpdateCalculator, MessageRange set) throws MailboxException { final List<UpdatedFlags> updatedFlags = new ArrayList<>(); final MaildirFolder folder = maildirStore.createMaildirFolder(mailbox); diff --git a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMessageMapper.java b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMessageMapper.java index 58e0613..6ef7781 100644 --- a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMessageMapper.java +++ b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMessageMapper.java @@ -20,6 +20,7 @@ package org.apache.james.mailbox.inmemory.mail; import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; import java.util.Iterator; import java.util.List; @@ -34,6 +35,8 @@ import org.apache.james.mailbox.MessageUid; import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.inmemory.InMemoryId; import org.apache.james.mailbox.model.Mailbox; +import org.apache.james.mailbox.model.MailboxCounters; +import org.apache.james.mailbox.model.MailboxId; import org.apache.james.mailbox.model.MessageMetaData; import org.apache.james.mailbox.model.MessageRange; import org.apache.james.mailbox.store.mail.AbstractMessageMapper; @@ -56,7 +59,11 @@ public class InMemoryMessageMapper extends AbstractMessageMapper { } private Map<MessageUid, MailboxMessage> getMembershipByUidForMailbox(Mailbox mailbox) { - return getMembershipByUidForId((InMemoryId) mailbox.getMailboxId()); + return getMembershipByUidForMailbox(mailbox.getMailboxId()); + } + + private Map<MessageUid, MailboxMessage> getMembershipByUidForMailbox(MailboxId mailboxId) { + return getMembershipByUidForId((InMemoryId) mailboxId); } private Map<MessageUid, MailboxMessage> getMembershipByUidForId(InMemoryId id) { @@ -70,18 +77,39 @@ public class InMemoryMessageMapper extends AbstractMessageMapper { @Override public long countMessagesInMailbox(Mailbox mailbox) { - return getMembershipByUidForMailbox(mailbox).size(); + MailboxId mailboxId = mailbox.getMailboxId(); + return countMessagesInMailbox(mailboxId); + } + + private int countMessagesInMailbox(MailboxId mailboxId) { + return getMembershipByUidForMailbox(mailboxId).size(); } @Override public long countUnseenMessagesInMailbox(Mailbox mailbox) { - return getMembershipByUidForMailbox(mailbox).values() + MailboxId mailboxId = mailbox.getMailboxId(); + return countUnseenMessagesInMailbox(mailboxId); + } + + private long countUnseenMessagesInMailbox(MailboxId mailboxId) { + return getMembershipByUidForMailbox(mailboxId).values() .stream() .filter(member -> !member.isSeen()) .count(); } @Override + public List<MailboxCounters> getMailboxCounters(Collection<MailboxId> mailboxIds) { + return mailboxIds.stream() + .map(id -> MailboxCounters.builder() + .mailboxId(id) + .count(countMessagesInMailbox(id)) + .unseen(countUnseenMessagesInMailbox(id)) + .build()) + .collect(Guavate.toImmutableList()); + } + + @Override public void delete(Mailbox mailbox, MailboxMessage message) { getMembershipByUidForMailbox(mailbox).remove(message.getUid()); } diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java index e11ab25..6d36a28 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java @@ -23,6 +23,7 @@ import static org.apache.james.mailbox.store.mail.AbstractMessageMapper.UNLIMITE import java.security.SecureRandom; import java.util.ArrayList; +import java.util.Collection; import java.util.EnumSet; import java.util.List; import java.util.Optional; @@ -57,6 +58,7 @@ import org.apache.james.mailbox.model.MailboxACL.Right; import org.apache.james.mailbox.model.MailboxAnnotation; import org.apache.james.mailbox.model.MailboxAnnotationKey; import org.apache.james.mailbox.model.MailboxConstants; +import org.apache.james.mailbox.model.MailboxCounters; import org.apache.james.mailbox.model.MailboxId; import org.apache.james.mailbox.model.MailboxMetaData; import org.apache.james.mailbox.model.MailboxMetaData.Selectability; @@ -768,4 +770,12 @@ public class StoreMailboxManager implements MailboxManager { Mailbox mailbox = mapper.findMailboxByPath(mailboxPath); return mapper.hasChildren(mailbox, session.getPathDelimiter()); } + + private List<MailboxCounters> getMailboxCounters(Collection<Mailbox> mailboxes, MailboxSession session) throws MailboxException { + MessageMapper messageMapper = mailboxSessionMapperFactory.getMessageMapper(session); + return messageMapper.getMailboxCounters(mailboxes.stream() + .filter(Throwing.<Mailbox>predicate(mailbox -> storeRightManager.hasRight(mailbox, Right.Read, session)).sneakyThrow()) + .map(Mailbox::getMailboxId) + .collect(Guavate.toImmutableList())); + } } 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 c17a018..3fab26f 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 @@ -18,6 +18,7 @@ ****************************************************************/ package org.apache.james.mailbox.store.mail; +import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.Map; @@ -29,6 +30,7 @@ import org.apache.james.mailbox.MessageUid; import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.model.Mailbox; import org.apache.james.mailbox.model.MailboxCounters; +import org.apache.james.mailbox.model.MailboxId; import org.apache.james.mailbox.model.MessageMetaData; import org.apache.james.mailbox.model.MessageRange; import org.apache.james.mailbox.model.UpdatedFlags; @@ -74,6 +76,8 @@ public interface MessageMapper extends Mapper { MailboxCounters getMailboxCounters(Mailbox mailbox) throws MailboxException; + List<MailboxCounters> getMailboxCounters(Collection<MailboxId> mailboxIds) throws MailboxException; + /** * Delete the given {@link MailboxMessage} */ 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 5587af4..053dc3d 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 @@ -22,6 +22,7 @@ package org.apache.james.mailbox.store; import static org.assertj.core.api.Assertions.assertThat; import java.util.ArrayList; +import java.util.Collection; import java.util.HashSet; import java.util.Iterator; import java.util.List; @@ -33,11 +34,11 @@ import java.util.Set; import javax.mail.Flags; import javax.mail.util.SharedByteArrayInputStream; -import org.apache.commons.lang3.NotImplementedException; import org.apache.james.mailbox.MessageUid; import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.model.Mailbox; import org.apache.james.mailbox.model.MailboxCounters; +import org.apache.james.mailbox.model.MailboxId; import org.apache.james.mailbox.model.MessageMetaData; import org.apache.james.mailbox.model.MessageRange; import org.apache.james.mailbox.model.MessageResult.FetchGroup; @@ -67,8 +68,6 @@ public class StoreMailboxMessageResultIteratorTest { } private final class TestMessageMapper implements MessageMapper { - - private final MessageRange messageRange; public TestMessageMapper(MessageRange messageRange) { @@ -99,6 +98,11 @@ public class StoreMailboxMessageResultIteratorTest { } @Override + public List<MailboxCounters> getMailboxCounters(Collection<MailboxId> mailboxIds) throws MailboxException { + throw new UnsupportedOperationException(); + } + + @Override public Iterator<MailboxMessage> findInMailbox(Mailbox mailbox, MessageRange set, org.apache.james.mailbox.store.mail.MessageMapper.FetchType type, int limit) throws MailboxException { @@ -190,7 +194,7 @@ public class StoreMailboxMessageResultIteratorTest { @Override public Flags getApplicableFlag(Mailbox mailbox) throws MailboxException { - throw new NotImplementedException("Not implemented"); + throw new UnsupportedOperationException(); } } 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 b223a79..f57fde6 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 @@ -42,6 +42,7 @@ import org.apache.james.mailbox.MessageManager.FlagsUpdateMode; import org.apache.james.mailbox.MessageUid; import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.model.Mailbox; +import org.apache.james.mailbox.model.MailboxCounters; import org.apache.james.mailbox.model.MailboxPath; import org.apache.james.mailbox.model.MessageId; import org.apache.james.mailbox.model.MessageMetaData; @@ -128,6 +129,23 @@ public abstract class MessageMapperTest { } @Test + public void getMailboxCountersShouldReturnStoredValue() throws MailboxException { + saveMessages(); + assertThat(messageMapper.getMailboxCounters(ImmutableList.of(benwaInboxMailbox.getMailboxId(), benwaWorkMailbox.getMailboxId()))) + .containsExactlyInAnyOrder( + MailboxCounters.builder() + .mailboxId(benwaInboxMailbox.getMailboxId()) + .count(5) + .unseen(5) + .build(), + MailboxCounters.builder() + .mailboxId(benwaWorkMailbox.getMailboxId()) + .count(1) + .unseen(1) + .build()); + } + + @Test public void mailboxCountShouldBeDecrementedAfterAMessageDelete() throws MailboxException { saveMessages(); messageMapper.delete(benwaInboxMailbox, message1); --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org