Author: rupertlssmith
Date: Tue Jun 26 04:03:04 2007
New Revision: 550773

URL: http://svn.apache.org/viewvc?view=rev&rev=550773
Log:
Immediate and mandatory flag tests added.

Modified:
    
incubator/qpid/branches/M2/java/systests/src/main/java/org/apache/qpid/server/exchange/ImmediateMessageTest.java
    
incubator/qpid/branches/M2/java/systests/src/main/java/org/apache/qpid/server/exchange/MandatoryMessageTest.java

Modified: 
incubator/qpid/branches/M2/java/systests/src/main/java/org/apache/qpid/server/exchange/ImmediateMessageTest.java
URL: 
http://svn.apache.org/viewvc/incubator/qpid/branches/M2/java/systests/src/main/java/org/apache/qpid/server/exchange/ImmediateMessageTest.java?view=diff&rev=550773&r1=550772&r2=550773
==============================================================================
--- 
incubator/qpid/branches/M2/java/systests/src/main/java/org/apache/qpid/server/exchange/ImmediateMessageTest.java
 (original)
+++ 
incubator/qpid/branches/M2/java/systests/src/main/java/org/apache/qpid/server/exchange/ImmediateMessageTest.java
 Tue Jun 26 04:03:04 2007
@@ -27,8 +27,8 @@
 import org.apache.qpid.client.AMQNoConsumersException;
 import org.apache.qpid.client.AMQSession;
 import org.apache.qpid.client.transport.TransportConnection;
-import org.apache.qpid.server.registry.ApplicationRegistry;
 import static org.apache.qpid.server.exchange.MessagingTestConfigProperties.*;
+import org.apache.qpid.server.registry.ApplicationRegistry;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -41,8 +41,11 @@
 import javax.naming.InitialContext;
 import javax.naming.NamingException;
 
+import java.io.PrintWriter;
+import java.io.StringWriter;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.concurrent.atomic.AtomicLong;
 
 /**
  * ImmediateMessageTest tests for the desired behaviour of immediate messages. 
Immediate messages are a non-JMS
@@ -58,6 +61,10 @@
  *          connected.
  * <tr><td> Check that an immediate message results in no consumers code, upon 
transaction commit, when a consumer is
  *          connected.
+ * <tr><td> Check that an immediate message results in no consumers code, not 
using transactions, when a consumer is
+ *          disconnected.
+ * <tr><dt> Check that an immediate message results in no consumers code, in a 
transaction, when a consumer is
+ *          disconnected.
  * </table>
  *
  * @todo Write a test decorator, the sole function of which is to populate 
test context properties, from sys properties,
@@ -73,63 +80,209 @@
     private static final Logger log = 
LoggerFactory.getLogger(ImmediateMessageTest.class);
 
     /** Used to read the tests configurable properties through. */
