This is an automated email from the ASF dual-hosted git repository.

jlmonteiro pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/activemq.git


The following commit(s) were added to refs/heads/main by this push:
     new e4d0149de4 [AMQ-8525] run mqtt parallel-friendly tests into separate 
forks in parallel (#1541)
e4d0149de4 is described below

commit e4d0149de4bdaa28055d7c41734b2b2caa107cbe
Author: Jean-Louis Monteiro <[email protected]>
AuthorDate: Tue Mar 3 10:01:42 2026 +0100

    [AMQ-8525] run mqtt parallel-friendly tests into separate forks in parallel 
(#1541)
---
 Jenkinsfile                                        |  1 +
 activemq-mqtt/pom.xml                              | 56 ++++++++++++++++++----
 .../activemq/transport/mqtt/MQTTAuthTest.java      |  3 +-
 .../activemq/transport/mqtt/MQTTCodecTest.java     |  2 +
 .../mqtt/MQTTCompositeQueueRetainedTest.java       |  3 ++
 .../activemq/transport/mqtt/MQTTConnectTest.java   |  2 +
 .../transport/mqtt/MQTTMaxFrameSizeTest.java       |  2 +
 .../activemq/transport/mqtt/MQTTNIOSSLTest.java    |  3 ++
 .../activemq/transport/mqtt/MQTTNIOTest.java       |  3 ++
 .../mqtt/MQTTOverlapedSubscriptionsTest.java       |  2 +
 .../activemq/transport/mqtt/MQTTPingReqTest.java   |  2 +
 .../transport/mqtt/MQTTProtocolConverterTest.java  |  2 +
 .../activemq/transport/mqtt/MQTTSSLTest.java       |  3 ++
 .../mqtt/MQTTSubscriptionRecoveryTest.java         |  2 +
 .../apache/activemq/transport/mqtt/MQTTTest.java   |  4 ++
 .../activemq/transport/mqtt/MQTTTestSupport.java   |  5 +-
 .../mqtt/MQTTVirtualTopicSubscriptionsTest.java    |  2 +
 .../activemq/transport/mqtt/MQTTWillTest.java      |  2 +
 .../activemq/transport/mqtt/PahoMQTTNIOTest.java   |  3 ++
 .../activemq/transport/mqtt/PahoMQTTTest.java      |  3 ++
 .../transport/mqtt/PahoVirtualTopicMQTTTest.java   |  2 +
 .../{MQTTNIOSSLTest.java => ParallelTest.java}     | 18 +++----
 .../transport/mqtt/auto/MQTTAutoNioSslTest.java    |  3 ++
 .../transport/mqtt/auto/MQTTAutoNioTest.java       |  3 ++
 .../transport/mqtt/auto/MQTTAutoSslAuthTest.java   |  4 ++
 .../transport/mqtt/auto/MQTTAutoSslTest.java       |  3 ++
 .../activemq/transport/mqtt/auto/MQTTAutoTest.java |  3 ++
 pom.xml                                            | 14 ++++++
 28 files changed, 130 insertions(+), 25 deletions(-)

diff --git a/Jenkinsfile b/Jenkinsfile
index 100a3b8c73..9ba319f38a 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -130,6 +130,7 @@ pipeline {
             }
             when { expression { return params.testsEnabled } }
             steps {
+                echo 'Running tests'
                 sh 'java -version'
                 sh 'mvn -version'
 
diff --git a/activemq-mqtt/pom.xml b/activemq-mqtt/pom.xml
index 4a40d05a33..d3ef536fc4 100644
--- a/activemq-mqtt/pom.xml
+++ b/activemq-mqtt/pom.xml
@@ -28,6 +28,7 @@
   <artifactId>activemq-mqtt</artifactId>
   <packaging>jar</packaging>
   <name>ActiveMQ :: MQTT Protocol</name>
+
   <description>The ActiveMQ MQTT Protocol Implementation</description>
 
   <dependencies>
@@ -215,17 +216,54 @@
           <forkCount>1</forkCount>
           <argLine>-javaagent:${org.mockito:mockito-core:jar}</argLine>
           <runOrder>alphabetical</runOrder>
-           <systemPropertyValues>
-              
<org.apache.activemq.default.directory.prefix>target</org.apache.activemq.default.directory.prefix>
-           </systemPropertyValues>
-           <!-- includes>
-             <include>**/*Test.*</include>
-           </includes -->
-           <excludes>
-             <exclude>**/PahoMQTNioTTest.java</exclude>
-           </excludes>
+          <reportFormat>plain</reportFormat>
+          
<excludedGroups>org.apache.activemq.transport.mqtt.ParallelTest</excludedGroups>
+          <systemPropertyVariables>
+            <java.net.preferIPv4Stack>true</java.net.preferIPv4Stack>
+            
<org.apache.activemq.AutoFailTestSupport.disableSystemExit>true</org.apache.activemq.AutoFailTestSupport.disableSystemExit>
+            
<org.apache.activemq.broker.jmx.createConnector>false</org.apache.activemq.broker.jmx.createConnector>
+            
<org.apache.activemq.default.directory.prefix>${project.build.directory}/</org.apache.activemq.default.directory.prefix>
+          </systemPropertyVariables>
+          <consoleOutputReporter>
+            <disable>true</disable>
+          </consoleOutputReporter>
+          <statelessTestsetInfoReporter
+            
implementation="org.apache.maven.plugin.surefire.extensions.junit5.JUnit5StatelessTestsetInfoTreeReporter">
+            <printStacktraceOnError>true</printStacktraceOnError>
+            <printStacktraceOnFailure>true</printStacktraceOnFailure>
+            <printStdoutOnError>true</printStdoutOnError>
+            <printStdoutOnFailure>true</printStdoutOnFailure>
+            <printStderrOnError>true</printStderrOnError>
+            <printStderrOnFailure>true</printStderrOnFailure>
+          </statelessTestsetInfoReporter>
+          <excludes>
+            <exclude>**/PahoMQTNioTTest.java</exclude>
+          </excludes>
         </configuration>
+        <executions>
+          <execution>
+            <id>parallel</id>
+            <phase>test</phase>
+            <goals>
+              <goal>test</goal>
+            </goals>
+            <configuration>
+              <!-- drop the default excludedGroups -->
+              <excludedGroups combine.self="override"/>
+              <groups>org.apache.activemq.transport.mqtt.ParallelTest</groups>
+              <forkCount>2C</forkCount>
+              <reuseForks>false</reuseForks>
+              
<forkedProcessTimeoutInSeconds>600</forkedProcessTimeoutInSeconds>
+              <systemPropertyVariables>
+                
<org.apache.activemq.default.directory.prefix>${project.build.directory}/parallel-tests-${surefire.forkNumber}/</org.apache.activemq.default.directory.prefix>
+                <!-- when running MQTT tests in parallel in the CI (quite 
slow) we need to bump the wireformat negotiation timeout (5s by default) -->
+                
<org.apache.activemq.transport.wireFormatNegotiationTimeout>20000</org.apache.activemq.transport.wireFormatNegotiationTimeout>
+              </systemPropertyVariables>
+            </configuration>
+          </execution>
+        </executions>
       </plugin>
+
       <plugin>
         <groupId>org.apache.activemq.protobuf</groupId>
         <artifactId>activemq-protobuf</artifactId>
diff --git 
a/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/MQTTAuthTest.java
 
b/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/MQTTAuthTest.java
index a7c790e7b3..96acd0e6c4 100644
--- 
a/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/MQTTAuthTest.java
+++ 
b/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/MQTTAuthTest.java
@@ -47,15 +47,16 @@ import org.fusesource.mqtt.client.Tracer;
 import org.fusesource.mqtt.codec.CONNACK;
 import org.fusesource.mqtt.codec.MQTTFrame;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 import org.junit.runners.Parameterized.Parameters;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-
 /**
  * Tests various use cases that require authentication or authorization over 
MQTT
  */
+@Category(ParallelTest.class)
 @RunWith(Parameterized.class)
 public class MQTTAuthTest extends MQTTAuthTestSupport {
 
diff --git 
a/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/MQTTCodecTest.java
 
b/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/MQTTCodecTest.java
index 994bff4e67..62f367aa7b 100644
--- 
a/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/MQTTCodecTest.java
+++ 
b/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/MQTTCodecTest.java
@@ -41,12 +41,14 @@ import org.fusesource.mqtt.codec.SUBSCRIBE;
 import org.fusesource.mqtt.codec.UNSUBSCRIBE;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
  * Tests the functionality of the MQTTCodec class.
  */
+@Category(ParallelTest.class)
 public class MQTTCodecTest {
 
     private static final Logger LOG = 
LoggerFactory.getLogger(MQTTCodecTest.class);
diff --git 
a/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/MQTTCompositeQueueRetainedTest.java
 
b/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/MQTTCompositeQueueRetainedTest.java
index 2f7e7d7853..0bb23dd089 100644
--- 
a/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/MQTTCompositeQueueRetainedTest.java
+++ 
b/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/MQTTCompositeQueueRetainedTest.java
@@ -42,9 +42,12 @@ import org.apache.activemq.command.ActiveMQTopic;
 import org.apache.activemq.util.ByteSequence;
 import org.junit.Test;
 
+import org.junit.experimental.categories.Category;
+
 /**
  *
  */
+@Category(ParallelTest.class)
 public class MQTTCompositeQueueRetainedTest extends MQTTTestSupport {
 
     // configure composite topic
diff --git 
a/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/MQTTConnectTest.java
 
b/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/MQTTConnectTest.java
index 59f122dc9c..f3e89af8dd 100644
--- 
a/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/MQTTConnectTest.java
+++ 
b/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/MQTTConnectTest.java
@@ -35,6 +35,7 @@ import org.fusesource.mqtt.client.MQTT;
 import org.junit.After;
 import org.junit.Ignore;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 import org.junit.runners.Parameterized.Parameters;
@@ -45,6 +46,7 @@ import org.slf4j.LoggerFactory;
  * Test that connection attempts that don't send a CONNECT frame will
  * get cleaned up by the inactivity monitor.
  */
+@Category(ParallelTest.class)
 @RunWith(Parameterized.class)
 public class MQTTConnectTest extends MQTTTestSupport {
 
diff --git 
a/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/MQTTMaxFrameSizeTest.java
 
b/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/MQTTMaxFrameSizeTest.java
index e5282b31ad..73b304d986 100644
--- 
a/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/MQTTMaxFrameSizeTest.java
+++ 
b/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/MQTTMaxFrameSizeTest.java
@@ -31,9 +31,11 @@ import org.junit.runners.Parameterized.Parameters;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.junit.experimental.categories.Category;
 /**
  * Test that the maxFrameSize configuration value is applied across the 
transports.
  */
+@Category(ParallelTest.class)
 @RunWith(Parameterized.class)
 public class MQTTMaxFrameSizeTest extends MQTTTestSupport {
 
diff --git 
a/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/MQTTNIOSSLTest.java
 
b/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/MQTTNIOSSLTest.java
index b6dd9f9158..e634f0da1a 100644
--- 
a/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/MQTTNIOSSLTest.java
+++ 
b/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/MQTTNIOSSLTest.java
@@ -16,9 +16,12 @@
  */
 package org.apache.activemq.transport.mqtt;
 
+import org.junit.experimental.categories.Category;
+
 /**
  * Run the basic tests with the NIO Transport.
  */
+@Category(ParallelTest.class)
 public class MQTTNIOSSLTest extends MQTTTest {
 
     @Override
diff --git 
a/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/MQTTNIOTest.java
 
b/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/MQTTNIOTest.java
index abb5d6c4b8..9bb4b0ee9a 100644
--- 
a/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/MQTTNIOTest.java
+++ 
b/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/MQTTNIOTest.java
@@ -16,9 +16,12 @@
  */
 package org.apache.activemq.transport.mqtt;
 
+import org.junit.experimental.categories.Category;
+
 /**
  * Run the basic tests with the NIO Transport.
  */
+@Category(ParallelTest.class)
 public class MQTTNIOTest extends MQTTTest {
 
     @Override
diff --git 
a/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/MQTTOverlapedSubscriptionsTest.java
 
b/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/MQTTOverlapedSubscriptionsTest.java
index 6d75ab7e06..c550f68392 100644
--- 
a/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/MQTTOverlapedSubscriptionsTest.java
+++ 
b/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/MQTTOverlapedSubscriptionsTest.java
@@ -29,7 +29,9 @@ import org.fusesource.mqtt.client.Topic;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
+@Category(ParallelTest.class)
 public class MQTTOverlapedSubscriptionsTest {
 
     private BrokerService brokerService;
diff --git 
a/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/MQTTPingReqTest.java
 
b/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/MQTTPingReqTest.java
index 7e8f070c6e..fc27ead4ee 100644
--- 
a/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/MQTTPingReqTest.java
+++ 
b/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/MQTTPingReqTest.java
@@ -52,10 +52,12 @@ import org.mockito.Mockito;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.junit.experimental.categories.Category;
 /**
  * Test to show that a PINGRESP will only be sent for a PINGREQ
  * packet after a CONNECT packet has been received.
  */
+@Category(ParallelTest.class)
 @RunWith(Parameterized.class)
 public class MQTTPingReqTest extends MQTTTestSupport {
 
diff --git 
a/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/MQTTProtocolConverterTest.java
 
b/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/MQTTProtocolConverterTest.java
index 3a1fd20d8f..0f1c93d336 100644
--- 
a/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/MQTTProtocolConverterTest.java
+++ 
b/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/MQTTProtocolConverterTest.java
@@ -37,12 +37,14 @@ import org.fusesource.mqtt.codec.CONNECT;
 import org.fusesource.mqtt.codec.MQTTFrame;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 import org.mockito.ArgumentCaptor;
 import org.mockito.Mockito;
 
 /**
  * Tests for various usage scenarios of the protocol converter
  */
+@Category(ParallelTest.class)
 public class MQTTProtocolConverterTest {
 
     private MQTTTransport transport;
diff --git 
a/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/MQTTSSLTest.java
 
b/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/MQTTSSLTest.java
index 609c49d225..8b41e0d289 100644
--- 
a/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/MQTTSSLTest.java
+++ 
b/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/MQTTSSLTest.java
@@ -16,9 +16,12 @@
  */
 package org.apache.activemq.transport.mqtt;
 
+import org.junit.experimental.categories.Category;
+
 /**
  * Run the basic tests with the NIO Transport.
  */
+@Category(ParallelTest.class)
 public class MQTTSSLTest extends MQTTTest {
 
     @Override
diff --git 
a/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/MQTTSubscriptionRecoveryTest.java
 
b/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/MQTTSubscriptionRecoveryTest.java
index 0b7f958179..3696c39969 100644
--- 
a/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/MQTTSubscriptionRecoveryTest.java
+++ 
b/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/MQTTSubscriptionRecoveryTest.java
@@ -34,9 +34,11 @@ import org.junit.runners.Parameterized.Parameters;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.junit.experimental.categories.Category;
 /**
  * Test that all previous QoS 2 subscriptions are recovered on Broker restart.
  */
+@Category(ParallelTest.class)
 @RunWith(Parameterized.class)
 public class MQTTSubscriptionRecoveryTest extends MQTTTestSupport {
 
diff --git 
a/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/MQTTTest.java 
b/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/MQTTTest.java
index b067f4a382..1f95b03e8d 100644
--- 
a/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/MQTTTest.java
+++ 
b/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/MQTTTest.java
@@ -66,9 +66,13 @@ import org.fusesource.mqtt.client.Tracer;
 import org.fusesource.mqtt.codec.MQTTFrame;
 import org.fusesource.mqtt.codec.PUBLISH;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+@Category(ParallelTest.class)
 public class MQTTTest extends MQTTTestSupport {
 
     private static final Logger LOG = LoggerFactory.getLogger(MQTTTest.class);
diff --git 
a/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/MQTTTestSupport.java
 
b/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/MQTTTestSupport.java
index 881ad63424..4c23cee7ee 100644
--- 
a/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/MQTTTestSupport.java
+++ 
b/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/MQTTTestSupport.java
@@ -39,6 +39,7 @@ import org.apache.activemq.broker.jmx.QueueViewMBean;
 import org.apache.activemq.broker.jmx.TopicViewMBean;
 import org.apache.activemq.store.kahadb.KahaDBStore;
 import org.apache.activemq.transport.mqtt.util.ResourceLoadingSslContext;
+import org.apache.activemq.util.IOHelper;
 import org.fusesource.mqtt.client.MQTT;
 import org.fusesource.mqtt.client.Tracer;
 import org.fusesource.mqtt.codec.MQTTFrame;
@@ -53,8 +54,6 @@ public class MQTTTestSupport {
 
     private static final Logger LOG = 
LoggerFactory.getLogger(MQTTTestSupport.class);
 
-    public static final String KAHADB_DIRECTORY = "target/activemq-data/";
-
     protected BrokerService brokerService;
     protected int port;
     protected String jmsUri = "vm://localhost";
@@ -143,7 +142,7 @@ public class MQTTTestSupport {
         brokerService.setPersistent(isPersistent());
         if (isPersistent()) {
             KahaDBStore kaha = new KahaDBStore();
-            kaha.setDirectory(new File(KAHADB_DIRECTORY + getTestName()));
+            kaha.setDirectory(new File(IOHelper.getDefaultDataDirectory() + 
"/" + getTestName()));
             brokerService.setPersistenceAdapter(kaha);
         }
         brokerService.setAdvisorySupport(advisorySupport);
diff --git 
a/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/MQTTVirtualTopicSubscriptionsTest.java
 
b/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/MQTTVirtualTopicSubscriptionsTest.java
index d84ce894c1..c7d601bb10 100644
--- 
a/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/MQTTVirtualTopicSubscriptionsTest.java
+++ 
b/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/MQTTVirtualTopicSubscriptionsTest.java
@@ -42,6 +42,7 @@ import org.fusesource.mqtt.client.QoS;
 import org.fusesource.mqtt.client.Topic;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -55,6 +56,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
 /**
  * Run the basic tests with the NIO Transport.
  */
+@Category(ParallelTest.class)
 public class MQTTVirtualTopicSubscriptionsTest extends MQTTTest {
     private static final Logger LOG = 
LoggerFactory.getLogger(MQTTVirtualTopicSubscriptionsTest.class);
 
diff --git 
a/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/MQTTWillTest.java
 
b/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/MQTTWillTest.java
index 0c81c5a47e..48f955b280 100644
--- 
a/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/MQTTWillTest.java
+++ 
b/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/MQTTWillTest.java
@@ -18,12 +18,14 @@ package org.apache.activemq.transport.mqtt;
 
 import org.fusesource.mqtt.client.*;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import java.util.concurrent.TimeUnit;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 
+@Category(ParallelTest.class)
 public class MQTTWillTest extends MQTTTestSupport {
 
     @Test(timeout = 60 * 1000)
diff --git 
a/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/PahoMQTTNIOTest.java
 
b/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/PahoMQTTNIOTest.java
index 88c8780df8..b5102bd523 100644
--- 
a/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/PahoMQTTNIOTest.java
+++ 
b/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/PahoMQTTNIOTest.java
@@ -16,9 +16,12 @@
  */
 package org.apache.activemq.transport.mqtt;
 
+import org.junit.experimental.categories.Category;
+
 /**
  * Test the NIO transport with this Test group
  */
+@Category(ParallelTest.class)
 public class PahoMQTTNIOTest extends PahoMQTTTest {
 
     @Override
diff --git 
a/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/PahoMQTTTest.java
 
b/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/PahoMQTTTest.java
index 362ded3dcc..1c010d745d 100644
--- 
a/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/PahoMQTTTest.java
+++ 
b/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/PahoMQTTTest.java
@@ -47,6 +47,9 @@ import org.junit.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.junit.experimental.categories.Category;
+
+@Category(ParallelTest.class)
 public class PahoMQTTTest extends MQTTTestSupport {
 
     private static final Logger LOG = 
LoggerFactory.getLogger(PahoMQTTTest.class);
diff --git 
a/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/PahoVirtualTopicMQTTTest.java
 
b/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/PahoVirtualTopicMQTTTest.java
index be9e8b3361..1c3b527bc0 100644
--- 
a/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/PahoVirtualTopicMQTTTest.java
+++ 
b/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/PahoVirtualTopicMQTTTest.java
@@ -22,12 +22,14 @@ import org.eclipse.paho.client.mqttv3.MqttClient;
 import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import jakarta.jms.MessageConsumer;
 import jakarta.jms.Session;
 
 import static org.junit.Assert.assertEquals;
 
+@Category(ParallelTest.class)
 public class PahoVirtualTopicMQTTTest extends PahoMQTTTest {
 
     @Override
diff --git 
a/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/MQTTNIOSSLTest.java
 
b/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/ParallelTest.java
similarity index 72%
copy from 
activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/MQTTNIOSSLTest.java
copy to 
activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/ParallelTest.java
index b6dd9f9158..dfeb908126 100644
--- 
a/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/MQTTNIOSSLTest.java
+++ 
b/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/ParallelTest.java
@@ -16,18 +16,12 @@
  */
 package org.apache.activemq.transport.mqtt;
 
+
 /**
- * Run the basic tests with the NIO Transport.
+ * 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 class MQTTNIOSSLTest extends MQTTTest {
-
-    @Override
-    public String getProtocolScheme() {
-        return "mqtt+nio+ssl";
-    }
-
-    @Override
-    public boolean isUseSSL() {
-        return true;
-    }
+public interface ParallelTest {
 }
diff --git 
a/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/auto/MQTTAutoNioSslTest.java
 
b/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/auto/MQTTAutoNioSslTest.java
index e777385f1b..2db79bd928 100644
--- 
a/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/auto/MQTTAutoNioSslTest.java
+++ 
b/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/auto/MQTTAutoNioSslTest.java
@@ -17,10 +17,13 @@
 package org.apache.activemq.transport.mqtt.auto;
 
 import org.apache.activemq.transport.mqtt.MQTTTest;
+import org.apache.activemq.transport.mqtt.ParallelTest;
+import org.junit.experimental.categories.Category;
 
 /**
  * Run the basic tests with the NIO Transport.
  */
+@Category(ParallelTest.class)
 public class MQTTAutoNioSslTest extends MQTTTest {
 
     @Override
diff --git 
a/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/auto/MQTTAutoNioTest.java
 
b/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/auto/MQTTAutoNioTest.java
index f7023a3ba0..55fe032f0c 100644
--- 
a/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/auto/MQTTAutoNioTest.java
+++ 
b/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/auto/MQTTAutoNioTest.java
@@ -17,10 +17,13 @@
 package org.apache.activemq.transport.mqtt.auto;
 
 import org.apache.activemq.transport.mqtt.MQTTTest;
+import org.apache.activemq.transport.mqtt.ParallelTest;
+import org.junit.experimental.categories.Category;
 
 /**
  * Run the basic tests with the NIO Transport.
  */
+@Category(ParallelTest.class)
 public class MQTTAutoNioTest extends MQTTTest {
 
     @Override
diff --git 
a/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/auto/MQTTAutoSslAuthTest.java
 
b/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/auto/MQTTAutoSslAuthTest.java
index 4fae9c44c6..d2d731fa9a 100644
--- 
a/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/auto/MQTTAutoSslAuthTest.java
+++ 
b/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/auto/MQTTAutoSslAuthTest.java
@@ -36,6 +36,10 @@ import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 import org.junit.runners.Parameterized.Parameters;
 
+import org.junit.experimental.categories.Category;
+import org.apache.activemq.transport.mqtt.ParallelTest;
+
+@Category(ParallelTest.class)
 @RunWith(Parameterized.class)
 public class MQTTAutoSslAuthTest extends MQTTTestSupport  {
 
diff --git 
a/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/auto/MQTTAutoSslTest.java
 
b/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/auto/MQTTAutoSslTest.java
index e31f49495b..0d490e1f12 100644
--- 
a/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/auto/MQTTAutoSslTest.java
+++ 
b/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/auto/MQTTAutoSslTest.java
@@ -17,10 +17,13 @@
 package org.apache.activemq.transport.mqtt.auto;
 
 import org.apache.activemq.transport.mqtt.MQTTTest;
+import org.apache.activemq.transport.mqtt.ParallelTest;
+import org.junit.experimental.categories.Category;
 
 /**
  * Run the basic tests with the NIO Transport.
  */
+@Category(ParallelTest.class)
 public class MQTTAutoSslTest extends MQTTTest {
 
     @Override
diff --git 
a/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/auto/MQTTAutoTest.java
 
b/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/auto/MQTTAutoTest.java
index 7471f6e38f..dcdf265df4 100644
--- 
a/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/auto/MQTTAutoTest.java
+++ 
b/activemq-mqtt/src/test/java/org/apache/activemq/transport/mqtt/auto/MQTTAutoTest.java
@@ -17,10 +17,13 @@
 package org.apache.activemq.transport.mqtt.auto;
 
 import org.apache.activemq.transport.mqtt.MQTTTest;
+import org.apache.activemq.transport.mqtt.ParallelTest;
+import org.junit.experimental.categories.Category;
 
 /**
  * Run the basic tests with the NIO Transport.
  */
+@Category(ParallelTest.class)
 public class MQTTAutoTest extends MQTTTest {
 
     @Override
diff --git a/pom.xml b/pom.xml
index 58a3aaf78a..aebbf31047 100644
--- a/pom.xml
+++ b/pom.xml
@@ -137,6 +137,7 @@
     <maven-graph-plugin-version>1.45</maven-graph-plugin-version>
     <maven-core-version>3.9.12</maven-core-version>
     <maven-surefire-plugin-version>3.5.3</maven-surefire-plugin-version>
+    
<maven-surefire-junit5-tree-reporter-version>1.5.1</maven-surefire-junit5-tree-reporter-version>
     <!-- OSGi bundles properties -->
     <activemq.osgi.import.pkg>*</activemq.osgi.import.pkg>
     <activemq.osgi.export.pkg>org.apache.activemq*</activemq.osgi.export.pkg>
@@ -974,6 +975,7 @@
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-surefire-plugin</artifactId>
+          <version>${maven-surefire-plugin-version}</version>
           <configuration>
             <redirectTestOutputToFile>true</redirectTestOutputToFile>
             <forkCount>1</forkCount>
@@ -992,6 +994,18 @@
               <exclude>**/load/*</exclude>
             </excludes>
           </configuration>
+          <dependencies>
+            <dependency>
+              <groupId>org.apache.maven.surefire</groupId>
+              <artifactId>surefire-junit47</artifactId>
+              <version>${maven-surefire-plugin-version}</version>
+            </dependency>
+            <dependency>
+              <groupId>me.fabriciorby</groupId>
+              <artifactId>maven-surefire-junit5-tree-reporter</artifactId>
+              <version>${maven-surefire-junit5-tree-reporter-version}</version>
+            </dependency>
+          </dependencies>
         </plugin>
         <plugin>
           <groupId>org.apache.felix</groupId>


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
For further information, visit: https://activemq.apache.org/contact


Reply via email to