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 bt...@apache.org on 2020/03/26 02:41:34 UTC
[james-project] 12/16: JAMES-3087 Reactify
MailboxMapper::findMailboxByPath
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 <bt...@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-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org