From fbc287bd02a6bb91b709b798abfb859d8223fc43 Mon Sep 17 00:00:00 2001 From: Robert Godfrey Date: Tue, 23 Sep 2014 13:00:05 +0000 Subject: QPID-3678 : [Java Client] Add support for setting link capacity to zero in ADDR addresses git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1626995 13f79535-47bb-0310-9956-ffa450edef68 --- .../qpid/client/BasicMessageConsumer_0_10.java | 75 +++++++++++++++++++++- .../client/messaging/address/AddressHelper.java | 21 +++--- .../apache/qpid/client/messaging/address/Link.java | 4 +- .../destination/AddressBasedDestinationTest.java | 39 +++++++++++ qpid/java/test-profiles/JavaPre010Excludes | 2 + 5 files changed, 124 insertions(+), 17 deletions(-) (limited to 'qpid/java') diff --git a/qpid/java/client/src/main/java/org/apache/qpid/client/BasicMessageConsumer_0_10.java b/qpid/java/client/src/main/java/org/apache/qpid/client/BasicMessageConsumer_0_10.java index 8f91a7db08..e0d8ac3702 100644 --- a/qpid/java/client/src/main/java/org/apache/qpid/client/BasicMessageConsumer_0_10.java +++ b/qpid/java/client/src/main/java/org/apache/qpid/client/BasicMessageConsumer_0_10.java @@ -389,7 +389,7 @@ public class BasicMessageConsumer_0_10 extends BasicMessageConsumer 0) + if (destination.getLink() != null && destination.getLink().getConsumerCapacity() >= 0) { capacity = destination.getLink().getConsumerCapacity(); } @@ -547,4 +547,75 @@ public class BasicMessageConsumer_0_10 extends BasicMessageConsumer _bindings = Collections.emptyList(); diff --git a/qpid/java/systests/src/test/java/org/apache/qpid/test/client/destination/AddressBasedDestinationTest.java b/qpid/java/systests/src/test/java/org/apache/qpid/test/client/destination/AddressBasedDestinationTest.java index 1161e8dd59..0458313a4c 100644 --- a/qpid/java/systests/src/test/java/org/apache/qpid/test/client/destination/AddressBasedDestinationTest.java +++ b/qpid/java/systests/src/test/java/org/apache/qpid/test/client/destination/AddressBasedDestinationTest.java @@ -454,6 +454,45 @@ public class AddressBasedDestinationTest extends QpidBrokerTestCase checkQueueForBindings(jmsSession,dest2,headersBinding); } + public void testZeroCapacityForSynchronousReceive() throws Exception + { + Session session1 = _connection.createSession(false, Session.AUTO_ACKNOWLEDGE); + Session session2 = _connection.createSession(false, Session.AUTO_ACKNOWLEDGE); + String addressString = "ADDR:my-queue; {create: always, link:{capacity: 0}}"; + Queue session1queue = session1.createQueue(addressString); + Queue session2queue = session1.createQueue(addressString); + MessageConsumer consumer1 = session1.createConsumer(session1queue); + MessageConsumer consumer1withSelector = session1.createConsumer(session1queue, "key1 = 1"); + MessageConsumer consumer2withSelector = session2.createConsumer(session2queue, "key2 = 2"); + + _connection.start(); + + MessageProducer producer = session1.createProducer(session1queue); + + Message m = session1.createMessage(); + m.setIntProperty("key1", 1); + m.setIntProperty("key2", 2); + producer.send(m); + + m = session1.createMessage(); + m.setIntProperty("key1", 1); + producer.send(m); + + m = session1.createMessage(); + producer.send(m); + + m = session1.createMessage(); + m.setIntProperty("key2", 2); + producer.send(m); + + assertNotNull("First message from queue should be received",consumer1withSelector.receive(1000l)); + assertNotNull("Last message on queue should be received", consumer2withSelector.receive(1000l)); + assertNotNull("Second message from queue should be received", consumer1.receive(1000l)); + assertNull("Only message remaining shouldn't match selector",consumer1withSelector.receive(500l)); + assertNotNull("Should have been one message remaining on queue",consumer1.receive(1000l)); + assertNull("No messages should be remaining on queue",consumer1.receive(500l)); + } + /** * Test goal: Verifies the capacity property in address string is handled properly. * Test strategy: diff --git a/qpid/java/test-profiles/JavaPre010Excludes b/qpid/java/test-profiles/JavaPre010Excludes index e89753bef3..df8cb1bab9 100644 --- a/qpid/java/test-profiles/JavaPre010Excludes +++ b/qpid/java/test-profiles/JavaPre010Excludes @@ -30,6 +30,8 @@ org.apache.qpid.test.client.destination.AddressBasedDestinationTest#testBrowseMo //QPID-3392: the Java broker does not yet implement exchange creation arguments org.apache.qpid.test.client.destination.AddressBasedDestinationTest#testCreateExchangeWithArgs org.apache.qpid.test.client.destination.AddressBasedDestinationTest#testSessionCreateTopicWithExchangeArgs +//QPID-3678: zero capacity not supported in 0-9-1 +org.apache.qpid.test.client.destination.AddressBasedDestinationTest#testZeroCapacityForSynchronousReceive //QPID-6037: the 0-9-1 client takes the view that if you don't specify the node type but you ask for a JMS Topic // you want a topic behaviour. The 0-10 client thinks you must want a queue. org.apache.qpid.test.client.destination.AddressBasedDestinationTest#testJMSTopicIsTreatedAsQueueIn0_10 -- cgit v1.2.1