/* * 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.server.management.impl; import static org.easymock.EasyMock.createMock; import static org.easymock.EasyMock.expect; import static org.easymock.EasyMock.isA; import static org.easymock.EasyMock.replay; import static org.easymock.EasyMock.verify; import static org.jboss.messaging.tests.util.RandomUtil.randomBoolean; import static org.jboss.messaging.tests.util.RandomUtil.randomByte; import static org.jboss.messaging.tests.util.RandomUtil.randomInt; import static org.jboss.messaging.tests.util.RandomUtil.randomLong; import static org.jboss.messaging.tests.util.RandomUtil.randomSimpleString; import static org.jboss.messaging.tests.util.RandomUtil.randomString; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import javax.management.NotCompliantMBeanException; import javax.management.openmbean.CompositeData; import javax.management.openmbean.TabularData; import junit.framework.TestCase; import org.easymock.EasyMock; import org.jboss.messaging.core.filter.Filter; import org.jboss.messaging.core.messagecounter.MessageCounter; import org.jboss.messaging.core.persistence.StorageManager; import org.jboss.messaging.core.postoffice.PostOffice; import org.jboss.messaging.core.server.MessageReference; import org.jboss.messaging.core.server.Queue; import org.jboss.messaging.core.server.ServerMessage; import org.jboss.messaging.core.settings.HierarchicalRepository; import org.jboss.messaging.core.settings.impl.QueueSettings; import org.jboss.messaging.jms.JBossQueue; import org.jboss.messaging.jms.server.management.impl.JMSQueueControl; import org.jboss.messaging.util.SimpleString; /** * @author <a href="mailto:jmesnil@redhat.com">Jeff Mesnil</a> * * @version <tt>$Revision$</tt> * */ public class JMSQueueControlTest extends TestCase { private String jndiBinding; private String name; private JBossQueue queue; private Queue coreQueue; private PostOffice postOffice; private StorageManager storageManager; private HierarchicalRepository queueSettingsRepository; private MessageCounter counter; // Constants ----------------------------------------------------- // Attributes ---------------------------------------------------- // Static -------------------------------------------------------- // Constructors -------------------------------------------------- // Public -------------------------------------------------------- public void testGetName() throws Exception { replayMockedAttributes(); JMSQueueControl control = createControl(); assertEquals(name, control.getName()); verifyMockedAttributes(); } public void testGetAddress() throws Exception { replayMockedAttributes(); JMSQueueControl control = createControl(); assertEquals(queue.getAddress(), control.getAddress()); verifyMockedAttributes(); } public void testGetJNDIBinding() throws Exception { replayMockedAttributes(); JMSQueueControl control = createControl(); assertEquals(jndiBinding, control.getJNDIBinding()); verifyMockedAttributes(); } public void testIsTemporary() throws Exception { replayMockedAttributes(); JMSQueueControl control = createControl(); assertEquals(queue.isTemporary(), control.isTemporary()); verifyMockedAttributes(); } public void testIsClustered() throws Exception { boolean clustered = randomBoolean(); expect(coreQueue.isClustered()).andReturn(clustered); replayMockedAttributes(); JMSQueueControl control = createControl(); assertEquals(clustered, control.isClustered()); verifyMockedAttributes(); } public void testIsDurabled() throws Exception { boolean durable = randomBoolean(); expect(coreQueue.isDurable()).andReturn(durable); replayMockedAttributes(); JMSQueueControl control = createControl(); assertEquals(durable, control.isDurable()); verifyMockedAttributes(); } public void testGetMessageCount() throws Exception { int count = randomInt(); expect(coreQueue.getMessageCount()).andReturn(count); replayMockedAttributes(); JMSQueueControl control = createControl(); assertEquals(count, control.getMessageCount()); verifyMockedAttributes(); } public void testGetMessagesAdded() throws Exception { int count = randomInt(); expect(coreQueue.getMessagesAdded()).andReturn(count); replayMockedAttributes(); JMSQueueControl control = createControl(); assertEquals(count, control.getMessagesAdded()); verifyMockedAttributes(); } public void testGetConsumerCount() throws Exception { int count = randomInt(); expect(coreQueue.getConsumerCount()).andReturn(count); replayMockedAttributes(); JMSQueueControl control = createControl(); assertEquals(count, control.getConsumerCount()); verifyMockedAttributes(); } public void testGetDeliveringCount() throws Exception { int count = randomInt(); expect(coreQueue.getDeliveringCount()).andReturn(count); replayMockedAttributes(); JMSQueueControl control = createControl(); assertEquals(count, control.getDeliveringCount()); verifyMockedAttributes(); } public void testGetSizeBytes() throws Exception { int size = randomInt(); expect(coreQueue.getSizeBytes()).andReturn(size); replayMockedAttributes(); JMSQueueControl control = createControl(); assertEquals(size, control.getSizeBytes()); verifyMockedAttributes(); } public void testGetScheduledCount() throws Exception { int count = randomInt(); expect(coreQueue.getScheduledCount()).andReturn(count); replayMockedAttributes(); JMSQueueControl control = createControl(); assertEquals(count, control.getScheduledCount()); verifyMockedAttributes(); } public void testGetDLQ() throws Exception { final String dlq = randomString(); QueueSettings settings = new QueueSettings() { @Override public SimpleString getDLQ() { return new SimpleString(JBossQueue.JMS_QUEUE_ADDRESS_PREFIX + dlq); } }; expect(queueSettingsRepository.getMatch(name)).andReturn(settings); replayMockedAttributes(); JMSQueueControl control = createControl(); assertEquals(dlq, control.getDLQ()); verifyMockedAttributes(); } public void testGetExpiryQueue() throws Exception { final String expiryQueue = randomString(); QueueSettings settings = new QueueSettings() { @Override public SimpleString getExpiryQueue() { return new SimpleString(JBossQueue.JMS_QUEUE_ADDRESS_PREFIX + expiryQueue); } }; expect(queueSettingsRepository.getMatch(name)).andReturn(settings); replayMockedAttributes(); JMSQueueControl control = createControl(); assertEquals(expiryQueue, control.getExpiryQueue()); verifyMockedAttributes(); } public void testRemoveMessage() throws Exception { String jmsMessageID = randomString(); long messageID = randomLong(); List<MessageReference> refs = new ArrayList<MessageReference>(); MessageReference ref = createMock(MessageReference.class); ServerMessage message = createMock(ServerMessage.class); expect(message.getMessageID()).andReturn(messageID); expect(ref.getMessage()).andReturn(message); refs.add(ref); expect(coreQueue.list(EasyMock.isA(Filter.class))).andReturn(refs); expect(coreQueue.deleteReference(messageID, storageManager)).andReturn( true); replayMockedAttributes(); replay(ref, message); JMSQueueControl control = createControl(); assertTrue(control.removeMessage(jmsMessageID)); verifyMockedAttributes(); verify(ref, message); } public void testRemoveAllMessages() throws Exception { coreQueue.deleteAllReferences(storageManager); replayMockedAttributes(); JMSQueueControl control = createControl(); control.removeAllMessages(); verifyMockedAttributes(); } public void testListMessages() throws Exception { String filterStr = "color = 'green'"; List<MessageReference> refs = new ArrayList<MessageReference>(); MessageReference ref = createMock(MessageReference.class); ServerMessage message = createMock(ServerMessage.class); expect(message.getProperty(new SimpleString("JMSMessageID"))) .andStubReturn(randomSimpleString()); expect(message.getProperty(new SimpleString("JMSCorrelationID"))) .andStubReturn(randomSimpleString()); expect(message.getProperty(new SimpleString("JMSType"))).andStubReturn( randomSimpleString()); expect(message.isDurable()).andStubReturn(randomBoolean()); expect(message.getPriority()).andStubReturn(randomByte()); expect(message.getProperty(new SimpleString("JMSReplyTo"))) .andStubReturn(randomSimpleString()); expect(message.getTimestamp()).andStubReturn(randomLong()); expect(message.getExpiration()).andStubReturn(randomLong()); expect(message.getPropertyNames()).andStubReturn( new HashSet<SimpleString>()); expect(ref.getMessage()).andReturn(message); refs.add(ref); expect(coreQueue.list(isA(Filter.class))).andReturn(refs); replayMockedAttributes(); replay(ref, message); JMSQueueControl control = createControl(); TabularData data = control.listMessages(filterStr); assertEquals(1, data.size()); CompositeData info = data.get(new Object[] { message.getProperty( new SimpleString("JMSMessageID")).toString() }); assertNotNull(info); verifyMockedAttributes(); verify(ref, message); } public void testListMessagesThrowsException() throws Exception { String invalidFilterStr = "this is not a valid filter"; replayMockedAttributes(); JMSQueueControl control = createControl(); try { control.listMessages(invalidFilterStr); fail("IllegalStateException"); } catch (IllegalStateException e) { } verifyMockedAttributes(); } public void testExpireMessage() throws Exception { String jmsMessageID = randomString(); long messageID = randomLong(); List<MessageReference> refs = new ArrayList<MessageReference>(); MessageReference ref = createMock(MessageReference.class); ServerMessage serverMessage = createMock(ServerMessage.class); expect(serverMessage.getMessageID()).andReturn(messageID); expect(ref.getMessage()).andReturn(serverMessage); refs.add(ref); expect(coreQueue.list(EasyMock.isA(Filter.class))).andReturn(refs); expect( coreQueue.expireMessage(messageID, storageManager, postOffice, queueSettingsRepository)).andReturn(true); replayMockedAttributes(); replay(ref, serverMessage); JMSQueueControl control = createControl(); assertTrue(control.expireMessage(jmsMessageID)); verifyMockedAttributes(); verify(ref, serverMessage); } public void testExpireMessageWithNoJMSMesageID() throws Exception { String jmsMessageID = randomString(); expect(coreQueue.list(isA(Filter.class))).andReturn( new ArrayList<MessageReference>()); replayMockedAttributes(); JMSQueueControl control = createControl(); try { control.expireMessage(jmsMessageID); fail("IllegalArgumentException"); } catch (IllegalArgumentException e) { } verifyMockedAttributes(); } public void testExpireMessages() throws Exception { long messageID = randomLong(); List<MessageReference> refs = new ArrayList<MessageReference>(); MessageReference ref = createMock(MessageReference.class); ServerMessage serverMessage = createMock(ServerMessage.class); expect(serverMessage.getMessageID()).andReturn(messageID); expect(ref.getMessage()).andReturn(serverMessage); refs.add(ref); expect(coreQueue.list(isA(Filter.class))).andReturn(refs); expect( coreQueue.expireMessage(messageID, storageManager, postOffice, queueSettingsRepository)).andReturn(true); replayMockedAttributes(); replay(ref, serverMessage); JMSQueueControl control = createControl(); assertEquals(1, control.expireMessages("color = 'green'")); verifyMockedAttributes(); verify(ref, serverMessage); } public void testSendMessageToDLQ() throws Exception { String jmsMessageID = randomString(); long messageID = randomLong(); List<MessageReference> refs = new ArrayList<MessageReference>(); MessageReference ref = createMock(MessageReference.class); ServerMessage serverMessage = createMock(ServerMessage.class); expect(serverMessage.getMessageID()).andReturn(messageID); expect(ref.getMessage()).andReturn(serverMessage); refs.add(ref); expect(coreQueue.list(isA(Filter.class))).andReturn(refs); expect( coreQueue.sendMessageToDLQ(messageID, storageManager, postOffice, queueSettingsRepository)).andReturn(true); replayMockedAttributes(); replay(ref, serverMessage); JMSQueueControl control = createControl(); assertTrue(control.sendMessageToDLQ(jmsMessageID)); verifyMockedAttributes(); verify(ref, serverMessage); } public void testSendMessageToDLQWithNoJMSMessageID() throws Exception { String jmsMessageID = randomString(); expect(coreQueue.list(isA(Filter.class))).andReturn( new ArrayList<MessageReference>()); replayMockedAttributes(); JMSQueueControl control = createControl(); try { control.sendMessageToDLQ(jmsMessageID); fail("IllegalArgumentException"); } catch (IllegalArgumentException e) { } verifyMockedAttributes(); } public void testChangeMessagePriority() throws Exception { byte newPriority = 5; String jmsMessageID = randomString(); long messageID = randomLong(); List<MessageReference> refs = new ArrayList<MessageReference>(); MessageReference ref = createMock(MessageReference.class); ServerMessage serverMessage = createMock(ServerMessage.class); expect(serverMessage.getMessageID()).andReturn(messageID); expect(ref.getMessage()).andReturn(serverMessage); refs.add(ref); expect(coreQueue.list(isA(Filter.class))).andReturn(refs); expect( coreQueue.changeMessagePriority(messageID, newPriority, storageManager, postOffice, queueSettingsRepository)) .andReturn(true); replayMockedAttributes(); replay(ref, serverMessage); JMSQueueControl control = createControl(); assertTrue(control.changeMessagePriority(jmsMessageID, newPriority)); verifyMockedAttributes(); verify(ref, serverMessage); } public void testChangeMessagePriorityWithInvalidPriorityValues() throws Exception { String jmsMessageID = randomString(); replayMockedAttributes(); JMSQueueControl control = createControl(); try { control.changeMessagePriority(jmsMessageID, -1); fail("IllegalArgumentException"); } catch (IllegalArgumentException e) { } try { control.changeMessagePriority(jmsMessageID, 10); fail("IllegalArgumentException"); } catch (IllegalArgumentException e) { } verifyMockedAttributes(); } public void testChangeMessagePriorityWithNoJMSMessageID() throws Exception { byte newPriority = 5; String jmsMessageID = randomString(); expect(coreQueue.list(isA(Filter.class))).andReturn( new ArrayList<MessageReference>()); replayMockedAttributes(); JMSQueueControl control = createControl(); try { control.changeMessagePriority(jmsMessageID, newPriority); fail("IllegalArgumentException"); } catch (IllegalArgumentException e) { } verifyMockedAttributes(); } // Package protected --------------------------------------------- // Protected ----------------------------------------------------- @Override protected void setUp() throws Exception { super.setUp(); jndiBinding = randomString(); name = randomString(); queue = new JBossQueue(name); coreQueue = createMock(Queue.class); postOffice = createMock(PostOffice.class); storageManager = createMock(StorageManager.class); queueSettingsRepository = createMock(HierarchicalRepository.class); counter = new MessageCounter(name, null, coreQueue, false, true, 10); } @Override protected void tearDown() throws Exception { jndiBinding = null; name = null; queue = null; coreQueue = null; postOffice = null; storageManager = null; queueSettingsRepository = null; counter = null; super.tearDown(); } // Private ------------------------------------------------------- private JMSQueueControl createControl() throws NotCompliantMBeanException { return new JMSQueueControl(queue, coreQueue, jndiBinding, postOffice, storageManager, queueSettingsRepository, counter); } private void replayMockedAttributes() { replay(coreQueue, postOffice, storageManager, queueSettingsRepository); } private void verifyMockedAttributes() { verify(coreQueue, postOffice, storageManager, queueSettingsRepository); } // Inner classes ------------------------------------------------- }