agent-subscriptions: add window_seconds and elapsed_pct to JSON output
Elapsed is null when a window has no reset timestamp (MiniMax v1 fallback) so pacing consumers fail closed; negative reset_in_seconds clamps to 0. Claude-Session: https://claude.ai/code/session_01YQDoWNM7XPPii28khFWoMc
This commit is contained in:
@@ -48,6 +48,122 @@ echo "$help_out" | grep -q "\-\-dryrun\|-n" && pass "--help documents dryrun" ||
|
||||
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}"
|
||||
|
||||
Reference in New Issue
Block a user