57 lines
1.5 KiB
Bash
Executable File
57 lines
1.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
set -euo pipefail
|
|
|
|
fail() {
|
|
printf 'Panama action IPC contract: %s\n' "$1" >&2
|
|
exit 1
|
|
}
|
|
|
|
active_target=""
|
|
original_state=""
|
|
|
|
restore_target() {
|
|
local target="$1" expected="$2" current
|
|
current="$(qs ipc call "$target" status 2>/dev/null || true)"
|
|
if [[ $current != "$expected" && ( $expected == true || $expected == false ) ]]; then
|
|
qs ipc call "$target" toggle >/dev/null 2>&1 || true
|
|
fi
|
|
}
|
|
|
|
cleanup() {
|
|
if [[ -n $active_target ]]; then
|
|
restore_target "$active_target" "$original_state"
|
|
fi
|
|
}
|
|
trap cleanup EXIT
|
|
|
|
exercise_toggle() {
|
|
local target="$1" before after restored
|
|
before="$(qs ipc call "$target" status)"
|
|
active_target="$target"
|
|
original_state="$before"
|
|
|
|
[[ $before == true || $before == false ]] \
|
|
|| fail "$target returned a non-boolean status: $before"
|
|
|
|
after="$(qs ipc call "$target" toggle)"
|
|
[[ $after != "$before" ]] \
|
|
|| fail "$target did not change state: before=$before after=$after"
|
|
|
|
restored="$(qs ipc call "$target" toggle)"
|
|
[[ $restored == "$before" ]] \
|
|
|| fail "$target did not restore its original state: before=$before restored=$restored"
|
|
|
|
active_target=""
|
|
original_state=""
|
|
}
|
|
|
|
ipc="$(qs ipc show)"
|
|
rg -q '^target caffeine$' <<<"$ipc" || fail 'caffeine IPC target is missing'
|
|
rg -q '^target night-light$' <<<"$ipc" || fail 'night-light IPC target is missing'
|
|
|
|
exercise_toggle caffeine
|
|
exercise_toggle night-light
|
|
|
|
printf 'Panama action IPC contract: PASS\n'
|