summaryrefslogtreecommitdiff
path: root/java/broker/src/test
diff options
context:
space:
mode:
authorKeith Wall <kwall@apache.org>2011-12-14 12:20:18 +0000
committerKeith Wall <kwall@apache.org>2011-12-14 12:20:18 +0000
commit88fcfa2ffe60fafd2ffecf60cc603c466ef1eed6 (patch)
tree395633c3655b7ff04dccbdd128bb399bb7ac0df6 /java/broker/src/test
parentb8ccd7ac40b7aedc9a1c2cd03b10cc896cd45f7e (diff)
downloadqpid-python-88fcfa2ffe60fafd2ffecf60cc603c466ef1eed6.tar.gz
QPID-3680: Header exchange bindings not being created via JMX Management Console
Applied patch from Andrew MacBean <andymacbean@gmail.com> and myself. git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1214206 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'java/broker/src/test')
-rw-r--r--java/broker/src/test/java/org/apache/qpid/server/exchange/ExchangeMBeanTest.java116
1 files changed, 77 insertions, 39 deletions
diff --git a/java/broker/src/test/java/org/apache/qpid/server/exchange/ExchangeMBeanTest.java b/java/broker/src/test/java/org/apache/qpid/server/exchange/ExchangeMBeanTest.java
index 71e92b5294..68021f0b07 100644
--- a/java/broker/src/test/java/org/apache/qpid/server/exchange/ExchangeMBeanTest.java
+++ b/java/broker/src/test/java/org/apache/qpid/server/exchange/ExchangeMBeanTest.java
@@ -20,8 +20,7 @@
*/
package org.apache.qpid.server.exchange;
-import junit.framework.TestCase;
-
+import org.apache.commons.lang.ArrayUtils;
import org.apache.qpid.management.common.mbeans.ManagedExchange;
import org.apache.qpid.server.queue.QueueRegistry;
import org.apache.qpid.server.queue.AMQQueue;
@@ -34,9 +33,11 @@ import org.apache.qpid.server.virtualhost.VirtualHost;
import org.apache.qpid.exchange.ExchangeDefaults;
import org.apache.qpid.framing.AMQShortString;
+import javax.management.JMException;
+import javax.management.openmbean.CompositeDataSupport;
import javax.management.openmbean.TabularData;
import java.util.ArrayList;
-import java.util.Collections;
+import java.util.Iterator;
/**
* Unit test class for testing different Exchange MBean operations
@@ -47,10 +48,20 @@ public class ExchangeMBeanTest extends InternalBrokerBaseCase
private QueueRegistry _queueRegistry;
private VirtualHost _virtualHost;
- /**
- * Test for direct exchange mbean
- * @throws Exception
- */
+ public void testGeneralProperties() throws Exception
+ {
+ DirectExchange exchange = new DirectExchange();
+ exchange.initialise(_virtualHost, ExchangeDefaults.DIRECT_EXCHANGE_NAME, false, 0, true);
+ ManagedObject managedObj = exchange.getManagedObject();
+ ManagedExchange mbean = (ManagedExchange)managedObj;
+
+ // test general exchange properties
+ assertEquals("Unexpected exchange name", "amq.direct", mbean.getName());
+ assertEquals("Unexpected exchange type", "direct", mbean.getExchangeType());
+ assertEquals("Unexpected ticket number", Integer.valueOf(0), mbean.getTicketNo());
+ assertFalse("Unexpected durable flag", mbean.isDurable());
+ assertTrue("Unexpected auto delete flag", mbean.isAutoDelete());
+ }
public void testDirectExchangeMBean() throws Exception
{
@@ -65,20 +76,8 @@ public class ExchangeMBeanTest extends InternalBrokerBaseCase
TabularData data = mbean.bindings();
ArrayList<Object> list = new ArrayList<Object>(data.values());
assertTrue(list.size() == 2);
-
- // test general exchange properties
- assertEquals(mbean.getName(), "amq.direct");
- assertEquals(mbean.getExchangeType(), "direct");
- assertTrue(mbean.getTicketNo() == 0);
- assertTrue(!mbean.isDurable());
- assertTrue(mbean.isAutoDelete());
}
- /**
- * Test for "topic" exchange mbean
- * @throws Exception
- */
-
public void testTopicExchangeMBean() throws Exception
{
TopicExchange exchange = new TopicExchange();
@@ -92,42 +91,81 @@ public class ExchangeMBeanTest extends InternalBrokerBaseCase
TabularData data = mbean.bindings();
ArrayList<Object> list = new ArrayList<Object>(data.values());
assertTrue(list.size() == 2);
+ }
- // test general exchange properties
- assertEquals(mbean.getName(), "amq.topic");
- assertEquals(mbean.getExchangeType(), "topic");
- assertTrue(mbean.getTicketNo() == 0);
- assertTrue(!mbean.isDurable());
- assertTrue(mbean.isAutoDelete());
+ public void testHeadersExchangeMBean() throws Exception
+ {
+ HeadersExchange exchange = new HeadersExchange();
+ exchange.initialise(_virtualHost,ExchangeDefaults.HEADERS_EXCHANGE_NAME, false, 0, true);
+ ManagedObject managedObj = exchange.getManagedObject();
+ ManagedExchange mbean = (ManagedExchange)managedObj;
+
+ mbean.createNewBinding(_queue.getNameShortString().toString(), "x-match=any,key1=binding1,key2=binding2");
+
+ TabularData data = mbean.bindings();
+ ArrayList<Object> list = new ArrayList<Object>(data.values());
+ assertEquals("Unexpected number of bindings", 1, list.size());
+
+ final Iterator<CompositeDataSupport> rowItr = (Iterator<CompositeDataSupport>) data.values().iterator();
+ CompositeDataSupport row = rowItr.next();
+ assertBinding(1, _queue.getName(), new String[]{"x-match=any","key1=binding1","key2=binding2"}, row);
}
/**
- * Test for "Headers" exchange mbean
- * @throws Exception
+ * Included to ensure 0-10 Specification compliance:
+ * 2.3.1.4 "the field in the bind arguments has no value and a field of the same name is present in the message headers
*/
-
- public void testHeadersExchangeMBean() throws Exception
+ public void testHeadersExchangeMBeanMatchPropertyNoValue() throws Exception
{
HeadersExchange exchange = new HeadersExchange();
exchange.initialise(_virtualHost,ExchangeDefaults.HEADERS_EXCHANGE_NAME, false, 0, true);
ManagedObject managedObj = exchange.getManagedObject();
ManagedExchange mbean = (ManagedExchange)managedObj;
- mbean.createNewBinding(_queue.getNameShortString().toString(), "key1=binding1,key2=binding2");
- mbean.createNewBinding(_queue.getNameShortString().toString(), "key3=binding3");
+ mbean.createNewBinding(_queue.getNameShortString().toString(), "x-match=any,key4,key5=");
TabularData data = mbean.bindings();
ArrayList<Object> list = new ArrayList<Object>(data.values());
- assertTrue(list.size() == 2);
+ assertEquals("Unexpected number of bindings", 1, list.size());
- // test general exchange properties
- assertEquals(mbean.getName(), "amq.match");
- assertEquals(mbean.getExchangeType(), "headers");
- assertTrue(mbean.getTicketNo() == 0);
- assertTrue(!mbean.isDurable());
- assertTrue(mbean.isAutoDelete());
+ final Iterator<CompositeDataSupport> rowItr = (Iterator<CompositeDataSupport>) data.values().iterator();
+ CompositeDataSupport row = rowItr.next();
+ assertBinding(1, _queue.getName(), new String[]{"x-match=any","key4=","key5="}, row);
}
-
+
+ public void testInvalidHeaderBindingMalformed() throws Exception
+ {
+ HeadersExchange exchange = new HeadersExchange();
+ exchange.initialise(_virtualHost,ExchangeDefaults.HEADERS_EXCHANGE_NAME, false, 0, true);
+ ManagedObject managedObj = exchange.getManagedObject();
+ ManagedExchange mbean = (ManagedExchange)managedObj;
+
+ try
+ {
+ mbean.createNewBinding(_queue.getNameShortString().toString(), "x-match=any,=value4");
+ fail("Exception not thrown");
+ }
+ catch (JMException jme)
+ {
+ //pass
+ }
+ }
+
+ private void assertBinding(final int expectedBindingNo, final String expectedQueueName, final String[] expectedBindingArray,
+ final CompositeDataSupport row)
+ {
+ final Number bindingNumber = (Number) row.get(ManagedExchange.HDR_BINDING_NUMBER);
+ final String queueName = (String) row.get(ManagedExchange.HDR_QUEUE_NAME);
+ final String[] bindings = (String[]) row.get(ManagedExchange.HDR_QUEUE_BINDINGS);
+ assertEquals("Unexpected binding number", expectedBindingNo, bindingNumber);
+ assertEquals("Unexpected queue name", expectedQueueName, queueName);
+ assertEquals("Unexpected no of bindings", expectedBindingArray.length, bindings.length);
+ for(String binding : bindings)
+ {
+ assertTrue("Expected binding not found: " + binding, ArrayUtils.contains(expectedBindingArray, binding));
+ }
+ }
+
/**
* Test adding bindings and removing them from the default exchange via JMX.
* <p>