-    ParsedProperties testProps = 
TestContextProperties.getInstance(MessagingTestConfigProperties.defaults);
+    ParsedProperties testProps;
+
+    /** Used to create unique destination names for each test.
+     * @todo Move into the test framework.
+     */
+    private static AtomicLong uniqueDestsId = new AtomicLong();
+
+    /** Check that an immediate message is sent succesfully not using 
transactions when a consumer is connected. */
+    public void test_QPID_517_ImmediateOkNoTxP2P() throws Exception
+    {
+        // Ensure transactional sessions are off.
+        testProps.setProperty(TRANSACTED_PROPNAME, false);
+        testProps.setProperty(PUBSUB_PROPNAME, false);
+
+        PublisherReceiver testClients = 
PublisherReceiverImpl.connectClients(testProps);
+
+        // Send one message with no errors.
+        testClients.testNoExceptions(testProps);
+    }
+
+    /** Check that an immediate message is committed succesfully in a 
transaction when a consumer is connected. */
+    public void test_QPID_517_ImmediateOkTxP2P() throws Exception
+    {
+        // Ensure transactional sessions are off.
+        testProps.setProperty(TRANSACTED_PROPNAME, true);
+        testProps.setProperty(PUBSUB_PROPNAME, false);
+
+        PublisherReceiver testClients = 
PublisherReceiverImpl.connectClients(testProps);
+
+        // Send one message with no errors.
+        testClients.testNoExceptions(testProps);
+    }
+
+    /** Check that an immediate message results in no consumers code, not 
using transactions, when no consumer is connected. */
+    public void test_QPID_517_ImmediateFailsNoConsumerNoTxP2P() throws 
Exception
+    {
+        // Ensure transactional sessions are off.
+        testProps.setProperty(TRANSACTED_PROPNAME, false);
+        testProps.setProperty(PUBSUB_PROPNAME, false);
+
+        // Set up the messaging topology so that only the publishers producer 
is bound (do not set up the receiver to
+        // collect its messages).
+        testProps.setProperty(RECEIVER_CONSUMER_BIND_PROPNAME, false);
+
+        PublisherReceiver testClients = 
PublisherReceiverImpl.connectClients(testProps);
+
+        // Send one message and get a linked no consumers exception.
+        testClients.testWithAssertions(testProps, 
AMQNoConsumersException.class);
+    }
 
-    /** All these tests should have the immediate flag on. */
-    private boolean immediateFlag = testProps.setProperty(IMMEDIATE_PROPNAME, 
true);
+    /** Check that an immediate message results in no consumers code, upon 
transaction commit, when a consumer is connected. */
+    public void test_QPID_517_ImmediateFailsNoConsumerTxP2P() throws Exception
+    {
+        // Ensure transactional sessions are on.
+        testProps.setProperty(TRANSACTED_PROPNAME, true);
+        testProps.setProperty(PUBSUB_PROPNAME, false);
+
+        // Set up the messaging topology so that only the publishers producer 
is bound (do not set up the receiver to
+        // collect its messages).
+        testProps.setProperty(RECEIVER_CONSUMER_BIND_PROPNAME, false);
+
+        PublisherReceiver testClients = 
PublisherReceiverImpl.connectClients(testProps);
+
+        // Send one message and get a linked no consumers exception.
+        testClients.testWithAssertions(testProps, 
AMQNoConsumersException.class);
+    }
+
+    /** Check that an immediate message results in no consumers code, not 
using transactions, when a consumer is disconnected. */
+    public void test_QPID_517_ImmediateFailsConsumerDisconnectedNoTxP2P() 
throws Exception
+    {
+        // Ensure transactional sessions are off.
+        testProps.setProperty(TRANSACTED_PROPNAME, false);
+        testProps.setProperty(PUBSUB_PROPNAME, false);
+
+        PublisherReceiver testClients = 
PublisherReceiverImpl.connectClients(testProps);
+
+        // Disconnect the consumer.
+        testClients.getReceiver().getConsumer().close();
+
+        // Send one message and get a linked no consumers exception.
+        testClients.testWithAssertions(testProps, 
AMQNoConsumersException.class);
+    }
+
+    /** Check that an immediate message results in no consumers code, in a 
transaction, when a consumer is disconnected. */
+    public void test_QPID_517_ImmediateFailsConsumerDisconnectedTxP2P() throws 
Exception
+    {
+        // Ensure transactional sessions are on.
+        testProps.setProperty(TRANSACTED_PROPNAME, true);
+        testProps.setProperty(PUBSUB_PROPNAME, false);
+
+        PublisherReceiver testClients = 
PublisherReceiverImpl.connectClients(testProps);
+
+        // Disconnect the consumer.
+        testClients.getReceiver().getConsumer().close();
+
+        // Send one message and get a linked no consumers exception.
+        testClients.testWithAssertions(testProps, 
AMQNoConsumersException.class);
+    }
 
     /** Check that an immediate message is sent succesfully not using 
transactions when a consumer is connected. */
-    public void test_QPID_517_ImmediateOkNoTx() throws Exception
+    public void test_QPID_517_ImmediateOkNoTxPubSub() throws Exception
     {
         // Ensure transactional sessions are off.
         testProps.setProperty(TRANSACTED_PROPNAME, false);
+        testProps.setProperty(PUBSUB_PROPNAME, true);
+
+        PublisherReceiver testClients = 
PublisherReceiverImpl.connectClients(testProps);
 
         // Send one message with no errors.
-        PublisherReceiverImpl.testNoExceptions(testProps);
+        testClients.testNoExceptions(testProps);
     }
 
     /** Check that an immediate message is committed succesfully in a 
transaction when a consumer is connected. */
-    public void test_QPID_517_ImmediateOkTx() throws Exception
+    public void test_QPID_517_ImmediateOkTxPubSub() throws Exception
     {
         // Ensure transactional sessions are off.
         testProps.setProperty(TRANSACTED_PROPNAME, true);
+        testProps.setProperty(PUBSUB_PROPNAME, true);
+
+        PublisherReceiver testClients = 
PublisherReceiverImpl.connectClients(testProps);
 
         // Send one message with no errors.
-        PublisherReceiverImpl.testNoExceptions(testProps);
+        testClients.testNoExceptions(testProps);
     }
 
     /** Check that an immediate message results in no consumers code, not 
using transactions, when no consumer is connected. */
-    public void test_QPID_517_ImmediateFailsNoConsumerNoTx() throws Exception
+    public void test_QPID_517_ImmediateFailsNoConsumerNoTxPubSub() throws 
Exception
     {
         // Ensure transactional sessions are off.
         testProps.setProperty(TRANSACTED_PROPNAME, false);
+        testProps.setProperty(PUBSUB_PROPNAME, true);
 
         // Set up the messaging topology so that only the publishers producer 
is bound (do not set up the receiver to
         // collect its messages).
         testProps.setProperty(RECEIVER_CONSUMER_BIND_PROPNAME, false);
 
+        PublisherReceiver testClients = 
PublisherReceiverImpl.connectClients(testProps);
+
         // Send one message and get a linked no consumers exception.
-        PublisherReceiverImpl.testWithAssertions(testProps, 
AMQNoConsumersException.class);
+        testClients.testWithAssertions(testProps, 
AMQNoConsumersException.class);
     }
 
     /** Check that an immediate message results in no consumers code, upon 
transaction commit, when a consumer is connected. */
-    public void test_QPID_517_ImmediateFailsNoConsumerTx() throws Exception
+    public void test_QPID_517_ImmediateFailsNoConsumerTxPubSub() throws 
Exception
     {
         // Ensure transactional sessions are on.
         testProps.setProperty(TRANSACTED_PROPNAME, true);
+        testProps.setProperty(PUBSUB_PROPNAME, true);
 
         // Set up the messaging topology so that only the publishers producer 
is bound (do not set up the receiver to
         // collect its messages).
         testProps.setProperty(RECEIVER_CONSUMER_BIND_PROPNAME, false);
 
+        PublisherReceiver testClients = 
PublisherReceiverImpl.connectClients(testProps);
+
         // Send one message and get a linked no consumers exception.
-        PublisherReceiverImpl.testWithAssertions(testProps, 
AMQNoConsumersException.class);
+        testClients.testWithAssertions(testProps, 
AMQNoConsumersException.class);
+    }
+
+    /** Check that an immediate message results in no consumers code, not 
using transactions, when a consumer is disconnected. */
+    public void test_QPID_517_ImmediateFailsConsumerDisconnectedNoTxPubSub() 
throws Exception
+    {
+        // Ensure transactional sessions are off.
+        testProps.setProperty(TRANSACTED_PROPNAME, false);
+        testProps.setProperty(PUBSUB_PROPNAME, true);
+
+        PublisherReceiver testClients = 
PublisherReceiverImpl.connectClients(testProps);
+
+        // Disconnect the consumer.
+        testClients.getReceiver().getConsumer().close();
+
+        // Send one message and get a linked no consumers exception.
+        testClients.testWithAssertions(testProps, 
AMQNoConsumersException.class);
+    }
+
+    /** Check that an immediate message results in no consumers code, in a 
transaction, when a consumer is disconnected. */
+    public void test_QPID_517_ImmediateFailsConsumerDisconnectedTxPubSub() 
throws Exception
+    {
+        // Ensure transactional sessions are on.
+        testProps.setProperty(TRANSACTED_PROPNAME, true);
+        testProps.setProperty(PUBSUB_PROPNAME, true);
+
+        PublisherReceiver testClients = 
PublisherReceiverImpl.connectClients(testProps);
+
+        // Disconnect the consumer.
+        testClients.getReceiver().getConsumer().close();
+
+        // Send one message and get a linked no consumers exception.
+        testClients.testWithAssertions(testProps, 
AMQNoConsumersException.class);
     }
 
     protected void setUp() throws Exception
     {
         NDC.push(getName());
 
+        testProps = 
TestContextProperties.getInstance(MessagingTestConfigProperties.defaults);
+
+        /** All these tests should have the immediate flag on. */
+        testProps.setProperty(IMMEDIATE_PROPNAME, true);
+
+        /** Bind the receivers consumer by default. */
+        testProps.setProperty(RECEIVER_CONSUMER_BIND_PROPNAME, true);
+
         // Ensure that the in-vm broker is created.
         TransportConnection.createVMBroker(1);
     }
@@ -220,10 +373,56 @@
             return false;
         }
 
+        /**
+         * Reports the number of exceptions held by this monitor.
+         *
+         * @return The number of exceptions held by this monitor.
+         */
+        public int size()
+        {
+            return exceptions.size();
+        }
+
         public void reset()
         {
             exceptions = new ArrayList();
         }
+
+        /**
+         * Provides a dump of the stack traces of all exceptions that this 
exception monitor was notified of. Mainly
+         * use for debugging/test failure reporting purposes.
+         *
+         * @return A string containing a dump of the stack traces of all 
exceptions.
+         */
+        public String toString()
+        {
+            String result = "ExceptionMonitor: holds " + exceptions.size() + " 
exceptions.\n\n";
+
+            for (JMSException ex : exceptions)
+            {
+                result += getStackTrace(ex) + "\n";
+            }
+
+            return result;
+        }
+
+        /**
+         * Prints an exception stack trace into a string.
+         *
+         * @param t The throwable to get the stack trace from.
+         *
+         * @return A string containing the throwables stack trace.
+         */
+        public static String getStackTrace(Throwable t)
+        {
+            StringWriter sw = new StringWriter();
+            PrintWriter pw = new PrintWriter(sw, true);
+            t.printStackTrace(pw);
+            pw.flush();
+            sw.flush();
+
+            return sw.toString();
+        }
     }
 
     /**
@@ -290,14 +489,21 @@
     {
         try
         {
-            int ackMode = 
messagingProps.getPropertyAsInteger(ACK_MODE_PROPNAME);
-            boolean useTopics = 
messagingProps.getPropertyAsBoolean(PUBSUB_PROPNAME);
-            String destinationSendRoot = 
messagingProps.getProperty(SEND_DESTINATION_NAME_ROOT_PROPNAME);
-            String destinationReceiveRoot = 
messagingProps.getProperty(RECEIVE_DESTINATION_NAME_ROOT_PROPNAME);
+            // Get a unique offset to append to destination names to make them 
unique to the connection.
+            long uniqueId = uniqueDestsId.incrementAndGet();
+
+            // Extract the standard test configuration parameters relevant to 
the connection.
+            String destinationSendRoot = 
messagingProps.getProperty(SEND_DESTINATION_NAME_ROOT_PROPNAME) + "_" + 
uniqueId;
+            String destinationReceiveRoot =
+                
messagingProps.getProperty(RECEIVE_DESTINATION_NAME_ROOT_PROPNAME) + "_" + 
uniqueId;
             boolean createPublisherProducer = 
messagingProps.getPropertyAsBoolean(PUBLISHER_PRODUCER_BIND_PROPNAME);
             boolean createPublisherConsumer = 
messagingProps.getPropertyAsBoolean(PUBLISHER_CONSUMER_BIND_PROPNAME);
             boolean createReceiverProducer = 
messagingProps.getPropertyAsBoolean(RECEIVER_PRODUCER_BIND_PROPNAME);
             boolean createReceiverConsumer = 
messagingProps.getPropertyAsBoolean(RECEIVER_CONSUMER_BIND_PROPNAME);
+
+            // Check which JMS flags and options are to be set.
+            int ackMode = 
messagingProps.getPropertyAsInteger(ACK_MODE_PROPNAME);
+            boolean useTopics = 
messagingProps.getPropertyAsBoolean(PUBSUB_PROPNAME);
             boolean transactional = 
messagingProps.getPropertyAsBoolean(TRANSACTED_PROPNAME);
 
             // Check if any Qpid/AMQP specific flags or options need to be set.
@@ -428,12 +634,12 @@
 
         public MessageProducer getProducer()
         {
-            return null;
+            return producer;
         }
 
         public MessageConsumer getConsumer()
         {
-            return null;
+            return consumer;
         }
 
         public void send(Message message) throws JMSException
@@ -524,6 +730,10 @@
 
         public ExceptionMonitor getExceptionMonitor();
 
+        public void testWithAssertions(ParsedProperties testProps, Class 
aClass /*, assertions */);
+
+        public void testNoExceptions(ParsedProperties testProps);
+
         public void close();
     }
 
