Author: kwall
Date: Wed Jan 18 23:43:29 2012
New Revision: 1233125

URL: http://svn.apache.org/viewvc?rev=1233125&view=rev
Log:
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.

Modified:
    
qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/server/queue/SortedQueueTest.java

Modified: 
qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/server/queue/SortedQueueTest.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/server/queue/SortedQueueTest.java?rev=1233125&r1=1233124&r2=1233125&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/server/queue/SortedQueueTest.java
 (original)
+++ 
qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/server/queue/SortedQueueTest.java
 Wed Jan 18 23:43:29 2012
@@ -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 Qpi
 
         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 Qpi
         _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 Qpi
         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 Qpi
         _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 Qpi
 
                 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 Qpi
                     }
 
                     _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 Qpi
             }
             catch(JMSException e)
             {
-                e.printStackTrace();
-            }
+                LOGGER.error("Exception in listener", e);
+           }
         }
 
         public synchronized boolean isStopped()



---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:[email protected]

Reply via email to