fix: consolidate all env-var override tests to eliminate parallel races
Extends the temperature test fix to also cover provider, api_key, port, and host env-var tests that had the same race condition. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
6f64099a48
commit
882e1320dc
1 changed files with 52 additions and 77 deletions
|
|
@ -1474,55 +1474,53 @@ default_temperature = 0.7
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn env_override_api_key() {
|
fn env_override_api_key() {
|
||||||
|
// Primary and fallback tested together to avoid env-var races.
|
||||||
|
std::env::remove_var("ZEROCLAW_API_KEY");
|
||||||
|
std::env::remove_var("API_KEY");
|
||||||
|
|
||||||
|
// Primary: ZEROCLAW_API_KEY
|
||||||
let mut config = Config::default();
|
let mut config = Config::default();
|
||||||
assert!(config.api_key.is_none());
|
assert!(config.api_key.is_none());
|
||||||
|
|
||||||
// Simulate ZEROCLAW_API_KEY
|
|
||||||
std::env::set_var("ZEROCLAW_API_KEY", "sk-test-env-key");
|
std::env::set_var("ZEROCLAW_API_KEY", "sk-test-env-key");
|
||||||
config.apply_env_overrides();
|
config.apply_env_overrides();
|
||||||
assert_eq!(config.api_key.as_deref(), Some("sk-test-env-key"));
|
assert_eq!(config.api_key.as_deref(), Some("sk-test-env-key"));
|
||||||
|
|
||||||
// Clean up
|
|
||||||
std::env::remove_var("ZEROCLAW_API_KEY");
|
std::env::remove_var("ZEROCLAW_API_KEY");
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
// Fallback: API_KEY
|
||||||
fn env_override_api_key_fallback() {
|
let mut config2 = Config::default();
|
||||||
let mut config = Config::default();
|
|
||||||
|
|
||||||
// Simulate API_KEY (fallback)
|
|
||||||
std::env::remove_var("ZEROCLAW_API_KEY");
|
|
||||||
std::env::set_var("API_KEY", "sk-fallback-key");
|
std::env::set_var("API_KEY", "sk-fallback-key");
|
||||||
config.apply_env_overrides();
|
config2.apply_env_overrides();
|
||||||
assert_eq!(config.api_key.as_deref(), Some("sk-fallback-key"));
|
assert_eq!(config2.api_key.as_deref(), Some("sk-fallback-key"));
|
||||||
|
|
||||||
// Clean up
|
|
||||||
std::env::remove_var("API_KEY");
|
std::env::remove_var("API_KEY");
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn env_override_provider() {
|
fn env_override_provider() {
|
||||||
let mut config = Config::default();
|
// Primary, fallback, and empty-value tested together to avoid env-var races.
|
||||||
|
std::env::remove_var("ZEROCLAW_PROVIDER");
|
||||||
|
std::env::remove_var("PROVIDER");
|
||||||
|
|
||||||
|
// Primary: ZEROCLAW_PROVIDER
|
||||||
|
let mut config = Config::default();
|
||||||
std::env::set_var("ZEROCLAW_PROVIDER", "anthropic");
|
std::env::set_var("ZEROCLAW_PROVIDER", "anthropic");
|
||||||
config.apply_env_overrides();
|
config.apply_env_overrides();
|
||||||
assert_eq!(config.default_provider.as_deref(), Some("anthropic"));
|
assert_eq!(config.default_provider.as_deref(), Some("anthropic"));
|
||||||
|
|
||||||
// Clean up
|
|
||||||
std::env::remove_var("ZEROCLAW_PROVIDER");
|
std::env::remove_var("ZEROCLAW_PROVIDER");
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
// Fallback: PROVIDER
|
||||||
fn env_override_provider_fallback() {
|
let mut config2 = Config::default();
|
||||||
let mut config = Config::default();
|
|
||||||
|
|
||||||
std::env::remove_var("ZEROCLAW_PROVIDER");
|
|
||||||
std::env::set_var("PROVIDER", "openai");
|
std::env::set_var("PROVIDER", "openai");
|
||||||
config.apply_env_overrides();
|
config2.apply_env_overrides();
|
||||||
assert_eq!(config.default_provider.as_deref(), Some("openai"));
|
assert_eq!(config2.default_provider.as_deref(), Some("openai"));
|
||||||
|
|
||||||
// Clean up
|
|
||||||
std::env::remove_var("PROVIDER");
|
std::env::remove_var("PROVIDER");
|
||||||
|
|
||||||
|
// Empty value should not override
|
||||||
|
let mut config3 = Config::default();
|
||||||
|
let original_provider = config3.default_provider.clone();
|
||||||
|
std::env::set_var("ZEROCLAW_PROVIDER", "");
|
||||||
|
config3.apply_env_overrides();
|
||||||
|
assert_eq!(config3.default_provider, original_provider);
|
||||||
|
std::env::remove_var("ZEROCLAW_PROVIDER");
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|
@ -1549,72 +1547,61 @@ default_temperature = 0.7
|
||||||
std::env::remove_var("ZEROCLAW_WORKSPACE");
|
std::env::remove_var("ZEROCLAW_WORKSPACE");
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn env_override_empty_values_ignored() {
|
|
||||||
let mut config = Config::default();
|
|
||||||
let original_provider = config.default_provider.clone();
|
|
||||||
|
|
||||||
std::env::set_var("ZEROCLAW_PROVIDER", "");
|
|
||||||
config.apply_env_overrides();
|
|
||||||
// Empty value should not override
|
|
||||||
assert_eq!(config.default_provider, original_provider);
|
|
||||||
|
|
||||||
// Clean up
|
|
||||||
std::env::remove_var("ZEROCLAW_PROVIDER");
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn env_override_gateway_port() {
|
fn env_override_gateway_port() {
|
||||||
|
// Port, fallback, and invalid tested together to avoid env-var races.
|
||||||
|
std::env::remove_var("ZEROCLAW_GATEWAY_PORT");
|
||||||
|
std::env::remove_var("PORT");
|
||||||
|
|
||||||
|
// Primary: ZEROCLAW_GATEWAY_PORT
|
||||||
let mut config = Config::default();
|
let mut config = Config::default();
|
||||||
assert_eq!(config.gateway.port, 3000);
|
assert_eq!(config.gateway.port, 3000);
|
||||||
|
|
||||||
std::env::set_var("ZEROCLAW_GATEWAY_PORT", "8080");
|
std::env::set_var("ZEROCLAW_GATEWAY_PORT", "8080");
|
||||||
config.apply_env_overrides();
|
config.apply_env_overrides();
|
||||||
assert_eq!(config.gateway.port, 8080);
|
assert_eq!(config.gateway.port, 8080);
|
||||||
|
|
||||||
std::env::remove_var("ZEROCLAW_GATEWAY_PORT");
|
std::env::remove_var("ZEROCLAW_GATEWAY_PORT");
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn env_override_port_fallback() {
|
|
||||||
std::env::remove_var("ZEROCLAW_GATEWAY_PORT");
|
|
||||||
let mut config = Config::default();
|
|
||||||
|
|
||||||
|
// Fallback: PORT
|
||||||
|
let mut config2 = Config::default();
|
||||||
std::env::set_var("PORT", "9000");
|
std::env::set_var("PORT", "9000");
|
||||||
config.apply_env_overrides();
|
config2.apply_env_overrides();
|
||||||
assert_eq!(config.gateway.port, 9000);
|
assert_eq!(config2.gateway.port, 9000);
|
||||||
|
|
||||||
|
// Invalid PORT is ignored
|
||||||
|
let mut config3 = Config::default();
|
||||||
|
let original_port = config3.gateway.port;
|
||||||
|
std::env::set_var("PORT", "not_a_number");
|
||||||
|
config3.apply_env_overrides();
|
||||||
|
assert_eq!(config3.gateway.port, original_port);
|
||||||
|
|
||||||
std::env::remove_var("PORT");
|
std::env::remove_var("PORT");
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn env_override_gateway_host() {
|
fn env_override_gateway_host() {
|
||||||
|
// Primary and fallback tested together to avoid env-var races.
|
||||||
|
std::env::remove_var("ZEROCLAW_GATEWAY_HOST");
|
||||||
|
std::env::remove_var("HOST");
|
||||||
|
|
||||||
|
// Primary: ZEROCLAW_GATEWAY_HOST
|
||||||
let mut config = Config::default();
|
let mut config = Config::default();
|
||||||
assert_eq!(config.gateway.host, "127.0.0.1");
|
assert_eq!(config.gateway.host, "127.0.0.1");
|
||||||
|
|
||||||
std::env::set_var("ZEROCLAW_GATEWAY_HOST", "0.0.0.0");
|
std::env::set_var("ZEROCLAW_GATEWAY_HOST", "0.0.0.0");
|
||||||
config.apply_env_overrides();
|
config.apply_env_overrides();
|
||||||
assert_eq!(config.gateway.host, "0.0.0.0");
|
assert_eq!(config.gateway.host, "0.0.0.0");
|
||||||
|
|
||||||
std::env::remove_var("ZEROCLAW_GATEWAY_HOST");
|
std::env::remove_var("ZEROCLAW_GATEWAY_HOST");
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn env_override_host_fallback() {
|
|
||||||
std::env::remove_var("ZEROCLAW_GATEWAY_HOST");
|
|
||||||
let mut config = Config::default();
|
|
||||||
|
|
||||||
|
// Fallback: HOST
|
||||||
|
let mut config2 = Config::default();
|
||||||
std::env::set_var("HOST", "0.0.0.0");
|
std::env::set_var("HOST", "0.0.0.0");
|
||||||
config.apply_env_overrides();
|
config2.apply_env_overrides();
|
||||||
assert_eq!(config.gateway.host, "0.0.0.0");
|
assert_eq!(config2.gateway.host, "0.0.0.0");
|
||||||
|
|
||||||
std::env::remove_var("HOST");
|
std::env::remove_var("HOST");
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn env_override_temperature() {
|
fn env_override_temperature() {
|
||||||
// Both temperature cases tested in one function to avoid env-var
|
// Valid and out-of-range tested together to avoid env-var races.
|
||||||
// races when tests run in parallel.
|
|
||||||
std::env::remove_var("ZEROCLAW_TEMPERATURE");
|
std::env::remove_var("ZEROCLAW_TEMPERATURE");
|
||||||
|
|
||||||
// Valid temperature is applied
|
// Valid temperature is applied
|
||||||
|
|
@ -1636,18 +1623,6 @@ default_temperature = 0.7
|
||||||
std::env::remove_var("ZEROCLAW_TEMPERATURE");
|
std::env::remove_var("ZEROCLAW_TEMPERATURE");
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn env_override_invalid_port_ignored() {
|
|
||||||
let mut config = Config::default();
|
|
||||||
let original_port = config.gateway.port;
|
|
||||||
|
|
||||||
std::env::set_var("PORT", "not_a_number");
|
|
||||||
config.apply_env_overrides();
|
|
||||||
assert_eq!(config.gateway.port, original_port);
|
|
||||||
|
|
||||||
std::env::remove_var("PORT");
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn gateway_config_default_values() {
|
fn gateway_config_default_values() {
|
||||||
let g = GatewayConfig::default();
|
let g = GatewayConfig::default();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue