name: plugin-contract-tests
description: Use when editing miner-protocol code under plugin/proto/, plugin/antminer/, or plugin/virtual/, or when changing test fixtures consumed by tests/plugin-contract/. The contract suite is the canonical check that a plugin still meets the miner driver contract; it is Docker-heavy and easy to skip, but plugin behavior regressions only surface here.
plugin-contract-tests
The contract suite (tests/plugin-contract/) runs each miner test in its own
container so port-bound mocks (fake-antminer, ASIC-rs harnesses) don't
collide. Pre-push lefthook does not run it. Server just lint does not
run it. CI runs it on PR via protofleet-contract-checks.yml, but by then
it's a feedback delay.
What to do
- After plugin or fixture edits, run
just test-contractfrom the repo root. It builds the Go plugins, compiles the test binary once, and runsTestAntminerStock,TestAntminerVNish, andTestWhatsMinerStockin isolated containers. - Surface the failing test name and the plugin under test (the test names map to the miner model, not the plugin module — read the suite output carefully).
- If the change is a deliberate behavior change, add or update a contract
testdata fixture under
tests/plugin-contract/testdata/or the relevant miner harness — don't loosen the test to make it pass.
What to avoid
- Don't run the contract tests outside Docker. The harness assumes container port isolation; running on the host will race with anything bound to 4028 or 80.