用例按逐行口径核验应用日志落盘边界

- 生产是把两行分别交给 append_application_log_line 脱敏截断,原用例先 join(" ") 再 sanitize,测不到逐行截断与「只该脱敏其中一行」的情况
- 改为逐行 sanitize,并分别断言身份行(eventId/code/detailRef/summary)与详情行(detail 脱敏、metadata 无凭据)
- 验证:cargo test runtime_error(7 passed)
This commit is contained in:
2026-09-21 22:20:25 +08:00
parent c49ee8d157
commit 5847505020
@@ -279,21 +279,32 @@ mod tests {
for line in &lines {
assert!(!line.contains('\n'), "{line}");
}
// 落盘边界按真实口径核验:应用日志的整行脱敏既不能吃掉身份字段,也不能靠换行拆行
let persisted = crate::sanitize_diagnostic_message(&lines.join(" "), None);
assert!(persisted.contains("eventId=error-1-1"), "{persisted}");
assert!(persisted.contains("code=turn-idle-timeout"), "{persisted}");
// 落盘边界按真实口径核验:应用日志行脱敏、逐行截断,两行不会先拼在一起
let persisted = lines
.iter()
.map(|line| crate::sanitize_diagnostic_message(line, None))
.collect::<Vec<_>>();
for line in &persisted {
assert!(!line.contains("token=secret"), "{line}");
assert!(line.chars().count() <= 2_048, "{line}");
}
let identity = &persisted[0];
assert!(identity.contains("eventId=error-1-1"), "{identity}");
assert!(identity.contains("code=turn-idle-timeout"), "{identity}");
assert!(
persisted.contains("detailRef=.agent/runtime/errors/error-1-1.json"),
"{persisted}"
identity.contains("detailRef=.agent/runtime/errors/error-1-1.json"),
"{identity}"
);
assert!(persisted.contains("summary=本轮没有收到完成事件 附带换行"));
assert!(persisted.contains("detail=<absolute-path> <redacted-url> 第二行诊断"));
assert!(
!persisted.contains("token=secret") && !persisted.contains("Bearer secret"),
"{persisted}"
identity.contains("summary=本轮没有收到完成事件 附带换行"),
"{identity}"
);
assert!(persisted.chars().count() <= 2_048, "{persisted}");
let detail = &persisted[1];
assert!(
detail.contains("detail=<absolute-path> <redacted-url> 第二行诊断"),
"{detail}"
);
assert!(!detail.contains("Bearer secret"), "{detail}");
}
#[test]