Author: ritchiem
Date: Wed Jun 27 07:23:21 2007
New Revision: 551174
URL: http://svn.apache.org/viewvc?view=rev&rev=551174
Log:
Caused each of these tests to run 10 times to help identify any race conditions
that were occuring.
Updated the CommitRollbackTest to be more robust in the detection of failure.
Modified:
incubator/qpid/branches/M2/java/client/src/test/java/org/apache/qpid/test/unit/client/forwardall/CombinedTest.java
incubator/qpid/branches/M2/java/client/src/test/java/org/apache/qpid/test/unit/transacted/CommitRollbackTest.java
Modified:
incubator/qpid/branches/M2/java/client/src/test/java/org/apache/qpid/test/unit/client/forwardall/CombinedTest.java
URL:
http://svn.apache.org/viewvc/incubator/qpid/branches/M2/java/client/src/test/java/org/apache/qpid/test/unit/client/forwardall/CombinedTest.java?view=diff&rev=551174&r1=551173&r2=551174
==============================================================================
---
incubator/qpid/branches/M2/java/client/src/test/java/org/apache/qpid/test/unit/client/forwardall/CombinedTest.java
(original)
+++
incubator/qpid/branches/M2/java/client/src/test/java/org/apache/qpid/test/unit/client/forwardall/CombinedTest.java
Wed Jun 27 07:23:21 2007
@@ -21,9 +21,7 @@
package org.apache.qpid.test.unit.client.forwardall;
import junit.framework.TestCase;
-
import org.apache.qpid.testutil.VMBrokerSetup;
-
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -34,6 +32,7 @@
public class CombinedTest extends TestCase
{
private static final Logger _logger =
LoggerFactory.getLogger(CombinedTest.class);
+ private int run = 0;
protected void setUp() throws Exception
{
@@ -48,14 +47,18 @@
public void testForwardAll() throws Exception
{
- int services = 2;
- ServiceCreator.start("vm://:1", services);
+ while (run < 10)
+ {
+ int services = 2;
+ ServiceCreator.start("vm://:1", services);
+
+ _logger.info("Starting " + ++run + " client...");
- _logger.info("Starting client...");
+ new Client("vm://:1", services).shutdownWhenComplete();
- new Client("vm://:1", services).shutdownWhenComplete();
- _logger.info("Completed successfully!");
+ _logger.info("Completed " + run + " successfully!");
+ }
}
public static junit.framework.Test suite()
Modified:
incubator/qpid/branches/M2/java/client/src/test/java/org/apache/qpid/test/unit/transacted/CommitRollbackTest.java
URL:
http://svn.apache.org/viewvc/incubator/qpid/branches/M2/java/client/src/test/java/org/apache/qpid/test/unit/transacted/CommitRollbackTest.java?view=diff&rev=551174&r1=551173&r2=551174
==============================================================================
---
incubator/qpid/branches/M2/java/client/src/test/java/org/apache/qpid/test/unit/transacted/CommitRollbackTest.java
(original)
+++
incubator/qpid/branches/M2/java/client/src/test/java/org/apache/qpid/test/unit/transacted/CommitRollbackTest.java
Wed Jun 27 07:23:21 2007
@@ -21,12 +21,10 @@
package org.apache.qpid.test.unit.transacted;
import junit.framework.TestCase;
-
import org.apache.qpid.AMQException;
import org.apache.qpid.client.AMQConnection;
import org.apache.qpid.client.transport.TransportConnection;
import org.apache.qpid.url.URLSyntaxException;
-
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -57,6 +55,9 @@
private static final Logger _logger =
LoggerFactory.getLogger(CommitRollbackTest.class);
private static final String BROKER = "vm://:1";
+ private boolean _gotone = false;
+ private boolean _gottwo = false;
+ private boolean _gottwoRedelivered = false;
protected void setUp() throws Exception
{
@@ -340,57 +341,98 @@
*
* @throws Exception On error
*/
- /*public void testSend2ThenRollback() throws Exception
+ public void testSend2ThenRollback() throws Exception
{
- assertTrue("session is not transacted", _session.getTransacted());
- assertTrue("session is not transacted", _pubSession.getTransacted());
+ int run = 0;
+ while (run < 10)
+ {
+ run++;
+ _logger.info("Run:" + run);
+ assertTrue("session is not transacted", _session.getTransacted());
+ assertTrue("session is not transacted",
_pubSession.getTransacted());
+
+ _logger.info("sending two test messages");
+ _publisher.send(_pubSession.createTextMessage("1"));
+ _publisher.send(_pubSession.createTextMessage("2"));
+ _pubSession.commit();
- _logger.info("sending two test messages");
- _publisher.send(_pubSession.createTextMessage("1"));
- _publisher.send(_pubSession.createTextMessage("2"));
- _pubSession.commit();
+ _logger.info("getting test message");
+ assertEquals("1", ((TextMessage)
_consumer.receive(1000)).getText());
- _logger.info("getting test message");
- assertEquals("1", ((TextMessage) _consumer.receive(1000)).getText());
+ _logger.info("rolling back");
+ _session.rollback();
- _logger.info("rolling back");
- _session.rollback();
+ _logger.info("receiving result");
+ Message result = _consumer.receive(1000);
- _logger.info("receiving result");
- Message result = _consumer.receive(1000);
+ assertNotNull("test message was consumed and rolled back, but is
gone", result);
- assertNotNull("test message was consumed and rolled back, but is
gone", result);
+ // Message Order is:
+
+ // Send 1 , 2
+ // Retrieve 1 and then rollback
+ // Receieve 1 (redelivered) , 2 (may or may not be redelivered??)
+
+ verifyMessages(result);
+
+ // Occassionally get message 2 first!
+// assertEquals("Should get message one first", "1", ((TextMessage)
result).getText());
+// assertTrue("Message is not marked as redelivered",
result.getJMSRedelivered());
+//
+// result = _consumer.receive(1000);
+// assertEquals("Second message should be message 2", "2",
((TextMessage) result).getText());
+// assertTrue("Message is not marked as redelivered",
result.getJMSRedelivered());
+//
+// result = _consumer.receive(1000);
+// assertNull("There should be no more messages", result);
+
+ _session.commit();
+ }
+ }
+ private void verifyMessages(Message result) throws JMSException
+ {
- if (((TextMessage) result).getText().equals("2"))
+ if (result == null)
{
- assertTrue("Messasge is marked as redelivered",
!result.getJMSRedelivered());
+ assertTrue("Didn't receive redelivered message one", _gotone);
+ assertTrue("Didn't receive message two at all", _gottwo |
_gottwoRedelivered);
+ _gotone = false;
+ _gottwo = false;
+ _gottwoRedelivered = false;
+ return;
+ }
+
+ if (((TextMessage) result).getText().equals("1"))
+ {
+ _logger.info("Got 1 redelivered");
+ assertTrue("Message is not marked as redelivered",
result.getJMSRedelivered());
+ assertFalse("Already received message one", _gotone);
+ _gotone = true;
- result = _consumer.receive(1000);
- assertEquals("1", ((TextMessage) result).getText());
- assertTrue("Messasge is not marked as redelivered",
result.getJMSRedelivered());
}
else
{
- assertEquals("1", ((TextMessage) result).getText());
- assertTrue("Messasge is not marked as redelivered",
result.getJMSRedelivered());
- result = _consumer.receive(1000);
- assertNotNull("test message was consumed and rolled back, but is
gone", result);
assertEquals("2", ((TextMessage) result).getText());
- assertTrue("Messasge is not marked as redelivered",
result.getJMSRedelivered());
- }
- result = _consumer.receive(1000);
+ if (result.getJMSRedelivered())
+ {
+ _logger.info("Got 2 redelivered, message was prefetched");
+ assertFalse("Already received message redelivered two",
_gottwoRedelivered);
+
+ _gottwoRedelivered = true;
+ }
+ else
+ {
+ _logger.warn("Got 2, message prefetched wasn't cleared or
messages was in transit when rollback occured");
+ assertFalse("Already received message two", _gottwo);
- if (result != null)
- {
- assertEquals("2", ((TextMessage) result).getText());
- assertTrue("Messasge is not marked as redelivered",
result.getJMSRedelivered());
- result = _consumer.receive(1000);
+ _gottwo = true;
+ }
}
- assertNull("test message should be null", result);
- }*/
+ verifyMessages(_consumer.receive(1000));
+ }
public void testSend2ThenCloseAfter1andTryAgain() throws Exception
{
@@ -417,12 +459,12 @@
_logger.info("receiving result");
- // NOTE: Both msg 1 & 2 will be marked as redelivered as they have
both will have been rejected.
- // Only the occasion where it is not rejected will it mean it hasn't
arrived at the client yet.
+// NOTE: Both msg 1 & 2 will be marked as redelivered as they have both will
have been rejected.
+// Only the occasion where it is not rejected will it mean it hasn't arrived
at the client yet.
result = _consumer.receive(1000);
assertNotNull("test message was consumed and rolled back, but is
gone", result);
- // The first message back will be either 1 or 2 being redelivered
+// The first message back will be either 1 or 2 being redelivered
if (result.getJMSRedelivered())
{
assertTrue("Messasge is not marked as redelivered" + result,
result.getJMSRedelivered());