JAMES-2641 Harden MailboxManagerTest for events and do some fix We need to also ensure the right dispatch key is being used...
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/5a1d9d7b Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/5a1d9d7b Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/5a1d9d7b Branch: refs/heads/master Commit: 5a1d9d7b4ab55175c435afb5711c4bb8ee6f3294 Parents: 3f8b8f6 Author: Benoit Tellier <btell...@linagora.com> Authored: Tue Jan 15 17:35:51 2019 +0700 Committer: Benoit Tellier <btell...@linagora.com> Committed: Thu Jan 17 13:49:09 2019 +0700 ---------------------------------------------------------------------- .../james/mailbox/MailboxManagerTest.java | 85 ++++++++++++++++++-- .../mailbox/store/StoreMessageManager.java | 22 ++--- 2 files changed, 90 insertions(+), 17 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/5a1d9d7b/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java ---------------------------------------------------------------------- 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 57c1b34..8a3d351 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 @@ -36,10 +36,12 @@ import org.apache.james.core.quota.QuotaSize; import org.apache.james.mailbox.MailboxManager.MailboxCapabilities; import org.apache.james.mailbox.MessageManager.AppendCommand; import org.apache.james.mailbox.events.EventBus; +import org.apache.james.mailbox.events.MailboxIdRegistrationKey; import org.apache.james.mailbox.exception.AnnotationException; import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.exception.TooLongMailboxNameException; import org.apache.james.mailbox.mock.DataProvisioner; +import org.apache.james.mailbox.model.ComposedMessageId; import org.apache.james.mailbox.model.MailboxACL; import org.apache.james.mailbox.model.MailboxAnnotation; import org.apache.james.mailbox.model.MailboxAnnotationKey; @@ -385,7 +387,7 @@ public abstract class MailboxManagerTest<T extends MailboxManager> { @Test void deleteMailboxShouldFireMailboxDeletionEvent() throws Exception { assumeTrue(mailboxManager.hasCapability(MailboxCapabilities.Quota)); - retrieveEventBus(mailboxManager).register(listener); + retrieveEventBus(mailboxManager).register(listener, new MailboxIdRegistrationKey(inboxId)); mailboxManager.deleteMailbox(inbox, session); @@ -441,7 +443,7 @@ public abstract class MailboxManagerTest<T extends MailboxManager> { @Test void addingMessageShouldFireAddedEvent() throws Exception { - retrieveEventBus(mailboxManager).register(listener); + retrieveEventBus(mailboxManager).register(listener, new MailboxIdRegistrationKey(inboxId)); inboxManager.appendMessage(MessageManager.AppendCommand.builder() .build(message), session); @@ -459,7 +461,7 @@ public abstract class MailboxManagerTest<T extends MailboxManager> { inboxManager.appendMessage(MessageManager.AppendCommand.builder().build(message), session); inboxManager.setFlags(new Flags(Flags.Flag.DELETED), MessageManager.FlagsUpdateMode.ADD, MessageRange.all(), session); - retrieveEventBus(mailboxManager).register(listener); + retrieveEventBus(mailboxManager).register(listener, new MailboxIdRegistrationKey(inboxId)); inboxManager.expunge(MessageRange.all(), session); assertThat(listener.getEvents()) @@ -475,7 +477,7 @@ public abstract class MailboxManagerTest<T extends MailboxManager> { void setFlagsShouldFireFlagsUpdatedEvent() throws Exception { inboxManager.appendMessage(MessageManager.AppendCommand.builder().build(message), session); - retrieveEventBus(mailboxManager).register(listener); + retrieveEventBus(mailboxManager).register(listener, new MailboxIdRegistrationKey(inboxId)); inboxManager.setFlags(new Flags(Flags.Flag.FLAGGED), MessageManager.FlagsUpdateMode.ADD, MessageRange.all(), session); assertThat(listener.getEvents()) @@ -493,7 +495,7 @@ public abstract class MailboxManagerTest<T extends MailboxManager> { Optional<MailboxId> targetMailboxId = mailboxManager.createMailbox(newPath, session); inboxManager.appendMessage(AppendCommand.builder().build(message), session); - retrieveEventBus(mailboxManager).register(listener); + retrieveEventBus(mailboxManager).register(listener, new MailboxIdRegistrationKey(targetMailboxId.get())); mailboxManager.moveMessages(MessageRange.all(), inbox, newPath, session); assertThat(listener.getEvents()) @@ -511,7 +513,7 @@ public abstract class MailboxManagerTest<T extends MailboxManager> { mailboxManager.createMailbox(newPath, session); inboxManager.appendMessage(AppendCommand.builder().build(message), session); - retrieveEventBus(mailboxManager).register(listener); + retrieveEventBus(mailboxManager).register(listener, new MailboxIdRegistrationKey(inboxId)); mailboxManager.moveMessages(MessageRange.all(), inbox, newPath, session); assertThat(listener.getEvents()) @@ -528,7 +530,7 @@ public abstract class MailboxManagerTest<T extends MailboxManager> { Optional<MailboxId> targetMailboxId = mailboxManager.createMailbox(newPath, session); inboxManager.appendMessage(AppendCommand.builder().build(message), session); - retrieveEventBus(mailboxManager).register(listener); + retrieveEventBus(mailboxManager).register(listener, new MailboxIdRegistrationKey(targetMailboxId.get())); mailboxManager.copyMessages(MessageRange.all(), inbox, newPath, session); assertThat(listener.getEvents()) @@ -541,6 +543,75 @@ public abstract class MailboxManagerTest<T extends MailboxManager> { } @Test + void copyShouldFireMovedEventInTargetMailbox() throws Exception { + assumeTrue(mailboxManager.getSupportedMessageCapabilities().contains(MailboxManager.MessageCapabilities.UniqueID)); + + Optional<MailboxId> targetMailboxId = mailboxManager.createMailbox(newPath, session); + ComposedMessageId messageId = inboxManager.appendMessage(AppendCommand.builder().build(message), session); + + retrieveEventBus(mailboxManager).register(listener, new MailboxIdRegistrationKey(targetMailboxId.get())); + mailboxManager.copyMessages(MessageRange.all(), inbox, newPath, session); + + assertThat(listener.getEvents()) + .filteredOn(event -> event instanceof MessageMoveEvent) + .hasSize(1) + .extracting(event -> (MessageMoveEvent) event) + .element(0) + .satisfies(event -> assertThat(event.getMessageIds()).containsExactly(messageId.getMessageId())); + } + + @Test + void copyShouldNotFireMovedEventInOriginMailbox() throws Exception { + assumeTrue(mailboxManager.getSupportedMessageCapabilities().contains(MailboxManager.MessageCapabilities.UniqueID)); + + mailboxManager.createMailbox(newPath, session); + inboxManager.appendMessage(AppendCommand.builder().build(message), session); + + retrieveEventBus(mailboxManager).register(listener, new MailboxIdRegistrationKey(inboxId)); + mailboxManager.copyMessages(MessageRange.all(), inbox, newPath, session); + + assertThat(listener.getEvents()) + .filteredOn(event -> event instanceof MessageMoveEvent) + .isEmpty();; + } + + @Test + void moveShouldFireMovedEventInTargetMailbox() throws Exception { + assumeTrue(mailboxManager.getSupportedMessageCapabilities().contains(MailboxManager.MessageCapabilities.UniqueID)); + + Optional<MailboxId> targetMailboxId = mailboxManager.createMailbox(newPath, session); + ComposedMessageId messageId = inboxManager.appendMessage(AppendCommand.builder().build(message), session); + + retrieveEventBus(mailboxManager).register(listener, new MailboxIdRegistrationKey(targetMailboxId.get())); + mailboxManager.moveMessages(MessageRange.all(), inbox, newPath, session); + + assertThat(listener.getEvents()) + .filteredOn(event -> event instanceof MessageMoveEvent) + .hasSize(1) + .extracting(event -> (MessageMoveEvent) event) + .element(0) + .satisfies(event -> assertThat(event.getMessageIds()).containsExactly(messageId.getMessageId())); + } + + @Test + void moveShouldFireMovedEventInOriginMailbox() throws Exception { + assumeTrue(mailboxManager.getSupportedMessageCapabilities().contains(MailboxManager.MessageCapabilities.UniqueID)); + + mailboxManager.createMailbox(newPath, session); + ComposedMessageId messageId = inboxManager.appendMessage(AppendCommand.builder().build(message), session); + + retrieveEventBus(mailboxManager).register(listener, new MailboxIdRegistrationKey(inboxId)); + mailboxManager.moveMessages(MessageRange.all(), inbox, newPath, session); + + assertThat(listener.getEvents()) + .filteredOn(event -> event instanceof MessageMoveEvent) + .hasSize(1) + .extracting(event -> (MessageMoveEvent) event) + .element(0) + .satisfies(event -> assertThat(event.getMessageIds()).containsExactly(messageId.getMessageId())); + } + + @Test void copyShouldNotFireExpungedEventInOriginMailbox() throws Exception { mailboxManager.createMailbox(newPath, session); inboxManager.appendMessage(AppendCommand.builder().build(message), session); http://git-wip-us.apache.org/repos/asf/james-project/blob/5a1d9d7b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java ---------------------------------------------------------------------- diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java index 1b4b20e..81fc691 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java @@ -739,6 +739,10 @@ public class StoreMessageManager implements org.apache.james.mailbox.MessageMana messageIds.add(message.getMessageId()); } + MessageMoves messageMoves = MessageMoves.builder() + .previousMailboxIds(getMailboxEntity().getMailboxId()) + .targetMailboxIds(to.getMailboxEntity().getMailboxId(), getMailboxEntity().getMailboxId()) + .build(); Flux.merge( eventBus.dispatch(EventFactory.added() .randomEventId() @@ -749,13 +753,10 @@ public class StoreMessageManager implements org.apache.james.mailbox.MessageMana new MailboxIdRegistrationKey(to.getMailboxEntity().getMailboxId())), eventBus.dispatch(EventFactory.moved() .session(session) - .messageMoves(MessageMoves.builder() - .previousMailboxIds(getMailboxEntity().getMailboxId()) - .targetMailboxIds(to.getMailboxEntity().getMailboxId(), getMailboxEntity().getMailboxId()) - .build()) + .messageMoves(messageMoves) .messageId(messageIds.build()) .build(), - new MailboxIdRegistrationKey(mailbox.getMailboxId()))) + messageMoves.impactedMailboxIds().map(MailboxIdRegistrationKey::new).collect(Guavate.toImmutableSet()))) .then().block(); return copiedUids; @@ -772,6 +773,10 @@ public class StoreMessageManager implements org.apache.james.mailbox.MessageMana messageIds.add(message.getMessageId()); } + MessageMoves messageMoves = MessageMoves.builder() + .previousMailboxIds(getMailboxEntity().getMailboxId()) + .targetMailboxIds(to.getMailboxEntity().getMailboxId()) + .build(); Flux.merge( eventBus.dispatch(EventFactory.added() .randomEventId() @@ -788,14 +793,11 @@ public class StoreMessageManager implements org.apache.james.mailbox.MessageMana .build(), new MailboxIdRegistrationKey(mailbox.getMailboxId())), eventBus.dispatch(EventFactory.moved() - .messageMoves(MessageMoves.builder() - .previousMailboxIds(getMailboxEntity().getMailboxId()) - .targetMailboxIds(to.getMailboxEntity().getMailboxId()) - .build()) + .messageMoves(messageMoves) .messageId(messageIds.build()) .session(session) .build(), - new MailboxIdRegistrationKey(mailbox.getMailboxId()))) + messageMoves.impactedMailboxIds().map(MailboxIdRegistrationKey::new).collect(Guavate.toImmutableSet()))) .then().block(); return moveUids; --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org