@@ -603,61 +813,64 @@
             }
         }
 
-        public static void testWithAssertions(ParsedProperties testProps, 
Class aClass /*, assertions */)
+        public void testWithAssertions(ParsedProperties testProps, Class 
aClass /*, assertions */)
         {
-            PublisherReceiver testClients;
-
-            // Create a standard publisher/receiver test client pair on a 
shared connection, individual sessions.
-            testClients = 
createPublisherReceiverPairSharedConnection(testProps);
-            testClients.start();
-
-            testClients.send(testProps, 1);
-
+            start();
+            send(testProps, 1);
             pause(1000L);
 
             String errors = "";
 
-            if 
(!testClients.getConnectionExceptionMonitor().assertOneJMSExceptionWithLinkedCause(aClass))
+            ExceptionMonitor connectionExceptionMonitor = 
getConnectionExceptionMonitor();
+            if 
(!connectionExceptionMonitor.assertOneJMSExceptionWithLinkedCause(aClass))
             {
-                errors += "Was expecting linked exception type " + 
aClass.getName() + ".\n";
+                errors += "Was expecting linked exception type " + 
aClass.getName() + " on the connection.\n";
+                errors +=
+                    (connectionExceptionMonitor.size() > 0)
+                    ? ("Actually got the following exceptions on the 
connection, " + connectionExceptionMonitor)
+                    : "Got no exceptions on the connection.";
             }
 
             // Clean up the publisher/receiver client pair.
-            testClients.close();
+            close();
 
             assertEquals(errors, "", errors);
         }
 
         /**
          */
-        public static void testNoExceptions(ParsedProperties testProps)
+        public void testNoExceptions(ParsedProperties testProps)
         {
-            PublisherReceiver testClients;
-
-            // Create a standard publisher/receiver test client pair on a 
shared connection, individual sessions.
-            testClients = 
createPublisherReceiverPairSharedConnection(testProps);
-            testClients.start();
-
-            testClients.send(testProps, 1);
-
+            start();
+            send(testProps, 1);
             pause(1000L);
 
             String errors = "";
 
-            if 
(!testClients.getConnectionExceptionMonitor().assertNoExceptions())
+            if (!getConnectionExceptionMonitor().assertNoExceptions())
             {
-                errors += "There were connection exceptions.\n";
+                errors += "Was expecting no exceptions.\n";
+                errors += "Got the following exceptions on the connection, " + 
getConnectionExceptionMonitor();
             }
 
-            if (!testClients.getExceptionMonitor().assertNoExceptions())
+            if (!getExceptionMonitor().assertNoExceptions())
             {
-                errors += "There were exceptions on producer.\n";
+                errors += "Was expecting no exceptions.\n";
+                errors += "Got the following exceptions on the producer, " + 
getExceptionMonitor();
             }
 
             // Clean up the publisher/receiver client pair.
-            testClients.close();
+            close();
 
             assertEquals(errors, "", errors);
+        }
+
+        public static PublisherReceiver connectClients(ParsedProperties 
testProps)
+        {
+            // Create a standard publisher/receiver test client pair on a 
shared connection, individual sessions.
+            PublisherReceiver testClients = 
createPublisherReceiverPairSharedConnection(testProps);
+
+            return testClients;
         }
     }
 

