MAILBOX-374 RabbitMQ should support generic groups

This bug caused only one of the QuotaMailing listeners to be triggered


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/04e8f7bd
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/04e8f7bd
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/04e8f7bd

Branch: refs/heads/master
Commit: 04e8f7bd2ca6b8185a556aaa5f8679437f37324b
Parents: 8a42e9e
Author: Benoit Tellier <[email protected]>
Authored: Thu Jan 17 17:34:53 2019 +0700
Committer: Benoit Tellier <[email protected]>
Committed: Tue Jan 22 17:07:15 2019 +0700

----------------------------------------------------------------------
 .../org/apache/james/mailbox/events/GenericGroup.java |  5 +++++
 .../java/org/apache/james/mailbox/events/Group.java   |  4 ++++
 .../apache/james/mailbox/events/GroupContract.java    | 14 ++++++++++++++
 .../org/apache/james/mailbox/events/GroupTest.java    | 10 ++++++++++
 .../james/mailbox/events/GroupConsumerRetry.java      |  2 +-
 .../james/mailbox/events/GroupRegistration.java       | 13 ++-----------
 .../james/mailbox/events/RabbitMQEventBusTest.java    |  4 ++--
 7 files changed, 38 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/04e8f7bd/mailbox/api/src/main/java/org/apache/james/mailbox/events/GenericGroup.java
----------------------------------------------------------------------
diff --git 
a/mailbox/api/src/main/java/org/apache/james/mailbox/events/GenericGroup.java 
b/mailbox/api/src/main/java/org/apache/james/mailbox/events/GenericGroup.java
index ed36568..df14453 100644
--- 
a/mailbox/api/src/main/java/org/apache/james/mailbox/events/GenericGroup.java
+++ 
b/mailbox/api/src/main/java/org/apache/james/mailbox/events/GenericGroup.java
@@ -29,6 +29,11 @@ public class GenericGroup extends Group {
     }
 
     @Override
