/* * JBoss, Home of Professional Open Source * Copyright 2008, Red Hat Middleware LLC, and individual contributors * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.messaging.tests.unit.jms.client; import static org.easymock.EasyMock.expect; import static org.easymock.EasyMock.expectLastCall; import static org.easymock.EasyMock.isA; import static org.easymock.classextension.EasyMock.createStrictMock; import static org.easymock.classextension.EasyMock.replay; import static org.easymock.classextension.EasyMock.reset; import static org.easymock.classextension.EasyMock.verify; import static org.jboss.messaging.tests.util.RandomUtil.randomString; import javax.jms.IllegalStateException; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.MessageConsumer; import javax.jms.MessageListener; import javax.jms.Session; import junit.framework.TestCase; import org.jboss.messaging.core.client.ClientConsumer; import org.jboss.messaging.core.client.ClientMessage; import org.jboss.messaging.core.client.ClientSession; import org.jboss.messaging.core.client.MessageHandler; import org.jboss.messaging.core.exception.MessagingException; import org.jboss.messaging.core.remoting.spi.MessagingBuffer; import org.jboss.messaging.jms.JBossDestination; import org.jboss.messaging.jms.JBossQueue; import org.jboss.messaging.jms.JBossTopic; import org.jboss.messaging.jms.client.JBossMessage; import org.jboss.messaging.jms.client.JBossMessageConsumer; import org.jboss.messaging.jms.client.JBossSession; /** * @author <a href="mailto:jmesnil@redhat.com">Jeff Mesnil</a> * * @version <tt>$Revision$</tt> * */ public class JBossMessageConsumerTest extends TestCase { // Constants ----------------------------------------------------- // Attributes ---------------------------------------------------- // Static -------------------------------------------------------- // Constructors -------------------------------------------------- // Public -------------------------------------------------------- public void testClose() throws Exception { JBossSession session = createStrictMock(JBossSession.class); ClientConsumer clientConsumer = createStrictMock(ClientConsumer.class); expect(session.getAcknowledgeMode()).andStubReturn(Session.AUTO_ACKNOWLEDGE); replay(session, clientConsumer); JBossDestination destination = new JBossQueue(randomString()); JBossMessageConsumer consumer = new JBossMessageConsumer(session, clientConsumer, false, destination, null, null); verify(session, clientConsumer); reset(session, clientConsumer); clientConsumer.close(); session.removeConsumer(consumer); replay(session, clientConsumer); consumer.close(); verify(session, clientConsumer); } public void testCloseThrowsException() throws Exception { JBossSession session = createStrictMock(JBossSession.class); JBossDestination destination = new JBossQueue(randomString()); expect(session.getAcknowledgeMode()).andReturn(Session.AUTO_ACKNOWLEDGE); ClientConsumer clientConsumer = createStrictMock(ClientConsumer.class); clientConsumer.close(); expectLastCall().andThrow(new MessagingException()); replay(session, clientConsumer); JBossMessageConsumer consumer = new JBossMessageConsumer(session, clientConsumer, false, destination, null, null); try { consumer.close(); fail("JMSException"); } catch (JMSException e) { } verify(session, clientConsumer); } public void testCheckClosed() throws Exception { JBossDestination destination = new JBossQueue(randomString()); JBossSession session = createStrictMock(JBossSession.class); ClientSession clientSession = createStrictMock(ClientSession.class); expect(session.getAcknowledgeMode()).andReturn(Session.AUTO_ACKNOWLEDGE); expect(clientSession.isClosed()).andReturn(true); expect(session.getCoreSession()).andReturn(clientSession); ClientConsumer clientConsumer = createStrictMock(ClientConsumer.class); replay(session, clientSession, clientConsumer); JBossMessageConsumer consumer = new JBossMessageConsumer(session, clientConsumer, false, destination, null, null); try { consumer.getMessageSelector(); fail("IllegalStateException"); } catch (IllegalStateException e) { } verify(session, clientSession, clientConsumer); } public void testGetMessageSelector() throws Exception { String messageSelector = "color = 'green'"; JBossDestination destination = new JBossQueue(randomString()); JBossSession session = createStrictMock(JBossSession.class); ClientSession clientSession = createStrictMock(ClientSession.class); expect(session.getAcknowledgeMode()).andReturn(Session.AUTO_ACKNOWLEDGE); expect(clientSession.isClosed()).andReturn(false); expect(session.getCoreSession()).andReturn(clientSession); ClientConsumer clientConsumer = createStrictMock(ClientConsumer.class); replay(session, clientSession, clientConsumer); JBossMessageConsumer consumer = new JBossMessageConsumer(session, clientConsumer, false, destination, messageSelector, null); assertEquals(messageSelector, consumer.getMessageSelector()); verify(session, clientSession, clientConsumer); } public void testGetNoLocal() throws Exception { boolean noLocal = true; JBossDestination destination = new JBossQueue(randomString()); JBossSession session = createStrictMock(JBossSession.class); expect(session.getAcknowledgeMode()).andReturn(Session.AUTO_ACKNOWLEDGE); ClientConsumer clientConsumer = createStrictMock(ClientConsumer.class); replay(session, clientConsumer); JBossMessageConsumer consumer = new JBossMessageConsumer(session, clientConsumer, noLocal, destination, null, null); assertEquals(noLocal, consumer.getNoLocal()); verify(session, clientConsumer); } public void testGetQueue() throws Exception { JBossDestination destination = new JBossQueue(randomString()); JBossSession session = createStrictMock(JBossSession.class); expect(session.getAcknowledgeMode()).andReturn(Session.AUTO_ACKNOWLEDGE); ClientConsumer clientConsumer = createStrictMock(ClientConsumer.class); replay(session, clientConsumer); JBossMessageConsumer consumer = new JBossMessageConsumer(session, clientConsumer, false, destination, null, null); assertEquals(destination, consumer.getQueue()); verify(session, clientConsumer); } public void testGetTopic() throws Exception { JBossDestination destination = new JBossTopic(randomString()); JBossSession session = createStrictMock(JBossSession.class); expect(session.getAcknowledgeMode()).andReturn(Session.AUTO_ACKNOWLEDGE); ClientConsumer clientConsumer = createStrictMock(ClientConsumer.class); replay(session, clientConsumer); JBossMessageConsumer consumer = new JBossMessageConsumer(session, clientConsumer, false, destination, null, null); assertEquals(destination, consumer.getTopic()); verify(session, clientConsumer); } public void testGetMessageListenerIsNull() throws Exception { JBossDestination destination = new JBossQueue(randomString()); JBossSession session = createStrictMock(JBossSession.class); ClientSession clientSession = createStrictMock(ClientSession.class); expect(session.getAcknowledgeMode()).andReturn(Session.AUTO_ACKNOWLEDGE); expect(clientSession.isClosed()).andReturn(false); expect(session.getCoreSession()).andReturn(clientSession); ClientConsumer clientConsumer = createStrictMock(ClientConsumer.class); replay(session, clientSession, clientConsumer); JBossMessageConsumer consumer = new JBossMessageConsumer(session, clientConsumer, false, destination, null, null); assertNull(consumer.getMessageListener()); verify(session, clientSession, clientConsumer); } public void testSetMessageListener() throws Exception { JBossDestination destination = new JBossQueue(randomString()); JBossSession session = createStrictMock(JBossSession.class); ClientSession clientSession = createStrictMock(ClientSession.class); expect(session.getAcknowledgeMode()).andReturn(Session.AUTO_ACKNOWLEDGE); expect(clientSession.isClosed()).andReturn(false); expect(session.getCoreSession()).andReturn(clientSession); ClientConsumer clientConsumer = createStrictMock(ClientConsumer.class); clientConsumer.setMessageHandler(isA(MessageHandler.class)); MessageListener listener = createStrictMock(MessageListener.class); replay(session, clientSession, clientConsumer, listener); JBossMessageConsumer consumer = new JBossMessageConsumer(session, clientConsumer, false, destination, null, null); consumer.setMessageListener(listener); assertEquals(listener, consumer.getMessageListener()); verify(session, clientSession, clientConsumer, listener); } public void testSetMessageListenerThrowsException() throws Exception { JBossDestination destination = new JBossQueue(randomString()); JBossSession session = createStrictMock(JBossSession.class); ClientSession clientSession = createStrictMock(ClientSession.class); expect(session.getAcknowledgeMode()).andReturn(Session.AUTO_ACKNOWLEDGE); ClientConsumer clientConsumer = createStrictMock(ClientConsumer.class); clientConsumer.setMessageHandler(isA(MessageHandler.class)); expectLastCall().andThrow(new MessagingException()); MessageListener listener = createStrictMock(MessageListener.class); replay(session, clientSession, clientConsumer, listener); JBossMessageConsumer consumer = new JBossMessageConsumer(session, clientConsumer, false, destination, null, null); try { consumer.setMessageListener(listener); fail("JMSException"); } catch (JMSException e) { } verify(session, clientSession, clientConsumer, listener); } public void testReceiveWithNoMessage() throws Exception { doReceiveWithNoMessage(0, new MessageReceiver() { public Message receive(MessageConsumer consumer) throws Exception { return consumer.receive(); } }); } public void testReceiveNoWaitWithNoMessage() throws Exception { doReceiveWithNoMessage(-1, new MessageReceiver() { public Message receive(MessageConsumer consumer) throws Exception { return consumer.receiveNoWait(); } }); } public void testReceiveWithTimeoutWithNoMessage() throws Exception { final long timeout = 1000; doReceiveWithNoMessage(timeout, new MessageReceiver() { public Message receive(MessageConsumer consumer) throws Exception { return consumer.receive(timeout); } }); } public void testReceiveThrowsException() throws Exception { JBossDestination destination = new JBossQueue(randomString()); JBossSession session = createStrictMock(JBossSession.class); expect(session.getAcknowledgeMode()).andReturn(Session.AUTO_ACKNOWLEDGE); ClientConsumer clientConsumer = createStrictMock(ClientConsumer.class); expect(clientConsumer.receive(0)).andThrow(new MessagingException()); replay(session, clientConsumer); JBossMessageConsumer consumer = new JBossMessageConsumer(session, clientConsumer, false, destination, null, null); try { consumer.receive(); fail("JMSException"); } catch (JMSException e) { } verify(session, clientConsumer); } public void testReceive() throws Exception { JBossDestination destination = new JBossQueue(randomString()); JBossSession session = createStrictMock(JBossSession.class); ClientSession clientSession = createStrictMock(ClientSession.class); expect(session.getAcknowledgeMode()).andReturn(Session.AUTO_ACKNOWLEDGE); expect(session.getCoreSession()).andStubReturn(clientSession); ClientConsumer clientConsumer = createStrictMock(ClientConsumer.class); ClientMessage clientMessage = createStrictMock(ClientMessage.class); clientMessage.acknowledge(); expect(clientMessage.getType()).andReturn(JBossMessage.TYPE); MessagingBuffer body = createStrictMock(MessagingBuffer.class); expect(clientMessage.getBody()).andStubReturn(body ); expect(clientConsumer.receive(0)).andReturn(clientMessage ); replay(session, clientSession, clientConsumer, clientMessage, body); JBossMessageConsumer consumer = new JBossMessageConsumer(session, clientConsumer, false, destination, null, null); Message message = consumer.receive(); assertNotNull(message); verify(session, clientSession, clientConsumer, clientMessage, body); } // Package protected --------------------------------------------- // Protected ----------------------------------------------------- // Private ------------------------------------------------------- public void doReceiveWithNoMessage(long expectedTimeout, MessageReceiver receiver) throws Exception { JBossDestination destination = new JBossQueue(randomString()); JBossSession session = createStrictMock(JBossSession.class); expect(session.getAcknowledgeMode()).andReturn(Session.AUTO_ACKNOWLEDGE); ClientConsumer clientConsumer = createStrictMock(ClientConsumer.class); expect(clientConsumer.receive(expectedTimeout)).andReturn(null); replay(session, clientConsumer); JBossMessageConsumer consumer = new JBossMessageConsumer(session, clientConsumer, false, destination, null, null); Message message = receiver.receive(consumer); assertNull(message); verify(session, clientConsumer); } // Inner classes ------------------------------------------------- private interface MessageReceiver { Message receive(MessageConsumer consumer) throws Exception; } }