public void TestSendSessionClose()
{
IMessage[] outbound = new IMessage[] {
session.CreateTextMessage("First IMessage"),
session.CreateTextMessage("Second IMessage")};
// sends a message
BeginTx();
producer.Send(outbound[0]);
CommitTx();
// sends a message that gets rollbacked
BeginTx();
producer.Send(session.CreateTextMessage("I'm going to get rolled back."));
consumer.Close();
ReconnectSession();
// sends a message
producer.Send(outbound[1]);
CommitTx();
// receives the first message
LinkedList<IMessage> messages = new LinkedList<IMessage>();
BeginTx();
IMessage message = consumer.Receive(TimeSpan.FromMilliseconds(1000));
Assert.IsNotNull(message);
messages.AddLast(message);
// receives the second message
message = consumer.Receive(TimeSpan.FromMilliseconds(5000));
Assert.IsNotNull(message);
messages.AddLast(message);
// validates that the rollbacked was not consumed
CommitTx();
IMessage[] inbound = new IMessage[messages.Count];
messages.CopyTo(inbound, 0);
AssertTextMessagesEqual(outbound, inbound, "Rollback did not work.");
}