You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by ch...@apache.org on 2006/09/29 00:01:07 UTC

svn commit: r451036 [2/3] - in /incubator/activemq/activemq-dotnet/trunk: ./ src/main/csharp/ src/main/csharp/ActiveMQ/Commands/ src/main/csharp/ActiveMQ/OpenWire/ src/main/csharp/ActiveMQ/Transport/ src/main/csharp/JMS/ src/main/csharp/MSMQ/ src/main/...

Added: incubator/activemq/activemq-dotnet/trunk/src/test/csharp/ActiveMQ/TransactionTest.cs
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-dotnet/trunk/src/test/csharp/ActiveMQ/TransactionTest.cs?view=auto&rev=451036
==============================================================================
--- incubator/activemq/activemq-dotnet/trunk/src/test/csharp/ActiveMQ/TransactionTest.cs (added)
+++ incubator/activemq/activemq-dotnet/trunk/src/test/csharp/ActiveMQ/TransactionTest.cs Thu Sep 28 15:01:04 2006
@@ -0,0 +1,38 @@
+/*
+ * 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 ActiveMQ;
+using NMS;
+using NUnit.Framework;
+using System;
+
+
+namespace ActiveMQ
+{
+	[TestFixture]
+    public class TransactionTest : NMS.Test.TransactionTest 
+    {
+
+        private String brokerURI = "tcp://localhost:61616";
+        protected override IConnectionFactory CreateConnectionFactory()
+        {
+            return new ConnectionFactory(new Uri(brokerURI));
+        }
+		
+    }
+}
+
+

Modified: incubator/activemq/activemq-dotnet/trunk/src/test/csharp/CommonAssemblyInfo.cs
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-dotnet/trunk/src/test/csharp/CommonAssemblyInfo.cs?view=diff&rev=451036&r1=451035&r2=451036
==============================================================================
--- incubator/activemq/activemq-dotnet/trunk/src/test/csharp/CommonAssemblyInfo.cs (original)
+++ incubator/activemq/activemq-dotnet/trunk/src/test/csharp/CommonAssemblyInfo.cs Thu Sep 28 15:01:04 2006
@@ -2,15 +2,15 @@
 using System.Reflection;
 using System.Runtime.InteropServices;
 
-// ------------------------------------------------------------------------------
-//  <autogenerated>
-//      This code was generated by a tool.
-//      Mono Runtime Version: 1.1.4322.2032
-// 
-//      Changes to this file may cause incorrect behavior and will be lost if 
-//      the code is regenerated.
-//  </autogenerated>
-// ------------------------------------------------------------------------------
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:2.0.50727.42
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
 
 [assembly: ComVisibleAttribute(false)]
 [assembly: CLSCompliantAttribute(false)]
@@ -22,6 +22,6 @@
 [assembly: AssemblyCopyrightAttribute("Copyright (C) 2005-2006 Apache Software Foundation")]
 [assembly: AssemblyTrademarkAttribute("")]
 [assembly: AssemblyCultureAttribute("")]
-[assembly: AssemblyVersionAttribute("4.0.2460.0")]
+[assembly: AssemblyVersionAttribute("4.0.2462.0")]
 [assembly: AssemblyInformationalVersionAttribute("4.0")]
 

Added: incubator/activemq/activemq-dotnet/trunk/src/test/csharp/MSMQ/MSMQTest.cs
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-dotnet/trunk/src/test/csharp/MSMQ/MSMQTest.cs?view=auto&rev=451036
==============================================================================
--- incubator/activemq/activemq-dotnet/trunk/src/test/csharp/MSMQ/MSMQTest.cs (added)
+++ incubator/activemq/activemq-dotnet/trunk/src/test/csharp/MSMQ/MSMQTest.cs Thu Sep 28 15:01:04 2006
@@ -0,0 +1,126 @@
+/*
+ * 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 NUnit.Framework;
+using System;
+using System.Messaging;
+
+namespace MSMQ
+{    
+    /// <summary>
+    /// Use to test and verify MSMQ behaviour.
+    /// </summary>
+	[TestFixture]
+    public class MSMQTest
+    {
+        String queueName = ".\\Private$\\FOO";
+	    
+		[SetUp]
+        public void SetUp()
+        {
+        }
+		
+        [TearDown]
+        public void TearDown()
+        {
+        }		
+		
+        [Test]
+        public void TestSendAndReceive()
+        {
+            // check to make sure the message queue does not exist already
+            if (!MessageQueue.Exists(queueName))
+            {
+                // create the new message queue and make it transactional
+                MessageQueue MQ = MessageQueue.Create(queueName, true);
+
+                // set the label name and close the message queue
+                MQ.Label = "FOO";
+                MQ.Close();
+
+                Console.WriteLine("Created Queue: " + queueName);
+                //Assert.Fail("Should  have thrown an exception!");
+            } 
+            else
+            {
+                Console.WriteLine("Queue Existed: " + queueName);
+                
+            }
+
+
+            if (!MessageQueue.Exists(".\\Private$\\BAR"))
+            {
+                // create the new message queue and make it transactional
+                MessageQueue MQ = MessageQueue.Create(".\\Private$\\BAR", true);
+
+                // set the label name and close the message queue
+                MQ.Label = "BAR Label";
+                MQ.Close();
+
+            }
+            else
+            {
+                Console.WriteLine("Queue Existed: " + queueName);
+
+            }
+
+            // create a message queue transaction and start it
+            MessageQueueTransaction Transaction = new MessageQueueTransaction();
+            Transaction.Begin();
+
+            MessageQueue MQueue = new MessageQueue(queueName);
+
+            Message Msg = new Message("Hello World");
+            Msg.ResponseQueue = new MessageQueue(".\\Private$\\BAR");
+            Msg.Priority = MessagePriority.Normal;
+            Msg.UseJournalQueue = true;
+            Msg.Label = "Test Label";
+
+            Msg.AcknowledgeType = AcknowledgeTypes.FullReceive;
+            Msg.AdministrationQueue = Msg.ResponseQueue;
+
+            // send the message
+            MQueue.Send(Msg, Transaction);
+            MQueue.Send(Msg, Transaction);
+            MQueue.Send(Msg, Transaction);
+
+            // commit the transaction
+            Transaction.Commit();
+
+            
+            // Read the message.
+            MQueue.MessageReadPropertyFilter.SetAll();
+            
+            // the target type we have stored in the message body
+            
+            ((XmlMessageFormatter)MQueue.Formatter).TargetTypes = new Type[] { typeof(String) };
+            
+              // read the message from the queue, but only wait for 5 sec
+              Msg = MQueue.Receive(new TimeSpan(0, 0, 5));
+
+              // read the order from the message body
+              Console.WriteLine("Received: "+Msg.Body);
+            
+
+            // close the mesage queue
+            MQueue.Close();
+		}
+						
+    }
+}
+
+
+

Added: incubator/activemq/activemq-dotnet/trunk/src/test/csharp/MSMQ/ProducerTest.cs
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-dotnet/trunk/src/test/csharp/MSMQ/ProducerTest.cs?view=auto&rev=451036
==============================================================================
--- incubator/activemq/activemq-dotnet/trunk/src/test/csharp/MSMQ/ProducerTest.cs (added)
+++ incubator/activemq/activemq-dotnet/trunk/src/test/csharp/MSMQ/ProducerTest.cs Thu Sep 28 15:01:04 2006
@@ -0,0 +1,66 @@
+/*
+ * 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 NMS;
+using NUnit.Framework;
+
+namespace MSMQ
+{
+	[TestFixture]
+    public class ProducerTest : NMS.Test.NMSTestSupport
+    {
+				
+		[SetUp]
+        override public void SetUp()
+        {
+			base.SetUp();
+        }
+		
+        [TearDown]
+        override public void TearDown()
+        {
+			base.TearDown();
+        }
+
+        override protected IConnectionFactory CreateConnectionFactory()
+        {
+            return new ConnectionFactory();
+        }
+	    
+        protected override string CreateDestinationName()
+        {
+            return ".\\Private$\\" + GetType().Name;
+        }
+	    
+        [Test]
+        public void TestPublishMessage()
+        {            
+            IMessageProducer producer = Session.CreateProducer(Destination);
+			producer.Persistent = true;
+			
+            // Send the messages
+            ITextMessage message = Session.CreateTextMessage("1st");
+//            message.Properties["color"] =  "red";
+            producer.Send(message);
+            
+            
+        }
+				
+    }
+}
+
+
+

Added: incubator/activemq/activemq-dotnet/trunk/src/test/csharp/NMS/Test/AsyncConsumeTest.cs
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-dotnet/trunk/src/test/csharp/NMS/Test/AsyncConsumeTest.cs?view=auto&rev=451036
==============================================================================
--- incubator/activemq/activemq-dotnet/trunk/src/test/csharp/NMS/Test/AsyncConsumeTest.cs (added)
+++ incubator/activemq/activemq-dotnet/trunk/src/test/csharp/NMS/Test/AsyncConsumeTest.cs Thu Sep 28 15:01:04 2006
@@ -0,0 +1,148 @@
+/*
+ * 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;
+using System.Threading;
+using NUnit.Framework;
+
+namespace NMS.Test
+{
+    [TestFixture]
+    public abstract class AsyncConsumeTest : NMSTestSupport
+    {
+        protected Object semaphore = new Object();
+        protected bool received;
+
+
+        [SetUp]
+        public override void SetUp()
+        {
+            base.SetUp();
+        }
+
+        [TearDown]
+        public override void TearDown()
+        {
+            base.TearDown();
+        }
+
+        [Test]
+        public void TestAsynchronousConsume()
+        {
+            // START SNIPPET: demo
+            IMessageConsumer consumer = Session.CreateConsumer(Destination);
+            consumer.Listener += new MessageListener(OnMessage);
+            // END SNIPPET: demo
+
+            // now lets send a message
+            IMessageProducer producer = CreateProducer();
+            IMessage request = CreateMessage();
+            request.NMSCorrelationID = "abc";
+            request.NMSType = "Test";
+            producer.Send(request);
+
+            WaitForMessageToArrive();
+        }
+
+        [Test]
+        public void TestCreateConsumerAfterSend()
+        {
+            // now lets send a message
+            IMessageProducer producer = CreateProducer();
+            IMessage request = CreateMessage();
+            request.NMSCorrelationID = "abc";
+            request.NMSType = "Test";
+            producer.Send(request);
+
+            // lets create an async consumer
+            IMessageConsumer consumer = Session.CreateConsumer(Destination);
+            consumer.Listener += new MessageListener(OnMessage);
+
+            WaitForMessageToArrive();
+        }
+
+        [Test]
+        public void TestCreateConsumerBeforeSendButAddListenerAfterSend()
+        {
+            // lets create an async consumer
+            IMessageConsumer consumer = Session.CreateConsumer(Destination);
+
+            // now lets send a message
+            IMessageProducer producer = CreateProducer();
+            IMessage request = CreateMessage();
+            request.NMSCorrelationID = "abc";
+            request.NMSType = "Test";
+            producer.Send(request);
+
+            // now lets add the listener
+            consumer.Listener += new MessageListener(OnMessage);
+
+            WaitForMessageToArrive();
+        }
+
+        [Test]
+        public void TextMessageSRExample()
+        {
+            using (IConnection connection = Factory.CreateConnection())
+            {
+                AcknowledgementMode acknowledgementMode = AcknowledgementMode.AutoAcknowledge;
+                ISession session = connection.CreateSession(acknowledgementMode);
+
+                IDestination destination = session.GetQueue("FOO.BAR");
+
+                // lets create a consumer and producer
+                IMessageConsumer consumer = session.CreateConsumer(destination);
+                consumer.Listener += new MessageListener(OnMessage);
+
+                IMessageProducer producer = session.CreateProducer(destination);
+                producer.Persistent = true;
+
+                // lets send a message
+                ITextMessage request = session.CreateTextMessage(
+                    "HelloWorld!");
+                request.NMSCorrelationID = "abc";
+                request.Properties["NMSXGroupID"] = "cheese";
+                request.Properties["myHeader"] = "James";
+
+                producer.Send(request);
+
+                WaitForMessageToArrive();
+            }
+        }
+
+        protected void OnMessage(IMessage message)
+        {
+            Console.WriteLine("Received message: " + message);
+            lock (semaphore)
+            {
+                received = true;
+                Monitor.PulseAll(semaphore);
+            }
+        }
+
+        protected void WaitForMessageToArrive()
+        {
+            lock (semaphore)
+            {
+                if (!received)
+                {
+                    Monitor.Wait(semaphore, receiveTimeout);
+                }
+                Assert.AreEqual(true, received, "Should have received a message by now!");
+            }
+        }
+    }
+}
\ No newline at end of file

Added: incubator/activemq/activemq-dotnet/trunk/src/test/csharp/NMS/Test/BadConsumeTest.cs
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-dotnet/trunk/src/test/csharp/NMS/Test/BadConsumeTest.cs?view=auto&rev=451036
==============================================================================
--- incubator/activemq/activemq-dotnet/trunk/src/test/csharp/NMS/Test/BadConsumeTest.cs (added)
+++ incubator/activemq/activemq-dotnet/trunk/src/test/csharp/NMS/Test/BadConsumeTest.cs Thu Sep 28 15:01:04 2006
@@ -0,0 +1,53 @@
+/*
+ * 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;
+using NUnit.Framework;
+
+namespace NMS.Test
+{
+    [TestFixture]
+    public abstract class BadConsumeTest : NMSTestSupport
+    {
+        [SetUp]
+        public override void SetUp()
+        {
+            base.SetUp();
+        }
+
+        [TearDown]
+        public override void TearDown()
+        {
+            base.TearDown();
+        }
+
+        [Test]
+        public void TestBadConsumeOperationToTestExceptions()
+        {
+            try
+            {
+                IMessageConsumer consumer = Session.CreateConsumer(null);
+                Console.WriteLine("Created consumer: " + consumer);
+                Assert.Fail("Should  have thrown an exception!");
+            }
+            catch (Exception e)
+            {
+                Console.WriteLine("Caught expected exception: " + e);
+                Console.WriteLine("Stack: " + e.StackTrace);
+            }
+        }
+    }
+}
\ No newline at end of file

Added: incubator/activemq/activemq-dotnet/trunk/src/test/csharp/NMS/Test/BytesMessageTest.cs
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-dotnet/trunk/src/test/csharp/NMS/Test/BytesMessageTest.cs?view=auto&rev=451036
==============================================================================
--- incubator/activemq/activemq-dotnet/trunk/src/test/csharp/NMS/Test/BytesMessageTest.cs (added)
+++ incubator/activemq/activemq-dotnet/trunk/src/test/csharp/NMS/Test/BytesMessageTest.cs Thu Sep 28 15:01:04 2006
@@ -0,0 +1,63 @@
+/*
+ * 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;
+using NUnit.Framework;
+
+namespace NMS.Test
+{
+    [TestFixture]
+    public abstract class BytesMessageTest : NMSTestSupport
+    {
+        private byte[] expected = {1, 2, 3, 4, 5, 6, 7, 8};
+
+        [SetUp]
+        public override void SetUp()
+        {
+            base.SetUp();
+        }
+
+        [TearDown]
+        public override void TearDown()
+        {
+            base.TearDown();
+        }
+
+        [Test]
+        public override void SendAndSyncReceive()
+        {
+            base.SendAndSyncReceive();
+        }
+
+        protected override IMessage CreateMessage()
+        {
+            IBytesMessage request = Session.CreateBytesMessage(expected);
+            return request;
+        }
+
+        protected override void AssertValidMessage(IMessage message)
+        {
+            Assert.IsTrue(message is IBytesMessage, "Did not receive a IBytesMessage: " + message);
+
+            Console.WriteLine("Received IBytesMessage: " + message);
+
+            IBytesMessage bytesMessage = (IBytesMessage) message;
+            byte[] actual = bytesMessage.Content;
+            Console.WriteLine("Received message with content: " + actual);
+            Assert.AreEqual(expected, actual, "the message content");
+        }
+    }
+}
\ No newline at end of file

Added: incubator/activemq/activemq-dotnet/trunk/src/test/csharp/NMS/Test/ConsumerTest.cs
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-dotnet/trunk/src/test/csharp/NMS/Test/ConsumerTest.cs?view=auto&rev=451036
==============================================================================
--- incubator/activemq/activemq-dotnet/trunk/src/test/csharp/NMS/Test/ConsumerTest.cs (added)
+++ incubator/activemq/activemq-dotnet/trunk/src/test/csharp/NMS/Test/ConsumerTest.cs Thu Sep 28 15:01:04 2006
@@ -0,0 +1,94 @@
+/*
+ * 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;
+using NUnit.Framework;
+
+namespace NMS.Test
+{
+    [TestFixture]
+    public abstract class ConsumerTest : NMSTestSupport
+    {
+        public bool persistent;
+        public int prefetch;
+        public bool durableConsumer;
+
+        [SetUp]
+        public override void SetUp()
+        {
+            clientId = "test";
+            base.SetUp();
+        }
+
+        [TearDown]
+        public override void TearDown()
+        {
+            base.TearDown();
+        }
+
+
+        [Test]
+        public void TestDurableConsumerSelectorChangePersistent()
+        {
+            destinationType = DestinationType.Topic;
+            persistent = true;
+            doTestDurableConsumerSelectorChange();
+        }
+
+        [Test]
+        public void TestDurableConsumerSelectorChangeNonPersistent()
+        {
+            destinationType = DestinationType.Topic;
+            persistent = true;
+            doTestDurableConsumerSelectorChange();
+        }
+
+        public void doTestDurableConsumerSelectorChange()
+        {
+            IMessageProducer producer = Session.CreateProducer(Destination);
+            producer.Persistent = persistent;
+            IMessageConsumer consumer =
+                Session.CreateDurableConsumer((ITopic) Destination, "test", "color='red'", false);
+
+            // Send the messages
+            ITextMessage message = Session.CreateTextMessage("1st");
+            message.Properties["color"] = "red";
+            producer.Send(message);
+
+            IMessage m = consumer.Receive(TimeSpan.FromMilliseconds(receiveTimeout));
+            Assert.IsNotNull(m);
+            Assert.AreEqual("1st", ((ITextMessage) m).Text);
+
+            // Change the subscription.
+            consumer.Dispose();
+            consumer = Session.CreateDurableConsumer((ITopic) Destination, "test", "color='blue'", false);
+
+            message = Session.CreateTextMessage("2nd");
+            message.Properties["color"] = "red";
+            producer.Send(message);
+            message = Session.CreateTextMessage("3rd");
+            message.Properties["color"] = "blue";
+            producer.Send(message);
+
+            // Selector should skip the 2nd message.
+            m = consumer.Receive(TimeSpan.FromMilliseconds(1000));
+            Assert.IsNotNull(m);
+            Assert.AreEqual("3rd", ((ITextMessage) m).Text);
+
+            Assert.IsNull(consumer.ReceiveNoWait());
+        }
+    }
+}
\ No newline at end of file

Added: incubator/activemq/activemq-dotnet/trunk/src/test/csharp/NMS/Test/DurableTest.cs
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-dotnet/trunk/src/test/csharp/NMS/Test/DurableTest.cs?view=auto&rev=451036
==============================================================================
--- incubator/activemq/activemq-dotnet/trunk/src/test/csharp/NMS/Test/DurableTest.cs (added)
+++ incubator/activemq/activemq-dotnet/trunk/src/test/csharp/NMS/Test/DurableTest.cs Thu Sep 28 15:01:04 2006
@@ -0,0 +1,107 @@
+/*
+ * 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;
+using NUnit.Framework;
+
+namespace NMS.Test
+{
+    [TestFixture]
+    public abstract class DurableTest : NMSTestSupport
+    {
+        private static string TOPIC = "TestTopic";
+        private static String CLIENT_ID = "DurableClientId";
+        private static String CONSUMER_ID = "ConsumerId";
+
+        private int count = 0;
+
+        public void RegisterDurableConsumer()
+        {
+            using (IConnection connection = Factory.CreateConnection())
+            {
+                connection.ClientId = CLIENT_ID;
+                connection.Start();
+
+                using (ISession session = connection.CreateSession(
+                    AcknowledgementMode.DupsOkAcknowledge))
+                {
+                    ITopic topic = session.GetTopic(TOPIC);
+                    IMessageConsumer consumer = session.CreateDurableConsumer(
+                        topic, CONSUMER_ID, "2 > 1", false);
+                    consumer.Dispose();
+                }
+
+                connection.Stop();
+            }
+        }
+
+        public void SendPersistentMessage()
+        {
+            using (IConnection connection = Factory.CreateConnection())
+            {
+                connection.Start();
+                using (ISession session = connection.CreateSession(
+                    AcknowledgementMode.DupsOkAcknowledge))
+                {
+                    ITopic topic = session.GetTopic(TOPIC);
+                    ITextMessage message = session.CreateTextMessage("Hello");
+                    message.NMSPersistent = true;
+                    IMessageProducer producer = session.CreateProducer();
+                    producer.Send(topic, message);
+                    producer.Dispose();
+                }
+
+                connection.Stop();
+            }
+        }
+
+        [Test]
+        public void TestMe()
+        {
+            count = 0;
+
+            RegisterDurableConsumer();
+            SendPersistentMessage();
+
+            using (IConnection connection = Factory.CreateConnection())
+            {
+                connection.ClientId = CLIENT_ID;
+                connection.Start();
+
+                using (ISession session = connection.CreateSession(
+                    AcknowledgementMode.DupsOkAcknowledge))
+                {
+                    ITopic topic = session.GetTopic(TOPIC);
+                    IMessageConsumer consumer = session.CreateDurableConsumer(
+                        topic, CONSUMER_ID, "2 > 1", false);
+                    consumer.Listener += new MessageListener(consumer_Listener);
+                    /// Don't know how else to give the system enough time. /// Thread.Sleep(5000); Assert.AreEqual(0, count); Console.WriteLine("Count = " + count); SendPersistentMessage(); Thread.Sleep(5000); Assert.AreEqual(2, count); Console.WriteLine("Count = " + count); consumer.Dispose(); }
+
+                    connection.Stop();
+                }
+            }
+        }
+
+        /// <summary>
+        ///
+        /// </summary>
+        /// <param name="message"></param>
+        private void consumer_Listener(IMessage message)
+        {
+            ++count;
+        }
+    }
+}
\ No newline at end of file

Added: incubator/activemq/activemq-dotnet/trunk/src/test/csharp/NMS/Test/JMSPropertyTest.cs
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-dotnet/trunk/src/test/csharp/NMS/Test/JMSPropertyTest.cs?view=auto&rev=451036
==============================================================================
--- incubator/activemq/activemq-dotnet/trunk/src/test/csharp/NMS/Test/JMSPropertyTest.cs (added)
+++ incubator/activemq/activemq-dotnet/trunk/src/test/csharp/NMS/Test/JMSPropertyTest.cs Thu Sep 28 15:01:04 2006
@@ -0,0 +1,142 @@
+/*
+ * 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 ActiveMQ;
+using NMS;
+using NUnit.Framework;
+using System;
+
+namespace NMS.Test
+{
+    [ TestFixture ]
+    abstract public class NMSPropertyTest : NMSTestSupport
+    {
+        // standard NMS properties
+        string expectedText = "Hey this works!";
+        string correlationID = "abc";
+        ITemporaryQueue replyTo;
+        bool persistent = true;
+        byte priority = 5;
+        String type = "FooType";
+        String groupID = "MyGroup";
+        int groupSeq = 1;
+        
+        // custom properties
+        string customText = "Cheese";
+        bool custom1 = true;
+        byte custom2 = 12;
+        short custom3 = 0x1234;
+        int custom4 = 0x12345678;
+        long custom5 = 0x1234567812345678;
+        char custom6 = 'J';
+        
+        [SetUp]
+        override public void SetUp()
+        {
+            base.SetUp();
+        }
+        
+        [TearDown]
+        override public void TearDown()
+        {
+            base.TearDown();
+        }
+        
+        [ Test ]
+        public override void SendAndSyncReceive()
+        {
+            base.SendAndSyncReceive();
+        }
+        
+        protected override IMessage CreateMessage()
+        {
+            ITextMessage message = Session.CreateTextMessage(expectedText);
+            replyTo = Session.CreateTemporaryQueue();
+            
+            // lets set the headers
+            message.NMSCorrelationID = correlationID;
+            message.NMSReplyTo = replyTo;
+            message.NMSPersistent = persistent;
+            message.NMSPriority = priority;
+            message.NMSType = type;
+            message.Properties["NMSXGroupID"] = groupID;
+            message.Properties["NMSXGroupSeq"] = groupSeq;
+            
+            // lets set the custom headers
+            message.Properties["customText"] = customText;
+            message.Properties["custom1"] = custom1;
+            message.Properties["custom2"] = custom2;
+            message.Properties["custom3"] = custom3;
+            message.Properties["custom4"] = custom4;
+            message.Properties["custom5"] = custom5;
+            message.Properties["custom6"] = custom6;
+            
+            return message;
+        }
+        
+        protected override void AssertValidMessage(IMessage message)
+        {
+            Assert.IsTrue(message is ITextMessage, "Did not receive a ITextMessage!");
+            
+            Console.WriteLine("Received Message: " + message);
+            
+            ITextMessage textMessage = (ITextMessage) message;
+            String text = textMessage.Text;
+            Assert.AreEqual(expectedText, text, "the message text");
+            
+            // compare standard NMS headers
+            Assert.AreEqual(correlationID, message.NMSCorrelationID, "NMSCorrelationID");
+            Assert.AreEqual(replyTo, message.NMSReplyTo, "NMSReplyTo");
+            Assert.AreEqual(persistent, message.NMSPersistent, "NMSPersistent");
+            Assert.AreEqual(priority, message.NMSPriority, "NMSPriority");
+            Assert.AreEqual(type, message.NMSType, "NMSType");
+            Assert.AreEqual(groupID, message.Properties["NMSXGroupID"], "NMSXGroupID");
+            Assert.AreEqual(groupSeq, message.Properties["NMSXGroupSeq"], "NMSXGroupSeq");
+            
+            // compare custom headers
+            Assert.AreEqual(customText, message.Properties["customText"], "customText");
+            Assert.AreEqual(custom1, message.Properties["custom1"], "custom1");
+            Assert.AreEqual(custom2, message.Properties["custom2"], "custom2");
+            Assert.AreEqual(custom3, message.Properties["custom3"], "custom3");
+            Assert.AreEqual(custom4, message.Properties["custom4"], "custom4");
+            // TODO
+            Assert.AreEqual(custom5, message.Properties["custom5"], "custom5");
+            Object value6 = message.Properties["custom6"];
+            Object expected6 = custom6;
+            Console.WriteLine("actual type is: " + value6.GetType() + " value: " + value6);
+            Console.WriteLine("expected type is: " + expected6.GetType() + " value: " + expected6);
+            Assert.AreEqual(custom6, value6, "custom6 which is of type: " + value6.GetType());
+            
+            Assert.AreEqual(custom1, message.Properties.GetBool("custom1"), "custom1");
+            Assert.AreEqual(custom2, message.Properties.GetByte("custom2"), "custom2");
+            Assert.AreEqual(custom3, message.Properties.GetShort("custom3"), "custom3");
+            Assert.AreEqual(custom4, message.Properties.GetInt("custom4"), "custom4");
+            Assert.AreEqual(custom5, message.Properties.GetLong("custom5"), "custom5");
+            //Assert.AreEqual(custom6, message.Properties.GetChar("custom6"), "custom6");
+            
+            // lets now look at some standard NMS headers
+            Console.WriteLine("NMSExpiration: " + message.NMSExpiration);
+            Console.WriteLine("NMSMessageId: " + message.NMSMessageId);
+            Console.WriteLine("NMSRedelivered: " + message.NMSRedelivered);
+            Console.WriteLine("NMSTimestamp: " + message.NMSTimestamp);
+            Console.WriteLine("NMSXDeliveryCount: " + message.Properties["NMSXDeliveryCount"]);
+            Console.WriteLine("NMSXProducerTXID: " + message.Properties["NMSXProducerTXID"]);
+        }
+    }
+}
+
+
+

Added: incubator/activemq/activemq-dotnet/trunk/src/test/csharp/NMS/Test/MapMessageTest.cs
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-dotnet/trunk/src/test/csharp/NMS/Test/MapMessageTest.cs?view=auto&rev=451036
==============================================================================
--- incubator/activemq/activemq-dotnet/trunk/src/test/csharp/NMS/Test/MapMessageTest.cs (added)
+++ incubator/activemq/activemq-dotnet/trunk/src/test/csharp/NMS/Test/MapMessageTest.cs Thu Sep 28 15:01:04 2006
@@ -0,0 +1,126 @@
+/*
+ * 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 NMS;
+using NUnit.Framework;
+using System;
+
+
+
+namespace NMS.Test
+{
+	[ TestFixture ]
+    abstract public class MapMessageTest : NMSTestSupport
+    {	    
+        bool a = true;
+        byte b = 123;
+        char c = 'c';
+        short d = 0x1234;
+        int e = 0x12345678;
+        long f = 0x1234567812345678;
+        string g = "Hello World!";
+		bool h = false;
+        byte i = 0xFF;
+        short j = -0x1234;
+        int k = -0x12345678;
+        long l = -0x1234567812345678;
+        
+		[SetUp]
+        override public void SetUp()
+        {
+			base.SetUp();
+        }
+		
+        [TearDown]
+        override public void TearDown()
+        {
+			base.TearDown();
+        }
+		
+        [ Test ]
+        public override void SendAndSyncReceive()
+        {
+            base.SendAndSyncReceive();
+        }
+		
+        protected override IMessage CreateMessage()
+        {
+            IMapMessage message = Session.CreateMapMessage();
+            
+            message.Body["a"] = a;
+            message.Body["b"] = b;
+            message.Body["c"] = c;
+            message.Body["d"] = d;
+            message.Body["e"] = e;
+            message.Body["f"] = f;
+            message.Body["g"] = g;
+            message.Body["h"] = h;
+            message.Body["i"] = i;
+            message.Body["j"] = j;
+            message.Body["k"] = k;
+            message.Body["l"] = l;
+            
+            return message;
+        }
+        
+        protected override void AssertValidMessage(IMessage message)
+        {
+            Assert.IsTrue(message is IMapMessage, "Did not receive a MapMessage!");
+            IMapMessage mapMessage = (IMapMessage) message;
+            
+            Console.WriteLine("Received MapMessage: " + message);
+            Console.WriteLine("Received Count: " + mapMessage.Body.Count);
+			
+            Assert.AreEqual(ToHex(f), ToHex(mapMessage.Body.GetLong("f")), "map entry: f as hex");
+            
+            // use generic API to access entries
+            Assert.AreEqual(a, mapMessage.Body["a"], "generic map entry: a");
+            Assert.AreEqual(b, mapMessage.Body["b"], "generic map entry: b");
+            Assert.AreEqual(c, mapMessage.Body["c"], "generic map entry: c");
+            Assert.AreEqual(d, mapMessage.Body["d"], "generic map entry: d");
+            Assert.AreEqual(e, mapMessage.Body["e"], "generic map entry: e");
+            Assert.AreEqual(f, mapMessage.Body["f"], "generic map entry: f");
+            Assert.AreEqual(g, mapMessage.Body["g"], "generic map entry: g");
+            Assert.AreEqual(h, mapMessage.Body["h"], "generic map entry: h");
+            Assert.AreEqual(i, mapMessage.Body["i"], "generic map entry: i");
+            Assert.AreEqual(j, mapMessage.Body["j"], "generic map entry: j");
+            Assert.AreEqual(k, mapMessage.Body["k"], "generic map entry: k");
+            Assert.AreEqual(l, mapMessage.Body["l"], "generic map entry: l");
+            
+            // use type safe APIs
+            Assert.AreEqual(a, mapMessage.Body.GetBool("a"), "map entry: a");
+            Assert.AreEqual(b, mapMessage.Body.GetByte("b"), "map entry: b");
+            Assert.AreEqual(c, mapMessage.Body.GetChar("c"), "map entry: c");
+            Assert.AreEqual(d, mapMessage.Body.GetShort("d"), "map entry: d");
+            Assert.AreEqual(e, mapMessage.Body.GetInt("e"), "map entry: e");
+            Assert.AreEqual(f, mapMessage.Body.GetLong("f"), "map entry: f");
+            Assert.AreEqual(g, mapMessage.Body.GetString("g"), "map entry: g");
+            Assert.AreEqual(h, mapMessage.Body.GetBool("h"), "map entry: h");
+            Assert.AreEqual(i, mapMessage.Body.GetByte("i"), "map entry: i");
+            Assert.AreEqual(j, mapMessage.Body.GetShort("j"), "map entry: j");
+            Assert.AreEqual(k, mapMessage.Body.GetInt("k"), "map entry: k");
+            Assert.AreEqual(l, mapMessage.Body.GetLong("l"), "map entry: l");
+			
+        }
+        
+        protected string ToHex(long value)
+        {
+            return String.Format("{0:x}", value);
+        }
+    }
+}
+
+

Added: incubator/activemq/activemq-dotnet/trunk/src/test/csharp/NMS/Test/MessageTest.cs
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-dotnet/trunk/src/test/csharp/NMS/Test/MessageTest.cs?view=auto&rev=451036
==============================================================================
--- incubator/activemq/activemq-dotnet/trunk/src/test/csharp/NMS/Test/MessageTest.cs (added)
+++ incubator/activemq/activemq-dotnet/trunk/src/test/csharp/NMS/Test/MessageTest.cs Thu Sep 28 15:01:04 2006
@@ -0,0 +1,123 @@
+/*
+ * 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 NMS;
+using NUnit.Framework;
+using System;
+
+
+namespace NMS.Test
+{
+	[ TestFixture ]
+	abstract public class MessageTest : NMSTestSupport
+	{
+	    
+		bool a = true;
+        byte b = 123;
+        char c = 'c';
+        short d = 0x1234;
+        int e = 0x12345678;
+        long f = 0x1234567812345678;
+        string g = "Hello World!";
+		bool h = false;
+        byte i = 0xFF;
+        short j = -0x1234;
+        int k = -0x12345678;
+        long l = -0x1234567812345678;
+        
+		[SetUp]
+        override public void SetUp()
+        {
+			base.SetUp();
+        }
+		
+        [TearDown]
+        override public void TearDown()
+        {
+			base.TearDown();
+        }
+		
+        [ Test ]
+        public override void SendAndSyncReceive()
+        {
+            base.SendAndSyncReceive();
+        }
+		
+        protected override IMessage CreateMessage()
+        {
+            IMessage message = Session.CreateMessage();
+            
+            message.Properties["a"] = a;
+            message.Properties["b"] = b;
+            message.Properties["c"] = c;
+            message.Properties["d"] = d;
+            message.Properties["e"] = e;
+            message.Properties["f"] = f;
+            message.Properties["g"] = g;
+            message.Properties["h"] = h;
+            message.Properties["i"] = i;
+            message.Properties["j"] = j;
+            message.Properties["k"] = k;
+            message.Properties["l"] = l;
+            
+            return message;
+        }
+        
+        protected override void AssertValidMessage(IMessage message)
+        {
+            Console.WriteLine("Received message: " + message);
+            Console.WriteLine("Received Count: " + message.Properties.Count);
+			
+            Assert.AreEqual(ToHex(f), ToHex(message.Properties.GetLong("f")), "map entry: f as hex");
+            
+            // use generic API to access entries
+            Assert.AreEqual(a, message.Properties["a"], "generic map entry: a");
+            Assert.AreEqual(b, message.Properties["b"], "generic map entry: b");
+            Assert.AreEqual(c, message.Properties["c"], "generic map entry: c");
+            Assert.AreEqual(d, message.Properties["d"], "generic map entry: d");
+            Assert.AreEqual(e, message.Properties["e"], "generic map entry: e");
+            Assert.AreEqual(f, message.Properties["f"], "generic map entry: f");
+            Assert.AreEqual(g, message.Properties["g"], "generic map entry: g");
+            Assert.AreEqual(h, message.Properties["h"], "generic map entry: h");
+            Assert.AreEqual(i, message.Properties["i"], "generic map entry: i");
+            Assert.AreEqual(j, message.Properties["j"], "generic map entry: j");
+            Assert.AreEqual(k, message.Properties["k"], "generic map entry: k");
+            Assert.AreEqual(l, message.Properties["l"], "generic map entry: l");
+            
+            // use type safe APIs
+            Assert.AreEqual(a, message.Properties.GetBool("a"), "map entry: a");
+            Assert.AreEqual(b, message.Properties.GetByte("b"), "map entry: b");
+            Assert.AreEqual(c, message.Properties.GetChar("c"), "map entry: c");
+            Assert.AreEqual(d, message.Properties.GetShort("d"), "map entry: d");
+            Assert.AreEqual(e, message.Properties.GetInt("e"), "map entry: e");
+            Assert.AreEqual(f, message.Properties.GetLong("f"), "map entry: f");
+            Assert.AreEqual(g, message.Properties.GetString("g"), "map entry: g");
+            Assert.AreEqual(h, message.Properties.GetBool("h"), "map entry: h");
+            Assert.AreEqual(i, message.Properties.GetByte("i"), "map entry: i");
+            Assert.AreEqual(j, message.Properties.GetShort("j"), "map entry: j");
+            Assert.AreEqual(k, message.Properties.GetInt("k"), "map entry: k");
+            Assert.AreEqual(l, message.Properties.GetLong("l"), "map entry: l");
+            
+        }
+        
+        protected string ToHex(long value)
+        {
+            return String.Format("{0:x}", value);
+        }
+		
+	}
+}
+

Added: incubator/activemq/activemq-dotnet/trunk/src/test/csharp/NMS/Test/NMSTestSupport.cs
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-dotnet/trunk/src/test/csharp/NMS/Test/NMSTestSupport.cs?view=auto&rev=451036
==============================================================================
--- incubator/activemq/activemq-dotnet/trunk/src/test/csharp/NMS/Test/NMSTestSupport.cs (added)
+++ incubator/activemq/activemq-dotnet/trunk/src/test/csharp/NMS/Test/NMSTestSupport.cs Thu Sep 28 15:01:04 2006
@@ -0,0 +1,232 @@
+/*
+ * 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 NMS;
+using NUnit.Framework;
+using System;
+
+/// <summary>
+/// useful base class for test cases
+/// </summary>
+
+namespace NMS.Test
+{
+    [ TestFixture ]
+    public abstract class NMSTestSupport
+    {
+
+        // enable/disable logging of message flows
+        protected bool logging = false;
+
+        private IConnectionFactory factory;
+        private IConnection connection;
+        private ISession session;
+        private IDestination destination;
+
+        protected int receiveTimeout = 1000;
+        protected string clientId;
+        protected DestinationType destinationType = DestinationType.Queue;
+        protected AcknowledgementMode acknowledgementMode = AcknowledgementMode.ClientAcknowledge;
+
+        [SetUp]
+        virtual public void SetUp()
+        {
+        }
+
+        [TearDown]
+        virtual public void TearDown()
+        {
+            Disconnect();
+        }
+
+        // Properties
+        public bool Connected
+        {
+            get { return connection!=null; }
+            set { if( value ) Connect(); else Disconnect(); }
+        }
+
+        public IConnectionFactory Factory
+        {
+            get {
+                if( factory == null ) {
+                    factory = CreateConnectionFactory();
+                    Assert.IsNotNull(factory, "no factory created");
+                }
+                return factory;
+            }
+            set { this.factory = value; }
+        }
+
+        public IConnection Connection
+        {
+            get {
+                if( connection == null ) {
+                    Connect();
+                }
+                return connection;
+            }
+            set { this.connection = value; }
+        }
+
+        public ISession Session
+        {
+            get {
+                if( session == null ) {
+                    session = Connection.CreateSession(acknowledgementMode);
+                    Assert.IsNotNull(connection != null, "no session created");
+                }
+                return session;
+            }
+            set { this.session = value; }
+        }
+
+        virtual protected void Connect()
+        {
+            Console.WriteLine("Connectting...");
+            connection = CreateConnection();
+            Assert.IsNotNull(connection, "no connection created");
+            connection.Start();
+            Console.WriteLine("Connected.");
+            Assert.IsNotNull(connection, "no connection created");
+        }
+
+        virtual protected void Disconnect()
+        {
+            if (connection != null)
+            {
+                Console.WriteLine("Disconnecting...");
+                connection.Dispose();
+                connection = null;
+                session=null;
+                Console.WriteLine("Disconnected.");
+            }
+        }
+        
+        virtual protected void Reconnect()
+        {
+            Disconnect();
+            Connect();
+        }
+
+        protected virtual void Drain()
+        {
+            using (ISession session = Connection.CreateSession())
+            {
+                // Tries to consume any messages on the Destination
+                IMessageConsumer consumer = session.CreateConsumer(Destination);
+
+                // Should only need to wait for first message to arrive due to the way
+                // prefetching works.
+                IMessage msg = consumer.Receive(TimeSpan.FromMilliseconds(receiveTimeout));
+                while (msg != null)
+                {
+                    msg = consumer.ReceiveNoWait();
+                }
+            }
+        }
+
+        public virtual void SendAndSyncReceive()
+        {
+            using (ISession session = Connection.CreateSession())
+            {
+
+                IMessageConsumer consumer = session.CreateConsumer(Destination);
+                IMessageProducer producer = session.CreateProducer(Destination);
+
+                IMessage request = CreateMessage();
+                producer.Send(request);
+
+                IMessage message = consumer.Receive(TimeSpan.FromMilliseconds(receiveTimeout));
+                Assert.IsNotNull(message, "No message returned!");
+                AssertValidMessage(message);
+            }
+        }
+
+        abstract protected IConnectionFactory CreateConnectionFactory();
+
+        protected virtual IConnection CreateConnection()
+        {
+            IConnection connection =  Factory.CreateConnection();
+            if( clientId!=null ) {
+                connection.ClientId = clientId;
+            }
+            return connection;
+        }
+
+        protected virtual IMessageProducer CreateProducer()
+        {
+            IMessageProducer producer = Session.CreateProducer(Destination);
+            return producer;
+        }
+
+        protected virtual IMessageConsumer CreateConsumer()
+        {
+            IMessageConsumer consumer = Session.CreateConsumer(Destination);
+            return consumer;
+        }
+        
+        protected virtual IDestination CreateDestination()
+        {
+            if( destinationType == DestinationType.Queue ) {
+                return Session.GetQueue(CreateDestinationName());
+            } else if( destinationType == DestinationType.Topic ) {
+                return Session.GetTopic(CreateDestinationName());
+            } else if( destinationType == DestinationType.TemporaryQueue ) {
+                return Session.CreateTemporaryQueue();
+            } else if( destinationType == DestinationType.TemporaryTopic ) {
+                return Session.CreateTemporaryTopic();
+            } else {
+                throw new Exception("Unknown destination type: "+destinationType);
+            }
+        }
+
+        protected virtual string CreateDestinationName()
+        {
+            return "Test.DotNet." + GetType().Name;
+        }
+        
+        protected virtual IMessage CreateMessage()
+        {
+            return Session.CreateMessage();
+        }
+        
+        protected virtual  void AssertValidMessage(IMessage message)
+        {
+            Assert.IsNotNull(message, "Null Message!");
+        }
+
+
+        public IDestination Destination
+        {
+            get {
+                if (destination == null)
+                {
+                    destination = CreateDestination();
+                    Assert.IsNotNull(destination, "No destination available!");
+                    Console.WriteLine("Using destination: " + destination);
+                }
+                return destination;
+            }
+            set {
+                destination = value;
+            }
+        }
+
+    }
+}
+
+

Added: incubator/activemq/activemq-dotnet/trunk/src/test/csharp/NMS/Test/TemporaryQueueTest.cs
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-dotnet/trunk/src/test/csharp/NMS/Test/TemporaryQueueTest.cs?view=auto&rev=451036
==============================================================================
--- incubator/activemq/activemq-dotnet/trunk/src/test/csharp/NMS/Test/TemporaryQueueTest.cs (added)
+++ incubator/activemq/activemq-dotnet/trunk/src/test/csharp/NMS/Test/TemporaryQueueTest.cs Thu Sep 28 15:01:04 2006
@@ -0,0 +1,92 @@
+/*
+ * 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 NMS;
+using NUnit.Framework;
+using System;
+using System.Threading;
+
+namespace NMS.Test
+{
+    [ TestFixture ]
+    abstract public class TemporaryQueueTest : NMSTestSupport {
+
+        protected Object semaphore = new Object();
+        protected bool received;
+
+        [ SetUp ]
+        override public void SetUp() {
+            base.SetUp();
+        }
+
+        [ TearDown ]
+        override public void TearDown() {
+            base.TearDown();
+        }
+
+        [ Test ]
+        public void TestAsynchronousConsume() {
+            // lets consume to a regular queue
+            IMessageConsumer consumer = CreateConsumer();
+            consumer.Listener += new MessageListener(OnQueueMessage);
+
+            // lets create a temporary queue and a consumer on it
+            ITemporaryQueue tempQ = Session.CreateTemporaryQueue();
+            IMessageConsumer tempQueueConsumer = Session.CreateConsumer(tempQ);
+            tempQueueConsumer.Listener += new MessageListener(OnTempQueueMessage);
+
+            // Send message to queue which has a listener to reply to the temporary queue
+            IMessageProducer producer = CreateProducer();
+            
+            IMessage request = CreateMessage();
+            request.NMSCorrelationID = "abc";
+            request.NMSReplyTo = tempQ;
+            request.NMSPersistent = false;
+            producer.Send(request);
+
+            // now lets wait for the message to arrive on the temporary queue
+            WaitForMessageToArrive();
+        }
+
+        protected void OnQueueMessage(IMessage message) {
+			Console.WriteLine("First message received: " + message + " so about to reply to temporary queue");
+
+            ITextMessage response = Session.CreateTextMessage("this is a response!!");
+            response.NMSCorrelationID = message.NMSCorrelationID;
+
+            IMessageProducer producerTempQ = Session.CreateProducer(message.NMSReplyTo);
+            //Write msg to temp q.
+            producerTempQ.Send(response); 
+        }
+        
+        protected void OnTempQueueMessage(IMessage message) {
+            Console.WriteLine("Received message on temporary queue: " + message);
+            lock (semaphore) {
+                received = true;
+                Monitor.PulseAll(semaphore);
+            }
+        }
+
+        protected void WaitForMessageToArrive() {
+            lock (semaphore) {
+                if (!received) {
+                    Monitor.Wait(semaphore, receiveTimeout);
+                }
+                Assert.AreEqual(true, received, "Should have received a message by now!");
+            }
+        }
+    }
+}

Added: incubator/activemq/activemq-dotnet/trunk/src/test/csharp/NMS/Test/TextMessage.cs
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-dotnet/trunk/src/test/csharp/NMS/Test/TextMessage.cs?view=auto&rev=451036
==============================================================================
--- incubator/activemq/activemq-dotnet/trunk/src/test/csharp/NMS/Test/TextMessage.cs (added)
+++ incubator/activemq/activemq-dotnet/trunk/src/test/csharp/NMS/Test/TextMessage.cs Thu Sep 28 15:01:04 2006
@@ -0,0 +1,59 @@
+/*
+ * 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;
+using NUnit.Framework;
+
+namespace NMS.Test
+{
+    [TestFixture]
+    public abstract class TextMessage : NMSTestSupport
+    {
+        private string expected = "Hello World!";
+
+        [SetUp]
+        public override void SetUp()
+        {
+            base.SetUp();
+        }
+
+        [TearDown]
+        public override void TearDown()
+        {
+            base.TearDown();
+        }
+
+        [Test]
+        public override void SendAndSyncReceive()
+        {
+            base.SendAndSyncReceive();
+        }
+
+        protected override IMessage CreateMessage()
+        {
+            IMessage request = Session.CreateTextMessage(expected);
+            return request;
+        }
+
+        protected override void AssertValidMessage(IMessage message)
+        {
+            ITextMessage textMessage = (ITextMessage) message;
+            String text = textMessage.Text;
+            Console.WriteLine("Received message with text: " + text);
+            Assert.AreEqual(expected, text, "the message text");
+        }
+    }
+}
\ No newline at end of file

Added: incubator/activemq/activemq-dotnet/trunk/src/test/csharp/NMS/Test/TransactionTest.cs
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-dotnet/trunk/src/test/csharp/NMS/Test/TransactionTest.cs?view=auto&rev=451036
==============================================================================
--- incubator/activemq/activemq-dotnet/trunk/src/test/csharp/NMS/Test/TransactionTest.cs (added)
+++ incubator/activemq/activemq-dotnet/trunk/src/test/csharp/NMS/Test/TransactionTest.cs Thu Sep 28 15:01:04 2006
@@ -0,0 +1,257 @@
+/*
+ * 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 NUnit.Framework;
+using System;
+using System.Collections;
+
+
+namespace NMS.Test
+{
+	[TestFixture]
+    abstract public class TransactionTest : NMSTestSupport
+    {
+        private static int destinationCounter;
+        
+        IMessageProducer producer;
+        IMessageConsumer consumer;
+        
+        [SetUp]
+		override public void SetUp()
+        {
+            base.SetUp();
+			acknowledgementMode = AcknowledgementMode.Transactional;
+            Drain();
+            consumer = Session.CreateConsumer(Destination);
+            producer = Session.CreateProducer(Destination);
+        }
+		
+        [TearDown]
+        override public void TearDown()
+        {
+			base.TearDown();
+        }
+		
+		
+        [Test]
+        public void TestSendRollback()
+        {
+            IMessage[] outbound = new IMessage[]{
+                Session.CreateTextMessage("First Message"),
+                Session.CreateTextMessage("Second Message")
+            };
+            
+            //sends a message
+            producer.Send(outbound[0]);
+            Session.Commit();
+            
+            //sends a message that gets rollbacked
+            producer.Send(Session.CreateTextMessage("I'm going to get rolled back."));
+            Session.Rollback();
+            
+            //sends a message
+            producer.Send(outbound[1]);
+            Session.Commit();
+            
+            //receives the first message
+            ArrayList messages = new ArrayList();
+            Console.WriteLine("About to consume message 1");
+            IMessage message = consumer.Receive(TimeSpan.FromMilliseconds(1000));
+            messages.Add(message);
+            Console.WriteLine("Received: " + message);
+            
+            //receives the second message
+            Console.WriteLine("About to consume message 2");
+            message = consumer.Receive(TimeSpan.FromMilliseconds(4000));
+            messages.Add(message);
+            Console.WriteLine("Received: " + message);
+            
+            //validates that the rollbacked was not consumed
+            Session.Commit();
+            IMessage[] inbound = new IMessage[messages.Count];
+            messages.CopyTo(inbound);
+            AssertTextMessagesEqual("Rollback did not work.", outbound, inbound);
+        }
+        
+        [Test]
+        public void TestSendSessionClose()
+        {
+            IMessage[] outbound = new IMessage[]{
+                Session.CreateTextMessage("First Message"),
+                Session.CreateTextMessage("Second Message")
+            };
+            
+            //sends a message
+            producer.Send(outbound[0]);
+            Session.Commit();
+            
+            //sends a message that gets rollbacked
+            producer.Send(Session.CreateTextMessage("I'm going to get rolled back."));
+            consumer.Dispose();
+            Session.Dispose();
+            
+            Reconnect();
+            
+            //sends a message
+            producer.Send(outbound[1]);
+            Session.Commit();
+            
+            //receives the first message
+            ArrayList messages = new ArrayList();
+            Console.WriteLine("About to consume message 1");
+            IMessage message = consumer.Receive(TimeSpan.FromMilliseconds(1000));
+            messages.Add(message);
+            Console.WriteLine("Received: " + message);
+            
+            //receives the second message
+            Console.WriteLine("About to consume message 2");
+            message = consumer.Receive(TimeSpan.FromMilliseconds(4000));
+            messages.Add(message);
+            Console.WriteLine("Received: " + message);
+            
+            //validates that the rollbacked was not consumed
+            Session.Commit();
+            IMessage[] inbound = new IMessage[messages.Count];
+            messages.CopyTo(inbound);
+            AssertTextMessagesEqual("Rollback did not work.", outbound, inbound);
+        }
+        
+        [Test]
+        public void TestReceiveRollback()
+        {
+            IMessage[] outbound = new IMessage[]{
+                Session.CreateTextMessage("First Message"),
+                Session.CreateTextMessage("Second Message")
+            };
+            
+            //sent both messages
+            producer.Send(outbound[0]);
+            producer.Send(outbound[1]);
+            Session.Commit();
+            
+            Console.WriteLine("Sent 0: " + outbound[0]);
+            Console.WriteLine("Sent 1: " + outbound[1]);
+            
+            ArrayList messages = new ArrayList();
+            IMessage message = consumer.Receive(TimeSpan.FromMilliseconds(1000));
+            messages.Add(message);
+            Assert.AreEqual(outbound[0], message);
+            Session.Commit();
+            
+            // rollback so we can get that last message again.
+            message = consumer.Receive(TimeSpan.FromMilliseconds(1000));
+            Assert.IsNotNull(message);
+            Assert.AreEqual(outbound[1], message);
+            Session.Rollback();
+            
+            // Consume again.. the previous message should
+            // get redelivered.
+            message = consumer.Receive(TimeSpan.FromMilliseconds(5000));
+            Assert.IsNotNull(message, "Should have re-received the message again!");
+            messages.Add(message);
+            Session.Commit();
+            
+            IMessage[] inbound = new IMessage[messages.Count];
+            messages.CopyTo(inbound);
+            AssertTextMessagesEqual("Rollback did not work", outbound, inbound);
+        }
+        
+        
+        [Test]
+        public void TestReceiveTwoThenRollback()
+        {
+            IMessage[] outbound = new IMessage[]{
+                Session.CreateTextMessage("First Message"),
+                Session.CreateTextMessage("Second Message")
+            };
+            
+            producer.Send(outbound[0]);
+            producer.Send(outbound[1]);
+            Session.Commit();
+            
+            Console.WriteLine("Sent 0: " + outbound[0]);
+            Console.WriteLine("Sent 1: " + outbound[1]);
+            
+            ArrayList messages = new ArrayList();
+            IMessage message = consumer.Receive(TimeSpan.FromMilliseconds(1000));
+            AssertTextMessageEqual("first mesage received before rollback", outbound[0], message);
+            
+            message = consumer.Receive(TimeSpan.FromMilliseconds(1000));
+            Assert.IsNotNull(message);
+            AssertTextMessageEqual("second message received before rollback", outbound[1], message);
+            Session.Rollback();
+            
+            // Consume again.. the previous message should
+            // get redelivered.
+            message = consumer.Receive(TimeSpan.FromMilliseconds(5000));
+            Assert.IsNotNull(message, "Should have re-received the first message again!");
+            messages.Add(message);
+            AssertTextMessageEqual("first message received after rollback", outbound[0], message);
+            
+            message = consumer.Receive(TimeSpan.FromMilliseconds(5000));
+            Assert.IsNotNull(message, "Should have re-received the second message again!");
+            messages.Add(message);
+            AssertTextMessageEqual("second message received after rollback", outbound[1], message);
+            
+            Assert.IsNull(consumer.ReceiveNoWait());
+            Session.Commit();
+            
+            IMessage[] inbound = new IMessage[messages.Count];
+            messages.CopyTo(inbound);
+            AssertTextMessagesEqual("Rollback did not work", outbound, inbound);
+        }
+        
+        protected override string CreateDestinationName()
+        {
+            // TODO - how can we get the test name?
+            return base.CreateDestinationName() + (++destinationCounter);
+        }
+        
+        protected void AssertTextMessagesEqual(String message, IMessage[] expected, IMessage[] actual)
+        {
+            Assert.AreEqual(expected.Length, actual.Length, "Incorrect number of messages received");
+            
+            for (int i = 0; i < expected.Length; i++)
+            {
+                AssertTextMessageEqual(message + ". Index: " + i, expected[i], actual[i]);
+            }
+        }
+        
+        protected void AssertTextMessageEqual(String message, IMessage expected, IMessage actual)
+        {
+            Assert.IsTrue(expected is ITextMessage, "expected object not a text message");
+            Assert.IsTrue(actual is ITextMessage, "actual object not a text message");
+            
+            String expectedText = ((ITextMessage) expected).Text;
+            String actualText = ((ITextMessage) actual).Text;
+            
+            Assert.AreEqual(expectedText, actualText, message);
+        }
+		
+		/// <summary>
+		/// Method Reconnect
+		/// </summary>
+		protected override void Reconnect()
+		{
+			base.Reconnect();
+            consumer = Session.CreateConsumer(Destination);
+            producer = Session.CreateProducer(Destination);
+		}
+		
+    }
+}
+
+

Added: incubator/activemq/activemq-dotnet/trunk/vs2005-activemq-test.csproj
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-dotnet/trunk/vs2005-activemq-test.csproj?view=auto&rev=451036
==============================================================================
--- incubator/activemq/activemq-dotnet/trunk/vs2005-activemq-test.csproj (added)
+++ incubator/activemq/activemq-dotnet/trunk/vs2005-activemq-test.csproj Thu Sep 28 15:01:04 2006
@@ -0,0 +1,80 @@
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>8.0.50727</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{EB943C69-2C9B-45E7-B95B-FB916E7057ED}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <RootNamespace>ActiveMQ</RootNamespace>
+    <AssemblyName>activemq-test</AssemblyName>
+    <WarningLevel>4</WarningLevel>
+    <StartupObject>
+    </StartupObject>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <AllowUnsafeBlocks>false</AllowUnsafeBlocks>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugSymbols>false</DebugSymbols>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <AllowUnsafeBlocks>false</AllowUnsafeBlocks>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="nunit.framework" />
+    <Reference Include="System" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="src\test\csharp\ActiveMQ\BadConsumeTest.cs" />
+    <Compile Include="src\test\csharp\ActiveMQ\BytesMessageTest.cs" />
+    <Compile Include="src\test\csharp\ActiveMQ\Commands\CommandTest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="src\test\csharp\ActiveMQ\ConsumerTest.cs" />
+    <Compile Include="src\test\csharp\ActiveMQ\DurableTest.cs" />
+    <Compile Include="src\test\csharp\ActiveMQ\JMSPropertyTest.cs" />
+    <Compile Include="src\test\csharp\ActiveMQ\MapMessageTest.cs" />
+    <Compile Include="src\test\csharp\ActiveMQ\OpenWire\BooleanStreamTest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="src\test\csharp\ActiveMQ\OpenWire\EndianTest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="src\test\csharp\ActiveMQ\OpenWire\PrimitiveMapTest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="src\test\csharp\ActiveMQ\TemporaryQueueTest.cs" />
+    <Compile Include="src\test\csharp\ActiveMQ\TestMain.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="src\test\csharp\ActiveMQ\TextMessage.cs" />
+    <Compile Include="src\test\csharp\ActiveMQ\TransactionTest.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="vs2005-activemq.csproj">
+      <Project>{08321F42-4B3D-4815-B592-95962BAC3B9F}</Project>
+      <Name>vs2005-activemq</Name>
+    </ProjectReference>
+    <ProjectReference Include="vs2005-nms-test.csproj">
+      <Project>{2F3ABCF5-EE87-43B1-9DE7-0548FD6A4E52}</Project>
+      <Name>vs2005-nms-test</Name>
+    </ProjectReference>
+    <ProjectReference Include="vs2005-nms.csproj">
+      <Project>{300C1716-0674-4D01-8F5D-151E59A504FE}</Project>
+      <Name>vs2005-nms</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <Folder Include="src\test\csharp\ActiveMQ\OpenWire\V1\" />
+  </ItemGroup>
+  <Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" />
+</Project>
\ No newline at end of file