Skip to content

Leaky verdict on benchmark_cli test can fail the ci profile #2221

Description

@gaborbernat

Problem

bench_cli benchmark_cli_exposes_oci_options is reported leaky by nextest under a full instrumented run, and the ci profile turns that into a failure:

leak-timeout = { period = "1s", result = "fail" }

In isolation under --profile ci the same test passes. So the leak is contention-dependent: it appears when the test runs alongside others and not when it runs alone. That makes it a non-deterministic failure of just coverage-native, which is the job every PR's coverage check runs.

Observed during a full-crate instrumented pass while investigating #2181. That run used the default profile, where leaky is a warning rather than a failure, which is why it surfaced as an observation rather than a red job.

Why it is filed separately

It is a different test and a different mechanism from #2181, but the same class: a latent fragility that only appears under contention and that the ci profile promotes from warning to failure. #2181 is a timeout; this is a leak verdict.

It is also distinct from #2160. There the leak lands on tests that hold no descriptor they could leak, which points at a capture pipe inherited from a concurrent spawn — the upstream race in nextest#3553. This test drives a CLI, so whether it genuinely holds a descriptor open past the test body needs establishing rather than assuming.

Required change

Establish first whether the test leaks a real handle or inherits one.

If it holds something open — a child process not reaped, a file or socket outliving the assertion — close it, and the fix is ordinary. If it inherits a capture pipe from a concurrent spawn, this is nextest#3553 and belongs with #2160 rather than here; say so and close this as a duplicate with the evidence.

Do not raise leak-timeout, and do not move the test out of the ci profile's reach. Both make the report go away without answering which of the two it is.

Acceptance criteria

  • The test passes under --profile ci in a full parallel run, not only in isolation.
  • The verdict rests on evidence about what the test holds open, not on a timing adjustment.
  • leak-timeout keeps result = "fail" in the ci profile.

Boundary

This test and whatever it holds. Do not change the leak policy, and do not touch #2181's bound or #2219's port acquisition.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:ciContinuous integration and repository checksarea:testsConformance, perf tests, and observabilitypriority:P1Protocol parity or important product gaptype:bugIncorrect behavior or missing validation

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions