Files
omarchy/test/shell.d/factory-reset-elevation-test.sh
T

77 lines
3.4 KiB
Bash
Executable File

#!/bin/bash
set -euo pipefail
source "$(dirname "$0")/base-test.sh"
if (( EUID == 0 )); then
skip "factory-reset self-elevation requires an unprivileged caller"
exit 0
fi
tmp=$(mktemp -d)
trap 'rm -rf "$tmp"' EXIT
mkdir -p "$tmp/bin" "$tmp/checkout with spaces"
# Exercise the real startup, but never include the destructive reset body.
awk '
/^export PATH=/ { found = 1; print "exit 99"; exit }
{ print }
END { if (!found) exit 1 }
' "$ROOT/bin/omarchy-system-factory-reset" >"$tmp/checkout with spaces/reset"
grep -Fxq 'PACKAGED_PATH=/usr/bin/omarchy-system-factory-reset' "$ROOT/bin/omarchy-system-factory-reset" || fail "factory reset pins the packaged path"
sed -i "s|^PACKAGED_PATH=.*|PACKAGED_PATH=\"$tmp/packaged-reset\"|" "$tmp/checkout with spaces/reset"
cp "$tmp/checkout with spaces/reset" "$tmp/packaged-reset"
chmod +x "$tmp/checkout with spaces/reset" "$tmp/packaged-reset"
ln -s "$tmp/checkout with spaces/reset" "$tmp/reset-link"
cat >"$tmp/bin/sudo" <<'SH'
#!/bin/bash
printf '%s\0' "$@" >"$CALL_LOG"
exit "${SUDO_STATUS:-0}"
SH
chmod +x "$tmp/bin/sudo"
args=('argument with spaces' '' '--flag' '$(touch should-not-run)' $'two\nlines')
expected=(env 'GUM_INPUT_PROMPT=Reset this computer? ' "$tmp/packaged-reset" "${args[@]}")
for invocation in "$tmp/checkout with spaces/reset" './checkout with spaces/reset' "$tmp/reset-link" "$tmp/packaged-reset" reset; do
for status in 0 1 127; do
actual_status=0
(cd "$tmp" && env -i HOME="$tmp" PATH="$tmp/bin:$tmp/checkout with spaces:/usr/bin:/bin" \
OMARCHY_PATH="$tmp/checkout with spaces" PACKAGED_PATH="$tmp/wrong-target" \
GUM_INPUT_PROMPT='Reset this computer? ' CALL_LOG="$tmp/call" SUDO_STATUS="$status" \
"$invocation" "${args[@]}") || actual_status=$?
(( actual_status == status )) || fail "elevation status is preserved for $invocation"
mapfile -d '' -t actual <"$tmp/call"
(( ${#actual[@]} == ${#expected[@]} )) || fail "elevation argument count is preserved"
for i in "${!expected[@]}"; do
[[ ${actual[i]} == "${expected[i]}" ]] || fail "elevation argument $i is preserved for $invocation"
done
[[ ! -e $tmp/should-not-run ]] || fail "caller arguments were executed"
done
pass "factory reset pins $invocation to the packaged command and preserves arguments, styling and status"
done
if unshare -Ur true >/dev/null 2>&1; then
status=0
unshare -Ur "$tmp/packaged-reset" || status=$?
(( status == 99 )) || fail "matching root invocation did not reach the guarded body"
pass "matching packaged root invocation reaches the reset body"
else
skip "user namespaces unavailable; root invocation coverage"
fi
# A checkout must not hand off to older installed code, even with explicit sudo.
printf '\n# older packaged copy\n' >>"$tmp/packaged-reset"
rm -f "$tmp/call"
if CALL_LOG="$tmp/call" PATH="$tmp/bin:/usr/bin:/bin" "$tmp/reset-link" >"$tmp/mismatch" 2>&1; then
fail "mismatched reset implementation was accepted"
fi
[[ ! -e $tmp/call ]] || fail "mismatched reset requested elevation"
grep -Fq 'Install the matching Omarchy package' "$tmp/mismatch" || fail "mismatch explains recovery"
if unshare -Ur true >/dev/null 2>&1; then
status=0
unshare -Ur "$tmp/reset-link" >"$tmp/root-mismatch" 2>&1 || status=$?
(( status == 1 )) || fail "root invocation did not refuse mismatch before the reset body"
pass "root checkout invocation refuses a mismatched packaged reset"
fi
pass "mismatched checkout refuses before elevation"