You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by ta...@apache.org on 2009/10/26 16:03:36 UTC

svn commit: r829820 - /activemq/activemq-dotnet/Apache.NMS/trunk/src/test/csharp/ConsumerTest.cs

Author: tabish
Date: Mon Oct 26 15:03:35 2009
New Revision: 829820

URL: http://svn.apache.org/viewvc?rev=829820&view=rev
Log:
Adds test to ensure that a timed consumer receive gets a message if its initaited before a producer sends a message.

Modified:
    activemq/activemq-dotnet/Apache.NMS/trunk/src/test/csharp/ConsumerTest.cs

Modified: activemq/activemq-dotnet/Apache.NMS/trunk/src/test/csharp/ConsumerTest.cs
URL: http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS/trunk/src/test/csharp/ConsumerTest.cs?rev=829820&r1=829819&r2=829820&view=diff
==============================================================================
--- activemq/activemq-dotnet/Apache.NMS/trunk/src/test/csharp/ConsumerTest.cs (original)
+++ activemq/activemq-dotnet/Apache.NMS/trunk/src/test/csharp/ConsumerTest.cs Mon Oct 26 15:03:35 2009
@@ -126,6 +126,69 @@
 				}
 			}
 		}
+
+        internal class ThreadArg
+        {
+            internal IConnection connection = null;
+            internal ISession session = null;
+            internal IDestination destination = null;
+        }
+
+        protected void DelayedProducerThreadProc(Object arg)
+        {
+            try
+            {
+                ThreadArg args = arg as ThreadArg;
+
+                using(ISession session = args.connection.CreateSession())
+                {
+                    using(IMessageProducer producer = session.CreateProducer(args.destination))
+                    {
+                        // Give the consumer time to enter the receive.
+                        Thread.Sleep(5000);
+        
+                        producer.Send(args.session.CreateTextMessage("Hello World"));
+                    }
+                }
+            }
+            catch(Exception e)
+            {
+                // Some other exception occurred.
+                Assert.Fail("Test failed with exception: " + e.Message);
+            }
+        }
+        
+        [RowTest]
+        [Row(AcknowledgementMode.AutoAcknowledge)]
+        [Row(AcknowledgementMode.ClientAcknowledge)]
+        [Row(AcknowledgementMode.DupsOkAcknowledge)]
+        [Row(AcknowledgementMode.Transactional)]
+        public void TestConsumerReceiveBeforeMessageDispatched(AcknowledgementMode ackMode)
+        {
+            // Launch a thread to perform a delayed send.
+            Thread sendThread = new Thread(DelayedProducerThreadProc);
+            using(IConnection connection = CreateConnection(TEST_CLIENT_ID))
+            {
+                connection.Start();
+                using(ISession session = connection.CreateSession(ackMode))
+                {
+                    ITemporaryQueue queue = session.CreateTemporaryQueue();
+                    using(IMessageConsumer consumer = session.CreateConsumer(queue))
+                    {
+                        ThreadArg arg = new ThreadArg();
+
+                        arg.connection = connection;
+                        arg.session = session;
+                        arg.destination = queue;
+                        
+                        sendThread.Start(arg);
+                        IMessage message = consumer.Receive(TimeSpan.FromMinutes(1));
+                        Assert.IsNotNull(message);
+                    }
+                }
+            }
+        }
+
 #endif
 
 	}