You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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
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.
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.
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.
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_sv2has 18 targets. CI compiles them and does not run them:That gate is worth keeping regardless of what happens here — it catches the rot that actually bit.
tests/integrationstopped compiling whenf1c14cdb9added a field toShareConvergenceResponseandnobody noticed for weeks; four
PoolConfiginitializers went the same way during the ghost-registrydeletion. 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 onas-is would make
mainred and flaky, which is strictly worse than not running them: a flaky blocking jobtrains everyone to ignore it, and then it stops catching anything at all.
What would need to exist
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.
integration-testsjob already sitsinside a 45-minute timeout and was cancelled once for exceeding it when merged into
test.triaging produces a red
mainand a job people disable. Expect some of the 18 to be stale in the sameway
payout_ledger_e2ewas — a fixture that no longer matches a rule, rather than a live defect.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_sv2not binding:34255until its TDP handshake completes, the extranonce2_sizechange, 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.