From d6c3954b92a22b849980628b5f52f713e8c468f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?JB=20Onofr=C3=A9?= Date: Tue, 21 Apr 2026 15:17:30 +0200 Subject: [PATCH] fix(test): avoid race condition in TwoBrokerVirtualTopicSelectorAwareForwardingTest Replace bare assertEquals with Wait.waitFor for the queue depth check in testSelectorAwareForwarding. The broker decrements its messages counter only after processing the MessageAck asynchronously, so asserting immediately after waitForMessagesToArrive could fire before the ACK is processed on a loaded CI runner. --- ...TwoBrokerVirtualTopicSelectorAwareForwardingTest.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/activemq-unit-tests/src/test/java/org/apache/activemq/usecases/TwoBrokerVirtualTopicSelectorAwareForwardingTest.java b/activemq-unit-tests/src/test/java/org/apache/activemq/usecases/TwoBrokerVirtualTopicSelectorAwareForwardingTest.java index 83ed1ed8af2..d09868cb8d3 100644 --- a/activemq-unit-tests/src/test/java/org/apache/activemq/usecases/TwoBrokerVirtualTopicSelectorAwareForwardingTest.java +++ b/activemq-unit-tests/src/test/java/org/apache/activemq/usecases/TwoBrokerVirtualTopicSelectorAwareForwardingTest.java @@ -520,10 +520,11 @@ public void testSelectorAwareForwarding() throws Exception { assertEquals(2, msgsB.getMessageCount()); - // queue should be drained - assertEquals(0, brokerB.getDestination(new ActiveMQQueue("Consumer.B.VirtualTopic.tempTopic")) - .getDestinationStatistics().getMessages().getCount()); - // and the enqueue count for the remote queue should only be 1 + // queue should be drained - use Wait.waitFor to allow broker ACK processing to complete + assertTrue("queue should be drained after consumer ACKs", Wait.waitFor(() -> + brokerB.getDestination(new ActiveMQQueue("Consumer.B.VirtualTopic.tempTopic")) + .getDestinationStatistics().getMessages().getCount() == 0, 5000, 100)); + // and the enqueue count for the remote queue should only be 3 assertEquals(3, brokerB.getDestination(new ActiveMQQueue("Consumer.B.VirtualTopic.tempTopic")) .getDestinationStatistics().getEnqueues().getCount());