diff --git a/activemq-stomp/pom.xml b/activemq-stomp/pom.xml
index 51f997c6819..32d7c0392a9 100644
--- a/activemq-stomp/pom.xml
+++ b/activemq-stomp/pom.xml
@@ -28,6 +28,11 @@
activemq-stomp
jar
ActiveMQ :: STOMP Protocol
+
+
+ 3.5.3
+
+
The ActiveMQ STOMP Protocol Implementation
@@ -125,23 +130,72 @@
+ org.apache.maven.plugins
maven-surefire-plugin
+ ${surefire.version}
- 1
- false
${surefire.argLine}
alphabetical
+ plain
false
-
- target
-
+ org.apache.activemq.transport.stomp.ParallelTest
+
+ ${project.build.directory}/
+
+
+ true
+
+
+ true
+ true
+ true
+ true
+ true
+ true
+
**/*Test.*
- **/StompNIOSSLLoadTest.java
+ **/*LoadTest.java
+
+
+ parallel
+ test
+
+ test
+
+
+
+
+ org.apache.activemq.transport.stomp.ParallelTest
+ 2C
+ false
+ 600
+ false
+
+ ${project.build.directory}/parallel-tests-${surefire.forkNumber}/
+
+ 30000
+
+
+
+
+
+
+ org.apache.maven.surefire
+ surefire-junit47
+ ${surefire.version}
+
+
+ me.fabriciorby
+ maven-surefire-junit5-tree-reporter
+ 1.5.1
+
+
diff --git a/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/ConnectTest.java b/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/ConnectTest.java
index ea65b60b13e..1e5441b54d8 100644
--- a/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/ConnectTest.java
+++ b/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/ConnectTest.java
@@ -34,10 +34,12 @@
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
+import org.junit.experimental.categories.Category;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
// https://issues.apache.org/jira/browse/AMQ-3393
+@Category(ParallelTest.class)
public class ConnectTest {
private static final Logger LOG = LoggerFactory.getLogger(ConnectTest.class);
diff --git a/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/LegacyFrameTranslatorTest.java b/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/LegacyFrameTranslatorTest.java
index bdcfceb7fb5..b3db398a48b 100644
--- a/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/LegacyFrameTranslatorTest.java
+++ b/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/LegacyFrameTranslatorTest.java
@@ -26,6 +26,7 @@
import org.apache.activemq.command.ActiveMQDestination;
import org.junit.Before;
import org.junit.Test;
+import org.junit.experimental.categories.Category;
import org.mockito.Mockito;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
@@ -33,6 +34,7 @@
/**
* Tests for conversion capabilities of LegacyFrameTranslator
*/
+@Category(ParallelTest.class)
public class LegacyFrameTranslatorTest {
private ProtocolConverter converter;
diff --git a/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/ParallelTest.java b/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/ParallelTest.java
new file mode 100644
index 00000000000..9be27a6df1d
--- /dev/null
+++ b/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/ParallelTest.java
@@ -0,0 +1,27 @@
+/**
+ * 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.transport.stomp;
+
+
+/**
+ * Marker interface used with {@code @Category(ParallelTest.class)} to opt a
+ * test class or method into the {@code all-parallel} Maven profile. Only tests
+ * explicitly tagged with this category execute when the profile is enabled,
+ * which allows a gradual migration toward full parallelism.
+ */
+public interface ParallelTest {
+}
diff --git a/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/Stomp11Test.java b/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/Stomp11Test.java
index 25ee20e109a..a9e75f3e129 100644
--- a/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/Stomp11Test.java
+++ b/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/Stomp11Test.java
@@ -40,6 +40,9 @@
import static org.junit.Assert.*;
+import org.junit.experimental.categories.Category;
+
+@Category(ParallelTest.class)
public class Stomp11Test extends StompTestSupport {
private static final Logger LOG = LoggerFactory.getLogger(Stomp11Test.class);
diff --git a/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/Stomp12Test.java b/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/Stomp12Test.java
index b7974724978..504a20ff970 100644
--- a/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/Stomp12Test.java
+++ b/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/Stomp12Test.java
@@ -34,6 +34,9 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.junit.experimental.categories.Category;
+
+@Category(ParallelTest.class)
public class Stomp12Test extends StompTestSupport {
private static final Logger LOG = LoggerFactory.getLogger(Stomp12Test.class);
diff --git a/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/StompAdvisoryTest.java b/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/StompAdvisoryTest.java
index 434744a93fd..ad89847e62b 100644
--- a/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/StompAdvisoryTest.java
+++ b/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/StompAdvisoryTest.java
@@ -45,6 +45,9 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.junit.experimental.categories.Category;
+
+@Category(ParallelTest.class)
public class StompAdvisoryTest extends StompTestSupport {
static final String STATS_DESTINATION_PREFIX = "ActiveMQ.Statistics.Destination";
diff --git a/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/StompCompositeDestinationTest.java b/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/StompCompositeDestinationTest.java
index 9848f3c316a..d3fced4f9ac 100644
--- a/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/StompCompositeDestinationTest.java
+++ b/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/StompCompositeDestinationTest.java
@@ -39,9 +39,12 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.junit.experimental.categories.Category;
+
/**
* Tests for support of composite destination support over STOMP
*/
+@Category(ParallelTest.class)
public class StompCompositeDestinationTest extends StompTestSupport {
private static final Logger LOG = LoggerFactory.getLogger(StompCompositeDestinationTest.class);
diff --git a/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/StompConnectTimeoutTest.java b/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/StompConnectTimeoutTest.java
index 69fd4deb38e..d88bbafe22c 100644
--- a/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/StompConnectTimeoutTest.java
+++ b/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/StompConnectTimeoutTest.java
@@ -34,10 +34,13 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.junit.experimental.categories.Category;
+
/**
* Test that connection attempts that don't send the connect performative
* get cleaned up by the inactivity monitor.
*/
+@Category(ParallelTest.class)
@RunWith(Parameterized.class)
public class StompConnectTimeoutTest extends StompTestSupport {
diff --git a/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/StompEmptyDestinationTest.java b/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/StompEmptyDestinationTest.java
index 5797135ad16..8b1de7299c2 100644
--- a/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/StompEmptyDestinationTest.java
+++ b/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/StompEmptyDestinationTest.java
@@ -16,12 +16,14 @@
*/
package org.apache.activemq.transport.stomp;
import org.junit.Test;
+import org.junit.experimental.categories.Category;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
-public class StompEmptyDestinationTest extends StompTestSupport{
+@Category(ParallelTest.class)
+public class StompEmptyDestinationTest extends StompTestSupport{
private static final Logger LOG = LoggerFactory.getLogger(StompEmptyDestinationTest.class);
@Test(timeout = 60000)
diff --git a/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/StompFrameTest.java b/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/StompFrameTest.java
index 5bade72ba92..44bb27ebecb 100644
--- a/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/StompFrameTest.java
+++ b/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/StompFrameTest.java
@@ -22,7 +22,9 @@
import java.util.HashMap;
import org.junit.Test;
+import org.junit.experimental.categories.Category;
+@Category(ParallelTest.class)
public class StompFrameTest {
StompFrame underTest = new StompFrame();
diff --git a/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/StompInactivityMonitorTest.java b/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/StompInactivityMonitorTest.java
index 20f4ed9c009..66a4aad83b2 100644
--- a/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/StompInactivityMonitorTest.java
+++ b/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/StompInactivityMonitorTest.java
@@ -33,9 +33,12 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.junit.experimental.categories.Category;
+
/**
* Test that the inactivity monitor works as expected.
*/
+@Category(ParallelTest.class)
@RunWith(Parameterized.class)
public class StompInactivityMonitorTest extends StompTestSupport {
diff --git a/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/StompMaxDataSizeTest.java b/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/StompMaxDataSizeTest.java
index ee13da44610..83a4edf6f62 100644
--- a/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/StompMaxDataSizeTest.java
+++ b/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/StompMaxDataSizeTest.java
@@ -29,6 +29,9 @@
import org.junit.Test;
+import org.junit.experimental.categories.Category;
+
+@Category(ParallelTest.class)
public class StompMaxDataSizeTest extends StompTestSupport {
private static final int TEST_MAX_DATA_SIZE = 64 * 1024;
diff --git a/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/StompMaxFrameSizeTest.java b/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/StompMaxFrameSizeTest.java
index 9d4f2e7e931..34e73829494 100644
--- a/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/StompMaxFrameSizeTest.java
+++ b/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/StompMaxFrameSizeTest.java
@@ -34,6 +34,10 @@
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
+import org.junit.experimental.categories.Category;
+
+
+@Category(ParallelTest.class)
@RunWith(Parameterized.class)
public class StompMaxFrameSizeTest extends StompTestSupport {
@@ -273,7 +277,7 @@ protected void doOversizedTestMessage(int port, boolean useSsl, int dataSize) th
stompConnection.sendFrame(frame);
- StompFrame received = stompConnection.receive(5000);
+ StompFrame received = stompConnection.receive(10000);
assertNotNull(received);
assertEquals("ERROR", received.getAction());
assertTrue(received.getBody().contains("maximum frame size"));
diff --git a/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/StompMissingMessageTest.java b/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/StompMissingMessageTest.java
index 2e82eea8f9b..4deac42bf8f 100644
--- a/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/StompMissingMessageTest.java
+++ b/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/StompMissingMessageTest.java
@@ -26,6 +26,9 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.junit.experimental.categories.Category;
+
+@Category(ParallelTest.class)
public class StompMissingMessageTest extends StompTestSupport {
private static final Logger LOG = LoggerFactory.getLogger(StompMissingMessageTest.class);
diff --git a/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/StompNIOSSLLargeMessageTest.java b/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/StompNIOSSLLargeMessageTest.java
index 21e181a4f05..117420cafcf 100644
--- a/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/StompNIOSSLLargeMessageTest.java
+++ b/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/StompNIOSSLLargeMessageTest.java
@@ -35,12 +35,15 @@
import org.apache.activemq.util.DefaultTestAppender;
+import org.junit.experimental.categories.Category;
+
/**
* Testcase for AMQ-6526.
* Checks if the \ in the Stomp ProtocolException is replaced
* with the proper Stomp operation.
*
*/
+@Category(ParallelTest.class)
public class StompNIOSSLLargeMessageTest extends StompTestSupport {
protected static final Logger LOG = LoggerFactory.getLogger(StompNIOSSLLargeMessageTest.class);
diff --git a/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/StompPrefetchTest.java b/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/StompPrefetchTest.java
index eefc1063e4f..1a224eaee03 100644
--- a/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/StompPrefetchTest.java
+++ b/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/StompPrefetchTest.java
@@ -35,6 +35,9 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.junit.experimental.categories.Category;
+
+@Category(ParallelTest.class)
public class StompPrefetchTest extends StompTestSupport {
private static final Logger LOG = LoggerFactory.getLogger(StompPrefetchTest.class);
diff --git a/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/StompSubscriptionRemoveTest.java b/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/StompSubscriptionRemoveTest.java
index 1f69921a721..7c875681c47 100644
--- a/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/StompSubscriptionRemoveTest.java
+++ b/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/StompSubscriptionRemoveTest.java
@@ -34,6 +34,9 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.junit.experimental.categories.Category;
+
+@Category(ParallelTest.class)
public class StompSubscriptionRemoveTest extends StompTestSupport {
private static final Logger LOG = LoggerFactory.getLogger(StompSubscriptionRemoveTest.class);
diff --git a/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/StompTelnetTest.java b/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/StompTelnetTest.java
index 487882ad197..ad3e192277d 100644
--- a/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/StompTelnetTest.java
+++ b/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/StompTelnetTest.java
@@ -27,6 +27,9 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.junit.experimental.categories.Category;
+
+@Category(ParallelTest.class)
public class StompTelnetTest extends StompTestSupport {
private static final Logger LOG = LoggerFactory.getLogger(StompTelnetTest.class);
diff --git a/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/StompTest.java b/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/StompTest.java
index 9c82261e327..50349ec6cae 100644
--- a/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/StompTest.java
+++ b/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/StompTest.java
@@ -72,6 +72,9 @@
import com.thoughtworks.xstream.io.xml.XppReader;
import com.thoughtworks.xstream.io.xml.xppdom.XppFactory;
+import org.junit.experimental.categories.Category;
+
+@Category(ParallelTest.class)
public class StompTest extends StompTestSupport {
private static final Logger LOG = LoggerFactory.getLogger(StompTest.class);
diff --git a/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/StompTimeStampingBrokerPluginTest.java b/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/StompTimeStampingBrokerPluginTest.java
index 819fc453f85..b786b40b843 100644
--- a/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/StompTimeStampingBrokerPluginTest.java
+++ b/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/StompTimeStampingBrokerPluginTest.java
@@ -39,6 +39,9 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.junit.experimental.categories.Category;
+
+@Category(ParallelTest.class)
public class StompTimeStampingBrokerPluginTest extends StompTestSupport {
private static final Logger LOG = LoggerFactory.getLogger(StompTimeStampingBrokerPluginTest.class);
diff --git a/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/StompVirtualTopicTest.java b/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/StompVirtualTopicTest.java
index 19a9f975ec8..4daaaea050d 100644
--- a/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/StompVirtualTopicTest.java
+++ b/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/StompVirtualTopicTest.java
@@ -38,6 +38,9 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.junit.experimental.categories.Category;
+
+@Category(ParallelTest.class)
public class StompVirtualTopicTest extends StompTestSupport {
private static final Logger LOG = LoggerFactory.getLogger(StompVirtualTopicTest.class);
diff --git a/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/auto/AutoStompConnectTimeoutTest.java b/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/auto/AutoStompConnectTimeoutTest.java
index e7b372bc753..43914ee73e0 100644
--- a/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/auto/AutoStompConnectTimeoutTest.java
+++ b/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/auto/AutoStompConnectTimeoutTest.java
@@ -27,6 +27,7 @@
import javax.net.ssl.SSLSocketFactory;
import org.apache.activemq.transport.auto.AutoTcpTransportServer;
+import org.apache.activemq.transport.stomp.ParallelTest;
import org.apache.activemq.transport.stomp.StompTestSupport;
import org.apache.activemq.util.Wait;
import org.junit.Test;
@@ -36,10 +37,12 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.junit.experimental.categories.Category;
/**
* Test that connection attempts that don't send the connect get cleaned by
* by the protocolDetectionTimeOut property
*/
+@Category(ParallelTest.class)
@RunWith(Parameterized.class)
public class AutoStompConnectTimeoutTest extends StompTestSupport {
diff --git a/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/auto/StompAutoSslAuthTest.java b/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/auto/StompAutoSslAuthTest.java
index 7b65596fd33..82d089667d8 100644
--- a/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/auto/StompAutoSslAuthTest.java
+++ b/activemq-stomp/src/test/java/org/apache/activemq/transport/stomp/auto/StompAutoSslAuthTest.java
@@ -34,6 +34,7 @@
import org.apache.activemq.broker.BrokerPlugin;
import org.apache.activemq.broker.ConnectionContext;
import org.apache.activemq.command.ConnectionInfo;
+import org.apache.activemq.transport.stomp.ParallelTest;
import org.apache.activemq.transport.stomp.Stomp;
import org.apache.activemq.transport.stomp.StompTestSupport;
import org.junit.Test;
@@ -41,6 +42,9 @@
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
+import org.junit.experimental.categories.Category;
+
+@Category(ParallelTest.class)
@RunWith(Parameterized.class)
public class StompAutoSslAuthTest extends StompTestSupport {