public void TestCloseConsumerBeforeCommit()
{
ITextMessage[] outbound = new ITextMessage[] {
session.CreateTextMessage("First IMessage"),
session.CreateTextMessage("Second IMessage")};
// lets consume any outstanding messages from prev test runs
BeginTx();
bool needCommit = false;
while(consumer.ReceiveNoWait() != null)
{
needCommit = true;
}
if(needCommit)
{
CommitTx();
}
// sends the messages
BeginTx();
producer.Send(outbound[0]);
producer.Send(outbound[1]);
CommitTx();
BeginTx();
ITextMessage message = (ITextMessage)consumer.Receive(TimeSpan.FromMilliseconds(1000));
Assert.AreEqual(outbound[0].Text, message.Text);
// Close the consumer before the Commit. This should not cause the
// received message to Rollback.
consumer.Close();
CommitTx();
// Create a new consumer
consumer = CreateMessageConsumer();
BeginTx();
message = (ITextMessage)consumer.Receive(TimeSpan.FromMilliseconds(1000));
Assert.IsNotNull(message);
Assert.AreEqual(outbound[1].Text, message.Text);
CommitTx();
}