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/11/09 16:06:16 UTC
svn commit: r834098 -
/activemq/activemq-dotnet/Apache.NMS/trunk/src/test/csharp/TransactionTest.cs
Author: tabish
Date: Mon Nov 9 15:06:16 2009
New Revision: 834098
URL: http://svn.apache.org/viewvc?rev=834098&view=rev
Log:
Lengthen the timeout on some of the tests as they are a bit to short for a loaded broker.
Modified:
activemq/activemq-dotnet/Apache.NMS/trunk/src/test/csharp/TransactionTest.cs
Modified: activemq/activemq-dotnet/Apache.NMS/trunk/src/test/csharp/TransactionTest.cs
URL: http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS/trunk/src/test/csharp/TransactionTest.cs?rev=834098&r1=834097&r2=834098&view=diff
==============================================================================
--- activemq/activemq-dotnet/Apache.NMS/trunk/src/test/csharp/TransactionTest.cs (original)
+++ activemq/activemq-dotnet/Apache.NMS/trunk/src/test/csharp/TransactionTest.cs Mon Nov 9 15:06:16 2009
@@ -24,347 +24,347 @@
namespace Apache.NMS.Test
{
- [TestFixture]
- public class TransactionTest : NMSTestSupport
- {
- protected static string DESTINATION_NAME = "TransactionTestDestination";
- protected static string TEST_CLIENT_ID = "TransactionTestClientId";
- protected static string TEST_CLIENT_ID2 = "TransactionTestClientId2";
-
- [RowTest]
- [Row(MsgDeliveryMode.Persistent)]
- [Row(MsgDeliveryMode.NonPersistent)]
- public void TestSendRollback(MsgDeliveryMode deliveryMode)
- {
- using(IConnection connection = CreateConnection(TEST_CLIENT_ID))
- {
- connection.Start();
- using(ISession session = connection.CreateSession(AcknowledgementMode.Transactional))
- {
- IDestination destination = CreateDestination(session, DESTINATION_NAME);
- using(IMessageConsumer consumer = session.CreateConsumer(destination))
- using(IMessageProducer producer = session.CreateProducer(destination))
- {
- producer.DeliveryMode = deliveryMode;
- producer.RequestTimeout = receiveTimeout;
- ITextMessage firstMsgSend = session.CreateTextMessage("First Message");
- producer.Send(firstMsgSend);
- session.Commit();
-
- ITextMessage rollbackMsg = session.CreateTextMessage("I'm going to get rolled back.");
- producer.Send(rollbackMsg);
- session.Rollback();
-
- ITextMessage secondMsgSend = session.CreateTextMessage("Second Message");
- producer.Send(secondMsgSend);
- session.Commit();
-
- // Receive the messages
-
- IMessage message = consumer.Receive(receiveTimeout);
- AssertTextMessageEqual(firstMsgSend, message, "First message does not match.");
-
- message = consumer.Receive(receiveTimeout);
- AssertTextMessageEqual(secondMsgSend, message, "Second message does not match.");
-
- // validates that the rollback was not consumed
- session.Commit();
- }
- }
- }
- }
-
- [RowTest]
- [Row(MsgDeliveryMode.Persistent)]
- [Row(MsgDeliveryMode.NonPersistent)]
- public void TestSendSessionClose(MsgDeliveryMode deliveryMode)
- {
- ITextMessage firstMsgSend;
- ITextMessage secondMsgSend;
-
- using(IConnection connection1 = CreateConnection(TEST_CLIENT_ID))
- {
- connection1.Start();
- using(ISession session1 = connection1.CreateSession(AcknowledgementMode.Transactional))
- {
- IDestination destination1 = CreateDestination(session1, DESTINATION_NAME);
- using(IMessageConsumer consumer = session1.CreateConsumer(destination1))
- {
- // First connection session that sends one message, and the
- // second message is implicitly rolled back as the session is
- // disposed before Commit() can be called.
- using(IConnection connection2 = CreateConnection(TEST_CLIENT_ID2))
- {
- connection2.Start();
- using(ISession session2 = connection2.CreateSession(AcknowledgementMode.Transactional))
- {
- IDestination destination2 = SessionUtil.GetDestination(session2, DESTINATION_NAME);
- using(IMessageProducer producer = session2.CreateProducer(destination2))
- {
- producer.DeliveryMode = deliveryMode;
- producer.RequestTimeout = receiveTimeout;
- firstMsgSend = session2.CreateTextMessage("First Message");
- producer.Send(firstMsgSend);
- session2.Commit();
-
- ITextMessage rollbackMsg = session2.CreateTextMessage("I'm going to get rolled back.");
- producer.Send(rollbackMsg);
- }
- }
- }
-
- // Second connection session that will send one message.
- using(IConnection connection2 = CreateConnection(TEST_CLIENT_ID2))
- {
- connection2.Start();
- using(ISession session2 = connection2.CreateSession(AcknowledgementMode.Transactional))
- {
- IDestination destination2 = SessionUtil.GetDestination(session2, DESTINATION_NAME);
- using(IMessageProducer producer = session2.CreateProducer(destination2))
- {
- producer.DeliveryMode = deliveryMode;
- producer.RequestTimeout = receiveTimeout;
- secondMsgSend = session2.CreateTextMessage("Second Message");
- producer.Send(secondMsgSend);
- session2.Commit();
- }
- }
- }
-
- // Check the consumer to verify which messages were actually received.
- IMessage message = consumer.Receive(receiveTimeout);
- AssertTextMessageEqual(firstMsgSend, message, "First message does not match.");
-
- message = consumer.Receive(receiveTimeout);
- AssertTextMessageEqual(secondMsgSend, message, "Second message does not match.");
-
- // validates that the rollback was not consumed
- session1.Commit();
- }
- }
- }
- }
-
- [RowTest]
- [Row(MsgDeliveryMode.Persistent)]
- [Row(MsgDeliveryMode.NonPersistent)]
- public void TestReceiveRollback(MsgDeliveryMode deliveryMode)
- {
- using(IConnection connection = CreateConnection(TEST_CLIENT_ID))
- {
- connection.Start();
- using(ISession session = connection.CreateSession(AcknowledgementMode.Transactional))
- {
- IDestination destination = CreateDestination(session, DESTINATION_NAME);
- using(IMessageConsumer consumer = session.CreateConsumer(destination))
- using(IMessageProducer producer = session.CreateProducer(destination))
- {
- producer.DeliveryMode = deliveryMode;
- producer.RequestTimeout = receiveTimeout;
- // Send both messages
- ITextMessage firstMsgSend = session.CreateTextMessage("First Message");
- producer.Send(firstMsgSend);
- ITextMessage secondMsgSend = session.CreateTextMessage("Second Message");
- producer.Send(secondMsgSend);
- session.Commit();
-
- // Receive the messages
-
- IMessage message = consumer.Receive(receiveTimeout);
- AssertTextMessageEqual(firstMsgSend, message, "First message does not match.");
- session.Commit();
-
- message = consumer.Receive(receiveTimeout);
- AssertTextMessageEqual(secondMsgSend, message, "Second message does not match.");
-
- // Rollback so we can get that last message again.
- session.Rollback();
- IMessage rollbackMsg = consumer.Receive(receiveTimeout);
- AssertTextMessageEqual(secondMsgSend, rollbackMsg, "Rollback message does not match.");
- session.Commit();
- }
- }
- }
- }
-
-
- [RowTest]
- [Row(MsgDeliveryMode.Persistent)]
- [Row(MsgDeliveryMode.NonPersistent)]
- public void TestReceiveTwoThenRollback(MsgDeliveryMode deliveryMode)
- {
- using(IConnection connection = CreateConnection(TEST_CLIENT_ID))
- {
- connection.Start();
- using(ISession session = connection.CreateSession(AcknowledgementMode.Transactional))
- {
- IDestination destination = CreateDestination(session, DESTINATION_NAME);
- using(IMessageConsumer consumer = session.CreateConsumer(destination))
- using(IMessageProducer producer = session.CreateProducer(destination))
- {
- producer.DeliveryMode = deliveryMode;
- producer.RequestTimeout = receiveTimeout;
- // Send both messages
- ITextMessage firstMsgSend = session.CreateTextMessage("First Message");
- producer.Send(firstMsgSend);
- ITextMessage secondMsgSend = session.CreateTextMessage("Second Message");
- producer.Send(secondMsgSend);
- session.Commit();
-
- // Receive the messages
-
- IMessage message = consumer.Receive(receiveTimeout);
- AssertTextMessageEqual(firstMsgSend, message, "First message does not match.");
- message = consumer.Receive(receiveTimeout);
- AssertTextMessageEqual(secondMsgSend, message, "Second message does not match.");
-
- // Rollback so we can get that last two messages again.
- session.Rollback();
- IMessage rollbackMsg = consumer.Receive(receiveTimeout);
- AssertTextMessageEqual(firstMsgSend, rollbackMsg, "First rollback message does not match.");
- rollbackMsg = consumer.Receive(receiveTimeout);
- AssertTextMessageEqual(secondMsgSend, rollbackMsg, "Second rollback message does not match.");
-
- Assert.IsNull(consumer.ReceiveNoWait());
- session.Commit();
- }
- }
- }
- }
-
- [RowTest]
- [Row(AcknowledgementMode.AutoAcknowledge, MsgDeliveryMode.Persistent)]
- [Row(AcknowledgementMode.AutoAcknowledge, MsgDeliveryMode.NonPersistent)]
- [Row(AcknowledgementMode.ClientAcknowledge, MsgDeliveryMode.Persistent)]
- [Row(AcknowledgementMode.ClientAcknowledge, MsgDeliveryMode.NonPersistent)]
- public void TestSendCommitNonTransaction(AcknowledgementMode ackMode, MsgDeliveryMode deliveryMode)
- {
- using(IConnection connection = CreateConnection(TEST_CLIENT_ID))
- {
- connection.Start();
- using(ISession session = connection.CreateSession(ackMode))
- {
- IDestination destination = CreateDestination(session, DESTINATION_NAME);
- using(IMessageConsumer consumer = session.CreateConsumer(destination))
- using(IMessageProducer producer = session.CreateProducer(destination))
- {
- producer.DeliveryMode = deliveryMode;
- producer.RequestTimeout = receiveTimeout;
- ITextMessage firstMsgSend = session.CreateTextMessage("SendCommitNonTransaction Message");
- producer.Send(firstMsgSend);
- try
- {
- session.Commit();
- Assert.Fail("Should have thrown an InvalidOperationException.");
- }
- catch(InvalidOperationException)
- {
- }
- }
- }
- }
- }
-
- [RowTest]
- [Row(AcknowledgementMode.AutoAcknowledge, MsgDeliveryMode.Persistent)]
- [Row(AcknowledgementMode.AutoAcknowledge, MsgDeliveryMode.NonPersistent)]
- [Row(AcknowledgementMode.ClientAcknowledge, MsgDeliveryMode.Persistent)]
- [Row(AcknowledgementMode.ClientAcknowledge, MsgDeliveryMode.NonPersistent)]
- public void TestReceiveCommitNonTransaction(AcknowledgementMode ackMode, MsgDeliveryMode deliveryMode)
- {
- using(IConnection connection = CreateConnection(TEST_CLIENT_ID))
- {
- connection.Start();
- using(ISession session = connection.CreateSession(ackMode))
- {
- IDestination destination = CreateDestination(session, DESTINATION_NAME);
- using(IMessageConsumer consumer = session.CreateConsumer(destination))
- using(IMessageProducer producer = session.CreateProducer(destination))
- {
- producer.DeliveryMode = deliveryMode;
- producer.RequestTimeout = receiveTimeout;
- ITextMessage firstMsgSend = session.CreateTextMessage("ReceiveCommitNonTransaction Message");
- producer.Send(firstMsgSend);
-
- // Receive the messages
-
- IMessage message = consumer.Receive(receiveTimeout);
- AssertTextMessageEqual(firstMsgSend, message, "First message does not match.");
- if(AcknowledgementMode.ClientAcknowledge == ackMode)
- {
- message.Acknowledge();
- }
-
- try
- {
- session.Commit();
- Assert.Fail("Should have thrown an InvalidOperationException.");
- }
- catch(InvalidOperationException)
- {
- }
- }
- }
- }
- }
-
- [RowTest]
- [Row(AcknowledgementMode.AutoAcknowledge, MsgDeliveryMode.Persistent)]
- [Row(AcknowledgementMode.AutoAcknowledge, MsgDeliveryMode.NonPersistent)]
- [Row(AcknowledgementMode.ClientAcknowledge, MsgDeliveryMode.Persistent)]
- [Row(AcknowledgementMode.ClientAcknowledge, MsgDeliveryMode.NonPersistent)]
- public void TestReceiveRollbackNonTransaction(AcknowledgementMode ackMode, MsgDeliveryMode deliveryMode)
- {
- using(IConnection connection = CreateConnection(TEST_CLIENT_ID))
- {
- connection.Start();
- using(ISession session = connection.CreateSession(ackMode))
- {
- IDestination destination = CreateDestination(session, DESTINATION_NAME);
- using(IMessageConsumer consumer = session.CreateConsumer(destination))
- using(IMessageProducer producer = session.CreateProducer(destination))
- {
- producer.DeliveryMode = deliveryMode;
- producer.RequestTimeout = receiveTimeout;
- ITextMessage firstMsgSend = session.CreateTextMessage("ReceiveCommitNonTransaction Message");
- producer.Send(firstMsgSend);
-
- // Receive the messages
-
- IMessage message = consumer.Receive(receiveTimeout);
- AssertTextMessageEqual(firstMsgSend, message, "First message does not match.");
- if(AcknowledgementMode.ClientAcknowledge == ackMode)
- {
- message.Acknowledge();
- }
-
- try
- {
- session.Rollback();
- Assert.Fail("Should have thrown an InvalidOperationException.");
- }
- catch(InvalidOperationException)
- {
- }
- }
- }
- }
- }
-
- /// <summary>
- /// Assert that two messages are ITextMessages and their text bodies are equal.
- /// </summary>
- /// <param name="expected"></param>
- /// <param name="actual"></param>
- /// <param name="message"></param>
- protected void AssertTextMessageEqual(IMessage expected, IMessage actual, String message)
- {
- ITextMessage expectedTextMsg = expected as ITextMessage;
- Assert.IsNotNull(expectedTextMsg, "'expected' message not a text message");
- ITextMessage actualTextMsg = actual as ITextMessage;
- Assert.IsNotNull(actualTextMsg, "'actual' message not a text message");
- Assert.AreEqual(expectedTextMsg.Text, actualTextMsg.Text, message);
- }
+ [TestFixture]
+ public class TransactionTest : NMSTestSupport
+ {
+ protected static string DESTINATION_NAME = "TransactionTestDestination";
+ protected static string TEST_CLIENT_ID = "TransactionTestClientId";
+ protected static string TEST_CLIENT_ID2 = "TransactionTestClientId2";
+
+ [RowTest]
+ [Row(MsgDeliveryMode.Persistent)]
+ [Row(MsgDeliveryMode.NonPersistent)]
+ public void TestSendRollback(MsgDeliveryMode deliveryMode)
+ {
+ using(IConnection connection = CreateConnection(TEST_CLIENT_ID))
+ {
+ connection.Start();
+ using(ISession session = connection.CreateSession(AcknowledgementMode.Transactional))
+ {
+ IDestination destination = CreateDestination(session, DESTINATION_NAME);
+ using(IMessageConsumer consumer = session.CreateConsumer(destination))
+ using(IMessageProducer producer = session.CreateProducer(destination))
+ {
+ producer.DeliveryMode = deliveryMode;
+ producer.RequestTimeout = receiveTimeout;
+ ITextMessage firstMsgSend = session.CreateTextMessage("First Message");
+ producer.Send(firstMsgSend);
+ session.Commit();
+
+ ITextMessage rollbackMsg = session.CreateTextMessage("I'm going to get rolled back.");
+ producer.Send(rollbackMsg);
+ session.Rollback();
+
+ ITextMessage secondMsgSend = session.CreateTextMessage("Second Message");
+ producer.Send(secondMsgSend);
+ session.Commit();
+
+ // Receive the messages
+
+ IMessage message = consumer.Receive(receiveTimeout);
+ AssertTextMessageEqual(firstMsgSend, message, "First message does not match.");
+
+ message = consumer.Receive(receiveTimeout);
+ AssertTextMessageEqual(secondMsgSend, message, "Second message does not match.");
+
+ // validates that the rollback was not consumed
+ session.Commit();
+ }
+ }
+ }
+ }
+
+ [RowTest]
+ [Row(MsgDeliveryMode.Persistent)]
+ [Row(MsgDeliveryMode.NonPersistent)]
+ public void TestSendSessionClose(MsgDeliveryMode deliveryMode)
+ {
+ ITextMessage firstMsgSend;
+ ITextMessage secondMsgSend;
+
+ using(IConnection connection1 = CreateConnection(TEST_CLIENT_ID))
+ {
+ connection1.Start();
+ using(ISession session1 = connection1.CreateSession(AcknowledgementMode.Transactional))
+ {
+ IDestination destination1 = CreateDestination(session1, DESTINATION_NAME);
+ using(IMessageConsumer consumer = session1.CreateConsumer(destination1))
+ {
+ // First connection session that sends one message, and the
+ // second message is implicitly rolled back as the session is
+ // disposed before Commit() can be called.
+ using(IConnection connection2 = CreateConnection(TEST_CLIENT_ID2))
+ {
+ connection2.Start();
+ using(ISession session2 = connection2.CreateSession(AcknowledgementMode.Transactional))
+ {
+ IDestination destination2 = SessionUtil.GetDestination(session2, DESTINATION_NAME);
+ using(IMessageProducer producer = session2.CreateProducer(destination2))
+ {
+ producer.DeliveryMode = deliveryMode;
+ producer.RequestTimeout = receiveTimeout;
+ firstMsgSend = session2.CreateTextMessage("First Message");
+ producer.Send(firstMsgSend);
+ session2.Commit();
+
+ ITextMessage rollbackMsg = session2.CreateTextMessage("I'm going to get rolled back.");
+ producer.Send(rollbackMsg);
+ }
+ }
+ }
+
+ // Second connection session that will send one message.
+ using(IConnection connection2 = CreateConnection(TEST_CLIENT_ID2))
+ {
+ connection2.Start();
+ using(ISession session2 = connection2.CreateSession(AcknowledgementMode.Transactional))
+ {
+ IDestination destination2 = SessionUtil.GetDestination(session2, DESTINATION_NAME);
+ using(IMessageProducer producer = session2.CreateProducer(destination2))
+ {
+ producer.DeliveryMode = deliveryMode;
+ producer.RequestTimeout = receiveTimeout;
+ secondMsgSend = session2.CreateTextMessage("Second Message");
+ producer.Send(secondMsgSend);
+ session2.Commit();
+ }
+ }
+ }
+
+ // Check the consumer to verify which messages were actually received.
+ IMessage message = consumer.Receive(receiveTimeout);
+ AssertTextMessageEqual(firstMsgSend, message, "First message does not match.");
+
+ message = consumer.Receive(receiveTimeout);
+ AssertTextMessageEqual(secondMsgSend, message, "Second message does not match.");
+
+ // validates that the rollback was not consumed
+ session1.Commit();
+ }
+ }
+ }
+ }
+
+ [RowTest]
+ [Row(MsgDeliveryMode.Persistent)]
+ [Row(MsgDeliveryMode.NonPersistent)]
+ public void TestReceiveRollback(MsgDeliveryMode deliveryMode)
+ {
+ using(IConnection connection = CreateConnection(TEST_CLIENT_ID))
+ {
+ connection.Start();
+ using(ISession session = connection.CreateSession(AcknowledgementMode.Transactional))
+ {
+ IDestination destination = CreateDestination(session, DESTINATION_NAME);
+ using(IMessageConsumer consumer = session.CreateConsumer(destination))
+ using(IMessageProducer producer = session.CreateProducer(destination))
+ {
+ producer.DeliveryMode = deliveryMode;
+ producer.RequestTimeout = receiveTimeout;
+ // Send both messages
+ ITextMessage firstMsgSend = session.CreateTextMessage("First Message");
+ producer.Send(firstMsgSend);
+ ITextMessage secondMsgSend = session.CreateTextMessage("Second Message");
+ producer.Send(secondMsgSend);
+ session.Commit();
+
+ // Receive the messages
+
+ IMessage message = consumer.Receive(receiveTimeout);
+ AssertTextMessageEqual(firstMsgSend, message, "First message does not match.");
+ session.Commit();
+
+ message = consumer.Receive(receiveTimeout);
+ AssertTextMessageEqual(secondMsgSend, message, "Second message does not match.");
+
+ // Rollback so we can get that last message again.
+ session.Rollback();
+ IMessage rollbackMsg = consumer.Receive(receiveTimeout);
+ AssertTextMessageEqual(secondMsgSend, rollbackMsg, "Rollback message does not match.");
+ session.Commit();
+ }
+ }
+ }
+ }
+
+
+ [RowTest]
+ [Row(MsgDeliveryMode.Persistent)]
+ [Row(MsgDeliveryMode.NonPersistent)]
+ public void TestReceiveTwoThenRollback(MsgDeliveryMode deliveryMode)
+ {
+ using(IConnection connection = CreateConnection(TEST_CLIENT_ID))
+ {
+ connection.Start();
+ using(ISession session = connection.CreateSession(AcknowledgementMode.Transactional))
+ {
+ IDestination destination = CreateDestination(session, DESTINATION_NAME);
+ using(IMessageConsumer consumer = session.CreateConsumer(destination))
+ using(IMessageProducer producer = session.CreateProducer(destination))
+ {
+ producer.DeliveryMode = deliveryMode;
+ producer.RequestTimeout = receiveTimeout;
+ // Send both messages
+ ITextMessage firstMsgSend = session.CreateTextMessage("First Message");
+ producer.Send(firstMsgSend);
+ ITextMessage secondMsgSend = session.CreateTextMessage("Second Message");
+ producer.Send(secondMsgSend);
+ session.Commit();
+
+ // Receive the messages
+
+ IMessage message = consumer.Receive(receiveTimeout);
+ AssertTextMessageEqual(firstMsgSend, message, "First message does not match.");
+ message = consumer.Receive(receiveTimeout);
+ AssertTextMessageEqual(secondMsgSend, message, "Second message does not match.");
+
+ // Rollback so we can get that last two messages again.
+ session.Rollback();
+ IMessage rollbackMsg = consumer.Receive(receiveTimeout);
+ AssertTextMessageEqual(firstMsgSend, rollbackMsg, "First rollback message does not match.");
+ rollbackMsg = consumer.Receive(receiveTimeout);
+ AssertTextMessageEqual(secondMsgSend, rollbackMsg, "Second rollback message does not match.");
+
+ Assert.IsNull(consumer.ReceiveNoWait());
+ session.Commit();
+ }
+ }
+ }
+ }
+
+ [RowTest]
+ [Row(AcknowledgementMode.AutoAcknowledge, MsgDeliveryMode.Persistent)]
+ [Row(AcknowledgementMode.AutoAcknowledge, MsgDeliveryMode.NonPersistent)]
+ [Row(AcknowledgementMode.ClientAcknowledge, MsgDeliveryMode.Persistent)]
+ [Row(AcknowledgementMode.ClientAcknowledge, MsgDeliveryMode.NonPersistent)]
+ public void TestSendCommitNonTransaction(AcknowledgementMode ackMode, MsgDeliveryMode deliveryMode)
+ {
+ using(IConnection connection = CreateConnection(TEST_CLIENT_ID))
+ {
+ connection.Start();
+ using(ISession session = connection.CreateSession(ackMode))
+ {
+ IDestination destination = CreateDestination(session, DESTINATION_NAME);
+ using(IMessageConsumer consumer = session.CreateConsumer(destination))
+ using(IMessageProducer producer = session.CreateProducer(destination))
+ {
+ producer.DeliveryMode = deliveryMode;
+ producer.RequestTimeout = receiveTimeout;
+ ITextMessage firstMsgSend = session.CreateTextMessage("SendCommitNonTransaction Message");
+ producer.Send(firstMsgSend);
+ try
+ {
+ session.Commit();
+ Assert.Fail("Should have thrown an InvalidOperationException.");
+ }
+ catch(InvalidOperationException)
+ {
+ }
+ }
+ }
+ }
+ }
+
+ [RowTest]
+ [Row(AcknowledgementMode.AutoAcknowledge, MsgDeliveryMode.Persistent)]
+ [Row(AcknowledgementMode.AutoAcknowledge, MsgDeliveryMode.NonPersistent)]
+ [Row(AcknowledgementMode.ClientAcknowledge, MsgDeliveryMode.Persistent)]
+ [Row(AcknowledgementMode.ClientAcknowledge, MsgDeliveryMode.NonPersistent)]
+ public void TestReceiveCommitNonTransaction(AcknowledgementMode ackMode, MsgDeliveryMode deliveryMode)
+ {
+ using(IConnection connection = CreateConnection(TEST_CLIENT_ID))
+ {
+ connection.Start();
+ using(ISession session = connection.CreateSession(ackMode))
+ {
+ IDestination destination = CreateDestination(session, DESTINATION_NAME);
+ using(IMessageConsumer consumer = session.CreateConsumer(destination))
+ using(IMessageProducer producer = session.CreateProducer(destination))
+ {
+ producer.DeliveryMode = deliveryMode;
+ producer.RequestTimeout = receiveTimeout;
+ ITextMessage firstMsgSend = session.CreateTextMessage("ReceiveCommitNonTransaction Message");
+ producer.Send(firstMsgSend);
+
+ // Receive the messages
+
+ IMessage message = consumer.Receive(receiveTimeout);
+ AssertTextMessageEqual(firstMsgSend, message, "First message does not match.");
+ if(AcknowledgementMode.ClientAcknowledge == ackMode)
+ {
+ message.Acknowledge();
+ }
+
+ try
+ {
+ session.Commit();
+ Assert.Fail("Should have thrown an InvalidOperationException.");
+ }
+ catch(InvalidOperationException)
+ {
+ }
+ }
+ }
+ }
+ }
+
+ [RowTest]
+ [Row(AcknowledgementMode.AutoAcknowledge, MsgDeliveryMode.Persistent)]
+ [Row(AcknowledgementMode.AutoAcknowledge, MsgDeliveryMode.NonPersistent)]
+ [Row(AcknowledgementMode.ClientAcknowledge, MsgDeliveryMode.Persistent)]
+ [Row(AcknowledgementMode.ClientAcknowledge, MsgDeliveryMode.NonPersistent)]
+ public void TestReceiveRollbackNonTransaction(AcknowledgementMode ackMode, MsgDeliveryMode deliveryMode)
+ {
+ using(IConnection connection = CreateConnection(TEST_CLIENT_ID))
+ {
+ connection.Start();
+ using(ISession session = connection.CreateSession(ackMode))
+ {
+ IDestination destination = CreateDestination(session, DESTINATION_NAME);
+ using(IMessageConsumer consumer = session.CreateConsumer(destination))
+ using(IMessageProducer producer = session.CreateProducer(destination))
+ {
+ producer.DeliveryMode = deliveryMode;
+ producer.RequestTimeout = receiveTimeout;
+ ITextMessage firstMsgSend = session.CreateTextMessage("ReceiveCommitNonTransaction Message");
+ producer.Send(firstMsgSend);
+
+ // Receive the messages
+
+ IMessage message = consumer.Receive(receiveTimeout);
+ AssertTextMessageEqual(firstMsgSend, message, "First message does not match.");
+ if(AcknowledgementMode.ClientAcknowledge == ackMode)
+ {
+ message.Acknowledge();
+ }
+
+ try
+ {
+ session.Rollback();
+ Assert.Fail("Should have thrown an InvalidOperationException.");
+ }
+ catch(InvalidOperationException)
+ {
+ }
+ }
+ }
+ }
+ }
+
+ /// <summary>
+ /// Assert that two messages are ITextMessages and their text bodies are equal.
+ /// </summary>
+ /// <param name="expected"></param>
+ /// <param name="actual"></param>
+ /// <param name="message"></param>
+ protected void AssertTextMessageEqual(IMessage expected, IMessage actual, String message)
+ {
+ ITextMessage expectedTextMsg = expected as ITextMessage;
+ Assert.IsNotNull(expectedTextMsg, "'expected' message not a text message");
+ ITextMessage actualTextMsg = actual as ITextMessage;
+ Assert.IsNotNull(actualTextMsg, "'actual' message not a text message");
+ Assert.AreEqual(expectedTextMsg.Text, actualTextMsg.Text, message);
+ }
[RowTest]
[Row(MsgDeliveryMode.Persistent)]
@@ -376,75 +376,75 @@
connection.Start();
ISession session = connection.CreateSession(AcknowledgementMode.Transactional);
IQueue destination = session.GetQueue("TestRedispatchOfRolledbackTx:"+Guid.NewGuid());
-
+
SendMessages(connection, destination, deliveryMode, 2);
-
+
IMessageConsumer consumer = session.CreateConsumer(destination);
- Assert.IsNotNull(consumer.Receive(TimeSpan.FromMilliseconds(1000)));
- Assert.IsNotNull(consumer.Receive(TimeSpan.FromMilliseconds(1000)));
-
+ Assert.IsNotNull(consumer.Receive(TimeSpan.FromMilliseconds(1500)));
+ Assert.IsNotNull(consumer.Receive(TimeSpan.FromMilliseconds(1500)));
+
// install another consumer while message dispatch is unacked/uncommitted
ISession redispatchSession = connection.CreateSession(AcknowledgementMode.Transactional);
IMessageConsumer redispatchConsumer = redispatchSession.CreateConsumer(destination);
-
+
session.Rollback();
session.Close();
-
- IMessage msg = redispatchConsumer.Receive(TimeSpan.FromMilliseconds(1000));
+
+ IMessage msg = redispatchConsumer.Receive(TimeSpan.FromMilliseconds(1500));
Assert.IsNotNull(msg);
Assert.IsTrue(msg.NMSRedelivered);
Assert.AreEqual(2, msg.Properties.GetLong("NMSXDeliveryCount"));
- msg = redispatchConsumer.Receive(TimeSpan.FromMilliseconds(1000));
+ msg = redispatchConsumer.Receive(TimeSpan.FromMilliseconds(1500));
Assert.IsNotNull(msg);
Assert.IsTrue(msg.NMSRedelivered);
Assert.AreEqual(2, msg.Properties.GetLong("NMSXDeliveryCount"));
redispatchSession.Commit();
-
+
Assert.IsNull(redispatchConsumer.Receive(TimeSpan.FromMilliseconds(500)));
redispatchSession.Close();
- }
+ }
}
[RowTest]
[Row(MsgDeliveryMode.Persistent)]
- [Row(MsgDeliveryMode.NonPersistent)]
+ [Row(MsgDeliveryMode.NonPersistent)]
public void TestRedispatchOfUncommittedTx(MsgDeliveryMode deliveryMode)
- {
+ {
using(IConnection connection = CreateConnection(TEST_CLIENT_ID))
{
connection.Start();
ISession session = connection.CreateSession(AcknowledgementMode.Transactional);
IQueue destination = session.GetQueue("TestRedispatchOfUncommittedTx:"+Guid.NewGuid());
-
+
SendMessages(connection, destination, deliveryMode, 2);
-
+
IMessageConsumer consumer = session.CreateConsumer(destination);
- Assert.IsNotNull(consumer.Receive(TimeSpan.FromMilliseconds(1000)));
- Assert.IsNotNull(consumer.Receive(TimeSpan.FromMilliseconds(1000)));
-
+ Assert.IsNotNull(consumer.Receive(TimeSpan.FromMilliseconds(2000)));
+ Assert.IsNotNull(consumer.Receive(TimeSpan.FromMilliseconds(2000)));
+
// install another consumer while message dispatch is unacked/uncommitted
ISession redispatchSession = connection.CreateSession(AcknowledgementMode.Transactional);
IMessageConsumer redispatchConsumer = redispatchSession.CreateConsumer(destination);
-
+
// no commit so will auto rollback and get re-dispatched to redisptachConsumer
session.Close();
-
- IMessage msg = redispatchConsumer.Receive(TimeSpan.FromMilliseconds(1000));
+
+ IMessage msg = redispatchConsumer.Receive(TimeSpan.FromMilliseconds(2000));
Assert.IsNotNull(msg);
Assert.IsTrue(msg.NMSRedelivered);
Assert.AreEqual(2, msg.Properties.GetLong("NMSXDeliveryCount"));
-
- msg = redispatchConsumer.Receive(TimeSpan.FromMilliseconds(1000));
+
+ msg = redispatchConsumer.Receive(TimeSpan.FromMilliseconds(2000));
Assert.IsNotNull(msg);
Assert.IsTrue(msg.NMSRedelivered);
Assert.AreEqual(2, msg.Properties.GetLong("NMSXDeliveryCount"));
redispatchSession.Commit();
-
+
Assert.IsNull(redispatchConsumer.Receive(TimeSpan.FromMilliseconds(500)));
redispatchSession.Close();
}
- }
- }
+ }
+ }
}