Skip to content

ci: the 18 integration_tests_sv2 targets compile but never run — they need process infrastructure and a triage pass #617

Description

@defenwycke

Split out of #580, which is closed: every other integration target now runs and passes in CI. This is the
one set that does not.

Current state

integration_tests_sv2 has 18 targets. CI compiles them and does not run them:

- name: Compile SV2 integration targets (no run)
  run: cargo test -p integration_tests_sv2 --no-run

That gate is worth keeping regardless of what happens here — it catches the rot that actually bit.
tests/integration stopped compiling when f1c14cdb9 added a field to ShareConvergenceResponse and
nobody noticed for weeks; four PoolConfig initializers went the same way during the ghost-registry
deletion. Measured at 3m11s with no external services.

Why they cannot simply be un-excluded

191 call sites across the 18 targets spin up real processes — start_pool,
start_template_provider, start_sniffer — and only one of the 18 is #[ignore]d. Turning them on
as-is would make main red and flaky, which is strictly worse than not running them: a flaky blocking job
trains everyone to ignore it, and then it stops catching anything at all.

What would need to exist

  1. Process lifecycle that is reliable in CI. Each target needs a pool, a template provider and
    sometimes a sniffer, on ports that do not collide when targets run concurrently. Today they assume
    they can bind and that nothing else is using the port.
  2. A per-test time budget. These wait on real handshakes. The integration-tests job already sits
    inside a 45-minute timeout and was cancelled once for exceeding it when merged into test.
  3. A triage pass, target by target. CI never runs 13 of 14 integration test targets — payout_ledger_e2e has been red on main unnoticed #580's lesson is that switching a job to blocking before
    triaging produces a red main and a job people disable. Expect some of the 18 to be stale in the same
    way payout_ledger_e2e was — a fixture that no longer matches a rule, rather than a live defect.
  4. A decision on what runs where. Plausibly: the cheap ones blocking on every push, the
    process-heavy ones on a schedule or on demand. Not everything has to gate every commit to be worth
    running.

Why it matters

These are the only tests that exercise the real SV2 path end to end — the path every miner on the pool
actually uses. pool_sv2 not binding :34255 until its TDP handshake completes, the extranonce2_size
change, the PoW job-target-vs-channel-target bug (#583): all of that lives in territory only these
targets cover, and all of it was found in production rather than in CI.

Not urgent for v1 — the compile gate removes the silent-rot failure mode, which was the sharp edge. This
is the remaining depth.

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

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions