summaryrefslogtreecommitdiff
path: root/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/client/RollbackOrderTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/client/RollbackOrderTest.java')
-rw-r--r--trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/client/RollbackOrderTest.java194
1 files changed, 0 insertions, 194 deletions
diff --git a/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/client/RollbackOrderTest.java b/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/client/RollbackOrderTest.java
deleted file mode 100644
index ff766c907d..0000000000
--- a/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/client/RollbackOrderTest.java
+++ /dev/null
@@ -1,194 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.test.client;
-
-import org.apache.qpid.test.utils.*;
-import javax.jms.*;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.atomic.AtomicBoolean;
-
-import junit.framework.ComparisonFailure;
-import junit.framework.AssertionFailedError;
-
-/**
- * RollbackOrderTest, QPID-1864, QPID-1871
- *
- * Description:
- *
- * The problem that this test is exposing is that the dispatcher used to be capable
- * of holding on to a message when stopped. This ment that when the rollback was
- * called and the dispatcher stopped it may have hold of a message. So after all
- * the local queues(preDeliveryQueue, SynchronousQueue, PostDeliveryTagQueue)
- * have been cleared the client still had a single message, the one the
- * dispatcher was holding on to.
- *
- * As a result the TxRollback operation would run and then release the dispatcher.
- * Whilst the dispatcher would then proceed to reject the message it was holiding
- * the Broker would already have resent that message so the rejection would silently
- * fail.
- *
- * And the client would receieve that single message 'early', depending on the
- * number of messages already recevied when rollback was called.
- *
- *
- * Aims:
- *
- * The tests puts 50 messages on to the queue.
- *
- * The test then tries to cause the dispatcher to stop whilst it is in the process
- * of moving a message from the preDeliveryQueue to a consumers sychronousQueue.
- *
- * To exercise this path we have 50 message flowing to the client to give the
- * dispatcher a bit of work to do moving messages.
- *
- * Then we loop - 10 times
- * - Validating that the first message received is always message 1.
- * - Receive a few more so that there are a few messages to reject.
- * - call rollback, to try and catch the dispatcher mid process.
- *
- * Outcome:
- *
- * The hope is that we catch the dispatcher mid process and cause a BasicReject
- * to fail. Which will be indicated in the log but will also cause that failed
- * rejected message to be the next to be delivered which will not be message 1
- * as expected.
- *
- * We are testing a race condition here but we can check through the log file if
- * the race condition occured. However, performing that check will only validate
- * the problem exists and will not be suitable as part of a system test.
- *
- */
-public class RollbackOrderTest extends QpidTestCase
-{
-
- private Connection _connection;
- private Queue _queue;
- private Session _session;
- private MessageConsumer _consumer;
-
- @Override public void setUp() throws Exception
- {
- super.setUp();
- _connection = getConnection();
-
- _session = _connection.createSession(true, Session.SESSION_TRANSACTED);
- _queue = _session.createQueue(getTestQueueName());
- _consumer = _session.createConsumer(_queue);
-
- //Send more messages so it is more likely that the dispatcher is
- // processing on rollback.
- sendMessage(_session, _queue, 50);
- _session.commit();
-
- }
-
- public void testOrderingAfterRollback() throws Exception
- {
- //Start the session now so we
- _connection.start();
-
- for (int i = 0; i < 20; i++)
- {
- Message msg = _consumer.receive();
- assertEquals("Incorrect Message Received", 0, msg.getIntProperty(INDEX));
-
- // Pull additional messages through so we have some reject work to do
- for (int m=0; m < 5 ; m++)
- {
- _consumer.receive();
- }
-
- System.err.println("ROT-Rollback");
- _logger.warn("ROT-Rollback");
- _session.rollback();
- }
- }
-
- public void testOrderingAfterRollbackOnMessage() throws Exception
- {
- final CountDownLatch count= new CountDownLatch(20);
- final Exception exceptions[] = new Exception[20];
- final AtomicBoolean failed = new AtomicBoolean(false);
-
- _consumer.setMessageListener(new MessageListener()
- {
-
- public void onMessage(Message message)
- {
-
- Message msg = message;
- try
- {
- count.countDown();
- assertEquals("Incorrect Message Received", 0, msg.getIntProperty(INDEX));
-
- _session.rollback();
- }
- catch (JMSException e)
- {
- System.out.println("Error:" + e.getMessage());
- exceptions[(int)count.getCount()] = e;
- }
- catch (AssertionFailedError cf)
- {
- // End Test if Equality test fails
- while (count.getCount() != 0)
- {
- count.countDown();
- }
-
- System.out.println("Error:" + cf.getMessage());
- System.err.println(cf.getMessage());
- cf.printStackTrace();
- failed.set(true);
- }
- }
- });
- //Start the session now so we
- _connection.start();
-
- count.await();
-
- for (Exception e : exceptions)
- {
- if (e != null)
- {
- System.err.println(e.getMessage());
- e.printStackTrace();
- failed.set(true);
- }
- }
-
-// _consumer.close();
- _connection.close();
-
- assertFalse("Exceptions thrown during test run, Check Std.err.", failed.get());
- }
-
- @Override public void tearDown() throws Exception
- {
-
- drainQueue(_queue);
-
- super.tearDown();
- }
-
-}