Author: robbie
Date: Mon Feb 13 17:26:18 2012
New Revision: 1243615
URL: http://svn.apache.org/viewvc?rev=1243615&view=rev
Log:
QPID-3835: update the test preparer tool to generate content for a durable
subscription without selector, use it to generate a new legacy store, add test
to verify this content once updated and thus expose the issue through test
failure
Modified:
qpid/trunk/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBStoreUpgradeTestPreparer.java
qpid/trunk/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBUpgradeTest.java
qpid/trunk/qpid/java/bdbstore/src/test/resources/upgrade/bdbstore-to-upgrade/test-store/00000000.jdb
Modified:
qpid/trunk/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBStoreUpgradeTestPreparer.java
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBStoreUpgradeTestPreparer.java?rev=1243615&r1=1243614&r2=1243615&view=diff
==============================================================================
---
qpid/trunk/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBStoreUpgradeTestPreparer.java
(original)
+++
qpid/trunk/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBStoreUpgradeTestPreparer.java
Mon Feb 13 17:26:18 2012
@@ -20,8 +20,6 @@
*/
package org.apache.qpid.server.store.berkeleydb;
-import junit.framework.TestCase;
-
import org.apache.qpid.client.AMQConnectionFactory;
import org.apache.qpid.url.URLSyntaxException;
@@ -29,16 +27,21 @@ import javax.jms.*;
/**
* Prepares an older version brokers BDB store with the required
- * contents for use in the BDBStoreUpgradeTest.
- *
+ * contents for use in the BDBStoreUpgradeTest.
+ *
+ * NOTE: Must be used with the equivalent older version client!
+ *
* The store will then be used to verify that the upgraded is
* completed properly and that once upgraded it functions as
* expected with the new broker.
+ *
*/
-public class BDBStoreUpgradeTestPreparer extends TestCase
+public class BDBStoreUpgradeTestPreparer
{
public static final String TOPIC_NAME="myUpgradeTopic";
- public static final String SUB_NAME="myDurSubName";
+ public static final String SUB_NAME="myDurSubName";
+ public static final String SELECTOR_SUB_NAME="mySelectorDurSubName";
+ public static final String SELECTOR_TOPIC_NAME="mySelectorUpgradeTopic";
public static final String QUEUE_NAME="myUpgradeQueue";
private static AMQConnectionFactory _connFac;
@@ -53,19 +56,11 @@ public class BDBStoreUpgradeTestPreparer
_connFac = new AMQConnectionFactory(CONN_URL);
}
- /**
- * Utility test method to allow running the preparation tool
- * using the test framework
- */
- public void testPrepareBroker() throws Exception
- {
- prepareBroker();
- }
-
private void prepareBroker() throws Exception
{
prepareQueues();
- prepareDurableSubscription();
+ prepareDurableSubscriptionWithSelector();
+ prepareDurableSubscriptionWithoutSelector();
}
/**
@@ -129,7 +124,7 @@ public class BDBStoreUpgradeTestPreparer
* - Send a message which matches the selector but will remain uncommitted.
* - Close the session.
*/
- private void prepareDurableSubscription() throws Exception
+ private void prepareDurableSubscriptionWithSelector() throws Exception
{
// Create a connection
@@ -144,10 +139,10 @@ public class BDBStoreUpgradeTestPreparer
});
// Create a session on the connection, transacted to confirm delivery
Session session = connection.createSession(true,
Session.SESSION_TRANSACTED);
- Topic topic = session.createTopic(TOPIC_NAME);
+ Topic topic = session.createTopic(SELECTOR_TOPIC_NAME);
// Create and register a durable subscriber with selector and then
close it
- TopicSubscriber durSub1 = session.createDurableSubscriber(topic,
SUB_NAME,"testprop='true'", false);
+ TopicSubscriber durSub1 = session.createDurableSubscriber(topic,
SELECTOR_SUB_NAME,"testprop='true'", false);
durSub1.close();
// Create a publisher and send a persistent message which matches the
selector
@@ -156,14 +151,55 @@ public class BDBStoreUpgradeTestPreparer
TopicSession pubSession = connection.createTopicSession(true,
Session.SESSION_TRANSACTED);
TopicPublisher publisher = pubSession.createPublisher(topic);
- publishMessages(session, publisher, topic, DeliveryMode.PERSISTENT,
1*1024, 1, "true");
- publishMessages(session, publisher, topic, DeliveryMode.PERSISTENT,
1*1024, 1, "false");
+ publishMessages(pubSession, publisher, topic, DeliveryMode.PERSISTENT,
1*1024, 1, "true");
+ publishMessages(pubSession, publisher, topic, DeliveryMode.PERSISTENT,
1*1024, 1, "false");
pubSession.commit();
- publishMessages(session, publisher, topic, DeliveryMode.PERSISTENT,
1*1024, 1, "true");
+ publishMessages(pubSession, publisher, topic, DeliveryMode.PERSISTENT,
1*1024, 1, "true");
publisher.close();
pubSession.close();
+ connection.close();
+ }
+
+ /**
+ * Prepare a DurableSubscription backing queue for use in testing use of
+ * DurableSubscriptions without selectors following the upgrade process.
+ *
+ * - Create a transacted session on the connection.
+ * - Open and close a DurableSubscription without selector to create the
backing queue.
+ * - Send a message which matches the subscription and commit session.
+ * - Close the session.
+ */
+ private void prepareDurableSubscriptionWithoutSelector() throws Exception
+ {
+ // Create a connection
+ TopicConnection connection = _connFac.createTopicConnection();
+ connection.start();
+ connection.setExceptionListener(new ExceptionListener()
+ {
+ public void onException(JMSException e)
+ {
+ e.printStackTrace();
+ }
+ });
+ // Create a session on the connection, transacted to confirm delivery
+ Session session = connection.createSession(true,
Session.SESSION_TRANSACTED);
+ Topic topic = session.createTopic(TOPIC_NAME);
+ // Create and register a durable subscriber without selector and then
close it
+ TopicSubscriber durSub1 = session.createDurableSubscriber(topic,
SUB_NAME);
+ durSub1.close();
+
+ // Create a publisher and send a persistent message which matches the
subscription
+ TopicSession pubSession = connection.createTopicSession(true,
Session.SESSION_TRANSACTED);
+ TopicPublisher publisher = pubSession.createPublisher(topic);
+
+ publishMessages(pubSession, publisher, topic, DeliveryMode.PERSISTENT,
1*1024, 1, "indifferent");
+ pubSession.commit();
+
+ publisher.close();
+ pubSession.close();
+ connection.close();
}
public static void sendMessages(Session session, MessageProducer
messageProducer,
Modified:
qpid/trunk/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBUpgradeTest.java
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBUpgradeTest.java?rev=1243615&r1=1243614&r2=1243615&view=diff
==============================================================================
---
qpid/trunk/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBUpgradeTest.java
(original)
+++
qpid/trunk/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBUpgradeTest.java
Mon Feb 13 17:26:18 2012
@@ -48,6 +48,8 @@ import org.apache.qpid.util.FileUtils;
import static
org.apache.qpid.server.store.berkeleydb.BDBStoreUpgradeTestPreparer.QUEUE_NAME;
import static
org.apache.qpid.server.store.berkeleydb.BDBStoreUpgradeTestPreparer.SUB_NAME;
import static
org.apache.qpid.server.store.berkeleydb.BDBStoreUpgradeTestPreparer.TOPIC_NAME;
+import static
org.apache.qpid.server.store.berkeleydb.BDBStoreUpgradeTestPreparer.SELECTOR_SUB_NAME;
+import static
org.apache.qpid.server.store.berkeleydb.BDBStoreUpgradeTestPreparer.SELECTOR_TOPIC_NAME;
import javax.jms.Connection;
import javax.jms.DeliveryMode;
@@ -154,7 +156,8 @@ public class BDBUpgradeTest extends Qpid
/**
* Test that the selector applied to the DurableSubscription was
successfully
* transfered to the new store, and functions as expected with continued
use
- * by monitoring message count while sending new messages to the topic.
+ * by monitoring message count while sending new messages to the topic and
then
+ * consuming them.
*/
public void testSelectorDurability() throws Exception
{
@@ -171,7 +174,7 @@ public class BDBUpgradeTest extends Qpid
try
{
- ManagedQueue dursubQueue = jmxUtils.getManagedQueue("clientid" +
":" + SUB_NAME);
+ ManagedQueue dursubQueue = jmxUtils.getManagedQueue("clientid" +
":" + SELECTOR_SUB_NAME);
assertEquals("DurableSubscription backing queue should have 1
message on it initially",
new Integer(1), dursubQueue.getMessageCount());
@@ -181,20 +184,26 @@ public class BDBUpgradeTest extends Qpid
// Send messages which don't match and do match the selector,
checking message count
TopicSession pubSession = connection.createTopicSession(true,
org.apache.qpid.jms.Session.SESSION_TRANSACTED);
- Topic topic = pubSession.createTopic(TOPIC_NAME);
+ Topic topic = pubSession.createTopic(SELECTOR_TOPIC_NAME);
TopicPublisher publisher = pubSession.createPublisher(topic);
BDBStoreUpgradeTestPreparer.publishMessages(pubSession, publisher,
topic, DeliveryMode.PERSISTENT, 1*1024, 1, "false");
pubSession.commit();
assertEquals("DurableSubscription backing queue should still have
1 message on it",
- new Integer(1), dursubQueue.getMessageCount());
+ Integer.valueOf(1), dursubQueue.getMessageCount());
BDBStoreUpgradeTestPreparer.publishMessages(pubSession, publisher,
topic, DeliveryMode.PERSISTENT, 1*1024, 1, "true");
pubSession.commit();
assertEquals("DurableSubscription backing queue should now have 2
messages on it",
- new Integer(2), dursubQueue.getMessageCount());
+ Integer.valueOf(2), dursubQueue.getMessageCount());
+
+ TopicSubscriber durSub = pubSession.createDurableSubscriber(topic,
SELECTOR_SUB_NAME,"testprop='true'", false);
+ Message m = durSub.receive(2000);
+ assertNotNull("Failed to receive an expected message", m);
+ m = durSub.receive(2000);
+ assertNotNull("Failed to receive an expected message", m);
+ pubSession.commit();
- dursubQueue.clearQueue();
pubSession.close();
}
finally
@@ -204,6 +213,58 @@ public class BDBUpgradeTest extends Qpid
}
/**
+ * Test that the DurableSubscription without selector was successfully
+ * transfered to the new store, and functions as expected with continued
use.
+ */
+ public void testDurableSubscriptionWithoutSelector() throws Exception
+ {
+ JMXTestUtils jmxUtils = null;
+ try
+ {
+ jmxUtils = new JMXTestUtils(this, "guest", "guest");
+ jmxUtils.open();
+ }
+ catch (Exception e)
+ {
+ fail("Unable to establish JMX connection, test cannot proceed");
+ }
+
+ try
+ {
+ ManagedQueue dursubQueue = jmxUtils.getManagedQueue("clientid" +
":" + SUB_NAME);
+ assertEquals("DurableSubscription backing queue should have 1
message on it initially",
+ new Integer(1), dursubQueue.getMessageCount());
+
+ // Create a connection and start it
+ TopicConnection connection = (TopicConnection) getConnection();
+ connection.start();
+
+ // Send new message matching the topic, checking message count
+ TopicSession session = connection.createTopicSession(true,
org.apache.qpid.jms.Session.SESSION_TRANSACTED);
+ Topic topic = session.createTopic(TOPIC_NAME);
+ TopicPublisher publisher = session.createPublisher(topic);
+
+ BDBStoreUpgradeTestPreparer.publishMessages(session, publisher,
topic, DeliveryMode.PERSISTENT, 1*1024, 1, "indifferent");
+ session.commit();
+ assertEquals("DurableSubscription backing queue should now have 2
messages on it",
+ Integer.valueOf(2), dursubQueue.getMessageCount());
+
+ TopicSubscriber durSub = session.createDurableSubscriber(topic,
SUB_NAME);
+ Message m = durSub.receive(2000);
+ assertNotNull("Failed to receive an expected message", m);
+ m = durSub.receive(2000);
+ assertNotNull("Failed to receive an expected message", m);
+
+ session.commit();
+ session.close();
+ }
+ finally
+ {
+ jmxUtils.close();
+ }
+ }
+
+ /**
* Test that the backing queue for the durable subscription created was
successfully
* detected and set as being exclusive during the upgrade process, and
that the
* regular queue was not.
@@ -278,7 +339,8 @@ public class BDBUpgradeTest extends Qpid
Connection connection = getConnection();
connection.start();
- consumeDurableSubscriptionMessages(connection);
+ consumeDurableSubscriptionMessages(connection, true);
+ consumeDurableSubscriptionMessages(connection, false);
consumeQueueMessages(connection, false);
}
@@ -484,21 +546,35 @@ public class BDBUpgradeTest extends Qpid
}
}
- private void consumeDurableSubscriptionMessages(Connection connection)
throws Exception
+ private void consumeDurableSubscriptionMessages(Connection connection,
boolean selector) throws Exception
{
Session session = connection.createSession(false,
Session.AUTO_ACKNOWLEDGE);
- Topic topic = session.createTopic(TOPIC_NAME);
+ Topic topic = null;
+ TopicSubscriber durSub = null;
+
+ if(selector)
+ {
+ topic = session.createTopic(SELECTOR_TOPIC_NAME);
+ durSub = session.createDurableSubscriber(topic,
SELECTOR_SUB_NAME,"testprop='true'", false);
+ }
+ else
+ {
+ topic = session.createTopic(TOPIC_NAME);
+ durSub = session.createDurableSubscriber(topic, SUB_NAME);
+ }
- TopicSubscriber durSub = session.createDurableSubscriber(topic,
SUB_NAME,"testprop='true'", false);
// Retrieve the matching message
Message m = durSub.receive(2000);
assertNotNull("Failed to receive an expected message", m);
- assertEquals("Selector property did not match", "true",
m.getStringProperty("testprop"));
+ if(selector)
+ {
+ assertEquals("Selector property did not match", "true",
m.getStringProperty("testprop"));
+ }
assertEquals("ID property did not match", 1, m.getIntProperty("ID"));
assertEquals("Message content was not as
expected",BDBStoreUpgradeTestPreparer.generateString(1024) ,
((TextMessage)m).getText());
- // Verify that neither the non-matching or uncommitted message are
received
+ // Verify that no more messages are received
m = durSub.receive(1000);
assertNull("No more messages should have been recieved", m);
Modified:
qpid/trunk/qpid/java/bdbstore/src/test/resources/upgrade/bdbstore-to-upgrade/test-store/00000000.jdb
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/bdbstore/src/test/resources/upgrade/bdbstore-to-upgrade/test-store/00000000.jdb?rev=1243615&r1=1243614&r2=1243615&view=diff
==============================================================================
Files
qpid/trunk/qpid/java/bdbstore/src/test/resources/upgrade/bdbstore-to-upgrade/test-store/00000000.jdb
(original) and
qpid/trunk/qpid/java/bdbstore/src/test/resources/upgrade/bdbstore-to-upgrade/test-store/00000000.jdb
Mon Feb 13 17:26:18 2012 differ
---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project: http://qpid.apache.org
Use/Interact: mailto:[email protected]