修复策划panic测试的env变量泄漏
新增静态互斥锁串行化进程级debug开关修改 DesignDebugEnvGuard在drop时恢复原值,覆盖断言失败与panic路径 锁中毒时取内部值继续,避免失败放大到后续用例
This commit is contained in:
@@ -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(),
|
||||
|
||||
Reference in New Issue
Block a user