/*
* JBoss, Home of Professional Open Source.
* Copyright 2008, Red Hat Middleware LLC, and individual contributors
* as indicated by the @author tags. See the copyright.txt file 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.test.profileservice.test;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageProducer;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueSender;
import javax.jms.QueueSession;
import javax.jms.Session;
import javax.jms.Topic;
import javax.jms.TopicConnection;
import javax.jms.TopicConnectionFactory;
import javax.jms.TopicPublisher;
import javax.jms.TopicSession;
import javax.naming.InitialContext;
import junit.framework.Test;
import junit.framework.TestSuite;
import org.jboss.deployers.spi.management.KnownComponentTypes;
import org.jboss.deployers.spi.management.ManagementView;
import org.jboss.managed.api.ComponentType;
import org.jboss.managed.api.DeploymentTemplateInfo;
import org.jboss.managed.api.ManagedComponent;
import org.jboss.managed.api.ManagedOperation;
import org.jboss.managed.api.ManagedProperty;
import org.jboss.managed.api.RunState;
import org.jboss.managed.plugins.ManagedOperationMatcher;
import org.jboss.metatype.api.types.CollectionMetaType;
import org.jboss.metatype.api.types.CompositeMetaType;
import org.jboss.metatype.api.types.MapCompositeMetaType;
import org.jboss.metatype.api.types.MetaType;
import org.jboss.metatype.api.types.SimpleMetaType;
import org.jboss.metatype.api.values.CollectionValue;
import org.jboss.metatype.api.values.CompositeValue;
import org.jboss.metatype.api.values.CompositeValueSupport;
import org.jboss.metatype.api.values.MapCompositeValueSupport;
import org.jboss.metatype.api.values.MetaValue;
import org.jboss.metatype.api.values.SimpleValue;
import org.jboss.metatype.api.values.SimpleValueSupport;
import org.jboss.metatype.plugins.types.MutableCompositeMetaType;
import org.jboss.test.util.jms.JMSDestinationsUtil;
/**
* @author <a href="mailto:alex@jboss.org">Alexey Loubyansky</a>
* @author Scott.Stark@jboss.org
* @version <tt>$Revision: 105925 $<
*/
public class JmsDestinationUnitTestCase extends AbstractProfileServiceTest
{
/** The queue type. */
public static final ComponentType QueueType = KnownComponentTypes.JMSDestination.Queue.getType();
/** The topic type. */
public static final ComponentType TopicType = KnownComponentTypes.JMSDestination.Topic.getType();
/** The meta type. */
protected static final MapCompositeMetaType securityConfType;
/** The composite meta type. */
public static MutableCompositeMetaType composite;
static
{
// Create the meta type
composite = new MutableCompositeMetaType("SecurityConfig", "The security config");
composite.addItem("read", "read permission", SimpleMetaType.BOOLEAN);
composite.addItem("write", "write permission", SimpleMetaType.BOOLEAN);
composite.addItem("create", "create permission", SimpleMetaType.BOOLEAN);
composite.freeze();
securityConfType = new MapCompositeMetaType(composite);
}
public JmsDestinationUnitTestCase(String s)
{
super(s);
}
public static Test suite() throws Exception
{
TestSuite suite = new TestSuite();
if (JMSDestinationsUtil.isJBM())
{
// These tests are written for JBM only
suite.addTest(new JmsDestinationUnitTestCase("testQueueTemplate"));
suite.addTest(new JmsDestinationUnitTestCase("testTopicTemplate"));
suite.addTest(new JmsDestinationUnitTestCase("testDLQ"));
suite.addTest(new JmsDestinationUnitTestCase("testCreateQueue"));
suite.addTest(new JmsDestinationUnitTestCase("testQueueMetrics"));
suite.addTest(new JmsDestinationUnitTestCase("testQueueOperations"));
suite.addTest(new JmsDestinationUnitTestCase("testQueueRestart"));
suite.addTest(new JmsDestinationUnitTestCase("testRemoveQueue"));
suite.addTest(new JmsDestinationUnitTestCase("testCreateTopic"));
suite.addTest(new JmsDestinationUnitTestCase("testTopicMetrics"));
suite.addTest(new JmsDestinationUnitTestCase("testTopicSubscriptions"));
suite.addTest(new JmsDestinationUnitTestCase("testTopicOperations"));
suite.addTest(new JmsDestinationUnitTestCase("testRemoveTopic"));
suite.addTest(new JmsDestinationUnitTestCase("testCreateSecureQueue"));
suite.addTest(new JmsDestinationUnitTestCase("testRemoveSecureQueue"));
suite.addTest(new JmsDestinationUnitTestCase("testCreateQueueWithNullDLQ"));
suite.addTest(new JmsDestinationUnitTestCase("testRemoveQueueWithNullDLQ"));
}
return suite;
}
public void testQueueTemplate() throws Exception
{
DeploymentTemplateInfo info = getManagementView().getTemplate("QueueTemplate");
assertNotNull(info);
Map<String, ManagedProperty> properties = info.getProperties();
assertNotNull(properties);
List<String> items = Arrays.asList("JNDIName", "downCacheSize", "fullSize",
"clustered", "maxDeliveryAttempts", "maxSize", "messageCounterHistoryDayLimit",
"pageSize", "redeliveryDelay");
properties.keySet().containsAll(items);
// Validate the ObjectName property types
ManagedProperty serverPeer = info.getProperties().get("serverPeer");
assertNotNull(serverPeer);
assertEquals(SimpleMetaType.STRING, serverPeer.getMetaType());
}
public void testTopicTemplate() throws Exception
{
DeploymentTemplateInfo info = getManagementView().getTemplate("TopicTemplate");
assertNotNull(info);
Map<String, ManagedProperty> properties = info.getProperties();
assertNotNull(properties);
List<String> items = Arrays.asList("JNDIName", "downCacheSize", "fullSize",
"clustered", "maxDeliveryAttempts", "maxSize", "messageCounterHistoryDayLimit",
"pageSize", "redeliveryDelay");
properties.keySet().containsAll(items);
}
/**
* Validate the default dead letter queue exists
* @throws Exception
*/
public void testDLQ() throws Exception
{
ManagementView mgtView = getManagementView();
ManagedComponent queue = mgtView.getComponent("/queue/DLQ", QueueType);
assertNotNull(queue);
assertEquals("/queue/DLQ", queue.getName());
// Validate some of the expected properties
ManagedProperty serverPeer = queue.getProperty("serverPeer");
assertNotNull(serverPeer);
MetaType serverPeerType = serverPeer.getMetaType();
assertEquals(SimpleMetaType.STRING, serverPeerType);
}
public void testCreateQueue() throws Exception
{
Map<String, MetaValue> propValues = new HashMap<String, MetaValue>();
String jndiName = getName();
propValues.put("JNDIName", SimpleValueSupport.wrap(jndiName));
propValues.put("downCacheSize", SimpleValueSupport.wrap(1999));
propValues.put("DLQ", SimpleValueSupport.wrap("jboss.messaging.destination:name=DLQ,service=Queue"));
propValues.put("expiryQueue", SimpleValueSupport.wrap("jboss.messaging.destination:name=ExpiryQueue,service=Queue"));
ComponentType type = KnownComponentTypes.JMSDestination.Queue.getType();
createComponentTest("QueueTemplate", propValues, getName(), type, jndiName);
ManagedComponent queue = activeView.getComponent("testCreateQueue", type);
assertNotNull(queue);
assertEquals("testCreateQueue", queue.getName());
log.info(queue.getProperties().keySet());
assertEquals("downCacheSize", queue.getProperty("downCacheSize").getValue(), new SimpleValueSupport(SimpleMetaType.INTEGER_PRIMITIVE, 1999));
ManagedProperty serverPeer = queue.getProperty("serverPeer");
assertNotNull(serverPeer);
MetaType serverPeerType = serverPeer.getMetaType();
assertEquals(SimpleMetaType.STRING, serverPeerType);
ManagedProperty dlq = queue.getProperty("DLQ");
assertNotNull(dlq);
MetaType dlqType = dlq.getMetaType();
assertEquals(SimpleMetaType.STRING, dlqType);
ManagedProperty expiryQueue = queue.getProperty("expiryQueue");
assertNotNull(expiryQueue);
MetaType expiryQueueType = serverPeer.getMetaType();
assertEquals(SimpleMetaType.STRING, expiryQueueType);
}
public void testQueueMetrics() throws Exception
{
// Get the managed component
ManagedComponent component = getManagementView().getComponent("testCreateQueue", QueueType);
assertNotNull("testCreateQueue ManagedComponent", component);
// Send a few messages and validate the msg counts
sendQueueMsgs("testCreateQueue", component);
}
public void testQueueOperations() throws Exception
{
ManagedComponent component = getManagementView().getComponent("testCreateQueue", QueueType);
// Send a few messages so the message based ops have values
sendQueueMsgs("testCreateQueue", component);
ManagedOperation o = getOperation(component, "listMessageCounterAsHTML", new String[0]);
MetaValue v = o.invoke(new MetaValue[0]);
assertNotNull("null operation return value", v);
log.debug("result: " + v);
// JBAS-7024,
ManagedOperation listAllMessages = getOperation(component, "listAllMessages", new String[0]);
MetaType listAllMessagesRT = listAllMessages.getReturnType();
log.debug("listAllMessagesRT: " + listAllMessagesRT);
MetaValue listAllMessagesMV = listAllMessages.invoke(new MetaValue[0]);
assertNotNull("null operation return value", listAllMessagesMV);
log.debug("result: " + listAllMessagesMV);
MetaType resultType = listAllMessagesMV.getMetaType();
log.debug("resultType: "+resultType);
assertTrue("resultType instanceof CompositeMetaType", resultType instanceof CollectionMetaType);
CollectionMetaType resultCMT = (CollectionMetaType) resultType;
MetaType resultElementType = resultCMT.getElementType();
log.debug("resultElementType: "+resultElementType);
assertTrue("resultElementType instanceof CompositeMetaType", resultElementType instanceof CompositeMetaType);
log.debug("resultElementType: "+resultElementType);
CollectionValue listAllMessagesCV = (CollectionValue) listAllMessagesMV;
MetaValue[] listAllMessagesElements = listAllMessagesCV.getElements();
log.debug("listAllMessagesElements: "+listAllMessagesElements);
if(listAllMessagesElements.length > 0)
{
MetaValue m0 = listAllMessagesElements[0];
MetaType m0MT = m0.getMetaType();
assertTrue("m0MT.isComposite", m0MT.isComposite());
assertTrue("m0MT instanceof CompositeMetaType", m0MT instanceof CompositeMetaType);
assertTrue("m0 instanceof CompositeValue", m0 instanceof CompositeValue);
CompositeValue m0MV = (CompositeValue) m0;
log.debug("m0MV.values: "+m0MV.values());
}
}
public void testQueueRestart() throws Exception
{
ManagedComponent component = getManagementView().getComponent("testCreateQueue", QueueType);
assertEquals(RunState.RUNNING, component.getRunState());
// Stop
ManagedOperation o = getOperation(component, "stop", new String[0]);
o.invoke(new MetaValue[0]);
// Check runState dispatching
assertEquals(RunState.STOPPED, component.getRunState());
// Start
o = getOperation(component, "start", new String[0]);
o.invoke(new MetaValue[0]);
//
assertEquals(RunState.RUNNING, component.getRunState());
}
public void testMultipleQueues() throws Exception
{
ManagementView managementView = getManagementView();
Map<String, MetaValue> propValues = new HashMap<String, MetaValue>();
// testCreateQueue1
String jndiName = "testCreateQueue1";
String templateName = "QueueTemplate";
MetaValue jndiName1MV = SimpleValueSupport.wrap(jndiName);
propValues.put("JNDIName", jndiName1MV);
DeploymentTemplateInfo queue1Info = managementView.getTemplate(templateName);
Map<String, ManagedProperty> testCreateQueue1Props = queue1Info.getProperties();
log.debug("QueueTemplate#1: "+testCreateQueue1Props);
for(String propName : testCreateQueue1Props.keySet())
{
ManagedProperty prop = testCreateQueue1Props.get(propName);
assertNotNull("property " + propName + " found in template " + templateName, prop);
log.debug("createComponentTest("+propName+") before: "+prop.getValue());
prop.setValue(propValues.get(propName));
log.debug("createComponentTest("+propName+") after: "+prop.getValue());
}
managementView.applyTemplate("testCreateQueue1", queue1Info);
managementView.process();
// testCreateQueue2
jndiName = "testCreateQueue2";
MetaValue jndiName2MV = SimpleValueSupport.wrap(jndiName);
propValues.put("JNDIName", jndiName2MV);
// Get a fresh template info view
DeploymentTemplateInfo queue2Info = managementView.getTemplate(templateName);
Map<String, ManagedProperty> testCreateQueue2Props = queue2Info.getProperties();
log.debug("QueueTemplate#2: "+testCreateQueue2Props);
// Validate the properties don't have the previous template values
ManagedProperty jndiNameCheck1 = testCreateQueue2Props.get("JNDIName");
assertFalse("Fresh temmplate properties does not have previous JNDIName",
jndiName1MV.equals(jndiNameCheck1.getValue()));
for(String propName : testCreateQueue2Props.keySet())
{
ManagedProperty prop = testCreateQueue2Props.get(propName);
assertNotNull("property " + propName + " found in template " + templateName, prop);
log.debug(propName+" before: "+prop.getValue());
prop.setValue(propValues.get(propName));
log.debug(propName+" after: "+prop.getValue());
}
managementView.applyTemplate("testCreateQueue2", queue2Info);
managementView.process();
// Validate the components
// managementView.reload();
ManagedComponent queue1 = managementView.getComponent("testCreateQueue1", QueueType);
assertNotNull(queue1);
assertEquals("testCreateQueue1", queue1.getName());
ManagedComponent queue2 = managementView.getComponent("testCreateQueue2", QueueType);
assertNotNull(queue2);
assertEquals("testCreateQueue2", queue2.getName());
}
/**
* JBAS-6939
* @throws Exception
*/
public void testQueueRunState() throws Exception
{
ManagementView mgtView = getManagementView();
ManagedComponent queue = mgtView.getComponent("testCreateQueue", QueueType);
assertNotNull(queue);
assertEquals("running", RunState.RUNNING, queue.getRunState());
ManagedOperation stop = getOperation(queue, "stop", new String[0]);
stop.invoke(new MetaValue[0]);
mgtView.reload();
queue = mgtView.getComponent("testCreateQueue", QueueType);
log.info("runtstate: " + queue.getRunState());
}
public void testRemoveQueue() throws Exception
{
removeDeployment("testCreateQueue-service.xml");
ManagedComponent queue = getManagementView().getComponent("testCreateQueue", QueueType);
assertNull("queue should be removed" + queue, queue);
}
public void testCreateTopic() throws Exception
{
Map<String, MetaValue> propValues = new HashMap<String, MetaValue>();
String jndiName = getName();
propValues.put("JNDIName", SimpleValueSupport.wrap(jndiName));
HashSet<String> removedProps = new HashSet<String>();
removedProps.add("serverPeer");
createComponentTest("TopicTemplate", propValues, removedProps, getName(), TopicType, jndiName, true);
ManagedComponent topic = activeView.getComponent("testCreateTopic", TopicType);
assertNotNull(topic);
assertEquals("testCreateTopic", topic.getName());
}
/**
* Run after testCreateTopic to validate the topic subscriptions, list msgs.
*/
public void testTopicSubscriptions()
throws Exception
{
ComponentType type = KnownComponentTypes.JMSDestination.Topic.getType();
ManagementView managementView = getManagementView();
ManagedComponent topic = managementView.getComponent("testCreateTopic", type);
assertNotNull(topic);
// Subscribe to a topic and validate the subscription shows up in the list op
InitialContext ctx = super.getInitialContext();
Topic topicDest = (Topic) ctx.lookup("testCreateTopic");
TopicConnectionFactory tcf = (TopicConnectionFactory) ctx.lookup("ConnectionFactory");
TopicConnection tc = tcf.createTopicConnection();
tc.start();
TopicSession ts = tc.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
MessageConsumer mc = ts.createConsumer(topicDest);
MessageProducer mp = ts.createProducer(topicDest);
Message helloMsg = ts.createTextMessage("Hello from testCreateTopic");
mp.send(helloMsg);
log.info("Producer sent: "+helloMsg);
Message response = mc.receive();
log.info("Consumer saw: "+response);
// Check some stats
log.info(topic.getProperties().keySet());
ManagedProperty NonDurableSubscriptionsCount = topic.getProperty("nonDurableSubscriptionsCount");
assertNotNull(NonDurableSubscriptionsCount);
log.info(NonDurableSubscriptionsCount);
SimpleValue NonDurableSubscriptionsCountMV = (SimpleValue) NonDurableSubscriptionsCount.getValue();
log.info(NonDurableSubscriptionsCountMV);
assertTrue(NonDurableSubscriptionsCountMV.compareTo(SimpleValueSupport.wrap(0)) > 0);
Set<ManagedOperation> ops = topic.getOperations();
log.info("Topic ops: "+ops);
Map<String, ManagedOperation> opsByName = new HashMap<String, ManagedOperation>();
for(ManagedOperation op : ops)
opsByName.put(op.getName(), op);
ManagedOperation listNonDurableSubscriptions = opsByName.get("listNonDurableSubscriptions");
assertNotNull(listNonDurableSubscriptions);
MetaValue subscriptions = listNonDurableSubscriptions.invoke();
log.info(subscriptions);
assertTrue(subscriptions instanceof CollectionValue);
CollectionValue subscriptionsCV = (CollectionValue) subscriptions;
assertTrue("subscriptions.size > 0", subscriptionsCV.getSize() > 0);
MetaValue[] subscriptionsMVs = subscriptionsCV.getElements();
for(MetaValue mv : subscriptionsMVs)
{
CompositeValue cv = (CompositeValue) mv;
MetaValue name = cv.get("name");
log.info(name);
MetaValue clientID = cv.get("clientID");
log.info(clientID);
MetaValue durable = cv.get("durable");
log.info(durable);
MetaValue selector = cv.get("selector");
log.info(selector);
MetaValue id = cv.get("id");
log.info(id);
MetaValue maxSize = cv.get("maxSize");
log.info(maxSize);
MetaValue messageCount = cv.get("messageCount");
log.info(messageCount);
}
}
public void testServerPeer() throws Exception
{
ManagementView mgtView = getManagementView();
ComponentType type = new ComponentType("JMS", "ServerPeer");
ManagedComponent component = mgtView.getComponent("jboss.messaging:service=ServerPeer", type);
assertNotNull(component);
log.info("Properties: "+component.getProperties().keySet());
ManagedOperation o = getOperation(component, "listMessageCountersAsHTML", new String[0]);
MetaValue v = o.invoke(new MetaValue[0]);
assertNotNull("null operation return value", v);
log.debug("result" + v);
}
public void testTopicMetrics() throws Exception
{
ManagementView mgtView = getManagementView();
ManagedComponent component = mgtView.getComponent("testCreateTopic", TopicType);
assertNotNull(component);
Topic topic = (Topic) getInitialContext().lookup("testCreateTopic");
TopicConnectionFactory cf = (TopicConnectionFactory) getInitialContext().lookup("ConnectionFactory");
TopicConnection connection = cf.createTopicConnection();
TopicSession session = connection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
session.createSubscriber(topic);
TopicPublisher pub = session.createPublisher(topic);
try
{
for(int i = 0; i < 10; i++)
pub.send(session.createTextMessage("Message nr " + i));
SimpleValue nondurable = (SimpleValue)component.getProperty("nonDurableSubscriptionsCount").getValue();
SimpleValue durable = (SimpleValue)component.getProperty("durableSubscriptionsCount").getValue();
SimpleValue all = (SimpleValue)component.getProperty("allSubscriptionsCount").getValue();
SimpleValue allMessageCount = (SimpleValue)component.getProperty("allMessageCount").getValue();
CollectionValue messageCounters = (CollectionValue) component.getProperty("messageCounters").getValue();
assertNotNull(messageCounters);
assertEquals(1, nondurable.getValue());
assertEquals(0, durable.getValue());
assertEquals(1, all.getValue());
assertEquals(10, allMessageCount.getValue());
CompositeValue messageCounter = (CompositeValue) messageCounters.iterator().next();
assertNotNull(messageCounter);
SimpleValue count = (SimpleValue) messageCounter.get("messageCount");
assertEquals(count, allMessageCount);
}
finally
{
pub.close();
session.close();
}
}
public void testTopicOperations() throws Exception
{
ManagedComponent component = getManagementView().getComponent("testCreateTopic", TopicType);
ManagedOperation o = getOperation(component, "listAllSubscriptionsAsHTML", new String[0]);
MetaValue v = o.invoke(new MetaValue[0]);
assertNotNull("null operation return value", v);
log.debug("result" + v);
}
public void testRemoveTopic() throws Exception
{
removeDeployment("testCreateTopic-service.xml");
ManagedComponent topic = getManagementView().getComponent("testCreateTopic", TopicType);
assertNull("topic should be removed " + topic, topic);
}
public void testCreateSecureQueue() throws Exception
{
Map<String, MetaValue> propValues = new HashMap<String, MetaValue>();
String jndiName = getName();
propValues.put("name", SimpleValueSupport.wrap(jndiName));
propValues.put("JNDIName", SimpleValueSupport.wrap(jndiName));
propValues.put("clustered", SimpleValueSupport.wrap(true));
// Security config
Map<String, MetaValue> values = new HashMap<String, MetaValue>();
values.put("admin", createCompositeValue(true, true, true));
values.put("publisher", createCompositeValue(true, true, false));
values.put("user", createCompositeValue(true, null, null));
CompositeValue map = new MapCompositeValueSupport(values, securityConfType);
propValues.put("securityConfig", map);
createComponentTest("QueueTemplate", propValues, getName(), QueueType, jndiName);
ManagedComponent queue = activeView.getComponent("testCreateSecureQueue", QueueType);
assertNotNull(queue);
assertEquals("testCreateSecureQueue", queue.getName());
log.info(queue.getProperties().keySet());
assertNotNull(queue.getProperty("securityConfig").getValue());
}
public void testRemoveSecureQueue() throws Exception
{
removeDeployment("testCreateSecureQueue-service.xml");
ManagedComponent queue = getManagementView().getComponent("testCreateSecureQueue", QueueType);
assertNull("queue should be removed" + queue, queue);
}
/**
* Validate creating a queue with a null ObjectName value for the DLQ
* and Expiry
* @throws Exception
*/
public void testCreateQueueWithNullDLQ() throws Exception
{
Map<String, MetaValue> propValues = new HashMap<String, MetaValue>();
String jndiName = getName();
propValues.put("JNDIName", SimpleValueSupport.wrap(jndiName));
propValues.put("downCacheSize", SimpleValueSupport.wrap(1999));
propValues.put("DLQ", SimpleValueSupport.wrap((String)null));
propValues.put("expiryQueue", null);
ComponentType type = KnownComponentTypes.JMSDestination.Queue.getType();
createComponentTest("QueueTemplate", propValues, getName(), type, jndiName);
ManagedComponent queue = activeView.getComponent("testCreateQueueWithNullDLQ", type);
assertNotNull(queue);
assertEquals("testCreateQueueWithNullDLQ", queue.getName());
log.info(queue.getProperties().keySet());
assertEquals("downCacheSize", queue.getProperty("downCacheSize").getValue(), new SimpleValueSupport(SimpleMetaType.INTEGER_PRIMITIVE, 1999));
ManagedProperty serverPeer = queue.getProperty("serverPeer");
assertNotNull(serverPeer);
MetaType serverPeerType = serverPeer.getMetaType();
assertEquals(SimpleMetaType.STRING, serverPeerType);
ManagedProperty dlq = queue.getProperty("DLQ");
assertNotNull(dlq);
MetaType dlqType = dlq.getMetaType();
assertEquals(SimpleMetaType.STRING, dlqType);
ManagedProperty expiryQueue = queue.getProperty("expiryQueue");
assertNotNull(expiryQueue);
MetaType expiryQueueType = serverPeer.getMetaType();
assertEquals(SimpleMetaType.STRING, expiryQueueType);
}
public void testRemoveQueueWithNullDLQ() throws Exception
{
removeDeployment("testCreateQueueWithNullDLQ-service.xml");
ManagedComponent queue = getManagementView().getComponent("testCreateQueueWithNullDLQ", QueueType);
assertNull("queue should be removed" + queue, queue);
}
protected void sendQueueMsgs(String jndiName, ManagedComponent component)
throws Exception
{
// The message count property
ManagedProperty messageCount = component.getProperty("messageCount");
assertNotNull("messageCount", messageCount);
ManagedProperty messageCounter = component.getProperty("messageCounter");
assertNotNull("messageCounter", messageCounter);
// Clear any
Set<ManagedOperation> ops = component.getOperations();
ManagedOperation removeAllMessages = ManagedOperationMatcher.findOperation(ops, "removeAllMessages");
assertNotNull("removeAllMessages", removeAllMessages);
removeAllMessages.invoke();
assertEquals(SimpleValueSupport.wrap(0), messageCount.getValue());
// Send a message
Queue queue = (Queue) getInitialContext().lookup(jndiName);
assertNotNull(queue);
QueueConnectionFactory qCf = (QueueConnectionFactory) getInitialContext().lookup("ConnectionFactory");
QueueConnection c = qCf.createQueueConnection();
c.start();
QueueSession s = c.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
QueueSender sender = s.createSender(queue);
// Message 1
sender.send(s.createTextMessage("Hey!"));
SimpleValue messageCount1 = (SimpleValue) messageCount.getValue();
assertTrue((Integer) (messageCount1).getValue() > 0);
CompositeValue messageCounterCV = (CompositeValue) messageCounter.getValue();
log.info(messageCounterCV);
assertEquals(messageCounterCV.get("messageCount"), messageCount1);
// Message 2
sender.send(s.createTextMessage("Message2"));
SimpleValue messageCount2 = (SimpleValue) messageCount.getValue();
assertTrue(messageCount2.compareTo(messageCount1) > 0);
messageCounterCV = (CompositeValue) messageCounter.getValue();
assertEquals(messageCounterCV.get("messageCount"), messageCount2);
//
ManagedOperation listAllMessages = ManagedOperationMatcher.findOperation(ops, "listAllMessages");
assertNotNull("listAllMessages", listAllMessages);
MetaValue msgs = listAllMessages.invoke();
assertNotNull(msgs);
log.info("listAllMessages.MV: "+msgs);
assertTrue("msgs is a CollectionValue", msgs instanceof CollectionValue);
CollectionValue msgsCV = (CollectionValue) msgs;
MetaValue[] msgsMVs = msgsCV.getElements();
assertTrue("listAllMessages length > 0", msgsMVs.length > 0);
for(MetaValue mv : msgsMVs)
{
assertTrue(mv instanceof CompositeValue);
CompositeValue cv = (CompositeValue) mv;
MetaValue JMSMessageID = cv.get("JMSMessageID");
log.info(JMSMessageID);
assertNotNull(JMSMessageID);
MetaValue JMSCorrelationID = cv.get("JMSCorrelationID");
log.info(JMSCorrelationID);
MetaValue JMSTimestamp = cv.get("JMSTimestamp");
log.info(JMSTimestamp);
assertNotNull(JMSTimestamp);
}
c.stop();
c.close();
}
protected ManagedOperation getOperation(ManagedComponent comp, String name, String[] signature)
{
assertNotNull(comp);
ManagedOperation operation = null;
for(ManagedOperation o : comp.getOperations())
{
if(o.getName().equals(name))
{
if(Arrays.equals(signature, o.getReflectionSignature()))
operation = o;
}
}
assertNotNull("null operation", operation);
return operation;
}
protected CompositeValue createCompositeValue(Boolean read, Boolean write, Boolean create)
{
Map<String, MetaValue> map = new HashMap<String, MetaValue>();
map.put("read", new SimpleValueSupport(SimpleMetaType.BOOLEAN, read));
map.put("write", new SimpleValueSupport(SimpleMetaType.BOOLEAN, write));
map.put("create", new SimpleValueSupport(SimpleMetaType.BOOLEAN, create));
return new CompositeValueSupport(composite, map);
}
}