blob: d15af018d345fa06343d6760bfbd4652d9cd2abf [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.activemq.jms2;
import java.lang.management.ManagementFactory;
import java.util.LinkedList;
import java.util.List;
import javax.jms.Connection;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.management.JMX;
import javax.management.MBeanServer;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.broker.jmx.BrokerMBeanSupport;
import org.apache.activemq.broker.jmx.DestinationViewMBean;
import org.apache.activemq.broker.jmx.QueueViewMBean;
import org.apache.activemq.broker.jmx.TopicViewMBean;
import org.apache.activemq.command.ActiveMQDestination;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Rule;
import org.junit.rules.TestName;
public abstract class ActiveMQJMS2TestBase {
public static final String DEFAULT_JMX_DOMAIN_NAME = "org.apache.activemq";
public static final String DEFAULT_JMX_BROKER_NAME = "localhost";
public static final String DEFAULT_JMS_USER = "admin";
public static final String DEFAULT_JMS_PASS = "admin";
protected static ActiveMQConnectionFactory activemqConnectionFactory = null;
@Rule public TestName testName = new TestName();
// Control session
protected Connection connection = null;
protected Session session = null;
protected MessageProducer messageProducer = null;
protected String methodNameDestinationName = null;
protected MBeanServer mbeanServer = null;
@BeforeClass
public static void setUpClass() {
activemqConnectionFactory = new ActiveMQConnectionFactory("vm://localhost?marshal=false&broker.persistent=false");
List<String> newTrustedPackages = new LinkedList<>();
newTrustedPackages.addAll(activemqConnectionFactory.getTrustedPackages());
newTrustedPackages.add(ActiveMQJMS2TestBase.class.getPackageName());
activemqConnectionFactory.setTrustedPackages(newTrustedPackages);
}
@AfterClass
public static void tearDownClass() {
activemqConnectionFactory = null;
}
@Before
public void setUp() throws Exception {
connection = activemqConnectionFactory.createConnection();
connection.start();
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
methodNameDestinationName = "AMQ.JMS2." + cleanParameterizedMethodName(testName.getMethodName().toUpperCase());
messageProducer = session.createProducer(session.createQueue(methodNameDestinationName));
mbeanServer = ManagementFactory.getPlatformMBeanServer();
}
@After
public void tearDown() {
if(messageProducer != null) {
try { messageProducer.close(); } catch (Exception e) { } finally { messageProducer = null; }
}
if(session != null) {
try { session.close(); } catch (Exception e) { } finally { session = null; }
}
if(connection != null) {
try { connection.close(); } catch (Exception e) { } finally { connection = null; }
}
methodNameDestinationName = null;
}
protected DestinationViewMBean getDestinationViewMBean(String destinationType, ActiveMQDestination destination) throws Exception {
switch(destinationType) {
case "queue": return getQueueViewMBean(destination);
case "topic": return getTopicViewMBean(destination);
case "temp-queue": return getTempQueueViewMBean(destination);
case "temp-topic": return getTempTopicViewMBean(destination);
default: throw new IllegalStateException("Unsupported destinationType: " + destinationType);
}
}
protected QueueViewMBean getQueueViewMBean(ActiveMQDestination destination) throws Exception {
return JMX.newMBeanProxy(mbeanServer, BrokerMBeanSupport.createDestinationName(BrokerMBeanSupport.createBrokerObjectName(DEFAULT_JMX_DOMAIN_NAME, DEFAULT_JMX_BROKER_NAME).toString(), destination), QueueViewMBean.class);
}
protected TopicViewMBean getTopicViewMBean(ActiveMQDestination destination) throws Exception {
return JMX.newMBeanProxy(mbeanServer, BrokerMBeanSupport.createDestinationName(BrokerMBeanSupport.createBrokerObjectName(DEFAULT_JMX_DOMAIN_NAME, DEFAULT_JMX_BROKER_NAME).toString(), destination), TopicViewMBean.class);
}
protected TopicViewMBean getTempQueueViewMBean(ActiveMQDestination destination) throws Exception {
return JMX.newMBeanProxy(mbeanServer, BrokerMBeanSupport.createDestinationName(BrokerMBeanSupport.createBrokerObjectName(DEFAULT_JMX_DOMAIN_NAME, DEFAULT_JMX_BROKER_NAME).toString(), destination), TopicViewMBean.class);
}
protected TopicViewMBean getTempTopicViewMBean(ActiveMQDestination destination) throws Exception {
return JMX.newMBeanProxy(mbeanServer, BrokerMBeanSupport.createDestinationName(BrokerMBeanSupport.createBrokerObjectName(DEFAULT_JMX_DOMAIN_NAME, DEFAULT_JMX_BROKER_NAME).toString(), destination), TopicViewMBean.class);
}
private static String cleanParameterizedMethodName(String methodName) {
// clean up parameterized method string: TESTMESSAGETIMESTAMPTIMETOLIVE[DESTINATIONTYPE=QUEUE, MESSAGETYPE=BYTES]
// returns: TESTMESSAGETIMESTAMPTIMETOLIVE.QUEUE.BYTES
if(methodName == null || (!methodName.contains("[") && !methodName.contains("]"))) {
return methodName;
}
String[] step1 = methodName.split("\\[", 2);
String[] step2 = step1[1].split("\\]", 2);
String[] step3 = step2[0].split(",", 16);
return step1[0] + "." + step3[0].split("=", 2)[1] + "." + step3[1].split("=", 2)[1];
}
}