+162
@@ -0,0 +1,162 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
source "$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)/base-test.sh"
|
||||
|
||||
test_tmp=$(mktemp -d)
|
||||
trap 'rm -rf "$test_tmp"' EXIT
|
||||
|
||||
stub_bin="$test_tmp/bin"
|
||||
mkdir -p "$stub_bin"
|
||||
|
||||
cat >"$stub_bin/systemctl" <<'STUB'
|
||||
#!/bin/bash
|
||||
|
||||
printf '%s\n' "$*" >>"$SYSTEMCTL_CALLS"
|
||||
|
||||
case "$*" in
|
||||
'--user show-environment')
|
||||
[[ ${MANAGER_AVAILABLE:-true} == "true" ]]
|
||||
;;
|
||||
'--user daemon-reload')
|
||||
if [[ ${FAIL_SYSTEMCTL_ACTION:-} == "daemon-reload" ]]; then
|
||||
echo "reload failed" >&2
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
'--user show --property=ActiveState --value graphical-session.target')
|
||||
if [[ ${FAIL_SYSTEMCTL_ACTION:-} == "show-graphical" ]]; then
|
||||
echo "state lookup failed" >&2
|
||||
exit 1
|
||||
fi
|
||||
printf '%s\n' "${GRAPHICAL_STATE:-inactive}"
|
||||
;;
|
||||
'--user show --property=ActiveState --value omarchy-sleep-lock.service')
|
||||
printf '%s\n' "${SLEEP_LOCK_STATE:-inactive}"
|
||||
;;
|
||||
'--user restart omarchy-sleep-lock.service')
|
||||
if [[ ${FAIL_SYSTEMCTL_ACTION:-} == "restart" ]]; then
|
||||
echo "restart failed" >&2
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
'--user stop omarchy-sleep-lock.service')
|
||||
if [[ ${FAIL_SYSTEMCTL_ACTION:-} == "stop" ]]; then
|
||||
echo "stop failed" >&2
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
'--user reset-failed omarchy-sleep-lock.service') ;;
|
||||
*) exit 1 ;;
|
||||
esac
|
||||
STUB
|
||||
chmod +x "$stub_bin/systemctl"
|
||||
|
||||
migration="$ROOT/migrations/1785608166.sh"
|
||||
|
||||
run_migration() {
|
||||
local home="$1" calls="$2"
|
||||
shift 2
|
||||
|
||||
mkdir -p "$home/run"
|
||||
HOME="$home" XDG_CONFIG_HOME="$home/.config" XDG_RUNTIME_DIR="$home/run" \
|
||||
SYSTEMCTL_CALLS="$calls" PATH="$stub_bin:$PATH" \
|
||||
"$@" bash -euo pipefail "$migration"
|
||||
}
|
||||
|
||||
active_home="$test_tmp/active-home"
|
||||
active_calls="$test_tmp/active-calls"
|
||||
mkdir -p "$active_home/.config/systemd/user"
|
||||
printf '%s\n' '[Service]' 'ExecStart=/usr/bin/omarchy-system-sleep-monitor' \
|
||||
>"$active_home/.config/systemd/user/omarchy-sleep-lock.service"
|
||||
|
||||
run_migration "$active_home" "$active_calls" \
|
||||
env GRAPHICAL_STATE=active SLEEP_LOCK_STATE=active >/dev/null
|
||||
|
||||
dropin="$active_home/.config/systemd/user/omarchy-sleep-lock.service.d/90-omarchy-session-environment.conf"
|
||||
grep -Fx 'After=dbus.socket wayland-session-waitenv.service' "$dropin" >/dev/null ||
|
||||
fail "sleep lock migration orders a retained unit after the session environment import"
|
||||
grep -Fx 'PartOf=graphical-session.target' "$dropin" >/dev/null ||
|
||||
fail "sleep lock migration ties a retained unit to the graphical session lifecycle"
|
||||
grep -Fx 'ConditionEnvironment=OMARCHY_PATH' "$dropin" >/dev/null ||
|
||||
fail "sleep lock migration gates a retained unit on the Omarchy path"
|
||||
grep -Fx 'ConditionEnvironment=WAYLAND_DISPLAY' "$dropin" >/dev/null ||
|
||||
fail "sleep lock migration gates a retained unit on the Wayland display"
|
||||
pass "sleep lock migration repairs retained full-unit overrides with a drop-in"
|
||||
|
||||
grep -Fx -- '--user daemon-reload' "$active_calls" >/dev/null ||
|
||||
fail "sleep lock migration reloads the live user manager"
|
||||
grep -Fx -- '--user reset-failed omarchy-sleep-lock.service' "$active_calls" >/dev/null ||
|
||||
fail "sleep lock migration cannot recover a start-limited monitor"
|
||||
grep -Fx -- '--user restart omarchy-sleep-lock.service' "$active_calls" >/dev/null ||
|
||||
fail "sleep lock migration leaves an active monitor with its inherited environment"
|
||||
grep -Fx -- '--user stop omarchy-sleep-lock.service' "$active_calls" >/dev/null &&
|
||||
fail "sleep lock migration stops the monitor inside an active graphical session"
|
||||
pass "sleep lock migration replaces the monitor inside an active graphical session"
|
||||
|
||||
inactive_home="$test_tmp/inactive-home"
|
||||
inactive_calls="$test_tmp/inactive-calls"
|
||||
mkdir -p "$inactive_home"
|
||||
|
||||
run_migration "$inactive_home" "$inactive_calls" \
|
||||
env GRAPHICAL_STATE=inactive >/dev/null
|
||||
|
||||
grep -Fx -- '--user stop omarchy-sleep-lock.service' "$inactive_calls" >/dev/null ||
|
||||
fail "sleep lock migration leaves a stale monitor running after logout"
|
||||
grep -Fx -- '--user restart omarchy-sleep-lock.service' "$inactive_calls" >/dev/null &&
|
||||
fail "sleep lock migration starts the monitor outside a graphical session"
|
||||
pass "sleep lock migration stops a monitor left behind after logout"
|
||||
|
||||
failed_calls="$test_tmp/failed-calls"
|
||||
if run_migration "$test_tmp/failed-home" "$failed_calls" \
|
||||
env GRAPHICAL_STATE=active SLEEP_LOCK_STATE=active FAIL_SYSTEMCTL_ACTION=restart \
|
||||
>"$test_tmp/failed-output" 2>&1; then
|
||||
fail "sleep lock migration marks a failed active-session repair complete"
|
||||
fi
|
||||
grep -F 'will be retried by omarchy-migrate' "$test_tmp/failed-output" >/dev/null ||
|
||||
fail "sleep lock migration does not explain that a failed repair remains pending"
|
||||
pass "sleep lock migration keeps an active-session repair failure retryable"
|
||||
|
||||
reload_failed_calls="$test_tmp/reload-failed-calls"
|
||||
if run_migration "$test_tmp/reload-failed-home" "$reload_failed_calls" \
|
||||
env FAIL_SYSTEMCTL_ACTION=daemon-reload >"$test_tmp/reload-failed-output" 2>&1; then
|
||||
fail "sleep lock migration ignores a failed user-manager reload"
|
||||
fi
|
||||
grep -F 'Could not reload the user service manager' "$test_tmp/reload-failed-output" >/dev/null ||
|
||||
fail "sleep lock migration does not report a failed user-manager reload"
|
||||
pass "sleep lock migration keeps a failed user-manager reload retryable"
|
||||
|
||||
stop_failed_calls="$test_tmp/stop-failed-calls"
|
||||
if run_migration "$test_tmp/stop-failed-home" "$stop_failed_calls" \
|
||||
env GRAPHICAL_STATE=inactive FAIL_SYSTEMCTL_ACTION=stop \
|
||||
>"$test_tmp/stop-failed-output" 2>&1; then
|
||||
fail "sleep lock migration ignores a stale monitor that could not be stopped"
|
||||
fi
|
||||
grep -F 'Could not stop stale omarchy-sleep-lock.service' "$test_tmp/stop-failed-output" >/dev/null ||
|
||||
fail "sleep lock migration does not report a stale monitor stop failure"
|
||||
pass "sleep lock migration keeps a stale-monitor stop failure retryable"
|
||||
|
||||
state_failed_calls="$test_tmp/state-failed-calls"
|
||||
if run_migration "$test_tmp/state-failed-home" "$state_failed_calls" \
|
||||
env FAIL_SYSTEMCTL_ACTION=show-graphical >"$test_tmp/state-failed-output" 2>&1; then
|
||||
fail "sleep lock migration ignores a failed session-state inspection"
|
||||
fi
|
||||
grep -F 'Could not inspect graphical-session.target' "$test_tmp/state-failed-output" >/dev/null ||
|
||||
fail "sleep lock migration does not report a failed session-state inspection"
|
||||
pass "sleep lock migration keeps an indeterminate session repair retryable"
|
||||
|
||||
deferred_home="$test_tmp/deferred-home"
|
||||
deferred_calls="$test_tmp/deferred-calls"
|
||||
mkdir -p "$deferred_home/.config/systemd/user"
|
||||
touch "$deferred_home/.config/systemd/user/omarchy-sleep-lock.service"
|
||||
|
||||
run_migration "$deferred_home" "$deferred_calls" \
|
||||
env MANAGER_AVAILABLE=false >/dev/null
|
||||
|
||||
[[ -f $deferred_home/.config/systemd/user/omarchy-sleep-lock.service.d/90-omarchy-session-environment.conf ]] ||
|
||||
fail "sleep lock migration does not persist the repair without a live user manager"
|
||||
deferred_call_count=$(wc -l <"$deferred_calls")
|
||||
(( deferred_call_count == 1 )) ||
|
||||
fail "sleep lock migration tries to mutate a user manager that is not running"
|
||||
pass "sleep lock migration defers safely when no user manager is running"
|
||||
@@ -16,6 +16,16 @@ sleep_service="$ROOT/default/systemd/user/omarchy-sleep-lock.service"
|
||||
grep -Fx 'ExecStart=/usr/bin/omarchy-system-sleep-monitor' "$sleep_service" >/dev/null
|
||||
pass "sleep lock service uses the package-backed monitor path"
|
||||
|
||||
grep -Fx 'After=dbus.socket wayland-session-waitenv.service' "$sleep_service" >/dev/null ||
|
||||
fail "sleep lock monitor starts before UWSM imports the graphical session environment"
|
||||
grep -Fx 'PartOf=graphical-session.target' "$sleep_service" >/dev/null ||
|
||||
fail "sleep lock monitor survives logout with a stale Wayland environment"
|
||||
grep -Fx 'ConditionEnvironment=OMARCHY_PATH' "$sleep_service" >/dev/null ||
|
||||
fail "sleep lock monitor can start without the Omarchy shell path"
|
||||
grep -Fx 'ConditionEnvironment=WAYLAND_DISPLAY' "$sleep_service" >/dev/null ||
|
||||
fail "sleep lock monitor can start without a Wayland display"
|
||||
pass "sleep lock service follows the initialized graphical session"
|
||||
|
||||
first_run_units="$ROOT/install/user/first-run/enable-user-units.sh"
|
||||
grep -Fx 'systemctl --user daemon-reload' "$first_run_units" >/dev/null
|
||||
grep -F 'omarchy-sleep-lock.service' "$first_run_units" >/dev/null
|
||||
@@ -23,6 +33,7 @@ pass "first-run reloads and enables the sleep lock service"
|
||||
|
||||
upgrade_to_quattro="$ROOT/bin/omarchy-upgrade-to-quattro"
|
||||
grep -F '6870b232a6c0474b59187882e6d25ae771bba735098bcbedef8a2b73b97e2b6a' "$upgrade_to_quattro" >/dev/null
|
||||
grep -F 'bcd1a76cb5c63514922bc5e11af22ae480fc6d06a99863364e02bdf3c7bdceaf' "$upgrade_to_quattro" >/dev/null
|
||||
grep -F 'ExecStart=%h/.local/share/omarchy/bin/omarchy-system-sleep-monitor' "$upgrade_to_quattro" >/dev/null
|
||||
grep -F 'ExecStart=/usr/bin/omarchy-system-sleep-monitor' "$upgrade_to_quattro" >/dev/null
|
||||
grep -F 'reset-failed omarchy-sleep-lock.service' "$upgrade_to_quattro" >/dev/null
|
||||
|
||||
Reference in New Issue
Block a user