This is an automated email from the ASF dual-hosted git repository. rcordier pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git
commit 05c0fab6e0334f71cf378d126f4597aea4e20d22 Author: Tran Tien Duc <[email protected]> AuthorDate: Wed Feb 12 16:51:11 2020 +0700 JAMES-3056 renaming mailboxes doesn't need ACL to be involved --- .../cassandra/mail/CassandraMailboxMapper.java | 16 ++-- .../cassandra/mail/CassandraMailboxMapperTest.java | 94 ---------------------- 2 files changed, 8 insertions(+), 102 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 09ed684..5b01741 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 @@ -21,7 +21,6 @@ package org.apache.james.mailbox.cassandra.mail; import java.util.Collections; import java.util.List; -import java.util.Optional; import java.util.StringTokenizer; import java.util.regex.Pattern; import java.util.stream.Collectors; @@ -177,13 +176,14 @@ public class CassandraMailboxMapper implements MailboxMapper { } private boolean trySave(Mailbox cassandraMailbox, CassandraId cassandraId) { - boolean isCreated = mailboxPathV2DAO.save(cassandraMailbox.generateAssociatedPath(), cassandraId).block(); - if (isCreated) { - Optional<Mailbox> simpleMailbox = retrieveMailbox(cassandraId).blockOptional(); - simpleMailbox.ifPresent(mbx -> mailboxPathV2DAO.delete(mbx.generateAssociatedPath()).block()); - mailboxDAO.save(cassandraMailbox).block(); - } - return isCreated; + return mailboxPathV2DAO.save(cassandraMailbox.generateAssociatedPath(), cassandraId) + .filter(isCreated -> isCreated) + .flatMap(mailboxHasCreated -> mailboxDAO.retrieveMailbox(cassandraId) + .flatMap(mailbox -> mailboxPathV2DAO.delete(mailbox.generateAssociatedPath())) + .then(mailboxDAO.save(cassandraMailbox)) + .thenReturn(true)) + .switchIfEmpty(Mono.just(false)) + .block(); } private CassandraId retrieveId(Mailbox cassandraMailbox) { 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 b2854eb..e62e158 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 @@ -162,68 +162,6 @@ class CassandraMailboxMapperTest { } @Test - void saveOnRenameThenFailToGetACLShouldBeConsistentWhenFindByInbox() throws Exception { - testee.save(inbox); - - when(aclMapper.getACL(inboxId)) - .thenReturn(Mono.error(new RuntimeException("mock exception"))) - .thenCallRealMethod(); - - doQuietly(() -> testee.save(inboxRenamed)); - - SoftAssertions.assertSoftly(Throwing.consumer(softly -> { - softly(softly) - .assertThat(testee.findMailboxById(inboxId)) - .isEqualTo(inbox); - softly(softly) - .assertThat(testee.findMailboxByPath(inboxPath)) - .isEqualTo(inbox); - softly.assertThat(testee.findMailboxWithPathLike(inboxSearchQuery)) - .hasOnlyOneElementSatisfying(searchMailbox -> softly(softly) - .assertThat(searchMailbox) - .isEqualTo(inbox)); - })); - } - - @Disabled("JAMES-3056 returning two mailboxes with same name and id") - @Test - void saveOnRenameThenFailToGetACLShouldBeConsistentWhenFindAll() throws Exception { - testee.save(inbox); - - when(aclMapper.getACL(inboxId)) - .thenReturn(Mono.error(new RuntimeException("mock exception"))) - .thenCallRealMethod(); - - doQuietly(() -> testee.save(inboxRenamed)); - - SoftAssertions.assertSoftly(Throwing.consumer(softly -> { - softly.assertThat(testee.findMailboxWithPathLike(allMailboxesSearchQuery)) - .hasOnlyOneElementSatisfying(searchMailbox -> softly(softly) - .assertThat(searchMailbox) - .isEqualTo(inbox)); - })); - } - - @Disabled("JAMES-3056 find by renamed name returns unexpected results") - @Test - void saveOnRenameThenFailToGetACLShouldBeConsistentWhenFindByRenamedInbox() throws Exception { - testee.save(inbox); - - when(aclMapper.getACL(inboxId)) - .thenReturn(Mono.error(new RuntimeException("mock exception"))) - .thenCallRealMethod(); - - doQuietly(() -> testee.save(inboxRenamed)); - - SoftAssertions.assertSoftly(Throwing.consumer(softly -> { - softly.assertThatThrownBy(() -> testee.findMailboxByPath(inboxPathRenamed)) - .isInstanceOf(MailboxNotFoundException.class); - softly.assertThat(testee.findMailboxWithPathLike(inboxRenamedSearchQuery)) - .isEmpty(); - })); - } - - @Test void saveOnRenameThenFailToRetrieveMailboxShouldBeConsistentWhenFindByInbox() throws Exception { testee.save(inbox); @@ -506,38 +444,6 @@ class CassandraMailboxMapperTest { @Disabled("JAMES-3056 mailbox name is not updated to INBOX_RENAMED") @Test - void renameAfterRenameFailOnGetACLShouldRenameTheMailbox() throws Exception { - testee.save(inbox); - - when(aclMapper.getACL(inboxId)) - .thenReturn(Mono.error(new RuntimeException("mock exception"))) - .thenCallRealMethod(); - - doQuietly(() -> testee.save(inboxRenamed)); - doQuietly(() -> testee.save(inboxRenamed)); - - SoftAssertions.assertSoftly(Throwing.consumer(softly -> { - softly(softly) - .assertThat(testee.findMailboxById(inboxId)) - .isEqualTo(inboxRenamed); - softly(softly) - .assertThat(testee.findMailboxByPath(inboxPathRenamed)) - .isEqualTo(inboxRenamed); - softly.assertThat(testee.findMailboxWithPathLike(inboxSearchQuery)) - .isEmpty(); - softly.assertThat(testee.findMailboxWithPathLike(inboxRenamedSearchQuery)) - .hasOnlyOneElementSatisfying(searchMailbox -> softly(softly) - .assertThat(searchMailbox) - .isEqualTo(inboxRenamed)); - softly.assertThat(testee.findMailboxWithPathLike(allMailboxesSearchQuery)) - .hasOnlyOneElementSatisfying(searchMailbox -> softly(softly) - .assertThat(searchMailbox) - .isEqualTo(inboxRenamed)); - })); - } - - @Disabled("JAMES-3056 mailbox name is not updated to INBOX_RENAMED") - @Test void renameAfterRenameFailOnDeletePathShouldRenameTheMailbox() throws Exception { testee.save(inbox); --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
