test(criteria): 坏 JSON / 未知键分支加超时兜底

判据要求「文件存在但不合法时非零退出」。若实现退化成只记日志继续启动,
进程会一直运行而不是报错——原写法会把判据自己挂死,现在用 timeout 兜底
并把 exit 124 明确判为失败(静默忽略),保证反向变异能被咬住。
This commit is contained in:
JianFeeeee
2026-10-23 09:14:32 +08:00
parent f4d4e3cd52
commit ed62fd97a4

View File

@ -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 &