From 688ed499748023a4acdf5b7adef85f562cd1914e Mon Sep 17 00:00:00 2001 From: Jeffery Date: Wed, 24 Jun 2026 14:05:49 +0000 Subject: [PATCH] =?UTF-8?q?test(entrypoint):=20=E8=A3=9C=E9=BD=8A=20timeou?= =?UTF-8?q?t=20=E8=88=87=E8=BC=B8=E5=87=BA=E9=99=90=E5=88=B6=E6=B8=AC?= =?UTF-8?q?=E8=A9=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/entrypoint_test.sh | 101 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) diff --git a/tests/entrypoint_test.sh b/tests/entrypoint_test.sh index 2b9f295..85983cd 100755 --- a/tests/entrypoint_test.sh +++ b/tests/entrypoint_test.sh @@ -23,6 +23,39 @@ SH chmod +x "$dir/codex" } +make_fake_sleeping_codex() { + local dir="$1" + + cat > "$dir/codex" <<'SH' +#!/bin/sh +trap 'exit 143' TERM +while true; do + sleep 1 +done +SH + chmod +x "$dir/codex" +} + +make_fake_signaled_codex() { + local dir="$1" + + cat > "$dir/codex" <<'SH' +#!/bin/sh +kill -TERM $$ +SH + chmod +x "$dir/codex" +} + +make_fake_large_output_codex() { + local dir="$1" + + cat > "$dir/codex" <<'SH' +#!/bin/sh +printf '0123456789' +SH + chmod +x "$dir/codex" +} + encoded_json() { printf '%s' "$1" | base64 | tr -d '\n' } @@ -190,6 +223,70 @@ test_missing_codex_command_output() { rm -rf "$tmpdir" } +test_codex_timeout_output() { + local tmpdir + tmpdir="$(mktemp -d)" + make_fake_sleeping_codex "$tmpdir" + + set +e + run_entrypoint "$tmpdir" OAUTH="$(encoded_json '{}')" MODEL="gpt-test" PROMPT="hello" CODEX_TIMEOUT_MS="100" + local status="$?" + set -e + + assert_status "$status" 143 + grep -q "status=failed" "$tmpdir/github-output" || die "timeout failed status output" + grep -q "Codex execution timed out after 100 ms" "$tmpdir/github-output" || die "timeout message output" + [[ ! -e "$tmpdir/codex-home/auth.json" ]] || die "auth.json was not cleaned up after timeout" + rm -rf "$tmpdir" +} + +test_codex_signal_output() { + local tmpdir + tmpdir="$(mktemp -d)" + make_fake_signaled_codex "$tmpdir" + + set +e + run_entrypoint "$tmpdir" OAUTH="$(encoded_json '{}')" MODEL="gpt-test" PROMPT="hello" + local status="$?" + set -e + + assert_status "$status" 1 + grep -q "status=failed" "$tmpdir/github-output" || die "signal failed status output" + grep -q "Codex process terminated by signal SIGTERM" "$tmpdir/github-output" || die "signal message output" + rm -rf "$tmpdir" +} + +test_codex_output_truncation() { + local tmpdir + tmpdir="$(mktemp -d)" + make_fake_large_output_codex "$tmpdir" + + run_entrypoint "$tmpdir" OAUTH="$(encoded_json '{}')" MODEL="gpt-test" PROMPT="hello" CODEX_OUTPUT_LIMIT_BYTES="5" + + grep -q "status=completed" "$tmpdir/github-output" || die "truncated output completed status" + grep -q "01234" "$tmpdir/github-output" || die "truncated output prefix" + grep -q "\\[Output truncated\\]" "$tmpdir/github-output" || die "truncation message output" + rm -rf "$tmpdir" +} + +test_invalid_execution_config_uses_defaults() { + local tmpdir + tmpdir="$(mktemp -d)" + make_fake_large_output_codex "$tmpdir" + + run_entrypoint "$tmpdir" \ + OAUTH="$(encoded_json '{}')" \ + MODEL="gpt-test" \ + PROMPT="hello" \ + CODEX_TIMEOUT_MS="invalid" \ + CODEX_OUTPUT_LIMIT_BYTES="invalid" + + grep -q "status=completed" "$tmpdir/github-output" || die "invalid config completed status" + grep -q "0123456789" "$tmpdir/github-output" || die "invalid output limit did not use default" + ! grep -q "\\[Output truncated\\]" "$tmpdir/github-output" || die "invalid output limit unexpectedly truncated" + rm -rf "$tmpdir" +} + test_missing_oauth test_missing_model test_invalid_base64 @@ -199,5 +296,9 @@ test_empty_prompt test_prompt_with_shell_characters test_failure_output test_missing_codex_command_output +test_codex_timeout_output +test_codex_signal_output +test_codex_output_truncation +test_invalid_execution_config_uses_defaults echo "entrypoint tests passed"