← back to Exo Cluster Watchdog

test-instance-load-guard.sh

28 lines

#!/bin/bash
# Negative test for instance-load-guard.sh (TK-11996). Proves the guard goes RED (BLOCK) on
# each injected fault and GREEN (ALLOW) only on a healthy, measured input. Touches no live data.
set -uo pipefail
G="$(cd "$(dirname "$0")" && pwd)/instance-load-guard.sh"
T=$(mktemp -d); trap 'rm -rf "$T"' EXIT
NOW=1790370000
iso(){ python3 -c "import datetime,sys;print(datetime.datetime.fromtimestamp(int(sys.argv[1]),datetime.timezone.utc).strftime('%Y-%m-%dT%H:%M:%SZ'))" "$1"; }
: > "$T/empty.log"
for i in 1 2 3 4 5; do echo "$(iso $((NOW - i*600))) WARN :: 0 instances on ring -> re-POSTed m (http 200)" >> "$T/thrash.log"; done
echo "$(iso $((NOW - 7200))) WARN :: re-POSTed old (http 200)" > "$T/old.log"
pass=0; fail=0
check(){ # name expect(ALLOW|BLOCK) uptime memfree alerts [lock]
  out=$(GUARD_TEST_LOCK="${6:-/nonexistent}" GUARD_TEST_NOW=$NOW GUARD_TEST_UPTIME="$3" GUARD_TEST_MEMFREE="$4" GUARD_TEST_ALERTS="$5" bash "$G" --test)
  if [[ "$out" == "$2"* ]]; then pass=$((pass+1)); echo "ok   $1 -> $out"; else fail=$((fail+1)); echo "FAIL $1 -> $out (expected $2)"; fi
}
check "healthy"              ALLOW 7200 60 "$T/empty.log"
check "old re-POST ignored"  ALLOW 7200 60 "$T/old.log"
check "boot grace"           BLOCK 300  60 "$T/empty.log"
check "memory 17% (11:45)"   BLOCK 7200 17 "$T/empty.log"
check "thrash 5/hr"          BLOCK 7200 60 "$T/thrash.log"
check "memfree unmeasured"   BLOCK 7200 "" "$T/empty.log"
check "uptime unmeasured"    BLOCK ""   60 "$T/empty.log"
echo $$ > "$T/live.lock"; echo 999999 > "$T/stale.lock"
check "heavy-window lock live"  BLOCK 7200 60 "$T/empty.log" "$T/live.lock"
check "heavy-window lock stale" ALLOW 7200 60 "$T/empty.log" "$T/stale.lock"
echo "pass=$pass fail=$fail"; [ "$fail" = 0 ]