summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Wall <kwall@apache.org>2012-01-18 23:43:29 +0000
committerKeith Wall <kwall@apache.org>2012-01-18 23:43:29 +0000
commita608dfafdaf5f5d044dec29a92fdd89966c7523d (patch)
treea87762fd095ed9191fe4e34423e6296031f74c01
parent43253d1d65d21c74f54268d827dce4342f21daa2 (diff)
downloadqpid-python-a608dfafdaf5f5d044dec29a92fdd89966c7523d.tar.gz
QPID-3768: Refactor test case to avoid possibility of spurious test failure
Changed impl of testGetNextWithAck() to avoid unsafe assumption that pre-fetching will mean sorting will never occur. Remove unnecessary message payloads used by some test (time in ms) as this was not contributing to test. git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1233125 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--qpid/java/systests/src/main/java/org/apache/qpid/server/queue/SortedQueueTest.java68
1 files changed, 39 insertions, 29 deletions
diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/server/queue/SortedQueueTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/server/queue/SortedQueueTest.java
index bf4dbcb19f..181fe9d34e 100644
--- a/qpid/java/systests/src/main/java/org/apache/qpid/server/queue/SortedQueueTest.java
+++ b/qpid/java/systests/src/main/java/org/apache/qpid/server/queue/SortedQueueTest.java
@@ -20,10 +20,11 @@
package org.apache.qpid.server.queue;
import java.util.Arrays;
-import java.util.Calendar;
import java.util.HashMap;
-import java.util.Locale;
import java.util.Map;
+import java.util.SortedSet;
+import java.util.TreeSet;
+
import javax.jms.Connection;
import javax.jms.JMSException;
import javax.jms.Message;
@@ -128,11 +129,10 @@ public class SortedQueueTest extends QpidBrokerTestCase
final TestConsumerThread consumerThread = new TestConsumerThread(sessionMode, queue);
consumerThread.start();
- final Calendar cal = Calendar.getInstance(Locale.UK);
for(String value : VALUES)
{
- final Message msg = _producerSession.createTextMessage(String.valueOf(cal.getTimeInMillis()));
+ final Message msg = _producerSession.createMessage();
msg.setStringProperty(TEST_SORT_KEY, value);
producer.send(msg);
_producerSession.commit();
@@ -273,22 +273,22 @@ public class SortedQueueTest extends QpidBrokerTestCase
_consumerConnection.start();
//Receive 3 in sorted order
- received = receiveAndValidateMessage(consumer, "1");
+ received = assertReceiveAndValidateMessage(consumer, "1");
received.acknowledge();
- received = receiveAndValidateMessage(consumer, "2");
+ received = assertReceiveAndValidateMessage(consumer, "2");
received.acknowledge();
- received = receiveAndValidateMessage(consumer, "3");
+ received = assertReceiveAndValidateMessage(consumer, "3");
received.acknowledge();
//Send 1
sendAndCommitMessage(producer,"4");
//Receive 1 and recover
- received = receiveAndValidateMessage(consumer, "4");
+ received = assertReceiveAndValidateMessage(consumer, "4");
consumerSession.recover();
//Receive same 1
- received = receiveAndValidateMessage(consumer, "4");
+ received = assertReceiveAndValidateMessage(consumer, "4");
received.acknowledge();
//Send 3 out of order
@@ -296,33 +296,39 @@ public class SortedQueueTest extends QpidBrokerTestCase
sendAndCommitMessage(producer,"6");
sendAndCommitMessage(producer,"5");
- //Receive 1 of 3 (out of order due to pre-fetch) and recover
- received = receiveAndValidateMessage(consumer, "7");
+ //Receive 1 of 3 (possibly out of order due to pre-fetch)
+ final Message messageBeforeRollback = assertReceiveMessage(consumer);
consumerSession.recover();
if (isBroker010())
{
//Receive 3 in sorted order (not as per JMS recover)
- received = receiveAndValidateMessage(consumer, "5");
+ received = assertReceiveAndValidateMessage(consumer, "5");
received.acknowledge();
- received = receiveAndValidateMessage(consumer, "6");
+ received = assertReceiveAndValidateMessage(consumer, "6");
received.acknowledge();
- received = receiveAndValidateMessage(consumer, "7");
+ received = assertReceiveAndValidateMessage(consumer, "7");
received.acknowledge();
}
else
{
- //Receive 3 in partial sorted order due to recover
- received = receiveAndValidateMessage(consumer, "7");
+ //First message will be the one rolled-back (as per JMS spec).
+ final String messageKeyDeliveredBeforeRollback = messageBeforeRollback.getStringProperty(TEST_SORT_KEY);
+ received = assertReceiveAndValidateMessage(consumer, messageKeyDeliveredBeforeRollback);
received.acknowledge();
- received = receiveAndValidateMessage(consumer, "5");
+
+ //Remaining two messages will be sorted
+ final SortedSet<String> keys = new TreeSet<String>(Arrays.asList("5", "6", "7"));
+ keys.remove(messageKeyDeliveredBeforeRollback);
+
+ received = assertReceiveAndValidateMessage(consumer, keys.first());
received.acknowledge();
- received = receiveAndValidateMessage(consumer, "6");
+ received = assertReceiveAndValidateMessage(consumer, keys.last());
received.acknowledge();
}
}
- protected Queue createQueue() throws AMQException, JMSException
+ private Queue createQueue() throws AMQException, JMSException
{
final Map<String, Object> arguments = new HashMap<String, Object>();
arguments.put(AMQQueueFactory.QPID_QUEUE_SORT_KEY, TEST_SORT_KEY);
@@ -345,15 +351,22 @@ public class SortedQueueTest extends QpidBrokerTestCase
_producerSession.commit();
}
- private Message receiveAndValidateMessage(final MessageConsumer consumer, final String expectedKey) throws JMSException
+ private Message assertReceiveAndValidateMessage(final MessageConsumer consumer, final String expectedKey) throws JMSException
{
- final Message received = (TextMessage) consumer.receive(10000);
- assertNotNull("Received message is unexpectedly null", received);
+ final Message received = assertReceiveMessage(consumer);
assertEquals("Received message with unexpected sorted key value", expectedKey,
received.getStringProperty(TEST_SORT_KEY));
return received;
}
+ private Message assertReceiveMessage(final MessageConsumer consumer)
+ throws JMSException
+ {
+ final Message received = (TextMessage) consumer.receive(10000);
+ assertNotNull("Received message is unexpectedly null", received);
+ return received;
+ }
+
private class TestConsumerThread extends Thread
{
private boolean _stopped = false;
@@ -388,9 +401,8 @@ public class SortedQueueTest extends QpidBrokerTestCase
conn.start();
- TextMessage msg;
- Calendar cal = Calendar.getInstance(Locale.UK);
- while((msg = (TextMessage) consumer.receive(1000)) != null)
+ Message msg;
+ while((msg = consumer.receive(1000)) != null)
{
if(_sessionType == Session.SESSION_TRANSACTED)
{
@@ -427,9 +439,7 @@ public class SortedQueueTest extends QpidBrokerTestCase
}
_count++;
- LOGGER.debug("Message consumed at : " + cal.getTimeInMillis());
LOGGER.debug("Message consumed with key: " + msg.getStringProperty(TEST_SORT_KEY));
- LOGGER.debug("Message consumed with text: " + msg.getText());
LOGGER.debug("Message consumed with consumed index: " + _consumed);
}
@@ -439,8 +449,8 @@ public class SortedQueueTest extends QpidBrokerTestCase
}
catch(JMSException e)
{
- e.printStackTrace();
- }
+ LOGGER.error("Exception in listener", e);
+ }
}
public synchronized boolean isStopped()