From 53f206694539d0adc02b837fb2bcae118028e97d Mon Sep 17 00:00:00 2001 From: jack-wz Date: Wed, 29 Apr 2026 20:45:01 +0800 Subject: [PATCH] chore: add health stack and stabilize provider env tests (#1126) Co-authored-by: jack-wz01 <15474862+jack-wz01@user.noreply.gitee.com> --- AGENTS.md | 6 +++ crates/openfang-runtime/src/drivers/mod.rs | 49 +++++++++++++++++++--- 2 files changed, 49 insertions(+), 6 deletions(-) create mode 100644 AGENTS.md diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 00000000..031acea4 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,6 @@ +## Health Stack + +- typecheck: cargo build --workspace --lib +- lint: cargo clippy --workspace --all-targets -- -D warnings +- test: cargo test --workspace +- shell: shellcheck scripts/install.sh diff --git a/crates/openfang-runtime/src/drivers/mod.rs b/crates/openfang-runtime/src/drivers/mod.rs index 504d8ee6..a2ac4548 100644 --- a/crates/openfang-runtime/src/drivers/mod.rs +++ b/crates/openfang-runtime/src/drivers/mod.rs @@ -632,6 +632,39 @@ pub fn known_providers() -> &'static [&'static str] { #[cfg(test)] mod tests { use super::*; + use std::ffi::OsString; + use std::sync::{LazyLock, Mutex}; + + static ENV_LOCK: LazyLock> = LazyLock::new(|| Mutex::new(())); + + struct EnvVarGuard { + key: &'static str, + original: Option, + } + + impl EnvVarGuard { + fn set(key: &'static str, value: &str) -> Self { + let original = std::env::var_os(key); + std::env::set_var(key, value); + Self { key, original } + } + + fn remove(key: &'static str) -> Self { + let original = std::env::var_os(key); + std::env::remove_var(key); + Self { key, original } + } + } + + impl Drop for EnvVarGuard { + fn drop(&mut self) { + if let Some(value) = &self.original { + std::env::set_var(self.key, value); + } else { + std::env::remove_var(self.key); + } + } + } #[test] fn test_provider_defaults_groq() { @@ -792,8 +825,9 @@ mod tests { #[test] fn test_novita_provider_with_env_key() { + let _env_lock = ENV_LOCK.lock().unwrap(); let unique_key = "test-novita-key-12345"; - std::env::set_var("NOVITA_API_KEY", unique_key); + let _env = EnvVarGuard::set("NOVITA_API_KEY", unique_key); let config = DriverConfig { provider: "novita".to_string(), api_key: None, @@ -806,11 +840,12 @@ mod tests { driver.is_ok(), "Novita provider with env var should succeed" ); - std::env::remove_var("NOVITA_API_KEY"); } #[test] fn test_novita_provider_no_key_errors() { + let _env_lock = ENV_LOCK.lock().unwrap(); + let _env = EnvVarGuard::remove("NOVITA_API_KEY"); let config = DriverConfig { provider: "novita".to_string(), api_key: None, @@ -825,8 +860,9 @@ mod tests { #[test] fn test_nvidia_provider_with_env_key() { // NVIDIA NIM is a known provider — set API key and verify driver creation succeeds. + let _env_lock = ENV_LOCK.lock().unwrap(); let unique_key = "test-nvidia-key-12345"; - std::env::set_var("NVIDIA_API_KEY", unique_key); + let _env = EnvVarGuard::set("NVIDIA_API_KEY", unique_key); let config = DriverConfig { provider: "nvidia".to_string(), api_key: None, // picked up from env via provider_defaults @@ -839,12 +875,13 @@ mod tests { driver.is_ok(), "NVIDIA provider with env var should succeed" ); - std::env::remove_var("NVIDIA_API_KEY"); } #[test] fn test_nvidia_provider_no_key_errors() { // NVIDIA NIM provider with no API key should error. + let _env_lock = ENV_LOCK.lock().unwrap(); + let _env = EnvVarGuard::remove("NVIDIA_API_KEY"); let config = DriverConfig { provider: "nvidia".to_string(), api_key: None, @@ -859,8 +896,9 @@ mod tests { #[test] fn test_custom_provider_key_no_url_helpful_error() { // Custom provider with key set (via env) but no base_url should give helpful error. + let _env_lock = ENV_LOCK.lock().unwrap(); let unique_key = "test-custom-key-67890"; - std::env::set_var("MYCUSTOM_API_KEY", unique_key); + let _env = EnvVarGuard::set("MYCUSTOM_API_KEY", unique_key); let config = DriverConfig { provider: "mycustom".to_string(), api_key: None, @@ -876,7 +914,6 @@ mod tests { "Error should mention base_url: {}", err ); - std::env::remove_var("MYCUSTOM_API_KEY"); } #[test]