61 lines
1.9 KiB
Bash
61 lines
1.9 KiB
Bash
|
|
#!/usr/bin/env bash
|
||
|
|
# Offline determinism test for split + normalize (scripts/ha/lib/split.py,
|
||
|
|
# normalize.py): running the pipeline twice against the same fixture must
|
||
|
|
# produce byte-identical output. No network access, no HA instance needed.
|
||
|
|
set -euo pipefail
|
||
|
|
|
||
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||
|
|
HA_LIB_DIR="$SCRIPT_DIR/../lib"
|
||
|
|
FIXTURE="$SCRIPT_DIR/fixtures/automations.yaml"
|
||
|
|
|
||
|
|
run_once() {
|
||
|
|
local out_root="$1"
|
||
|
|
mkdir -p "$out_root"
|
||
|
|
python3 "$HA_LIB_DIR/split.py" "$FIXTURE" "$out_root" > /dev/null
|
||
|
|
}
|
||
|
|
|
||
|
|
TMP1="$(mktemp -d)"
|
||
|
|
TMP2="$(mktemp -d)"
|
||
|
|
trap 'rm -rf "$TMP1" "$TMP2"' EXIT
|
||
|
|
|
||
|
|
run_once "$TMP1"
|
||
|
|
run_once "$TMP2"
|
||
|
|
|
||
|
|
fail=0
|
||
|
|
|
||
|
|
if ! diff -r "$TMP1/automations" "$TMP2/automations" > /dev/null; then
|
||
|
|
echo "FAIL: split+normalize output differs between two runs of the same fixture" >&2
|
||
|
|
diff -r "$TMP1/automations" "$TMP2/automations" >&2 || true
|
||
|
|
fail=1
|
||
|
|
else
|
||
|
|
echo "PASS: split+normalize is deterministic across two runs"
|
||
|
|
fi
|
||
|
|
|
||
|
|
expected_files=(morning_lights.yaml goodnight.yaml low_battery_alert.yaml)
|
||
|
|
for f in "${expected_files[@]}"; do
|
||
|
|
if [[ ! -f "$TMP1/automations/$f" ]]; then
|
||
|
|
echo "FAIL: expected split output '$f' not found" >&2
|
||
|
|
fail=1
|
||
|
|
fi
|
||
|
|
done
|
||
|
|
if [[ "$fail" -eq 0 ]]; then
|
||
|
|
echo "PASS: expected per-id automation files present"
|
||
|
|
fi
|
||
|
|
|
||
|
|
# re-running split against a directory that already holds a stale file (from
|
||
|
|
# a since-removed automation id) must remove it — split output should always
|
||
|
|
# mirror the source exactly, never accumulate stale files.
|
||
|
|
STALE_DIR="$(mktemp -d)"
|
||
|
|
trap 'rm -rf "$STALE_DIR"' EXIT
|
||
|
|
mkdir -p "$STALE_DIR/automations"
|
||
|
|
touch "$STALE_DIR/automations/removed_automation.yaml"
|
||
|
|
python3 "$HA_LIB_DIR/split.py" "$FIXTURE" "$STALE_DIR" > /dev/null
|
||
|
|
if [[ -f "$STALE_DIR/automations/removed_automation.yaml" ]]; then
|
||
|
|
echo "FAIL: stale split output was not cleaned up" >&2
|
||
|
|
fail=1
|
||
|
|
else
|
||
|
|
echo "PASS: stale split output is cleaned up on re-run"
|
||
|
|
fi
|
||
|
|
|
||
|
|
exit "$fail"
|