test(cli): extract shared Fixture into tests/common
The single bare-metal integration test now reuses a `LazyLock<Fixture>` that spawns picloud once on a private port and shares it across every test in the binary. Sets the stage for per-surface journey modules (auth, apps, scripts, invoke, logs, roles, output) without each one paying for its own server spawn — same trick the dashboard Playwright suite uses with global-setup. Notes: - `tests/cli.rs` becomes a tiny module list; the seed flow moved to `tests/integration.rs`. The seed slug now goes through `common::unique_slug` so parallel/serial reruns can't collide. - `autotests = false` + an explicit `[[test]] name = "cli"` keeps Cargo from auto-promoting future `tests/*.rs` files into their own binaries (which would each respawn picloud). - Subprocess cleanup uses `libc::atexit` to SIGTERM picloud when the test binary exits. PR_SET_PDEATHSIG was tried and rejected: it fires when the *thread* that forked dies, and cargo's per-test worker threads exit between tests, which killed the fixture mid-suite. - New helpers: AppGuard/UserGuard (RAII teardown), member_user / grant_membership / update_membership (direct API for role tests), unique_slug / unique_username, pic_as / pic_no_env. - Two `fixture_url_is_shared_*` tests prove the LazyLock is actually shared, not respawned per test. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -7,11 +7,20 @@ license.workspace = true
|
||||
repository.workspace = true
|
||||
authors.workspace = true
|
||||
description = "PiCloud command-line client"
|
||||
# Each top-level `tests/*.rs` would otherwise auto-discover as its own
|
||||
# test binary, respawning picloud once per file. We want one binary
|
||||
# with module sub-files (auth.rs, apps.rs, …) so the LazyLock fixture
|
||||
# is genuinely shared.
|
||||
autotests = false
|
||||
|
||||
[[bin]]
|
||||
name = "pic"
|
||||
path = "src/main.rs"
|
||||
|
||||
[[test]]
|
||||
name = "cli"
|
||||
path = "tests/cli.rs"
|
||||
|
||||
[dependencies]
|
||||
picloud-shared.workspace = true
|
||||
reqwest = { workspace = true, features = ["json"] }
|
||||
@@ -29,3 +38,4 @@ assert_cmd = "2"
|
||||
predicates = "3"
|
||||
tempfile = "3"
|
||||
reqwest = { workspace = true, features = ["json", "blocking"] }
|
||||
libc = "0.2"
|
||||
|
||||
Reference in New Issue
Block a user