diff options
| author | Aidan Skinner <aidan@apache.org> | 2008-08-19 10:03:07 +0000 |
|---|---|---|
| committer | Aidan Skinner <aidan@apache.org> | 2008-08-19 10:03:07 +0000 |
| commit | 910fad9a0c17d465f7a7e23b6063095bbda3e310 (patch) | |
| tree | ab8622fd5b5115ddb2409eeebb2ddbb1295ceef8 /qpid/java/systests/src/main | |
| parent | d732245476e8ddde0a5304c1c9a48eccda9efd94 (diff) | |
| download | qpid-python-910fad9a0c17d465f7a7e23b6063095bbda3e310.tar.gz | |
QPID-1202: Rebind durable subscriptions if the arguments have changed
TopicExchange: take field arguments into account when determining if topic binding already exists when binding, but not for regular isBound().
DurableSubscriptionTest: add test case for QPID-1202
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk@687010 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/java/systests/src/main')
| -rw-r--r-- | qpid/java/systests/src/main/java/org/apache/qpid/test/unit/topic/DurableSubscriptionTest.java | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/topic/DurableSubscriptionTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/topic/DurableSubscriptionTest.java index fe7b97a47d..03f380243e 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/topic/DurableSubscriptionTest.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/topic/DurableSubscriptionTest.java @@ -348,6 +348,66 @@ public class DurableSubscriptionTest extends QpidTestCase session.unsubscribe("testDurableWithInvalidDestinationsub"); } + /** + * Tests QPID-1202 + * Creates a durable subscription with a selector, then changes that selector on resubscription + * @throws Exception + */ + public void testResubscribeWithChangedSelector() throws Exception + { + Connection conn = getConnection(); + conn.start(); + Session session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE); + AMQTopic topic = new AMQTopic((AMQConnection) conn, "testResubscribeWithChangedSelector"); + MessageProducer producer = session.createProducer(topic); + + // Create durable subscriber that matches A + TopicSubscriber subA = session.createDurableSubscriber(topic, + "testResubscribeWithChangedSelector", + "Match = True", false); + + // Send 1 matching message and 1 non-matching message + sendMatchingAndNonMatchingMessage(session, producer); + + Message rMsg = subA.receive(1000); + assertNotNull(rMsg); + assertEquals("Content was wrong", + "testResubscribeWithChangedSelector1", + ((TextMessage) rMsg).getText()); + + rMsg = subA.receive(250); + assertNull(rMsg); + + // Disconnect subscriber + subA.close(); + + // Reconnect with new selector that matches B + TopicSubscriber subB = session.createDurableSubscriber(topic, + "testResubscribeWithChangedSelector","Match = False", false); + + + // Check messages are recieved properly + sendMatchingAndNonMatchingMessage(session, producer); + rMsg = subB.receive(1000); + assertNotNull(rMsg); + assertEquals("Content was wrong", + "testResubscribeWithChangedSelector2", + ((TextMessage) rMsg).getText()); + + rMsg = subB.receive(250); + assertNull(rMsg); + } + + private void sendMatchingAndNonMatchingMessage(Session session, MessageProducer producer) throws JMSException + { + TextMessage msg = session.createTextMessage("testResubscribeWithChangedSelector1"); + msg.setBooleanProperty("Match", true); + producer.send(msg); + msg = session.createTextMessage("testResubscribeWithChangedSelector2"); + msg.setBooleanProperty("Match", false); + producer.send(msg); + } + public static junit.framework.Test suite() { return new junit.framework.TestSuite(DurableSubscriptionTest.class); |
