test(shared.just): BATS coverage for powerwash, toggle-tpm2 - #1034
Merged
Merged
Conversation
system_files/shared/usr/share/ublue-os/just/shared.just had zero test coverage. Its powerwash recipe performs an irreversible factory reset (sudo bootc install reset --experimental) behind two gum confirmations, with a bctl fast path that must bypass those prompts. tests/test_shared_just.bats extracts the powerwash shebang recipe body and executes it against stubbed bctl/gum/sudo binaries, asserting: bctl delegation short-circuits gum and sudo; declining either confirmation cancels without wiping; non-affirmative and empty answers decline; two prompts are always required; and the reset runs exactly once only after both confirmations. toggle-tpm2 is checked for its absolute luks-tpm2-autounlock path. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Signed-off-by: kubestellar-hive[bot] <kubestellar-hive[bot]@users.noreply.github.com>
This was referenced Aug 29, 2026
hanthor
approved these changes
Sep 2, 2026
hanthor
left a comment
Member
There was a problem hiding this comment.
New tests/test_shared_just.bats for the destructive powerwash recipe and toggle-tpm2; extracts and executes the real recipe body against stubbed bctl/gum/sudo, verifying both confirmations are required, non-affirmative/empty answers decline, and the reset command fires exactly once. CI test green; validate fails only on title-lint.
Generated by Claude Code
castrojo
approved these changes
Sep 10, 2026
castrojo
left a comment
Contributor
There was a problem hiding this comment.
Review: PR #1034 (test(shared.just): BATS coverage for powerwash, toggle-tpm2)
Findings
- Robust BATS test coverage in
tests/test_shared_just.batscoveringpowerwashandtoggle-tpm2with mocked confirmation prompts and error conditions. - All CI checks passing (8/8 pass, 0 fail).
Verdict
Approved.
pull Bot
pushed a commit
to joshyorko/common
that referenced
this pull request
Sep 10, 2026
…boot-key, toggle-user-motd, check-local-overrides, check-idle-power-draw, benchmark (projectbluefin#1048) ## Test Improvement Adds `tests/test_default_just.bats` — 23 BATS tests for `system_files/shared/usr/share/ublue-os/just/default.just`. Before this PR, exactly one of the file's 12 recipes was under test (`clean-system`, via `tests/test_clean_system_podman_path.bats`). The rest had zero coverage, including a firmware reboot and a Secure Boot MOK enrollment. ### Recipes claimed by this PR | Recipe | What is covered | |---|---| | `bios` | legacy-BIOS guard exits 1 and never reboots; EFI + confirm issues `systemctl reboot --firmware-setup`; declined confirmation does not reboot | | `bios-info` | all four `dmidecode -s` fields read under `sudo bash`; every field is labelled | | `enroll-secure-boot-key` | `mokutil --timeout -1` precedes the import; `akmods-ublue.der` is the imported cert; enrollment password guidance is printed | | `toggle-user-motd` | shim body is exactly `uwelcome toggle` | | `check-local-overrides` | only-in-`/etc` reporting; content divergence reporting; silence when trees match; `NO_COLOR=1` palette suppression; palette applied when unset; identity/credential `--exclude` set | | `check-idle-power-draw` | missing-`powerstat` guard exits 1 without invoking it; present path runs `powerstat -a -r` | | `benchmark` | `stress-ng` present runs the 1m matrix load without touching brew; accept path runs `brew install`/`brew link` then the load; decline path exits 0 with no install | ### Method Each shebang recipe body is extracted verbatim from `default.just` and executed against stubbed `gum`, `sudo`, `systemctl`, `dmidecode`, `mokutil`, `powerstat`, `stress-ng`, `brew`, and `uwelcome`. `/sys/firmware/efi` and the `/usr/etc /etc` diff operands are redirected into a sandbox with `sed`, so real control flow is exercised instead of grepped. `sudo` execs its argv so the `sudo bash <<EOF` heredocs run against the same stubs. ### Incidental finding pinned, not fixed `check-local-overrides` hardcodes `diff --color="always"`. `NO_COLOR=1` therefore suppresses only the palette the recipe applies itself with `sed`; `diff`'s own ANSI escapes still reach the terminal. One test documents that current behaviour so a future fix is visible. No production code is changed by this PR. ### Disjointness Explicitly claims only the seven recipes listed above in `default.just`, plus the new test file. - `device-info` (`default.just`) — **left to PR projectbluefin#1003**, not touched or asserted on. - `clean-system` (`default.just`) — already owned by `tests/test_clean_system_podman_path.bats`. - `shared.just` — left to PR projectbluefin#1034. - `system.just` — left to PR projectbluefin#1031. - `apps.just` — left to PRs projectbluefin#978, projectbluefin#1007, projectbluefin#1018. - `changelog.just` / `ublue-image-repo` — left to PR projectbluefin#1045. `Justfile`: one line, `bats tests/test_default_just.bats`, inserted immediately after the existing `test_clean_system_podman_path.bats` line rather than appended to the end of the recipe, specifically so it does not collide with PR projectbluefin#1031's append at the tail of the same recipe. `.github/workflows/unit-tests.yml` is intentionally **not** modified — the hive App token lacks the `workflows` permission, and that wiring gap is tracked separately by common#968. ### Verification ``` $ bats tests/test_default_just.bats 1..23 ok 1 .. ok 23 ``` ## Related Issue Refs projectbluefin#968 (the workflow-wiring half of the gap remains open). --- *Filed by quality agent (hold-gated mode). Human review required.* — hive: agent=quality backend=copilot model=claude-opus-5 Signed-off-by: quality <sec-check[bot]@users.noreply.github.com> Co-authored-by: quality <sec-check[bot]@users.noreply.github.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Test Improvement
Adds
tests/test_shared_just.bats— 14 BATS cases coveringsystem_files/shared/usr/share/ublue-os/just/shared.just, which had zerotest coverage.
Why this file
powerwashis the most destructive recipe in the repo: it ends insudo bootc install reset --experimental, an irreversible factory reset. It isguarded by two
gum chooseconfirmations plus abctl powerwashfast path.None of that gating was verified by any test.
How
The
powerwashbody is a#!/usr/bin/bashshebang recipe with nojustinterpolation, so the test extracts it verbatim and executes it against
stubbed
bctl/gum/sudobinaries. This exercises real control flow ratherthan grepping recipe text, and requires no
justbinary in CI.Asserted behavior:
bctlpresent → delegates tobctl powerwash, andgum/sudoare never invokedsudosudomaybe) and empty answers → treated as declinessudo bootc install reset --experimental, exactly oncetoggle-tpm2uses the absolute/usr/bin/luks-tpm2-autounlockpathAll 14 pass locally (bats 1.14.0). Mutation-checked: deleting the second
confirmation from
shared.justfails 3 of the tests.Scope / disjointness
Claimed ground:
tests/test_shared_just.batsonly — one new test file, noproduction code touched.
Deliberately does not touch
.github/workflows/unit-tests.yml(claimed byopen PRs #942 and #961) and does not touch
system.just(#942),apps.just(#1007),default.just(#1003),bonedigger-report(#1010),hooks.py(#1011), orublue-fastfetch(#1005). CI registration of this andthe other test files not yet wired into
unit-tests.ymlis tracked separatelyby #968.
Filed by quality agent (hold-gated mode). Human review required. Do not merge on my behalf.
— hive: agent=quality backend=copilot model=claude-opus-5