Skip to content

Commit 9bb5753

Browse files
committed
tests: replace env lock clippy allows with async-aware guards
1 parent 56e0949 commit 9bb5753

6 files changed

Lines changed: 24 additions & 16 deletions

File tree

crates/rexos-tools/src/browser_cdp/tests/discovery.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use axum::{Json, Router};
99
use serde_json::json;
1010

1111
use super::super::discovery::{find_or_create_page_ws, read_devtools_url};
12-
use super::shared::{EnvVarGuard, ENV_LOCK};
12+
use super::shared::{async_env_lock, EnvVarGuard};
1313

1414
#[tokio::test]
1515
async fn find_or_create_page_ws_bypasses_proxy_for_loopback() {
@@ -51,7 +51,6 @@ async fn find_or_create_page_ws_bypasses_proxy_for_loopback() {
5151
}
5252

5353
#[tokio::test]
54-
#[allow(clippy::await_holding_lock)]
5554
async fn cdp_tab_mode_reuse_skips_json_new() {
5655
#[derive(Clone)]
5756
struct StateData {
@@ -86,7 +85,7 @@ async fn cdp_tab_mode_reuse_skips_json_new() {
8685
axum::serve(listener, app).await.unwrap();
8786
});
8887

89-
let _lock = ENV_LOCK.lock().unwrap_or_else(|err| err.into_inner());
88+
let _lock = async_env_lock().lock().await;
9089
let _mode = EnvVarGuard::set("LOOPFORGE_BROWSER_CDP_TAB_MODE", "reuse");
9190

9291
let http = reqwest::Client::builder()

crates/rexos-tools/src/browser_cdp/tests/shared.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
11
pub(super) static ENV_LOCK: std::sync::Mutex<()> = std::sync::Mutex::new(());
2+
static ASYNC_ENV_LOCK: std::sync::OnceLock<tokio::sync::Mutex<()>> = std::sync::OnceLock::new();
3+
4+
pub(super) fn async_env_lock() -> &'static tokio::sync::Mutex<()> {
5+
ASYNC_ENV_LOCK.get_or_init(|| tokio::sync::Mutex::new(()))
6+
}
27

38
pub(super) struct EnvVarGuard {
49
key: &'static str,

crates/rexos-tools/src/tests/browser/bridge.rs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,8 @@ use super::shared::{stub_bridge_script, EnvVarGuard};
22
use super::*;
33

44
#[tokio::test]
5-
#[allow(clippy::await_holding_lock)]
65
async fn browser_tools_work_with_stub_bridge() {
7-
let _lock = ENV_LOCK.lock().unwrap_or_else(|e| e.into_inner());
6+
let _lock = async_env_lock().lock().await;
87

98
let tmp = tempfile::tempdir().unwrap();
109
let workspace = tmp.path().join("ws");
@@ -96,9 +95,8 @@ async fn browser_tools_work_with_stub_bridge() {
9695
}
9796

9897
#[tokio::test]
99-
#[allow(clippy::await_holding_lock)]
10098
async fn browser_navigate_honors_headless_flag() {
101-
let _lock = ENV_LOCK.lock().unwrap_or_else(|e| e.into_inner());
99+
let _lock = async_env_lock().lock().await;
102100

103101
let tmp = tempfile::tempdir().unwrap();
104102
let workspace = tmp.path().join("ws");

crates/rexos-tools/src/tests/mod.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,14 @@ use axum::routing::{get, post};
66
use axum::{Json, Router};
77
use base64::Engine as _;
88
use std::ffi::OsString;
9-
use std::sync::Mutex;
9+
use std::sync::{Mutex, OnceLock};
1010

1111
static ENV_LOCK: Mutex<()> = Mutex::new(());
12+
static ASYNC_ENV_LOCK: OnceLock<tokio::sync::Mutex<()>> = OnceLock::new();
13+
14+
fn async_env_lock() -> &'static tokio::sync::Mutex<()> {
15+
ASYNC_ENV_LOCK.get_or_init(|| tokio::sync::Mutex::new(()))
16+
}
1217

1318
mod browser;
1419
mod compat;

crates/rexos-tools/src/tests/process/lifecycle.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
use super::*;
22

33
#[tokio::test]
4-
#[allow(clippy::await_holding_lock)]
54
async fn docker_exec_is_disabled_by_default() {
6-
let _lock = ENV_LOCK.lock().unwrap_or_else(|e| e.into_inner());
5+
let _lock = async_env_lock().lock().await;
76

87
let previous = std::env::var_os("LOOPFORGE_DOCKER_EXEC_ENABLED");
98
std::env::remove_var("LOOPFORGE_DOCKER_EXEC_ENABLED");

crates/rexos/tests/llm_openai_compat.rs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
1-
use std::sync::{Arc, Mutex};
1+
use std::sync::{Arc, Mutex, OnceLock};
22

33
use axum::extract::State;
44
use axum::routing::post;
55
use axum::{Json, Router};
66
use serde_json::json;
77

8-
static ENV_LOCK: Mutex<()> = Mutex::new(());
8+
static ENV_LOCK: OnceLock<tokio::sync::Mutex<()>> = OnceLock::new();
9+
10+
fn env_lock() -> &'static tokio::sync::Mutex<()> {
11+
ENV_LOCK.get_or_init(|| tokio::sync::Mutex::new(()))
12+
}
913

1014
#[derive(Clone, Default)]
1115
struct TestState {
@@ -109,9 +113,8 @@ async fn openai_compat_client_posts_and_parses_tool_calls() {
109113
}
110114

111115
#[tokio::test]
112-
#[allow(clippy::await_holding_lock)]
113116
async fn openai_compat_client_retries_transient_http_errors() {
114-
let _lock = ENV_LOCK.lock().unwrap_or_else(|e| e.into_inner());
117+
let _lock = env_lock().lock().await;
115118
let _guard = EnvVarGuard::set("LOOPFORGE_LLM_RETRY_MAX", "1");
116119

117120
async fn handler(
@@ -244,9 +247,8 @@ async fn openai_compat_client_parses_legacy_function_call_into_tool_call() {
244247
}
245248

246249
#[tokio::test]
247-
#[allow(clippy::await_holding_lock)]
248250
async fn openai_compat_client_timeout_can_be_overridden_via_env() {
249-
let _lock = ENV_LOCK.lock().unwrap_or_else(|e| e.into_inner());
251+
let _lock = env_lock().lock().await;
250252
let _guard = EnvVarGuard::set("LOOPFORGE_OPENAI_COMPAT_TIMEOUT_SECS", "1");
251253
let _retry_guard = EnvVarGuard::set("LOOPFORGE_LLM_RETRY_MAX", "0");
252254

0 commit comments

Comments
 (0)