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 1903ddb442cc36bda117667c2e6ef91f881c81d4 Author: Benoit Tellier <btell...@linagora.com> AuthorDate: Sun Mar 22 13:38:09 2020 +0700 JAMES-3087 Reactify MailboxMapper::findMailboxByPath --- .../cassandra/mail/CassandraMailboxMapper.java | 6 +- .../CassandraCombinationManagerTestSystem.java | 5 +- .../cassandra/mail/CassandraMailboxMapperTest.java | 70 +++++++++++----------- .../mail/migration/MailboxPathV2MigrationTest.java | 2 +- .../james/mailbox/jpa/mail/JPAMailboxMapper.java | 21 ++++--- .../mailbox/jpa/mail/JpaMailboxMapperTest.java | 6 +- .../jpa/mail/TransactionalMailboxMapper.java | 4 +- .../mailbox/maildir/mail/MaildirMailboxMapper.java | 11 +++- .../inmemory/mail/InMemoryMailboxMapper.java | 11 ++-- .../store/StoreMailboxAnnotationManager.java | 2 +- .../james/mailbox/store/StoreMailboxManager.java | 34 ++++------- .../james/mailbox/store/StoreRightManager.java | 10 ++-- .../james/mailbox/store/mail/MailboxMapper.java | 19 +++++- .../AbstractMailboxManagerAttachmentTest.java | 2 +- .../mailbox/store/MessageIdManagerTestSystem.java | 2 +- .../store/StoreMailboxManagerAnnotationTest.java | 21 ++++--- .../mailbox/store/StoreMailboxManagerTest.java | 4 +- .../james/mailbox/store/StoreRightManagerTest.java | 4 +- .../store/mail/model/MailboxMapperACLTest.java | 1 + .../store/mail/model/MailboxMapperTest.java | 14 ++--- .../org/apache/james/modules/MailboxProbeImpl.java | 7 ++- .../adapter/mailbox/MailboxManagementTest.java | 5 +- 22 files changed, 145 insertions(+), 116 deletions(-) diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java index daf71ce..0f0244f 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java @@ -82,13 +82,11 @@ public class CassandraMailboxMapper implements MailboxMapper { } @Override - public Mailbox findMailboxByPath(MailboxPath path) throws MailboxException { + public Mono<Mailbox> findMailboxByPath(MailboxPath path) { return mailboxPathV2DAO.retrieveId(path) .map(CassandraIdAndPath::getCassandraId) .flatMap(this::retrieveMailbox) - .switchIfEmpty(fromPreviousTable(path)) - .blockOptional() - .orElseThrow(() -> new MailboxNotFoundException(path)); + .switchIfEmpty(fromPreviousTable(path)); } private Mono<Mailbox> fromPreviousTable(MailboxPath path) { diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraCombinationManagerTestSystem.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraCombinationManagerTestSystem.java index e2cc7d1..1e0c20e 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraCombinationManagerTestSystem.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraCombinationManagerTestSystem.java @@ -26,6 +26,7 @@ import org.apache.james.mailbox.MessageIdManager; import org.apache.james.mailbox.MessageManager; import org.apache.james.mailbox.events.EventBus; import org.apache.james.mailbox.exception.MailboxException; +import org.apache.james.mailbox.exception.MailboxNotFoundException; import org.apache.james.mailbox.model.Mailbox; import org.apache.james.mailbox.model.MailboxPath; import org.apache.james.mailbox.quota.QuotaManager; @@ -54,7 +55,9 @@ public class CassandraCombinationManagerTestSystem extends CombinationManagerTes @Override public Mailbox createMailbox(MailboxPath mailboxPath, MailboxSession session) throws MailboxException { cassandraMailboxManager.createMailbox(mailboxPath, session); - return mapperFactory.getMailboxMapper(session).findMailboxByPath(mailboxPath); + return mapperFactory.getMailboxMapper(session).findMailboxByPath(mailboxPath) + .blockOptional() + .orElseThrow(() -> new MailboxNotFoundException(mailboxPath)); } @Override diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperTest.java index d16a079..1675f44 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperTest.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperTest.java @@ -157,7 +157,7 @@ class CassandraMailboxMapperTest { .assertThat(testee.findMailboxById(inboxId)) .isEqualTo(inboxRenamed); softly(softly) - .assertThat(testee.findMailboxByPath(inboxPathRenamed)) + .assertThat(testee.findMailboxByPath(inboxPathRenamed).block()) .isEqualTo(inboxRenamed); softly.assertThat(testee.findMailboxWithPathLike(allMailboxesSearchQuery)) .hasOnlyOneElementSatisfying(searchMailbox -> softly(softly) @@ -184,7 +184,7 @@ class CassandraMailboxMapperTest { .assertThat(testee.findMailboxById(inboxId)) .isEqualTo(inboxRenamed); softly(softly) - .assertThat(testee.findMailboxByPath(inboxPathRenamed)) + .assertThat(testee.findMailboxByPath(inboxPathRenamed).block()) .isEqualTo(inboxRenamed); softly.assertThat(testee.findMailboxWithPathLike(allMailboxesSearchQuery)) .hasOnlyOneElementSatisfying(searchMailbox -> softly(softly) @@ -207,7 +207,7 @@ class CassandraMailboxMapperTest { .assertThat(testee.findMailboxById(inbox.getMailboxId())) .isEqualTo(inbox); softly(softly) - .assertThat(testee.findMailboxByPath(inboxPath)) + .assertThat(testee.findMailboxByPath(inboxPath).block()) .isEqualTo(inbox); softly.assertThat(testee.findMailboxWithPathLike(allMailboxesSearchQuery)) .hasOnlyOneElementSatisfying(searchMailbox -> softly(softly) @@ -228,10 +228,10 @@ class CassandraMailboxMapperTest { testee.delete(inbox); SoftAssertions.assertSoftly(Throwing.consumer(softly -> { - assertThatThrownBy(() -> testee.findMailboxById(inbox.getMailboxId())) - .isInstanceOf(MailboxNotFoundException.class); - assertThatThrownBy(() -> testee.findMailboxByPath(inboxPath)) + softly.assertThatThrownBy(() -> testee.findMailboxById(inbox.getMailboxId())) .isInstanceOf(MailboxNotFoundException.class); + softly.assertThat(testee.findMailboxByPath(inboxPath).blockOptional()) + .isEmpty(); softly.assertThat(testee.findMailboxWithPathLike(allMailboxesSearchQuery)) .isEmpty(); })); @@ -248,8 +248,8 @@ class CassandraMailboxMapperTest { doQuietly(() -> testee.create(inboxPath, UID_VALIDITY)); SoftAssertions.assertSoftly(softly -> { - softly.assertThatThrownBy(() -> testee.findMailboxByPath(inboxPath)) - .isInstanceOf(MailboxNotFoundException.class); + softly.assertThat(testee.findMailboxByPath(inboxPath).blockOptional()) + .isEmpty(); softly.assertThat(testee.findMailboxWithPathLike(inboxSearchQuery)) .isEmpty(); softly.assertThat(testee.findMailboxWithPathLike(allMailboxesSearchQuery)) @@ -277,7 +277,7 @@ class CassandraMailboxMapperTest { .assertThat(testee.findMailboxById(inboxId)) .isEqualTo(inbox); softly(softly) - .assertThat(testee.findMailboxByPath(inboxPath)) + .assertThat(testee.findMailboxByPath(inboxPath).block()) .isEqualTo(inbox); softly.assertThat(testee.findMailboxWithPathLike(inboxSearchQuery)) .hasOnlyOneElementSatisfying(searchMailbox -> softly(softly) @@ -348,7 +348,7 @@ class CassandraMailboxMapperTest { .assertThat(testee.findMailboxById(inboxId)) .isEqualTo(inbox); softly(softly) - .assertThat(testee.findMailboxByPath(inboxPath)) + .assertThat(testee.findMailboxByPath(inboxPath).block()) .isEqualTo(inbox); softly.assertThat(testee.findMailboxWithPathLike(inboxSearchQuery)) .hasOnlyOneElementSatisfying(searchMailbox -> softly(softly) @@ -463,7 +463,7 @@ class CassandraMailboxMapperTest { SoftAssertions.assertSoftly(Throwing.consumer(softly -> { softly(softly) - .assertThat(testee.findMailboxByPath(inboxPath)) + .assertThat(testee.findMailboxByPath(inboxPath).block()) .isEqualTo(inbox); softly.assertThat(testee.findMailboxWithPathLike(inboxSearchQuery)) .hasOnlyOneElementSatisfying(searchMailbox -> softly(softly) @@ -490,7 +490,7 @@ class CassandraMailboxMapperTest { SoftAssertions.assertSoftly(Throwing.consumer(softly -> { softly(softly) - .assertThat(testee.findMailboxByPath(inboxPath)) + .assertThat(testee.findMailboxByPath(inboxPath).block()) .isEqualTo(inbox); softly.assertThat(testee.findMailboxWithPathLike(inboxSearchQuery)) .hasOnlyOneElementSatisfying(searchMailbox -> softly(softly) @@ -520,8 +520,8 @@ class CassandraMailboxMapperTest { SoftAssertions.assertSoftly(Throwing.consumer(softly -> { softly.assertThatThrownBy(() -> testee.findMailboxById(inboxId)) .isInstanceOf(MailboxNotFoundException.class); - softly.assertThatThrownBy(() -> testee.findMailboxByPath(inboxPath)) - .isInstanceOf(MailboxNotFoundException.class); + softly.assertThat(testee.findMailboxByPath(inboxPath).blockOptional()) + .isEmpty(); softly.assertThat(testee.findMailboxWithPathLike(inboxSearchQuery)) .isEmpty(); softly.assertThat(testee.findMailboxWithPathLike(allMailboxesSearchQuery)) @@ -551,7 +551,7 @@ class CassandraMailboxMapperTest { .assertThat(testee.findMailboxById(inboxId)) .isEqualTo(inboxRenamed); softly(softly) - .assertThat(testee.findMailboxByPath(inboxPathRenamed)) + .assertThat(testee.findMailboxByPath(inboxPathRenamed).block()) .isEqualTo(inboxRenamed); softly.assertThat(testee.findMailboxWithPathLike(inboxSearchQuery)) .isEmpty(); @@ -587,7 +587,7 @@ class CassandraMailboxMapperTest { .assertThat(testee.findMailboxById(inboxId)) .isEqualTo(inboxRenamed); softly(softly) - .assertThat(testee.findMailboxByPath(inboxPathRenamed)) + .assertThat(testee.findMailboxByPath(inboxPathRenamed).block()) .isEqualTo(inboxRenamed); softly.assertThat(testee.findMailboxWithPathLike(inboxSearchQuery)) .isEmpty(); @@ -620,7 +620,7 @@ class CassandraMailboxMapperTest { @Test void renameShouldNotRemoveOldMailboxPathWhenCreatingTheNewMailboxPathFails() throws Exception { testee.create(MAILBOX_PATH, UID_VALIDITY); - Mailbox mailbox = testee.findMailboxByPath(MAILBOX_PATH); + Mailbox mailbox = testee.findMailboxByPath(MAILBOX_PATH).block(); Mailbox newMailbox = new Mailbox(tooLongMailboxPath(mailbox.generateAssociatedPath()), UID_VALIDITY, mailbox.getMailboxId()); assertThatThrownBy(() -> testee.rename(newMailbox)) @@ -643,8 +643,8 @@ class CassandraMailboxMapperTest { testee.delete(MAILBOX); - assertThatThrownBy(() -> testee.findMailboxByPath(MAILBOX_PATH)) - .isInstanceOf(MailboxNotFoundException.class); + assertThat(testee.findMailboxByPath(MAILBOX_PATH).blockOptional()) + .isEmpty(); } @Test @@ -656,36 +656,36 @@ class CassandraMailboxMapperTest { testee.delete(MAILBOX); - assertThatThrownBy(() -> testee.findMailboxByPath(MAILBOX_PATH)) - .isInstanceOf(MailboxNotFoundException.class); + assertThat(testee.findMailboxByPath(MAILBOX_PATH).blockOptional()) + .isEmpty(); } @Test - void findMailboxByPathShouldReturnMailboxWhenExistsInV1Table() throws Exception { + void findMailboxByPathShouldReturnMailboxWhenExistsInV1Table() { mailboxDAO.save(MAILBOX) .block(); mailboxPathDAO.save(MAILBOX_PATH, MAILBOX_ID) .block(); - Mailbox mailbox = testee.findMailboxByPath(MAILBOX_PATH); + Mailbox mailbox = testee.findMailboxByPath(MAILBOX_PATH).block(); assertThat(mailbox.generateAssociatedPath()).isEqualTo(MAILBOX_PATH); } @Test - void findMailboxByPathShouldReturnMailboxWhenExistsInV2Table() throws Exception { + void findMailboxByPathShouldReturnMailboxWhenExistsInV2Table() { mailboxDAO.save(MAILBOX) .block(); mailboxPathV2DAO.save(MAILBOX_PATH, MAILBOX_ID) .block(); - Mailbox mailbox = testee.findMailboxByPath(MAILBOX_PATH); + Mailbox mailbox = testee.findMailboxByPath(MAILBOX_PATH).block(); assertThat(mailbox.generateAssociatedPath()).isEqualTo(MAILBOX_PATH); } @Test - void findMailboxByPathShouldReturnMailboxWhenExistsInBothTables() throws Exception { + void findMailboxByPathShouldReturnMailboxWhenExistsInBothTables() { mailboxDAO.save(MAILBOX) .block(); mailboxPathDAO.save(MAILBOX_PATH, MAILBOX_ID) @@ -693,7 +693,7 @@ class CassandraMailboxMapperTest { mailboxPathV2DAO.save(MAILBOX_PATH, MAILBOX_ID) .block(); - Mailbox mailbox = testee.findMailboxByPath(MAILBOX_PATH); + Mailbox mailbox = testee.findMailboxByPath(MAILBOX_PATH).block(); assertThat(mailbox.generateAssociatedPath()).isEqualTo(MAILBOX_PATH); } @@ -709,8 +709,8 @@ class CassandraMailboxMapperTest { testee.delete(MAILBOX); - assertThatThrownBy(() -> testee.findMailboxByPath(MAILBOX_PATH)) - .isInstanceOf(MailboxNotFoundException.class); + assertThat(testee.findMailboxByPath(MAILBOX_PATH).blockOptional()) + .isEmpty(); } @Test @@ -722,8 +722,8 @@ class CassandraMailboxMapperTest { testee.delete(MAILBOX); - assertThatThrownBy(() -> testee.findMailboxByPath(MAILBOX_PATH)) - .isInstanceOf(MailboxNotFoundException.class); + assertThat(testee.findMailboxByPath(MAILBOX_PATH).blockOptional()) + .isEmpty(); } @Test @@ -735,8 +735,8 @@ class CassandraMailboxMapperTest { testee.delete(MAILBOX); - assertThatThrownBy(() -> testee.findMailboxByPath(MAILBOX_PATH)) - .isInstanceOf(MailboxNotFoundException.class); + assertThat(testee.findMailboxByPath(MAILBOX_PATH).blockOptional()) + .isEmpty(); } @Test @@ -744,8 +744,8 @@ class CassandraMailboxMapperTest { mailboxDAO.save(MAILBOX) .block(); - assertThatThrownBy(() -> testee.findMailboxByPath(MAILBOX_PATH)) - .isInstanceOf(MailboxNotFoundException.class); + assertThat(testee.findMailboxByPath(MAILBOX_PATH).blockOptional()) + .isEmpty(); } @Test diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/MailboxPathV2MigrationTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/MailboxPathV2MigrationTest.java index 82ee289..81bab1c 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/MailboxPathV2MigrationTest.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/MailboxPathV2MigrationTest.java @@ -110,7 +110,7 @@ class MailboxPathV2MigrationTest { daoV1.save(MAILBOX_PATH_1, MAILBOX_ID_1).block(); mailboxDAO.save(mailbox).block(); - mailboxMapper.findMailboxByPath(MAILBOX_PATH_1); + mailboxMapper.findMailboxByPath(MAILBOX_PATH_1).block(); SoftAssertions softly = new SoftAssertions(); softly.assertThat(daoV1.retrieveId(MAILBOX_PATH_1).blockOptional()).isEmpty(); diff --git a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMailboxMapper.java b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMailboxMapper.java index 966101a..1601631 100644 --- a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMailboxMapper.java +++ b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMailboxMapper.java @@ -50,6 +50,8 @@ import com.github.steveash.guavate.Guavate; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; +import reactor.core.publisher.Mono; + /** * Data access management for mailbox. */ @@ -129,27 +131,24 @@ public class JPAMailboxMapper extends JPATransactionalMapper implements MailboxM } private boolean isPathAlreadyUsedByAnotherMailbox(MailboxPath mailboxPath) throws MailboxException { - try { - findMailboxByPath(mailboxPath); - return true; - } catch (MailboxNotFoundException e) { - return false; - } + return findMailboxByPath(mailboxPath) + .blockOptional() + .isPresent(); } @Override - public Mailbox findMailboxByPath(MailboxPath mailboxPath) throws MailboxException, MailboxNotFoundException { + public Mono<Mailbox> findMailboxByPath(MailboxPath mailboxPath) { try { - return getEntityManager().createNamedQuery("findMailboxByNameWithUser", JPAMailbox.class) + return Mono.just(getEntityManager().createNamedQuery("findMailboxByNameWithUser", JPAMailbox.class) .setParameter("nameParam", mailboxPath.getName()) .setParameter("namespaceParam", mailboxPath.getNamespace()) .setParameter("userParam", mailboxPath.getUser().asString()) .getSingleResult() - .toMailbox(); + .toMailbox()); } catch (NoResultException e) { - throw new MailboxNotFoundException(mailboxPath); + return Mono.empty(); } catch (PersistenceException e) { - throw new MailboxException("Search of mailbox " + mailboxPath + " failed", e); + return Mono.error(new MailboxException("Exception upon JPA execution", e)); } } diff --git a/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/JpaMailboxMapperTest.java b/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/JpaMailboxMapperTest.java index 9be8ff1..32aec06 100644 --- a/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/JpaMailboxMapperTest.java +++ b/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/JpaMailboxMapperTest.java @@ -67,7 +67,7 @@ class JpaMailboxMapperTest extends MailboxMapperTest { entityManager.persist(jpaMailbox); entityManager.getTransaction().commit(); - Mailbox readMailbox = mailboxMapper.findMailboxByPath(benwaInboxPath); + Mailbox readMailbox = mailboxMapper.findMailboxByPath(benwaInboxPath).block(); assertThat(readMailbox.getUidValidity().isValid()).isTrue(); } @@ -82,8 +82,8 @@ class JpaMailboxMapperTest extends MailboxMapperTest { entityManager.persist(jpaMailbox); entityManager.getTransaction().commit(); - Mailbox readMailbox1 = mailboxMapper.findMailboxByPath(benwaInboxPath); - Mailbox readMailbox2 = mailboxMapper.findMailboxByPath(benwaInboxPath); + Mailbox readMailbox1 = mailboxMapper.findMailboxByPath(benwaInboxPath).block(); + Mailbox readMailbox2 = mailboxMapper.findMailboxByPath(benwaInboxPath).block(); assertThat(readMailbox1.getUidValidity()).isEqualTo(readMailbox2.getUidValidity()); } diff --git a/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalMailboxMapper.java b/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalMailboxMapper.java index a40e189..30b4da7 100644 --- a/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalMailboxMapper.java +++ b/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalMailboxMapper.java @@ -36,6 +36,8 @@ import org.apache.james.mailbox.model.search.MailboxQuery; import org.apache.james.mailbox.store.mail.MailboxMapper; import org.apache.james.mailbox.store.transaction.Mapper; +import reactor.core.publisher.Mono; + public class TransactionalMailboxMapper implements MailboxMapper { private final JPAMailboxMapper wrapped; @@ -69,7 +71,7 @@ public class TransactionalMailboxMapper implements MailboxMapper { } @Override - public Mailbox findMailboxByPath(MailboxPath mailboxPath) throws MailboxException, MailboxNotFoundException { + public Mono<Mailbox> findMailboxByPath(MailboxPath mailboxPath) { return wrapped.findMailboxByPath(mailboxPath); } diff --git a/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMailboxMapper.java b/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMailboxMapper.java index f6e8195..d9b5c0d 100644 --- a/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMailboxMapper.java +++ b/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMailboxMapper.java @@ -54,6 +54,8 @@ import org.slf4j.LoggerFactory; import com.github.steveash.guavate.Guavate; import com.google.common.collect.ImmutableList; +import reactor.core.publisher.Mono; + public class MaildirMailboxMapper extends NonTransactionalMapper implements MailboxMapper { private static final Logger LOGGER = LoggerFactory.getLogger(MaildirMailboxMapper.class); @@ -106,9 +108,12 @@ public class MaildirMailboxMapper extends NonTransactionalMapper implements Mail } @Override - public Mailbox findMailboxByPath(MailboxPath mailboxPath) - throws MailboxException, MailboxNotFoundException { - return maildirStore.loadMailbox(session, mailboxPath); + public Mono<Mailbox> findMailboxByPath(MailboxPath mailboxPath) { + try { + return Mono.just(maildirStore.loadMailbox(session, mailboxPath)); + } catch (MailboxException e) { + return Mono.empty(); + } } @Override diff --git a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxMapper.java b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxMapper.java index c990f48..fc55302 100644 --- a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxMapper.java +++ b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxMapper.java @@ -44,6 +44,8 @@ import com.github.steveash.guavate.Guavate; import com.google.common.base.Objects; import com.google.common.base.Preconditions; +import reactor.core.publisher.Mono; + public class InMemoryMailboxMapper implements MailboxMapper { private static final int INITIAL_SIZE = 128; @@ -64,13 +66,10 @@ public class InMemoryMailboxMapper implements MailboxMapper { } @Override - public synchronized Mailbox findMailboxByPath(MailboxPath path) throws MailboxException { + public synchronized Mono<Mailbox> findMailboxByPath(MailboxPath path) { Mailbox result = mailboxesByPath.get(path); - if (result == null) { - throw new MailboxNotFoundException(path); - } else { - return new Mailbox(result); - } + return Mono.justOrEmpty(result) + .map(Mailbox::new); } @Override diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxAnnotationManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxAnnotationManager.java index 7bc3a95..2b1a52f 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxAnnotationManager.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxAnnotationManager.java @@ -69,7 +69,7 @@ public class StoreMailboxAnnotationManager implements MailboxAnnotationManager { public MailboxId checkThenGetMailboxId(MailboxPath path, MailboxSession session) throws MailboxException { MailboxMapper mailboxMapper = mailboxSessionMapperFactory.getMailboxMapper(session); - Mailbox mailbox = mailboxMapper.findMailboxByPath(path); + Mailbox mailbox = mailboxMapper.findMailboxByPathBlocking(path); if (!rightManager.hasRight(mailbox, Right.Read, session)) { throw new InsufficientRightsException("Not enough rights on " + path); } 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 e9ad7a4..2854449 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 @@ -255,13 +255,12 @@ public class StoreMailboxManager implements MailboxManager { public MessageManager getMailbox(MailboxPath mailboxPath, MailboxSession session) throws MailboxException { final MailboxMapper mapper = mailboxSessionMapperFactory.getMailboxMapper(session); - Mailbox mailboxRow = mapper.findMailboxByPath(mailboxPath); - - if (mailboxRow == null) { - LOGGER.info("Mailbox '{}' not found.", mailboxPath); - throw new MailboxNotFoundException(mailboxPath); - - } + Mailbox mailboxRow = mapper.findMailboxByPath(mailboxPath) + .blockOptional() + .orElseThrow(() -> { + LOGGER.info("Mailbox '{}' not found.", mailboxPath); + return new MailboxNotFoundException(mailboxPath); + }); if (!assertUserHasAccessTo(mailboxRow, session)) { LOGGER.info("Mailbox '{}' does not belong to user '{}' but to '{}'", mailboxPath, session.getUser(), mailboxRow.getUser()); @@ -409,10 +408,7 @@ public class StoreMailboxManager implements MailboxManager { MailboxMapper mailboxMapper = mailboxSessionMapperFactory.getMailboxMapper(session); mailboxMapper.execute(() -> { - Mailbox mailbox = mailboxMapper.findMailboxByPath(mailboxPath); - if (mailbox == null) { - throw new MailboxNotFoundException(mailboxPath); - } + Mailbox mailbox = mailboxMapper.findMailboxByPathBlocking(mailboxPath); return doDeleteMailbox(mailboxMapper, mailbox, session); }); } @@ -476,8 +472,7 @@ public class StoreMailboxManager implements MailboxManager { MailboxMapper mapper = mailboxSessionMapperFactory.getMailboxMapper(session); mapper.execute(Mapper.toTransaction(() -> { - Mailbox mailbox = Optional.ofNullable(mapper.findMailboxByPath(from)) - .orElseThrow(() -> new MailboxNotFoundException(from)); + Mailbox mailbox = mapper.findMailboxByPathBlocking(from); doRenameMailbox(mailbox, sanitizedMailboxPath, session, mapper); })); } @@ -701,13 +696,10 @@ public class StoreMailboxManager implements MailboxManager { @Override public boolean mailboxExists(MailboxPath mailboxPath, MailboxSession session) throws MailboxException { - try { - final MailboxMapper mapper = mailboxSessionMapperFactory.getMailboxMapper(session); - mapper.findMailboxByPath(mailboxPath); - return true; - } catch (MailboxNotFoundException e) { - return false; - } + MailboxMapper mapper = mailboxSessionMapperFactory.getMailboxMapper(session); + return mapper.findMailboxByPath(mailboxPath) + .blockOptional() + .isPresent(); } /** @@ -819,7 +811,7 @@ public class StoreMailboxManager implements MailboxManager { @Override public boolean hasChildren(MailboxPath mailboxPath, MailboxSession session) throws MailboxException { MailboxMapper mapper = mailboxSessionMapperFactory.getMailboxMapper(session); - Mailbox mailbox = mapper.findMailboxByPath(mailboxPath); + Mailbox mailbox = mapper.findMailboxByPathBlocking(mailboxPath); return mapper.hasChildren(mailbox, session.getPathDelimiter()); } diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreRightManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreRightManager.java index 7db8dba..5707f15 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreRightManager.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreRightManager.java @@ -89,7 +89,7 @@ public class StoreRightManager implements RightManager { @Override public Rfc4314Rights myRights(MailboxPath mailboxPath, MailboxSession session) throws MailboxException { MailboxMapper mapper = mailboxSessionMapperFactory.getMailboxMapper(session); - Mailbox mailbox = mapper.findMailboxByPath(mailboxPath); + Mailbox mailbox = mapper.findMailboxByPathBlocking(mailboxPath); return myRights(mailbox, session); } @@ -118,7 +118,7 @@ public class StoreRightManager implements RightManager { @Override public Rfc4314Rights[] listRights(MailboxPath mailboxPath, EntryKey key, MailboxSession session) throws MailboxException { MailboxMapper mapper = mailboxSessionMapperFactory.getMailboxMapper(session); - Mailbox mailbox = mapper.findMailboxByPath(mailboxPath); + Mailbox mailbox = mapper.findMailboxByPathBlocking(mailboxPath); return aclResolver.listRights(key, groupMembershipResolver, @@ -129,7 +129,7 @@ public class StoreRightManager implements RightManager { @Override public MailboxACL listRights(MailboxPath mailboxPath, MailboxSession session) throws MailboxException { MailboxMapper mapper = mailboxSessionMapperFactory.getMailboxMapper(session); - Mailbox mailbox = mapper.findMailboxByPath(mailboxPath); + Mailbox mailbox = mapper.findMailboxByPathBlocking(mailboxPath); return mailbox.getACL(); } @@ -137,7 +137,7 @@ public class StoreRightManager implements RightManager { public void applyRightsCommand(MailboxPath mailboxPath, ACLCommand mailboxACLCommand, MailboxSession session) throws MailboxException { assertSharesBelongsToUserDomain(mailboxPath.getUser(), mailboxACLCommand); MailboxMapper mapper = mailboxSessionMapperFactory.getMailboxMapper(session); - Mailbox mailbox = mapper.findMailboxByPath(mailboxPath); + Mailbox mailbox = mapper.findMailboxByPathBlocking(mailboxPath); ACLDiff aclDiff = mapper.updateACL(mailbox, mailboxACLCommand); eventBus.dispatch(EventFactory.aclUpdated() @@ -200,7 +200,7 @@ public class StoreRightManager implements RightManager { public void setRights(MailboxPath mailboxPath, MailboxACL mailboxACL, MailboxSession session) throws MailboxException { assertSharesBelongsToUserDomain(mailboxPath.getUser(), mailboxACL.getEntries()); MailboxMapper mapper = mailboxSessionMapperFactory.getMailboxMapper(session); - Mailbox mailbox = mapper.findMailboxByPath(mailboxPath); + Mailbox mailbox = mapper.findMailboxByPathBlocking(mailboxPath); setRights(mailboxACL, mapper, mailbox, session); } diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MailboxMapper.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MailboxMapper.java index 9973d8f..f0df8d1 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MailboxMapper.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MailboxMapper.java @@ -33,6 +33,8 @@ import org.apache.james.mailbox.model.UidValidity; import org.apache.james.mailbox.model.search.MailboxQuery; import org.apache.james.mailbox.store.transaction.Mapper; +import reactor.core.publisher.Mono; + /** * Mapper for {@link Mailbox} actions. A {@link MailboxMapper} has a lifecycle from the start of a request * to the end of the request. @@ -59,8 +61,21 @@ public interface MailboxMapper extends Mapper { /** * Return the {@link Mailbox} for the given name */ - Mailbox findMailboxByPath(MailboxPath mailboxName) - throws MailboxException, MailboxNotFoundException; + Mono<Mailbox> findMailboxByPath(MailboxPath mailboxName); + + default Mailbox findMailboxByPathBlocking(MailboxPath mailboxPath) throws MailboxException, MailboxNotFoundException { + try { + return findMailboxByPath(mailboxPath) + .blockOptional() + .orElseThrow(() -> new MailboxNotFoundException(mailboxPath)); + } catch (Exception e) { + Throwable cause = e.getCause(); + if (cause instanceof MailboxException) { + throw (MailboxException) cause; + } + throw e; + } + } /** * Return the {@link Mailbox} for the given name diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractMailboxManagerAttachmentTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractMailboxManagerAttachmentTest.java index a2a09d8..a55deae 100644 --- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractMailboxManagerAttachmentTest.java +++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractMailboxManagerAttachmentTest.java @@ -77,7 +77,7 @@ public abstract class AbstractMailboxManagerAttachmentTest { inboxPath = MailboxPath.forUser(USERNAME, "INBOX"); mailboxManager = getMailboxManager(); mailboxManager.createMailbox(inboxPath, mailboxSession); - inbox = mailboxMapper.findMailboxByPath(inboxPath); + inbox = mailboxMapper.findMailboxByPath(inboxPath).block(); inboxMessageManager = mailboxManager.getMailbox(inboxPath, mailboxSession); attachmentMapper = getAttachmentMapperFactory().createAttachmentMapper(mailboxSession); } 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 ecbcbd8..420e94a 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 @@ -78,7 +78,7 @@ public class MessageIdManagerTestSystem { public Mailbox createMailbox(MailboxPath mailboxPath, MailboxSession session) throws MailboxException { mailboxManager.createMailbox(mailboxPath, session); - return mapperFactory.getMailboxMapper(session).findMailboxByPath(mailboxPath); + return mapperFactory.getMailboxMapper(session).findMailboxByPath(mailboxPath).block(); } public MessageId persist(MailboxId mailboxId, MessageUid uid, Flags flags, MailboxSession mailboxSession) { diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerAnnotationTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerAnnotationTest.java index 85e3670..ee73f44 100644 --- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerAnnotationTest.java +++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerAnnotationTest.java @@ -23,6 +23,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; @@ -54,6 +55,8 @@ import org.mockito.MockitoAnnotations; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; +import reactor.core.publisher.Mono; + class StoreMailboxManagerAnnotationTest { static final MailboxAnnotationKey PRIVATE_KEY = new MailboxAnnotationKey("/private/comment"); static final MailboxAnnotationKey SHARED_KEY = new MailboxAnnotationKey("/shared/comment"); @@ -86,7 +89,7 @@ class StoreMailboxManagerAnnotationTest { when(mailboxSessionMapperFactory.getMailboxMapper(eq(session))).thenReturn(mailboxMapper); when(mailboxSessionMapperFactory.getAnnotationMapper(eq(session))).thenReturn(annotationMapper); when(mailbox.getMailboxId()).thenReturn(mailboxId); - when(mailboxMapper.findMailboxByPath(eq(mailboxPath))).thenReturn(mailbox); + when(mailboxMapper.findMailboxByPath(eq(mailboxPath))).thenReturn(Mono.just(mailbox)); when(annotationMapper.execute(any(Mapper.Transaction.class))) .thenAnswer(invocationOnMock -> { Mapper.Transaction<?> transaction = (Mapper.Transaction<?>) invocationOnMock.getArguments()[0]; @@ -101,7 +104,7 @@ class StoreMailboxManagerAnnotationTest { @Test void updateAnnotationsShouldThrowExceptionWhenDoesNotLookupMailbox() throws Exception { - doThrow(MailboxException.class).when(mailboxMapper).findMailboxByPath(eq(mailboxPath)); + doThrow(MailboxException.class).when(mailboxMapper).findMailboxByPathBlocking(eq(mailboxPath)); assertThatThrownBy(() -> annotationManager.updateAnnotations(mailboxPath, session, ImmutableList.of(PRIVATE_ANNOTATION))) .isInstanceOf(MailboxException.class); @@ -109,7 +112,7 @@ class StoreMailboxManagerAnnotationTest { @Test void updateAnnotationsShouldCallAnnotationMapperToInsertAnnotation() throws Exception { - when(mailboxMapper.findMailboxByPath(eq(mailboxPath))).thenReturn(mailbox); + when(mailboxMapper.findMailboxByPathBlocking(eq(mailboxPath))).thenReturn(mailbox); annotationManager.updateAnnotations(mailboxPath, session, ANNOTATIONS); verify(annotationMapper, times(2)).insertAnnotation(eq(mailboxId), any(MailboxAnnotation.class)); @@ -117,7 +120,7 @@ class StoreMailboxManagerAnnotationTest { @Test void updateAnnotationsShouldCallAnnotationMapperToDeleteAnnotation() throws Exception { - when(mailboxMapper.findMailboxByPath(eq(mailboxPath))).thenReturn(mailbox); + when(mailboxMapper.findMailboxByPathBlocking(eq(mailboxPath))).thenReturn(mailbox); annotationManager.updateAnnotations(mailboxPath, session, ANNOTATIONS_WITH_NIL_ENTRY); verify(annotationMapper, times(1)).insertAnnotation(eq(mailboxId), eq(PRIVATE_ANNOTATION)); @@ -126,7 +129,7 @@ class StoreMailboxManagerAnnotationTest { @Test void getAllAnnotationsShouldThrowExceptionWhenDoesNotLookupMailbox() throws Exception { - doThrow(MailboxException.class).when(mailboxMapper).findMailboxByPath(eq(mailboxPath)); + doThrow(MailboxException.class).when(mailboxMapper).findMailboxByPathBlocking(eq(mailboxPath)); assertThatThrownBy(() -> annotationManager.getAllAnnotations(mailboxPath, session)) .isInstanceOf(MailboxException.class); @@ -134,7 +137,7 @@ class StoreMailboxManagerAnnotationTest { @Test void getAllAnnotationsShouldReturnEmptyForNonStoredAnnotation() throws Exception { - when(mailboxMapper.findMailboxByPath(eq(mailboxPath))).thenReturn(mailbox); + when(mailboxMapper.findMailboxByPathBlocking(eq(mailboxPath))).thenReturn(mailbox); when(annotationMapper.getAllAnnotations(eq(mailboxId))).thenReturn(Collections.<MailboxAnnotation>emptyList()); assertThat(annotationManager.getAllAnnotations(mailboxPath, session)).isEmpty(); @@ -142,7 +145,7 @@ class StoreMailboxManagerAnnotationTest { @Test void getAllAnnotationsShouldReturnStoredAnnotation() throws Exception { - when(mailboxMapper.findMailboxByPath(eq(mailboxPath))).thenReturn(mailbox); + when(mailboxMapper.findMailboxByPathBlocking(eq(mailboxPath))).thenReturn(mailbox); when(annotationMapper.getAllAnnotations(eq(mailboxId))).thenReturn(ANNOTATIONS); assertThat(annotationManager.getAllAnnotations(mailboxPath, session)).isEqualTo(ANNOTATIONS); @@ -150,7 +153,7 @@ class StoreMailboxManagerAnnotationTest { @Test void getAnnotationsByKeysShouldThrowExceptionWhenDoesNotLookupMailbox() throws Exception { - doThrow(MailboxException.class).when(mailboxMapper).findMailboxByPath(eq(mailboxPath)); + doThrow(MailboxException.class).when(mailboxMapper).findMailboxByPathBlocking(eq(mailboxPath)); assertThatThrownBy(() -> annotationManager.getAnnotationsByKeys(mailboxPath, session, KEYS)) .isInstanceOf(MailboxException.class); @@ -158,7 +161,7 @@ class StoreMailboxManagerAnnotationTest { @Test void getAnnotationsByKeysShouldRetrieveStoreAnnotationsByKey() throws Exception { - when(mailboxMapper.findMailboxByPath(eq(mailboxPath))).thenReturn(mailbox); + when(mailboxMapper.findMailboxByPathBlocking(eq(mailboxPath))).thenReturn(mailbox); when(annotationMapper.getAnnotationsByKeys(eq(mailboxId), eq(KEYS))).thenReturn(ANNOTATIONS); assertThat(annotationManager.getAnnotationsByKeys(mailboxPath, session, KEYS)).isEqualTo(ANNOTATIONS); diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerTest.java index 6280122..9ffdee2 100644 --- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerTest.java +++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerTest.java @@ -60,6 +60,8 @@ import org.apache.james.metrics.tests.RecordingMetricFactory; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import reactor.core.publisher.Mono; + class StoreMailboxManagerTest { static final Username CURRENT_USER = Username.of("user"); static final String CURRENT_USER_PASSWORD = "secret"; @@ -146,7 +148,7 @@ class StoreMailboxManagerTest { when(mockedMailbox.getMailboxId()).thenReturn(MAILBOX_ID); when(mockedMailbox.getUser()).thenReturn(otherUser); when(mockedMailboxMapper.findMailboxById(MAILBOX_ID)).thenReturn(mockedMailbox); - when(mockedMailboxMapper.findMailboxByPath(any())).thenReturn(mockedMailbox); + when(mockedMailboxMapper.findMailboxByPath(any())).thenReturn(Mono.just(mockedMailbox)); assertThatThrownBy(() -> storeMailboxManager.getMailbox(MAILBOX_ID, mockedMailboxSession)) .isInstanceOf(MailboxNotFoundException.class); diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreRightManagerTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreRightManagerTest.java index 7aa4a76..a880c3a 100644 --- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreRightManagerTest.java +++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreRightManagerTest.java @@ -56,6 +56,8 @@ import org.apache.james.mailbox.store.mail.MailboxMapper; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import reactor.core.publisher.Mono; + class StoreRightManagerTest { static final MailboxId MAILBOX_ID = TestId.of(42); @@ -84,7 +86,7 @@ class StoreRightManagerTest { @Test void hasRightShouldThrowMailboxNotFoundExceptionWhenMailboxDoesNotExist() throws MailboxException { MailboxPath mailboxPath = MailboxPath.forUser(MailboxFixture.ALICE, "unexisting mailbox"); - when(mockedMailboxMapper.findMailboxByPath(mailboxPath)) + when(mockedMailboxMapper.findMailboxByPathBlocking(mailboxPath)) .thenThrow(new MailboxNotFoundException("")); assertThatThrownBy(() -> diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MailboxMapperACLTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MailboxMapperACLTest.java index 744892f..d4dfaec 100644 --- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MailboxMapperACLTest.java +++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MailboxMapperACLTest.java @@ -396,6 +396,7 @@ public abstract class MailboxMapperACLTest { assertThat( mailboxMapper.findMailboxByPath(benwaInboxMailbox.generateAssociatedPath()) + .block() .getACL() .getEntries()) .hasSize(1) diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MailboxMapperTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MailboxMapperTest.java index 98bf41a..026e402 100644 --- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MailboxMapperTest.java +++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MailboxMapperTest.java @@ -82,15 +82,15 @@ public abstract class MailboxMapperTest { @Test void findMailboxByPathWhenAbsentShouldFail() { - assertThatThrownBy(() -> mailboxMapper.findMailboxByPath(MailboxPath.forUser(BENWA, "INBOX"))) - .isInstanceOf(MailboxNotFoundException.class); + assertThat(mailboxMapper.findMailboxByPath(MailboxPath.forUser(BENWA, "INBOX")).blockOptional()) + .isEmpty(); } @Test void createShouldPersistTheMailbox() throws MailboxException { benwaInboxMailbox = createMailbox(benwaInboxPath); - assertThat(mailboxMapper.findMailboxByPath(benwaInboxPath)).isEqualTo(benwaInboxMailbox); + assertThat(mailboxMapper.findMailboxByPath(benwaInboxPath).blockOptional()).contains(benwaInboxMailbox); assertThat(mailboxMapper.findMailboxById(benwaInboxMailbox.getMailboxId())).isEqualTo(benwaInboxMailbox); } @@ -149,8 +149,8 @@ public abstract class MailboxMapperTest { benwaWorkMailbox = new Mailbox(benwaWorkPath, UID_VALIDITY, mailboxId); mailboxMapper.rename(benwaWorkMailbox); - assertThatThrownBy(() -> mailboxMapper.findMailboxByPath(benwaInboxPath)) - .isInstanceOf(MailboxNotFoundException.class); + assertThat(mailboxMapper.findMailboxByPath(benwaInboxPath).blockOptional()) + .isEmpty(); } @Test @@ -200,8 +200,8 @@ public abstract class MailboxMapperTest { createAll(); mailboxMapper.delete(benwaInboxMailbox); - assertThatThrownBy(() -> mailboxMapper.findMailboxByPath(benwaInboxPath)) - .isInstanceOf(MailboxNotFoundException.class); + assertThat(mailboxMapper.findMailboxByPath(benwaInboxPath).blockOptional()) + .isEmpty(); } @Test diff --git a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/MailboxProbeImpl.java b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/MailboxProbeImpl.java index d8cb4e8..f112583 100644 --- a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/MailboxProbeImpl.java +++ b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/MailboxProbeImpl.java @@ -34,6 +34,7 @@ import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.MessageManager; import org.apache.james.mailbox.SubscriptionManager; import org.apache.james.mailbox.exception.MailboxException; +import org.apache.james.mailbox.exception.MailboxNotFoundException; import org.apache.james.mailbox.model.ComposedMessageId; import org.apache.james.mailbox.model.MailboxId; import org.apache.james.mailbox.model.MailboxMetaData; @@ -84,7 +85,11 @@ public class MailboxProbeImpl implements GuiceProbe, MailboxProbe { try { mailboxSession = mailboxManager.createSystemSession(username); MailboxMapper mailboxMapper = mailboxMapperFactory.getMailboxMapper(mailboxSession); - return mailboxMapper.findMailboxByPath(new MailboxPath(namespace, username, name)).getMailboxId(); + MailboxPath path = new MailboxPath(namespace, username, name); + return mailboxMapper.findMailboxByPath(path) + .blockOptional() + .orElseThrow(() -> new MailboxNotFoundException(path.asString())) + .getMailboxId(); } catch (MailboxException e) { throw new RuntimeException(e); } finally { diff --git a/server/container/mailbox-jmx/src/test/java/org/apache/james/adapter/mailbox/MailboxManagementTest.java b/server/container/mailbox-jmx/src/test/java/org/apache/james/adapter/mailbox/MailboxManagementTest.java index 21c33c7..9cf51e8 100644 --- a/server/container/mailbox-jmx/src/test/java/org/apache/james/adapter/mailbox/MailboxManagementTest.java +++ b/server/container/mailbox-jmx/src/test/java/org/apache/james/adapter/mailbox/MailboxManagementTest.java @@ -132,7 +132,10 @@ public class MailboxManagementTest { void createMailboxShouldCreateAMailbox() throws Exception { mailboxManagerManagement.createMailbox(MailboxConstants.USER_NAMESPACE, USER.asString(), "name"); assertThat(mapperFactory.createMailboxMapper(session).list()).hasSize(1); - assertThat(mapperFactory.createMailboxMapper(session).findMailboxByPath(MailboxPath.forUser(USER, "name"))).isNotNull(); + assertThat(mapperFactory.createMailboxMapper(session) + .findMailboxByPath(MailboxPath.forUser(USER, "name")) + .blockOptional()) + .isPresent(); } @Test --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org