qpid-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From rupertlssm...@apache.org
Subject svn commit: r613177 [1/2] - in /incubator/qpid/branches/M2.1/dotnet/Qpid.Integration.Tests/framework: ./ sequencers/
Date Fri, 18 Jan 2008 14:38:37 GMT
Author: rupertlssmith
Date: Fri Jan 18 06:38:35 2008
New Revision: 613177

URL: http://svn.apache.org/viewvc?rev=613177&view=rev
Log:
Qpid-9 In preparation for adding missing field types, the test framework from the java is being ported onto the .Net. This will form the basis for writing more interop tests.

Added:
    incubator/qpid/branches/M2.1/dotnet/Qpid.Integration.Tests/framework/Assertion.cs
    incubator/qpid/branches/M2.1/dotnet/Qpid.Integration.Tests/framework/Circuit.cs
    incubator/qpid/branches/M2.1/dotnet/Qpid.Integration.Tests/framework/FrameworkBaseCase.cs
    incubator/qpid/branches/M2.1/dotnet/Qpid.Integration.Tests/framework/Publisher.cs
    incubator/qpid/branches/M2.1/dotnet/Qpid.Integration.Tests/framework/Receiver.cs
    incubator/qpid/branches/M2.1/dotnet/Qpid.Integration.Tests/framework/TestClientDetails.cs
    incubator/qpid/branches/M2.1/dotnet/Qpid.Integration.Tests/framework/TestClientDetails.csx
    incubator/qpid/branches/M2.1/dotnet/Qpid.Integration.Tests/framework/TestModel.cs
    incubator/qpid/branches/M2.1/dotnet/Qpid.Integration.Tests/framework/sequencers/CircuitFactory.cs
Modified:
    incubator/qpid/branches/M2.1/dotnet/Qpid.Integration.Tests/framework/CircuitEnd.csx
    incubator/qpid/branches/M2.1/dotnet/Qpid.Integration.Tests/framework/CircuitEndBase.csx
    incubator/qpid/branches/M2.1/dotnet/Qpid.Integration.Tests/framework/LocalCircuitFactory.csx
    incubator/qpid/branches/M2.1/dotnet/Qpid.Integration.Tests/framework/MessageMonitor.csx

Added: incubator/qpid/branches/M2.1/dotnet/Qpid.Integration.Tests/framework/Assertion.cs
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/M2.1/dotnet/Qpid.Integration.Tests/framework/Assertion.cs?rev=613177&view=auto
==============================================================================
--- incubator/qpid/branches/M2.1/dotnet/Qpid.Integration.Tests/framework/Assertion.cs (added)
+++ incubator/qpid/branches/M2.1/dotnet/Qpid.Integration.Tests/framework/Assertion.cs Fri Jan 18 06:38:35 2008
@@ -0,0 +1,39 @@
+/*
+ *
+ * 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.
+ *
+ */
+namespace Apache.Qpid.Integration.Tests.framework
+{
+    /// <summary>
+    /// Assertion models an assertion on a test <see cref="Circuit"/>.
+    ///
+    /// <p/><table id="crc"><caption>CRC Card</caption>
+    /// <tr><th> Responsibilities
+    /// <tr><td> Indicate whether or not the assertion passes when applied.
+    /// </table>
+    /// </summary>
+    public interface Assertion
+    {
+        /// <summary>
+        /// Applies the assertion.
+        /// </summary>
+        /// <return> <tt>true</tt> if the assertion passes, <tt>false</tt> if it fails. </return>
+        bool apply();
+    }
+}
\ No newline at end of file

Added: incubator/qpid/branches/M2.1/dotnet/Qpid.Integration.Tests/framework/Circuit.cs
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/M2.1/dotnet/Qpid.Integration.Tests/framework/Circuit.cs?rev=613177&view=auto
==============================================================================
--- incubator/qpid/branches/M2.1/dotnet/Qpid.Integration.Tests/framework/Circuit.cs (added)
+++ incubator/qpid/branches/M2.1/dotnet/Qpid.Integration.Tests/framework/Circuit.cs Fri Jan 18 06:38:35 2008
@@ -0,0 +1,102 @@
+/*
+ *
+ * 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.
+ *
+ */
+using System.Collections.Generic;//.IList;
+
+namespace Apache.Qpid.Integration.Tests.framework
+{
+    /// <summary>
+    /// A Circuit is the basic test unit against which test cases are to be written. A circuit consists of two 'ends', an
+    /// instigating 'publisher' end and a more passive 'receivers' end.
+    ///
+    /// <p/>Once created, the life-cycle of a circuit may be controlled by <see cref="#start()"/>ing it, or <see cref="#close()"/>ing it.
+    /// Once started, the circuit is ready to send messages over. Once closed the circuit can no longer be used.
+    ///
+    /// <p/>The state of the circuit may be taken with the <see cref="#check()"/> method, and asserted against by the
+    /// <see cref="#applyAssertions(System.Collections.Generic.IList)"/> method.
+    ///
+    /// <p/>There is a default test procedure which may be performed against the circuit. The outline of this procedure is:
+    ///
+    /// <p/><pre>
+    /// Start the circuit.
+    /// Send test messages.
+    /// Request a status report.
+    /// Assert conditions on the publishing end of the circuit.
+    /// Assert conditions on the receiving end of the circuit.
+    /// Close the circuit.
+    /// Pass with no failed assertions or fail with a list of failed assertions.
+    /// </pre>
+    ///
+    /// <p/><table id="crc"><caption>CRC Card</caption>
+    /// <tr><th> Responsibilities
+    /// <tr><td> Supply the publishing and receiving ends of a test messaging circuit.
+    /// <tr><td> Start the circuit running.
+    /// <tr><td> Close the circuit down.
+    /// <tr><td> Take a reading of the circuits state.
+    /// <tr><td> Apply assertions against the circuits state.
+    /// <tr><td> Send test messages over the circuit.
+    /// <tr><td> Perform the default test procedue on the circuit.
+    /// </table>
+    /// </summary>
+    public interface Circuit
+    {
+        /// <summary> Gets the interface on the publishing end of the circuit. </summary>
+        ///
+        /// <return> The publishing end of the circuit. </return>
+        Publisher GetPublisher();
+
+        /// <summary> Gets the interface on the receiving end of the circuit. </summary>
+        ///
+        /// <return> The receiving end of the circuit. </return>
+        Receiver GetReceiver();
+
+        /// <summary> Connects and starts the circuit. After this method is called the circuit is ready to send messages. </summary>
+        void Start();
+
+        /// <summary>
+        /// Checks the test circuit. The effect of this is to gather the circuits state, for both ends of the circuit,
+        /// into a report, against which assertions may be checked.
+        /// </summary>
+        void Check();
+
+        /// <summary> Closes the circuit. All associated resources are closed. </summary>
+        void Close();
+
+        /// <summary>
+        /// Applied a list of assertions against the test circuit. The <see cref="#check()"/> method should be called before doing
+        /// this, to ensure that the circuit has gathered its state into a report to assert against.
+        /// </summary>
+        ///
+        /// <param name="assertions"> The list of assertions to apply to the circuit. </param>
+        ///
+        /// <return> Any assertions that failed. </return>
+        IList<Assertion> ApplyAssertions(IList<Assertion> assertions);
+
+        /// <summary>
+        /// Runs the default test procedure against the circuit, and checks that all of the specified assertions hold.
+        /// </summary>
+        ///
+        /// <param name="numMessages"> The number of messages to send using the default test procedure. </param>
+        /// <param name="assertions">  The list of assertions to apply. </param>
+        ///
+        /// <return> Any assertions that failed. </return>
+        IList<Assertion> Test(int numMessages, IList<Assertion> assertions);
+    }
+}
\ No newline at end of file

Modified: incubator/qpid/branches/M2.1/dotnet/Qpid.Integration.Tests/framework/CircuitEnd.csx
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/M2.1/dotnet/Qpid.Integration.Tests/framework/CircuitEnd.csx?rev=613177&r1=613176&r2=613177&view=diff
==============================================================================
--- incubator/qpid/branches/M2.1/dotnet/Qpid.Integration.Tests/framework/CircuitEnd.csx (original)
+++ incubator/qpid/branches/M2.1/dotnet/Qpid.Integration.Tests/framework/CircuitEnd.csx Fri Jan 18 06:38:35 2008
@@ -18,7 +18,8 @@
  * under the License.
  *
  */
-using javax.jms.*;
+//using javax.jms.*;
+using Apache.Qpid.Messaging;
 
 namespace Apache.Qpid.Integration.Tests.framework
 {
@@ -42,13 +43,13 @@
         /// Gets the message producer at this circuit end point.
         /// </summary>
         /// <return> The message producer at with this circuit end point. </return>
-        public MessageProducer getProducer();
+        public IMessagePublisher GetProducer();
 
         /// <summary>
         /// Gets the message consumer at this circuit end point.
         /// </summary>
         /// <return> The message consumer at this circuit end point. </return>
-        public MessageConsumer getConsumer();
+        public IMessageConsumer GetConsumer();
 
         /// <summary>
         /// Send the specified message over the producer at this end point.
@@ -56,30 +57,30 @@
         /// <param name="message"> The message to send. </param>
         ///
         /// <exception cref="JMSException"> Any JMS exception occuring during the send is allowed to fall through. </exception>
-        public void send(Message message) throws JMSException;
+        public void Send(IMessage message);
 
         /// <summary>
         /// Gets the JMS Session associated with this circuit end point.
         /// </summary>
         /// <return> The JMS Session associated with this circuit end point. </return>
-        public Session getSession();
+        public IChannel GetSession();
 
         /// <summary>
         /// Closes the message producers and consumers and the sessions, associated with this circuit end point.
         /// </summary>
         /// <exception cref="JMSException"> Any JMSExceptions occurring during the close are allowed to fall through. </exception>
-        public void close() throws JMSException;
+        public void Close();
 
         /// <summary>
         /// Returns the message monitor for reporting on received messages on this circuit end.
         /// </summary>
         /// <return> The message monitor for this circuit end. </return>
-        public MessageMonitor getMessageMonitor();
+        public MessageMonitor GetMessageMonitor();
 
         /// <summary>
         /// Returns the exception monitor for reporting on exceptions received on this circuit end.
         /// </summary>
         /// <return> The exception monitor for this circuit end. </return>
-        public ExceptionMonitor getExceptionMonitor();
+        public ExceptionMonitor GetExceptionMonitor();
     }
 }

