Files
NeoTachyon/tests/selector_state.sh

104 lines
2.6 KiB
Bash

#!/usr/bin/env bash
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
TACHYON_LIB="$ROOT_DIR/tachyon/files/usr/lib"
LIFECYCLE_UC="$TACHYON_LIB/service/lifecycle.uc"
WORK_DIR="$(mktemp -d)"
cleanup() {
rm -rf "$WORK_DIR"
}
trap cleanup EXIT
fail() {
printf 'FAIL: %s\n' "$1" >&2
exit 1
}
lifecycle_ucode() {
TACHYON_RUNTIME_STATE_DIR="$WORK_DIR/run" \
ucode -L "$TACHYON_LIB" "$LIFECYCLE_UC" "$@"
}
json_flatten() {
tr -d ' \t\r\n'
}
cat >"$WORK_DIR/before.json" <<'JSON'
{
"proxies": {
"main-out": {
"type": "Selector",
"now": "main-2-out",
"all": [ "main-1-out", "main-2-out" ]
},
"urltest-out": {
"type": "URLTest",
"now": "main-3-out",
"all": [ "main-3-out", "main-4-out" ]
},
"broken-out": {
"type": "Selector",
"now": "missing-out",
"all": [ "other-out" ]
}
}
}
JSON
snapshot="$(lifecycle_ucode selector-state-from-proxies-fixture "$WORK_DIR/before.json" | json_flatten)"
[ "$snapshot" = '{"main-out":"main-2-out"}' ] ||
fail "selector snapshot should keep only valid selector selections, got: $snapshot"
cat >"$WORK_DIR/snapshot.json" <<JSON
$snapshot
JSON
cat >"$WORK_DIR/after.json" <<'JSON'
{
"proxies": {
"main-out": {
"type": "Selector",
"now": "main-1-out",
"all": [ "main-1-out", "main-2-out" ]
},
"same-out": {
"type": "Selector",
"now": "same-1-out",
"all": [ "same-1-out" ]
}
}
}
JSON
restore_pairs="$(lifecycle_ucode selector-restore-pairs-fixture "$WORK_DIR/snapshot.json" "$WORK_DIR/after.json" | json_flatten)"
[ "$restore_pairs" = '[{"group":"main-out","proxy":"main-2-out"}]' ] ||
fail "restore pairs should contain only changed still-valid selector selections, got: $restore_pairs"
cat >"$WORK_DIR/already-selected.json" <<'JSON'
{
"proxies": {
"main-out": {
"type": "Selector",
"now": "main-2-out",
"all": [ "main-1-out", "main-2-out" ]
}
}
}
JSON
restore_pairs="$(lifecycle_ucode selector-restore-pairs-fixture "$WORK_DIR/snapshot.json" "$WORK_DIR/already-selected.json" | json_flatten)"
[ "$restore_pairs" = '[]' ] ||
fail "restore pairs should be empty when the selection is already active, got: $restore_pairs"
capture_calls="$(grep -Fc 'let selector_state = capture_selector_state();' "$LIFECYCLE_UC")"
[ "$capture_calls" -ge 2 ] ||
fail "full restart paths should capture selector state before stopping runtime"
restore_calls="$(grep -Fc 'restore_selector_state(selector_state);' "$LIFECYCLE_UC")"
[ "$restore_calls" -ge 2 ] ||
fail "full restart paths should restore selector state after runtime start"
printf 'selector state checks passed\n'