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

Reply via email to