You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ri...@apache.org on 2008/07/15 18:58:30 UTC

svn commit: r676969 [3/5] - in /incubator/qpid/trunk/qpid/java: client/src/main/java/org/apache/qpid/testutil/ client/src/test/java/org/apache/qpid/client/ client/src/test/java/org/apache/qpid/test/unit/ack/ client/src/test/java/org/apache/qpid/test/un...

Copied: incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/client/protocol/AMQProtocolSessionTest.java (from r676963, incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/client/protocol/AMQProtocolSessionTest.java)
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/client/protocol/AMQProtocolSessionTest.java?p2=incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/client/protocol/AMQProtocolSessionTest.java&p1=incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/client/protocol/AMQProtocolSessionTest.java&r1=676963&r2=676969&rev=676969&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/client/protocol/AMQProtocolSessionTest.java (original)
+++ incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/client/protocol/AMQProtocolSessionTest.java Tue Jul 15 09:58:26 2008
@@ -20,14 +20,13 @@
  */
 package org.apache.qpid.test.unit.client.protocol;
 
-import junit.framework.TestCase;
-
 import org.apache.mina.common.IoSession;
 import org.apache.qpid.client.AMQConnection;
 import org.apache.qpid.client.protocol.AMQProtocolHandler;
 import org.apache.qpid.client.protocol.AMQProtocolSession;
 import org.apache.qpid.framing.AMQShortString;
