/*
* 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.core.management.impl;
import static org.easymock.EasyMock.createMock;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.expectLastCall;
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.openmbean.CompositeData;
import javax.management.openmbean.TabularData;
import junit.framework.TestCase;
import org.jboss.messaging.core.exception.MessagingException;
import org.jboss.messaging.core.filter.Filter;
import org.jboss.messaging.core.management.QueueControlMBean;
import org.jboss.messaging.core.management.impl.QueueControl;
import org.jboss.messaging.core.messagecounter.MessageCounter;
import org.jboss.messaging.core.persistence.StorageManager;
import org.jboss.messaging.core.postoffice.Binding;
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.util.SimpleString;
/**
* @author <a href="mailto:jmesnil@redhat.com">Jeff Mesnil</a>
*
* @version <tt>$Revision$</tt>
*
*/
public class QueueControlTest extends TestCase
{
// Constants -----------------------------------------------------
// Attributes ----------------------------------------------------
private Queue queue;
private StorageManager storageManager;
private PostOffice postOffice;
private HierarchicalRepository<QueueSettings> repository;
private MessageCounter messageCounter;
private SimpleString queueName;
// Static --------------------------------------------------------
// Constructors --------------------------------------------------
// Public --------------------------------------------------------
public void testGetName() throws Exception
{
expect(queue.getName()).andReturn(queueName);
replayMockedAttributes();
QueueControlMBean control = createControl();
assertEquals(queueName.toString(), control.getName());
verifyMockedAttributes();
}
public void testGetFilter() throws Exception
{
String filterStr = "color = 'green'";
Filter filter = createMock(Filter.class);
expect(filter.getFilterString()).andReturn(new SimpleString(filterStr));
expect(queue.getFilter()).andReturn(filter);
replayMockedAttributes();
replay(filter);
QueueControlMBean control = createControl();
assertEquals(filterStr, control.getFilter());
verifyMockedAttributes();
verify(filter);
}
public void testGetFilterWithNull() throws Exception
{
expect(queue.getFilter()).andReturn(null);
replayMockedAttributes();
QueueControlMBean control = createControl();
assertNull(control.getFilter());
verifyMockedAttributes();
}
public void testIsClustered() throws Exception
{
boolean clustered = randomBoolean();
expect(queue.isClustered()).andReturn(clustered);
replayMockedAttributes();
QueueControlMBean control = createControl();
assertEquals(clustered, control.isClustered());
verifyMockedAttributes();
}
public void testIsDurable() throws Exception
{
boolean durable = randomBoolean();
expect(queue.isDurable()).andReturn(durable);
replayMockedAttributes();
QueueControlMBean control = createControl();
assertEquals(durable, control.isDurable());
verifyMockedAttributes();
}
public void testIsTemporary() throws Exception
{
boolean temp = randomBoolean();
expect(queue.isTemporary()).andReturn(temp);
replayMockedAttributes();
QueueControlMBean control = createControl();
assertEquals(temp, control.isTemporary());
verify(queue, storageManager, postOffice, repository);
}
public void testIsBackup() throws Exception
{
boolean backup = randomBoolean();
expect(queue.isBackup()).andReturn(backup);
replayMockedAttributes();
QueueControlMBean control = createControl();
assertEquals(backup, control.isBackup());
verifyMockedAttributes();
}
public void testGetMessageCount() throws Exception
{
int count = randomInt();
expect(queue.getMessageCount()).andReturn(count);
replayMockedAttributes();
QueueControlMBean control = createControl();
assertEquals(count, control.getMessageCount());
verifyMockedAttributes();
}
public void testGetMessagesAdded() throws Exception
{
int count = randomInt();
expect(queue.getMessagesAdded()).andReturn(count);
replayMockedAttributes();
QueueControlMBean control = createControl();
assertEquals(count, control.getMessagesAdded());
verifyMockedAttributes();
}
public void testGetSizeBytes() throws Exception
{
int size = randomInt();
expect(queue.getSizeBytes()).andReturn(size);
replayMockedAttributes();
QueueControlMBean control = createControl();
assertEquals(size, control.getSizeBytes());
verifyMockedAttributes();
}
public void testGetScheduledCount() throws Exception
{
int count = randomInt();
expect(queue.getScheduledCount()).andReturn(count);
replayMockedAttributes();
QueueControlMBean control = createControl();
assertEquals(count, control.getScheduledCount());
verifyMockedAttributes();
}
public void testGetConsumerCount() throws Exception
{
int count = randomInt();
expect(queue.getConsumerCount()).andReturn(count);
replayMockedAttributes();
QueueControlMBean control = createControl();
assertEquals(count, control.getConsumerCount());
verifyMockedAttributes();
}
public void testGetDeliveringCount() throws Exception
{
int count = randomInt();
expect(queue.getDeliveringCount()).andReturn(count);
replayMockedAttributes();
QueueControlMBean control = createControl();
assertEquals(count, control.getDeliveringCount());
verifyMockedAttributes();
}
public void testGetPersistenceID() throws Exception
{
long id = randomLong();
expect(queue.getPersistenceID()).andReturn(id);
replayMockedAttributes();
QueueControlMBean control = createControl();
assertEquals(id, control.getPersistenceID());
verifyMockedAttributes();
}
public void testGetDLQ() throws Exception
{
final String dlqName = randomString();
expect(queue.getName()).andReturn(queueName);
QueueSettings queueSettings = new QueueSettings()
{
@Override
public SimpleString getDLQ()
{
return new SimpleString(dlqName);
}
};
expect(repository.getMatch(queueName.toString()))
.andReturn(queueSettings);
replayMockedAttributes();
QueueControlMBean control = createControl();
assertEquals(dlqName, control.getDLQ());
verifyMockedAttributes();
}
public void testGetExpiryQueue() throws Exception
{
final String expiryQueueName = randomString();
expect(queue.getName()).andReturn(queueName);
QueueSettings queueSettings = new QueueSettings()
{
@Override
public SimpleString getExpiryQueue()
{
return new SimpleString(expiryQueueName);
}
};
expect(repository.getMatch(queueName.toString()))
.andReturn(queueSettings);
replayMockedAttributes();
QueueControlMBean control = createControl();
assertEquals(expiryQueueName, control.getExpiryQueue());
verifyMockedAttributes();
}
public void testRemoveAllMessages() throws Exception
{
queue.deleteAllReferences(storageManager);
replayMockedAttributes();
QueueControlMBean control = createControl();
control.removeAllMessages();
verifyMockedAttributes();
}
public void testRemoveAllMessagesThrowsException() throws Exception
{
queue.deleteAllReferences(storageManager);
expectLastCall().andThrow(new MessagingException());
replayMockedAttributes();
QueueControlMBean control = createControl();
try
{
control.removeAllMessages();
fail("IllegalStateException");
} catch (IllegalStateException e)
{
}
verifyMockedAttributes();
}
public void testRemoveMessage() throws Exception
{
long messageID = randomLong();
boolean deleted = randomBoolean();
expect(queue.deleteReference(messageID, storageManager)).andReturn(
deleted);
replayMockedAttributes();
QueueControlMBean control = createControl();
assertEquals(deleted, control.removeMessage(messageID));
verifyMockedAttributes();
}
public void testRemoveMessageThrowsException() throws Exception
{
long messageID = randomLong();
expect(queue.deleteReference(messageID, storageManager)).andThrow(
new MessagingException());
replayMockedAttributes();
QueueControlMBean control = createControl();
try
{
control.removeMessage(messageID);
fail("IllegalStateException");
} catch (IllegalStateException e)
{
}
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.getMessageID()).andStubReturn(randomLong());
expect(message.getDestination()).andStubReturn(randomSimpleString());
expect(message.isDurable()).andStubReturn(randomBoolean());
expect(message.getTimestamp()).andStubReturn(randomLong());
expect(message.getType()).andStubReturn(randomByte());
expect(message.getEncodeSize()).andStubReturn(randomInt());
expect(message.getPriority()).andStubReturn(randomByte());
expect(message.isExpired()).andStubReturn(randomBoolean());
expect(message.getExpiration()).andStubReturn(randomLong());
expect(message.getPropertyNames()).andReturn(new HashSet<SimpleString>());
expect(ref.getMessage()).andReturn(message);
refs.add(ref);
expect(queue.list(isA(Filter.class))).andReturn(refs);
replayMockedAttributes();
replay(ref, message);
QueueControlMBean control = createControl();
TabularData data = control.listMessages(filterStr);
assertEquals(1, data.size());
CompositeData info = data.get(new Object[] { message.getMessageID() });
assertNotNull(info);
assertEquals(message.getMessageID(), info.get("id"));
assertEquals(message.getDestination().toString(), info.get("destination"));
assertEquals(message.isDurable(), info.get("durable"));
assertEquals(message.getTimestamp(), info.get("timestamp"));
assertEquals(message.getType(), info.get("type"));
assertEquals(message.getEncodeSize(), info.get("size"));
assertEquals(message.getPriority(), info.get("priority"));
assertEquals(message.isExpired(), info.get("expired"));
assertEquals(message.getExpiration(), info.get("expiration"));
verifyMockedAttributes();
verify(ref, message);
}
public void testExpireMessageWithMessageID() throws Exception
{
long messageID = randomLong();
expect(
queue.expireMessage(messageID, storageManager, postOffice,
repository)).andReturn(true);
replayMockedAttributes();
QueueControlMBean control = createControl();
assertTrue(control.expireMessage(messageID));
verifyMockedAttributes();
}
public void testExpireMessageWithNoMatch() throws Exception
{
long messageID = randomLong();
expect(
queue.expireMessage(messageID, storageManager, postOffice,
repository)).andReturn(false);
replayMockedAttributes();
QueueControlMBean control = createControl();
assertFalse(control.expireMessage(messageID));
verifyMockedAttributes();
}
public void testExpireMessagesWithFilter() throws Exception
{
long messageID_1 = randomLong();
long messageID_2 = randomLong();
List<MessageReference> refs = new ArrayList<MessageReference>();
MessageReference ref_1 = createMock(MessageReference.class);
ServerMessage message_1 = createMock(ServerMessage.class);
expect(message_1.getMessageID()).andStubReturn(messageID_1);
expect(ref_1.getMessage()).andReturn(message_1);
MessageReference ref_2 = createMock(MessageReference.class);
ServerMessage message_2 = createMock(ServerMessage.class);
expect(message_2.getMessageID()).andStubReturn(messageID_2);
expect(ref_2.getMessage()).andReturn(message_2);
refs.add(ref_1);
refs.add(ref_2);
expect(queue.list(isA(Filter.class))).andReturn(refs);
expect(
queue.expireMessage(messageID_1, storageManager, postOffice,
repository)).andReturn(true);
expect(
queue.expireMessage(messageID_2, storageManager, postOffice,
repository)).andReturn(true);
replayMockedAttributes();
replay(ref_1, ref_2, message_1, message_2);
QueueControlMBean control = createControl();
assertEquals(2, control.expireMessages("foo = true"));
verifyMockedAttributes();
verify(ref_1, ref_2, message_1, message_2);
}
public void testMoveMessage() throws Exception
{
long messageID = randomLong();
SimpleString otherQueueName = randomSimpleString();
Binding otherBinding = createMock(Binding.class);
expect(postOffice.getBinding(otherQueueName)).andReturn(otherBinding);
expect(
queue.moveMessage(messageID, otherBinding, storageManager,
postOffice)).andReturn(true);
replayMockedAttributes();
replay(otherBinding);
QueueControlMBean control = createControl();
assertTrue(control.moveMessage(messageID, otherQueueName.toString()));
verifyMockedAttributes();
verify(otherBinding);
}
public void testMoveMessageWithNoQueue() throws Exception
{
long messageID = randomLong();
SimpleString otherQueueName = randomSimpleString();
expect(postOffice.getBinding(otherQueueName)).andReturn(null);
replayMockedAttributes();
QueueControl control = createControl();
try
{
control.moveMessage(messageID, otherQueueName.toString());
fail("IllegalArgumentException");
} catch (IllegalArgumentException e)
{
}
verifyMockedAttributes();
}
public void testMoveMessageWithNoMessageID() throws Exception
{
long messageID = randomLong();
SimpleString otherQueueName = randomSimpleString();
Binding otherBinding = createMock(Binding.class);
expect(postOffice.getBinding(otherQueueName)).andReturn(otherBinding);
expect(
queue.moveMessage(messageID, otherBinding, storageManager,
postOffice)).andReturn(false);
replayMockedAttributes();
replay(otherBinding);
QueueControl control = createControl();
assertFalse(control.moveMessage(messageID, otherQueueName.toString()));
verifyMockedAttributes();
verify(otherBinding);
}
public void testChangeMessagePriority() throws Exception
{
long messageID = randomLong();
byte newPriority = 5;
List<MessageReference> refs = new ArrayList<MessageReference>();
MessageReference ref = createMock(MessageReference.class);
refs.add(ref);
expect(
queue.changeMessagePriority(messageID, newPriority, storageManager,
postOffice, repository)).andReturn(true);
replayMockedAttributes();
replay(ref);
QueueControl control = createControl();
assertTrue(control.changeMessagePriority(messageID, newPriority));
verifyMockedAttributes();
verify(ref);
}
public void testChangeMessagePriorityWithInvalidPriorityValues()
throws Exception
{
long messageID = randomLong();
replayMockedAttributes();
QueueControl control = createControl();
try
{
control.changeMessagePriority(messageID, -1);
fail("IllegalArgumentException");
} catch (IllegalArgumentException e)
{
}
try
{
control.changeMessagePriority(messageID, 10);
fail("IllegalArgumentException");
} catch (IllegalArgumentException e)
{
}
verifyMockedAttributes();
}
public void testChangeMessagePriorityWithNoMessageID() throws Exception
{
long messageID = randomLong();
byte newPriority = 5;
expect(
queue.changeMessagePriority(messageID, newPriority, storageManager,
postOffice, repository)).andReturn(false);
replayMockedAttributes();
QueueControl control = createControl();
assertFalse(control.changeMessagePriority(messageID, newPriority));
verifyMockedAttributes();
}
public void testSendMessageToDLQ() throws Exception
{
long messageID = randomLong();
expect(
queue.sendMessageToDLQ(messageID, storageManager, postOffice,
repository)).andReturn(true);
replayMockedAttributes();
QueueControlMBean control = createControl();
assertTrue(control.sendMessageToDLQ(messageID));
verifyMockedAttributes();
}
public void testSendMessageToDLQWithNoMessageID() throws Exception
{
long messageID = randomLong();
expect(
queue.sendMessageToDLQ(messageID, storageManager, postOffice,
repository)).andReturn(false);
replayMockedAttributes();
QueueControlMBean control = createControl();
assertFalse(control.sendMessageToDLQ(messageID));
verifyMockedAttributes();
}
// Package protected ---------------------------------------------
// Protected -----------------------------------------------------
@Override
protected void setUp() throws Exception
{
super.setUp();
queueName = randomSimpleString();
queue = createMock(Queue.class);
storageManager = createMock(StorageManager.class);
postOffice = createMock(PostOffice.class);
repository = createMock(HierarchicalRepository.class);
messageCounter = new MessageCounter(queueName.toString(), null, queue,
false, false, 10);
}
@Override
protected void tearDown() throws Exception
{
queue = null;
storageManager = null;
postOffice = null;
repository = null;
messageCounter = null;
super.tearDown();
}
// Private -------------------------------------------------------
private void replayMockedAttributes()
{
replay(queue, storageManager, postOffice, repository);
}
private void verifyMockedAttributes()
{
verify(queue, storageManager, postOffice, repository);
}
private QueueControl createControl() throws Exception
{
return new QueueControl(queue, storageManager, postOffice, repository,
messageCounter);
}
// Inner classes -------------------------------------------------
}