d68f003000
CI / Change detection (push) Has been cancelled
CI / Version drift (push) Has been cancelled
CI / Lint (push) Has been cancelled
CI / Workflow RLM cache (push) Has been cancelled
CI / Test (macos-latest) (push) Has been cancelled
CI / Test (ubuntu-latest) (push) Has been cancelled
CI / Test (windows-latest) (push) Has been cancelled
CI / npm wrapper smoke (push) Has been cancelled
CI / Mobile runtime smoke (push) Has been cancelled
CI / Workflow lint (push) Has been cancelled
CI / Documentation (push) Has been cancelled
Web Frontend / Lint & Type Check (push) Failing after 1s
Auto-close harvested PRs / close (push) Failing after 1s
cargo-deny / cargo-deny (bans licenses sources) (push) Failing after 1s
Security audit / cargo-audit (push) Failing after 1s
Sync to CNB / sync (push) Failing after 1s
Web Frontend / Deploy to Cloudflare (push) Waiting to run
cargo-deny / cargo-deny (advisories) (push) Failing after 3s
109 lines
3.9 KiB
Bash
Executable File
109 lines
3.9 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Tests for app-server-smoke.sh: drive it against a fake `codewhale` binary so
|
|
# the stdio-probe assertions, auth-list matrix parser, cheap-model mapping, and
|
|
# secret redaction are all exercised without a real build or any model tokens.
|
|
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
SMOKE="$SCRIPT_DIR/app-server-smoke.sh"
|
|
TESTS=0
|
|
FAILED=0
|
|
|
|
WORK="$(mktemp -d)"
|
|
trap 'rm -rf "$WORK"' EXIT
|
|
|
|
FAKE="$WORK/codewhale"
|
|
cat >"$FAKE" <<'FAKE_EOF'
|
|
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
if [[ "${1:-}" == "app-server" ]]; then
|
|
cat >/dev/null # drain the JSON-RPC requests
|
|
printf '%s\n' \
|
|
'{"jsonrpc":"2.0","id":1,"result":{"status":"ok","service":"deepseek-app-server","transport":"stdio"}}' \
|
|
'{"jsonrpc":"2.0","id":2,"result":{"methods":["thread/request","prompt/run","prompt/request","thread/goal/set"]}}' \
|
|
'{"jsonrpc":"2.0","id":3,"result":{"ok":true,"data":{"transport":"stdio+http"}}}'
|
|
exit 0
|
|
fi
|
|
if [[ "${1:-}" == "auth" && "${2:-}" == "list" ]]; then
|
|
printf '%s\n' \
|
|
'provider config store env active' \
|
|
'deepseek yes - no config' \
|
|
'zai no - yes env' \
|
|
'openrouter no - no missing' \
|
|
'arcee yes - no config'
|
|
exit 0
|
|
fi
|
|
# exec form: --provider <slug> --model <model> exec <prompt>
|
|
slug=""; model=""
|
|
while [[ $# -gt 0 ]]; do
|
|
case "$1" in
|
|
--provider) slug="$2"; shift 2 ;;
|
|
--model) model="$2"; shift 2 ;;
|
|
exec) shift; break ;;
|
|
*) shift ;;
|
|
esac
|
|
done
|
|
# Emit a fake secret on the reply line to prove redaction scrubs it.
|
|
printf 'pong [%s/%s] token=sk-DEADBEEFCAFE12345\n' "$slug" "$model"
|
|
exit 0
|
|
FAKE_EOF
|
|
chmod +x "$FAKE"
|
|
|
|
# run_smoke <expected_exit> -- <args...> : capture combined output, check exit.
|
|
LAST_OUT=""
|
|
run_smoke() {
|
|
local expected="$1"; shift
|
|
[[ "$1" == "--" ]] && shift
|
|
local rc=0
|
|
LAST_OUT="$(bash "$SMOKE" --bin "$FAKE" "$@" 2>&1)" || rc=$?
|
|
TESTS=$((TESTS + 1))
|
|
if [[ "$rc" != "$expected" ]]; then
|
|
printf '\033[1;31mFAIL\033[0m exit %s (wanted %s) for: %s\n' "$rc" "$expected" "$*"
|
|
printf '%s\n' "$LAST_OUT" | sed 's/^/ /'
|
|
FAILED=$((FAILED + 1))
|
|
return 1
|
|
fi
|
|
return 0
|
|
}
|
|
|
|
want() { TESTS=$((TESTS + 1)); if printf '%s' "$LAST_OUT" | grep -qF "$1"; then :; else printf '\033[1;31mFAIL\033[0m output missing: %s\n' "$1"; FAILED=$((FAILED + 1)); fi; }
|
|
want_not(){ TESTS=$((TESTS + 1)); if printf '%s' "$LAST_OUT" | grep -qF "$1"; then printf '\033[1;31mFAIL\033[0m output should not contain: %s\n' "$1"; FAILED=$((FAILED + 1)); fi; }
|
|
|
|
# 1. Default: stdio probe only, passes, matrix skipped.
|
|
run_smoke 0 -- || true
|
|
want "healthz reports ok"
|
|
want "capabilities advertise thread/* methods"
|
|
want "app/capabilities reports transport"
|
|
want "matrix skipped"
|
|
|
|
# 2. Dry-run matrix: maps known providers, flags unmapped, skips 'missing'.
|
|
run_smoke 0 -- --matrix || true
|
|
want "deepseek -> deepseek-chat"
|
|
want "zai -> glm-4-flash"
|
|
want "arcee -> (UNMAPPED"
|
|
want_not "openrouter"
|
|
|
|
# 3. Real exec for a mapped provider passes; secret is redacted.
|
|
run_smoke 0 -- --matrix --real --provider deepseek || true
|
|
want "deepseek/deepseek-chat exec ok"
|
|
want "REDACTED"
|
|
want_not "sk-DEADBEEFCAFE12345"
|
|
|
|
# 4. Real exec across all configured providers fails on the unmapped one.
|
|
run_smoke 1 -- --matrix --real || true
|
|
want "arcee has no cheap-model mapping"
|
|
|
|
# 5. Override supplies a model for the otherwise-unmapped provider.
|
|
TESTS=$((TESTS + 1))
|
|
LAST_OUT="$(SMOKE_MODEL_ARCEE=arcee-cheap bash "$SMOKE" --bin "$FAKE" --matrix 2>&1)" || { FAILED=$((FAILED + 1)); printf 'FAIL override run errored\n'; }
|
|
want "arcee -> arcee-cheap"
|
|
|
|
echo ""
|
|
if [[ "$FAILED" -eq 0 ]]; then
|
|
printf '\033[1;32mapp-server-smoke.test.sh: all %s checks passed\033[0m\n' "$TESTS"
|
|
else
|
|
printf '\033[1;31mapp-server-smoke.test.sh: %s/%s checks failed\033[0m\n' "$FAILED" "$TESTS"
|
|
exit 1
|
|
fi
|