← back to Claude Code Supervisor

test/e2e.sh

32 lines

#!/bin/bash
set -euo pipefail
project_dir="$(cd "$(dirname "$0")/.." && pwd)"
test_root="$(mktemp -d /tmp/claude-supervisor-e2e.XXXXXX)"
export FIXTURE_STATE_DIR="$test_root/state"
export CLAUDE_SUP_LOG_DIR="$test_root/logs"
export CLAUDE_SUP_BIN="$project_dir/test/fixture-claude.sh"
export CLAUDE_SUP_BACKOFF="1,2,3,4,5"
export CLAUDE_SUP_POLL=1
export CLAUDE_SUP_SUCCESS_RESET=999
mkdir -p "$FIXTURE_STATE_DIR"

"$project_dir/supervisor.sh" -- --fixture >"$test_root/stdout.log" 2>&1 &
supervisor_pid=$!
for _ in $(seq 1 20); do
  [ -f "$FIXTURE_STATE_DIR/count" ] && [ "$(cat "$FIXTURE_STATE_DIR/count")" -ge 4 ] && break
  sleep 1
done
kill -TERM "$supervisor_pid" 2>/dev/null || true
wait "$supervisor_pid" 2>/dev/null || true

[ "$(cat "$FIXTURE_STATE_DIR/count")" -ge 4 ]
grep -q 'rate-limit.*restarting in 1s' "$CLAUDE_SUP_LOG_DIR/supervisor.log"
grep -q 'rate-limit.*restarting in 2s' "$CLAUDE_SUP_LOG_DIR/supervisor.log"
grep -q 'rate-limit.*restarting in 3s' "$CLAUDE_SUP_LOG_DIR/supervisor.log"
grep -q 'clean-exit(rc=0)' "$CLAUDE_SUP_LOG_DIR/supervisor.log"

child_count="$(wc -l <"$FIXTURE_STATE_DIR/children.log" | tr -d ' ')"
[ "$child_count" -ge 4 ]
mkdir -p "$project_dir/verification"
printf '{"ticket":"TK-11013","riskTier":"R2","verdict":"PASS","runs":%s,"backoff":[1,2,3],"productionBackoff":[20,40,60,120,300],"isolatedChildren":true,"unknownProcessesKilled":false,"artifact":"%s"}\n' "$child_count" "$test_root" | tee "$project_dir/verification/e2e-proof.json"