Return-Path: X-Original-To: apmail-activemq-commits-archive@www.apache.org Delivered-To: apmail-activemq-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 8963C18710 for ; Wed, 29 Jul 2015 11:49:58 +0000 (UTC) Received: (qmail 84329 invoked by uid 500); 29 Jul 2015 11:49:55 -0000 Delivered-To: apmail-activemq-commits-archive@activemq.apache.org Received: (qmail 84288 invoked by uid 500); 29 Jul 2015 11:49:55 -0000 Mailing-List: contact commits-help@activemq.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@activemq.apache.org Delivered-To: mailing list commits@activemq.apache.org Received: (qmail 84278 invoked by uid 99); 29 Jul 2015 11:49:55 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 29 Jul 2015 11:49:55 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 20A33DFA0A; Wed, 29 Jul 2015 11:49:55 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: gtully@apache.org To: commits@activemq.apache.org Message-Id: X-Mailer: ASF-Git Admin Mailer Subject: activemq git commit: AMQ-5895 - apply patch with thanks to Anders Aaberg Date: Wed, 29 Jul 2015 11:49:55 +0000 (UTC) Repository: activemq Updated Branches: refs/heads/master 5684d093c -> 4a603a993 AMQ-5895 - apply patch with thanks to Anders Aaberg Project: http://git-wip-us.apache.org/repos/asf/activemq/repo Commit: http://git-wip-us.apache.org/repos/asf/activemq/commit/4a603a99 Tree: http://git-wip-us.apache.org/repos/asf/activemq/tree/4a603a99 Diff: http://git-wip-us.apache.org/repos/asf/activemq/diff/4a603a99 Branch: refs/heads/master Commit: 4a603a9936b1880eba501d7f0e6fff812ae29d2f Parents: 5684d09 Author: gtully Authored: Wed Jul 29 12:49:29 2015 +0100 Committer: gtully Committed: Wed Jul 29 12:49:29 2015 +0100 ---------------------------------------------------------------------- .../org/apache/activemq/plugin/JAXBUtils.java | 5 ++ .../org/apache/activemq/VirtualDestTest.java | 89 +++++++++++++++++--- ...irtualDestTest-add-filtered-composite-vd.xml | 35 ++++++++ ...irtualDestTest-mod-filtered-composite-vd.xml | 35 ++++++++ 4 files changed, 151 insertions(+), 13 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/activemq/blob/4a603a99/activemq-runtime-config/src/main/java/org/apache/activemq/plugin/JAXBUtils.java ---------------------------------------------------------------------- diff --git a/activemq-runtime-config/src/main/java/org/apache/activemq/plugin/JAXBUtils.java b/activemq-runtime-config/src/main/java/org/apache/activemq/plugin/JAXBUtils.java index 2d0d54d..9139b79 100644 --- a/activemq-runtime-config/src/main/java/org/apache/activemq/plugin/JAXBUtils.java +++ b/activemq-runtime-config/src/main/java/org/apache/activemq/plugin/JAXBUtils.java @@ -17,14 +17,17 @@ package org.apache.activemq.plugin; import javax.xml.bind.JAXBElement; + import java.lang.reflect.Method; import java.util.HashSet; import java.util.LinkedList; import java.util.List; import java.util.Set; +import org.apache.activemq.broker.region.virtual.FilteredDestination; import org.apache.activemq.command.ActiveMQQueue; import org.apache.activemq.command.ActiveMQTopic; +import org.apache.activemq.schema.core.DtoFilteredDestination; import org.apache.activemq.schema.core.DtoTopic; import org.apache.activemq.schema.core.DtoQueue; import org.apache.activemq.schema.core.DtoAuthenticationUser; @@ -49,6 +52,8 @@ public class JAXBUtils { return new ActiveMQQueue(); } else if (DtoAuthenticationUser.class.isAssignableFrom(elementContent.getClass())) { return new AuthenticationUser(); + } else if (DtoFilteredDestination.class.isAssignableFrom(elementContent.getClass())) { + return new FilteredDestination(); } else { return new Object(); } http://git-wip-us.apache.org/repos/asf/activemq/blob/4a603a99/activemq-runtime-config/src/test/java/org/apache/activemq/VirtualDestTest.java ---------------------------------------------------------------------- diff --git a/activemq-runtime-config/src/test/java/org/apache/activemq/VirtualDestTest.java b/activemq-runtime-config/src/test/java/org/apache/activemq/VirtualDestTest.java index 94a1046..0113e81 100644 --- a/activemq-runtime-config/src/test/java/org/apache/activemq/VirtualDestTest.java +++ b/activemq-runtime-config/src/test/java/org/apache/activemq/VirtualDestTest.java @@ -16,6 +16,8 @@ */ package org.apache.activemq; +import java.util.Collections; +import java.util.Map; import java.util.concurrent.TimeUnit; import javax.jms.Message; import javax.jms.MessageProducer; @@ -233,7 +235,32 @@ public class VirtualDestTest extends RuntimeConfigTestSupport { assertEquals("still one interceptor", 1, brokerService.getDestinationInterceptors().length); } + + @Test + public void testNewFilteredComposite() throws Exception { + final String brokerConfig = configurationSeed + "-new-filtered-composite-vd-broker"; + applyNewConfig(brokerConfig, RuntimeConfigTestSupport.EMPTY_UPDATABLE_CONFIG); + startBroker(brokerConfig); + assertTrue("broker alive", brokerService.isStarted()); + + applyNewConfig(brokerConfig, configurationSeed + "-add-filtered-composite-vd", SLEEP); + + exerciseFilteredCompositeQueue("VirtualDestination.FilteredCompositeQueue", "VirtualDestination.QueueConsumer", "yes"); + } + + @Test + public void testModFilteredComposite() throws Exception { + final String brokerConfig = configurationSeed + "-mod-filtered-composite-vd-broker"; + applyNewConfig(brokerConfig, configurationSeed + "-add-filtered-composite-vd"); + startBroker(brokerConfig); + assertTrue("broker alive", brokerService.isStarted()); + exerciseFilteredCompositeQueue("VirtualDestination.FilteredCompositeQueue", "VirtualDestination.QueueConsumer", "yes"); + applyNewConfig(brokerConfig, configurationSeed + "-mod-filtered-composite-vd", SLEEP); + exerciseFilteredCompositeQueue("VirtualDestination.FilteredCompositeQueue", "VirtualDestination.QueueConsumer", "no"); + exerciseFilteredCompositeQueue("VirtualDestination.FilteredCompositeQueue", "VirtualDestination.QueueConsumer", "no"); + } + private void forceAddDestination(String dest) throws Exception { ActiveMQConnection connection = new ActiveMQConnectionFactory("vm://localhost").createActiveMQConnection(); connection.start(); @@ -255,13 +282,7 @@ public class VirtualDestTest extends RuntimeConfigTestSupport { LOG.info("new consumer for: " + consumer.getDestination()); MessageProducer producer = session.createProducer(session.createTopic(topic)); final String body = "To vt:" + topic; - producer.send(session.createTextMessage(body)); - LOG.info("sent to: " + producer.getDestination()); - - Message message = null; - for (int i=0; i<10 && message == null; i++) { - message = consumer.receive(1000); - } + Message message = sendAndReceiveMessage(session, consumer, producer, body); assertNotNull("got message", message); assertEquals("got expected message", body, ((TextMessage) message).getText()); connection.close(); @@ -276,16 +297,58 @@ public class VirtualDestTest extends RuntimeConfigTestSupport { LOG.info("new consumer for: " + consumer.getDestination()); MessageProducer producer = session.createProducer(session.createQueue(dest)); final String body = "To cq:" + dest; - producer.send(session.createTextMessage(body)); + Message message = sendAndReceiveMessage(session, consumer, producer, body); + assertNotNull("got message", message); + assertEquals("got expected message", body, ((TextMessage) message).getText()); + connection.close(); + } + + private void exerciseFilteredCompositeQueue(String dest, String consumerDestination, String acceptedHeaderValue) throws Exception { + ActiveMQConnection connection = new ActiveMQConnectionFactory("vm://localhost").createActiveMQConnection(); + connection.start(); + Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); + + ActiveMQMessageConsumer consumer = (ActiveMQMessageConsumer) session.createConsumer(session.createQueue(consumerDestination)); + LOG.info("new consumer for: " + consumer.getDestination()); + MessageProducer producer = session.createProducer(session.createQueue(dest)); + + // positive test + String body = "To filtered cq:" + dest; + + Message message = sendAndReceiveMessage(session, consumer, producer, body, Collections.singletonMap("odd", acceptedHeaderValue)); + assertNotNull("The message did not reach the destination even though it should pass through the filter.", message); + assertEquals("Did not get expected message", body, ((TextMessage) message).getText()); + + // negative test + message = sendAndReceiveMessage(session, consumer, producer, "Not to filtered cq:" + dest, Collections.singletonMap("odd", "somethingElse")); + assertNull("The message reached the destination, but it should have been removed by the filter.", message); + + connection.close(); + } + + private Message sendAndReceiveMessage(Session session, + ActiveMQMessageConsumer consumer, MessageProducer producer, + final String messageBody) throws Exception { + return sendAndReceiveMessage(session, consumer, producer, messageBody, null); + } + + private Message sendAndReceiveMessage(Session session, + ActiveMQMessageConsumer consumer, MessageProducer producer, + final String messageBody, Map propertiesMap) + throws Exception { + TextMessage messageToSend = session.createTextMessage(messageBody); + if (propertiesMap != null) { + for (String headerKey : propertiesMap.keySet()) { + messageToSend.setStringProperty(headerKey, propertiesMap.get(headerKey)); + } + } + producer.send(messageToSend); LOG.info("sent to: " + producer.getDestination()); Message message = null; - for (int i=0; i<10 && message == null; i++) { + for (int i = 0; i < 10 && message == null; i++) { message = consumer.receive(1000); } - assertNotNull("got message", message); - assertEquals("got expected message", body, ((TextMessage) message).getText()); - connection.close(); + return message; } - } http://git-wip-us.apache.org/repos/asf/activemq/blob/4a603a99/activemq-runtime-config/src/test/resources/org/apache/activemq/virtualDestTest-add-filtered-composite-vd.xml ---------------------------------------------------------------------- diff --git a/activemq-runtime-config/src/test/resources/org/apache/activemq/virtualDestTest-add-filtered-composite-vd.xml b/activemq-runtime-config/src/test/resources/org/apache/activemq/virtualDestTest-add-filtered-composite-vd.xml new file mode 100644 index 0000000..ed56245 --- /dev/null +++ b/activemq-runtime-config/src/test/resources/org/apache/activemq/virtualDestTest-add-filtered-composite-vd.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + http://git-wip-us.apache.org/repos/asf/activemq/blob/4a603a99/activemq-runtime-config/src/test/resources/org/apache/activemq/virtualDestTest-mod-filtered-composite-vd.xml ---------------------------------------------------------------------- diff --git a/activemq-runtime-config/src/test/resources/org/apache/activemq/virtualDestTest-mod-filtered-composite-vd.xml b/activemq-runtime-config/src/test/resources/org/apache/activemq/virtualDestTest-mod-filtered-composite-vd.xml new file mode 100644 index 0000000..8d9a2a5 --- /dev/null +++ b/activemq-runtime-config/src/test/resources/org/apache/activemq/virtualDestTest-mod-filtered-composite-vd.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + \ No newline at end of file