Omar Atie created CAMEL-24368:
---------------------------------

             Summary: flaky Tests
                 Key: CAMEL-24368
                 URL: https://issues.apache.org/jira/browse/CAMEL-24368
             Project: Camel
          Issue Type: Test
         Environment: Here is the **failing environment** from CI run 
[31115312949](https://github.com/apache/camel/actions/runs/31115312949), job 
[92696861359](https://github.com/apache/camel/actions/runs/31115312949/job/92696861359):

---

## CI context

| Field | Value |
|-------|-------|
| **Workflow** | `Build and test` (PR validation) |
| **PR** | [#25337](https://github.com/apache/camel/pull/25337) — CAMEL-23861 
GenAI observability |
| **Branch** | `cursor/CAMEL-23861-genai-observability-c587` |
| **Commit** | `8e424d403b86a274f39e8c179d6221d33b94543c` |
| **Run attempt** | 2 |
| **Trigger** | `pull_request` against `main` |
| **Run started** | 2026-08-06 22:52 UTC |
| **Test phase failed** | 2026-08-07 00:00 UTC (~56 min test phase) |
| **Failing matrix job** | `build (25, false)` — **JDK 25** |
| **Other matrix job** | `build (17, false)` — **cancelled** (concurrency), not 
the source of the failure |

---

## Hardware / OS

| Field | Value |
|-------|-------|
| **Runner** | GitHub-hosted (`ubuntu-latest`) |
| **Runner label** | `ubuntu-latest` |
| **OS** | Ubuntu 24.04 (Noble) |
| **Runner image** | `ubuntu24/20260720.247` |
| **Architecture** | **linux-amd64 (x86_64)** — *not* s390x / ppc64le / aarch64 
|
| **Typical runner specs** | 4 vCPU, 16 GB RAM (standard GitHub-hosted runner) |

---

## Java / build toolchain

| Field | Value |
|-------|-------|
| **JDK** | Eclipse Temurin **25.0.3+9** (x64) |
| **JAVA_HOME** | `/opt/hostedtoolcache/Java_Temurin-Hotspot_jdk/25.0.3-9/x64` |
| **Maven Daemon** | **mvnd 1.0.5** (`linux-amd64`) |
| **Maven** | **3.9.14** (bundled with mvnd) |
| **Camel version** | **4.22.0-SNAPSHOT** |
| **Surefire** | **3.5.6** |
| **Surefire reruns** | `-Dsurefire.rerunFailingTestsCount=2` |

---

## Build / test execution profile

| Field | Value |
|-------|-------|
| **Build type** | Incremental PR build (Scalpel change detection) |
| **Scalpel result** | 605 affected modules (580 would be tested) |
| **Modules actually tested** | **606 modules** (`install` over full 
incremental `-pl` list) |
| **mvnd threads** | `-Dmvnd.threads=2` |
| **Maven artifact threads** | `-Dmaven.artifact.threads=25` |
| **CI env flag** | `-Dci.env.name=github.com` |
| **Load context** | Full-reactor incremental build under CI resource 
contention (~606 modules) |

---

## Test failure behavior in this environment

| Test | Result in this env |
|------|---------------------|
| `LumberjackComponentTest.shouldListenToMessages` | **Failed all 3 Surefire 
runs** (Run 1/2/3) — `ConditionTimeoutException` after **30s** in 
`LumberjackUtil` |
| `VertxWebsocketTest.testSendWithConnectionKeyForRawParameterizedPath` | 
**Failed Run 1**, **passed Run 2** — `expected: <2> but was: <1>` at line 172 |

---

## Important note for JIRA

This failure happened on **standard GitHub Actions amd64 + JDK 25**, not on 
s390x. So the `@DisabledOnOs(s390x)` guard from CAMEL-21438 would **not** have 
skipped these tests. The environment is a heavy incremental CI build, not an 
alternative-architecture Jenkins node.
            Reporter: Omar Atie


h2. Summary
 
Flaky CI: \{{LumberjackComponentTest.shouldListenToMessages}} timeout and 
\{{VertxWebsocketTest.testSendWithConnectionKeyForRawParameterizedPath}} race 
under heavy incremental builds
 
h2. Issue Type
 
Bug
 
h2. Priority
 
Major
 
h2. Affects Version/s
 
4.22.0-SNAPSHOT
 
h2. Component/s
 
* camel-lumberjack
* camel-vertx-websocket
 
h2. Labels
 
{\{ci}}, \{{flaky-test}}, \{{test-infra}}
 
----
 
h2. Description
 
h3. Context
 
During CI validation of [PR #25337|https://github.com/apache/camel/pull/25337] 
(CAMEL-23861 — GenAI observability), the build failed on *unrelated flaky 
tests* while running the full incremental build (~606 modules). All AI 
observability tests in the PR passed.
 
* CI run: [31115312949|https://github.com/apache/camel/actions/runs/31115312949]
* Failing job: \{{Build and test}} (job \{{92696861359}})
* PR analysis comment: 
[5212287682|https://github.com/apache/camel/pull/25337#issuecomment-5212287682]
 
The PR branch was rebased onto \{{upstream/main}} and the PR-specific test 
suite (\{{camel-ai/camel-ai-common}}, \{{camel-ai/camel-ai-google-genai}}, 
\{{camel-ai/camel-ai-openai}}, \{{components/camel-opentelemetry2}}) passes 
locally with \{{BUILD SUCCESS}}.
 
----
 
h3. Failure 1 — LumberjackComponentTest (build breaker)
 
*Test:* 
\{{org.apache.camel.component.lumberjack.LumberjackComponentTest#shouldListenToMessages}}
*Location:* 
\{{components/camel-lumberjack/src/test/java/org/apache/camel/component/lumberjack/LumberjackComponentTest.java:62}}
*Result:* \{{ConditionTimeoutException}} after 30 seconds (failed all 3 
Surefire reruns)
*Annotations:* \{{@Isolated}}, \{{@DisabledOnOs(OS.S390X)}} (related to 
[CAMEL-21438|https://issues.apache.org/jira/browse/CAMEL-21438])
 
{code}
org.awaitility.core.ConditionTimeoutException: Condition with Lambda expression 
in org.apache.camel.component.lumberjack.LumberjackComponentTest was not 
fulfilled within 30 seconds.
at org.awaitility.core.ConditionAwaiter.await(ConditionAwaiter.java:167)
at org.awaitility.core.CallableCondition.await(CallableCondition.java:78)
at org.awaitility.core.CallableCondition.await(CallableCondition.java:26)
at org.awaitility.core.ConditionFactory.until(ConditionFactory.java:1168)
at org.awaitility.core.ConditionFactory.until(ConditionFactory.java:1141)
at 
org.apache.camel.component.lumberjack.LumberjackComponentTest.shouldListenToMessages(LumberjackComponentTest.java:62)
{code}
 
*Likely cause:* Timing/network sensitivity when the full reactor runs under CI 
load; the test waits for Lumberjack messages over TCP and may not receive them 
reliably within 30s.
 
----
 
h3. Failure 2 — VertxWebsocketTest (intermittent)
 
*Test:* 
\{{org.apache.camel.component.vertxwebsocket.VertxWebsocketTest#testSendWithConnectionKeyForRawParameterizedPath}}
*Location:* 
\{{components/camel-vertx-websocket/src/test/java/org/apache/camel/component/vertxwebsocket/VertxWebsocketTest.java:218}}
*Result:* \{{expected: <2> but was: <1>}} on first run; *passed on Surefire 
rerun #2*
 
{code}
org.opentest4j.AssertionFailedError: expected: <2> but was: <1>
at 
org.junit.jupiter.api.AssertionFailureBuilder.build(AssertionFailureBuilder.java:151)
at 
org.junit.jupiter.api.AssertionFailureBuilder.buildAndThrow(AssertionFailureBuilder.java:132)
at org.junit.jupiter.api.AssertEquals.failNotEqual(AssertEquals.java:197)
at org.junit.jupiter.api.AssertEquals.assertEquals(AssertEquals.java:150)
at org.junit.jupiter.api.AssertEquals.assertEquals(AssertEquals.java:145)
at org.junit.jupiter.api.Assertions.assertEquals(Assertions.java:531)
at 
org.apache.camel.component.vertxwebsocket.VertxWebsocketTest.testSendWithConnectionKeyForRawParameterizedPath(VertxWebsocketTest.java:218)
{code}
 
*Likely cause:* Race between WebSocket connection establishment and message 
dispatch when multiple tests share Vert.x resources under parallel/full-reactor 
load.
 
----
 
h2. Steps to Reproduce
 
# Run a large incremental build that includes both modules, e.g.:
{code:bash}
mvn clean install -pl 
components/camel-lumberjack,components/camel-vertx-websocket -am
{code}
# Or reproduce CI-like load:
{code:bash}
mvn clean install -Dquickly
# then re-run the failing tests repeatedly
mvn test -pl components/camel-lumberjack 
-Dtest=LumberjackComponentTest#shouldListenToMessages
mvn test -pl components/camel-vertx-websocket 
-Dtest=VertxWebsocketTest#testSendWithConnectionKeyForRawParameterizedPath
{code}
# Observe intermittent timeouts or assertion failures under resource contention.
 
----
 
h2. Expected Result
 
Both tests pass consistently in CI and local full-reactor builds without 
relying on Surefire reruns.
 
h2. Actual Result
 
* \{{LumberjackComponentTest#shouldListenToMessages}} — fails consistently in 
CI (3/3 reruns)
* \{{VertxWebsocketTest#testSendWithConnectionKeyForRawParameterizedPath}} — 
fails intermittently (1/3 reruns in observed run)
 
----
 
h2. Proposed Fix (investigation starting points)
 
h3. Lumberjack
 
* Review Awaitility timeout and polling strategy in \{{shouldListenToMessages}}
* Check whether TCP listener/port binding is stable under parallel test 
execution
* Cross-check [CAMEL-21438|https://issues.apache.org/jira/browse/CAMEL-21438] 
history — test already marked \{{@Isolated}} and disabled on s390x for prior 
flakiness
 
h3. Vert.x WebSocket
 
* Add synchronization or use \{{MockEndpoint}} timed assertions before counting 
received messages
* Ensure WebSocket client connection is fully established before sending
* Consider \{{@Isolated}} or dedicated Vert.x instance per test if shared 
lifecycle causes races
 
----
 
h2. Acceptance Criteria
 
* \{{LumberjackComponentTest#shouldListenToMessages}} passes reliably in CI (no 
\{{ConditionTimeoutException}} under standard build load)
* \{{VertxWebsocketTest#testSendWithConnectionKeyForRawParameterizedPath}} 
passes on first run without depending on Surefire reruns
* No regression in module test coverage or build time beyond reasonable bounds
 
----
 
h2. Related Issues
 
* [CAMEL-21438|https://issues.apache.org/jira/browse/CAMEL-21438] — prior 
Lumberjack flakiness (s390x / isolation)
* [PR #25337|https://github.com/apache/camel/pull/25337] — CI run where flakes 
were observed (not caused by PR changes)



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to