This is an automated email from the ASF dual-hosted git repository.

clebertsuconic pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/activemq-artemis.git


The following commit(s) were added to refs/heads/master by this push:
     new 9413925  ARTEMIS-2473 RemoteQueueBindingImpl should check for empty 
filters
     new 85170ac  This closes #2825
9413925 is described below

commit 94139259579f4c7cd3747d70f34ac73ccdb76653
Author: Francesco Nigro <nigro....@gmail.com>
AuthorDate: Fri Sep 6 16:55:25 2019 +0200

    ARTEMIS-2473 RemoteQueueBindingImpl should check for empty filters
---
 .../cluster/impl/RemoteQueueBindingImpl.java       |  5 +-
 .../cluster/impl/RemoteQueueBindImplTest.java      | 53 ++++++++++++++--------
 2 files changed, 38 insertions(+), 20 deletions(-)

diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/cluster/impl/RemoteQueueBindingImpl.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/cluster/impl/RemoteQueueBindingImpl.java
index f7ea2cc..75d656b 100644
--- 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/cluster/impl/RemoteQueueBindingImpl.java
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/cluster/impl/RemoteQueueBindingImpl.java
@@ -162,6 +162,7 @@ public class RemoteQueueBindingImpl implements 
RemoteQueueBinding {
          return true;
       } else {
          for (Filter filter : filters) {
+            assert filter != null : "filters contains a null filter";
             if (filter.match(message)) {
                return true;
             }
@@ -203,7 +204,7 @@ public class RemoteQueueBindingImpl implements 
RemoteQueueBinding {
 
    @Override
    public synchronized void addConsumer(final SimpleString filterString) 
throws Exception {
-      if (filterString != null) {
+      if (filterString != null && !filterString.isEmpty()) {
          // There can actually be many consumers on the same queue with the 
same filter, so we need to maintain a ref
          // count
 
@@ -223,7 +224,7 @@ public class RemoteQueueBindingImpl implements 
RemoteQueueBinding {
 
    @Override
    public synchronized void removeConsumer(final SimpleString filterString) 
throws Exception {
-      if (filterString != null) {
+      if (filterString != null && !filterString.isEmpty()) {
          Integer i = filterCounts.get(filterString);
 
          if (i != null) {
diff --git 
a/tests/unit-tests/src/test/java/org/apache/activemq/artemis/tests/unit/core/server/cluster/impl/RemoteQueueBindImplTest.java
 
b/tests/unit-tests/src/test/java/org/apache/activemq/artemis/tests/unit/core/server/cluster/impl/RemoteQueueBindImplTest.java
index 77a8ee5..1aee0fe 100644
--- 
a/tests/unit-tests/src/test/java/org/apache/activemq/artemis/tests/unit/core/server/cluster/impl/RemoteQueueBindImplTest.java
+++ 
b/tests/unit-tests/src/test/java/org/apache/activemq/artemis/tests/unit/core/server/cluster/impl/RemoteQueueBindImplTest.java
@@ -16,6 +16,10 @@
  */
 package org.apache.activemq.artemis.tests.unit.core.server.cluster.impl;
 
+import java.util.ArrayList;
+import java.util.List;
+import java.util.function.IntFunction;
+
 import org.apache.activemq.artemis.api.core.SimpleString;
 import org.apache.activemq.artemis.core.server.Queue;
 import 
org.apache.activemq.artemis.core.server.cluster.impl.MessageLoadBalancingType;
@@ -27,19 +31,9 @@ import org.junit.Test;
 
 public class RemoteQueueBindImplTest extends ActiveMQTestBase {
 
-   // Constants -----------------------------------------------------
-
-   // Attributes ----------------------------------------------------
-
-   // Static --------------------------------------------------------
-
-   // Constructors --------------------------------------------------
-
-   // Public --------------------------------------------------------
-
-   @Test
-   public void testAddRemoveConsumer() throws Exception {
-
+   private void testAddRemoveConsumerWithFilter(IntFunction<SimpleString> 
filterFactory,
+                                                int size,
+                                                int expectedSize) throws 
Exception {
       final long id = RandomUtil.randomLong();
       final SimpleString address = RandomUtil.randomSimpleString();
       final SimpleString uniqueName = RandomUtil.randomSimpleString();
@@ -51,17 +45,40 @@ public class RemoteQueueBindImplTest extends 
ActiveMQTestBase {
       final int distance = 0;
       RemoteQueueBindingImpl binding = new RemoteQueueBindingImpl(id, address, 
uniqueName, routingName, remoteQueueID, filterString, storeAndForwardQueue, 
bridgeName, distance, MessageLoadBalancingType.ON_DEMAND);
 
-      for (int i = 0; i < 100; i++) {
-         binding.addConsumer(new SimpleString("B" + i + "<A"));
+      final List<SimpleString> filters = new ArrayList<>(size);
+      for (int i = 0; i < size; i++) {
+         final SimpleString filter = filterFactory.apply(i);
+         filters.add(filter);
+         binding.addConsumer(filter);
       }
 
-      assertEquals(100, binding.getFilters().size());
+      assertEquals(expectedSize, binding.getFilters().size());
 
-      for (int i = 0; i < 100; i++) {
-         binding.removeConsumer(new SimpleString("B" + i + "<A"));
+      for (int i = 0; i < size; i++) {
+         binding.removeConsumer(filters.get(i));
       }
 
       assertEquals(0, binding.getFilters().size());
+   }
+
+   @Test
+   public void testAddRemoveConsumer() throws Exception {
+      testAddRemoveConsumerWithFilter(i -> new SimpleString("B" + i + "<A"), 
100, 100);
+   }
 
+   @Test
+   public void testAddRemoveConsumerUsingSameFilter() throws Exception {
+      testAddRemoveConsumerWithFilter(i -> new SimpleString("B" + 0 + "<A"), 
100, 1);
    }
+
+   @Test
+   public void testAddRemoveConsumerUsingEmptyFilters() throws Exception {
+      testAddRemoveConsumerWithFilter(i -> new SimpleString(""), 1, 0);
+   }
+
+   @Test
+   public void testAddRemoveConsumerUsingNullFilters() throws Exception {
+      testAddRemoveConsumerWithFilter(i -> null, 1, 0);
+   }
+
 }

Reply via email to