Modified: 
incubator/qpid/branches/M2/java/systests/src/main/java/org/apache/qpid/server/exchange/MandatoryMessageTest.java
URL: 
http://svn.apache.org/viewvc/incubator/qpid/branches/M2/java/systests/src/main/java/org/apache/qpid/server/exchange/MandatoryMessageTest.java?view=diff&rev=550773&r1=550772&r2=550773
==============================================================================
--- 
incubator/qpid/branches/M2/java/systests/src/main/java/org/apache/qpid/server/exchange/MandatoryMessageTest.java
 (original)
+++ 
incubator/qpid/branches/M2/java/systests/src/main/java/org/apache/qpid/server/exchange/MandatoryMessageTest.java
 Tue Jun 26 04:03:04 2007
@@ -49,6 +49,10 @@
  *          connected.
  * <tr><td> Check that a mandatory message results in no route code, upon 
transaction commit, when a consumer is
  *          connected.
+ * <tr><td> Check that a mandatory message is sent succesfully, not using 
transactions, when a consumer is
+ *          disconnected but the route exists.
+ * <tr><dt> Check that a mandatory message is send successfully, in a 
transactions, when a consumer is
+ *          disconnected but when the route exists.
  * </table>
  */
 public class MandatoryMessageTest extends TestCase
