修复策划panic测试的env变量泄漏

新增静态互斥锁串行化进程级debug开关修改
DesignDebugEnvGuard在drop时恢复原值,覆盖断言失败与panic路径
锁中毒时取内部值继续,避免失败放大到后续用例
This commit is contained in:
2026-09-17 09:52:40 +00:00
parent 73729394e2
commit 958078def8
@@ -1696,10 +1696,40 @@ mod tests {
.clone()
}
// 进程级 env 在同一 binary 的并行用例间共享:持锁串行化修改,drop 时恢复原值,
// 避免 debug 开关泄漏给并发用例。锁中毒时取内部值继续,不让上游失败放大。
static DESIGN_DEBUG_ENV_LOCK: std::sync::Mutex<()> = std::sync::Mutex::new(());
struct DesignDebugEnvGuard {
previous: Option<String>,
_lock: std::sync::MutexGuard<'static, ()>,
}
impl Drop for DesignDebugEnvGuard {
fn drop(&mut self) {
match &self.previous {
Some(value) => std::env::set_var("GENARRATIVE_AGC_DESIGN_DEBUG", value),
None => std::env::remove_var("GENARRATIVE_AGC_DESIGN_DEBUG"),
}
}
}
fn enable_design_debug_for_test() -> DesignDebugEnvGuard {
let lock = DESIGN_DEBUG_ENV_LOCK
.lock()
.unwrap_or_else(|poisoned| poisoned.into_inner());
let previous = std::env::var("GENARRATIVE_AGC_DESIGN_DEBUG").ok();
std::env::set_var("GENARRATIVE_AGC_DESIGN_DEBUG", "1");
DesignDebugEnvGuard {
previous,
_lock: lock,
}
}
#[tokio::test(flavor = "current_thread")]
async fn design_tool_panic_becomes_visible_retryable_error() {
let (_temp, root, resources) = init_design_project();
std::env::set_var("GENARRATIVE_AGC_DESIGN_DEBUG", "1");
let _debug_env = enable_design_debug_for_test();
let panic_call = platform_llm::LlmToolCall {
id: "call-panic".into(),
name: "design_test__panic".into(),