From 87a1e638f422f7242ec536077ccf410f85ecbe2d Mon Sep 17 00:00:00 2001 From: Martyn Taylor Date: Fri, 24 Mar 2017 16:05:18 +0000 Subject: [PATCH] ARTEMIS-1068 Add Routing Exclusivity test for JMS AMQP --- .../tests/integration/amqp/ProtonTest.java | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/amqp/ProtonTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/amqp/ProtonTest.java index 1308c37b3bc..53b17f8dfac 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/amqp/ProtonTest.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/amqp/ProtonTest.java @@ -30,6 +30,7 @@ import javax.jms.MessageProducer; import javax.jms.ObjectMessage; import javax.jms.QueueBrowser; +import javax.jms.QueueReceiver; import javax.jms.ResourceAllocationException; import javax.jms.Session; import javax.jms.StreamMessage; @@ -65,6 +66,7 @@ import org.apache.activemq.artemis.core.remoting.impl.netty.NettyConnector; import org.apache.activemq.artemis.core.remoting.impl.netty.TransportConstants; import org.apache.activemq.artemis.core.server.ActiveMQServer; +import org.apache.activemq.artemis.core.server.MessageReference; import org.apache.activemq.artemis.core.server.Queue; import org.apache.activemq.artemis.core.server.impl.AddressInfo; import org.apache.activemq.artemis.core.settings.impl.AddressFullMessagePolicy; @@ -79,6 +81,7 @@ import org.apache.activemq.artemis.tests.util.Wait; import org.apache.activemq.artemis.utils.ByteUtil; import org.apache.activemq.artemis.utils.TimeUtils; +import org.apache.activemq.artemis.utils.UUIDGenerator; import org.apache.activemq.artemis.utils.VersionLoader; import org.apache.activemq.transport.amqp.client.AmqpClient; import org.apache.activemq.transport.amqp.client.AmqpConnection; @@ -1855,6 +1858,51 @@ public int getCount() { } } + /** + * If we have an address configured with both ANYCAST and MULTICAST routing types enabled, we must ensure that any + * messages sent specifically to MULTICAST (e.g. JMS TopicProducer) are only delivered to MULTICAST queues (e.g. + * i.e. subscription queues) and **NOT** to ANYCAST queues (e.g. JMS Queue). + * + * @throws Exception + */ + @Test + public void testRoutingExclusivity() throws Exception { + + // Create Address with both ANYCAST and MULTICAST enabled + String testAddress = "testRoutingExclusivity"; + SimpleString ssTestAddress = new SimpleString(testAddress); + + AddressInfo addressInfo = new AddressInfo(ssTestAddress); + addressInfo.addRoutingType(RoutingType.MULTICAST); + addressInfo.addRoutingType(RoutingType.ANYCAST); + + server.addAddressInfo(addressInfo); + server.createQueue(ssTestAddress, RoutingType.ANYCAST, ssTestAddress, null, true, false); + + Connection connection = createConnection(UUIDGenerator.getInstance().generateStringUUID()); + + try { + + Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); + + Topic topic = session.createTopic(testAddress); + javax.jms.Queue queue = session.createQueue(testAddress); + + MessageProducer producer = session.createProducer(topic); + + MessageConsumer queueConsumer = session.createConsumer(queue); + MessageConsumer topicConsumer = session.createConsumer(topic); + + producer.send(session.createTextMessage("testMessage")); + + assertNotNull(topicConsumer.receive(1000)); + assertNull(queueConsumer.receive(1000)); + } + finally { + connection.close(); + } + } + @Test public void testReleaseDisposition() throws Exception { AmqpClient client = new AmqpClient(new URI(tcpAmqpConnectionUri), userName, password);