Skip to content

Commit a85573f

Browse files
authored
Merge branch 'main' into external-browser
2 parents 3ee0575 + 4d4e044 commit a85573f

2 files changed

Lines changed: 31 additions & 51 deletions

File tree

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,7 @@ unimplemented = "deny"
165165

166166
[dev-dependencies]
167167
tokio-test = "0.4"
168+
parking_lot = "0.12"
168169

169170
# OS keystore (macOS Keychain for master key storage)
170171
[target.'cfg(target_os = "macos")'.dependencies]

src/config.rs

Lines changed: 30 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -6714,11 +6714,10 @@ pub fn run_onboarding() -> anyhow::Result<Option<PathBuf>> {
67146714
mod tests {
67156715
use super::*;
67166716
use std::result::Result as StdResult;
6717-
use std::sync::{Mutex, OnceLock};
67186717

6719-
fn env_test_lock() -> &'static Mutex<()> {
6720-
static LOCK: OnceLock<Mutex<()>> = OnceLock::new();
6721-
LOCK.get_or_init(|| Mutex::new(()))
6718+
fn env_test_lock() -> &'static parking_lot::Mutex<()> {
6719+
static LOCK: std::sync::OnceLock<parking_lot::Mutex<()>> = std::sync::OnceLock::new();
6720+
LOCK.get_or_init(|| parking_lot::Mutex::new(()))
67226721
}
67236722

67246723
struct EnvGuard {
@@ -6728,12 +6727,14 @@ mod tests {
67286727

67296728
impl EnvGuard {
67306729
fn new() -> Self {
6731-
const KEYS: [&str; 26] = [
6730+
// NOTE: Keep in sync with provider env vars that affect test behavior
6731+
const KEYS: [&str; 27] = [
67326732
"SPACEBOT_DIR",
67336733
"SPACEBOT_DEPLOYMENT",
67346734
"SPACEBOT_CRON_TIMEZONE",
67356735
"SPACEBOT_USER_TIMEZONE",
67366736
"ANTHROPIC_API_KEY",
6737+
"ANTHROPIC_BASE_URL",
67376738
"ANTHROPIC_OAUTH_TOKEN",
67386739
"OPENAI_API_KEY",
67396740
"OPENROUTER_API_KEY",
@@ -6896,7 +6897,7 @@ api_key = "sk-proj-xyz789"
68966897

68976898
#[test]
68986899
fn test_llm_provider_tables_parse_with_env_and_lowercase_keys() {
6899-
let _lock = env_test_lock().lock().unwrap_or_else(|e| e.into_inner());
6900+
let _lock = env_test_lock().lock();
69006901
let _env = EnvGuard::new();
69016902

69026903
let toml = r#"
@@ -6942,6 +6943,9 @@ api_key = "static-provider-key"
69426943

69436944
#[test]
69446945
fn test_legacy_llm_keys_auto_migrate_to_providers() {
6946+
let _lock = env_test_lock().lock();
6947+
let _env = EnvGuard::new();
6948+
69456949
let toml = r#"
69466950
[llm]
69476951
anthropic_key = "legacy-anthropic-key"
@@ -7072,19 +7076,15 @@ name = "My OpenRouter"
70727076

70737077
#[test]
70747078
fn test_needs_onboarding_without_config_or_env() {
7075-
let _lock = env_test_lock()
7076-
.lock()
7077-
.expect("failed to lock env test mutex");
7079+
let _lock = env_test_lock().lock();
70787080
let _env = EnvGuard::new();
70797081

70807082
assert!(Config::needs_onboarding());
70817083
}
70827084

70837085
#[test]
70847086
fn test_needs_onboarding_with_anthropic_env_key() {
7085-
let _lock = env_test_lock()
7086-
.lock()
7087-
.expect("failed to lock env test mutex");
7087+
let _lock = env_test_lock().lock();
70887088
let _env = EnvGuard::new();
70897089

70907090
unsafe {
@@ -7096,9 +7096,7 @@ name = "My OpenRouter"
70967096

70977097
#[test]
70987098
fn test_needs_onboarding_false_with_oauth_credentials() {
7099-
let _lock = env_test_lock()
7100-
.lock()
7101-
.expect("failed to lock env test mutex");
7099+
let _lock = env_test_lock().lock();
71027100
let _env = EnvGuard::new();
71037101

71047102
// Create an OAuth credentials file in the EnvGuard's temp dir
@@ -7115,9 +7113,7 @@ name = "My OpenRouter"
71157113

71167114
#[test]
71177115
fn test_needs_onboarding_false_with_openai_oauth_credentials() {
7118-
let _lock = env_test_lock()
7119-
.lock()
7120-
.expect("failed to lock env test mutex");
7116+
let _lock = env_test_lock().lock();
71217117
let _env = EnvGuard::new();
71227118

71237119
let instance_dir = Config::default_instance_dir();
@@ -7135,9 +7131,7 @@ name = "My OpenRouter"
71357131

71367132
#[test]
71377133
fn test_load_from_env_populates_legacy_key_and_provider() {
7138-
let _lock = env_test_lock()
7139-
.lock()
7140-
.expect("failed to lock env test mutex");
7134+
let _lock = env_test_lock().lock();
71417135
let _env = EnvGuard::new();
71427136

71437137
unsafe {
@@ -7159,9 +7153,7 @@ name = "My OpenRouter"
71597153

71607154
#[test]
71617155
fn test_hosted_deployment_forces_api_bind_from_toml() {
7162-
let _lock = env_test_lock()
7163-
.lock()
7164-
.expect("failed to lock env test mutex");
7156+
let _lock = env_test_lock().lock();
71657157
let _env = EnvGuard::new();
71667158

71677159
unsafe {
@@ -7181,9 +7173,7 @@ bind = "127.0.0.1"
71817173

71827174
#[test]
71837175
fn test_hosted_deployment_forces_api_bind_from_env_defaults() {
7184-
let _lock = env_test_lock()
7185-
.lock()
7186-
.expect("failed to lock env test mutex");
7176+
let _lock = env_test_lock().lock();
71877177
let _env = EnvGuard::new();
71887178

71897179
unsafe {
@@ -7299,9 +7289,7 @@ bind = "127.0.0.1"
72997289

73007290
#[test]
73017291
fn test_cron_timezone_resolution_precedence() {
7302-
let _lock = env_test_lock()
7303-
.lock()
7304-
.expect("failed to lock env test mutex");
7292+
let _lock = env_test_lock().lock();
73057293
let _env = EnvGuard::new();
73067294

73077295
unsafe {
@@ -7358,9 +7346,7 @@ id = "main"
73587346

73597347
#[test]
73607348
fn test_cron_timezone_invalid_falls_back_to_system() {
7361-
let _lock = env_test_lock()
7362-
.lock()
7363-
.expect("failed to lock env test mutex");
7349+
let _lock = env_test_lock().lock();
73647350
let _env = EnvGuard::new();
73657351

73667352
unsafe {
@@ -7380,9 +7366,7 @@ id = "main"
73807366

73817367
#[test]
73827368
fn test_cron_timezone_invalid_default_uses_env_fallback() {
7383-
let _lock = env_test_lock()
7384-
.lock()
7385-
.expect("failed to lock env test mutex");
7369+
let _lock = env_test_lock().lock();
73867370
let _env = EnvGuard::new();
73877371

73887372
unsafe {
@@ -7405,9 +7389,7 @@ id = "main"
74057389

74067390
#[test]
74077391
fn test_user_timezone_resolution_precedence() {
7408-
let _lock = env_test_lock()
7409-
.lock()
7410-
.expect("failed to lock env test mutex");
7392+
let _lock = env_test_lock().lock();
74117393
let _env = EnvGuard::new();
74127394

74137395
unsafe {
@@ -7454,9 +7436,7 @@ id = "main"
74547436

74557437
#[test]
74567438
fn test_user_timezone_falls_back_to_cron_timezone() {
7457-
let _lock = env_test_lock()
7458-
.lock()
7459-
.expect("failed to lock env test mutex");
7439+
let _lock = env_test_lock().lock();
74607440
let _env = EnvGuard::new();
74617441

74627442
let toml = r#"
@@ -7482,9 +7462,7 @@ id = "main"
74827462

74837463
#[test]
74847464
fn test_user_timezone_invalid_falls_back_to_cron_timezone() {
7485-
let _lock = env_test_lock()
7486-
.lock()
7487-
.expect("failed to lock env test mutex");
7465+
let _lock = env_test_lock().lock();
74887466
let _env = EnvGuard::new();
74897467

74907468
let toml = r#"
@@ -7507,9 +7485,7 @@ id = "main"
75077485

75087486
#[test]
75097487
fn test_user_timezone_invalid_config_uses_env_fallback() {
7510-
let _lock = env_test_lock()
7511-
.lock()
7512-
.expect("failed to lock env test mutex");
7488+
let _lock = env_test_lock().lock();
75137489
let _env = EnvGuard::new();
75147490

75157491
unsafe {
@@ -7797,6 +7773,9 @@ startup_delay_secs = 2
77977773
/// `LlmConfig` without wiring it up in `load_from_env` / `from_toml`, this test fails.
77987774
#[test]
77997775
fn all_shorthand_keys_register_providers_via_toml() {
7776+
let _lock = env_test_lock().lock();
7777+
let _env = EnvGuard::new();
7778+
78007779
// (toml_key, toml_value, provider_name, expected_base_url_substring)
78017780
let cases: &[(&str, &str, &str, &str)] = &[
78027781
("anthropic_key", "test-key", "anthropic", "anthropic.com"),
@@ -7861,7 +7840,7 @@ startup_delay_secs = 2
78617840

78627841
#[test]
78637842
fn all_shorthand_keys_register_providers_via_env() {
7864-
let _lock = env_test_lock().lock().unwrap();
7843+
let _lock = env_test_lock().lock();
78657844

78667845
// (env_var, env_value, provider_name, expected_base_url_substring)
78677846
let cases: &[(&str, &str, &str, &str)] = &[
@@ -8285,7 +8264,7 @@ startup_delay_secs = 2
82858264

82868265
#[test]
82878266
fn toml_round_trip_with_named_instances() {
8288-
let _guard = env_test_lock().lock().unwrap();
8267+
let _guard = env_test_lock().lock();
82898268
let guard = EnvGuard::new();
82908269

82918270
let toml_content = r#"
@@ -8326,7 +8305,7 @@ chat_id = "-100111"
83268305

83278306
#[test]
83288307
fn toml_backward_compat_no_adapter_field() {
8329-
let _guard = env_test_lock().lock().unwrap();
8308+
let _guard = env_test_lock().lock();
83308309
let guard = EnvGuard::new();
83318310

83328311
let toml_content = r#"

0 commit comments

Comments
 (0)