From 2589eed7329698af6cd89c15b77d72aed86affec Mon Sep 17 00:00:00 2001 From: Jean-Louis Monteiro Date: Thu, 20 Nov 2025 09:44:33 +0100 Subject: [PATCH 1/5] AMQ-8525: amqp module parallelism --- activemq-amqp/pom.xml | 75 +++++++++++++++++++ .../transport/amqp/AmqpAndMqttTest.java | 2 + .../amqp/AmqpAndStompInteropTest.java | 2 + .../transport/amqp/AmqpTestSupport.java | 4 +- .../transport/amqp/AmqpTransformerTest.java | 2 + .../amqp/JMSClientSimpleAuthTest.java | 2 + .../activemq/transport/amqp/ParallelTest.java | 27 +++++++ .../amqp/interop/AmqpAnonymousSenderTest.java | 3 + .../AmqpBrokerReuqestedHearbeatsTest.java | 3 + .../AmqpClientRequestsHeartbeatsTest.java | 3 + .../AmqpConfiguredMaxConnectionsTest.java | 3 + .../amqp/interop/AmqpConnectionsTest.java | 3 + .../AmqpCorrelationIdPreservationTest.java | 3 + .../AmqpCorruptedFrameHandlingTest.java | 3 + .../interop/AmqpDeliveryAnnotationsTest.java | 3 + .../interop/AmqpDescribedTypePayloadTest.java | 3 + .../AmqpDisabledInactivityMonitorTest.java | 3 + .../amqp/interop/AmqpDurableReceiverTest.java | 5 +- .../amqp/interop/AmqpExpiredMessageTest.java | 3 + .../amqp/interop/AmqpFlowControlTest.java | 3 + .../amqp/interop/AmqpMaxFrameSizeTest.java | 3 + .../AmqpMessageIdPreservationTest.java | 3 + .../amqp/interop/AmqpReceiverDrainTest.java | 3 + .../amqp/interop/AmqpReceiverTest.java | 3 + .../amqp/interop/AmqpSaslPlainTest.java | 5 +- .../interop/AmqpScheduledMessageTest.java | 3 + .../interop/AmqpSendReceiveNativeTest.java | 4 + .../amqp/interop/AmqpSendReceiveTest.java | 3 + .../amqp/interop/AmqpSenderTest.java | 5 +- .../amqp/interop/AmqpSessionTest.java | 3 + .../amqp/interop/AmqpSlowReceiverTest.java | 3 + .../AmqpSocketProxyIdleTimeoutTests.java | 3 + .../amqp/interop/AmqpTempDestinationTest.java | 3 + .../amqp/interop/AmqpTransactionTest.java | 3 + ...eToAmqpConcurrentStoreAndDispatchTest.java | 3 + .../amqp/message/AMQPMessageIdHelperTest.java | 4 + .../message/AmqpContentTypeSupportTest.java | 3 + .../amqp/message/AmqpMessageSupportTest.java | 3 + .../JMSMappingInboundTransformerTest.java | 3 + .../JMSMappingOutboundTransformerTest.java | 3 + .../message/MessageTransformationTest.java | 3 + .../amqp/message/UTF8BufferTypeTest.java | 3 + .../amqp/protocol/AmqpFrameParserTest.java | 3 + .../AmqpTransferTagGeneratorTest.java | 3 + .../amqp/protocol/AmqpWireFormatTest.java | 3 + pom.xml | 1 + 46 files changed, 232 insertions(+), 5 deletions(-) create mode 100644 activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/ParallelTest.java diff --git a/activemq-amqp/pom.xml b/activemq-amqp/pom.xml index 9e54c0bb232..cd7141fc181 100644 --- a/activemq-amqp/pom.xml +++ b/activemq-amqp/pom.xml @@ -310,5 +310,80 @@ + + all-parallel + + true + + activemq.tests + parallel + + + + 2C + + + + + maven-surefire-plugin + ${maven-surefire-plugin-version} + + true + + + + org.apache.maven.surefire + surefire-junit47 + ${maven-surefire-plugin-version} + + + + + parallel + test + + test + + + false + ${parallel.tests.fork.count} + false + 600 + balanced + false + org.apache.activemq.transport.amqp.ParallelTest + + true + ${project.build.directory}/parallel-tests-${surefire.forkNumber}/ + true + false + + + + + serial + test + + test + + + false + balanced + false + org.apache.activemq.transport.amqp.ParallelTest + + true + ${project.build.directory}/ + true + false + + + + + + + + + diff --git a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/AmqpAndMqttTest.java b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/AmqpAndMqttTest.java index 6695982c649..37b0fe075ee 100644 --- a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/AmqpAndMqttTest.java +++ b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/AmqpAndMqttTest.java @@ -39,7 +39,9 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; +import org.junit.experimental.categories.Category; +@Category(ParallelTest.class) public class AmqpAndMqttTest { protected BrokerService broker; diff --git a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/AmqpAndStompInteropTest.java b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/AmqpAndStompInteropTest.java index 34a10708254..fe6ff0415fa 100644 --- a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/AmqpAndStompInteropTest.java +++ b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/AmqpAndStompInteropTest.java @@ -40,10 +40,12 @@ import org.junit.Ignore; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; import org.junit.rules.TestName; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +@Category(ParallelTest.class) public class AmqpAndStompInteropTest { private static final Logger LOG = LoggerFactory.getLogger(AmqpAndStompInteropTest.class); diff --git a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/AmqpTestSupport.java b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/AmqpTestSupport.java index 7aab5333833..7baef9d1cd9 100644 --- a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/AmqpTestSupport.java +++ b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/AmqpTestSupport.java @@ -51,6 +51,7 @@ import org.apache.activemq.spring.SpringSslContext; import org.apache.activemq.store.kahadb.KahaDBStore; import org.apache.activemq.transport.amqp.protocol.AmqpConnection; +import org.apache.activemq.util.IOHelper; import org.junit.After; import org.junit.Before; import org.junit.Rule; @@ -61,7 +62,6 @@ public class AmqpTestSupport { public static final String MESSAGE_NUMBER = "MessageNumber"; - public static final String KAHADB_DIRECTORY = "target/activemq-data/"; @Rule public TestName name = new TestName(); @@ -120,7 +120,7 @@ protected void createBroker(boolean deleteAllMessages) throws Exception { brokerService.setDeleteAllMessagesOnStartup(deleteAllMessages); if (isPersistent()) { KahaDBStore kaha = new KahaDBStore(); - kaha.setDirectory(new File(KAHADB_DIRECTORY + getTestName())); + kaha.setDirectory(new File(IOHelper.getDefaultDataDirectory() + getTestName())); brokerService.setPersistenceAdapter(kaha); } brokerService.setSchedulerSupport(isSchedulerEnabled()); diff --git a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/AmqpTransformerTest.java b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/AmqpTransformerTest.java index 929e4bac530..adf23a84778 100644 --- a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/AmqpTransformerTest.java +++ b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/AmqpTransformerTest.java @@ -45,9 +45,11 @@ import org.apache.activemq.transport.amqp.client.AmqpSession; import org.junit.After; import org.junit.Test; +import org.junit.experimental.categories.Category; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +@Category(ParallelTest.class) public class AmqpTransformerTest { private static final Logger LOG = LoggerFactory.getLogger(AmqpTransformerTest.class); diff --git a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/JMSClientSimpleAuthTest.java b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/JMSClientSimpleAuthTest.java index 6ea4b5ea666..cfd3dd2ea10 100644 --- a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/JMSClientSimpleAuthTest.java +++ b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/JMSClientSimpleAuthTest.java @@ -39,10 +39,12 @@ import org.junit.Before; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; import org.junit.rules.TestName; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +@Category(ParallelTest.class) public class JMSClientSimpleAuthTest { @Rule public TestName name = new TestName(); diff --git a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/ParallelTest.java b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/ParallelTest.java new file mode 100644 index 00000000000..99e44c4351f --- /dev/null +++ b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/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.amqp; + + +/** + * 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-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpAnonymousSenderTest.java b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpAnonymousSenderTest.java index 964b4b3cbfd..1465525e616 100644 --- a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpAnonymousSenderTest.java +++ b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpAnonymousSenderTest.java @@ -28,11 +28,14 @@ import org.apache.activemq.transport.amqp.client.AmqpReceiver; import org.apache.activemq.transport.amqp.client.AmqpSender; import org.apache.activemq.transport.amqp.client.AmqpSession; +import org.apache.activemq.transport.amqp.ParallelTest; import org.junit.Test; +import org.junit.experimental.categories.Category; /** * Test for support of Anonymous sender links. */ +@Category(ParallelTest.class) public class AmqpAnonymousSenderTest extends AmqpClientTestSupport { @Test(timeout = 60000) diff --git a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpBrokerReuqestedHearbeatsTest.java b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpBrokerReuqestedHearbeatsTest.java index e794274f329..c24293a039f 100644 --- a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpBrokerReuqestedHearbeatsTest.java +++ b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpBrokerReuqestedHearbeatsTest.java @@ -31,17 +31,20 @@ import org.apache.activemq.transport.amqp.client.AmqpConnection; import org.apache.activemq.transport.amqp.client.AmqpConnectionListener; import org.apache.activemq.transport.amqp.client.AmqpValidator; +import org.apache.activemq.transport.amqp.ParallelTest; import org.apache.activemq.util.Wait; import org.apache.qpid.proton.engine.Connection; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; +import org.junit.experimental.categories.Category; /** * Test handling of heartbeats requested by the broker. */ @RunWith(Parameterized.class) +@Category(ParallelTest.class) public class AmqpBrokerReuqestedHearbeatsTest extends AmqpClientTestSupport { private final int TEST_IDLE_TIMEOUT = 1000; diff --git a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpClientRequestsHeartbeatsTest.java b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpClientRequestsHeartbeatsTest.java index 97b38fb3da4..e88c3581d10 100644 --- a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpClientRequestsHeartbeatsTest.java +++ b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpClientRequestsHeartbeatsTest.java @@ -31,17 +31,20 @@ import org.apache.activemq.transport.amqp.client.AmqpConnection; import org.apache.activemq.transport.amqp.client.AmqpConnectionListener; import org.apache.activemq.transport.amqp.client.AmqpValidator; +import org.apache.activemq.transport.amqp.ParallelTest; import org.apache.activemq.util.Wait; import org.apache.qpid.proton.engine.Connection; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; +import org.junit.experimental.categories.Category; /** * Tests that cover broker behavior when the client requests heartbeats */ @RunWith(Parameterized.class) +@Category(ParallelTest.class) public class AmqpClientRequestsHeartbeatsTest extends AmqpClientTestSupport { private final int TEST_IDLE_TIMEOUT = 1000; diff --git a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpConfiguredMaxConnectionsTest.java b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpConfiguredMaxConnectionsTest.java index 6b97698af6a..0bfadfdb1e4 100644 --- a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpConfiguredMaxConnectionsTest.java +++ b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpConfiguredMaxConnectionsTest.java @@ -28,15 +28,18 @@ import org.apache.activemq.transport.amqp.client.AmqpClient; import org.apache.activemq.transport.amqp.client.AmqpClientTestSupport; import org.apache.activemq.transport.amqp.client.AmqpConnection; +import org.apache.activemq.transport.amqp.ParallelTest; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; +import org.junit.experimental.categories.Category; /** * Test for the transportConnector maximumConnections URI option. */ @RunWith(Parameterized.class) +@Category(ParallelTest.class) public class AmqpConfiguredMaxConnectionsTest extends AmqpClientTestSupport { private static final int MAX_CONNECTIONS = 10; diff --git a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpConnectionsTest.java b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpConnectionsTest.java index 3e24501e1b3..cfeeef04a08 100644 --- a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpConnectionsTest.java +++ b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpConnectionsTest.java @@ -40,6 +40,7 @@ import org.apache.activemq.transport.amqp.client.AmqpSender; import org.apache.activemq.transport.amqp.client.AmqpSession; import org.apache.activemq.transport.amqp.client.AmqpValidator; +import org.apache.activemq.transport.amqp.ParallelTest; import org.apache.qpid.proton.amqp.Symbol; import org.apache.qpid.proton.amqp.transport.AmqpError; import org.apache.qpid.proton.amqp.transport.ErrorCondition; @@ -48,11 +49,13 @@ import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; +import org.junit.experimental.categories.Category; /** * Test broker handling of AMQP connections with various configurations. */ @RunWith(Parameterized.class) +@Category(ParallelTest.class) public class AmqpConnectionsTest extends AmqpClientTestSupport { private static final Symbol QUEUE_PREFIX = Symbol.valueOf("queue-prefix"); diff --git a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpCorrelationIdPreservationTest.java b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpCorrelationIdPreservationTest.java index e5aeb1aa8bd..4a512ddc536 100644 --- a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpCorrelationIdPreservationTest.java +++ b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpCorrelationIdPreservationTest.java @@ -33,12 +33,14 @@ import org.apache.activemq.transport.amqp.client.AmqpReceiver; import org.apache.activemq.transport.amqp.client.AmqpSender; import org.apache.activemq.transport.amqp.client.AmqpSession; +import org.apache.activemq.transport.amqp.ParallelTest; import org.apache.qpid.proton.amqp.Binary; import org.apache.qpid.proton.amqp.UnsignedLong; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; +import org.junit.experimental.categories.Category; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -46,6 +48,7 @@ * Tests that the AMQP CorrelationId value and type are preserved. */ @RunWith(Parameterized.class) +@Category(ParallelTest.class) public class AmqpCorrelationIdPreservationTest extends AmqpClientTestSupport { protected static final Logger LOG = LoggerFactory.getLogger(JMSInteroperabilityTest.class); diff --git a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpCorruptedFrameHandlingTest.java b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpCorruptedFrameHandlingTest.java index d7863617b57..a9b5a0a8f3b 100644 --- a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpCorruptedFrameHandlingTest.java +++ b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpCorruptedFrameHandlingTest.java @@ -24,13 +24,16 @@ import org.apache.activemq.transport.amqp.client.AmqpClient; import org.apache.activemq.transport.amqp.client.AmqpClientTestSupport; import org.apache.activemq.transport.amqp.client.AmqpConnection; +import org.apache.activemq.transport.amqp.ParallelTest; import org.apache.activemq.util.Wait; import org.junit.Test; +import org.junit.experimental.categories.Category; /** * Test that broker closes connection and allows a new one when the transport * receives a bad chunk of data after a successful connect. */ +@Category(ParallelTest.class) public class AmqpCorruptedFrameHandlingTest extends AmqpClientTestSupport { @Override diff --git a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpDeliveryAnnotationsTest.java b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpDeliveryAnnotationsTest.java index a561b6b3f46..22b8e4b51e6 100644 --- a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpDeliveryAnnotationsTest.java +++ b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpDeliveryAnnotationsTest.java @@ -31,15 +31,18 @@ import org.apache.activemq.transport.amqp.client.AmqpReceiver; import org.apache.activemq.transport.amqp.client.AmqpSender; import org.apache.activemq.transport.amqp.client.AmqpSession; +import org.apache.activemq.transport.amqp.ParallelTest; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; +import org.junit.experimental.categories.Category; /** * Test around the handling of Deliver Annotations in messages sent and received. */ @RunWith(Parameterized.class) +@Category(ParallelTest.class) public class AmqpDeliveryAnnotationsTest extends AmqpClientTestSupport { private final String DELIVERY_ANNOTATION_NAME = "TEST-DELIVERY-ANNOTATION"; diff --git a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpDescribedTypePayloadTest.java b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpDescribedTypePayloadTest.java index 9632008bbad..f53c47be4ae 100644 --- a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpDescribedTypePayloadTest.java +++ b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpDescribedTypePayloadTest.java @@ -42,16 +42,19 @@ import org.apache.activemq.transport.amqp.client.AmqpReceiver; import org.apache.activemq.transport.amqp.client.AmqpSender; import org.apache.activemq.transport.amqp.client.AmqpSession; +import org.apache.activemq.transport.amqp.ParallelTest; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; +import org.junit.experimental.categories.Category; /** * Test that the broker can pass through an AMQP message with a described type * in the message body regardless of transformer in use. */ @RunWith(Parameterized.class) +@Category(ParallelTest.class) public class AmqpDescribedTypePayloadTest extends AmqpClientTestSupport { private final String transformer; diff --git a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpDisabledInactivityMonitorTest.java b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpDisabledInactivityMonitorTest.java index 6eae2ad854d..b93680b25e2 100644 --- a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpDisabledInactivityMonitorTest.java +++ b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpDisabledInactivityMonitorTest.java @@ -24,12 +24,15 @@ import org.apache.activemq.transport.amqp.client.AmqpClientTestSupport; import org.apache.activemq.transport.amqp.client.AmqpConnection; import org.apache.activemq.transport.amqp.client.AmqpValidator; +import org.apache.activemq.transport.amqp.ParallelTest; import org.apache.qpid.proton.engine.Connection; import org.junit.Test; +import org.junit.experimental.categories.Category; /** * Test broker behaviors around Idle timeout when the inactivity monitor is disabled. */ +@Category(ParallelTest.class) public class AmqpDisabledInactivityMonitorTest extends AmqpClientTestSupport { private final int TEST_IDLE_TIMEOUT = 3000; diff --git a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpDurableReceiverTest.java b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpDurableReceiverTest.java index c5636db1fe1..99fb06e192e 100644 --- a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpDurableReceiverTest.java +++ b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpDurableReceiverTest.java @@ -32,6 +32,7 @@ import org.apache.activemq.transport.amqp.client.AmqpFrameValidator; import org.apache.activemq.transport.amqp.client.AmqpReceiver; import org.apache.activemq.transport.amqp.client.AmqpSession; +import org.apache.activemq.transport.amqp.ParallelTest; import org.apache.qpid.proton.amqp.Binary; import org.apache.qpid.proton.amqp.DescribedType; import org.apache.qpid.proton.amqp.messaging.Source; @@ -40,10 +41,12 @@ import org.apache.qpid.proton.amqp.transport.Detach; import org.apache.qpid.proton.engine.Receiver; import org.junit.Test; +import org.junit.experimental.categories.Category; /** * Tests for broker side support of the Durable Subscription mapping for JMS. */ +@Category(ParallelTest.class) public class AmqpDurableReceiverTest extends AmqpClientTestSupport { private final String SELECTOR_STRING = "color = red"; @@ -498,4 +501,4 @@ public void testLookupNonExistingSubscription() throws Exception { connection.close(); } -} \ No newline at end of file +} diff --git a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpExpiredMessageTest.java b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpExpiredMessageTest.java index 902ca55f2f4..47ae570e23a 100644 --- a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpExpiredMessageTest.java +++ b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpExpiredMessageTest.java @@ -30,8 +30,11 @@ import org.apache.activemq.transport.amqp.client.AmqpReceiver; import org.apache.activemq.transport.amqp.client.AmqpSender; import org.apache.activemq.transport.amqp.client.AmqpSession; +import org.apache.activemq.transport.amqp.ParallelTest; import org.junit.Test; +import org.junit.experimental.categories.Category; +@Category(ParallelTest.class) public class AmqpExpiredMessageTest extends AmqpClientTestSupport { @Test(timeout = 60000) diff --git a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpFlowControlTest.java b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpFlowControlTest.java index 3cbbd4b1ed8..389db9257fa 100644 --- a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpFlowControlTest.java +++ b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpFlowControlTest.java @@ -35,9 +35,12 @@ import org.apache.activemq.transport.amqp.client.AmqpReceiver; import org.apache.activemq.transport.amqp.client.AmqpSender; import org.apache.activemq.transport.amqp.client.AmqpSession; +import org.apache.activemq.transport.amqp.ParallelTest; import org.apache.activemq.util.Wait; import org.junit.Test; +import org.junit.experimental.categories.Category; +@Category(ParallelTest.class) public class AmqpFlowControlTest extends AmqpClientTestSupport { @Override diff --git a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpMaxFrameSizeTest.java b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpMaxFrameSizeTest.java index 84415d7dc12..af564144cf2 100644 --- a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpMaxFrameSizeTest.java +++ b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpMaxFrameSizeTest.java @@ -32,15 +32,18 @@ import org.apache.activemq.transport.amqp.client.AmqpMessage; import org.apache.activemq.transport.amqp.client.AmqpSender; import org.apache.activemq.transport.amqp.client.AmqpSession; +import org.apache.activemq.transport.amqp.ParallelTest; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; +import org.junit.experimental.categories.Category; /** * Test that the maxFrameSize setting prevents large frames from being processed. */ @RunWith(Parameterized.class) +@Category(ParallelTest.class) public class AmqpMaxFrameSizeTest extends AmqpClientTestSupport { private final int TEST_IDLE_TIMEOUT = 500; diff --git a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpMessageIdPreservationTest.java b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpMessageIdPreservationTest.java index f5789ebb724..d29950f8fdc 100644 --- a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpMessageIdPreservationTest.java +++ b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpMessageIdPreservationTest.java @@ -33,12 +33,14 @@ import org.apache.activemq.transport.amqp.client.AmqpReceiver; import org.apache.activemq.transport.amqp.client.AmqpSender; import org.apache.activemq.transport.amqp.client.AmqpSession; +import org.apache.activemq.transport.amqp.ParallelTest; import org.apache.qpid.proton.amqp.Binary; import org.apache.qpid.proton.amqp.UnsignedLong; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; +import org.junit.experimental.categories.Category; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -46,6 +48,7 @@ * Tests that the AMQP MessageID value and type are preserved. */ @RunWith(Parameterized.class) +@Category(ParallelTest.class) public class AmqpMessageIdPreservationTest extends AmqpClientTestSupport { protected static final Logger LOG = LoggerFactory.getLogger(JMSInteroperabilityTest.class); diff --git a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpReceiverDrainTest.java b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpReceiverDrainTest.java index 993f26b8215..fcbaa8290f7 100644 --- a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpReceiverDrainTest.java +++ b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpReceiverDrainTest.java @@ -31,11 +31,14 @@ import org.apache.activemq.transport.amqp.client.AmqpMessage; import org.apache.activemq.transport.amqp.client.AmqpReceiver; import org.apache.activemq.transport.amqp.client.AmqpSession; +import org.apache.activemq.transport.amqp.ParallelTest; import org.junit.Test; +import org.junit.experimental.categories.Category; /** * Tests various behaviors of broker side drain support. */ +@Category(ParallelTest.class) public class AmqpReceiverDrainTest extends AmqpClientTestSupport { @Test(timeout = 60000) diff --git a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpReceiverTest.java b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpReceiverTest.java index 7bdafb7ff66..095709b3371 100644 --- a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpReceiverTest.java +++ b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpReceiverTest.java @@ -41,6 +41,7 @@ import org.apache.activemq.transport.amqp.client.AmqpSession; import org.apache.activemq.transport.amqp.client.AmqpUnknownFilterType; import org.apache.activemq.transport.amqp.client.AmqpValidator; +import org.apache.activemq.transport.amqp.ParallelTest; import org.apache.activemq.util.Wait; import org.apache.qpid.proton.amqp.DescribedType; import org.apache.qpid.proton.amqp.Symbol; @@ -54,11 +55,13 @@ import org.apache.qpid.proton.message.Message; import org.junit.Test; import org.junit.runner.RunWith; +import org.junit.experimental.categories.Category; /** * Test various behaviors of AMQP receivers with the broker. */ @RunWith(ActiveMQTestRunner.class) +@Category(ParallelTest.class) public class AmqpReceiverTest extends AmqpClientTestSupport { @Override diff --git a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpSaslPlainTest.java b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpSaslPlainTest.java index 0f01c669e06..9310590109f 100644 --- a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpSaslPlainTest.java +++ b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpSaslPlainTest.java @@ -33,11 +33,14 @@ import org.apache.activemq.transport.amqp.client.AmqpSender; import org.apache.activemq.transport.amqp.client.AmqpSession; import org.apache.activemq.transport.amqp.client.sasl.PlainMechanism; +import org.apache.activemq.transport.amqp.ParallelTest; import org.junit.Test; +import org.junit.experimental.categories.Category; /** * Test broker behaviour when creating AMQP connections with SASL PLAIN mechanism. */ +@Category(ParallelTest.class) public class AmqpSaslPlainTest extends AmqpClientTestSupport { private static final String ADMIN = "admin"; @@ -144,4 +147,4 @@ private void doFailedConnectionTestImpl(AmqpClient client) throws Exception { assertTrue("Expected security exception cause", cause instanceof SecurityException); } } -} \ No newline at end of file +} diff --git a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpScheduledMessageTest.java b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpScheduledMessageTest.java index 21c0d43c7a5..93a782792b4 100644 --- a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpScheduledMessageTest.java +++ b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpScheduledMessageTest.java @@ -41,12 +41,15 @@ import org.apache.activemq.transport.amqp.client.AmqpReceiver; import org.apache.activemq.transport.amqp.client.AmqpSender; import org.apache.activemq.transport.amqp.client.AmqpSession; +import org.apache.activemq.transport.amqp.ParallelTest; import org.apache.activemq.util.Wait; import org.junit.Test; +import org.junit.experimental.categories.Category; /** * Test for scheduled message support using AMQP message annotations. */ +@Category(ParallelTest.class) public class AmqpScheduledMessageTest extends AmqpClientTestSupport { @Override diff --git a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpSendReceiveNativeTest.java b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpSendReceiveNativeTest.java index db75d1086e6..c4275259385 100644 --- a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpSendReceiveNativeTest.java +++ b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpSendReceiveNativeTest.java @@ -16,6 +16,10 @@ */ package org.apache.activemq.transport.amqp.interop; +import org.apache.activemq.transport.amqp.ParallelTest; +import org.junit.experimental.categories.Category; + +@Category(ParallelTest.class) public class AmqpSendReceiveNativeTest extends AmqpSendReceiveTest { @Override diff --git a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpSendReceiveTest.java b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpSendReceiveTest.java index 9b0a985abcf..dcf6fc3d261 100644 --- a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpSendReceiveTest.java +++ b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpSendReceiveTest.java @@ -48,6 +48,7 @@ import org.apache.activemq.transport.amqp.client.AmqpReceiver; import org.apache.activemq.transport.amqp.client.AmqpSender; import org.apache.activemq.transport.amqp.client.AmqpSession; +import org.apache.activemq.transport.amqp.ParallelTest; import org.apache.activemq.util.Wait; import org.apache.qpid.proton.amqp.Symbol; import org.apache.qpid.proton.amqp.UnsignedByte; @@ -58,6 +59,7 @@ import org.apache.qpid.proton.message.impl.MessageImpl; import org.junit.Test; import org.junit.runner.RunWith; +import org.junit.experimental.categories.Category; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -66,6 +68,7 @@ * links. */ @RunWith(ActiveMQTestRunner.class) +@Category(ParallelTest.class) public class AmqpSendReceiveTest extends AmqpClientTestSupport { protected static final Logger LOG = LoggerFactory.getLogger(AmqpSendReceiveTest.class); diff --git a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpSenderTest.java b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpSenderTest.java index 79ff2753274..619714a8e28 100644 --- a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpSenderTest.java +++ b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpSenderTest.java @@ -35,6 +35,7 @@ import org.apache.activemq.transport.amqp.client.AmqpSession; import org.apache.activemq.transport.amqp.client.AmqpSupport; import org.apache.activemq.transport.amqp.client.AmqpValidator; +import org.apache.activemq.transport.amqp.ParallelTest; import org.apache.activemq.util.Wait; import org.apache.qpid.proton.amqp.Symbol; import org.apache.qpid.proton.amqp.transport.ReceiverSettleMode; @@ -42,10 +43,12 @@ import org.apache.qpid.proton.engine.Delivery; import org.apache.qpid.proton.engine.Sender; import org.junit.Test; +import org.junit.experimental.categories.Category; /** * Test broker behavior when creating AMQP senders */ +@Category(ParallelTest.class) public class AmqpSenderTest extends AmqpClientTestSupport { @Test(timeout = 60000) @@ -328,4 +331,4 @@ public void inspectOpenedResource(Sender sender) { sender.close(); connection.close(); } -} \ No newline at end of file +} diff --git a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpSessionTest.java b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpSessionTest.java index 2957849f093..3b46955b40e 100644 --- a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpSessionTest.java +++ b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpSessionTest.java @@ -26,15 +26,18 @@ import org.apache.activemq.transport.amqp.client.AmqpReceiver; import org.apache.activemq.transport.amqp.client.AmqpSession; import org.apache.activemq.transport.amqp.client.AmqpValidator; +import org.apache.activemq.transport.amqp.ParallelTest; import org.apache.qpid.proton.engine.Receiver; import org.apache.qpid.proton.engine.Session; import org.junit.Test; +import org.junit.experimental.categories.Category; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Test for creation and configuration of AMQP sessions. */ +@Category(ParallelTest.class) public class AmqpSessionTest extends AmqpClientTestSupport { protected static final Logger LOG = LoggerFactory.getLogger(AmqpSessionTest.class); diff --git a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpSlowReceiverTest.java b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpSlowReceiverTest.java index d064af8369e..c94226acf21 100644 --- a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpSlowReceiverTest.java +++ b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpSlowReceiverTest.java @@ -41,12 +41,15 @@ import org.apache.activemq.transport.amqp.client.AmqpMessage; import org.apache.activemq.transport.amqp.client.AmqpReceiver; import org.apache.activemq.transport.amqp.client.AmqpSession; +import org.apache.activemq.transport.amqp.ParallelTest; import org.apache.activemq.util.Wait; import org.junit.Test; +import org.junit.experimental.categories.Category; /** * Test the handling of consumer abort when the AbortSlowAckConsumerStrategy is used. */ +@Category(ParallelTest.class) public class AmqpSlowReceiverTest extends AmqpClientTestSupport { private final long DEFAULT_CHECK_PERIOD = 1000; diff --git a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpSocketProxyIdleTimeoutTests.java b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpSocketProxyIdleTimeoutTests.java index d613771f5f7..5688bea31c3 100644 --- a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpSocketProxyIdleTimeoutTests.java +++ b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpSocketProxyIdleTimeoutTests.java @@ -29,15 +29,18 @@ import org.apache.activemq.transport.amqp.client.AmqpClientTestSupport; import org.apache.activemq.transport.amqp.client.AmqpConnection; import org.apache.activemq.transport.amqp.client.AmqpConnectionListener; +import org.apache.activemq.transport.amqp.ParallelTest; import org.apache.activemq.util.SocketProxy; import org.apache.activemq.util.Wait; import org.junit.After; import org.junit.Before; import org.junit.Test; +import org.junit.experimental.categories.Category; /** * Test for idle timeout processing using SocketProxy to interrupt coms. */ +@Category(ParallelTest.class) public class AmqpSocketProxyIdleTimeoutTests extends AmqpClientTestSupport { private final int TEST_IDLE_TIMEOUT = 3000; diff --git a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpTempDestinationTest.java b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpTempDestinationTest.java index fb5e9e1a3a6..5e96862a441 100644 --- a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpTempDestinationTest.java +++ b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpTempDestinationTest.java @@ -37,6 +37,7 @@ import org.apache.activemq.transport.amqp.client.AmqpReceiver; import org.apache.activemq.transport.amqp.client.AmqpSender; import org.apache.activemq.transport.amqp.client.AmqpSession; +import org.apache.activemq.transport.amqp.ParallelTest; import org.apache.qpid.proton.amqp.Symbol; import org.apache.qpid.proton.amqp.messaging.DeleteOnClose; import org.apache.qpid.proton.amqp.messaging.Source; @@ -44,10 +45,12 @@ import org.apache.qpid.proton.amqp.messaging.TerminusDurability; import org.apache.qpid.proton.amqp.messaging.TerminusExpiryPolicy; import org.junit.Test; +import org.junit.experimental.categories.Category; /** * Tests for JMS temporary destination mappings to AMQP */ +@Category(ParallelTest.class) public class AmqpTempDestinationTest extends AmqpClientTestSupport { @Test(timeout = 60000) diff --git a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpTransactionTest.java b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpTransactionTest.java index b9fe05eb108..7113bddd204 100644 --- a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpTransactionTest.java +++ b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/AmqpTransactionTest.java @@ -32,16 +32,19 @@ import org.apache.activemq.transport.amqp.client.AmqpReceiver; import org.apache.activemq.transport.amqp.client.AmqpSender; import org.apache.activemq.transport.amqp.client.AmqpSession; +import org.apache.activemq.transport.amqp.ParallelTest; import org.apache.qpid.proton.amqp.messaging.Accepted; import org.apache.qpid.proton.amqp.messaging.Modified; import org.apache.qpid.proton.amqp.messaging.Outcome; import org.apache.qpid.proton.amqp.messaging.Rejected; import org.apache.qpid.proton.amqp.messaging.Released; import org.junit.Test; +import org.junit.experimental.categories.Category; /** * Test various aspects of Transaction support. */ +@Category(ParallelTest.class) public class AmqpTransactionTest extends AmqpClientTestSupport { @Test(timeout = 30000) diff --git a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/OpenWireToAmqpConcurrentStoreAndDispatchTest.java b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/OpenWireToAmqpConcurrentStoreAndDispatchTest.java index 09727c902a0..5986e6df9e7 100644 --- a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/OpenWireToAmqpConcurrentStoreAndDispatchTest.java +++ b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/interop/OpenWireToAmqpConcurrentStoreAndDispatchTest.java @@ -24,11 +24,13 @@ import org.apache.activemq.transport.amqp.client.AmqpMessage; import org.apache.activemq.transport.amqp.client.AmqpReceiver; import org.apache.activemq.transport.amqp.client.AmqpSession; +import org.apache.activemq.transport.amqp.ParallelTest; import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; +import org.junit.experimental.categories.Category; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -51,6 +53,7 @@ import static org.junit.Assert.assertFalse; @RunWith(Parameterized.class) +@Category(ParallelTest.class) public class OpenWireToAmqpConcurrentStoreAndDispatchTest extends AmqpClientTestSupport { protected static final Logger LOG = LoggerFactory.getLogger(OpenWireToAmqpConcurrentStoreAndDispatchTest.class); diff --git a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/message/AMQPMessageIdHelperTest.java b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/message/AMQPMessageIdHelperTest.java index bbc4a4a86d6..fa19ac2d42a 100644 --- a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/message/AMQPMessageIdHelperTest.java +++ b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/message/AMQPMessageIdHelperTest.java @@ -28,11 +28,15 @@ import java.util.UUID; import org.apache.activemq.transport.amqp.AmqpProtocolException; +import org.apache.activemq.transport.amqp.ParallelTest; import org.apache.qpid.jms.exceptions.IdConversionException; import org.apache.qpid.proton.amqp.Binary; import org.apache.qpid.proton.amqp.UnsignedLong; import org.junit.Before; import org.junit.Test; +import org.junit.experimental.categories.Category; + +@Category(ParallelTest.class) public class AMQPMessageIdHelperTest { diff --git a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/message/AmqpContentTypeSupportTest.java b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/message/AmqpContentTypeSupportTest.java index e98dfc95b2e..cacf1085521 100644 --- a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/message/AmqpContentTypeSupportTest.java +++ b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/message/AmqpContentTypeSupportTest.java @@ -22,8 +22,11 @@ import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; +import org.apache.activemq.transport.amqp.ParallelTest; import org.junit.Test; +import org.junit.experimental.categories.Category; +@Category(ParallelTest.class) public class AmqpContentTypeSupportTest { @Test (expected = InvalidContentTypeException.class) diff --git a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/message/AmqpMessageSupportTest.java b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/message/AmqpMessageSupportTest.java index c346d718d2d..fc96e2e1ba4 100644 --- a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/message/AmqpMessageSupportTest.java +++ b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/message/AmqpMessageSupportTest.java @@ -24,12 +24,15 @@ import java.util.HashMap; import java.util.Map; +import org.apache.activemq.transport.amqp.ParallelTest; import org.apache.qpid.proton.Proton; import org.apache.qpid.proton.amqp.Symbol; import org.apache.qpid.proton.amqp.messaging.MessageAnnotations; import org.apache.qpid.proton.message.Message; import org.junit.Test; +import org.junit.experimental.categories.Category; +@Category(ParallelTest.class) public class AmqpMessageSupportTest { //---------- getSymbol ---------------------------------------------------// diff --git a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/message/JMSMappingInboundTransformerTest.java b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/message/JMSMappingInboundTransformerTest.java index b868fef2659..af2a1eb989d 100644 --- a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/message/JMSMappingInboundTransformerTest.java +++ b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/message/JMSMappingInboundTransformerTest.java @@ -44,6 +44,7 @@ import org.apache.activemq.command.ActiveMQObjectMessage; import org.apache.activemq.command.ActiveMQStreamMessage; import org.apache.activemq.command.ActiveMQTextMessage; +import org.apache.activemq.transport.amqp.ParallelTest; import org.apache.qpid.proton.Proton; import org.apache.qpid.proton.amqp.Binary; import org.apache.qpid.proton.amqp.Symbol; @@ -53,7 +54,9 @@ import org.apache.qpid.proton.amqp.messaging.MessageAnnotations; import org.apache.qpid.proton.message.Message; import org.junit.Test; +import org.junit.experimental.categories.Category; +@Category(ParallelTest.class) public class JMSMappingInboundTransformerTest { //----- Null Body Section ------------------------------------------------// diff --git a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/message/JMSMappingOutboundTransformerTest.java b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/message/JMSMappingOutboundTransformerTest.java index ea43554482a..b4223687f90 100644 --- a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/message/JMSMappingOutboundTransformerTest.java +++ b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/message/JMSMappingOutboundTransformerTest.java @@ -61,6 +61,7 @@ import org.apache.activemq.command.ConnectionId; import org.apache.activemq.command.ConnectionInfo; import org.apache.activemq.command.RemoveInfo; +import org.apache.activemq.transport.amqp.ParallelTest; import org.apache.activemq.util.ByteArrayInputStream; import org.apache.qpid.proton.amqp.Binary; import org.apache.qpid.proton.amqp.Symbol; @@ -70,8 +71,10 @@ import org.apache.qpid.proton.amqp.messaging.MessageAnnotations; import org.apache.qpid.proton.message.Message; import org.junit.Test; +import org.junit.experimental.categories.Category; import org.mockito.Mockito; +@Category(ParallelTest.class) public class JMSMappingOutboundTransformerTest { private final UUID TEST_OBJECT_VALUE = UUID.fromString("fee14b62-09e0-4ac6-a4c3-4206c630d844"); diff --git a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/message/MessageTransformationTest.java b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/message/MessageTransformationTest.java index 04cedc8fa88..5742a0f4dd9 100644 --- a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/message/MessageTransformationTest.java +++ b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/message/MessageTransformationTest.java @@ -30,6 +30,7 @@ import org.apache.activemq.command.ActiveMQMessage; import org.apache.activemq.transport.amqp.JMSInteroperabilityTest; +import org.apache.activemq.transport.amqp.ParallelTest; import org.apache.qpid.proton.Proton; import org.apache.qpid.proton.amqp.Symbol; import org.apache.qpid.proton.amqp.messaging.AmqpValue; @@ -43,6 +44,7 @@ import org.apache.qpid.proton.message.ProtonJMessage; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; import org.junit.rules.TestName; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; @@ -53,6 +55,7 @@ /** * Tests some basic encode / decode functionality on the transformers. */ +@Category(ParallelTest.class) @RunWith(Parameterized.class) public class MessageTransformationTest { diff --git a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/message/UTF8BufferTypeTest.java b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/message/UTF8BufferTypeTest.java index c9bc52c2a49..428dd9b9421 100644 --- a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/message/UTF8BufferTypeTest.java +++ b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/message/UTF8BufferTypeTest.java @@ -24,6 +24,7 @@ import java.nio.charset.StandardCharsets; import java.util.UUID; +import org.apache.activemq.transport.amqp.ParallelTest; import org.apache.qpid.proton.codec.AMQPDefinedTypes; import org.apache.qpid.proton.codec.DecoderImpl; import org.apache.qpid.proton.codec.EncoderImpl; @@ -33,10 +34,12 @@ import org.fusesource.hawtbuf.UTF8Buffer; import org.junit.Before; import org.junit.Test; +import org.junit.experimental.categories.Category; /** * Test the UTF8Buffer type encoder */ +@Category(ParallelTest.class) public class UTF8BufferTypeTest { private final UTF8BufferType utf8BufferEncoding; diff --git a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/protocol/AmqpFrameParserTest.java b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/protocol/AmqpFrameParserTest.java index 5f78aaaee3d..9f489f84596 100644 --- a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/protocol/AmqpFrameParserTest.java +++ b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/protocol/AmqpFrameParserTest.java @@ -28,13 +28,16 @@ import org.apache.activemq.transport.amqp.AmqpFrameParser; import org.apache.activemq.transport.amqp.AmqpHeader; import org.apache.activemq.transport.amqp.AmqpWireFormat; +import org.apache.activemq.transport.amqp.ParallelTest; import org.fusesource.hawtbuf.Buffer; import org.fusesource.hawtbuf.DataByteArrayOutputStream; import org.junit.Before; import org.junit.Test; +import org.junit.experimental.categories.Category; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +@Category(ParallelTest.class) public class AmqpFrameParserTest { private static final Logger LOG = LoggerFactory.getLogger(AmqpFrameParserTest.class); diff --git a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/protocol/AmqpTransferTagGeneratorTest.java b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/protocol/AmqpTransferTagGeneratorTest.java index f10f42bac98..cb04c82b7fc 100644 --- a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/protocol/AmqpTransferTagGeneratorTest.java +++ b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/protocol/AmqpTransferTagGeneratorTest.java @@ -29,12 +29,15 @@ import java.util.ArrayList; import java.util.Arrays; +import org.apache.activemq.transport.amqp.ParallelTest; import org.junit.Ignore; import org.junit.Test; +import org.junit.experimental.categories.Category; /** * Tests for the AMQP Transfer Tag Generator */ +@Category(ParallelTest.class) public class AmqpTransferTagGeneratorTest { @Test diff --git a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/protocol/AmqpWireFormatTest.java b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/protocol/AmqpWireFormatTest.java index 7e320d24d3d..10a5b18e369 100644 --- a/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/protocol/AmqpWireFormatTest.java +++ b/activemq-amqp/src/test/java/org/apache/activemq/transport/amqp/protocol/AmqpWireFormatTest.java @@ -24,8 +24,11 @@ import org.apache.activemq.transport.amqp.AmqpHeader; import org.apache.activemq.transport.amqp.AmqpWireFormat; import org.apache.activemq.transport.amqp.AmqpWireFormat.ResetListener; +import org.apache.activemq.transport.amqp.ParallelTest; import org.junit.Test; +import org.junit.experimental.categories.Category; +@Category(ParallelTest.class) public class AmqpWireFormatTest { private final AmqpWireFormat wireFormat = new AmqpWireFormat(); diff --git a/pom.xml b/pom.xml index 028cf65864c..5dd3c4a0bed 100644 --- a/pom.xml +++ b/pom.xml @@ -127,6 +127,7 @@ 3.9.0 1.45 3.8.6 + 3.5.3 * org.apache.activemq* From ccd412faf80c203a0368e167e72f4ae6e5b762f3 Mon Sep 17 00:00:00 2001 From: Jean-Louis Monteiro Date: Thu, 20 Nov 2025 09:44:46 +0100 Subject: [PATCH 2/5] AMQ-8525: kahadb-store module parallelism --- activemq-kahadb-store/pom.xml | 89 +++++++++++++++---- .../activemq/store/kahadb/ParallelTest.java | 27 ++++++ .../kahadb/disk/index/BTreeIndexTest.java | 3 + .../kahadb/disk/index/HashIndexTest.java | 3 + .../kahadb/disk/index/ListIndexTest.java | 3 + .../index/PageFileTransactionAsyncTest.java | 3 + .../journal/DataFileAccessorPoolTest.java | 3 + .../disk/journal/DataFileAccessorTest.java | 4 + .../DataFileAppenderSyncStrategyTest.java | 3 + .../JournalMaxFileLengthChangeTest.java | 3 + .../journal/TargetedDataFileAppenderTest.java | 3 + .../store/kahadb/disk/page/PageFileTest.java | 3 + .../kahadb/disk/page/TransactionTest.java | 3 + .../kahadb/disk/util/SequenceSetTest.java | 3 + .../store/kahadb/plist/PListImplTest.java | 3 + 15 files changed, 141 insertions(+), 15 deletions(-) create mode 100644 activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/ParallelTest.java diff --git a/activemq-kahadb-store/pom.xml b/activemq-kahadb-store/pom.xml index e598030c0b4..30864ce17f0 100644 --- a/activemq-kahadb-store/pom.xml +++ b/activemq-kahadb-store/pom.xml @@ -173,21 +173,6 @@ - - maven-surefire-plugin - - 1 - false - ${surefire.argLine} - alphabetical - - target - - - **/*Test.* - - - org.apache.activemq.protobuf activemq-protobuf @@ -220,6 +205,80 @@ + + all-parallel + + true + + activemq.tests + parallel + + + + 2C + + + + + maven-surefire-plugin + ${maven-surefire-plugin-version} + + true + + + + org.apache.maven.surefire + surefire-junit47 + ${maven-surefire-plugin-version} + + + + + parallel + test + + test + + + false + ${parallel.tests.fork.count} + false + 600 + balanced + false + org.apache.activemq.store.kahadb.ParallelTest + + true + ${project.build.directory}/parallel-tests-${surefire.forkNumber}/ + true + false + + + + + serial + test + + test + + + false + balanced + false + org.apache.activemq.store.kahadb.ParallelTest + + true + ${project.build.directory}/ + true + false + + + + + + + + activemq.tests-sanity diff --git a/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/ParallelTest.java b/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/ParallelTest.java new file mode 100644 index 00000000000..3ce04968372 --- /dev/null +++ b/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/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.store.kahadb; + + +/** + * 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-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/index/BTreeIndexTest.java b/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/index/BTreeIndexTest.java index cd2947108f6..0b1d325aa44 100644 --- a/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/index/BTreeIndexTest.java +++ b/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/index/BTreeIndexTest.java @@ -32,15 +32,18 @@ import java.util.Map; import java.util.Random; +import org.apache.activemq.store.kahadb.ParallelTest; import org.apache.activemq.store.kahadb.disk.page.PageFile; import org.apache.activemq.store.kahadb.disk.page.Transaction; import org.apache.activemq.store.kahadb.disk.util.LongMarshaller; import org.apache.activemq.store.kahadb.disk.util.StringMarshaller; import org.apache.activemq.store.kahadb.disk.util.VariableMarshaller; import org.junit.Test; +import org.junit.experimental.categories.Category; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +@Category(ParallelTest.class) public class BTreeIndexTest extends IndexTestSupport { private static final Logger LOG = LoggerFactory.getLogger(BTreeIndexTest.class); private NumberFormat nf; diff --git a/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/index/HashIndexTest.java b/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/index/HashIndexTest.java index d4b5e4580c1..2d35ddf4796 100644 --- a/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/index/HashIndexTest.java +++ b/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/index/HashIndexTest.java @@ -16,9 +16,12 @@ */ package org.apache.activemq.store.kahadb.disk.index; +import org.apache.activemq.store.kahadb.ParallelTest; import org.apache.activemq.store.kahadb.disk.util.LongMarshaller; import org.apache.activemq.store.kahadb.disk.util.StringMarshaller; +import org.junit.experimental.categories.Category; +@Category(ParallelTest.class) public class HashIndexTest extends IndexTestSupport { @Override diff --git a/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/index/ListIndexTest.java b/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/index/ListIndexTest.java index 112ca1ead6c..986f493a907 100644 --- a/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/index/ListIndexTest.java +++ b/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/index/ListIndexTest.java @@ -31,6 +31,7 @@ import java.util.Map; import java.util.Random; +import org.apache.activemq.store.kahadb.ParallelTest; import org.apache.activemq.store.kahadb.disk.page.PageFile; import org.apache.activemq.store.kahadb.disk.util.LongMarshaller; import org.apache.activemq.store.kahadb.disk.util.Sequence; @@ -38,9 +39,11 @@ import org.apache.activemq.store.kahadb.disk.util.StringMarshaller; import org.apache.activemq.store.kahadb.disk.util.VariableMarshaller; import org.junit.Test; +import org.junit.experimental.categories.Category; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +@Category(ParallelTest.class) public class ListIndexTest extends IndexTestSupport { private static final Logger LOG = LoggerFactory.getLogger(ListIndexTest.class); private NumberFormat nf; diff --git a/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/index/PageFileTransactionAsyncTest.java b/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/index/PageFileTransactionAsyncTest.java index 97509ae6872..684076a6a55 100644 --- a/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/index/PageFileTransactionAsyncTest.java +++ b/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/index/PageFileTransactionAsyncTest.java @@ -16,15 +16,18 @@ */ package org.apache.activemq.store.kahadb.disk.index; +import org.apache.activemq.store.kahadb.ParallelTest; import org.apache.activemq.store.kahadb.disk.page.PageFile; import org.apache.activemq.store.kahadb.disk.page.Transaction; import org.apache.activemq.store.kahadb.disk.util.LongMarshaller; import org.apache.activemq.store.kahadb.disk.util.StringMarshaller; import org.junit.Test; +import org.junit.experimental.categories.Category; import java.io.File; import java.util.LinkedList; +@Category(ParallelTest.class) public class PageFileTransactionAsyncTest { @Test(timeout=60000) diff --git a/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/journal/DataFileAccessorPoolTest.java b/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/journal/DataFileAccessorPoolTest.java index 2d33265b8cb..2b5641f885c 100644 --- a/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/journal/DataFileAccessorPoolTest.java +++ b/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/journal/DataFileAccessorPoolTest.java @@ -23,10 +23,13 @@ import java.io.File; +import org.apache.activemq.store.kahadb.ParallelTest; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; import org.junit.rules.TemporaryFolder; +@Category(ParallelTest.class) public class DataFileAccessorPoolTest { @Rule diff --git a/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/journal/DataFileAccessorTest.java b/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/journal/DataFileAccessorTest.java index b5fe52a0dd6..a9a0030e214 100644 --- a/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/journal/DataFileAccessorTest.java +++ b/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/journal/DataFileAccessorTest.java @@ -24,11 +24,15 @@ import java.nio.file.Files; import java.nio.file.Path; import java.util.Arrays; + +import org.apache.activemq.store.kahadb.ParallelTest; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; import org.junit.rules.TemporaryFolder; +@Category(ParallelTest.class) public class DataFileAccessorTest { @Rule diff --git a/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/journal/DataFileAppenderSyncStrategyTest.java b/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/journal/DataFileAppenderSyncStrategyTest.java index 494e256bd11..491c37e4dc3 100644 --- a/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/journal/DataFileAppenderSyncStrategyTest.java +++ b/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/journal/DataFileAppenderSyncStrategyTest.java @@ -23,13 +23,16 @@ import java.util.concurrent.TimeUnit; import org.apache.activemq.store.kahadb.KahaDBStore; +import org.apache.activemq.store.kahadb.ParallelTest; import org.apache.activemq.store.kahadb.disk.journal.Journal.JournalDiskSyncStrategy; import org.junit.After; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; import org.junit.rules.TemporaryFolder; import org.junit.rules.Timeout; +@Category(ParallelTest.class) public class DataFileAppenderSyncStrategyTest { @Rule diff --git a/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/journal/JournalMaxFileLengthChangeTest.java b/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/journal/JournalMaxFileLengthChangeTest.java index b28f1e39d6a..9a8e3bf43aa 100644 --- a/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/journal/JournalMaxFileLengthChangeTest.java +++ b/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/journal/JournalMaxFileLengthChangeTest.java @@ -28,14 +28,17 @@ import org.apache.activemq.command.MessageId; import org.apache.activemq.store.MessageStore; import org.apache.activemq.store.kahadb.KahaDBStore; +import org.apache.activemq.store.kahadb.ParallelTest; import org.junit.After; import org.junit.Rule; import org.junit.Test; +import org.junit.experimental.categories.Category; import org.junit.rules.TemporaryFolder; import org.junit.rules.Timeout; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +@Category(ParallelTest.class) public class JournalMaxFileLengthChangeTest { private static final Logger LOG = LoggerFactory.getLogger(JournalMaxFileLengthChangeTest.class); diff --git a/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/journal/TargetedDataFileAppenderTest.java b/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/journal/TargetedDataFileAppenderTest.java index bbdcde7600d..40291c33bd6 100644 --- a/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/journal/TargetedDataFileAppenderTest.java +++ b/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/journal/TargetedDataFileAppenderTest.java @@ -23,15 +23,18 @@ import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; +import org.apache.activemq.store.kahadb.ParallelTest; import org.apache.activemq.util.ByteSequence; import org.apache.activemq.util.IOHelper; import org.junit.After; import org.junit.Before; import org.junit.Test; +import org.junit.experimental.categories.Category; /** * Test the single threaded DataFileAppender class. */ +@Category(ParallelTest.class) public class TargetedDataFileAppenderTest { private Journal dataManager; diff --git a/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/page/PageFileTest.java b/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/page/PageFileTest.java index 7e8278f5c94..3521d4cabb6 100644 --- a/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/page/PageFileTest.java +++ b/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/page/PageFileTest.java @@ -17,6 +17,7 @@ package org.apache.activemq.store.kahadb.disk.page; import junit.framework.TestCase; +import org.apache.activemq.store.kahadb.ParallelTest; import org.apache.activemq.store.kahadb.disk.util.StringMarshaller; import org.apache.activemq.util.Wait; import org.apache.logging.log4j.Level; @@ -26,6 +27,7 @@ import org.apache.logging.log4j.core.config.Property; import org.apache.logging.log4j.core.filter.AbstractFilter; import org.apache.logging.log4j.core.layout.MessageLayout; +import org.junit.experimental.categories.Category; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -41,6 +43,7 @@ import java.util.concurrent.atomic.AtomicBoolean; @SuppressWarnings("rawtypes") +@Category(ParallelTest.class) public class PageFileTest extends TestCase { private static final Logger LOG = LoggerFactory.getLogger(PageFileTest.class); diff --git a/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/page/TransactionTest.java b/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/page/TransactionTest.java index 900f8e209e0..f78c8aa41ce 100644 --- a/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/page/TransactionTest.java +++ b/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/page/TransactionTest.java @@ -18,7 +18,9 @@ */ import junit.framework.TestCase; +import org.apache.activemq.store.kahadb.ParallelTest; import org.apache.activemq.store.kahadb.disk.util.Marshaller; +import org.junit.experimental.categories.Category; import java.io.DataInput; import java.io.DataOutput; @@ -27,6 +29,7 @@ import java.util.ArrayList; import java.util.List; +@Category(ParallelTest.class) public class TransactionTest extends TestCase { private static long NUMBER_OF_BYTES = 10485760L; diff --git a/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/util/SequenceSetTest.java b/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/util/SequenceSetTest.java index 7df83513f50..6c879dbd8f4 100644 --- a/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/util/SequenceSetTest.java +++ b/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/util/SequenceSetTest.java @@ -21,8 +21,11 @@ import java.util.Iterator; +import org.apache.activemq.store.kahadb.ParallelTest; import org.junit.Test; +import org.junit.experimental.categories.Category; +@Category(ParallelTest.class) public class SequenceSetTest { @Test diff --git a/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/plist/PListImplTest.java b/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/plist/PListImplTest.java index ba702b71fef..502f57aa6b7 100644 --- a/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/plist/PListImplTest.java +++ b/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/plist/PListImplTest.java @@ -25,13 +25,16 @@ import org.apache.activemq.store.PListStore; import org.apache.activemq.store.PListTestSupport; +import org.apache.activemq.store.kahadb.ParallelTest; import org.apache.activemq.util.IOHelper; import org.junit.Ignore; import org.junit.Test; +import org.junit.experimental.categories.Category; /** * @author Hiram Chirino */ +@Category(ParallelTest.class) public class PListImplTest extends PListTestSupport { From dafee55c2965a9c4be970d499c5e662dd58e880c Mon Sep 17 00:00:00 2001 From: Jean-Louis Monteiro Date: Fri, 21 Nov 2025 19:15:37 +0100 Subject: [PATCH 3/5] AMQ-8525: Now that it worked, remove the skipTests flag so command line arguments are used --- activemq-amqp/pom.xml | 2 -- 1 file changed, 2 deletions(-) diff --git a/activemq-amqp/pom.xml b/activemq-amqp/pom.xml index cd7141fc181..47f4a5bec65 100644 --- a/activemq-amqp/pom.xml +++ b/activemq-amqp/pom.xml @@ -345,7 +345,6 @@ test - false ${parallel.tests.fork.count} false 600 @@ -367,7 +366,6 @@ test - false balanced false org.apache.activemq.transport.amqp.ParallelTest From e69221615e0a9f3531c8821df88031f2cf7fb57f Mon Sep 17 00:00:00 2001 From: Jean-Louis Monteiro Date: Fri, 21 Nov 2025 19:16:06 +0100 Subject: [PATCH 4/5] AMQ-8525: Now that it worked, remove the skipTests flag so command line arguments are used --- activemq-kahadb-store/pom.xml | 2 -- 1 file changed, 2 deletions(-) diff --git a/activemq-kahadb-store/pom.xml b/activemq-kahadb-store/pom.xml index 30864ce17f0..2d88f4e420d 100644 --- a/activemq-kahadb-store/pom.xml +++ b/activemq-kahadb-store/pom.xml @@ -240,7 +240,6 @@ test - false ${parallel.tests.fork.count} false 600 @@ -262,7 +261,6 @@ test - false balanced false org.apache.activemq.store.kahadb.ParallelTest From b05d74b153011df31d43f4e0ab9fef5d69e87945 Mon Sep 17 00:00:00 2001 From: Jean-Louis Monteiro Date: Tue, 25 Nov 2025 18:05:19 +0100 Subject: [PATCH 5/5] AMQ-8525: Clean up configuration and add a test to parallel execution --- activemq-amqp/pom.xml | 147 +++++++++--------- .../transport/amqp/JMSClientTest.java | 2 + activemq-kahadb-store/pom.xml | 143 +++++++++-------- .../JournalCorruptionIndexRecoveryTest.java | 5 +- 4 files changed, 149 insertions(+), 148 deletions(-) diff --git a/activemq-amqp/pom.xml b/activemq-amqp/pom.xml index 47f4a5bec65..639adbce52b 100644 --- a/activemq-amqp/pom.xml +++ b/activemq-amqp/pom.xml @@ -180,6 +180,80 @@ + + + + org.apache.maven.plugins + maven-surefire-plugin + ${surefire.version} + + ${surefire.argLine} + alphabetical + plain + false + org.apache.activemq.transport.amqp.ParallelTest + + ${project.build.directory}/ + + + true + + + true + true + true + true + true + true + + + **/*Test.* + + + **/*LoadTest.java + **/*StressTest.java + + + + + parallel + test + + test + + + + + org.apache.activemq.transport.amqp.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 + + + + + + + + org.apache.activemq.store.kahadb.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 + + + - - all-parallel - - true - - activemq.tests - parallel - - - - 2C - - - - - maven-surefire-plugin - ${maven-surefire-plugin-version} - - true - - - - org.apache.maven.surefire - surefire-junit47 - ${maven-surefire-plugin-version} - - - - - parallel - test - - test - - - ${parallel.tests.fork.count} - false - 600 - balanced - false - org.apache.activemq.store.kahadb.ParallelTest - - true - ${project.build.directory}/parallel-tests-${surefire.forkNumber}/ - true - false - - - - - serial - test - - test - - - balanced - false - org.apache.activemq.store.kahadb.ParallelTest - - true - ${project.build.directory}/ - true - false - - - - - - - - activemq.tests-sanity diff --git a/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/JournalCorruptionIndexRecoveryTest.java b/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/JournalCorruptionIndexRecoveryTest.java index 1dc84afec1e..0a4d4fcb5c4 100644 --- a/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/JournalCorruptionIndexRecoveryTest.java +++ b/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/JournalCorruptionIndexRecoveryTest.java @@ -42,17 +42,19 @@ import org.apache.activemq.util.RecoverableRandomAccessFile; import org.junit.After; 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) @RunWith(Parameterized.class) public class JournalCorruptionIndexRecoveryTest { private static final Logger LOG = LoggerFactory.getLogger(JournalCorruptionIndexRecoveryTest.class); - private final String KAHADB_DIRECTORY = "target/activemq-data/"; private final String payload = new String(new byte[1024]); private ActiveMQConnectionFactory cf = null; @@ -92,7 +94,6 @@ private void doStartBroker(boolean delete) throws Exception { broker.setDeleteAllMessagesOnStartup(delete); broker.setPersistent(true); broker.setUseJmx(true); - broker.setDataDirectory(KAHADB_DIRECTORY); broker.addConnector("tcp://localhost:0"); configurePersistence(broker);