+    public String asString() {
+        return super.asString() + "-" + groupName;
+    }
+
+    @Override
     public final boolean equals(Object o) {
         if (o instanceof GenericGroup) {
             GenericGroup that = (GenericGroup) o;

http://git-wip-us.apache.org/repos/asf/james-project/blob/04e8f7bd/mailbox/api/src/main/java/org/apache/james/mailbox/events/Group.java
----------------------------------------------------------------------
diff --git 
a/mailbox/api/src/main/java/org/apache/james/mailbox/events/Group.java 
b/mailbox/api/src/main/java/org/apache/james/mailbox/events/Group.java
index 2da5cb4..9fb9d25 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/events/Group.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/events/Group.java
@@ -22,6 +22,10 @@ package org.apache.james.mailbox.events;
 import java.util.Objects;
 
 public class Group {
+    public String asString() {
+        return getClass().getName();
+    }
+
     @Override
     public boolean equals(Object o) {
         if (o == null) {

http://git-wip-us.apache.org/repos/asf/james-project/blob/04e8f7bd/mailbox/api/src/test/java/org/apache/james/mailbox/events/GroupContract.java
----------------------------------------------------------------------
diff --git 
a/mailbox/api/src/test/java/org/apache/james/mailbox/events/GroupContract.java 
b/mailbox/api/src/test/java/org/apache/james/mailbox/events/GroupContract.java
index c7f5009..aa500be 100644
--- 
a/mailbox/api/src/test/java/org/apache/james/mailbox/events/GroupContract.java
+++ 
b/mailbox/api/src/test/java/org/apache/james/mailbox/events/GroupContract.java
@@ -227,6 +227,20 @@ public interface GroupContract {
 
             verify(listener, timeout(ONE_SECOND).times(1)).event(any());
         }
+
+        @Test
+        default void allGroupListenersShouldBeExecutedWhenGenericGroups() 
throws Exception {
+            MailboxListener listener1 = newListener();
+            MailboxListener listener2 = newListener();
+
+            eventBus().register(listener1, new GenericGroup("a"));
+            eventBus().register(listener2, new GenericGroup("b"));
+
+            eventBus().dispatch(EVENT, NO_KEYS).block();
+
+            verify(listener1, timeout(ONE_SECOND).times(1)).event(any());
+            verify(listener2, timeout(ONE_SECOND).times(1)).event(any());
+        }
     }
 
     interface MultipleEventBusGroupContract extends 
EventBusContract.MultipleEventBusContract {

http://git-wip-us.apache.org/repos/asf/james-project/blob/04e8f7bd/mailbox/api/src/test/java/org/apache/james/mailbox/events/GroupTest.java
----------------------------------------------------------------------
diff --git 
a/mailbox/api/src/test/java/org/apache/james/mailbox/events/GroupTest.java 
b/mailbox/api/src/test/java/org/apache/james/mailbox/events/GroupTest.java
index 0acb141..6b5fb6b 100644
--- a/mailbox/api/src/test/java/org/apache/james/mailbox/events/GroupTest.java
+++ b/mailbox/api/src/test/java/org/apache/james/mailbox/events/GroupTest.java
@@ -65,4 +65,14 @@ class GroupTest {
             .withRedefinedSuperclass()
             .verify();
     }
+
+    @Test
+    void asStringShouldReturnFqdnByDefault() {
+        assertThat(new 
EventBusTestFixture.GroupA().asString()).isEqualTo("org.apache.james.mailbox.events.EventBusTestFixture$GroupA");
+    }
+
+    @Test
+    void asStringShouldReturnNameWhenGenericGroup() {
+        assertThat(new 
GenericGroup("abc").asString()).isEqualTo("org.apache.james.mailbox.events.GenericGroup-abc");
+    }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/james-project/blob/04e8f7bd/mailbox/event/event-rabbitmq/src/main/java/org/apache/james/mailbox/events/GroupConsumerRetry.java
----------------------------------------------------------------------
diff --git 
a/mailbox/event/event-rabbitmq/src/main/java/org/apache/james/mailbox/events/GroupConsumerRetry.java
 
b/mailbox/event/event-rabbitmq/src/main/java/org/apache/james/mailbox/events/GroupConsumerRetry.java
index 2b99c49..ce2c713 100644
--- 
a/mailbox/event/event-rabbitmq/src/main/java/org/apache/james/mailbox/events/GroupConsumerRetry.java
+++ 
b/mailbox/event/event-rabbitmq/src/main/java/org/apache/james/mailbox/events/GroupConsumerRetry.java
@@ -46,7 +46,7 @@ class GroupConsumerRetry {
     static class RetryExchangeName {
 
         static RetryExchangeName of(Group group) {
-            return new 
RetryExchangeName(GroupRegistration.groupName(group.getClass()));
+            return new RetryExchangeName(group.asString());
         }
 
         static final String MAILBOX_EVENT_RETRY_EXCHANGE_PREFIX = 
MAILBOX_EVENT + "-retryExchange-";

http://git-wip-us.apache.org/repos/asf/james-project/blob/04e8f7bd/mailbox/event/event-rabbitmq/src/main/java/org/apache/james/mailbox/events/GroupRegistration.java
----------------------------------------------------------------------
diff --git 
a/mailbox/event/event-rabbitmq/src/main/java/org/apache/james/mailbox/events/GroupRegistration.java
 
b/mailbox/event/event-rabbitmq/src/main/java/org/apache/james/mailbox/events/GroupRegistration.java
index 7e4fe6d..d7c4c91 100644
--- 
a/mailbox/event/event-rabbitmq/src/main/java/org/apache/james/mailbox/events/GroupRegistration.java
+++ 
b/mailbox/event/event-rabbitmq/src/main/java/org/apache/james/mailbox/events/GroupRegistration.java
@@ -36,7 +36,6 @@ import org.apache.james.mailbox.Event;
 import org.apache.james.mailbox.MailboxListener;
 
 import com.github.fge.lambdas.Throwing;
-import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Preconditions;
 import com.rabbitmq.client.Connection;
 
@@ -56,8 +55,6 @@ import reactor.rabbitmq.Sender;
 class GroupRegistration implements Registration {
 
     static class WorkQueueName {
-
-        @VisibleForTesting
         static WorkQueueName of(Group group) {
             return new WorkQueueName(group);
         }
@@ -65,27 +62,21 @@ class GroupRegistration implements Registration {
         static final String MAILBOX_EVENT_WORK_QUEUE_PREFIX = MAILBOX_EVENT + 
"-workQueue-";
 
         private final Group group;
-        private final String name;
 
         private WorkQueueName(Group group) {
             Preconditions.checkNotNull(group, "Group must be specified");
             this.group = group;
-            this.name = groupName(group.getClass());
         }
 
-        public Group getGroup() {
+        Group getGroup() {
             return group;
         }
 
         String asString() {
-            return MAILBOX_EVENT_WORK_QUEUE_PREFIX + name;
+            return MAILBOX_EVENT_WORK_QUEUE_PREFIX + group.asString();
         }
     }
 
-    static String groupName(Class<? extends Group> clazz) {
-        return clazz.getName();
-    }
-
     static final String RETRY_COUNT = "retry-count";
     static final int DEFAULT_RETRY_COUNT = 0;
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/04e8f7bd/mailbox/event/event-rabbitmq/src/test/java/org/apache/james/mailbox/events/RabbitMQEventBusTest.java
----------------------------------------------------------------------
diff --git 
a/mailbox/event/event-rabbitmq/src/test/java/org/apache/james/mailbox/events/RabbitMQEventBusTest.java
 
b/mailbox/event/event-rabbitmq/src/test/java/org/apache/james/mailbox/events/RabbitMQEventBusTest.java
index 0d55f30..8784493 100644
--- 
a/mailbox/event/event-rabbitmq/src/test/java/org/apache/james/mailbox/events/RabbitMQEventBusTest.java
+++ 
b/mailbox/event/event-rabbitmq/src/test/java/org/apache/james/mailbox/events/RabbitMQEventBusTest.java
@@ -118,8 +118,8 @@ class RabbitMQEventBusTest implements 
GroupContract.SingleEventBusGroupContract,
         eventBus2.stop();
         eventBus3.stop();
         ALL_GROUPS.stream()
-            .map(groupClass -> 
GroupRegistration.WorkQueueName.of(groupClass).asString())
-            .forEach(queueName -> 
sender.delete(QueueSpecification.queue(queueName)).block());
+            .map(GroupRegistration.WorkQueueName::of)
+            .forEach(queueName -> 
sender.delete(QueueSpecification.queue(queueName.asString())).block());
         
sender.delete(ExchangeSpecification.exchange(MAILBOX_EVENT_EXCHANGE_NAME)).block();
         sender.close();
     }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to