Modified: incubator/qpid/branches/M2.1/dotnet/Qpid.Integration.Tests/framework/CircuitEndBase.csx
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/M2.1/dotnet/Qpid.Integration.Tests/framework/CircuitEndBase.csx?rev=613177&r1=613176&r2=613177&view=diff
==============================================================================
--- incubator/qpid/branches/M2.1/dotnet/Qpid.Integration.Tests/framework/CircuitEndBase.csx (original)
+++ incubator/qpid/branches/M2.1/dotnet/Qpid.Integration.Tests/framework/CircuitEndBase.csx Fri Jan 18 06:38:35 2008
@@ -18,7 +18,8 @@
  * under the License.
  *
  */
-using javax.jms.*;
+//using javax.jms.*;
+using Apache.Qpid.Messaging;
 
 namespace Apache.Qpid.Integration.Tests.framework
 {
@@ -74,7 +75,7 @@
         /// Gets the message producer at this circuit end point.
         /// </summary>
         /// <return> The message producer at with this circuit end point. </return>
-        public MessageProducer getProducer()
+        public IMessagePublisher GetProducer()
         {
             return producer;
         }
@@ -83,7 +84,7 @@
         /// Gets the message consumer at this circuit end point.
         /// </summary>
         /// <return> The message consumer at this circuit end point. </return>
-        public MessageConsumer getConsumer()
+        public IMessageConsumer GetConsumer()
         {
             return consumer;
         }
@@ -93,7 +94,7 @@
         /// </summary>
         /// <param name="message"> The message to send. </param>
         /// <exception cref="javax.jms.JMSException"> Any JMS exception occuring during the send is allowed to fall through. </exception>
-        public void send(Message message) throws JMSException
+        public void Send(IMessage message)
         {
             producer.send(message);
         }
@@ -102,7 +103,7 @@
         /// Gets the JMS Session associated with this circuit end point.
         /// </summary>
         /// <return> The JMS Session associated with this circuit end point. </return>
-        public Session getSession()
+        public IChannel GetSession()
         {
             return session;
         }
@@ -111,16 +112,16 @@
         /// Closes the message producers and consumers and the sessions, associated with this circuit end point.
         /// </summary>
         /// <exception cref="javax.jms.JMSException"> Any JMSExceptions occurring during the close are allowed to fall through. </exception>
-        public void close() throws JMSException
+        public void Close()
         {
             if (producer != null)
             {
-                producer.close();
+                producer.Close();
             }
 
             if (consumer != null)
             {
-                consumer.close();
+                consumer.Close();
             }
         }
 
@@ -128,7 +129,7 @@
         /// Returns the message monitor for reporting on received messages on this circuit end.
         /// </summary>
         /// <return> The message monitor for this circuit end. </return>
-        public MessageMonitor getMessageMonitor()
+        public MessageMonitor GetMessageMonitor()
         {
             return messageMonitor;
         }
@@ -137,7 +138,7 @@
         /// Returns the exception monitor for reporting on exceptions received on this circuit end.
         /// </summary>
         /// <return> The exception monitor for this circuit end. </return>
-        public ExceptionMonitor getExceptionMonitor()
+        public ExceptionMonitor GetExceptionMonitor()
         {
             return exceptionMonitor;
         }

Added: incubator/qpid/branches/M2.1/dotnet/Qpid.Integration.Tests/framework/FrameworkBaseCase.cs
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/M2.1/dotnet/Qpid.Integration.Tests/framework/FrameworkBaseCase.cs?rev=613177&view=auto
==============================================================================
--- incubator/qpid/branches/M2.1/dotnet/Qpid.Integration.Tests/framework/FrameworkBaseCase.cs (added)
+++ incubator/qpid/branches/M2.1/dotnet/Qpid.Integration.Tests/framework/FrameworkBaseCase.cs Fri Jan 18 06:38:35 2008
@@ -0,0 +1,282 @@
+/*
+ *
+ * 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.
+ *
+ */
+using log4net;
+using NUnit.Framework;
+//using org.apache.log4j.NDC;
+
+using Apache.Qpid.Integration.Tests.framework.sequencers;//.CircuitFactory;
+
+//using uk.co.thebadgerset.junit.extensions.AsymptoticTestCase;
+//using uk.co.thebadgerset.junit.extensions.SetupTaskAware;
+//using uk.co.thebadgerset.junit.extensions.SetupTaskHandler;
+//using uk.co.thebadgerset.junit.extensions.util.ParsedProperties;
+//using uk.co.thebadgerset.junit.extensions.util.TestContextProperties;
+
+//using java.util.ArrayList;
+using System.Collections.Generic;//.IList;
+
+namespace Apache.Qpid.Integration.Tests.framework
+{
+    /// <summary>
+    /// FrameworkBaseCase provides a starting point for writing test cases against the test framework. Its main purpose is
+    /// to provide some convenience methods for testing.
+    ///
+    /// <p/><table id="crc"><caption>CRC Card</caption>
+    /// <tr><th> Responsibilities <th> Collaborations
+    /// <tr><td> Create and clean up in-vm brokers on every test case.
+    /// <tr><td> Produce lists of assertions from assertion creation calls.
+    /// <tr><td> Produce JUnit failures from assertion failures.
+    /// <tr><td> Convert failed assertions to error messages.
+    /// </table>
+    /// </summary>
+    public class FrameworkBaseCase //extends AsymptoticTestCase : FrameworkTestContext, SetupTaskAware, BrokerLifecycleAware
+    {
+        /// <summary> Used for debugging purposes. </summary>
+        private static ILog log = LogManager.GetLogger(typeof(FrameworkBaseCase));
+
+        /// <summary> Holds the test sequencer to create and run test circuits with. </summary>
+        protected CircuitFactory circuitFactory;// = new LocalCircuitFactory();
+
+        /// <summary> Used to read the tests configurable properties through. </summary>
+        protected TestModel testProps;
+
+        /// <summary> A default setup task processor to delegate setup tasks to. </summary>
+        //protected SetupTaskHandler taskHandler = new SetupTaskHandler();
+
+        /// <summary> Flag used to track whether the test is in-vm or not. </summary>
+        //protected bool isUsingInVM;
+
+        /// <summary> Holds the failure mechanism. </summary>
+        //protected CauseFailure failureMechanism = new CauseFailureUserPrompt();
+
+        /*
+        /// <summary>
+        /// Creates a new test case with the specified name.
+        /// </summary>
+        /// <param name="name"> The test case name. </param>
+        public FrameworkBaseCase(string name) : base(name)
+        {            
+        }
+        */
+
+        /// <summary>
+        /// Returns the test case sequencer that provides test circuit, and test sequence implementations. The sequencer
+        /// that this base case returns by default is suitable for running a test circuit with both circuit ends colocated
+        /// on the same JVM.
+        /// </summary>
+        /// <return> The test case sequencer. </return>
+        protected CircuitFactory GetCircuitFactory()
+        {
+            return circuitFactory;
+        }
+
+        /// <summary>
+        /// Overrides the default test circuit factory. Test decorators can use this to supply distributed test sequencers or
+        /// other test circuit factory specializations.
+        /// </summary>
+        /// <param name="circuitFactory"> The new test circuit factory. </param>
+        public void SetCircuitFactory(CircuitFactory circuitFactory)
+        {
+            this.circuitFactory = circuitFactory;
+        }
+
+        /*
+        /// <summary>
+        /// Reports the current test case name.
+        /// </summary>
+        /// <return> The current test case name. </return>
+        public TestCaseVector GetTestCaseVector()
+        {
+            return new TestCaseVector(this.getName(), 0);
+        }
+        */
+
+        /// <summary>
+        /// Reports the current test case parameters.
+        /// </summary>
+        /// <return> The current test case parameters. </return>
+        public TestModel getTestParameters()
+        {
+            return testProps;
+        }
+
+        /// <summary>
+        /// Creates a list of assertions.
+        /// </summary>
+        /// <param name="asserts"> The assertions to compile in a list. </param>
+        ///
+        /// <return> A list of assertions. </return>
+        protected IList<Assertion> AssertionList(params Assertion[] asserts)
+        {
+            IList<Assertion> result = new List<Assertion>();
+
+            foreach (Assertion assertion in asserts)
+            {
+                result.Add(assertion);
+            }
+
+            return result;
+        }
+
+        /// <summary>
+        /// Generates a JUnit assertion exception (failure) if any assertions are passed into this method, also concatenating
+        /// all of the error messages in the assertions together to form an error message to diagnose the test failure with.
+        /// </summary>
+        /// <param name="asserts"> The list of failed assertions. </param>
+        protected static void AssertNoFailures(List<Assertion> asserts)
+        {
+            log.Debug("protected void assertNoFailures(List<Assertion> asserts = " + asserts + "): called");
+
+            // Check if there are no assertion failures, and return without doing anything if so.
+            if ((asserts == null) || (asserts.Count == 0))
+            {
+                return;
+            }
+
+            // Compile all of the assertion failure messages together.
+            string errorMessage = AssertionsToString(asserts);
+
+            // Fail with the error message from all of the assertions.
+            Assert.Fail(errorMessage);
+        }
+
+        /// <summary>
+        /// Converts a list of failed assertions into an error message.
+        /// </summary>
+        /// <param name="asserts"> The failed assertions. </param>
+        ///
+        /// <return> The error message. </return>
+        protected static string AssertionsToString(List<Assertion> asserts)
+        {
+            string errorMessage = "";
+
+            foreach (Assertion assertion in asserts)
+            {
+                errorMessage += assertion.ToString() + "\n";
+            }
+
+            return errorMessage;
+        }
+
+        /// <summary>
+        /// Ensures that the in-vm broker is created and initialized.
+        /// </summary>
+        ///
+        /// <exception cref="Exception"> Any exceptions allowed to fall through and fail the test. </exception>
+        [SetUp]
+        protected void SetUp()
+        {
+            //NDC.Push(Name);
+
+            //testProps = TestContextProperties.getInstance(TestModel.defaults);
+
+            // Process all optional setup tasks. This may include in-vm broker creation, if a decorator has added it.
+            //taskHandler.runSetupTasks();
+        }
+
+        /// <summary> Ensures that the in-vm broker is cleaned up after each test run. </summary>
+        [TearDown]
+        protected void TearDown()
+        {
+            //NDC.Pop();
+
+            // Process all optional tear down tasks. This may include in-vm broker clean up, if a decorator has added it.
+            //taskHandler.runTearDownTasks();
+        }
+
+        /*
+        /// <summary>
+        /// Adds the specified task to the tests setup.
+        /// </summary>
+        /// <param name="task"> The task to add to the tests setup. </param>
+        public void chainSetupTask(Runnable task)
+        {
+            taskHandler.chainSetupTask(task);
+        }
+        */
+
+        /*
+        /// <summary>
+        /// Adds the specified task to the tests tear down.
+        /// </summary>
+        /// <param name="task"> The task to add to the tests tear down. </param>
+        public void chainTearDownTask(Runnable task)
+        {
+            taskHandler.chainTearDownTask(task);
+        }
+        */
+
+        /*
+        /// <summary>
+        /// Should provide a translation from the junit method name of a test to its test case name as known to the test
+        /// clients that will run the test. The purpose of this is to convert the JUnit method name into the correct test
+        /// case name to place into the test invite. For example the method "testP2P" might map onto the interop test case
+        /// name "TC2_BasicP2P".
+        /// </summary>
+        /// <param name="methodName"> The name of the JUnit test method. </param>
+        ///
+        /// <return> The name of the corresponding interop test case. </return>
+        public string getTestCaseNameForTestMethod(string methodName)
+        {
+            return methodName;
+        }
+
+        public void setInVmBrokers()
+        {
+            isUsingInVM = true;
+        }
+
+        /// <summary>
+        /// Indicates whether or not a test case is using in-vm brokers.
+        /// </summary>
+        /// <return> <tt>true</tt> if the test is using in-vm brokers, <tt>false</tt> otherwise. </return>
+        public bool usingInVmBroker()
+        {
+            return isUsingInVM;
+        }
+
+        /// <summary>
+        /// Sets the currently live in-vm broker.
+        /// </summary>
+        /// <param name="i"> The currently live in-vm broker. </param>
+        public void setLiveBroker(int i)
+        { }
+
+        /// <summary>
+        /// Reports the currently live in-vm broker.
+        /// </summary>
+        /// <return> The currently live in-vm broker. </return>
+        public int getLiveBroker()
+        {
+            return 0;
+        }
+
+        /// <summary>
+        /// Accepts a failure mechanism.
+        /// </summary>
+        /// <param name="failureMechanism"> The failure mechanism. </param>
+        public void setFailureMechanism(CauseFailure failureMechanism)
+        {
+            this.failureMechanism = failureMechanism;
+        }
+        */
+    }
+}
\ No newline at end of file

Modified: incubator/qpid/branches/M2.1/dotnet/Qpid.Integration.Tests/framework/LocalCircuitFactory.csx
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/M2.1/dotnet/Qpid.Integration.Tests/framework/LocalCircuitFactory.csx?rev=613177&r1=613176&r2=613177&view=diff
==============================================================================
--- incubator/qpid/branches/M2.1/dotnet/Qpid.Integration.Tests/framework/LocalCircuitFactory.csx (original)
+++ incubator/qpid/branches/M2.1/dotnet/Qpid.Integration.Tests/framework/LocalCircuitFactory.csx Fri Jan 18 06:38:35 2008
@@ -20,19 +20,19 @@
  */
 using log4net;
 
-using Apache.Qpid.Integration.Tests.framework.localcircuit.LocalCircuitImpl;
-using Apache.Qpid.Integration.Tests.framework.localcircuit.LocalPublisherImpl;
-using Apache.Qpid.Integration.Tests.framework.localcircuit.LocalReceiverImpl;
-using Apache.Qpid.Integration.Tests.framework.sequencers.CircuitFactory;
-using org.apache.qpid.util.ConversationFactory;
-
-using uk.co.thebadgerset.junit.extensions.util.ParsedProperties;
-
-using javax.jms.*;
-
-using System.Collections.Generic.IList;
-using java.util.Properties;
-using java.util.concurrent.atomic.AtomicLong;
+using Apache.Qpid.Integration.Tests.framework.localcircuit;//.LocalCircuitImpl;
+//using Apache.Qpid.Integration.Tests.framework.localcircuit.LocalPublisherImpl;
+//using Apache.Qpid.Integration.Tests.framework.localcircuit.LocalReceiverImpl;
+//using Apache.Qpid.Integration.Tests.framework.sequencers.CircuitFactory;
+//using org.apache.qpid.util.ConversationFactory;
+
+//using uk.co.thebadgerset.junit.extensions.util.ParsedProperties;
+
+//using javax.jms.*;
+
+using System.Collections.Generic;//.IList;
+//using java.util.Properties;
+//using java.util.concurrent.atomic.AtomicLong;
 
 namespace Apache.Qpid.Integration.Tests.framework
 {
@@ -76,13 +76,10 @@
         /// <param name="testProperties"> The test parameters. </param>
         ///
         /// <return> A test circuit. </return>
-        public Circuit createCircuit(ParsedProperties testProperties)
+        public Circuit createCircuit(TestModel testProperties)
         {
             Circuit result;
 
-            // Cast the test properties into a typed interface for convenience.
-            MessagingTestConfigProperties props = new MessagingTestConfigProperties(testProperties);
-
             // Create a standard publisher/receivers test client pair on a shared connection, individual sessions.
             try
             {
@@ -97,10 +94,10 @@
                 // connection.setExceptionListener(exceptionMonitor);
 
                 // Set up the publisher.
-                CircuitEndBase publisherEnd = createPublisherCircuitEnd(connection, props, uniqueId);
+                CircuitEndBase publisherEnd = createPublisherCircuitEnd(connection, testProps, uniqueId);
 
                 // Set up the receiver.
-                CircuitEndBase receiverEnd = createReceiverCircuitEnd(connection, props, uniqueId);
+                CircuitEndBase receiverEnd = createReceiverCircuitEnd(connection, testProps, uniqueId);
 
                 // Start listening for incoming messages.
                 connection.start();
@@ -153,34 +150,31 @@
         /// <return> A circuit end suitable for the publishing side of a test circuit. </return>
         ///
         /// <exception cref="JMSException"> Any underlying JMSExceptions are allowed to fall through and fail the creation. </exception>
-        public CircuitEndBase createPublisherCircuitEnd(Connection connection, ParsedProperties testProps, long uniqueId)
+        public CircuitEndBase createPublisherCircuitEnd(Connection connection, TestModel testProps, long uniqueId)
             throws JMSException
         {
             log.debug(
-                      "public CircuitEndBase createPublisherCircuitEnd(Connection connection, ParsedProperties testProps, long uniqueId = "
+                      "public CircuitEndBase createPublisherCircuitEnd(Connection connection, TestModel testProps, long uniqueId = "
                       + uniqueId + "): called");
 
-            // Cast the test properties into a typed interface for convenience.
-            MessagingTestConfigProperties props = new MessagingTestConfigProperties(testProps);
-
             // Check that the test properties do not contain AMQP/Qpid specific settings, and fail if they do.
-            if (props.getImmediate() || props.getMandatory())
+            if (testProps.getImmediate() || testProps.getMandatory())
             {
                 throw new RuntimeException(
                                            "Cannot create a pure JMS circuit as the test properties require AMQP specific options.");
             }
 
-            Session session = connection.createSession(props.getPublisherTransacted(), props.getAckMode());
+            Session session = connection.createSession(testProps.getPublisherTransacted(), testProps.getAckMode());
 
             Destination destination =
-                props.getPubsub() ? session.createTopic(props.getSendDestinationNameRoot() + "_" + uniqueId)
-                : session.createQueue(props.getSendDestinationNameRoot() + "_" + uniqueId);
+                testProps.getPubsub() ? session.createTopic(testProps.getSendDestinationNameRoot() + "_" + uniqueId)
+                : session.createQueue(testProps.getSendDestinationNameRoot() + "_" + uniqueId);
 
-            MessageProducer producer = props.getPublisherProducerBind() ? session.createProducer(destination) : null;
+            MessageProducer producer = testProps.getPublisherProducerBind() ? session.createProducer(destination) : null;
 
             MessageConsumer consumer =
-                props.getPublisherConsumerBind()
-                ? session.createConsumer(session.createQueue(props.getReceiveDestinationNameRoot() + "_" + uniqueId)) : null;
+                testProps.getPublisherConsumerBind()
+                ? session.createConsumer(session.createQueue(testProps.getReceiveDestinationNameRoot() + "_" + uniqueId)) : null;
 
             MessageMonitor messageMonitor = new MessageMonitor();
 
@@ -192,7 +186,7 @@
             ExceptionMonitor exceptionMonitor = new ExceptionMonitor();
             connection.setExceptionListener(exceptionMonitor);
 
-            if (!props.getPublisherConsumerActive() && (consumer != null))
+            if (!testProps.getPublisherConsumerActive() && (consumer != null))
             {
                 consumer.close();
             }
@@ -210,36 +204,33 @@
         /// <return> A circuit end suitable for the receiving side of a test circuit. </return>
         ///
         /// <exception cref="JMSException"> Any underlying JMSExceptions are allowed to fall through and fail the creation. </exception>
-        public CircuitEndBase createReceiverCircuitEnd(Connection connection, ParsedProperties testProps, long uniqueId)
+        public CircuitEndBase createReceiverCircuitEnd(Connection connection, TestModel testProps, long uniqueId)
             throws JMSException
         {
             log.debug(
-                      "public CircuitEndBase createReceiverCircuitEnd(Connection connection, ParsedProperties testProps, long uniqueId = "
+                      "public CircuitEndBase createReceiverCircuitEnd(Connection connection, TestModel testProps, long uniqueId = "
                       + uniqueId + "): called");
 
-            // Cast the test properties into a typed interface for convenience.
-            MessagingTestConfigProperties props = new MessagingTestConfigProperties(testProps);
-
             // Check that the test properties do not contain AMQP/Qpid specific settings, and fail if they do.
-            if (props.getImmediate() || props.getMandatory())
+            if (testProps.getImmediate() || testProps.getMandatory())
             {
                 throw new RuntimeException(
                                            "Cannot create a pure JMS circuit as the test properties require AMQP specific options.");
             }
 
-            Session session = connection.createSession(props.getPublisherTransacted(), props.getAckMode());
+            Session session = connection.createSession(testProps.getPublisherTransacted(), testProps.getAckMode());
 
             MessageProducer producer =
-                props.getReceiverProducerBind()
-                ? session.createProducer(session.createQueue(props.getReceiveDestinationNameRoot() + "_" + uniqueId)) : null;
+                testProps.getReceiverProducerBind()
+                ? session.createProducer(session.createQueue(testProps.getReceiveDestinationNameRoot() + "_" + uniqueId)) : null;
 
             Destination destination =
-                props.getPubsub() ? session.createTopic(props.getSendDestinationNameRoot() + "_" + uniqueId)
-                : session.createQueue(props.getSendDestinationNameRoot() + "_" + uniqueId);
+                testProps.getPubsub() ? session.createTopic(testProps.getSendDestinationNameRoot() + "_" + uniqueId)
+                : session.createQueue(testProps.getSendDestinationNameRoot() + "_" + uniqueId);
 
             MessageConsumer consumer =
-                props.getReceiverConsumerBind()
-                ? ((props.getDurableSubscription() && props.getPubsub())
+                testProps.getReceiverConsumerBind()
+                ? ((testProps.getDurableSubscription() && testProps.getPubsub())
                    ? session.createDurableSubscriber((Topic) destination, "testsub") : session.createConsumer(destination))
                 : null;
 
@@ -250,7 +241,7 @@
                 consumer.setMessageListener(messageMonitor);
             }
 
-            if (!props.getReceiverConsumerActive() && (consumer != null))
+            if (!testProps.getReceiverConsumerActive() && (consumer != null))
             {
                 consumer.close();
             }
@@ -258,6 +249,7 @@
             return new CircuitEndBase(producer, consumer, session, messageMonitor, null);
         }
 
+        /*
         /// <summary>
         /// Sets the sender test client to coordinate the test with.
         /// </summary>
@@ -293,7 +285,9 @@
         {
             throw new RuntimeException("Not implemented.");
         }
+        */
 
+        /*
         /// <summary>
         /// Accepts the conversation factory over which to hold the test coordinating conversation.
         /// </summary>
@@ -302,5 +296,6 @@
         {
             throw new RuntimeException("Not implemented.");
         }
+        */
     }
 }

Modified: incubator/qpid/branches/M2.1/dotnet/Qpid.Integration.Tests/framework/MessageMonitor.csx
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/M2.1/dotnet/Qpid.Integration.Tests/framework/MessageMonitor.csx?rev=613177&r1=613176&r2=613177&view=diff
==============================================================================
--- incubator/qpid/branches/M2.1/dotnet/Qpid.Integration.Tests/framework/MessageMonitor.csx (original)
+++ incubator/qpid/branches/M2.1/dotnet/Qpid.Integration.Tests/framework/MessageMonitor.csx Fri Jan 18 06:38:35 2008
@@ -19,11 +19,12 @@
  *
  */
 using log4net;
+using Apache.Qpid.Messaging;
 
-using javax.jms.Message;
-using javax.jms.MessageListener;
+//using javax.jms.Message;
+//using javax.jms.MessageListener;
 
-using java.util.concurrent.atomic.AtomicInteger;
+//using java.util.concurrent.atomic.AtomicInteger;
 
 namespace Apache.Qpid.Integration.Tests.framework
 {

Added: incubator/qpid/branches/M2.1/dotnet/Qpid.Integration.Tests/framework/Publisher.cs
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/M2.1/dotnet/Qpid.Integration.Tests/framework/Publisher.cs?rev=613177&view=auto
==============================================================================
--- incubator/qpid/branches/M2.1/dotnet/Qpid.Integration.Tests/framework/Publisher.cs (added)
+++ incubator/qpid/branches/M2.1/dotnet/Qpid.Integration.Tests/framework/Publisher.cs Fri Jan 18 06:38:35 2008
@@ -0,0 +1,65 @@
+/*
+ *
+ * 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.
+ *
+ */
+//using uk.co.thebadgerset.junit.extensions.util.ParsedProperties;
+using System;
+
+namespace Apache.Qpid.Integration.Tests.framework
+{
+    /// <summary>
+    /// A Publisher represents the status of the publishing side of a test circuit. Its main purpose is to provide assertions
+    /// that can be applied to test the behaviour of the publishers.
+    ///
+    /// <p/><table id="crc"><caption>CRC Card</caption>
+    /// <tr><th> Responsibilities
+    /// <tr><td> Provide assertion that the publishers received no exceptions.
+    /// </table>
+    /// </summary>
+    public interface Publisher
+    {
+        /// <summary>
+        /// Provides an assertion that the publisher encountered no exceptions.
+        /// </summary>
+        ///
+        /// <param name="testProps"> The test configuration properties. </param>
+        ///
+        /// <return> An assertion that the publisher encountered no exceptions. </return>
+        Assertion NoExceptionsAssertion(TestModel testProps);
+
+        /// <summary>
+        /// Provides an assertion that the AMQP channel was forcibly closed by an error condition.
+        /// </summary>
+        ///
+        /// <param name="testProps"> The test configuration properties. </param>
+        ///
+        /// <return> An assertion that the AMQP channel was forcibly closed by an error condition. </return>
+        Assertion ChannelClosedAssertion(TestModel testProps);
+
+        /// <summary>
+        /// Provides an assertion that the publisher got a given exception during the test.
+        /// </summary>
+        ///
+        /// <param name="testProps">      The test configuration properties. </param>
+        /// <param name="exceptionClass"> The exception class to check for. </param>
+        ///
+        /// <return> An assertion that the publisher got a given exception during the test. </return>
+        Assertion ExceptionAssertion(TestModel testProps, Type exceptionClass);
+    }
+}
\ No newline at end of file

Added: incubator/qpid/branches/M2.1/dotnet/Qpid.Integration.Tests/framework/Receiver.cs
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/M2.1/dotnet/Qpid.Integration.Tests/framework/Receiver.cs?rev=613177&view=auto
==============================================================================
--- incubator/qpid/branches/M2.1/dotnet/Qpid.Integration.Tests/framework/Receiver.cs (added)
+++ incubator/qpid/branches/M2.1/dotnet/Qpid.Integration.Tests/framework/Receiver.cs Fri Jan 18 06:38:35 2008
@@ -0,0 +1,80 @@
+/*
+ *
+ * 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.
+ *
+ */
+//using uk.co.thebadgerset.junit.extensions.util.ParsedProperties;
+using System;
+
+namespace Apache.Qpid.Integration.Tests.framework
+{
+    /// <summary>
+    /// A Receiver is a <see cref="CircuitEnd"/> that represents the status of the receiving side of a test circuit. Its main
+    /// purpose is to provide assertions that can be applied to check the behaviour of the receivers.
+    ///
+    /// <p/><table id="crc"><caption>CRC Card</caption>
+    /// <tr><th> Responsibilities
+    /// <tr><td> Provide assertion that the receivers received no exceptions.
+    /// <tr><td> Provide assertion that the receivers received all test messages sent to it.
+    /// </table>
+    /// </summary>
+    public interface Receiver
+    {
+        /// <summary>
+        /// Provides an assertion that the receivers encountered no exceptions.
+        /// </summary>
+        ///
+        /// <param name="testProps"> The test configuration properties. </param>
+        ///
+        /// <return> An assertion that the receivers encountered no exceptions. </return>
+        Assertion NoExceptionsAssertion(TestModel testProps);
+
+        /// <summary>
+        /// Provides an assertion that the receivers got all messages that were sent to it.
+        /// </summary>
+        /// <param name="testProps"> The test configuration properties. </param>
+        ///
+        /// <return> An assertion that the receivers got all messages that were sent to it. </return>
+        Assertion AllMessagesReceivedAssertion(TestModel testProps);
+
+        /// <summary>
+        /// Provides an assertion that the receivers got none of the messages that were sent to it.
+        /// </summary>
+        /// <param name="testProps"> The test configuration properties. </param>
+        ///
+        /// <return> An assertion that the receivers got none of the messages that were sent to it. </return>
+        Assertion NoMessagesReceivedAssertion(TestModel testProps);
+
+        /// <summary>
+        /// Provides an assertion that the AMQP channel was forcibly closed by an error condition.
+        /// </summary>
+        /// <param name="testProps"> The test configuration properties. </param>
+        ///
+        /// <return> An assertion that the AMQP channel was forcibly closed by an error condition. </return>
+        Assertion ChannelClosedAssertion(TestModel testProps);
+
+        /// <summary>
+        /// Provides an assertion that the receiver got a given exception during the test.
+        /// </summary>
+        /// <param name="testProps"> The test configuration properties. </param>
+        /// <param name="exceptionClass"> The exception class to check for. </param>
+        ///
+        /// <return> An assertion that the receiver got a given exception during the test. </return>
+        Assertion ExceptionAssertion(TestModel testProps, Type exceptionClass);
+    }
+}
\ No newline at end of file

Added: incubator/qpid/branches/M2.1/dotnet/Qpid.Integration.Tests/framework/TestClientDetails.cs
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/M2.1/dotnet/Qpid.Integration.Tests/framework/TestClientDetails.cs?rev=613177&view=auto
==============================================================================
--- incubator/qpid/branches/M2.1/dotnet/Qpid.Integration.Tests/framework/TestClientDetails.cs (added)
+++ incubator/qpid/branches/M2.1/dotnet/Qpid.Integration.Tests/framework/TestClientDetails.cs Fri Jan 18 06:38:35 2008
@@ -0,0 +1,84 @@
+/*
+ *
+ * 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.
+ *
+ */
+using System;
+
+namespace Apache.Qpid.Integration.Tests.framework
+{
+    /// <summary>
+    /// TestClientDetails is used to encapsulate information about an interop test client. It pairs together the unique
+    /// name of the client, and the route on which it listens to its control messages.
+    ///
+    /// <p><table id="crc"><caption>CRC Card</caption>
+    /// <tr><th> Responsibilities <th> Collaborations
+    /// <tr><td> Record test clients control addresses together with their names.
+    /// </table>
+    /// </summary>
+    public class TestClientDetails
+    {
+        /// <summary> The test clients name. </summary>
+        public string clientName;
+
+        /// <summary> The routing key of the test clients control topic. </summary>
+        public string privateControlKey;
+
+        /// <summary>
+        /// Two TestClientDetails are considered to be equal, iff they have the same client name.
+        /// </summary>
+        /// <param name="o"> The object to compare to. </param>
+        ///
+        /// <return> <tt>If the object to compare to is a TestClientDetails equal to this one, <tt>false</tt> otherwise. </return>
+        public override bool Equals(Object o)
+        {
+            if (this == o)
+            {
+                return true;
+            }
+
+            if (!(o is TestClientDetails))
+            {
+                return false;
+            }
+
+            TestClientDetails testClientDetails = (TestClientDetails) o;
+
+            return !((clientName != null) ? (!clientName.Equals(testClientDetails.clientName))
+                     : (testClientDetails.clientName != null));
+        }
+
+        /// <summary>
+        /// Computes a hash code compatible with the equals method; based on the client name alone.
+        /// </summary>
+        /// <return> A hash code for this. </return>
+        public override int GetHashCode()
+        {
+            return ((clientName != null) ? clientName.GetHashCode() : 0);
+        }
+
+        /// <summary>
+        /// Outputs the client name and address details. Mostly used for debugging purposes.
+        /// </summary>
+        /// <return> The client name and address. </return>
+        public override string ToString()
+        {
+            return "TestClientDetails: [ clientName = " + clientName + ", privateControlKey = " + privateControlKey + " ]";
+        }
+    }
+}

Added: incubator/qpid/branches/M2.1/dotnet/Qpid.Integration.Tests/framework/TestClientDetails.csx
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/M2.1/dotnet/Qpid.Integration.Tests/framework/TestClientDetails.csx?rev=613177&view=auto
==============================================================================
--- incubator/qpid/branches/M2.1/dotnet/Qpid.Integration.Tests/framework/TestClientDetails.csx (added)
+++ incubator/qpid/branches/M2.1/dotnet/Qpid.Integration.Tests/framework/TestClientDetails.csx Fri Jan 18 06:38:35 2008
@@ -0,0 +1,82 @@
+/*
+ *
+ * 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.
+ *
+ */
+namespace Apache.Qpid.Integration.Tests.framework
+{
+    /// <summary>
+    /// TestClientDetails is used to encapsulate information about an interop test client. It pairs together the unique
+    /// name of the client, and the route on which it listens to its control messages.
+    ///
+    /// <p><table id="crc"><caption>CRC Card</caption>
+    /// <tr><th> Responsibilities <th> Collaborations
+    /// <tr><td> Record test clients control addresses together with their names.
+    /// </table>
+    /// </summary>
+    public class TestClientDetails
+    {
+        /// <summary> The test clients name. </summary>
+        public string clientName;
+
+        /// <summary> The routing key of the test clients control topic. </summary>
+        public string privateControlKey;
+
+        /// <summary>
+        /// Two TestClientDetails are considered to be equal, iff they have the same client name.
+        /// </summary>
+        /// <param name="o"> The object to compare to. </param>
+        ///
+        /// <return> <tt>If the object to compare to is a TestClientDetails equal to this one, <tt>false</tt> otherwise. </return>
+        public bool equals(Object o)
+        {
+            if (this == o)
+            {
+                return true;
+            }
+
+            if (!(o instanceof TestClientDetails))
+            {
+                return false;
+            }
+
+            final TestClientDetails testClientDetails = (TestClientDetails) o;
+
+            return !((clientName != null) ? (!clientName.equals(testClientDetails.clientName))
+                     : (testClientDetails.clientName != null));
+        }
+
+        /// <summary>
+        /// Computes a hash code compatible with the equals method; based on the client name alone.
+        /// </summary>
+        /// <return> A hash code for this. </return>
+        public int hashCode()
+        {
+            return ((clientName != null) ? clientName.hashCode() : 0);
+        }
+
+        /// <summary>
+        /// Outputs the client name and address details. Mostly used for debugging purposes.
+        /// </summary>
+        /// <return> The client name and address. </return>
+        public string ToString()
+        {
+            return "TestClientDetails: [ clientName = " + clientName + ", privateControlKey = " + privateControlKey + " ]";
+        }
+    }
+}

Added: incubator/qpid/branches/M2.1/dotnet/Qpid.Integration.Tests/framework/TestModel.cs
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/M2.1/dotnet/Qpid.Integration.Tests/framework/TestModel.cs?rev=613177&view=auto
==============================================================================
--- incubator/qpid/branches/M2.1/dotnet/Qpid.Integration.Tests/framework/TestModel.cs (added)
+++ incubator/qpid/branches/M2.1/dotnet/Qpid.Integration.Tests/framework/TestModel.cs Fri Jan 18 06:38:35 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.
+ *
+ */
+//using uk.co.thebadgerset.junit.extensions.util.ParsedProperties;
+
+//using javax.jms.Session;
+
+//using java.util.Properties;
+
+namespace Apache.Qpid.Integration.Tests.framework
+{
+    public class TestModel //extends ParsedProperties
+    {}
+
+    /*
+    /// <summary>
+    /// MessagingTestConfigProperties defines a set of property names and default values for specifying a messaging topology,
+    /// and test parameters for running a messaging test over that topology. A Properties object holding some of these
+    /// properties, superimposed onto the defaults, is used to establish test topologies and control test behaviour.
+    ///
+    /// <p/>A complete list of the parameters, default values and comments on their usage is provided here:
+    ///
+    /// <p/><table><caption>Parameters</caption>
+    /// <tr><th> Parameter        <th> Default  <th> Comments
+    /// <tr><td> messageSize      <td> 0        <td> Message size in bytes. Not including any headers.
+    /// <tr><td> destinationName  <td> ping     <td> The root name to use to generate destination names to ping.
+    /// <tr><td> persistent       <td> false    <td> Determines whether peristent delivery is used.
+    /// <tr><td> transacted       <td> false    <td> Determines whether messages are sent/received in transactions.
+    /// <tr><td> broker           <td> tcp://localhost:5672 <td> Determines the broker to connect to.
+    /// <tr><td> virtualHost      <td> test     <td> Determines the virtual host to send all ping over.
+    /// <tr><td> rate             <td> 0        <td> The maximum rate (in hertz) to send messages at. 0 means no limit.
+    /// <tr><td> verbose          <td> false    <td> The verbose flag for debugging. Prints to console on every message.
+    /// <tr><td> pubsub           <td> false    <td> Whether to ping topics or queues. Uses p2p by default.
+    /// <tr><td> username         <td> guest    <td> The username to access the broker with.
+    /// <tr><td> password         <td> guest    <td> The password to access the broker with.
+    /// <tr><td> selector         <td> null     <td> Not used. Defines a message selector to filter pings with.
+    /// <tr><td> destinationCount <td> 1        <td> The number of receivers listening to the pings.
+    /// <tr><td> timeout          <td> 30000    <td> In milliseconds. The timeout to stop waiting for replies.
+    /// <tr><td> commitBatchSize  <td> 1        <td> The number of messages per transaction in transactional mode.
+    /// <tr><td> uniqueDests      <td> true     <td> Whether each receivers only listens to one ping destination or all.
+    /// <tr><td> durableDests     <td> false    <td> Whether or not durable destinations are used.
+    /// <tr><td> ackMode          <td> AUTO_ACK <td> The message acknowledgement mode. Possible values are:
+    ///                                               0 - SESSION_TRANSACTED
+    ///                                               1 - AUTO_ACKNOWLEDGE
+    ///                                               2 - CLIENT_ACKNOWLEDGE
+    ///                                               3 - DUPS_OK_ACKNOWLEDGE
+    ///                                               257 - NO_ACKNOWLEDGE
+    ///                                               258 - PRE_ACKNOWLEDGE
+    /// <tr><td> maxPending       <td> 0        <td> The maximum size in bytes, of messages sent but not yet received.
+    ///                                              Limits the volume of messages currently buffered on the client
+    ///                                              or broker. Can help scale test clients by limiting amount of buffered
+    ///                                              data to avoid out of memory errors.
+    /// </table>
+    ///
+    /// <p><table id="crc"><caption>CRC Card</caption>
+    /// <tr><th> Responsibilities <th> Collaborations
+    /// <tr><td> Provide the names and defaults of all test parameters.
+    /// </table>
+    /// </summary>
+    ///
+    /// <remarks> Put a type-safe wrapper around these properties, but continue to store the parameters as properties. This is
+    ///       simply to ensure that it is a simple matter to serialize/deserialize string/string pairs onto messages.</remarks>
+    public class MessagingTestConfigProperties extends ParsedProperties
+    {
+        // ====================== Connection Properties ==================================
+
+        /// <summary> Holds the name of the default connection configuration. </summary>
+        public static final string CONNECTION_NAME = "broker";
+
+        /// <summary> Holds the name of the property to get the initial context factory name from. </summary>
+        public static final string INITIAL_CONTEXT_FACTORY_PROPNAME = "java.naming.factory.initial";
+
+        /// <summary> Defines the class to use as the initial context factory by default. </summary>
+        public static final string INITIAL_CONTEXT_FACTORY_DEFAULT = "org.apache.qpid.jndi.PropertiesFileInitialContextFactory";
+
+        /// <summary> Holds the name of the property to get the test broker url from. </summary>
+        public static final string BROKER_PROPNAME = "qpid.test.broker";
+
+        /// <summary> Holds the default broker url for the test. </summary>
+        public static final string BROKER_DEFAULT = "vm://:1";
+
+        /// <summary> Holds the name of the property to get the test broker virtual path. </summary>
+        public static final string VIRTUAL_HOST_PROPNAME = "virtualHost";
+
+        /// <summary> Holds the default virtual path for the test. </summary>
+        public static final string VIRTUAL_HOST_DEFAULT = "";
+
+        /// <summary> Holds the name of the property to get the broker access username from. </summary>
+        public static final string USERNAME_PROPNAME = "username";
+
+        /// <summary> Holds the default broker log on username. </summary>
+        public static final string USERNAME_DEFAULT = "guest";
+
+        /// <summary> Holds the name of the property to get the broker access password from. </summary>
+        public static final string PASSWORD_PROPNAME = "password";
+
+        /// <summary> Holds the default broker log on password. </summary>
+        public static final string PASSWORD_DEFAULT = "guest";
+
+        // ====================== Messaging Topology Properties ==========================
+
+        /// <summary> Holds the name of the property to get the bind publisher procuder flag from. </summary>
+        public static final string PUBLISHER_PRODUCER_BIND_PROPNAME = "publisherProducerBind";
+
+        /// <summary> Holds the default value of the publisher producer flag. </summary>
+        public static final bool PUBLISHER_PRODUCER_BIND_DEFAULT = true;
+
+        /// <summary> Holds the name of the property to get the bind publisher procuder flag from. </summary>
+        public static final string PUBLISHER_CONSUMER_BIND_PROPNAME = "publisherConsumerBind";
+
+        /// <summary> Holds the default value of the publisher consumer flag. </summary>
+        public static final bool PUBLISHER_CONSUMER_BIND_DEFAULT = false;
+
+        /// <summary> Holds the name of the property to get the bind receivers procuder flag from. </summary>
+        public static final string RECEIVER_PRODUCER_BIND_PROPNAME = "receiverProducerBind";
+
+        /// <summary> Holds the default value of the receivers producer flag. </summary>
+        public static final bool RECEIVER_PRODUCER_BIND_DEFAULT = false;
+
+        /// <summary> Holds the name of the property to get the bind receivers procuder flag from. </summary>
+        public static final string RECEIVER_CONSUMER_BIND_PROPNAME = "receiverConsumerBind";
+
+        /// <summary> Holds the default value of the receivers consumer flag. </summary>
+        public static final bool RECEIVER_CONSUMER_BIND_DEFAULT = true;
+
+        /// <summary> Holds the name of the property to get the publishers consumer active flag from. </summary>
+        public static final string PUBLISHER_CONSUMER_ACTIVE_PROPNAME = "publisherConsumerActive";
+
+        /// <summary> Holds the default value of the publishers consumer active flag. </summary>
+        public static final bool PUBLISHER_CONSUMER_ACTIVE_DEFAULT = true;
+
+        /// <summary> Holds the name of the property to get the receivers consumer active flag from. </summary>
+        public static final string RECEIVER_CONSUMER_ACTIVE_PROPNAME = "receiverConsumerActive";
+
+        /// <summary> Holds the default value of the receivers consumer active flag. </summary>
+        public static final bool RECEIVER_CONSUMER_ACTIVE_DEFAULT = true;
+
+        /// <summary> Holds the name of the property to get the destination name root from. </summary>
+        public static final string SEND_DESTINATION_NAME_ROOT_PROPNAME = "sendDestinationRoot";
+
+        /// <summary> Holds the root of the name of the default destination to send to. </summary>
+        public static final string SEND_DESTINATION_NAME_ROOT_DEFAULT = "sendTo";
+
+        /// <summary> Holds the name of the property to get the destination name root from. </summary>
+        public static final string RECEIVE_DESTINATION_NAME_ROOT_PROPNAME = "receiveDestinationRoot";
+
+        /// <summary> Holds the root of the name of the default destination to send to. </summary>
+        public static final string RECEIVE_DESTINATION_NAME_ROOT_DEFAULT = "receiveFrom";
+
+        /// <summary> Holds the name of the proeprty to get the destination count from. </summary>
+        public static final string DESTINATION_COUNT_PROPNAME = "destinationCount";
+
+        /// <summary> Defines the default number of destinations to ping. </summary>
+        public static final int DESTINATION_COUNT_DEFAULT = 1;
+
+        /// <summary> Holds the name of the property to get the p2p or pub/sub messaging mode from. </summary>
+        public static final string PUBSUB_PROPNAME = "pubsub";
+
+        /// <summary> Holds the pub/sub mode default, true means ping a topic, false means ping a queue. </summary>
+        public static final bool PUBSUB_DEFAULT = false;
+
+        // ======================  JMS Options and Flags =================================
+
+        /// <summary> Holds the name of the property to get the test delivery mode from. </summary>
+        public static final string PERSISTENT_MODE_PROPNAME = "persistent";
+
+        /// <summary> Holds the message delivery mode to use for the test. </summary>
+        public static final bool PERSISTENT_MODE_DEFAULT = false;
+
+        /// <summary> Holds the name of the property to get the test transactional mode from. </summary>
+        public static final string TRANSACTED_PUBLISHER_PROPNAME = "transactedPublisher";
+
+        /// <summary> Holds the transactional mode to use for the test. </summary>
+        public static final bool TRANSACTED_PUBLISHER_DEFAULT = false;
+
+        /// <summary> Holds the name of the property to get the test transactional mode from. </summary>
+        public static final string TRANSACTED_RECEIVER_PROPNAME = "transactedReceiver";
+
+        /// <summary> Holds the transactional mode to use for the test. </summary>
+        public static final bool TRANSACTED_RECEIVER_DEFAULT = false;
+
+        /// <summary> Holds the name of the property to set the no local flag from. </summary>
+        public static final string NO_LOCAL_PROPNAME = "noLocal";
+
+        /// <summary> Defines the default value of the no local flag to use when consuming messages. </summary>
+        public static final bool NO_LOCAL_DEFAULT = false;
+
+        /// <summary> Holds the name of the property to get the message acknowledgement mode from. </summary>
+        public static final string ACK_MODE_PROPNAME = "ackMode";
+
+        /// <summary> Defines the default message acknowledgement mode. </summary>
+        public static final int ACK_MODE_DEFAULT = Session.AUTO_ACKNOWLEDGE;
+
+        /// <summary> Holds the name of the property to get the durable subscriptions flag from, when doing pub/sub messaging. </summary>
+        public static final string DURABLE_SUBSCRIPTION_PROPNAME = "durableSubscription";
+
+        /// <summary> Defines the default value of the durable subscriptions flag. </summary>
+        public static final bool DURABLE_SUBSCRIPTION_DEFAULT = false;
+
+        // ======================  Qpid/AMQP Options and Flags ================================
+
+        /// <summary> Holds the name of the property to set the exclusive flag from. </summary>
+        public static final string EXCLUSIVE_PROPNAME = "exclusive";
+
+        /// <summary> Defines the default value of the exclusive flag to use when consuming messages. </summary>
+        public static final bool EXCLUSIVE_DEFAULT = false;
+
+        /// <summary> Holds the name of the property to set the immediate flag from. </summary>
+        public static final string IMMEDIATE_PROPNAME = "immediate";
+
+        /// <summary> Defines the default value of the immediate flag to use when sending messages. </summary>
+        public static final bool IMMEDIATE_DEFAULT = false;
+
+        /// <summary> Holds the name of the property to set the mandatory flag from. </summary>
+        public static final string MANDATORY_PROPNAME = "mandatory";
+
+        /// <summary> Defines the default value of the mandatory flag to use when sending messages. </summary>
+        public static final bool MANDATORY_DEFAULT = false;
+
+        /// <summary> Holds the name of the property to get the durable destinations flag from. </summary>
+        public static final string DURABLE_DESTS_PROPNAME = "durableDests";
+
+        /// <summary> Default value for the durable destinations flag. </summary>
+        public static final bool DURABLE_DESTS_DEFAULT = false;
+
+        /// <summary> Holds the name of the property to set the prefetch size from. </summary>
+        public static final string PREFETCH_PROPNAME = "prefetch";
+
+        /// <summary> Defines the default prefetch size to use when consuming messages. </summary>
+        public static final int PREFETCH_DEFAULT = 100;
+
+        // ======================  Common Test Parameters ================================
+
+        /// <summary> Holds the name of the property to get the test message size from. </summary>
+        public static final string MESSAGE_SIZE_PROPNAME = "messageSize";
+
+        /// <summary> Used to set up a default message size. </summary>
+        public static final int MESSAGE_SIZE_DEAFULT = 0;
+
+        /// <summary> Holds the name of the property to get the message rate from. </summary>
+        public static final string RATE_PROPNAME = "rate";
+
+        /// <summary> Defines the default rate (in pings per second) to send pings at. 0 means as fast as possible, no restriction. </summary>
+        public static final int RATE_DEFAULT = 0;
+
+        /// <summary> Holds the name of the proeprty to get the. </summary>
+        public static final string SELECTOR_PROPNAME = "selector";
+
+        /// <summary> Holds the default message selector. </summary>
+        public static final string SELECTOR_DEFAULT = "";
+
+        /// <summary> Holds the name of the property to get the waiting timeout for response messages. </summary>
+        public static final string TIMEOUT_PROPNAME = "timeout";
+
+        /// <summary> Default time to wait before assuming that a ping has timed out. </summary>
+        public static final long TIMEOUT_DEFAULT = 30000;
+
+        /// <summary> Holds the name of the property to get the commit batch size from. </summary>
+        public static final string TX_BATCH_SIZE_PROPNAME = "commitBatchSize";
+
+        /// <summary> Defines the default number of pings to send in each transaction when running transactionally. </summary>
+        public static final int TX_BATCH_SIZE_DEFAULT = 1;
+
+        /// <summary> Holds the name of the property to set the maximum amount of pending message data for a producer to hold. </summary>
+        public static final string MAX_PENDING_PROPNAME = "maxPending";
+
+        /// <summary> Defines the default maximum quantity of pending message data to allow producers to hold. </summary>
+        public static final int MAX_PENDING_DEFAULT = 0;
+
+        /// <summary> Holds the name of the property to get the publisher rollback flag from. </summary>
+        public static final string ROLLBACK_PUBLISHER_PROPNAME = "rollbackPublisher";
+
+        /// <summary> Holds the default publisher roll back setting. </summary>
+        public static final bool ROLLBACK_PUBLISHER_DEFAULT = false;
+
+        /// <summary> Holds the name of the property to get the publisher rollback flag from. </summary>
+        public static final string ROLLBACK_RECEIVER_PROPNAME = "rollbackReceiver";
+
+        /// <summary> Holds the default publisher roll back setting. </summary>
+        public static final bool ROLLBACK_RECEIVER_DEFAULT = false;
+
+        // ====================== Options that control the bahviour of the test framework. =========================
+
+        /// <summary> Holds the name of the property to get the behavioural mode of not applicable assertions. </summary>
+        public static final string NOT_APPLICABLE_ASSERTION_PROPNAME = "notApplicableAssertion";
+
+        /// <summary> Holds the default behavioral mode of not applicable assertions, which is logging them as a warning. </summary>
+        public static final string NOT_APPLICABLE_ASSERTION_DEFAULT = "warn";
+
+        /// <summary> Holds the name of the property to get the verbose mode proeprty from. </summary>
+        public static final string VERBOSE_PROPNAME = "verbose";
+
+        /// <summary> Holds the default verbose mode. </summary>
+        public static final bool VERBOSE_DEFAULT = false;
+
+        /// <summary> Holds the default configuration properties. </summary>
+        public static ParsedProperties defaults = new ParsedProperties();
+
+        static
+        {
+            defaults.setPropertyIfNull(INITIAL_CONTEXT_FACTORY_PROPNAME, INITIAL_CONTEXT_FACTORY_DEFAULT);
+            defaults.setPropertyIfNull(BROKER_PROPNAME, BROKER_DEFAULT);
+            defaults.setPropertyIfNull(VIRTUAL_HOST_PROPNAME, VIRTUAL_HOST_DEFAULT);
+            defaults.setPropertyIfNull(USERNAME_PROPNAME, USERNAME_DEFAULT);
+            defaults.setPropertyIfNull(PASSWORD_PROPNAME, PASSWORD_DEFAULT);
+
+            defaults.setPropertyIfNull(PUBLISHER_PRODUCER_BIND_PROPNAME, PUBLISHER_PRODUCER_BIND_DEFAULT);
+            defaults.setPropertyIfNull(PUBLISHER_CONSUMER_BIND_PROPNAME, PUBLISHER_CONSUMER_BIND_DEFAULT);
+            defaults.setPropertyIfNull(RECEIVER_PRODUCER_BIND_PROPNAME, RECEIVER_PRODUCER_BIND_DEFAULT);
+            defaults.setPropertyIfNull(RECEIVER_CONSUMER_BIND_PROPNAME, RECEIVER_CONSUMER_BIND_DEFAULT);
+            defaults.setPropertyIfNull(PUBLISHER_CONSUMER_ACTIVE_PROPNAME, PUBLISHER_CONSUMER_ACTIVE_DEFAULT);
+            defaults.setPropertyIfNull(RECEIVER_CONSUMER_ACTIVE_PROPNAME, RECEIVER_CONSUMER_ACTIVE_DEFAULT);
+            defaults.setPropertyIfNull(SEND_DESTINATION_NAME_ROOT_PROPNAME, SEND_DESTINATION_NAME_ROOT_DEFAULT);
+            defaults.setPropertyIfNull(RECEIVE_DESTINATION_NAME_ROOT_PROPNAME, RECEIVE_DESTINATION_NAME_ROOT_DEFAULT);
+            defaults.setPropertyIfNull(DESTINATION_COUNT_PROPNAME, DESTINATION_COUNT_DEFAULT);
+            defaults.setPropertyIfNull(PUBSUB_PROPNAME, PUBSUB_DEFAULT);
+
+            defaults.setPropertyIfNull(PERSISTENT_MODE_PROPNAME, PERSISTENT_MODE_DEFAULT);
+            defaults.setPropertyIfNull(TRANSACTED_PUBLISHER_PROPNAME, TRANSACTED_PUBLISHER_DEFAULT);
+            defaults.setPropertyIfNull(TRANSACTED_RECEIVER_PROPNAME, TRANSACTED_RECEIVER_DEFAULT);
+            defaults.setPropertyIfNull(NO_LOCAL_PROPNAME, NO_LOCAL_DEFAULT);
+            defaults.setPropertyIfNull(ACK_MODE_PROPNAME, ACK_MODE_DEFAULT);
+            defaults.setPropertyIfNull(DURABLE_SUBSCRIPTION_PROPNAME, DURABLE_SUBSCRIPTION_DEFAULT);
+
+            defaults.setPropertyIfNull(EXCLUSIVE_PROPNAME, EXCLUSIVE_DEFAULT);
+            defaults.setPropertyIfNull(IMMEDIATE_PROPNAME, IMMEDIATE_DEFAULT);
+            defaults.setPropertyIfNull(MANDATORY_PROPNAME, MANDATORY_DEFAULT);
+            defaults.setPropertyIfNull(DURABLE_DESTS_PROPNAME, DURABLE_DESTS_DEFAULT);
+            defaults.setPropertyIfNull(PREFETCH_PROPNAME, PREFETCH_DEFAULT);
+
+            defaults.setPropertyIfNull(MESSAGE_SIZE_PROPNAME, MESSAGE_SIZE_DEAFULT);
+            defaults.setPropertyIfNull(RATE_PROPNAME, RATE_DEFAULT);
+            defaults.setPropertyIfNull(SELECTOR_PROPNAME, SELECTOR_DEFAULT);
+            defaults.setPropertyIfNull(TIMEOUT_PROPNAME, TIMEOUT_DEFAULT);
+            defaults.setPropertyIfNull(TX_BATCH_SIZE_PROPNAME, TX_BATCH_SIZE_DEFAULT);
+            defaults.setPropertyIfNull(MAX_PENDING_PROPNAME, MAX_PENDING_DEFAULT);
+            defaults.setPropertyIfNull(ROLLBACK_PUBLISHER_PROPNAME, ROLLBACK_PUBLISHER_DEFAULT);
+            defaults.setPropertyIfNull(ROLLBACK_RECEIVER_PROPNAME, ROLLBACK_RECEIVER_DEFAULT);
+
+            defaults.setPropertyIfNull(NOT_APPLICABLE_ASSERTION_PROPNAME, NOT_APPLICABLE_ASSERTION_DEFAULT);
+            defaults.setPropertyIfNull(VERBOSE_PROPNAME, VERBOSE_DEFAULT);
+        }
+
+        /// <summary> Creates a test configuration based on the defaults. </summary>
+        public MessagingTestConfigProperties()
+        {
+            super(defaults);
+        }
+
+        /// <summary>
+        /// Creates a test configuration based on the supplied properties.
+        /// </summary>
+        /// <param name="properties"> The test configuration. </param>
+        public MessagingTestConfigProperties(Properties properties)
+        {
+            super(properties);
+        }
+
+        /// <summary>
+        /// The size of test messages to send.
+        /// </summary>
+        /// <return> The size of test messages to send. </return>
+        public int getMessageSize()
+        {
+            return getPropertyAsInteger(MESSAGE_SIZE_PROPNAME);
+        }
+
+        /// <summary>
+        /// Flag to indicate that the publishing producer should be set up to publish to a destination.
+        /// </summary>
+        /// <return> Flag to indicate that the publishing producer should be set up to publish to a destination. </return>
+        public bool getPublisherProducerBind()
+        {
+            return getPropertyAsBoolean(PUBLISHER_PRODUCER_BIND_PROPNAME);
+        }
+
+        /// <summary>
+        /// Flag to indicate that the publishing consumer should be set up to receive from a destination.
+        /// </summary>
+        /// <return> Flag to indicate that the publishing consumer should be set up to receive from a destination. </return>
+        public bool getPublisherConsumerBind()
+        {
+            return getPropertyAsBoolean(PUBLISHER_CONSUMER_BIND_PROPNAME);
+        }
+
+        /// <summary>
+        /// Flag to indicate that the receiving producer should be set up to publish to a destination.
+        /// </summary>
+        /// <return> Flag to indicate that the receiving producer should be set up to publish to a destination. </return>
+        public bool getReceiverProducerBind()
+        {
+            return getPropertyAsBoolean(RECEIVER_PRODUCER_BIND_PROPNAME);
+        }
+
+        /// <summary>
+        /// Flag to indicate that the receiving consumer should be set up to receive from a destination.
+        /// </summary>
+        /// <return> Flag to indicate that the receiving consumer should be set up to receive from a destination. </return>
+        public bool getReceiverConsumerBind()
+        {
+            return getPropertyAsBoolean(RECEIVER_CONSUMER_BIND_PROPNAME);
+        }
+
+        /// <summary>
+        /// Flag to indicate that the publishing consumer should be created and actively listening.
+        /// </summary>
+        /// <return> Flag to indicate that the publishing consumer should be created. </return>
+        public bool getPublisherConsumerActive()
+        {
+            return getPropertyAsBoolean(PUBLISHER_CONSUMER_ACTIVE_PROPNAME);
+        }
+
+        /// <summary>
+        /// Flag to indicate that the receiving consumers should be created and actively listening.
+        /// </summary>
+        /// <return> Flag to indicate that the receiving consumers should be created and actively listening. </return>
+        public bool getReceiverConsumerActive()
+        {
+            return getPropertyAsBoolean(RECEIVER_CONSUMER_ACTIVE_PROPNAME);
+        }
+
+        /// <summary>
+        /// A root to create all test destination names from.
+        /// </summary>
+        /// <return> A root to create all test destination names from. </return>
+        public string getSendDestinationNameRoot()
+        {
+            return getProperty(SEND_DESTINATION_NAME_ROOT_PROPNAME);
+        }
+
+        /// <summary>
+        /// A root to create all receiving destination names from.
+        /// </summary>
+        /// <return> A root to create all receiving destination names from. </return>
+        public string getReceiveDestinationNameRoot()
+        {
+            return getProperty(RECEIVE_DESTINATION_NAME_ROOT_PROPNAME);
+        }
+
+        /// <summary>
+        /// Flag to indicate that persistent messages should be used.
+        /// </summary>
+        /// <return> Flag to indicate that persistent messages should be used. </return>
+        public bool getPersistentMode()
+        {
+            return getPropertyAsBoolean(PERSISTENT_MODE_PROPNAME);
+        }
+
+        /// <summary>
+        /// Flag to indicate that transactional messages should be sent by the publisher.
+        /// </summary>
+        /// <return> Flag to indicate that transactional messages should be sent by the publisher. </return>
+        public bool getPublisherTransacted()
+        {
+            return getPropertyAsBoolean(TRANSACTED_PUBLISHER_PROPNAME);
+        }
+
+        /// <summary>
+        /// Flag to indicate that transactional receives should be used by the receiver.
+        /// </summary>
+        /// <return> Flag to indicate that transactional receives should be used by the receiver. </return>
+        public bool getReceiverTransacted()
+        {
+            return getPropertyAsBoolean(TRANSACTED_PUBLISHER_PROPNAME);
+        }
+
+        /// <summary>
+        /// The name of the virtual host to run all tests over.
+        /// </summary>
+        /// <return> The name of the virtual host to run all tests over. </return>
+        public string getVirtualHost()
+        {
+            return getProperty(VIRTUAL_HOST_PROPNAME);
+        }
+
+        /// <summary>
+        /// Limiting rate for each sender in messages per second, or zero for unlimited.
+        /// </summary>
+        /// <return> Limiting rate for each sender in messages per second, or zero for unlimited. </return>
+        public string getRate()
+        {
+            return getProperty(RATE_PROPNAME);
+        }
+
+        /// <summary>
+        /// Flag to indicate that test messages should be received publish/subscribe style by all receivers.
+        /// </summary>
+        /// <return> Flag to indicate that test messages should be received publish/subscribe style by all receivers. </return>
+        public bool getPubsub()
+        {
+            return getPropertyAsBoolean(PUBSUB_PROPNAME);
+        }
+
+        /// <summary>
+        /// The username credentials to run tests with.
+        /// </summary>
+        /// <return> The username credentials to run tests with. </return>
+        public string getUsername()
+        {
+            return getProperty(USERNAME_PROPNAME);
+        }
+
+        /// <summary>
+        /// The password credentials to run tests with.
+        /// </summary>
+        /// <return> The password credentials to run tests with. </return>
+        public string getPassword()
+        {
+            return getProperty(PASSWORD_PROPNAME);
+        }
+
+        /// <summary>
+        /// The timeout duration to fail tests on, should they receive no messages within it.
+        /// </summary>
+        /// <return> The timeout duration to fail tests on, should they receive no messages within it. </return>
+        public long getTimeout()
+        {
+            return getPropertyAsLong(TIMEOUT_PROPNAME);
+        }
+
+        /// <summary>
+        /// The number of messages to batch into each transaction in transational tests.
+        /// </summary>
+        /// <return> The number of messages to batch into each transaction in transational tests. </return>
+        public int getTxBatchSize()
+        {
+            return getPropertyAsInteger(TX_BATCH_SIZE_PROPNAME);
+        }
+
+        /// <summary>
+        /// Flag to indicate that tests should use durable destinations.
+        /// </summary>
+        /// <return> Flag to indicate that tests should use durable destinations. </return>
+        public bool getDurableDests()
+        {
+            return getPropertyAsBoolean(DURABLE_DESTS_PROPNAME);
+        }
+
+        /// <summary>
+        /// The ack mode for message receivers to use.
+        /// </summary>
+        /// <return> The ack mode for message receivers to use. </return>
+        public int getAckMode()
+        {
+            return getPropertyAsInteger(ACK_MODE_PROPNAME);
+        }
+
+        /// <summary>
+        /// Flag to indicate that tests should use durable subscriptions.
+        /// </summary>
+        /// <return> Flag to indicate that tests should use durable subscriptions. </return>
+        public bool getDurableSubscription()
+        {
+            return getPropertyAsBoolean(DURABLE_SUBSCRIPTION_PROPNAME);
+        }
+
+        /// <summary>
+        /// The maximum amount of in-flight data, in bytes, that tests should send at any time.
+        /// </summary>
+        /// <return> The maximum amount of in-flight data, in bytes, that tests should send at any time. </return>
+        public int getMaxPending()
+        {
+            return getPropertyAsInteger(MAX_PENDING_PROPNAME);
+        }
+
+        /// <summary>
+        /// The size of the prefetch queue to use.
+        /// </summary>
+        /// <return> The size of the prefetch queue to use. </return>
+        public int getPrefetch()
+        {
+            return getPropertyAsInteger(PREFETCH_PROPNAME);
+        }
+
+        /// <summary>
+        /// Flag to indicate that subscriptions should be no-local.
+        /// </summary>
+        /// <return> Flag to indicate that subscriptions should be no-local. </return>
+        public bool getNoLocal()
+        {
+            return getPropertyAsBoolean(NO_LOCAL_PROPNAME);
+        }
+
+        /// <summary>
+        /// Flag to indicate that subscriptions should be exclusive.
+        /// </summary>
+        /// <return> Flag to indicate that subscriptions should be exclusive. </return>
+        public bool getExclusive()
+        {
+            return getPropertyAsBoolean(EXCLUSIVE_PROPNAME);
+        }
+
+        /// <summary>
+        /// Flag to indicate that messages must be delivered immediately.
+        /// </summary>
+        /// <return> Flag to indicate that messages must be delivered immediately. </return>
+        public bool getImmediate()
+        {
+            return getPropertyAsBoolean(IMMEDIATE_PROPNAME);
+        }
+
+        /// <summary>
+        /// Flag to indicate that messages must be routable.
+        /// </summary>
+        /// <return> Flag to indicate that messages must be routable. </return>
+        public bool getMandatory()
+        {
+            return getPropertyAsBoolean(MANDATORY_PROPNAME);
+        }
+
+        /// <summary>
+        /// Gets the value of a flag to indicate that the publisher should rollback all messages sent.
+        /// </summary>
+        /// <return> A flag to indicate that the publisher should rollback all messages sent. </return>
+        public bool getRollbackPublisher()
+        {
+            return getPropertyAsBoolean(ROLLBACK_PUBLISHER_PROPNAME);
+        }
+
+        /// <summary>
+        /// Gets the value of a flag to indicate that the receiver should rollback all messages received, then receive them
+        /// again.
+        /// </summary>
+        /// <return> A flag to indicate that the publisher should rollback all messages received. </return>
+        public bool getRollbackReceiver()
+        {
+            return getPropertyAsBoolean(ROLLBACK_RECEIVER_PROPNAME);
+        }
+
+        /// <summary>
+        /// Gets the behavioural mode of not applicable assertions. Should be one of 'quiet', 'warn' or 'fail'.
+        /// </summary>
+        /// <return> The behavioural mode of not applicable assertions. </return>
+        public string getNotApplicableAssertionMode()
+        {
+            return getProperty(NOT_APPLICABLE_ASSERTION_PROPNAME);
+        }
+    }
+    */
+}
\ No newline at end of file



Mime
View raw message