package org.skyscreamer.nevado.jms.properties; import junit.framework.Assert; import org.junit.Test; import org.skyscreamer.nevado.jms.AbstractJMSTest; import org.skyscreamer.nevado.jms.NevadoConnection; import org.skyscreamer.nevado.jms.NevadoSession; import org.skyscreamer.nevado.jms.message.JMSXProperty; import org.skyscreamer.nevado.jms.message.NevadoTextMessage; import org.skyscreamer.nevado.jms.util.RandomData; import javax.jms.*; public class JMSXDeliveryCountTest extends AbstractJMSTest { @Test public void testJMSXDeliveryCount() throws JMSException, InterruptedException { // Send messages NevadoConnection connection = getConnection(); NevadoSession session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE); TextMessage msg = session.createTextMessage(RandomData.readString()); Queue tempQueue = createTempQueue(session); MessageProducer producer = session.createProducer(tempQueue); producer.send(msg); // Get messages MessageConsumer consumer = session.createConsumer(tempQueue); NevadoTextMessage msgOut = (NevadoTextMessage)consumer.receive(); Assert.assertEquals(1, msgOut.getIntProperty(JMSXProperty.JMSXDeliveryCount + "")); Assert.assertEquals(msg.getText(), msgOut.getText()); // Don't acknowledge, grab it again session.close(); session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE); consumer = session.createConsumer(tempQueue); msgOut = (NevadoTextMessage)consumer.receive(); session.close(); session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE); consumer = session.createConsumer(tempQueue); msgOut = (NevadoTextMessage)consumer.receive(); session.close(); session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE); consumer = session.createConsumer(tempQueue); msgOut = (NevadoTextMessage)consumer.receive(); Assert.assertEquals(4, msgOut.getIntProperty(JMSXProperty.JMSXDeliveryCount + "")); Assert.assertTrue(msgOut.getJMSRedelivered()); Assert.assertEquals(msg.getText(), msgOut.getText()); // Recover and it will iterate session.recover(); msgOut = (NevadoTextMessage)consumer.receive(); Assert.assertEquals(5, msgOut.getIntProperty(JMSXProperty.JMSXDeliveryCount + "")); Assert.assertTrue(msgOut.getJMSRedelivered()); Assert.assertEquals(msg.getText(), msgOut.getText()); // Kill, repeat. It stays at 5, unfortunately, since the last delivery iteration was local session.close(); session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE); consumer = session.createConsumer(tempQueue); msgOut = (NevadoTextMessage)consumer.receive(); Assert.assertEquals(5, msgOut.getIntProperty(JMSXProperty.JMSXDeliveryCount + "")); Assert.assertTrue(msgOut.getJMSRedelivered()); Assert.assertEquals(msg.getText(), msgOut.getText()); msgOut.acknowledge(); } }