Files
omarchy/plugins/omaplug/tests/update-helper-test.sh
T
asepharyana 1cdb82a76f Sync config from arch
- hypr/apps.lua
- hypr/autostart.lua
- hypr/envs.lua
- hypr/hyprland.lua
- hypr/hyprsunset.conf
- hypr/input.lua
- hypr/looknfeel.lua
- hypr/omasettings.lua
- hypr/xdph.conf
- omarchy/branding/about.txt
- omarchy/branding/screensaver.txt
- omarchy/extensions/omarchy-menu.jsonc
- omarchy/hooks/battery-low.d/play-warning-sound.sample
- omarchy/hooks/font-set.d/show-font-notification.sample
- omarchy/hooks/post-boot.d/weather.sample
- omarchy/hooks/post-update.d/install-voxtype.hook
- omarchy/hooks/post-update.d/setup-agent.hook
- omarchy/hooks/post-update.d/setup-fingerprint.hook
- omarchy/hooks/post-update.d/show-update-notification.sample
- omarchy/hooks/pre-refresh-pacman.d/add-custom-repo.sample
- omarchy/hooks/theme-set.d/show-theme-notification.sample
- omarchy/shell.json
- omarchy/shell.toml
- omarchy/theme.name
- omarchy/themes/azure-glow/README.md
- omarchy/themes/azure-glow/alacritty.toml
- omarchy/themes/azure-glow/btop.theme
- omarchy/themes/azure-glow/hyprland.conf
- omarchy/themes/azure-glow/hyprlock.conf
- omarchy/themes/azure-glow/icons.theme
- … 269 more
2026-09-23 15:19:12 +07:00

125 lines
3.5 KiB
Bash

#!/bin/bash
set -euo pipefail
ROOT=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/.." && pwd)
TMP=$(mktemp -d)
trap 'rm -rf -- "$TMP"' EXIT
BIN="$TMP/bin"
LOG="$TMP/calls.log"
STATUS="$TMP/update.status"
TEST_HOME="$TMP/home"
PLUGINS="$TEST_HOME/.config/omarchy/plugins"
mkdir -p -- "$BIN" "$PLUGINS"
make_plugin() {
local id="$1"
local dir="$PLUGINS/$id"
git init -q -b main "$dir"
git -C "$dir" config user.name "Omaplug Tests"
git -C "$dir" config user.email "omaplug-tests@example.invalid"
printf '{"id":"%s"}\n' "$id" > "$dir/manifest.json"
git -C "$dir" add manifest.json
git -C "$dir" commit -qm "fixture"
}
for id in good fail slow dirty detached; do make_plugin "$id"; done
printf '\n' >> "$PLUGINS/dirty/manifest.json"
git -C "$PLUGINS/detached" checkout -q --detach
ln -s -- "$PLUGINS/good" "$PLUGINS/linked"
cat > "$BIN/omarchy" <<'EOF'
#!/bin/bash
printf '%s\n' "$*" >> "$OMAPLUG_TEST_LOG"
case "${3:-}" in
slow) sleep 0.4 ;;
esac
if [[ ${3:-} == fail ]]; then
printf 'could not update %s\n' "$3" >&2
exit 7
fi
printf 'updated %s\n' "${3:-}"
EOF
chmod +x "$BIN/omarchy"
export PATH="$BIN:$PATH"
export OMAPLUG_TEST_LOG="$LOG"
export HOME="$TEST_HOME"
# A prior run may have left a status file created under a permissive umask.
# The helper must tighten it before writing any job details.
: > "$STATUS"
chmod 0644 "$STATUS"
assert_line() {
local line="$1"
local file="$2"
grep -Fqx -- "$line" "$file" || {
printf 'FAIL: missing line %q in %s\n' "$line" "$file" >&2
cat "$file" >&2
exit 1
}
}
if "$ROOT/update-helper.sh" "$STATUS" job-direct good fail dirty detached linked 'bad/id'; then
printf 'FAIL: a partially failed update job returned success\n' >&2
exit 1
fi
assert_line $'job\tjob-direct' "$STATUS"
assert_line $'start\tgood' "$STATUS"
assert_line $'ok\tgood\tupdated good' "$STATUS"
assert_line $'start\tfail' "$STATUS"
assert_line $'failed\tfail\tcould not update fail' "$STATUS"
assert_line $'failed\tdirty\tplugin gained local changes after the update check' "$STATUS"
assert_line $'failed\tdetached\tplugin is on a detached HEAD' "$STATUS"
assert_line $'failed\tlinked\tplugin became a symlink after the update check' "$STATUS"
assert_line $'failed\tbad/id\tinvalid plugin id' "$STATUS"
assert_line $'done\t1\t5' "$STATUS"
[[ $(stat -c '%a' "$STATUS") == 600 ]] || {
printf 'FAIL: status file mode is %s instead of 600\n' "$(stat -c '%a' "$STATUS")" >&2
exit 1
}
[[ $(tail -n 1 "$STATUS") == $'done\t1\t5' ]] || {
printf 'FAIL: done is not the final status record\n' >&2
cat "$STATUS" >&2
exit 1
}
assert_line 'plugin update good --yes' "$LOG"
assert_line 'plugin update fail --yes' "$LOG"
[[ $(wc -l < "$LOG") -eq 2 ]] || {
printf 'FAIL: invalid plugin id reached omarchy\n' >&2
cat "$LOG" >&2
exit 1
}
# A live runner owns the stable status path. A second runner must fail without
# replacing or appending to that job's status stream.
: > "$LOG"
"$ROOT/update-helper.sh" "$STATUS" job-first slow &
first_pid=$!
for _ in {1..100}; do
[[ -f $STATUS.flock ]] && break
sleep 0.01
done
sleep 0.05
if "$ROOT/update-helper.sh" "$STATUS" job-second good; then
printf 'FAIL: a concurrent update runner acquired the same lock\n' >&2
exit 1
else
second_rc=$?
fi
[[ $second_rc -eq 3 ]] || {
printf 'FAIL: concurrent runner returned %s instead of 3\n' "$second_rc" >&2
exit 1
}
wait "$first_pid"
assert_line $'job\tjob-first' "$STATUS"
if grep -Fq $'job\tjob-second' "$STATUS"; then
printf 'FAIL: concurrent runner clobbered the active status\n' >&2
exit 1
fi
printf 'update-helper-test: ok\n'