• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

prisma-risk / tsoracle / 26433783579
95%

Build:
DEFAULT BRANCH: main
Ran 26 May 2026 05:24AM UTC
Jobs 1
Files 88
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

26 May 2026 05:17AM UTC coverage: 95.462%. Remained the same
26433783579

push

github

web-flow
test(smoke): retry binary spawn on EADDRINUSE port-probe race (#474)

The `bind_unused()` helper probes an ephemeral port, drops the listener,
and passes the bare addr to a spawned `tsoracle` subprocess. Between the
drop and the child's `.bind()`, the kernel can hand the same port to
another concurrently-running test, so the child fails with `EADDRINUSE`
and exits before the test's `wait_until_accepting` ever succeeds.

The race surfaces unevenly: tests that allocate three ports back-to-back
(`admin_members_lists_the_bootstrap_node`,
`serve_openraft_single_node_serves_after_bootstrap`,
`serve_openraft_with_peer_mtls_boots_and_serves`) triple the window per
attempt, and `admin_members_lists_the_bootstrap_node` flaked on PR #470
with exactly this failure mode (`failed to bind admin server on
127.0.0.1:36041: Address already in use (os error 98)`).

Replace the inline probe-then-drop / select-then-spawn pattern with a
`retry_spawn(n_ports, ready_idx, budget, build)` helper that:

- pre-allocates all `n_ports` listeners at once and drops them together
  to shrink the per-port race window;
- pipes child stderr through an async drain task so a chatty subprocess
  cannot fill the pipe buffer and back-pressure itself into a hang;
- races readiness on each `ready_idx` addr against `child.wait()`
  exactly as before;
- on child early-exit, classifies the failure: stderr containing
  "Address already in use" triggers a re-probe + re-spawn (up to 3
  attempts); anything else propagates the panic with the captured
  stderr included for diagnostics.

Tests 3 and 5 pass `admin_addr` only as `--members` metadata and do not
`.bind()` it, so their `ready_idx` is `[0]` (listen-only); test 6
passes `--admin-listen` and waits on `[0, 2]`. Reusing `raft_dir`
across retry attempts is safe because `--bootstrap` calls
`raft.initialize()` which is idempotent on already-bootstrapped state
(see `crates/tsoracle-standalone/src/drivers/openraft/mod.rs:284-285`).

Production binary... (continued)

12979 of 13596 relevant lines covered (95.46%)

396795.94 hits per line

Jobs
ID Job ID Ran Files Coverage
1 26433783579.1 26 May 2026 05:24AM UTC 88
95.46
GitHub Action Run
Source Files on build 26433783579
  • Tree
  • List 88
  • Changed 0
  • Source Changed 0
  • Coverage Changed 0
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #26433783579
  • 9ab39a3d on github
  • Prev Build on main (#26433593077)
  • Next Build on main (#26434148274)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc