/** * JBoss, Home of Professional Open Source * * Distributable under LGPL license. * See terms of license at gnu.org. */ package org.jboss.test.messaging.jms.message; import javax.jms.Connection; import javax.jms.Message; import javax.jms.MessageConsumer; import javax.jms.MessageProducer; import javax.jms.Session; import javax.jms.TextMessage; import org.jboss.messaging.core.logging.Logger; import org.jboss.test.messaging.JBMServerTestCase; /** * @author <a href="mailto:ovidiu@feodorov.com">Ovidiu Feodorov</a> * @version <tt>$Revision$</tt> * $Id$ */ public class ExpiredMessageTest extends JBMServerTestCase { // Constants ------------------------------------------------------------------------------------ private static final Logger log = Logger.getLogger(ExpiredMessageTest.class); // Static --------------------------------------------------------------------------------------- // Attributes ----------------------------------------------------------------------------------- // Constructors --------------------------------------------------------------------------------- public ExpiredMessageTest(String name) { super(name); } // Public --------------------------------------------------------------------------------------- public void testSimpleExpiration() throws Exception { Connection conn = getConnectionFactory().createConnection(); Session session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE); MessageProducer prod = session.createProducer(queue1); prod.setTimeToLive(1); Message m = session.createTextMessage("This message will die"); prod.send(m); // wait for the message to die Thread.sleep(250); MessageConsumer cons = session.createConsumer(queue1); conn.start(); assertNull(cons.receive(2000)); conn.close(); } public void testExpiredAndLivingMessages() throws Exception { Connection conn = getConnectionFactory().createConnection(); Session session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE); MessageProducer prod = session.createProducer(queue1); // sent 2 messages: 1 expiring, 1 living TextMessage livingMessage = session.createTextMessage("This message will live"); TextMessage expiringMessage = session.createTextMessage("This message will expire"); prod.setTimeToLive(1); prod.send(expiringMessage); prod.setTimeToLive(0); prod.send(livingMessage); // wait for the expiring message to die Thread.sleep(250); MessageConsumer cons = session.createConsumer(queue1); conn.start(); // receive living message Message receivedMessage = cons.receive(1000); assertNotNull("did not receive living message", receivedMessage); assertTrue(receivedMessage instanceof TextMessage); assertEquals(livingMessage.getText(), ((TextMessage)receivedMessage).getText()); // we do not receive the expiring message assertNull(cons.receive(1000)); conn.close(); } public void testManyExpiredMessagesAtOnce() throws Exception { Connection conn = getConnectionFactory().createConnection(); Session session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE); MessageProducer prod = session.createProducer(queue1); prod.setTimeToLive(1); Message m = session.createTextMessage("This message will die"); final int MESSAGE_COUNT = 100; for (int i = 0; i < MESSAGE_COUNT; i++) { prod.send(m); } MessageConsumer cons = session.createConsumer(queue1); conn.start(); assertNull(cons.receive(2000)); conn.close(); } // Package protected ---------------------------------------------------------------------------- // Protected ------------------------------------------------------------------------------------ // Private -------------------------------------------------------------------------------------- // Inner classes -------------------------------------------------------------------------------- }