#!/usr/bin/env bash # panama-power-profile reads and sets the system power profile. # # Runs against a stubbed busctl. The real daemon is a SYSTEM service shared with # everything else on the machine, and a test that flipped the daily driver into # power-saver and crashed before restoring would leave it there. # # The parsing is the fragile part. busctl renders the Profiles property flat: # # v aa{sv} 3 2 "Profile" s "power-saver" "Driver" s "tuned" 2 "Profile" ... # # so profile names and driver names sit in the same stream. A pattern loose # enough to match both reports the driver as an extra profile -- and on this # machine the driver is literally called "tuned", which reads exactly like a # plausible fourth profile. set -uo pipefail repo_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" helper="$repo_dir/config/dot/quickshell/scripts/panama-power-profile" fail() { printf 'power profile contract: %s\n' "$1" >&2 exit 1 } stub_dir="$(mktemp -d /tmp/panama-power.XXXXXX)" trap 'rm -rf "$stub_dir"' EXIT cat >"$stub_dir/busctl" <<'STUB' #!/usr/bin/env bash # Records set-property calls so the test can assert what was written. case "${1:-}" in status) [[ "${PANAMA_POWER_FAKE:-up}" == "down" ]] && exit 1 exit 0 ;; get-property) case "${5:-}" in ActiveProfile) printf 's "performance"\n' ;; PerformanceDegraded) printf 's "%s"\n' "${PANAMA_POWER_DEGRADED:-}" ;; Profiles) if [[ "${PANAMA_POWER_FAKE:-up}" == "empty" ]]; then printf 'v aa{sv} 0\n' else printf 'v aa{sv} 3 2 "Profile" s "power-saver" "Driver" s "tuned" 2 "Profile" s "balanced" "Driver" s "tuned" 2 "Profile" s "performance" "Driver" s "tuned"\n' fi ;; esac exit 0 ;; set-property) printf '%s\n' "${!#}" >>"$PANAMA_POWER_SET_LOG" exit 0 ;; esac exit 0 STUB chmod +x "$stub_dir/busctl" export PANAMA_POWER_SET_LOG="$stub_dir/sets.log" : >"$PANAMA_POWER_SET_LOG" run() { PATH="$stub_dir:$PATH" "$helper" "$@"; } # ── Parsing ────────────────────────────────────────────────────────────────── out="$(run list)" jq -e . >/dev/null 2>&1 <<<"$out" || fail "list did not emit JSON: $out" [[ "$(jq -r '.profiles | length' <<<"$out")" == "3" ]] \ || fail "expected exactly three profiles; a fourth usually means the Driver value was parsed as one: $out" jq -e '.profiles == ["power-saver", "balanced", "performance"]' >/dev/null <<<"$out" \ || fail "profiles were parsed wrongly or reordered: $out" jq -e '.profiles | index("tuned") == null' >/dev/null <<<"$out" \ || fail 'the driver name "tuned" was reported as a profile' [[ "$(jq -r '.active' <<<"$out")" == "performance" ]] \ || fail "the active profile was not read: $out" # ── Degradation is surfaced, since it makes the active profile a lie ───────── out="$(PANAMA_POWER_DEGRADED="lap-detected" run list)" [[ "$(jq -r '.degraded' <<<"$out")" == "lap-detected" ]] \ || fail "a degraded performance state was not reported: $out" # ── Setting ────────────────────────────────────────────────────────────────── run set balanced [[ "$(tail -1 "$PANAMA_POWER_SET_LOG")" == "balanced" ]] \ || fail "set did not write the requested profile: $(cat "$PANAMA_POWER_SET_LOG")" before="$(wc -l <"$PANAMA_POWER_SET_LOG")" run set 'evil; rm -rf /' 2>/dev/null [[ "$(wc -l <"$PANAMA_POWER_SET_LOG")" == "$before" ]] \ || fail 'a profile name with shell metacharacters reached the system service' # ── No daemon, and a daemon with nothing to offer, are both states ─────────── out="$(PANAMA_POWER_FAKE=down run list)" jq -e '.profiles == [] and .error != ""' >/dev/null <<<"$out" \ || fail "a missing power daemon must be reported with a reason: $out" out="$(PANAMA_POWER_FAKE=empty run list)" jq -e '.profiles == [] and .error != ""' >/dev/null <<<"$out" \ || fail "a daemon offering no profiles must be reported, not shown as an empty card: $out" printf 'power profile contract: PASS\n'