You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by an...@apache.org on 2017/09/08 11:45:28 UTC

[3/3] activemq-artemis git commit: ARTEMIS-1392 Fix NPE when FQQN queue does not exist during multicast subscribe

ARTEMIS-1392 Fix NPE when FQQN queue does not exist during multicast subscribe


Project: http://git-wip-us.apache.org/repos/asf/activemq-artemis/repo
Commit: http://git-wip-us.apache.org/repos/asf/activemq-artemis/commit/32ac370e
Tree: http://git-wip-us.apache.org/repos/asf/activemq-artemis/tree/32ac370e
Diff: http://git-wip-us.apache.org/repos/asf/activemq-artemis/diff/32ac370e

Branch: refs/heads/master
Commit: 32ac370edce4b5232c8d0e3aa7c9df2fd8795766
Parents: d414a19
Author: Martyn Taylor <mt...@redhat.com>
Authored: Wed Sep 6 13:01:42 2017 +0100
Committer: Andy Taylor <an...@gmail.com>
Committed: Fri Sep 8 12:41:36 2017 +0100

----------------------------------------------------------------------
 .../amqp/proton/ProtonServerSenderContext.java  | 12 +++++-----
 .../amqp/AmqpFullyQualifiedNameTest.java        | 23 +++++++++++++++++++-
 2 files changed, 29 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/32ac370e/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/proton/ProtonServerSenderContext.java
----------------------------------------------------------------------
diff --git a/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/proton/ProtonServerSenderContext.java b/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/proton/ProtonServerSenderContext.java
index 50d2ef4..d2a097c 100644
--- a/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/proton/ProtonServerSenderContext.java
+++ b/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/proton/ProtonServerSenderContext.java
@@ -22,6 +22,8 @@ import java.util.Objects;
 import java.util.Set;
 import java.util.concurrent.TimeUnit;
 
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.PooledByteBufAllocator;
 import org.apache.activemq.artemis.api.core.ActiveMQExceptionType;
 import org.apache.activemq.artemis.api.core.ActiveMQQueueExistsException;
 import org.apache.activemq.artemis.api.core.ActiveMQSecurityException;
@@ -73,9 +75,6 @@ import org.apache.qpid.proton.engine.Link;
 import org.apache.qpid.proton.engine.Sender;
 import org.jboss.logging.Logger;
 
-import io.netty.buffer.ByteBuf;
-import io.netty.buffer.PooledByteBufAllocator;
-
 /**
  * TODO: Merge {@link ProtonServerSenderContext} and {@link org.apache.activemq.artemis.protocol.amqp.client.ProtonClientSenderContext} once we support 'global' link names. The split is a workaround for outgoing links
  */
@@ -334,8 +333,11 @@ public class ProtonServerSenderContext extends ProtonInitializable implements Pr
             }
 
             if (queueNameToUse != null) {
-               SimpleString matchingAnycastQueue = sessionSPI.getMatchingQueue(addressToUse, queueNameToUse, RoutingType.MULTICAST);
-               queue = matchingAnycastQueue.toString();
+               SimpleString matchingQueue = sessionSPI.getMatchingQueue(addressToUse, queueNameToUse, RoutingType.MULTICAST);
+               if (matchingQueue == null) {
+                  throw new ActiveMQAMQPNotFoundException("Queue: '" + queueNameToUse + "' does not exist");
+               }
+               queue = matchingQueue.toString();
             }
             //if the address specifies a broker configured queue then we always use this, treat it as a queue
             if (queue != null) {

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/32ac370e/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/amqp/AmqpFullyQualifiedNameTest.java
----------------------------------------------------------------------
diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/amqp/AmqpFullyQualifiedNameTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/amqp/AmqpFullyQualifiedNameTest.java
index 65b0f7f..eaca868 100644
--- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/amqp/AmqpFullyQualifiedNameTest.java
+++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/amqp/AmqpFullyQualifiedNameTest.java
@@ -68,6 +68,27 @@ public class AmqpFullyQualifiedNameTest extends JMSClientTestSupport {
       server.getConfiguration().addAcceptorConfiguration(new TransportConfiguration(NETTY_ACCEPTOR_FACTORY, new HashMap<String, Object>(), "netty", new HashMap<String, Object>()));
    }
 
+   @Test
+   public void testFQQNTopicWhenQueueDoesNotExist() throws Exception {
+      Exception e = null;
+      String queueName = "testQueue";
+
+      Connection connection = createConnection(false);
+      try {
+         connection.setClientID("FQQNconn");
+         connection.start();
+         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+         Topic topic = session.createTopic(multicastAddress.toString() + "::" + queueName);
+         session.createConsumer(topic);
+      } catch (InvalidDestinationException ide) {
+         e = ide;
+      } finally {
+         connection.close();
+      }
+      assertNotNull(e);
+      assertTrue(e.getMessage().contains("Queue: '" + queueName + "' does not exist"));
+   }
+
    @Test(timeout = 60000)
    //there isn't much use of FQQN for topics
    //however we can test query functionality
@@ -78,7 +99,7 @@ public class AmqpFullyQualifiedNameTest extends JMSClientTestSupport {
          connection.setClientID("FQQNconn");
          connection.start();
          Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-         Topic topic = session.createTopic(multicastAddress.toString());
+         Topic topic = session.createTopic(multicastAddress.toString() + "::someaddress");
 
          MessageConsumer consumer1 = session.createConsumer(topic);
          MessageConsumer consumer2 = session.createConsumer(topic);