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 2019/01/17 06:50:36 UTC

[20/27] james-project git commit: JAMES-2641 Harden MailboxManagerTest for events and do some fix

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 <bt...@linagora.com>
Authored: Tue Jan 15 17:35:51 2019 +0700
Committer: Benoit Tellier <bt...@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-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org