This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch fix/camel-lumberjack-flaky-tests in repository https://gitbox.apache.org/repos/asf/camel.git
commit 2ae8f1349e5d8e96919859298ba644b5f1b0d1a6 Author: Claus Ibsen <[email protected]> AuthorDate: Thu Jul 16 11:33:47 2026 +0200 camel-lumberjack: fix flaky tests by awaiting Netty shutdown - Await shutdownGracefully() on all Netty thread groups in LumberjackServer.stop() so the port is fully released before the next test binds a new server - Await channel.close() and event loop shutdown in test client (LumberjackUtil) to prevent half-open connections from causing spurious ack count mismatches - Make ErrorProcessor.count thread-safe with AtomicInteger in disconnection test - Add explicit 30s Awaitility timeout in LumberjackUtil (was relying on 10s default) Co-Authored-By: Claude Opus 4.6 <[email protected]> Signed-off-by: Claus Ibsen <[email protected]> --- .../apache/camel/component/lumberjack/io/LumberjackServer.java | 8 +++++--- .../camel/component/lumberjack/LumberjackDisconnectionTest.java | 6 +++--- .../org/apache/camel/component/lumberjack/LumberjackUtil.java | 7 ++++--- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/components/camel-lumberjack/src/main/java/org/apache/camel/component/lumberjack/io/LumberjackServer.java b/components/camel-lumberjack/src/main/java/org/apache/camel/component/lumberjack/io/LumberjackServer.java index 6aa80d1a0539..8a4222f46683 100644 --- a/components/camel-lumberjack/src/main/java/org/apache/camel/component/lumberjack/io/LumberjackServer.java +++ b/components/camel-lumberjack/src/main/java/org/apache/camel/component/lumberjack/io/LumberjackServer.java @@ -107,9 +107,11 @@ public final class LumberjackServer { // Wait for the channel to be indeed closed before shutting the groups & service channel.close().sync(); } finally { - bossGroup.shutdownGracefully(); - workerGroup.shutdownGracefully(); - executorService.shutdownGracefully(); + // Await graceful shutdown of all thread groups so the port is fully released + // before the next test (or consumer restart) binds a new server + bossGroup.shutdownGracefully().syncUninterruptibly(); + workerGroup.shutdownGracefully().syncUninterruptibly(); + executorService.shutdownGracefully().syncUninterruptibly(); } LOG.info("LUMBERJACK server is stopped (host={}, port={}).", host, port); diff --git a/components/camel-lumberjack/src/test/java/org/apache/camel/component/lumberjack/LumberjackDisconnectionTest.java b/components/camel-lumberjack/src/test/java/org/apache/camel/component/lumberjack/LumberjackDisconnectionTest.java index ad7d046e2378..3ea40e32eda2 100644 --- a/components/camel-lumberjack/src/test/java/org/apache/camel/component/lumberjack/LumberjackDisconnectionTest.java +++ b/components/camel-lumberjack/src/test/java/org/apache/camel/component/lumberjack/LumberjackDisconnectionTest.java @@ -19,6 +19,7 @@ package org.apache.camel.component.lumberjack; import java.util.Arrays; import java.util.List; import java.util.Map; +import java.util.concurrent.atomic.AtomicInteger; import org.apache.camel.Exchange; import org.apache.camel.Processor; @@ -76,12 +77,11 @@ public class LumberjackDisconnectionTest extends CamelTestSupport { * This processor throws an exception as the fourth message received. */ private static final class ErrorProcessor implements Processor { - int count; + private final AtomicInteger count = new AtomicInteger(); @Override public void process(Exchange exchange) { - count++; - if (count == 4) { + if (count.incrementAndGet() == 4) { throw new RuntimeCamelException("Ooops"); } } diff --git a/components/camel-lumberjack/src/test/java/org/apache/camel/component/lumberjack/LumberjackUtil.java b/components/camel-lumberjack/src/test/java/org/apache/camel/component/lumberjack/LumberjackUtil.java index 32e14079b0c1..06008beff30c 100644 --- a/components/camel-lumberjack/src/test/java/org/apache/camel/component/lumberjack/LumberjackUtil.java +++ b/components/camel-lumberjack/src/test/java/org/apache/camel/component/lumberjack/LumberjackUtil.java @@ -21,6 +21,7 @@ import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.TimeUnit; import javax.net.ssl.SSLEngine; @@ -94,16 +95,16 @@ final class LumberjackUtil { // send 5 frame windows, without pausing windows.stream().forEach(window -> channel.writeAndFlush(readSample(String.format("io/window%s.bin", window)))); if (waitForResult) { - Awaitility.await().until(() -> windows.size() == responses.size()); + Awaitility.await().atMost(30, TimeUnit.SECONDS).until(() -> windows.size() == responses.size()); } - channel.close(); + channel.close().sync(); synchronized (responses) { return responses; } } finally { - eventLoopGroup.shutdownGracefully(); + eventLoopGroup.shutdownGracefully().syncUninterruptibly(); } }
