You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by cs...@apache.org on 2016/01/06 16:11:38 UTC
[1/2] activemq git commit: Initial Version of activemq-junit
Repository: activemq
Updated Branches:
refs/heads/master 16bc0f0d7 -> 8317208a1
Initial Version of activemq-junit
Added configure method to EmbeddedActiveMQBroker
Added support for XBean configuration
Project: http://git-wip-us.apache.org/repos/asf/activemq/repo
Commit: http://git-wip-us.apache.org/repos/asf/activemq/commit/da3b1380
Tree: http://git-wip-us.apache.org/repos/asf/activemq/tree/da3b1380
Diff: http://git-wip-us.apache.org/repos/asf/activemq/diff/da3b1380
Branch: refs/heads/master
Commit: da3b1380234c5d1745094f883778f19e58fe9cee
Parents: 16bc0f0
Author: Quinn Stevenson <qu...@lcnservices.com>
Authored: Wed Dec 23 13:29:06 2015 -0700
Committer: Christopher L. Shannon (cshannon) <ch...@gmail.com>
Committed: Wed Jan 6 15:10:02 2016 +0000
----------------------------------------------------------------------
activemq-tooling/activemq-junit/pom.xml | 70 ++++
.../activemq/junit/EmbeddedActiveMQBroker.java | 404 +++++++++++++++++++
.../junit/EmbeddedActiveMQBrokerConfigTest.java | 110 +++++
.../junit/EmbeddedActiveMQBrokerRuleTest.java | 43 ++
...mbeddedActiveMQBrokerXbeanUriConfigTest.java | 108 +++++
.../MultipleEmbeddedActiveMQBrokerRuleTest.java | 60 +++
.../src/test/resources/activemq-simple.xml | 28 ++
activemq-tooling/pom.xml | 1 +
8 files changed, 824 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/activemq/blob/da3b1380/activemq-tooling/activemq-junit/pom.xml
----------------------------------------------------------------------
diff --git a/activemq-tooling/activemq-junit/pom.xml b/activemq-tooling/activemq-junit/pom.xml
new file mode 100644
index 0000000..33f8366
--- /dev/null
+++ b/activemq-tooling/activemq-junit/pom.xml
@@ -0,0 +1,70 @@
+<!--
+ 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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.activemq.tooling</groupId>
+ <artifactId>activemq-tooling</artifactId>
+ <version>5.14-SNAPSHOT</version>
+ </parent>
+
+ <artifactId>activemq-junit</artifactId>
+ <name>ActiveMQ :: JUnit Rule</name>
+
+ <description>JUnit Rule for Embedded ActiveMQ Brokers</description>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.activemq</groupId>
+ <artifactId>activemq-broker</artifactId>
+ <version>${project.version}</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-context</artifactId>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.activemq</groupId>
+ <artifactId>activemq-spring</artifactId>
+ <version>${project.version}</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.activemq</groupId>
+ <artifactId>activemq-pool</artifactId>
+ <version>${project.version}</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <scope>provided</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-simple</artifactId>
+ <version>${slf4j-version}</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+
+</project>
http://git-wip-us.apache.org/repos/asf/activemq/blob/da3b1380/activemq-tooling/activemq-junit/src/main/java/org/apache/activemq/junit/EmbeddedActiveMQBroker.java
----------------------------------------------------------------------
diff --git a/activemq-tooling/activemq-junit/src/main/java/org/apache/activemq/junit/EmbeddedActiveMQBroker.java b/activemq-tooling/activemq-junit/src/main/java/org/apache/activemq/junit/EmbeddedActiveMQBroker.java
new file mode 100644
index 0000000..3e328e8
--- /dev/null
+++ b/activemq-tooling/activemq-junit/src/main/java/org/apache/activemq/junit/EmbeddedActiveMQBroker.java
@@ -0,0 +1,404 @@
+/*
+ * 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.junit;
+
+import java.net.URI;
+
+import org.apache.activemq.ActiveMQConnectionFactory;
+import org.apache.activemq.broker.BrokerFactory;
+import org.apache.activemq.broker.BrokerPlugin;
+import org.apache.activemq.broker.BrokerService;
+import org.apache.activemq.broker.region.Destination;
+import org.apache.activemq.broker.region.Queue;
+import org.apache.activemq.broker.region.Topic;
+import org.apache.activemq.broker.region.policy.PolicyEntry;
+import org.apache.activemq.broker.region.policy.PolicyMap;
+import org.apache.activemq.plugin.StatisticsBrokerPlugin;
+import org.apache.activemq.pool.PooledConnectionFactory;
+import org.junit.rules.ExternalResource;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * A JUnit Rule that embeds an ActiveMQ broker into a test.
+ */
+public class EmbeddedActiveMQBroker extends ExternalResource {
+ Logger log = LoggerFactory.getLogger(this.getClass());
+
+ BrokerService brokerService;
+
+ /**
+ * Create an embedded ActiveMQ broker using defaults
+ *
+ * The defaults are:
+ * - the broker name is 'embedded-broker'
+ * - JMX is disabled
+ * - Persistence is disabled
+ *
+ */
+ public EmbeddedActiveMQBroker() {
+ brokerService = new BrokerService();
+ brokerService.setUseJmx(false);
+ brokerService.setUseShutdownHook(false);
+ brokerService.setPersistent(false);
+ brokerService.setBrokerName("embedded-broker");
+ }
+
+ /**
+ * Create an embedded ActiveMQ broker using a configuration URI
+ */
+ public EmbeddedActiveMQBroker(String configurationURI ) {
+ try {
+ brokerService = BrokerFactory.createBroker(configurationURI);
+ } catch (Exception ex) {
+ throw new RuntimeException("Exception encountered creating embedded ActiveMQ broker from configuration URI: " + configurationURI, ex);
+ }
+ }
+
+ /**
+ * Create an embedded ActiveMQ broker using a configuration URI
+ */
+ public EmbeddedActiveMQBroker(URI configurationURI ) {
+ try {
+ brokerService = BrokerFactory.createBroker(configurationURI);
+ } catch (Exception ex) {
+ throw new RuntimeException("Exception encountered creating embedded ActiveMQ broker from configuration URI: " + configurationURI, ex);
+ }
+ }
+
+ /**
+ * Customize the configuration of the embedded ActiveMQ broker
+ *
+ * This method is called before the embedded ActiveMQ broker is started, and can
+ * be overridden to this method to customize the broker configuration.
+ */
+ protected void configure() {}
+
+ /**
+ * Start the embedded ActiveMQ broker, blocking until the broker has successfully started.
+ * <p/>
+ * The broker will normally be started by JUnit using the before() method. This method allows the broker to
+ * be started manually to support advanced testing scenarios.
+ */
+ public void start() {
+ try {
+ this.configure();
+ brokerService.start();
+ } catch (Exception ex) {
+ throw new RuntimeException("Exception encountered starting embedded ActiveMQ broker: {}" + this.getBrokerName(), ex);
+ }
+
+ brokerService.waitUntilStarted();
+ }
+
+ /**
+ * Stop the embedded ActiveMQ broker, blocking until the broker has stopped.
+ * <p/>
+ * The broker will normally be stopped by JUnit using the after() method. This method allows the broker to
+ * be stopped manually to support advanced testing scenarios.
+ */
+ public void stop() {
+ if (!brokerService.isStopped()) {
+ try {
+ brokerService.stop();
+ } catch (Exception ex) {
+ log.warn("Exception encountered stopping embedded ActiveMQ broker: {}" + this.getBrokerName(), ex);
+ }
+ }
+
+ brokerService.waitUntilStopped();
+ }
+
+ /**
+ * Start the embedded ActiveMQ Broker
+ * <p/>
+ * Invoked by JUnit to setup the resource
+ */
+ @Override
+ protected void before() throws Throwable {
+ log.info("Starting embedded ActiveMQ broker: {}", this.getBrokerName());
+
+ this.start();
+
+ super.before();
+ }
+
+ /**
+ * Stop the embedded ActiveMQ Broker
+ * <p/>
+ * Invoked by JUnit to tear down the resource
+ */
+ @Override
+ protected void after() {
+ log.info("Stopping Embedded ActiveMQ Broker: {}", this.getBrokerName());
+
+ super.after();
+
+ this.stop();
+ }
+
+ /**
+ * Create an ActiveMQConnectionFactory for the embedded ActiveMQ Broker
+ *
+ * @return a new ActiveMQConnectionFactory
+ */
+ public ActiveMQConnectionFactory createConnectionFactory() {
+ ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory();
+ connectionFactory.setBrokerURL(brokerService.getVmConnectorURI().toString());
+ return connectionFactory;
+ }
+
+ /**
+ * Create an PooledConnectionFactory for the embedded ActiveMQ Broker
+ *
+ * @return a new PooledConnectionFactory
+ */
+ public PooledConnectionFactory createPooledConnectionFactory() {
+ ActiveMQConnectionFactory connectionFactory = createConnectionFactory();
+
+ PooledConnectionFactory pooledConnectionFactory = new PooledConnectionFactory(connectionFactory);
+
+ return pooledConnectionFactory;
+ }
+
+ /**
+ * Get the BrokerService for the embedded ActiveMQ broker.
+ * <p/>
+ * This may be required for advanced configuration of the BrokerService.
+ *
+ * @return the embedded ActiveMQ broker
+ */
+ public BrokerService getBrokerService() {
+ return brokerService;
+ }
+
+ /**
+ * Get the VM URL for the embedded ActiveMQ Broker
+ * <p/>
+ * NOTE: The option is precreate=false option is appended to the URL to avoid the automatic creation of brokers
+ * and the resulting duplicate broker errors
+ *
+ * @return the VM URL for the embedded broker
+ */
+ public String getVmURL() {
+ return String.format("failover:(%s?create=false)", brokerService.getVmConnectorURI().toString());
+ }
+
+ /**
+ * Get the name of the embedded ActiveMQ Broker
+ *
+ * @return name of the embedded broker
+ */
+ public String getBrokerName() {
+ return brokerService.getBrokerName();
+ }
+
+ public void setBrokerName(String brokerName) {
+ brokerService.setBrokerName(brokerName);
+ }
+
+ public boolean isStatisticsPluginEnabled() {
+ BrokerPlugin[] plugins = brokerService.getPlugins();
+
+ if (null != plugins) {
+ for (BrokerPlugin plugin : plugins) {
+ if (plugin instanceof StatisticsBrokerPlugin) {
+ return true;
+ }
+ }
+ }
+
+ return false;
+ }
+
+ public void enableStatisticsPlugin() {
+ if (!isStatisticsPluginEnabled()) {
+ BrokerPlugin[] newPlugins;
+ BrokerPlugin[] currentPlugins = brokerService.getPlugins();
+ if (null != currentPlugins && 0 < currentPlugins.length) {
+ newPlugins = new BrokerPlugin[currentPlugins.length + 1];
+
+ System.arraycopy(currentPlugins, 0, newPlugins, 0, currentPlugins.length);
+ } else {
+ newPlugins = new BrokerPlugin[1];
+ }
+
+ newPlugins[newPlugins.length - 1] = new StatisticsBrokerPlugin();
+
+ brokerService.setPlugins(newPlugins);
+ }
+ }
+
+ public void disableStatisticsPlugin() {
+ if (isStatisticsPluginEnabled()) {
+ BrokerPlugin[] currentPlugins = brokerService.getPlugins();
+ if (1 < currentPlugins.length) {
+ BrokerPlugin[] newPlugins = new BrokerPlugin[currentPlugins.length - 1];
+
+ int i = 0;
+ for (BrokerPlugin plugin : currentPlugins) {
+ if (!(plugin instanceof StatisticsBrokerPlugin)) {
+ newPlugins[i++] = plugin;
+ }
+ }
+ brokerService.setPlugins(newPlugins);
+ } else {
+ brokerService.setPlugins(null);
+ }
+
+ }
+ }
+
+ public boolean isAdvisoryForDeliveryEnabled() {
+ return getDefaultPolicyEntry().isAdvisoryForDelivery();
+ }
+
+ public void enableAdvisoryForDelivery() {
+ getDefaultPolicyEntry().setAdvisoryForDelivery(true);
+ }
+
+ public void disableAdvisoryForDelivery() {
+ getDefaultPolicyEntry().setAdvisoryForDelivery(false);
+ }
+
+ public boolean isAdvisoryForConsumedEnabled() {
+ return getDefaultPolicyEntry().isAdvisoryForConsumed();
+ }
+
+ public void enableAdvisoryForConsumed() {
+ getDefaultPolicyEntry().setAdvisoryForConsumed(true);
+ }
+
+ public void disableAdvisoryForConsumed() {
+ getDefaultPolicyEntry().setAdvisoryForConsumed(false);
+ }
+
+ public boolean isAdvisoryForDiscardingMessagesEnabled() {
+ return getDefaultPolicyEntry().isAdvisoryForDiscardingMessages();
+ }
+
+ public void enableAdvisoryForDiscardingMessages() {
+ getDefaultPolicyEntry().setAdvisoryForDiscardingMessages(true);
+ }
+
+ public void disableAdvisoryForDiscardingMessages() {
+ getDefaultPolicyEntry().setAdvisoryForDiscardingMessages(false);
+ }
+
+ public boolean isAdvisoryForFastProducersEnabled() {
+ return getDefaultPolicyEntry().isAdvisoryForFastProducers();
+ }
+
+ public void enableAdvisoryForFastProducers() {
+ getDefaultPolicyEntry().setAdvisoryForFastProducers(true);
+ }
+
+ public void disableAdvisoryForFastProducers() {
+ getDefaultPolicyEntry().setAdvisoryForFastProducers(false);
+ }
+
+ public boolean isAdvisoryForSlowConsumersEnabled() {
+ return getDefaultPolicyEntry().isAdvisoryForSlowConsumers();
+ }
+
+ public void enableAdvisoryForSlowConsumers() {
+ getDefaultPolicyEntry().setAdvisoryForSlowConsumers(true);
+ }
+
+ public void disableAdvisoryForSlowConsumers() {
+ getDefaultPolicyEntry().setAdvisoryForSlowConsumers(false);
+ }
+
+ /**
+ * Get the number of messages in a specific JMS Destination.
+ * <p/>
+ * The full name of the JMS destination including the prefix should be provided - i.e. queue:myQueue
+ * or topic:myTopic. If the destination type prefix is not included in the destination name, a prefix
+ * of "queue:" is assumed.
+ *
+ * @param fullDestinationName the full name of the JMS Destination
+ * @return the number of messages in the JMS Destination
+ */
+ public int getMessageCount(String fullDestinationName) throws Exception {
+ final int QUEUE_TYPE = 1;
+ final int TOPIC_TYPE = 2;
+
+ if (null == brokerService) {
+ throw new IllegalStateException("BrokerService has not yet been created - was before() called?");
+ }
+
+ int destinationType = QUEUE_TYPE;
+ String destinationName = fullDestinationName;
+
+ if (fullDestinationName.startsWith("queue:")) {
+ destinationName = fullDestinationName.substring(fullDestinationName.indexOf(':') + 1);
+ } else if (fullDestinationName.startsWith("topic:")) {
+ destinationType = TOPIC_TYPE;
+ destinationName = fullDestinationName.substring(fullDestinationName.indexOf(':') + 1);
+ }
+
+ int messageCount = -1;
+ boolean foundDestination = false;
+ for (Destination destination : brokerService.getBroker().getDestinationMap().values()) {
+ String tmpName = destination.getName();
+ if (tmpName.equalsIgnoreCase(destinationName)) {
+ switch (destinationType) {
+ case QUEUE_TYPE:
+ if (destination instanceof Queue) {
+ messageCount = destination.getMessageStore().getMessageCount();
+ foundDestination = true;
+ }
+ break;
+ case TOPIC_TYPE:
+ if (destination instanceof Topic) {
+ messageCount = destination.getMessageStore().getMessageCount();
+ foundDestination = true;
+ }
+ break;
+ default:
+ // Should never see this
+ log.error("Type didn't match: {}", destination.getClass().getName());
+ }
+ }
+ if (foundDestination) {
+ break;
+ }
+ }
+
+ if (!foundDestination) {
+ log.warn("Didn't find destination {} in broker {}", fullDestinationName, getBrokerName());
+ }
+
+ return messageCount;
+ }
+
+ private PolicyEntry getDefaultPolicyEntry() {
+ PolicyMap destinationPolicy = brokerService.getDestinationPolicy();
+ if (null == destinationPolicy) {
+ destinationPolicy = new PolicyMap();
+ brokerService.setDestinationPolicy(destinationPolicy);
+ }
+
+ PolicyEntry defaultEntry = destinationPolicy.getDefaultEntry();
+ if (null == defaultEntry) {
+ defaultEntry = new PolicyEntry();
+ destinationPolicy.setDefaultEntry(defaultEntry);
+ }
+
+ return defaultEntry;
+ }
+}
http://git-wip-us.apache.org/repos/asf/activemq/blob/da3b1380/activemq-tooling/activemq-junit/src/test/java/org/apache/activemq/junit/EmbeddedActiveMQBrokerConfigTest.java
----------------------------------------------------------------------
diff --git a/activemq-tooling/activemq-junit/src/test/java/org/apache/activemq/junit/EmbeddedActiveMQBrokerConfigTest.java b/activemq-tooling/activemq-junit/src/test/java/org/apache/activemq/junit/EmbeddedActiveMQBrokerConfigTest.java
new file mode 100644
index 0000000..6d384f0
--- /dev/null
+++ b/activemq-tooling/activemq-junit/src/test/java/org/apache/activemq/junit/EmbeddedActiveMQBrokerConfigTest.java
@@ -0,0 +1,110 @@
+/*
+ * 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.junit;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+/**
+ * Verify the get/set operations are working properly
+ */
+public class EmbeddedActiveMQBrokerConfigTest {
+
+ // Don't use @Rule in this case - just testing getters/setters
+ EmbeddedActiveMQBroker instance;
+
+ @Before
+ public void setUp() throws Exception {
+ instance = new EmbeddedActiveMQBroker();
+ }
+
+ @Test
+ public void testGetVmURL() throws Exception {
+ assertEquals( "Default VM URL in incorrect", "failover:(vm://embedded-broker?create=false)", instance.getVmURL());
+ }
+
+ @Test
+ public void testGetBrokerName() throws Exception {
+ assertEquals( "Default Broker Name in incorrect", "embedded-broker", instance.getBrokerName());
+ }
+
+ @Test
+ public void testBrokerNameConfig() throws Exception {
+ String dummyName = "test-broker-name";
+
+ instance.setBrokerName( dummyName);
+
+ assertEquals( "Broker Name not set correctly", dummyName, instance.getBrokerName());
+ }
+
+ @Test
+ public void testStatisticsPluginConfig() throws Exception {
+ assertFalse( "Statistics plugin should not be enabled by default", instance.isStatisticsPluginEnabled());
+ instance.enableStatisticsPlugin();
+ assertTrue( "Statistics plugin not enabled", instance.isStatisticsPluginEnabled());
+ instance.disableStatisticsPlugin();
+ assertFalse( "Statistics plugin not disabled", instance.isStatisticsPluginEnabled());
+ }
+
+ @Test
+ public void testAdvisoryForDeliveryConfig() throws Exception {
+ assertFalse( "Advisory messages for delivery should not be enabled by default", instance.isAdvisoryForDeliveryEnabled());
+ instance.enableAdvisoryForDelivery();
+ assertTrue( "Advisory messages for delivery not enabled", instance.isAdvisoryForDeliveryEnabled());
+ instance.disableAdvisoryForDelivery();
+ assertFalse( "Advisory messages for delivery not disabled", instance.isAdvisoryForDeliveryEnabled());
+ }
+
+ @Test
+ public void testAdvisoryForConsumedConfig() throws Exception {
+ assertFalse( "Advisory messages for consumed should not be enabled by default", instance.isAdvisoryForConsumedEnabled());
+ instance.enableAdvisoryForConsumed();
+ assertTrue( "Advisory messages for consumed not enabled", instance.isAdvisoryForConsumedEnabled());
+ instance.disableAdvisoryForConsumed();
+ assertFalse( "Advisory messages for consumed not disabled", instance.isAdvisoryForConsumedEnabled());
+ }
+
+ @Test
+ public void testAdvisoryForDiscardingMessagesConfig() throws Exception {
+ assertFalse( "Advisory messages for discarding messages should not be enabled by default", instance.isAdvisoryForDiscardingMessagesEnabled());
+ instance.enableAdvisoryForDiscardingMessages();
+ assertTrue( "Advisory messages for discarding messages not enabled", instance.isAdvisoryForDiscardingMessagesEnabled());
+ instance.disableAdvisoryForDiscardingMessages();
+ assertFalse( "Advisory messages for discarding messages not disabled", instance.isAdvisoryForDiscardingMessagesEnabled());
+ }
+
+ @Test
+ public void testAdvisoryForFastProducersConfig() throws Exception {
+ assertFalse( "Advisory messages for fast producers should not be enabled by default", instance.isAdvisoryForFastProducersEnabled());
+ instance.enableAdvisoryForFastProducers();
+ assertTrue( "Advisory messages for fast producers not enabled", instance.isAdvisoryForFastProducersEnabled());
+ instance.disableAdvisoryForFastProducers();
+ assertFalse( "Advisory messages for fast producers not disabled", instance.isAdvisoryForFastProducersEnabled());
+ }
+
+ @Test
+ public void testAdvisoryForSlowConsumersConfig() throws Exception {
+ assertFalse( "Advisory messages for slow consumers should not be enabled by default", instance.isAdvisoryForSlowConsumersEnabled());
+ instance.enableAdvisoryForSlowConsumers();
+ assertTrue( "Advisory messages for slow consumers not enabled", instance.isAdvisoryForSlowConsumersEnabled());
+ instance.disableAdvisoryForSlowConsumers();
+ assertFalse( "Advisory messages for slow consumers not disabled", instance.isAdvisoryForSlowConsumersEnabled());
+ }
+
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/activemq/blob/da3b1380/activemq-tooling/activemq-junit/src/test/java/org/apache/activemq/junit/EmbeddedActiveMQBrokerRuleTest.java
----------------------------------------------------------------------
diff --git a/activemq-tooling/activemq-junit/src/test/java/org/apache/activemq/junit/EmbeddedActiveMQBrokerRuleTest.java b/activemq-tooling/activemq-junit/src/test/java/org/apache/activemq/junit/EmbeddedActiveMQBrokerRuleTest.java
new file mode 100644
index 0000000..24a3ecb
--- /dev/null
+++ b/activemq-tooling/activemq-junit/src/test/java/org/apache/activemq/junit/EmbeddedActiveMQBrokerRuleTest.java
@@ -0,0 +1,43 @@
+/*
+ * 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.junit;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import static org.junit.Assert.*;
+
+public class EmbeddedActiveMQBrokerRuleTest {
+ @Rule
+ public EmbeddedActiveMQBroker broker = new EmbeddedActiveMQBroker();
+
+ @Before
+ public void setUp() throws Exception {
+ assertTrue( "Broker should be started", broker.brokerService.isStarted());
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ assertTrue( "Broker should still be running", broker.brokerService.isStarted());
+ }
+
+ @Test
+ public void testStart() throws Exception {
+
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/activemq/blob/da3b1380/activemq-tooling/activemq-junit/src/test/java/org/apache/activemq/junit/EmbeddedActiveMQBrokerXbeanUriConfigTest.java
----------------------------------------------------------------------
diff --git a/activemq-tooling/activemq-junit/src/test/java/org/apache/activemq/junit/EmbeddedActiveMQBrokerXbeanUriConfigTest.java b/activemq-tooling/activemq-junit/src/test/java/org/apache/activemq/junit/EmbeddedActiveMQBrokerXbeanUriConfigTest.java
new file mode 100644
index 0000000..db4cdd0
--- /dev/null
+++ b/activemq-tooling/activemq-junit/src/test/java/org/apache/activemq/junit/EmbeddedActiveMQBrokerXbeanUriConfigTest.java
@@ -0,0 +1,108 @@
+/*
+ * 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.junit;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+/**
+ * Verify the xbean configuration URI is working properly
+ */
+public class EmbeddedActiveMQBrokerXbeanUriConfigTest {
+
+ @Rule
+ public EmbeddedActiveMQBroker instance = new EmbeddedActiveMQBroker( "xbean:activemq-simple.xml");
+
+ @Test
+ public void testGetVmURL() throws Exception {
+ assertEquals( "Default VM URL in incorrect", "failover:(vm://embedded-broker?create=false)", instance.getVmURL());
+ }
+
+ @Test
+ public void testGetBrokerName() throws Exception {
+ assertEquals( "Default Broker Name in incorrect", "embedded-broker", instance.getBrokerName());
+ }
+
+ @Test
+ public void testBrokerNameConfig() throws Exception {
+ String dummyName = "test-broker-name";
+
+ instance.setBrokerName( dummyName);
+
+ assertEquals( "Broker Name not set correctly", dummyName, instance.getBrokerName());
+ }
+
+ @Test
+ public void testStatisticsPluginConfig() throws Exception {
+ assertFalse( "Statistics plugin should not be enabled by default", instance.isStatisticsPluginEnabled());
+ instance.enableStatisticsPlugin();
+ assertTrue( "Statistics plugin not enabled", instance.isStatisticsPluginEnabled());
+ instance.disableStatisticsPlugin();
+ assertFalse( "Statistics plugin not disabled", instance.isStatisticsPluginEnabled());
+ }
+
+ @Test
+ public void testAdvisoryForDeliveryConfig() throws Exception {
+ assertFalse( "Advisory messages for delivery should not be enabled by default", instance.isAdvisoryForDeliveryEnabled());
+ instance.enableAdvisoryForDelivery();
+ assertTrue( "Advisory messages for delivery not enabled", instance.isAdvisoryForDeliveryEnabled());
+ instance.disableAdvisoryForDelivery();
+ assertFalse( "Advisory messages for delivery not disabled", instance.isAdvisoryForDeliveryEnabled());
+ }
+
+ @Test
+ public void testAdvisoryForConsumedConfig() throws Exception {
+ assertFalse( "Advisory messages for consumed should not be enabled by default", instance.isAdvisoryForConsumedEnabled());
+ instance.enableAdvisoryForConsumed();
+ assertTrue( "Advisory messages for consumed not enabled", instance.isAdvisoryForConsumedEnabled());
+ instance.disableAdvisoryForConsumed();
+ assertFalse( "Advisory messages for consumed not disabled", instance.isAdvisoryForConsumedEnabled());
+ }
+
+ @Test
+ public void testAdvisoryForDiscardingMessagesConfig() throws Exception {
+ assertFalse( "Advisory messages for discarding messages should not be enabled by default", instance.isAdvisoryForDiscardingMessagesEnabled());
+ instance.enableAdvisoryForDiscardingMessages();
+ assertTrue( "Advisory messages for discarding messages not enabled", instance.isAdvisoryForDiscardingMessagesEnabled());
+ instance.disableAdvisoryForDiscardingMessages();
+ assertFalse( "Advisory messages for discarding messages not disabled", instance.isAdvisoryForDiscardingMessagesEnabled());
+ }
+
+ @Test
+ public void testAdvisoryForFastProducersConfig() throws Exception {
+ assertFalse( "Advisory messages for fast producers should not be enabled by default", instance.isAdvisoryForFastProducersEnabled());
+ instance.enableAdvisoryForFastProducers();
+ assertTrue( "Advisory messages for fast producers not enabled", instance.isAdvisoryForFastProducersEnabled());
+ instance.disableAdvisoryForFastProducers();
+ assertFalse( "Advisory messages for fast producers not disabled", instance.isAdvisoryForFastProducersEnabled());
+ }
+
+ @Test
+ public void testAdvisoryForSlowConsumersConfig() throws Exception {
+ assertFalse( "Advisory messages for slow consumers should not be enabled by default", instance.isAdvisoryForSlowConsumersEnabled());
+ instance.enableAdvisoryForSlowConsumers();
+ assertTrue( "Advisory messages for slow consumers not enabled", instance.isAdvisoryForSlowConsumersEnabled());
+ instance.disableAdvisoryForSlowConsumers();
+ assertFalse( "Advisory messages for slow consumers not disabled", instance.isAdvisoryForSlowConsumersEnabled());
+ }
+
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/activemq/blob/da3b1380/activemq-tooling/activemq-junit/src/test/java/org/apache/activemq/junit/MultipleEmbeddedActiveMQBrokerRuleTest.java
----------------------------------------------------------------------
diff --git a/activemq-tooling/activemq-junit/src/test/java/org/apache/activemq/junit/MultipleEmbeddedActiveMQBrokerRuleTest.java b/activemq-tooling/activemq-junit/src/test/java/org/apache/activemq/junit/MultipleEmbeddedActiveMQBrokerRuleTest.java
new file mode 100644
index 0000000..6804bdb
--- /dev/null
+++ b/activemq-tooling/activemq-junit/src/test/java/org/apache/activemq/junit/MultipleEmbeddedActiveMQBrokerRuleTest.java
@@ -0,0 +1,60 @@
+/*
+ * 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.junit;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+public class MultipleEmbeddedActiveMQBrokerRuleTest {
+ final String brokerOneName = "broker-one";
+ final String brokerTwoName = "broker-two";
+
+ @Rule
+ public EmbeddedActiveMQBroker brokerOne = new EmbeddedActiveMQBroker();
+
+ @Rule
+ public EmbeddedActiveMQBroker brokerTwo = new EmbeddedActiveMQBroker();
+
+ public MultipleEmbeddedActiveMQBrokerRuleTest() {
+ // Perform and broker configuation here before JUnit starts the brokers
+ brokerOne.setBrokerName( brokerOneName);
+ brokerTwo.setBrokerName( brokerTwoName);
+ }
+
+ @Before
+ public void setUp() throws Exception {
+ assertTrue( "Broker One should be started", brokerOne.brokerService.isStarted());
+ assertTrue( "Broker Two should be started", brokerTwo.brokerService.isStarted());
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ assertTrue( "Broker One should still be running", brokerOne.brokerService.isStarted());
+ assertTrue( "Broker Two should still be running", brokerTwo.brokerService.isStarted());
+ }
+
+ @Test
+ public void testStart() throws Exception {
+ assertEquals( "Broker One name is incorrect", brokerOneName, brokerOne.getBrokerName());
+ assertEquals( "Broker Two name is incorrect", brokerTwoName, brokerTwo.getBrokerName());
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/activemq/blob/da3b1380/activemq-tooling/activemq-junit/src/test/resources/activemq-simple.xml
----------------------------------------------------------------------
diff --git a/activemq-tooling/activemq-junit/src/test/resources/activemq-simple.xml b/activemq-tooling/activemq-junit/src/test/resources/activemq-simple.xml
new file mode 100644
index 0000000..4c3978f
--- /dev/null
+++ b/activemq-tooling/activemq-junit/src/test/resources/activemq-simple.xml
@@ -0,0 +1,28 @@
+<!--
+ 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.
+-->
+<beans
+ xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
+ http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd">
+
+ <broker xmlns="http://activemq.apache.org/schema/core"
+ brokerName="embedded-broker" persistent="false" useJmx="false" useShutdownHook="false" >
+
+ </broker>
+
+</beans>
http://git-wip-us.apache.org/repos/asf/activemq/blob/da3b1380/activemq-tooling/pom.xml
----------------------------------------------------------------------
diff --git a/activemq-tooling/pom.xml b/activemq-tooling/pom.xml
index 5449df7..6502b84 100644
--- a/activemq-tooling/pom.xml
+++ b/activemq-tooling/pom.xml
@@ -34,5 +34,6 @@
<module>activemq-memtest-maven-plugin</module>
<module>activemq-perf-maven-plugin</module>
<module>activemq-maven-plugin</module>
+ <module>activemq-junit</module>
</modules>
</project>
[2/2] activemq git commit:
https://issues.apache.org/jira/browse/AMQ-6106
Posted by cs...@apache.org.
https://issues.apache.org/jira/browse/AMQ-6106
Merging in new JUnit Rule for ActiveMQ unit testing
Patch applied with thanks to Quinn Stevenson
This closes #163
Project: http://git-wip-us.apache.org/repos/asf/activemq/repo
Commit: http://git-wip-us.apache.org/repos/asf/activemq/commit/8317208a
Tree: http://git-wip-us.apache.org/repos/asf/activemq/tree/8317208a
Diff: http://git-wip-us.apache.org/repos/asf/activemq/diff/8317208a
Branch: refs/heads/master
Commit: 8317208a1b6cbbd8ebda645a801bb309b73e99ad
Parents: 16bc0f0 da3b138
Author: Christopher L. Shannon (cshannon) <ch...@gmail.com>
Authored: Wed Jan 6 15:10:22 2016 +0000
Committer: Christopher L. Shannon (cshannon) <ch...@gmail.com>
Committed: Wed Jan 6 15:10:55 2016 +0000
----------------------------------------------------------------------
activemq-tooling/activemq-junit/pom.xml | 70 ++++
.../activemq/junit/EmbeddedActiveMQBroker.java | 404 +++++++++++++++++++
.../junit/EmbeddedActiveMQBrokerConfigTest.java | 110 +++++
.../junit/EmbeddedActiveMQBrokerRuleTest.java | 43 ++
...mbeddedActiveMQBrokerXbeanUriConfigTest.java | 108 +++++
.../MultipleEmbeddedActiveMQBrokerRuleTest.java | 60 +++
.../src/test/resources/activemq-simple.xml | 28 ++
activemq-tooling/pom.xml | 1 +
8 files changed, 824 insertions(+)
----------------------------------------------------------------------