From 40942c41310af1fdb5f50bb77bba470f49f68e1e Mon Sep 17 00:00:00 2001 From: "Zhidong Peng (HE/HIM)" Date: Thu, 22 Jan 2026 14:41:14 -0800 Subject: [PATCH] Remove ctor crate dependency from proxy_agent --- Cargo.lock | 3 +- proxy_agent/Cargo.toml | 3 +- proxy_agent/src/service.rs | 28 ------------ proxy_agent_shared/Cargo.toml | 2 +- .../src/logger/logger_manager.rs | 43 +++++++++++-------- 5 files changed, 28 insertions(+), 51 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 1ce68fed..10faed82 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -177,7 +177,6 @@ dependencies = [ "aya", "bitflags", "clap", - "ctor", "http", "http-body-util", "hyper", @@ -941,13 +940,13 @@ version = "9.9.9" dependencies = [ "chrono", "concurrent-queue", - "ctor", "hex", "http", "http-body-util", "hyper", "hyper-util", "itertools", + "libc", "log", "once_cell", "openssl", diff --git a/proxy_agent/Cargo.toml b/proxy_agent/Cargo.toml index b943d7e3..f7dd3a01 100644 --- a/proxy_agent/Cargo.toml +++ b/proxy_agent/Cargo.toml @@ -27,7 +27,7 @@ tower = { version = "0.5.2", features = ["full"] } tower-http = { version = "0.6.2", features = ["limit"] } clap = { version = "4.5.17", features =["derive"] } # Command Line Argument Parser thiserror = "1.0.64" -ctor = "0.3.6" # used for test setup and clean up +libc = "0.2.147" [dependencies.uuid] version = "1.3.0" @@ -40,7 +40,6 @@ features = [ sysinfo = "0.30.13" # read process information for Linux aya = "0.13.1" # linux ebpf program loader uzers = "0.12.1" # get user name -libc = "0.2.147" # linux call [target.'cfg(not(windows))'.dependencies.nix] version = "0.29.0" diff --git a/proxy_agent/src/service.rs b/proxy_agent/src/service.rs index 23e8011e..500acbc9 100644 --- a/proxy_agent/src/service.rs +++ b/proxy_agent/src/service.rs @@ -158,31 +158,3 @@ pub fn stop_service(shared_state: SharedState) { event_logger::stop(); } - -#[cfg(test)] -mod tests { - use ctor::{ctor, dtor}; - use proxy_agent_shared::logger::LoggerLevel; - use std::env; - use std::fs; - - const TEST_LOGGER_KEY: &str = "proxy_agent_test"; - - fn get_temp_test_dir() -> std::path::PathBuf { - let mut temp_test_path = env::temp_dir(); - temp_test_path.push(TEST_LOGGER_KEY); - temp_test_path - } - - #[ctor] - fn setup() { - // Setup logger_manager for unit tests - super::setup_loggers(get_temp_test_dir(), LoggerLevel::Trace); - } - - #[dtor] - fn cleanup() { - // clean up and ignore the clean up errors - _ = fs::remove_dir_all(&get_temp_test_dir()); - } -} diff --git a/proxy_agent_shared/Cargo.toml b/proxy_agent_shared/Cargo.toml index 182100b3..db6eccf4 100644 --- a/proxy_agent_shared/Cargo.toml +++ b/proxy_agent_shared/Cargo.toml @@ -18,8 +18,8 @@ regex = "1.11" # match file name thiserror = "1.0.64" tokio = { version = "1", features = ["rt", "macros", "sync", "time"] } tokio-util = "0.7.11" +libc = "0.2.147" log = { version = "0.4.26", features = ["std"] } -ctor = "0.3.6" # used for test setup and clean up hex = "0.4.3" # hex encode itertools = "0.10.5" # use to sort iterator elements into a new iterator in ascending order http = "1.1.0" diff --git a/proxy_agent_shared/src/logger/logger_manager.rs b/proxy_agent_shared/src/logger/logger_manager.rs index 4ab046b8..4d3bf188 100644 --- a/proxy_agent_shared/src/logger/logger_manager.rs +++ b/proxy_agent_shared/src/logger/logger_manager.rs @@ -195,11 +195,12 @@ fn get_max_system_logger_level() -> LoggerLevel { mod tests { use crate::logger::LoggerLevel; use crate::misc_helpers; - use ctor::{ctor, dtor}; use std::env; use std::fs; + use std::sync::Once; const TEST_LOGGER_KEY: &str = "logger_manager_test"; + static TEST_INIT: Once = Once::new(); fn get_temp_test_dir() -> std::path::PathBuf { let mut temp_test_path = env::temp_dir(); @@ -207,32 +208,38 @@ mod tests { temp_test_path } - #[ctor] fn setup() { - // Setup logger_manager for unit tests - let logger = crate::logger::rolling_logger::RollingLogger::create_new( - get_temp_test_dir(), - "test.log".to_string(), - 200, - 6, - ); - let mut loggers = std::collections::HashMap::new(); - loggers.insert(TEST_LOGGER_KEY.to_string(), logger); - crate::logger::logger_manager::set_loggers( - loggers, - TEST_LOGGER_KEY.to_string(), - LoggerLevel::Trace, - ); + TEST_INIT.call_once(|| { + // Setup logger_manager for unit tests + let logger = crate::logger::rolling_logger::RollingLogger::create_new( + get_temp_test_dir(), + "test.log".to_string(), + 200, + 6, + ); + let mut loggers = std::collections::HashMap::new(); + loggers.insert(TEST_LOGGER_KEY.to_string(), logger); + crate::logger::logger_manager::set_loggers( + loggers, + TEST_LOGGER_KEY.to_string(), + LoggerLevel::Trace, + ); + + unsafe { + libc::atexit(cleanup); + } + }); } - #[dtor] - fn cleanup() { + extern "C" fn cleanup() { // clean up and ignore the clean up errors _ = fs::remove_dir_all(&get_temp_test_dir()); } #[test] fn logger_manager_test() { + setup(); + for _ in [0; 20] { super::write_log( LoggerLevel::Trace,