Skip to content

fix(tests): stop integration suite hanging on Infinispan :latest (16.3) - #15

Merged
rigazilla merged 1 commit into
infinispan:mainfrom
rigazilla:fix/cli-hang-integration-tests
Oct 19, 2026
Merged

rigazilla merged 1 commit into
infinispan:mainfrom
rigazilla:fix/cli-hang-integration-tests

Conversation

@rigazilla

Copy link
Copy Markdown
Member

Symptom

Integration-test CI started hanging on Oct 9: GetIntegrationTests begins, emits nothing, and the job is cancelled at the 30-min timeout-minutes limit (leaving an orphan docker process). Only the Ubuntu job runs integration tests (Fedora is build-only, Windows doesn't build them), so it looked Ubuntu-specific. main last ran green on 2026-09-25; the branches since are docs-only on top of it, so the code is identical — the trigger is environmental.

Root cause

The tests pull quay.io/infinispan/server:latest (never pinned). :latest advanced from 16.0.x to 16.3.0, and 16.3's cli.sh, when fed a command through a pipe (echo 'create cache …' | cli.sh -c <url>), runs the command but no longer exits on stdin EOF — it drops into an interactive session and blocks forever. The createCacheViaCLI helper (copied into 13 integration files) wraps that in system("… >/dev/null 2>&1") with no timeout, so the whole suite hangs. GetIntegrationTests is simply the first cache-creating suite ctest reaches after Ping.

Reproduced locally against both 16.3.0 (hangs) and 16.0.7 (exits cleanly).

Fix

  • Run the CLI in batch mode: cli.sh -c <url> -f - (reads commands from stdin, exits at EOF). Applied to all 13 createCacheViaCLI copies. Verified on both 16.0.7 and 16.3.0.
  • Add a per-test ctest TIMEOUT 300 to every integration suite, so a future version regression that stalls a subprocess fails in minutes instead of burning the 30-min job. (Slowest real suite, TopologyIntegrationTests, is ~117s — comfortable headroom.)

Not pinning the image

16.3.0 is fully compatible — ctest -L integration is 18/18 green against real docker on :latest (16.3.0) (verified locally 2026-10-12, total ~7 min). An earlier local Connection reset by peer on the Get ops turned out to be a rootless-podman networking artifact (identical on known-good 16.0.7, absent under real docker), not a version regression. So :latest is left unpinned rather than frozen.

Verification

  • ctest -L integration → 100% tests passed, 0 tests failed out of 18 against docker :latest (16.3.0).
  • GetIntegrationTests alone: 8/8, 10.9s (vs the 30-min hang).
  • Pre-commit hook satisfied (STATUS.md co-staged); rationale in docs/DECISIONS.md.

🤖 Generated with Claude Code

Infinispan server :latest advanced from 16.0.x to 16.3.0, whose cli.sh no
longer exits on stdin EOF when fed a command via a pipe — it drops into an
interactive session and blocks forever. createCacheViaCLI (copied into 13
integration files) wrapped that in system() with no timeout, so the whole
suite hung until the 30-min CI job was cancelled (GetIntegrationTests was
simply the first cache-creating suite ctest reached after Ping).

Run the CLI in batch mode (cli.sh -c <url> -f -) so it executes the command
and exits at EOF; verified on both 16.0.7 and 16.3.0. Add a per-test ctest
TIMEOUT 300 to every integration suite so a future stall fails fast instead
of burning the whole job budget.

Not pinning the image: 16.3.0 is fully compatible — ctest -L integration is
18/18 green against real docker on :latest. The earlier local 'connection
reset' was a rootless-podman networking artifact (identical on 16.0.7).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@rigazilla
rigazilla merged commit cad0109 into infinispan:main Oct 19, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant