validate-testnet
Validate the cardano_node_governance testnet locally before a paid Antithesis run, or after changing anything under components/. Use when asked to validate, smoke-test, or check the testnet locally; when verifying a change to generate.sh, a driver, or genesis parameters; or before dispatching an Antithesis run. Covers genesis generation, pool-only liveness, and running the drivers by hand.
来源信息
- 仓库
- input-output-hk/cardano-node-tests-antithesis
- 最近来源活动
- 2026年9月25日 15:26
- 检测到的 SKILL.md 语言
- 英语
- 星标
- 0
- 分支
- 0
安装方式
默认使用会先检查来源的 Prompt;你也可以切换为直接命令,或下载本地副本。
检查来源文件
决定是否安装前,请先阅读 SKILL.md,以及 SkillsMP 当前展示的配套文件。
正在显示 SKILL.md
SKILL.md
来源说明 · 只读预览- name
- validate-testnet
- description
- Validate the cardano_node_governance testnet locally before a paid Antithesis run, or after changing anything under components/. Use when asked to validate, smoke-test, or check the testnet locally; when verifying a change to generate.sh, a driver, or genesis parameters; or before dispatching an Antithesis run. Covers genesis generation, pool-only liveness, and running the drivers by hand.
# Validate the governance testnet locally
Work from `testnets/cardano_node_governance/`.
## Read this first — three traps
**A green image rebuild does not validate `generate.sh`.** The gov-configurator Dockerfile only
`COPY`s it and sets it as `ENTRYPOINT`, so it runs at container *start*. The CI rebuild proves the
script was packaged, nothing more. Only step 1 below actually runs it.
**`docker compose build` does nothing here** — no service has a `build:` section. `docker compose
up` therefore runs the pinned image, **not your working tree**. To test an uncommitted change to
`components/`, see "Testing a local change" below.
**A second `up` is a silent no-op.** `generate.sh` guards on a `/gov-data/.generated` marker, so it
skips regeneration and exits 0 without doing anything. Always `docker compose down -v` first when
you want a fresh genesis, or you will validate stale state and believe it passed.
## 1. Genesis generation
```bash
cd testnets/cardano_node_governance
docker compose down -v # clear the .generated marker
docker compose up gov-configurator
```
Expect exit 0 and a line like `genesis spec: securityParam=150 epochLength=15000`.
**Don't trust that log line — read the result back.** It reports what the script intended, not what
landed in the genesis:
```bash
docker run --rm -v cardano_node_governance_gov-state:/gs alpine:3 \
sh -c 'apk add -q jq; jq "{securityParam, epochLength, activeSlotsCoeff, slotLength}" /gs/shelley/genesis.json'
```
`epochLength` must be `100 * securityParam`, and `activeSlotsCoeff` must be `0.1` — `generate.sh`
derives epoch length from k assuming `f=0.1` and aborts if the spec disagrees.
## 2. Pool-only liveness — the assumption most worth checking
```bash
docker compose up p1 p2 p3 relay1
```
Confirm the chain produces blocks with no BFT node: `cardano-cli query tip` must advance. This is
the single biggest assumption in the setup. If it stalls, the fallback is adding a genesis-delegate
(BFT) producer.
## 3. Drivers by hand
```bash
docker compose exec gov-cli python3 /opt/antithesis/test/v1/governance/first_setup.py
# then a create/vote driver, e.g.
docker compose exec gov-cli python3 /opt/antithesis/test/v1/governance/parallel_driver_create_action.py
```
Then check proposals carry DRep/SPO/CC votes:
```bash
docker compose exec gov-cli cardano-cli conway query gov-state --testnet-magic 42 | jq '.proposals'
```
`first_setup.py` waits a full epoch (~50 min at k=150), so budget for that.
## 4. Tear down
```bash
docker compose down -v
```
Leaving volumes behind means the next run silently skips generation (see the third trap).
## Testing a local change before pushing
Because compose pins digests, you must build and override:
```bash
docker build --platform linux/amd64 -t gov-configurator:local ../../components/gov-configurator
cat > docker-compose.override.yaml <<'YAML'
services:
gov-configurator:
image: gov-configurator:local
YAML
docker compose config | grep -A1 'gov-configurator:' | grep image # confirm the swap
```
Compose merges `docker-compose.override.yaml` automatically. **Delete it when done** — it is not
gitignored, and committing it would override the pinned digest for everyone, including Antithesis.
The alternative is to push and let CI rebuild and re-pin, then pull and run the new digest. That
works but costs a build per iteration, so prefer the override while iterating.
## If docker is permission-denied
On a machine where the docker group was added to an already-running shell, wrap calls:
```bash
newgrp docker <<'EOF'
docker compose up gov-configurator
EOF
```
Interactive `newgrp docker` alone hangs waiting for a TTY; the heredoc form works non-interactively.
在 GitHub 查看