-import org.apache.qpid.testutil.QpidTestCase;
+import org.apache.qpid.test.utils.QpidTestCase;
+import org.apache.qpid.test.utils.protocol.TestIoSession;
 
 public class AMQProtocolSessionTest extends QpidTestCase
 {

Copied: incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/client/temporaryqueue/TemporaryQueueTest.java (from r676963, incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/client/temporaryqueue/TemporaryQueueTest.java)
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/client/temporaryqueue/TemporaryQueueTest.java?p2=incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/client/temporaryqueue/TemporaryQueueTest.java&p1=incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/client/temporaryqueue/TemporaryQueueTest.java&r1=676963&r2=676969&rev=676969&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/client/temporaryqueue/TemporaryQueueTest.java (original)
+++ incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/client/temporaryqueue/TemporaryQueueTest.java Tue Jul 15 09:58:26 2008
@@ -30,9 +30,8 @@
 import javax.jms.TextMessage;
 import junit.framework.Assert;
 
-import org.apache.qpid.testutil.QpidTestCase;
+import org.apache.qpid.test.utils.QpidTestCase;
 import org.apache.qpid.client.AMQQueue;
-import org.apache.qpid.client.transport.TransportConnection;
 
 import java.util.List;
 import java.util.LinkedList;

Copied: incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/close/CloseBeforeAckTest.java (from r676963, incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/close/CloseBeforeAckTest.java)
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/close/CloseBeforeAckTest.java?p2=incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/close/CloseBeforeAckTest.java&p1=incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/close/CloseBeforeAckTest.java&r1=676963&r2=676969&rev=676969&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/close/CloseBeforeAckTest.java (original)
+++ incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/close/CloseBeforeAckTest.java Tue Jul 15 09:58:26 2008
@@ -22,9 +22,7 @@
 
 import junit.framework.Assert;
 
-import org.apache.qpid.client.AMQConnection;
-import org.apache.qpid.client.transport.TransportConnection;
-import org.apache.qpid.testutil.QpidTestCase;
+import org.apache.qpid.test.utils.QpidTestCase;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;

Copied: incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/close/MessageRequeueTest.java (from r676963, incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/close/MessageRequeueTest.java)
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/close/MessageRequeueTest.java?p2=incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/close/MessageRequeueTest.java&p1=incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/close/MessageRequeueTest.java&r1=676963&r2=676969&rev=676969&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/close/MessageRequeueTest.java (original)
+++ incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/close/MessageRequeueTest.java Tue Jul 15 09:58:26 2008
@@ -21,11 +21,9 @@
 package org.apache.qpid.test.unit.close;
 
 import org.apache.qpid.AMQException;
-import org.apache.qpid.client.AMQConnection;
+import org.apache.qpid.test.utils.QpidTestCase;
 import org.apache.qpid.client.message.AbstractJMSMessage;
-import org.apache.qpid.client.transport.TransportConnection;
 import org.apache.qpid.testutil.QpidClientConnection;
-import org.apache.qpid.testutil.QpidTestCase;
 import org.apache.qpid.url.URLSyntaxException;
 
 import org.slf4j.Logger;

Copied: incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/close/TopicPublisherCloseTest.java (from r676963, incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/close/TopicPublisherCloseTest.java)
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/close/TopicPublisherCloseTest.java?p2=incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/close/TopicPublisherCloseTest.java&p1=incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/close/TopicPublisherCloseTest.java&r1=676963&r2=676969&rev=676969&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/close/TopicPublisherCloseTest.java (original)
+++ incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/close/TopicPublisherCloseTest.java Tue Jul 15 09:58:26 2008
@@ -24,12 +24,9 @@
 import javax.jms.TopicPublisher;
 import javax.jms.TopicSession;
 
-import junit.framework.TestCase;
-
 import org.apache.qpid.client.AMQConnection;
 import org.apache.qpid.client.AMQTopic;
-import org.apache.qpid.client.transport.TransportConnection;
-import org.apache.qpid.testutil.QpidTestCase;
+import org.apache.qpid.test.utils.QpidTestCase;
 
 /**
  * @author Apache Software Foundation

Copied: incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/ct/DurableSubscriberTest.java (from r676963, incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/ct/DurableSubscriberTest.java)
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/ct/DurableSubscriberTest.java?p2=incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/ct/DurableSubscriberTest.java&p1=incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/ct/DurableSubscriberTest.java&r1=676963&r2=676969&rev=676969&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/ct/DurableSubscriberTest.java (original)
+++ incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/ct/DurableSubscriberTest.java Tue Jul 15 09:58:26 2008
@@ -19,7 +19,7 @@
 
 import javax.jms.*;
 
-import org.apache.qpid.testutil.QpidTestCase;
+import org.apache.qpid.test.utils.QpidTestCase;
 
 /**
  *   Crash Recovery tests for durable subscription

Copied: incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/message/JMSDestinationTest.java (from r676963, incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/message/JMSDestinationTest.java)
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/message/JMSDestinationTest.java?p2=incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/message/JMSDestinationTest.java&p1=incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/message/JMSDestinationTest.java&r1=676963&r2=676969&rev=676969&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/message/JMSDestinationTest.java (original)
+++ incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/message/JMSDestinationTest.java Tue Jul 15 09:58:26 2008
@@ -25,7 +25,7 @@
 import org.apache.qpid.client.AMQQueue;
 import org.apache.qpid.client.AMQSession;
 import org.apache.qpid.framing.AMQShortString;
-import org.apache.qpid.testutil.QpidTestCase;
+import org.apache.qpid.test.utils.QpidTestCase;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;

Copied: incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/message/JMSPropertiesTest.java (from r676963, incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/message/JMSPropertiesTest.java)
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/message/JMSPropertiesTest.java?p2=incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/message/JMSPropertiesTest.java&p1=incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/message/JMSPropertiesTest.java&r1=676963&r2=676969&rev=676969&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/message/JMSPropertiesTest.java (original)
+++ incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/message/JMSPropertiesTest.java Tue Jul 15 09:58:26 2008
@@ -20,15 +20,12 @@
  */
 package org.apache.qpid.test.unit.message;
 
-import junit.framework.TestCase;
-
 import org.apache.qpid.client.AMQConnection;
 import org.apache.qpid.client.AMQQueue;
 import org.apache.qpid.client.AMQSession;
 import org.apache.qpid.client.message.NonQpidObjectMessage;
-import org.apache.qpid.client.transport.TransportConnection;
 import org.apache.qpid.framing.AMQShortString;
-import org.apache.qpid.testutil.QpidTestCase;
+import org.apache.qpid.test.utils.QpidTestCase;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;

Copied: incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/message/StreamMessageTest.java (from r676963, incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/message/StreamMessageTest.java)
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/message/StreamMessageTest.java?p2=incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/message/StreamMessageTest.java&p1=incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/message/StreamMessageTest.java&r1=676963&r2=676969&rev=676969&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/message/StreamMessageTest.java (original)
+++ incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/message/StreamMessageTest.java Tue Jul 15 09:58:26 2008
@@ -29,7 +29,7 @@
 import org.apache.qpid.framing.FieldTable;
 import org.apache.qpid.url.AMQBindingURL;
 import org.apache.qpid.url.BindingURL;
-import org.apache.qpid.testutil.QpidTestCase;
+import org.apache.qpid.test.utils.QpidTestCase;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;

Copied: incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/topic/DurableSubscriptionTest.java (from r676963, incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/topic/DurableSubscriptionTest.java)
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/topic/DurableSubscriptionTest.java?p2=incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/topic/DurableSubscriptionTest.java&p1=incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/topic/DurableSubscriptionTest.java&r1=676963&r2=676969&rev=676969&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/topic/DurableSubscriptionTest.java (original)
+++ incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/topic/DurableSubscriptionTest.java Tue Jul 15 09:58:26 2008
@@ -20,15 +20,10 @@
  */
 package org.apache.qpid.test.unit.topic;
 
-import junit.framework.TestCase;
-
-import org.apache.qpid.AMQException;
-import org.apache.qpid.testutil.QpidTestCase;
+import org.apache.qpid.test.utils.QpidTestCase;
 import org.apache.qpid.client.AMQConnection;
 import org.apache.qpid.client.AMQSession;
 import org.apache.qpid.client.AMQTopic;
-import org.apache.qpid.client.transport.TransportConnection;
-import org.apache.qpid.url.URLSyntaxException;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -36,7 +31,6 @@
 import javax.jms.Connection;
 import javax.jms.InvalidDestinationException;
 import javax.jms.InvalidSelectorException;
-import javax.jms.JMSException;
 import javax.jms.Message;
 import javax.jms.MessageConsumer;
 import javax.jms.MessageProducer;

Copied: incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/topic/TopicPublisherTest.java (from r676963, incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/topic/TopicPublisherTest.java)
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/topic/TopicPublisherTest.java?p2=incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/topic/TopicPublisherTest.java&p1=incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/topic/TopicPublisherTest.java&r1=676963&r2=676969&rev=676969&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/topic/TopicPublisherTest.java (original)
+++ incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/topic/TopicPublisherTest.java Tue Jul 15 09:58:26 2008
@@ -28,7 +28,7 @@
 import org.apache.qpid.client.AMQConnection;
 import org.apache.qpid.client.AMQSession;
 import org.apache.qpid.client.AMQTopic;
-import org.apache.qpid.testutil.QpidTestCase;
+import org.apache.qpid.test.utils.QpidTestCase;
 
 /**
  * @author Apache Software Foundation

Copied: incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/topic/TopicSessionTest.java (from r676963, incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/topic/TopicSessionTest.java)
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/topic/TopicSessionTest.java?p2=incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/topic/TopicSessionTest.java&p1=incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/topic/TopicSessionTest.java&r1=676963&r2=676969&rev=676969&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/topic/TopicSessionTest.java (original)
+++ incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/topic/TopicSessionTest.java Tue Jul 15 09:58:26 2008
@@ -30,13 +30,10 @@
 import javax.jms.TopicSession;
 import javax.jms.TopicSubscriber;
 
-import junit.framework.TestCase;
-
 import org.apache.qpid.client.AMQConnection;
 import org.apache.qpid.client.AMQSession;
 import org.apache.qpid.client.AMQTopic;
-import org.apache.qpid.client.transport.TransportConnection;
-import org.apache.qpid.testutil.QpidTestCase;
+import org.apache.qpid.test.utils.QpidTestCase;
 
 
 /** @author Apache Software Foundation */

Copied: incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/transacted/CommitRollbackTest.java (from r676963, incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/transacted/CommitRollbackTest.java)
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/transacted/CommitRollbackTest.java?p2=incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/transacted/CommitRollbackTest.java&p1=incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/transacted/CommitRollbackTest.java&r1=676963&r2=676969&rev=676969&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/transacted/CommitRollbackTest.java (original)
+++ incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/transacted/CommitRollbackTest.java Tue Jul 15 09:58:26 2008
@@ -20,7 +20,7 @@
  */
 package org.apache.qpid.test.unit.transacted;
 
-import org.apache.qpid.testutil.QpidTestCase;
+import org.apache.qpid.test.utils.QpidTestCase;
 import org.apache.qpid.client.AMQConnection;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;

Copied: incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/transacted/TransactedTest.java (from r676963, incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/transacted/TransactedTest.java)
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/transacted/TransactedTest.java?p2=incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/transacted/TransactedTest.java&p1=incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/transacted/TransactedTest.java&r1=676963&r2=676969&rev=676969&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/transacted/TransactedTest.java (original)
+++ incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/transacted/TransactedTest.java Tue Jul 15 09:58:26 2008
@@ -26,7 +26,7 @@
 import org.apache.qpid.client.AMQSession;
 import org.apache.qpid.framing.AMQShortString;
 import org.apache.qpid.jms.Session;
-import org.apache.qpid.testutil.QpidTestCase;
+import org.apache.qpid.test.utils.QpidTestCase;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;

Copied: incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/xa/AbstractXATestCase.java (from r676963, incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/xa/AbstractXATestCase.java)
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/xa/AbstractXATestCase.java?p2=incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/xa/AbstractXATestCase.java&p1=incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/xa/AbstractXATestCase.java&r1=676963&r2=676969&rev=676969&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/xa/AbstractXATestCase.java (original)
+++ incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/xa/AbstractXATestCase.java Tue Jul 15 09:58:26 2008
@@ -18,7 +18,7 @@
 package org.apache.qpid.test.unit.xa;
 
 import org.apache.qpidity.dtx.XidImpl;
-import org.apache.qpid.testutil.QpidTestCase;
+import org.apache.qpid.test.utils.QpidTestCase;
 
 import javax.transaction.xa.Xid;
 import javax.transaction.xa.XAResource;

Added: incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/xa/FaultTest.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/xa/FaultTest.java?rev=676969&view=auto
==============================================================================
--- incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/xa/FaultTest.java (added)
+++ incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/xa/FaultTest.java Tue Jul 15 09:58:26 2008
@@ -0,0 +1,364 @@
+package org.apache.qpid.test.unit.xa;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.jms.*;
+import javax.transaction.xa.Xid;
+import javax.transaction.xa.XAResource;
+import javax.transaction.xa.XAException;
+
+import junit.framework.TestSuite;
+
+
+public class FaultTest extends AbstractXATestCase
+{
+    /* this clas logger */
+    private static final Logger _logger = LoggerFactory.getLogger(FaultTest.class);
+
+    /**
+     * the queue use by all the tests
+     */
+    private static Queue _queue = null;
+    /**
+     * the queue connection factory used by all tests
+     */
+    private static XAQueueConnectionFactory _queueFactory = null;
+
+    /**
+     * standard xa queue connection
+     */
+    private static XAQueueConnection _xaqueueConnection = null;
+
+    /**
+     * standard xa queue connection
+     */
+    private static QueueConnection _queueConnection = null;
+
+
+    /**
+     * standard queue session created from the standard connection
+     */
+    private static QueueSession _nonXASession = null;
+
+    /**
+     * the queue name
+     */
+    private static final String QUEUENAME = "xaQueue";
+
+    /** ----------------------------------------------------------------------------------- **/
+    /**
+     * ----------------------------- JUnit support  ----------------------------------------- *
+     */
+
+    /**
+     * Gets the test suite tests
+     *
+     * @return the test suite tests
+     */
+    public static TestSuite getSuite()
+    {
+        return new TestSuite(QueueTest.class);
+    }
+
+    /**
+     * Run the test suite.
+     *
+     * @param args Any command line arguments specified to this class.
+     */
+    public static void main(String args[])
+    {
+        junit.textui.TestRunner.run(getSuite());
+    }
+
+    public void tearDown() throws Exception
+    {
+        if (!isBroker08())
+        {
+            _xaqueueConnection.close();
+            _queueConnection.close();
+        }
+        super.tearDown();
+    }
+
+    /**
+     * Initialize standard actors
+     */
+    public void init() throws Exception
+    {
+        if (!isBroker08())
+        {
+            _queue = (Queue) getInitialContext().lookup(QUEUENAME);
+            _queueFactory = getConnectionFactory();
+            _xaqueueConnection = _queueFactory.createXAQueueConnection("guest", "guest");
+            XAQueueSession session = _xaqueueConnection.createXAQueueSession();
+            _queueConnection = _queueFactory.createQueueConnection();
+            _nonXASession = _queueConnection.createQueueSession(true, Session.AUTO_ACKNOWLEDGE);
+            init(session, _queue);
+        }
+    }
+
+    /** -------------------------------------------------------------------------------------- **/
+    /** ----------------------------- Test Suite  -------------------------------------------- **/
+    /** -------------------------------------------------------------------------------------- **/
+
+    /**
+     * Strategy:
+     * Invoke start twice with the same xid on an XA resource.
+     * Check that the second
+     * invocation is throwing the expected XA exception.
+     */
+    public void testSameXID() throws Exception
+    {
+        Xid xid = getNewXid();
+        _xaResource.start(xid, XAResource.TMNOFLAGS);
+        // we now exepct this operation to fail
+        try
+        {
+            _xaResource.start(xid, XAResource.TMNOFLAGS);
+            fail("We managed to start a transaction with the same xid");
+        }
+        catch (XAException e)
+        {
+            assertEquals("Wrong error code: ", XAException.XAER_DUPID, e.errorCode);
+        }
+    }
+
+    /**
+     * Strategy:
+     * Invoke start on a XA resource with flag other than TMNOFLAGS, TMJOIN, or TMRESUME.
+     * Check that a XA Exception is thrown.
+     */
+    public void testWrongStartFlag()
+    {
+        Xid xid = getNewXid();
+        try
+        {
+            _xaResource.start(xid, XAResource.TMONEPHASE);
+            fail("We managed to start a transaction with a wrong flag");
+        }
+        catch (XAException e)
+        {
+            assertEquals("Wrong error code: ", XAException.XAER_INVAL, e.errorCode);
+        }
+    }
+
+    /**
+     * Strategy:
+     * Check that a XA exception is thrown when:
+     * A non started xid is ended
+     */
+    public void testEnd()
+    {
+        Xid xid = getNewXid();
+        try
+        {
+            _xaResource.end(xid, XAResource.TMSUCCESS);
+            fail("We managed to end a transaction before it is started");
+        }
+        catch (XAException e)
+        {
+            assertEquals("Wrong error code: ", XAException.XAER_PROTO, e.errorCode);
+        }
+    }
+
+
+    /**
+     * Strategy:
+     * Check that a XA exception is thrown when:
+     * Call forget on an unknown xid
+     * call forget on a started xid
+     * A non started xid is prepared
+     * A non ended xis is prepared
+     */
+    public void testForget()
+    {
+        Xid xid = getNewXid();
+        try
+        {
+            _xaResource.forget(xid);
+            fail("We managed to forget an unknown xid");
+        }
+        catch (XAException e)
+        {
+            // assertEquals("Wrong error code: ", XAException.XAER_NOTA, e.errorCode);
+        }
+        xid = getNewXid();
+        try
+        {
+            _xaResource.start(xid, XAResource.TMNOFLAGS);
+            _xaResource.forget(xid);
+            fail("We managed to forget a started xid");
+        }
+        catch (XAException e)
+        {
+            assertEquals("Wrong error code: ", XAException.XAER_PROTO, e.errorCode);
+        }
+    }
+
+    /**
+     * Strategy:
+     * Check that a XA exception is thrown when:
+     * A non started xid is prepared
+     * A non ended xid is prepared
+     */
+    public void testPrepare()
+    {
+        Xid xid = getNewXid();
+        try
+        {
+            _xaResource.prepare(xid);
+            fail("We managed to prepare an unknown xid");
+        }
+        catch (XAException e)
+        {
+            assertEquals("Wrong error code: ", XAException.XAER_NOTA, e.errorCode);
+        }
+        xid = getNewXid();
+        try
+        {
+            _xaResource.start(xid, XAResource.TMNOFLAGS);
+            _xaResource.prepare(xid);
+            fail("We managed to prepare a started xid");
+        }
+        catch (XAException e)
+        {
+            assertEquals("Wrong error code: ", XAException.XAER_PROTO, e.errorCode);
+        }
+    }
+
+    /**
+     * Strategy:
+     * Check that the expected XA exception is thrown when:
+     * A non started xid is committed
+     * A non ended xid is committed
+     * A non prepared xid is committed with one phase set to false.
+     * A prepared xid is committed with one phase set to true.
+     */
+    public void testCommit() throws Exception
+    {
+        Xid xid = getNewXid();
+        try
+        {
+            _xaResource.commit(xid, true);
+            fail("We managed to commit an unknown xid");
+        }
+        catch (XAException e)
+        {
+            assertEquals("Wrong error code: ", XAException.XAER_NOTA, e.errorCode);
+        }
+        xid = getNewXid();
+        try
+        {
+            _xaResource.start(xid, XAResource.TMNOFLAGS);
+            _xaResource.commit(xid, true);
+            fail("We managed to commit a not ended xid");
+        }
+        catch (XAException e)
+        {
+            assertEquals("Wrong error code: ", XAException.XAER_PROTO, e.errorCode);
+        }
+        xid = getNewXid();
+        try
+        {
+            _xaResource.start(xid, XAResource.TMNOFLAGS);
+            _xaResource.end(xid, XAResource.TMSUCCESS);
+            _xaResource.commit(xid, false);
+            fail("We managed to commit a not prepared xid");
+        }
+        catch (XAException e)
+        {
+            assertEquals("Wrong error code: ", XAException.XAER_PROTO, e.errorCode);
+        }
+        xid = getNewXid();
+        try
+        {
+            _xaResource.start(xid, XAResource.TMNOFLAGS);
+            _xaResource.end(xid, XAResource.TMSUCCESS);
+            _xaResource.prepare(xid);
+            _xaResource.commit(xid, true);
+            fail("We managed to commit a prepared xid");
+        }
+        catch (XAException e)
+        {
+            assertEquals("Wrong error code: ", XAException.XAER_PROTO, e.errorCode);
+        }
+        finally
+        {
+            _xaResource.commit(xid, false);
+        }
+    }
+
+     /**
+     * Strategy:
+     * Check that the expected XA exception is thrown when:
+     * A non started xid is rolled back
+     * A non ended xid is rolled back
+     */
+    public void testRollback()
+    {
+        Xid xid = getNewXid();
+        try
+        {
+            _xaResource.rollback(xid);
+            fail("We managed to rollback an unknown xid");
+        }
+        catch (XAException e)
+        {
+            assertEquals("Wrong error code: ", XAException.XAER_NOTA, e.errorCode);
+        }
+        xid = getNewXid();
+        try
+        {
+            _xaResource.start(xid, XAResource.TMNOFLAGS);
+            _xaResource.rollback(xid);
+            fail("We managed to rollback a not ended xid");
+        }
+        catch (XAException e)
+        {
+            assertEquals("Wrong error code: ", XAException.XAER_PROTO, e.errorCode);
+        }
+    }
+
+    /**
+     * Strategy:
+     * Check that the timeout is set correctly
+     */
+    public void testTransactionTimeoutvalue() throws Exception
+    {
+        Xid xid = getNewXid();
+        _xaResource.start(xid, XAResource.TMNOFLAGS);
+        assertEquals("Wrong timeout", _xaResource.getTransactionTimeout(), 0);
+        _xaResource.setTransactionTimeout(1000);
+        assertEquals("Wrong timeout", _xaResource.getTransactionTimeout(), 1000);
+        _xaResource.end(xid, XAResource.TMSUCCESS);
+        xid = getNewXid();
+        _xaResource.start(xid, XAResource.TMNOFLAGS);
+        assertEquals("Wrong timeout", _xaResource.getTransactionTimeout(), 0);
+    }
+
+    /**
+     * Strategy:
+     * Check that a transaction timeout as expected
+     * - set timeout to 10ms
+     * - sleep 1000ms
+     * - call end and check that the expected exception is thrown
+     */
+    public void testTransactionTimeout() throws Exception
+    {
+        Xid xid = getNewXid();
+        try
+        {
+            _xaResource.start(xid, XAResource.TMNOFLAGS);
+            assertEquals("Wrong timeout", _xaResource.getTransactionTimeout(), 0);
+            _xaResource.setTransactionTimeout(10);
+            Thread.sleep(1000);
+            _xaResource.end(xid, XAResource.TMSUCCESS);
+        }
+        catch (XAException e)
+        {
+            assertEquals("Wrong error code: ", XAException.XA_RBTIMEOUT, e.errorCode);
+        }
+    }
+
+}

Added: incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/xa/QueueTest.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/xa/QueueTest.java?rev=676969&view=auto
==============================================================================
--- incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/xa/QueueTest.java (added)
+++ incubator/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/xa/QueueTest.java Tue Jul 15 09:58:26 2008
@@ -0,0 +1,657 @@
+/* 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.unit.xa;
+
+import javax.jms.*;
+import javax.transaction.xa.XAResource;
+import javax.transaction.xa.Xid;
+import javax.transaction.xa.XAException;
+
+import junit.framework.TestSuite;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class QueueTest extends AbstractXATestCase
+{
+    /* this clas logger */
+    private static final Logger _logger = LoggerFactory.getLogger(QueueTest.class);
+
+    /**
+     * the queue use by all the tests
+     */
+    private static Queue _queue = null;
+    /**
+     * the queue connection factory used by all tests
+     */
+    private static XAQueueConnectionFactory _queueFactory = null;
+
+    /**
+     * standard xa queue connection
+     */
+    private static XAQueueConnection _xaqueueConnection= null;
+
+    /**
+     * standard xa queue connection
+     */
+    private static QueueConnection _queueConnection=null;
+
+
+    /**
+     * standard queue session created from the standard connection
+     */
+    private static QueueSession _nonXASession = null;
+
+    /**
+     * the queue name
+     */
+    private static final String QUEUENAME = "xaQueue";
+
+    /** ----------------------------------------------------------------------------------- **/
+    /**
+     * ----------------------------- JUnit support  ----------------------------------------- *
+     */
+
+    /**
+     * Gets the test suite tests
+     *
+     * @return the test suite tests
+     */
+    public static TestSuite getSuite()
+    {
+        return new TestSuite(QueueTest.class);
+    }
+
+    /**
+     * Run the test suite.
+     *
+     * @param args Any command line arguments specified to this class.
+     */
+    public static void main(String args[])
+    {
+        junit.textui.TestRunner.run(getSuite());
+    }
+
+    public void tearDown() throws Exception
+    {
+        if (!isBroker08())
+        {
+            try
+            {
+                _xaqueueConnection.close();
+                _queueConnection.close();
+            }
+            catch (Exception e)
+            {
+                fail("Exception thrown when cleaning standard connection: " + e.getStackTrace());
+            }
+        }
+        super.tearDown();
+    }
+
+    /**
+     * Initialize standard actors
+     */
+    public void init()
+    {
+        if (!isBroker08())
+        {
+            // lookup test queue
+            try
+            {
+                _queue = (Queue) getInitialContext().lookup(QUEUENAME);
+            }
+            catch (Exception e)
+            {
+                fail("cannot lookup test queue " + e.getMessage());
+            }
+
+            // lookup connection factory
+            try
+            {
+                _queueFactory = getConnectionFactory();
+            }
+            catch (Exception e)
+            {
+                fail("enable to lookup connection factory ");
+            }
+            // create standard connection
+            try
+            {
+                _xaqueueConnection= getNewQueueXAConnection();
+            }
+            catch (JMSException e)
+            {
+                fail("cannot create queue connection: " + e.getMessage());
+            }
+            // create xa session
+            XAQueueSession session = null;
+            try
+            {
+                session = _xaqueueConnection.createXAQueueSession();
+            }
+            catch (JMSException e)
+            {
+                fail("cannot create queue session: " + e.getMessage());
+            }
+            // create a standard session
+            try
+            {
+                _queueConnection = _queueFactory.createQueueConnection();
+                _nonXASession = _queueConnection.createQueueSession(true, Session.AUTO_ACKNOWLEDGE);
+            }
+            catch (JMSException e)
+            {
+                fail("cannot create queue session: " + e.getMessage());
+            }
+            init(session, _queue);
+        }
+    }
+
+    /** -------------------------------------------------------------------------------------- **/
+    /** ----------------------------- Test Suite  -------------------------------------------- **/
+    /** -------------------------------------------------------------------------------------- **/
+
+    /**
+     * Uses two transactions respectively with xid1 and xid2 that are used to send a message
+     * within xid1 and xid2.  xid2 is committed and xid1 is used to receive the message that was sent within xid2.
+     * Xid is then committed and a standard transaction is used to receive the message that was sent within xid1.
+     */
+    public void testProducer()
+    {
+        if (!isBroker08())
+        {
+            _logger.debug("running testProducer");
+            Xid xid1 = getNewXid();
+            Xid xid2 = getNewXid();
+            // start the xaResource for xid1
+            try
+            {
+                _xaResource.start(xid1, XAResource.TMNOFLAGS);
+            }
+            catch (XAException e)
+            {
+                e.printStackTrace();
+                fail("cannot start the transaction with xid1: " + e.getMessage());
+            }
+            try
+            {
+                // start the connection
+                _xaqueueConnection.start();
+                // produce a message with sequence number 1
+                _message.setLongProperty(_sequenceNumberPropertyName, 1);
+                _producer.send(_message);
+            }
+            catch (JMSException e)
+            {
+                fail(" cannot send persistent message: " + e.getMessage());
+            }
+            // suspend the transaction
+            try
+            {
+                _xaResource.end(xid1, XAResource.TMSUSPEND);
+            }
+            catch (XAException e)
+            {
+                fail("Cannot end the transaction with xid1: " + e.getMessage());
+            }
+            // start the xaResource for xid2
+            try
+            {
+                _xaResource.start(xid2, XAResource.TMNOFLAGS);
+            }
+            catch (XAException e)
+            {
+                fail("cannot start the transaction with xid2: " + e.getMessage());
+            }
+            try
+            {
+                // produce a message
+                _message.setLongProperty(_sequenceNumberPropertyName, 2);
+                _producer.send(_message);
+            }
+            catch (JMSException e)
+            {
+                fail(" cannot send second persistent message: " + e.getMessage());
+            }
+            // end xid2 and start xid1
+            try
+            {
+                _xaResource.end(xid2, XAResource.TMSUCCESS);
+                _xaResource.start(xid1, XAResource.TMRESUME);
+            }
+            catch (XAException e)
+            {
+                fail("Exception when ending and starting transactions: " + e.getMessage());
+            }
+            // two phases commit transaction with xid2
+            try
+            {
+                int resPrepare = _xaResource.prepare(xid2);
+                if (resPrepare != XAResource.XA_OK)
+                {
+                    fail("prepare returned: " + resPrepare);
+                }
+                _xaResource.commit(xid2, false);
+            }
+            catch (XAException e)
+            {
+                fail("Exception thrown when preparing transaction with xid2: " + e.getMessage());
+            }
+            // receive a message from queue test we expect it to be the second one
+            try
+            {
+                TextMessage message = (TextMessage) _consumer.receive(1000);
+                if (message == null)
+                {
+                    fail("did not receive second message as expected ");
+                }
+                else
+                {
+                    if (message.getLongProperty(_sequenceNumberPropertyName) != 2)
+                    {
+                        fail("receive wrong message its sequence number is: " + message
+                                .getLongProperty(_sequenceNumberPropertyName));
+                    }
+                }
+            }
+            catch (JMSException e)
+            {
+                fail("Exception when receiving second message: " + e.getMessage());
+            }
+            // end and one phase commit the first transaction
+            try
+            {
+                _xaResource.end(xid1, XAResource.TMSUCCESS);
+                _xaResource.commit(xid1, true);
+            }
+            catch (XAException e)
+            {
+                fail("Exception thrown when commiting transaction with xid1");
+            }
+            // We should now be able to receive the first message
+            try
+            {
+                _xaqueueConnection.close();
+                Session nonXASession = _nonXASession;
+                MessageConsumer nonXAConsumer = nonXASession.createConsumer(_queue);
+                _queueConnection.start();
+                TextMessage message1 = (TextMessage) nonXAConsumer.receive(1000);
+                if (message1 == null)
+                {
+                    fail("did not receive first message as expected ");
+                }
+                else
+                {
+                    if (message1.getLongProperty(_sequenceNumberPropertyName) != 1)
+                    {
+                        fail("receive wrong message its sequence number is: " + message1
+                                .getLongProperty(_sequenceNumberPropertyName));
+                    }
+                }
+                // commit that transacted session
+                nonXASession.commit();
+                // the queue should be now empty
+                message1 = (TextMessage) nonXAConsumer.receive(1000);
+                if (message1 != null)
+                {
+                    fail("receive an unexpected message ");
+                }
+            }
+            catch (JMSException e)
+            {
+                fail("Exception thrown when emptying the queue: " + e.getMessage());
+            }
+        }
+    }
+
+    /**
+     * strategy: Produce a message within Tx1 and prepare tx1. crash the server then commit tx1 and consume the message
+     */
+    public void testSendAndRecover()
+    {
+        if (!isBroker08())
+        {
+            _logger.debug("running testSendAndRecover");
+            Xid xid1 = getNewXid();
+            // start the xaResource for xid1
+            try
+            {
+                _xaResource.start(xid1, XAResource.TMNOFLAGS);
+            }
+            catch (XAException e)
+            {
+                fail("cannot start the transaction with xid1: " + e.getMessage());
+            }
+            try
+            {
+                // start the connection
+                _xaqueueConnection.start();
+                // produce a message with sequence number 1
+                _message.setLongProperty(_sequenceNumberPropertyName, 1);
+                _producer.send(_message);
+            }
+            catch (JMSException e)
+            {
+                fail(" cannot send persistent message: " + e.getMessage());
+            }
+            // suspend the transaction
+            try
+            {
+                _xaResource.end(xid1, XAResource.TMSUCCESS);
+            }
+            catch (XAException e)
+            {
+                fail("Cannot end the transaction with xid1: " + e.getMessage());
+            }
+            // prepare the transaction with xid1
+            try
+            {
+                _xaResource.prepare(xid1);
+            }
+            catch (XAException e)
+            {
+                fail("Exception when preparing xid1: " + e.getMessage());
+            }
+
+            /////// stop the server now !!
+            try
+            {
+                _logger.debug("stopping broker");
+                shutdownServer();
+                init();
+            }
+            catch (Exception e)
+            {
+                fail("Exception when stopping and restarting the server");
+            }
+
+            // get the list of in doubt transactions
+            try
+            {
+                Xid[] inDoubt = _xaResource.recover(XAResource.TMSTARTRSCAN);
+                if (inDoubt == null)
+                {
+                    fail("the array of in doubt transactions should not be null ");
+                }
+                // At that point we expect only two indoubt transactions:
+                if (inDoubt.length != 1)
+                {
+                    fail("in doubt transaction size is diffenrent thatn 2, there are " + inDoubt.length + "in doubt transactions");
+                }
+
+                // commit them
+                for (Xid anInDoubt : inDoubt)
+                {
+                    if (anInDoubt.equals(xid1))
+                    {
+                        System.out.println("commit xid1 ");
+                        try
+                        {
+                            _xaResource.commit(anInDoubt, false);
+                        }
+                        catch (Exception e)
+                        {
+                            System.out.println("PB when aborted xid1");
+                        }
+                    }
+                    else
+                    {
+                        fail("did not receive right xid ");
+                    }
+                }
+            }
+            catch (XAException e)
+            {
+                e.printStackTrace();
+                fail("exception thrown when recovering transactions " + e.getMessage());
+            }
+            // the queue should contain the first message!
+            try
+            {
+                _xaqueueConnection.close();
+                Session nonXASession = _nonXASession;
+                MessageConsumer nonXAConsumer = nonXASession.createConsumer(_queue);
+                _queueConnection.start();
+                TextMessage message1 = (TextMessage) nonXAConsumer.receive(1000);
+
+                if (message1 == null)
+                {
+                    fail("queue does not contain any message!");
+                }
+                if (message1.getLongProperty(_sequenceNumberPropertyName) != 1)
+                {
+                    fail("Wrong message returned! Sequence number is " + message1
+                            .getLongProperty(_sequenceNumberPropertyName));
+                }
+                nonXASession.commit();
+            }
+            catch (JMSException e)
+            {
+                fail("Exception thrown when testin that queue test is not empty: " + e.getMessage());
+            }
+        }
+    }
+
+    /**
+     * strategy: Produce a message within Tx1 and prepare tx1. Produce a standard message and consume
+     * it within tx2 and prepare tx2. Shutdown the server and get the list of in doubt transactions:
+     * we expect tx1 and tx2! Then, Tx1 is aborted and tx2 is committed so we expect the test's queue to be empty!
+     */
+    public void testRecover()
+    {
+        if (!isBroker08())
+        {
+            _logger.debug("running testRecover");
+            Xid xid1 = getNewXid();
+            Xid xid2 = getNewXid();
+            // start the xaResource for xid1
+            try
+            {
+                _xaResource.start(xid1, XAResource.TMNOFLAGS);
+            }
+            catch (XAException e)
+            {
+                fail("cannot start the transaction with xid1: " + e.getMessage());
+            }
+            try
+            {
+                // start the connection
+                _xaqueueConnection.start();
+                // produce a message with sequence number 1
+                _message.setLongProperty(_sequenceNumberPropertyName, 1);
+                _producer.send(_message);
+            }
+            catch (JMSException e)
+            {
+                fail(" cannot send persistent message: " + e.getMessage());
+            }
+            // suspend the transaction
+            try
+            {
+                _xaResource.end(xid1, XAResource.TMSUCCESS);
+            }
+            catch (XAException e)
+            {
+                fail("Cannot end the transaction with xid1: " + e.getMessage());
+            }
+            // prepare the transaction with xid1
+            try
+            {
+                _xaResource.prepare(xid1);
+            }
+            catch (XAException e)
+            {
+                fail("Exception when preparing xid1: " + e.getMessage());
+            }
+
+            // send a message using the standard session
+            try
+            {
+                Session nonXASession = _nonXASession;
+                MessageProducer nonXAProducer = nonXASession.createProducer(_queue);
+                TextMessage message2 = nonXASession.createTextMessage();
+                message2.setText("non XA ");
+                message2.setLongProperty(_sequenceNumberPropertyName, 2);
+                nonXAProducer.setDeliveryMode(DeliveryMode.PERSISTENT);
+                nonXAProducer.send(message2);
+                // commit that transacted session
+                nonXASession.commit();
+            }
+            catch (Exception e)
+            {
+                fail("Exception thrown when emptying the queue: " + e.getMessage());
+            }
+            // start the xaResource for xid2
+            try
+            {
+                _xaResource.start(xid2, XAResource.TMNOFLAGS);
+            }
+            catch (XAException e)
+            {
+                fail("cannot start the transaction with xid1: " + e.getMessage());
+            }
+            // receive a message from queue test we expect it to be the second one
+            try
+            {
+                TextMessage message = (TextMessage) _consumer.receive(1000);
+                if (message == null || message.getLongProperty(_sequenceNumberPropertyName) != 2)
+                {
+                    fail("did not receive second message as expected ");
+                }
+            }
+            catch (JMSException e)
+            {
+                fail("Exception when receiving second message: " + e.getMessage());
+            }
+            // suspend the transaction
+            try
+            {
+                _xaResource.end(xid2, XAResource.TMSUCCESS);
+            }
+            catch (XAException e)
+            {
+                fail("Cannot end the transaction with xid2: " + e.getMessage());
+            }
+            // prepare the transaction with xid1
+            try
+            {
+                _xaResource.prepare(xid2);
+            }
+            catch (XAException e)
+            {
+                fail("Exception when preparing xid2: " + e.getMessage());
+            }
+
+            /////// stop the server now !!
+            try
+            {
+                _logger.debug("stopping broker");
+                shutdownServer();
+                init();
+            }
+            catch (Exception e)
+            {
+                fail("Exception when stopping and restarting the server");
+            }
+
+            // get the list of in doubt transactions
+            try
+            {
+                Xid[] inDoubt = _xaResource.recover(XAResource.TMSTARTRSCAN);
+                if (inDoubt == null)
+                {
+                    fail("the array of in doubt transactions should not be null ");
+                }
+                // At that point we expect only two indoubt transactions:
+                if (inDoubt.length != 2)
+                {
+                    fail("in doubt transaction size is diffenrent thatn 2, there are " + inDoubt.length + "in doubt transactions");
+                }
+
+                // commit them
+                for (Xid anInDoubt : inDoubt)
+                {
+                    if (anInDoubt.equals(xid1))
+                    {
+                         _logger.debug("rollback xid1 ");
+                        try
+                        {
+                            _xaResource.rollback(anInDoubt);
+                        }
+                        catch (Exception e)
+                        {
+                            System.out.println("PB when aborted xid1");
+                        }
+                    }
+                    else if (anInDoubt.equals(xid2))
+                    {
+                        _logger.debug("commit xid2 ");
+                        try
+                        {
+                            _xaResource.commit(anInDoubt, false);
+                        }
+                        catch (Exception e)
+                        {
+                            System.out.println("PB when commiting xid2");
+                        }
+                    }
+                }
+            }
+            catch (XAException e)
+            {
+                e.printStackTrace();
+                fail("exception thrown when recovering transactions " + e.getMessage());
+            }
+            // the queue should be empty
+            try
+            {
+                _xaqueueConnection.close();
+                Session nonXASession = _nonXASession;
+                MessageConsumer nonXAConsumer = nonXASession.createConsumer(_queue);
+                _queueConnection.start();
+                TextMessage message1 = (TextMessage) nonXAConsumer.receive(1000);
+                if (message1 != null)
+                {
+                    fail("The queue is not empty! ");
+                }
+            }
+            catch (JMSException e)
+            {
+                fail("Exception thrown when testin that queue test is empty: " + e.getMessage());
+            }
+        }
+    }
+
+    /** -------------------------------------------------------------------------------------- **/
+    /** ----------------------------- Utility methods  --------------------------------------- **/
+    /** -------------------------------------------------------------------------------------- **/
+
+    /**
+     * get a new queue connection
+     *
+     * @return a new queue connection
+     * @throws JMSException If the JMS provider fails to create the queue connection
+     *                      due to some internal error or in case of authentication failure
+     */
+    private XAQueueConnection getNewQueueXAConnection() throws JMSException
+    {
+        return _queueFactory.createXAQueueConnection("guest", "guest");
+    }
+
+
+}