#!/usr/bin/env bash set -uo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" SCRIPT="$SCRIPT_DIR/../scripts/agent-subscriptions" GREEN='\033[32m'; RED='\033[31m'; RESET='\033[0m' pass() { echo -e "${GREEN}PASS${RESET}: $1"; } fail() { echo -e "${RED}FAIL${RESET}: $1"; FAILURES=$((FAILURES + 1)); } FAILURES=0 # --dryrun: exits 0 output=$("$SCRIPT" --dryrun 2>&1) code=$? [[ $code -eq 0 ]] && pass "--dryrun exits 0" || fail "--dryrun exits 0 (got $code)" # --dryrun: mentions Anthropic echo "$output" | grep -qi "Anthropic" && pass "--dryrun mentions Anthropic" || fail "--dryrun mentions Anthropic" # --dryrun: mentions MiniMax echo "$output" | grep -qi "MiniMax" && pass "--dryrun mentions MiniMax" || fail "--dryrun mentions MiniMax" # --dryrun: shows probe URL for Anthropic echo "$output" | grep -q "api.anthropic.com" && pass "--dryrun shows Anthropic URL" || fail "--dryrun shows Anthropic URL" # --dryrun: shows probe URL for MiniMax echo "$output" | grep -q "minimax.io" && pass "--dryrun shows MiniMax URL" || fail "--dryrun shows MiniMax URL" # --dryrun: mentions SOPS echo "$output" | grep -qi "SOPS\|sops" && pass "--dryrun mentions SOPS" || fail "--dryrun mentions SOPS" # -n (short flag): exits 0 "$SCRIPT" -n >/dev/null 2>&1 code=$? [[ $code -eq 0 ]] && pass "-n exits 0" || fail "-n exits 0 (got $code)" # --help: exits 0 "$SCRIPT" --help >/dev/null 2>&1 code=$? [[ $code -eq 0 ]] && pass "--help exits 0" || fail "--help exits 0 (got $code)" # --help: mentions dryrun help_out=$("$SCRIPT" --help 2>&1) echo "$help_out" | grep -q "\-\-dryrun\|-n" && pass "--help documents dryrun" || fail "--help documents dryrun" # Unknown flag: exits non-zero "$SCRIPT" --bogus-flag >/dev/null 2>&1 code=$? [[ $code -ne 0 ]] && pass "unknown flag exits non-zero" || fail "unknown flag exits non-zero (got 0)" # --help: documents --output help_out=$("$SCRIPT" --help 2>&1) echo "$help_out" | grep -q "\-\-output" && pass "--help documents --output" || fail "--help documents --output" # --help: documents -j short flag echo "$help_out" | grep -q "\-j" && pass "--help documents -j" || fail "--help documents -j" # --output json: exits 0 json_out=$("$SCRIPT" --dryrun --output json 2>&1) code=$? [[ $code -eq 0 ]] && pass "--output json exits 0" || fail "--output json exits 0 (got $code)" # --output json: contains top-level "providers" key echo "$json_out" | grep -q '"providers"' && pass "--output json contains providers key" || fail "--output json contains providers key" # --output json: contains probed_at key echo "$json_out" | grep -q '"probed_at"' && pass "--output json contains probed_at" || fail "--output json contains probed_at" # --output json: contains Anthropic provider name echo "$json_out" | grep -q '"Anthropic"' && pass "--output json contains Anthropic" || fail "--output json contains Anthropic" # --output json: contains MiniMax provider name echo "$json_out" | grep -q '"MiniMax"' && pass "--output json contains MiniMax" || fail "--output json contains MiniMax" # --output json: contains utilization_pct field echo "$json_out" | grep -q '"utilization_pct"' && pass "--output json contains utilization_pct" || fail "--output json contains utilization_pct" # --output json: contains reset_at field echo "$json_out" | grep -q '"reset_at"' && pass "--output json contains reset_at" || fail "--output json contains reset_at" # --output json: contains reset_in_seconds field echo "$json_out" | grep -q '"reset_in_seconds"' && pass "--output json contains reset_in_seconds" || fail "--output json contains reset_in_seconds" # --output json: contains seven_day window echo "$json_out" | grep -q '"seven_day"' && pass "--output json contains seven_day window" || fail "--output json contains seven_day window" # --output json: contains five_hour window echo "$json_out" | grep -q '"five_hour"' && pass "--output json contains five_hour window" || fail "--output json contains five_hour window" # --output json: well-formed JSON (python json.loads parses it) echo "$json_out" | python3 -c "import sys, json; json.loads(sys.stdin.read())" 2>/dev/null [[ $? -eq 0 ]] && pass "--output json is valid JSON" || fail "--output json is valid JSON" # -j (short flag): identical to --output json short_out=$("$SCRIPT" --dryrun -j 2>&1) [[ "$json_out" == "$short_out" ]] && pass "-j matches --output json output" || fail "-j matches --output json output" # -j (short flag): exits 0 "$SCRIPT" --dryrun -j >/dev/null 2>&1 code=$? [[ $code -eq 0 ]] && pass "-j exits 0" || fail "-j exits 0 (got $code)" # --output=json (equals form): exits 0 "$SCRIPT" --dryrun --output=json >/dev/null 2>&1 code=$? [[ $code -eq 0 ]] && pass "--output=json exits 0" || fail "--output=json exits 0 (got $code)" # --output json (default mode unchanged): dryrun emits probe preview, not JSON table_out=$("$SCRIPT" --dryrun 2>&1) echo "$table_out" | grep -q "\[dryrun\]" && pass "default dryrun emits [dryrun] header" || fail "default dryrun emits [dryrun] header" echo "$table_out" | grep -q '"providers"' && fail "default mode should not emit JSON" || pass "default mode does not emit JSON" # --dryrun --output json: no API calls attempted (output is JSON, not probe failure text) echo "$json_out" | grep -qi "failed\|UNAVAILABLE\|HTTP " && fail "--dryrun --output json made API calls" || pass "--dryrun --output json made no API calls" # --output non-json value: exits non-zero "$SCRIPT" --dryrun --output yaml >/dev/null 2>&1 code=$? [[ $code -ne 0 ]] && pass "--output yaml exits non-zero" || fail "--output yaml exits non-zero (got 0)" # --output with no value: exits non-zero "$SCRIPT" --output >/dev/null 2>&1 code=$? [[ $code -ne 0 ]] && pass "--output with no value exits non-zero" || fail "--output with no value exits non-zero (got 0)" # --output json: contains window_seconds field echo "$json_out" | grep -q '"window_seconds"' && pass "--output json contains window_seconds" || fail "--output json contains window_seconds" # --output json: contains elapsed_pct field echo "$json_out" | grep -q '"elapsed_pct"' && pass "--output json contains elapsed_pct" || fail "--output json contains elapsed_pct" # --output json: window_seconds and elapsed_pct present on every window, per provider, # window_seconds equals the expected constant, elapsed_pct in [0,1] or null. python3 - "$json_out" <<'PYEOF' import json, sys data = json.loads(sys.argv[1]) expected_window_seconds = {"five_hour": 18000, "seven_day": 604800} ok = True for provider in data.get("providers", []): windows = provider.get("windows") if windows is None: continue # unavailable provider, no windows to check for key, expected_seconds in expected_window_seconds.items(): win = windows.get(key) if win is None: print(f"FAIL: {provider.get('provider')} missing window {key}") ok = False continue if "window_seconds" not in win or "elapsed_pct" not in win: print(f"FAIL: {provider.get('provider')}.{key} missing window_seconds/elapsed_pct") ok = False continue if win["window_seconds"] != expected_seconds: print(f"FAIL: {provider.get('provider')}.{key} window_seconds={win['window_seconds']!r}, expected {expected_seconds}") ok = False pct = win["elapsed_pct"] if pct is not None and not (0.0 <= pct <= 1.0): print(f"FAIL: {provider.get('provider')}.{key} elapsed_pct={pct!r} out of [0,1]") ok = False sys.exit(0 if ok else 1) PYEOF [[ $? -eq 0 ]] && pass "--output json: window_seconds/elapsed_pct present, valid, and match constants" || fail "--output json: window_seconds/elapsed_pct present, valid, and match constants" echo if [[ $FAILURES -eq 0 ]]; then echo -e "${GREEN}All tests passed.${RESET}" exit 0 else echo -e "${RED}$FAILURES test(s) failed.${RESET}" exit 1 fi