diff options
4 files changed, 44 insertions, 6 deletions
diff --git a/java/systests/src/main/java/org/apache/qpid/test/unit/ack/AcknowledgeAfterFailoverTest.java b/java/systests/src/main/java/org/apache/qpid/test/unit/ack/AcknowledgeAfterFailoverTest.java index 7e3f00d4c5..30cc48691f 100644 --- a/java/systests/src/main/java/org/apache/qpid/test/unit/ack/AcknowledgeAfterFailoverTest.java +++ b/java/systests/src/main/java/org/apache/qpid/test/unit/ack/AcknowledgeAfterFailoverTest.java @@ -51,7 +51,7 @@ public class AcknowledgeAfterFailoverTest extends AcknowledgeTest implements Con // not the one we are connected to. // The test will still pass but it will not be exactly // as described. - NUM_MESSAGES = 10; + NUM_MESSAGES = 6; } /** diff --git a/java/systests/src/main/java/org/apache/qpid/test/unit/ack/AcknowledgeOnMessageTest.java b/java/systests/src/main/java/org/apache/qpid/test/unit/ack/AcknowledgeOnMessageTest.java index db50444d4a..73308d41c0 100644 --- a/java/systests/src/main/java/org/apache/qpid/test/unit/ack/AcknowledgeOnMessageTest.java +++ b/java/systests/src/main/java/org/apache/qpid/test/unit/ack/AcknowledgeOnMessageTest.java @@ -22,6 +22,8 @@ package org.apache.qpid.test.unit.ack; import org.apache.qpid.client.AMQDestination; import org.apache.qpid.client.AMQSession; +import org.apache.qpid.client.JMSAMQException; +import org.apache.qpid.client.failover.FailoverException; import javax.jms.Message; import javax.jms.MessageListener; @@ -62,7 +64,24 @@ public class AcknowledgeOnMessageTest extends AcknowledgeTest implements Message _connection.start(); - if (!_receviedAll.await(10000L, TimeUnit.MILLISECONDS)) + int lastCount = (int) _receviedAll.getCount(); + + boolean complete = _receviedAll.await(5000L, TimeUnit.MILLISECONDS); + + while (!complete) + { + int currentCount = (int) _receviedAll.getCount(); + + // make sure we have received a message in the last cycle. + if (lastCount == currentCount) + { + break; + } + + complete = _receviedAll.await(5000L, TimeUnit.MILLISECONDS); + } + + if (!complete) { // Check to see if we ended due to an exception in the onMessage handler Exception cause = _causeOfFailure.get(); @@ -73,7 +92,7 @@ public class AcknowledgeOnMessageTest extends AcknowledgeTest implements Message } else { - fail("All messages not received:" + _receviedAll.getCount() + "/" + NUM_MESSAGES); + fail("All messages not received missing:" + _receviedAll.getCount() + "/" + NUM_MESSAGES); } } @@ -85,7 +104,20 @@ public class AcknowledgeOnMessageTest extends AcknowledgeTest implements Message fail(cause.getMessage()); } - _consumer.close(); + try + { + _consumer.close(); + } + catch (JMSAMQException amqe) + { + if (amqe.getLinkedException() instanceof FailoverException) + { + fail("QPID-143 : Auto Ack can acknowledge message from previous session after failver. If failover occurs between deliver and ack."); + } + // else Rethrow for TestCase to catch. + throw amqe; + } + _consumerSession.close(); assertEquals("Wrong number of messages on queue", 0, @@ -113,6 +145,7 @@ public class AcknowledgeOnMessageTest extends AcknowledgeTest implements Message } catch (Exception e) { + // This will end the test run by counting down _receviedAll fail(e); } } diff --git a/java/systests/src/main/java/org/apache/qpid/test/unit/ack/AcknowledgeTest.java b/java/systests/src/main/java/org/apache/qpid/test/unit/ack/AcknowledgeTest.java index f67efa668a..7c9a77eb53 100644 --- a/java/systests/src/main/java/org/apache/qpid/test/unit/ack/AcknowledgeTest.java +++ b/java/systests/src/main/java/org/apache/qpid/test/unit/ack/AcknowledgeTest.java @@ -46,7 +46,7 @@ public class AcknowledgeTest extends FailoverBaseCase protected void setUp() throws Exception { super.setUp(); - NUM_MESSAGES = 10; + NUM_MESSAGES = 5; _queue = getTestQueue(); diff --git a/java/test-profiles/Excludes b/java/test-profiles/Excludes index 056938de58..d14d467b89 100644 --- a/java/test-profiles/Excludes +++ b/java/test-profiles/Excludes @@ -23,5 +23,10 @@ org.apache.qpid.server.security.acl.SimpleACLTest#* // QPID-1816 : Client Ack has not been addressed org.apache.qpid.test.unit.ack.AcknowledgeAfterFailoverOnMessageTest#testDirtyClientAck org.apache.qpid.test.unit.ack.AcknowledgeAfterFailoverOnMessageTest#testClientAck +org.apache.qpid.test.unit.ack.AcknowledgeAfterFailoverTest#testDirtyClientAck org.apache.qpid.test.unit.ack.AcknowledgeAfterFailoverTest#testClientAck -// testDirtyClientAck is ok as it fails as expected.. problem is it always fails :) + + +// QPID-143 : Failover can occur between receive and ack but we don't stop the ack. +org.apache.qpid.test.unit.ack.AcknowledgeAfterFailoverOnMessageTest#testAutoAck +org.apache.qpid.test.unit.ack.AcknowledgeAfterFailoverOnMessageTest#testDupsOk |
