test(entrypoint): 補上 Codex 執行路徑測試

This commit is contained in:
2026-06-24 10:44:28 +00:00
parent a57c01e271
commit ed4ac005b2
+145
View File
@@ -0,0 +1,145 @@
#!/bin/bash
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
fail() {
echo "FAIL: $1" >&2
exit 1
}
make_fake_codex() {
local dir="$1"
local exit_code="$2"
local message="$3"
cat > "$dir/codex" <<SH
#!/bin/sh
echo "$message"
exit $exit_code
SH
chmod +x "$dir/codex"
}
encoded_json() {
printf '%s' "$1" | base64 | tr -d '\n'
}
run_entrypoint() {
local tmpdir="$1"
shift
env \
PATH="$tmpdir:$PATH" \
CODEX_HOME="$tmpdir/codex-home" \
GITHUB_OUTPUT="$tmpdir/github-output" \
"$@" \
bash "$ROOT_DIR/entrypoint.sh" > "$tmpdir/stdout" 2> "$tmpdir/stderr"
}
assert_status() {
local actual="$1"
local expected="$2"
[[ "$actual" -eq "$expected" ]] || fail "expected status $expected, got $actual"
}
test_missing_oauth() {
local tmpdir
tmpdir="$(mktemp -d)"
make_fake_codex "$tmpdir" 0 "unused"
set +e
run_entrypoint "$tmpdir" MODEL="gpt-test" PROMPT="hello"
local status="$?"
set -e
assert_status "$status" 1
grep -q "OAUTH is required" "$tmpdir/stderr" || fail "missing OAUTH error"
rm -rf "$tmpdir"
}
test_missing_model() {
local tmpdir
tmpdir="$(mktemp -d)"
make_fake_codex "$tmpdir" 0 "unused"
set +e
run_entrypoint "$tmpdir" OAUTH="$(encoded_json '{}')" PROMPT="hello"
local status="$?"
set -e
assert_status "$status" 1
grep -q "MODEL is required" "$tmpdir/stderr" || fail "missing MODEL error"
rm -rf "$tmpdir"
}
test_invalid_base64() {
local tmpdir
tmpdir="$(mktemp -d)"
make_fake_codex "$tmpdir" 0 "unused"
set +e
run_entrypoint "$tmpdir" OAUTH="not-base64" MODEL="gpt-test" PROMPT="hello"
local status="$?"
set -e
assert_status "$status" 1
grep -q "valid base64" "$tmpdir/stderr" || fail "invalid base64 error"
rm -rf "$tmpdir"
}
test_non_object_json() {
local tmpdir
tmpdir="$(mktemp -d)"
make_fake_codex "$tmpdir" 0 "unused"
set +e
run_entrypoint "$tmpdir" OAUTH="$(encoded_json '[]')" MODEL="gpt-test" PROMPT="hello"
local status="$?"
set -e
assert_status "$status" 1
grep -q "JSON object" "$tmpdir/stderr" || fail "non-object JSON error"
rm -rf "$tmpdir"
}
test_success_output() {
local tmpdir
tmpdir="$(mktemp -d)"
make_fake_codex "$tmpdir" 0 "codex ok"
run_entrypoint "$tmpdir" OAUTH="$(encoded_json '{}')" MODEL="gpt-test" PROMPT="hello"
grep -q "status=completed" "$tmpdir/github-output" || fail "completed status output"
grep -q "codex ok" "$tmpdir/github-output" || fail "codex output"
[[ ! -e "$tmpdir/codex-home/auth.json" ]] || fail "auth.json was not cleaned up"
rm -rf "$tmpdir"
}
test_failure_output() {
local tmpdir
tmpdir="$(mktemp -d)"
make_fake_codex "$tmpdir" 7 "codex failed"
set +e
run_entrypoint "$tmpdir" OAUTH="$(encoded_json '{}')" MODEL="gpt-test" PROMPT="hello"
local status="$?"
set -e
assert_status "$status" 7
grep -q "status=failed" "$tmpdir/github-output" || fail "failed status output"
grep -q "codex failed" "$tmpdir/github-output" || fail "failed codex output"
[[ ! -e "$tmpdir/codex-home/auth.json" ]] || fail "auth.json was not cleaned up after failure"
rm -rf "$tmpdir"
}
test_missing_oauth
test_missing_model
test_invalid_base64
test_non_object_json
test_success_output
test_failure_output
echo "entrypoint tests passed"