public void TestSendWhileClosed(
[Values(AcknowledgementMode.AutoAcknowledge, AcknowledgementMode.ClientAcknowledge,
AcknowledgementMode.DupsOkAcknowledge, AcknowledgementMode.Transactional)]
AcknowledgementMode ackMode)
{
string TEST_DURABLE_TOPIC = DURABLE_TOPIC + ":TestSendWhileClosed";
try
{
using(IConnection connection = CreateConnection(TEST_CLIENT_AND_CONSUMER_ID))
{
connection.Start();
using(ISession session = connection.CreateSession(ackMode))
{
ITopic topic = session.GetTopic(TEST_DURABLE_TOPIC);
IMessageProducer producer = session.CreateProducer(topic);
producer.DeliveryMode = MsgDeliveryMode.Persistent;
ISession consumeSession = connection.CreateSession(ackMode);
IMessageConsumer consumer = consumeSession.CreateDurableConsumer(topic, TEST_CLIENT_AND_CONSUMER_ID, null, false);
Thread.Sleep(1000);
consumer.Dispose();
consumer = null;
ITextMessage message = session.CreateTextMessage("DurableTest-TestSendWhileClosed");
message.Properties.SetString("test", "test");
message.NMSType = "test";
producer.Send(message);
if(AcknowledgementMode.Transactional == ackMode)
{
session.Commit();
}
Thread.Sleep(1000);
consumer = consumeSession.CreateDurableConsumer(topic, TEST_CLIENT_AND_CONSUMER_ID, null, false);
ITextMessage msg = consumer.Receive(TimeSpan.FromMilliseconds(1000)) as ITextMessage;
msg.Acknowledge();
if(AcknowledgementMode.Transactional == ackMode)
{
consumeSession.Commit();
}
Assert.IsNotNull(msg);
Assert.AreEqual(msg.Text, "DurableTest-TestSendWhileClosed");
Assert.AreEqual(msg.NMSType, "test");
Assert.AreEqual(msg.Properties.GetString("test"), "test");
}
}
}
catch(Exception ex)
{
Assert.Fail(ex.Message);
}
finally
{
// Pause to allow Stomp to unregister at the broker.
Thread.Sleep(500);
UnregisterDurableConsumer(TEST_CLIENT_AND_CONSUMER_ID, TEST_CLIENT_AND_CONSUMER_ID);
}
}