This is an automated email from the ASF dual-hosted git repository. rouazana pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git
commit 05c5ebe86bb7af1e0c7b9b0c0495a8d05a04d5d0 Author: Benoit Tellier <[email protected]> AuthorDate: Tue Jul 7 08:55:35 2020 +0700 JAMES-3167 Correct NullPointerExceptions when reading rights --- .../apache/james/mailbox/MailboxManagerTest.java | 78 ++++++++++++++++++++++ .../james/mailbox/store/StoreRightManager.java | 14 ++-- 2 files changed, 88 insertions(+), 4 deletions(-) diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java b/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java index 09069fe..7a8dbe5 100644 --- a/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java +++ b/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java @@ -2692,4 +2692,82 @@ public abstract class MailboxManagerTest<T extends MailboxManager> { .satisfies(Throwing.consumer(messageResult -> assertThat(messageResult.hasAttachments()).isFalse())); } } + + @Nested + class RightTests { + @BeforeEach + void setUp() { + session = mailboxManager.createSystemSession(USER_1); + } + + @Test + void hasRightShouldThrowOnUnknownMailbox() { + assertThatThrownBy(() -> mailboxManager.hasRight( + MailboxPath.forUser(USER_1, "notFound"), + MailboxACL.Right.Administer, + session)) + .isInstanceOf(MailboxNotFoundException.class); + } + + @Test + void listRightsShouldThrowOnUnknownMailbox() { + assertThatThrownBy(() -> mailboxManager.listRights( + MailboxPath.forUser(USER_1, "notFound"), + session)) + .isInstanceOf(MailboxNotFoundException.class); + } + + @Test + void myRightsShouldThrowOnUnknownMailbox() { + assertThatThrownBy(() -> mailboxManager.myRights( + MailboxPath.forUser(USER_1, "notFound"), + session)) + .isInstanceOf(MailboxNotFoundException.class); + } + + @Test + void listRightsForEntryShouldThrowOnUnknownMailbox() { + assertThatThrownBy(() -> mailboxManager.listRights( + MailboxPath.forUser(USER_1, "notFound"), + MailboxACL.EntryKey.createUserEntryKey(USER_2), + session)) + .isInstanceOf(MailboxNotFoundException.class); + } + + @Test + void setRightsShouldNotThrowOnUnknownMailbox() { + assertThatCode(() -> mailboxManager.setRights( + MailboxPath.forUser(USER_1, "notFound"), + MailboxACL.EMPTY, + session)) + .doesNotThrowAnyException(); + } + + @Test + void hasRightShouldThrowOnDeletedMailbox() throws Exception { + MailboxId id = mailboxManager.createMailbox(MailboxPath.forUser(USER_1, "deleted"), session).get(); + mailboxManager.deleteMailbox(id, session); + + assertThatThrownBy(() -> mailboxManager.hasRight(id, MailboxACL.Right.Administer, session)) + .isInstanceOf(MailboxNotFoundException.class); + } + + @Test + void myRightsShouldThrowOnDeletedMailbox() throws Exception { + MailboxId id = mailboxManager.createMailbox(MailboxPath.forUser(USER_1, "deleted"), session).get(); + mailboxManager.deleteMailbox(id, session); + + assertThatThrownBy(() -> Mono.from(mailboxManager.myRights(id, session)).blockOptional()) + .hasCauseInstanceOf(MailboxNotFoundException.class); + } + + @Test + void setRightsShouldThrowOnDeletedMailbox() throws Exception { + MailboxId id = mailboxManager.createMailbox(MailboxPath.forUser(USER_1, "deleted"), session).get(); + mailboxManager.deleteMailbox(id, session); + + assertThatThrownBy(() -> mailboxManager.setRights(id, MailboxACL.EMPTY, session)) + .isInstanceOf(MailboxNotFoundException.class); + } + } } 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 b9cde36..ddb5e6d 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 @@ -20,6 +20,7 @@ package org.apache.james.mailbox.store; import static org.apache.james.mailbox.store.MailboxReactorUtils.block; +import static org.apache.james.mailbox.store.MailboxReactorUtils.blockOptional; import java.util.List; import java.util.Map; @@ -38,6 +39,7 @@ import org.apache.james.mailbox.events.EventBus; import org.apache.james.mailbox.events.MailboxIdRegistrationKey; import org.apache.james.mailbox.exception.DifferentDomainException; import org.apache.james.mailbox.exception.MailboxException; +import org.apache.james.mailbox.exception.MailboxNotFoundException; import org.apache.james.mailbox.exception.UnsupportedRightException; import org.apache.james.mailbox.model.Mailbox; import org.apache.james.mailbox.model.MailboxACL; @@ -93,7 +95,8 @@ public class StoreRightManager implements RightManager { @Override public Rfc4314Rights myRights(MailboxPath mailboxPath, MailboxSession session) throws MailboxException { MailboxMapper mapper = mailboxSessionMapperFactory.getMailboxMapper(session); - Mailbox mailbox = block(mapper.findMailboxByPath(mailboxPath)); + Mailbox mailbox = blockOptional(mapper.findMailboxByPath(mailboxPath)) + .orElseThrow(() -> new MailboxNotFoundException(mailboxPath)); return myRights(mailbox, session); } @@ -123,7 +126,8 @@ public class StoreRightManager implements RightManager { @Override public List<Rfc4314Rights> listRights(MailboxPath mailboxPath, EntryKey key, MailboxSession session) throws MailboxException { MailboxMapper mapper = mailboxSessionMapperFactory.getMailboxMapper(session); - Mailbox mailbox = block(mapper.findMailboxByPath(mailboxPath)); + Mailbox mailbox = blockOptional(mapper.findMailboxByPath(mailboxPath)) + .orElseThrow(() -> new MailboxNotFoundException(mailboxPath)); return aclResolver.listRights(key, groupMembershipResolver, @@ -134,7 +138,8 @@ public class StoreRightManager implements RightManager { @Override public MailboxACL listRights(MailboxPath mailboxPath, MailboxSession session) throws MailboxException { MailboxMapper mapper = mailboxSessionMapperFactory.getMailboxMapper(session); - Mailbox mailbox = block(mapper.findMailboxByPath(mailboxPath)); + Mailbox mailbox = blockOptional(mapper.findMailboxByPath(mailboxPath)) + .orElseThrow(() -> new MailboxNotFoundException(mailboxPath)); return mailbox.getACL(); } @@ -194,7 +199,8 @@ public class StoreRightManager implements RightManager { @Override public void setRights(MailboxId mailboxId, MailboxACL mailboxACL, MailboxSession session) throws MailboxException { MailboxMapper mapper = mailboxSessionMapperFactory.getMailboxMapper(session); - Mailbox mailbox = block(mapper.findMailboxById(mailboxId)); + Mailbox mailbox = blockOptional(mapper.findMailboxById(mailboxId)) + .orElseThrow(() -> new MailboxNotFoundException(mailboxId)); setRights(mailbox.generateAssociatedPath(), mailboxACL, session); } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
