From ed62fd97a4ef796b1e00802dac5c457e4fcc9538 Mon Sep 17 00:00:00 2001 From: JianFeeeee Date: Fri, 23 Oct 2026 09:14:32 +0800 Subject: [PATCH] =?UTF-8?q?test(criteria):=20=E5=9D=8F=20JSON=20/=20?= =?UTF-8?q?=E6=9C=AA=E7=9F=A5=E9=94=AE=E5=88=86=E6=94=AF=E5=8A=A0=E8=B6=85?= =?UTF-8?q?=E6=97=B6=E5=85=9C=E5=BA=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 判据要求「文件存在但不合法时非零退出」。若实现退化成只记日志继续启动, 进程会一直运行而不是报错——原写法会把判据自己挂死,现在用 timeout 兜底 并把 exit 124 明确判为失败(静默忽略),保证反向变异能被咬住。 --- scripts/criteria/config-startup.sh | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/scripts/criteria/config-startup.sh b/scripts/criteria/config-startup.sh index 2aa8bf6..63b788c 100755 --- a/scripts/criteria/config-startup.sh +++ b/scripts/criteria/config-startup.sh @@ -60,15 +60,21 @@ fi kill "$P" 2>/dev/null; wait "$P" 2>/dev/null # ---- 4. 文件存在但 JSON 非法 -> 响亮报错退出 ---- +# 用 timeout 兜底:若实现退化成"只记日志继续启动",进程会一直跑而不是报错, +# 这里必须把它判成失败,不能把自己挂死。 printf '{"addr":' > "$WORK/bad.json" -"$BIN" -config "$WORK/bad.json" > "$WORK/bad.log" 2>&1 \ - && fail "配置文件 JSON 非法时应非零退出,实际正常退出" +timeout 10 "$BIN" -config "$WORK/bad.json" > "$WORK/bad.log" 2>&1 +rc=$? +[ "$rc" -eq 124 ] && fail "配置文件 JSON 非法时进程没有退出(静默忽略),判据要求响亮报错" +[ "$rc" -eq 0 ] && fail "配置文件 JSON 非法时应非零退出,实际正常退出" grep -qi 'invalid JSON' "$WORK/bad.log" || { cat "$WORK/bad.log"; fail "非法 JSON 的报错信息不明确"; } # ---- 5. 未知键(拼写错误)-> 报错退出,不得静默回落到默认口令 ---- printf '{"passwd":"x"}' > "$WORK/typo.json" -"$BIN" -config "$WORK/typo.json" > "$WORK/typo.log" 2>&1 \ - && fail "未知键应被拒绝(否则拼错的 password 会静默使用默认值)" +timeout 10 "$BIN" -config "$WORK/typo.json" > "$WORK/typo.log" 2>&1 +rc=$? +[ "$rc" -eq 124 ] && fail "未知键被静默忽略(进程继续运行),拼错的 password 会回落到默认值" +[ "$rc" -eq 0 ] && fail "未知键应被拒绝(否则拼错的 password 会静默使用默认值)" # ---- 6. 配置文件缺失 -> 不算错误,回落到纯 flag 行为 ---- "$BIN" -config "$WORK/none.json" -addr 127.0.0.1:17698 -workdir "$WORK/d2" > "$WORK/miss.log" 2>&1 &