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