This is an automated email from the ASF dual-hosted git repository.
vavrtom pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/qpid-broker-j.git
The following commit(s) were added to refs/heads/main by this push:
new a757a9897b QPID-8753: [Broker-J] Stabilize intermittent JMS 1.1
AbruptClientDisconnectTest (#428)
a757a9897b is described below
commit a757a9897b39d2d9c936c7f15b795a2ed45588eb
Author: Daniil Kirilyuk <[email protected]>
AuthorDate: Fri Aug 28 10:43:11 2026 +0200
QPID-8753: [Broker-J] Stabilize intermittent JMS 1.1
AbruptClientDisconnectTest (#428)
---
.../connection/AbruptClientDisconnectTest.java | 94 +++++++++++++---------
1 file changed, 58 insertions(+), 36 deletions(-)
diff --git
a/systests/qpid-systests-jms_1.1/src/test/java/org/apache/qpid/systests/jms_1_1/connection/AbruptClientDisconnectTest.java
b/systests/qpid-systests-jms_1.1/src/test/java/org/apache/qpid/systests/jms_1_1/connection/AbruptClientDisconnectTest.java
index cf42fdca88..d903547592 100644
---
a/systests/qpid-systests-jms_1.1/src/test/java/org/apache/qpid/systests/jms_1_1/connection/AbruptClientDisconnectTest.java
+++
b/systests/qpid-systests-jms_1.1/src/test/java/org/apache/qpid/systests/jms_1_1/connection/AbruptClientDisconnectTest.java
@@ -126,18 +126,30 @@ public class AbruptClientDisconnectTest extends
JmsTestBase
@Test
public void messagingOnAbruptConnectivityLostWhilstPublishing() throws
Exception
{
+ final int minimumNumberOfMessagesToPublish = 10;
final ClientMonitor clientMonitor = new ClientMonitor();
_tunneledConnection = createTunneledConnection(clientMonitor);
- Producer producer =
- new Producer(_tunneledConnection, _testQueue,
Session.SESSION_TRANSACTED, 10,
- () ->
_tcpTunneler.disconnect(clientMonitor.getClientAddress())
- );
+ final Producer producer = new Producer(_tunneledConnection,
_testQueue, Session.SESSION_TRANSACTED,
+ minimumNumberOfMessagesToPublish, () ->
_tcpTunneler.disconnect(clientMonitor.getClientAddress()));
+
+ final boolean disconnected;
_executorService.submit(producer);
- boolean disconnected = clientMonitor.awaitDisconnect(10,
TimeUnit.SECONDS);
- producer.stop();
- assertTrue(disconnected, "Client disconnect did not happen");
- assertTrue(producer.getNumberOfPublished() >= 10,
- "Unexpected number of published messages " +
producer.getNumberOfPublished());
+ try
+ {
+ disconnected = clientMonitor.awaitDisconnect(getReceiveTimeout() *
minimumNumberOfMessagesToPublish,
+ TimeUnit.MILLISECONDS);
+ }
+ finally
+ {
+ producer.stop();
+ }
+
+ assertTrue(disconnected, "Client disconnect did not happen after
publishing " + minimumNumberOfMessagesToPublish +
+ " messages. Producer published " +
producer.getNumberOfPublished() + ". Producer exception: " +
+ producer.getException());
+ assertTrue(producer.getNumberOfPublished() >=
minimumNumberOfMessagesToPublish, "Expected at least " +
+ minimumNumberOfMessagesToPublish + " published messages, but
got " + producer.getNumberOfPublished() +
+ ". Producer exception: " + producer.getException());
consumeIgnoringLastSeenOmission(_utilityConnection, _testQueue, 0,
producer.getNumberOfPublished(), -1);
}
@@ -145,8 +157,8 @@ public class AbruptClientDisconnectTest extends JmsTestBase
@Test
public void messagingOnAbruptConnectivityLostWhilstConsuming() throws
Exception
{
- int minimumNumberOfMessagesToProduce = 40;
- int minimumNumberOfMessagesToConsume = 20;
+ final int minimumNumberOfMessagesToProduce = 40;
+ final int minimumNumberOfMessagesToConsume = 20;
// produce minimum required number of messages before starting
consumption
final CountDownLatch queueDataWaiter = new CountDownLatch(1);
@@ -180,29 +192,43 @@ public class AbruptClientDisconnectTest extends
JmsTestBase
LOGGER.debug("Waiting for producer to produce {} messages before
consuming", minimumNumberOfMessagesToProduce);
_executorService.submit(producer);
+ final boolean disconnectOccurred;
+ try
+ {
+ assertTrue(queueDataWaiter.await(getReceiveTimeout() *
minimumNumberOfMessagesToProduce, TimeUnit.MILLISECONDS),
+ "Producer did not publish " +
minimumNumberOfMessagesToProduce +
+ " messages within the allowed time. Producer published " +
producer.getNumberOfPublished() +
+ ". Producer exception: " + producer.getException());
- assertTrue(queueDataWaiter.await(10, TimeUnit.SECONDS),
- "Latch waiting for produced messages was not count down");
-
- LOGGER.debug("Producer sent {} messages. Starting consumption...",
producer.getNumberOfPublished());
-
- _executorService.submit(consumer);
+ LOGGER.debug("Producer sent {} messages. Starting consumption...",
producer.getNumberOfPublished());
- boolean disconnectOccurred = clientMonitor.awaitDisconnect(10,
TimeUnit.SECONDS);
+ _executorService.submit(consumer);
- LOGGER.debug("Stopping consumer and producer");
- consumer.stop();
- producer.stop();
+ disconnectOccurred =
clientMonitor.awaitDisconnect(getReceiveTimeout() *
minimumNumberOfMessagesToConsume,
+ TimeUnit.MILLISECONDS);
+ }
+ finally
+ {
+ LOGGER.debug("Stopping consumer and producer");
+ consumer.stop();
+ producer.stop();
+ }
LOGGER.debug("Producer sent {} messages. Consumer received {}
messages",
producer.getNumberOfPublished(),
consumer.getNumberOfConsumed());
- assertTrue(disconnectOccurred, "Client disconnect did not happen");
- assertTrue(producer.getNumberOfPublished() >=
minimumNumberOfMessagesToProduce,
- "Unexpected number of published messages " +
producer.getNumberOfPublished());
- assertTrue(consumer.getNumberOfConsumed() >=
minimumNumberOfMessagesToConsume,
- "Unexpected number of consumed messages " +
consumer.getNumberOfConsumed());
+ assertTrue(disconnectOccurred, "Client disconnect did not happen after
consuming " +
+ minimumNumberOfMessagesToConsume + " messages. Producer
published " + producer.getNumberOfPublished() +
+ ", consumer received " + consumer.getNumberOfConsumed() +
+ ". Producer exception: " + producer.getException() +
+ ". Consumer exception: " + consumer.getException());
+ assertTrue(producer.getNumberOfPublished() >=
minimumNumberOfMessagesToProduce, "Expected at least " +
+ minimumNumberOfMessagesToProduce + " published messages, but
got " +
+ producer.getNumberOfPublished() + ". Producer exception: " +
producer.getException());
+ assertTrue(consumer.getNumberOfConsumed() >=
minimumNumberOfMessagesToConsume, "Expected at least " +
+ minimumNumberOfMessagesToConsume + " consumed messages, but
got " + consumer.getNumberOfConsumed() +
+ ". Consumer exception: " + consumer.getException());
LOGGER.debug("Remaining number to consume {}.",
(producer.getNumberOfPublished() -
consumer.getNumberOfConsumed()));
@@ -277,7 +303,7 @@ public class AbruptClientDisconnectTest extends JmsTestBase
{
try
{
- thread.join(2000);
+ thread.join(Math.max(2000L, getReceiveTimeout()));
}
catch (InterruptedException e)
{
@@ -308,7 +334,7 @@ public class AbruptClientDisconnectTest extends JmsTestBase
}
}
- boolean awaitDisconnect(int period, TimeUnit timeUnit) throws
InterruptedException
+ boolean awaitDisconnect(final long period, final TimeUnit timeUnit)
throws InterruptedException
{
return _closeLatch.await(period, timeUnit);
}
@@ -385,10 +411,8 @@ public class AbruptClientDisconnectTest extends JmsTestBase
void stop()
{
- if (_closed.compareAndSet(false, true))
- {
- threadJoin(_thread);
- }
+ _closed.set(true);
+ threadJoin(_thread);
}
@@ -472,10 +496,8 @@ public class AbruptClientDisconnectTest extends JmsTestBase
void stop()
{
- if (_closed.compareAndSet(false, true))
- {
- threadJoin(_thread);
- }
+ _closed.set(true);
+ threadJoin(_thread);
}
int getNumberOfConsumed()
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]