@@ -57,63 +61,227 @@
     private static final Logger log = 
LoggerFactory.getLogger(MandatoryMessageTest.class);
 
     /** Used to read the tests configurable properties through. */
-    ParsedProperties testProps = 
TestContextProperties.getInstance(MessagingTestConfigProperties.defaults);
+    ParsedProperties testProps;
 
-    /** All these tests should have the mandatory flag on. */
-    // private boolean mandatoryFlag = 
testProps.setProperty(IMMEDIATE_PROPNAME, true);
-    private boolean mandatoryFlag = testProps.setProperty(MANDATORY_PROPNAME, 
true);
+    /** Check that an mandatory message is sent succesfully not using 
transactions when a consumer is connected. */
+    public void test_QPID_508_MandatoryOkNoTxP2P() throws Exception
+    {
+        // Ensure transactional sessions are off.
+        testProps.setProperty(TRANSACTED_PROPNAME, false);
+        testProps.setProperty(PUBSUB_PROPNAME, false);
+
+        ImmediateMessageTest.PublisherReceiver testClients =
+            
ImmediateMessageTest.PublisherReceiverImpl.connectClients(testProps);
+
+        // Send one message with no errors.
+        testClients.testNoExceptions(testProps);
+    }
+
+    /** Check that an mandatory message is committed succesfully in a 
transaction when a consumer is connected. */
+    public void test_QPID_508_MandatoryOkTxP2P() throws Exception
+    {
+        // Ensure transactional sessions are off.
+        testProps.setProperty(TRANSACTED_PROPNAME, true);
+        testProps.setProperty(PUBSUB_PROPNAME, false);
+
+        ImmediateMessageTest.PublisherReceiver testClients =
+            
ImmediateMessageTest.PublisherReceiverImpl.connectClients(testProps);
+
+        // Send one message with no errors.
+        testClients.testNoExceptions(testProps);
+    }
+
+    /** Check that an mandatory message results in no route code, not using 
transactions, when no consumer is connected. */
+    public void test_QPID_508_MandatoryFailsNoRouteNoTxP2P() throws Exception
+    {
+        // Ensure transactional sessions are off.
+        testProps.setProperty(TRANSACTED_PROPNAME, false);
+        testProps.setProperty(PUBSUB_PROPNAME, false);
+
+        // Set up the messaging topology so that only the publishers producer 
is bound (do not set up the receiver to
+        // collect its messages).
+        testProps.setProperty(RECEIVER_CONSUMER_BIND_PROPNAME, false);
+
+        ImmediateMessageTest.PublisherReceiver testClients =
+            
ImmediateMessageTest.PublisherReceiverImpl.connectClients(testProps);
+
+        // Send one message and get a linked no consumers exception.
+        testClients.testWithAssertions(testProps, AMQNoRouteException.class);
+    }
+
+    /** Check that an mandatory message results in no route code, upon 
transaction commit, when a consumer is connected. */
+    public void test_QPID_508_MandatoryFailsNoRouteTxP2P() throws Exception
+    {
+        // Ensure transactional sessions are on.
+        testProps.setProperty(TRANSACTED_PROPNAME, true);
+        testProps.setProperty(PUBSUB_PROPNAME, false);
+
+        // Set up the messaging topology so that only the publishers producer 
is bound (do not set up the receiver to
+        // collect its messages).
+        testProps.setProperty(RECEIVER_CONSUMER_BIND_PROPNAME, false);
+
+        ImmediateMessageTest.PublisherReceiver testClients =
+            
ImmediateMessageTest.PublisherReceiverImpl.connectClients(testProps);
+
+        // Send one message and get a linked no consumers exception.
+        testClients.testWithAssertions(testProps, AMQNoRouteException.class);
+    }
+
+    /**
+     * Check that a mandatory message is sent succesfully, not using 
transactions, when a consumer is disconnected but
+     * the route exists.
+     */
+    public void test_QPID_517_MandatoryOkConsumerDisconnectedNoTxP2P() throws 
Exception
+    {
+        // Ensure transactional sessions are off.
+        testProps.setProperty(TRANSACTED_PROPNAME, false);
+        testProps.setProperty(PUBSUB_PROPNAME, false);
+
+        ImmediateMessageTest.PublisherReceiver testClients =
+            
ImmediateMessageTest.PublisherReceiverImpl.connectClients(testProps);
+
+        // Disconnect the consumer.
+        testClients.getReceiver().getConsumer().close();
+
+        // Send one message with no errors.
+        testClients.testNoExceptions(testProps);
+    }
+
+    /**
+     * Check that a mandatory message is sent succesfully, in a transaction, 
when a consumer is disconnected but
+     * the route exists.
+     */
+    public void test_QPID_517_MandatoryOkConsumerDisconnectedTxP2P() throws 
Exception
+    {
+        // Ensure transactional sessions are on.
+        testProps.setProperty(TRANSACTED_PROPNAME, true);
+        testProps.setProperty(PUBSUB_PROPNAME, false);
+
+        ImmediateMessageTest.PublisherReceiver testClients =
+            
ImmediateMessageTest.PublisherReceiverImpl.connectClients(testProps);
+
+        // Disconnect the consumer.
+        testClients.getReceiver().getConsumer().close();
+
+        // Send one message with no errors.
+        testClients.testNoExceptions(testProps);
+    }
 
     /** Check that an mandatory message is sent succesfully not using 
transactions when a consumer is connected. */
-    public void test_QPID_508_MandatoryOkNoTx() throws Exception
+    public void test_QPID_508_MandatoryOkNoTxPubSub() throws Exception
     {
         // Ensure transactional sessions are off.
         testProps.setProperty(TRANSACTED_PROPNAME, false);
+        testProps.setProperty(PUBSUB_PROPNAME, true);
+
+        ImmediateMessageTest.PublisherReceiver testClients =
+            
ImmediateMessageTest.PublisherReceiverImpl.connectClients(testProps);
 
         // Send one message with no errors.
-        ImmediateMessageTest.PublisherReceiverImpl.testNoExceptions(testProps);
+        testClients.testNoExceptions(testProps);
     }
 
     /** Check that an mandatory message is committed succesfully in a 
transaction when a consumer is connected. */
-    public void test_QPID_508_MandatoryOkTx() throws Exception
+    public void test_QPID_508_MandatoryOkTxPubSub() throws Exception
     {
         // Ensure transactional sessions are off.
         testProps.setProperty(TRANSACTED_PROPNAME, true);
+        testProps.setProperty(PUBSUB_PROPNAME, true);
+
+        ImmediateMessageTest.PublisherReceiver testClients =
+            
ImmediateMessageTest.PublisherReceiverImpl.connectClients(testProps);
 
         // Send one message with no errors.
-        ImmediateMessageTest.PublisherReceiverImpl.testNoExceptions(testProps);
+        testClients.testNoExceptions(testProps);
     }
 
     /** Check that an mandatory message results in no route code, not using 
transactions, when no consumer is connected. */
-    public void test_QPID_508_MandatoryFailsNoRouteNoTx() throws Exception
+    public void test_QPID_508_MandatoryFailsNoRouteNoTxPubSub() throws 
Exception
     {
         // Ensure transactional sessions are off.
         testProps.setProperty(TRANSACTED_PROPNAME, false);
+        testProps.setProperty(PUBSUB_PROPNAME, true);
 
         // Set up the messaging topology so that only the publishers producer 
is bound (do not set up the receiver to
         // collect its messages).
         testProps.setProperty(RECEIVER_CONSUMER_BIND_PROPNAME, false);
 
+        ImmediateMessageTest.PublisherReceiver testClients =
+            
ImmediateMessageTest.PublisherReceiverImpl.connectClients(testProps);
+
         // Send one message and get a linked no consumers exception.
-        
ImmediateMessageTest.PublisherReceiverImpl.testWithAssertions(testProps, 
AMQNoRouteException.class);
+        testClients.testWithAssertions(testProps, AMQNoRouteException.class);
     }
 
     /** Check that an mandatory message results in no route code, upon 
transaction commit, when a consumer is connected. */
-    public void test_QPID_508_MandatoryFailsNoRouteTx() throws Exception
+    public void test_QPID_508_MandatoryFailsNoRouteTxPubSub() throws Exception
     {
         // Ensure transactional sessions are on.
         testProps.setProperty(TRANSACTED_PROPNAME, true);
+        testProps.setProperty(PUBSUB_PROPNAME, true);
 
         // Set up the messaging topology so that only the publishers producer 
is bound (do not set up the receiver to
         // collect its messages).
         testProps.setProperty(RECEIVER_CONSUMER_BIND_PROPNAME, false);
 
+        ImmediateMessageTest.PublisherReceiver testClients =
+            
ImmediateMessageTest.PublisherReceiverImpl.connectClients(testProps);
+
         // Send one message and get a linked no consumers exception.
-        
ImmediateMessageTest.PublisherReceiverImpl.testWithAssertions(testProps, 
AMQNoRouteException.class);
+        testClients.testWithAssertions(testProps, AMQNoRouteException.class);
+    }
+
+    /**
+     * Check that a mandatory message is sent succesfully, not using 
transactions, when a consumer is disconnected but
+     * the route exists.
+     */
+    public void test_QPID_517_MandatoryOkConsumerDisconnectedNoTxPubSub() 
throws Exception
+    {
+        // Ensure transactional sessions are off.
+        testProps.setProperty(TRANSACTED_PROPNAME, false);
+        testProps.setProperty(PUBSUB_PROPNAME, true);
+
+        ImmediateMessageTest.PublisherReceiver testClients =
+            
ImmediateMessageTest.PublisherReceiverImpl.connectClients(testProps);
+
+        // Disconnect the consumer.
+        testClients.getReceiver().getConsumer().close();
+
+        // Send one message with no errors.
+        testClients.testNoExceptions(testProps);
+    }
+
+    /**
+     * Check that a mandatory message is sent succesfully, in a transaction, 
when a consumer is disconnected but
+     * the route exists.
+     */
+    public void test_QPID_517_MandatoryOkConsumerDisconnectedTxPubSub() throws 
Exception
+    {
+        // Ensure transactional sessions are on.
+        testProps.setProperty(TRANSACTED_PROPNAME, true);
+        testProps.setProperty(PUBSUB_PROPNAME, true);
+
+        ImmediateMessageTest.PublisherReceiver testClients =
+            
ImmediateMessageTest.PublisherReceiverImpl.connectClients(testProps);
+
+        // Disconnect the consumer.
+        testClients.getReceiver().getConsumer().close();
+
+        // Send one message with no errors.
+        testClients.testNoExceptions(testProps);
     }
 
     protected void setUp() throws Exception
     {
         NDC.push(getName());
+
+        testProps = 
TestContextProperties.getInstance(MessagingTestConfigProperties.defaults);
+
+        /** All these tests should have the mandatory flag on. */
+        testProps.setProperty(MANDATORY_PROPNAME, true);
+
+        /** Bind the receivers consumer by default. */
+        testProps.setProperty(RECEIVER_CONSUMER_BIND_PROPNAME, true);
 
         // Ensure that the in-vm broker is created.
         TransportConnection.createVMBroker(1);


Reply via email to