From feab6faa9e21d29c53ea144634af3ebedd9e196e Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Thu, 23 Feb 2023 17:24:43 +0000 Subject: [PATCH] tor-circmgr: Provide testing feature and TestConfig Like the similar thing in tor-guardmgr. --- Cargo.lock | 1 + crates/tor-circmgr/Cargo.toml | 5 ++++ crates/tor-circmgr/src/config.rs | 43 ++++++++++++++++++++++++++++++++ crates/tor-circmgr/src/lib.rs | 3 +++ 4 files changed, 52 insertions(+) diff --git a/Cargo.lock b/Cargo.lock index a5d14fb4e..f9300bcff 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3731,6 +3731,7 @@ dependencies = [ "async-trait", "bounded-vec-deque", "derive_builder_fork_arti", + "derive_more", "downcast-rs", "dyn-clone", "educe", diff --git a/crates/tor-circmgr/Cargo.toml b/crates/tor-circmgr/Cargo.toml index d06bad9a2..64d2fcd12 100644 --- a/crates/tor-circmgr/Cargo.toml +++ b/crates/tor-circmgr/Cargo.toml @@ -17,6 +17,10 @@ default = [] full = ["specific-relay"] specific-relay = [] +# Enable testing-only APIs. APIs under this feature are not +# covered by semver. +testing = [] + # Enable experimental APIs that are not yet officially supported. # # These APIs are not covered by semantic versioning. Using this @@ -31,6 +35,7 @@ hs-common = ["tor-hscrypto"] async-trait = "0.1.2" bounded-vec-deque = "0.1" derive_builder = { version = "0.11.2", package = "derive_builder_fork_arti" } +derive_more = "0.99.3" downcast-rs = "1.2.0" dyn-clone = "1.0.4" educe = "0.4.6" diff --git a/crates/tor-circmgr/src/config.rs b/crates/tor-circmgr/src/config.rs index 654bdb79d..e4476752c 100644 --- a/crates/tor-circmgr/src/config.rs +++ b/crates/tor-circmgr/src/config.rs @@ -292,6 +292,49 @@ define_accessor_trait! { } } +/// Testing configuration, with public fields +#[cfg(feature = "testing")] +pub(crate) mod test_config { + use super::*; + use crate::*; + use tor_guardmgr::bridge::BridgeConfig; + + /// Testing configuration, with public fields + #[derive(Default)] + #[derive(derive_more::AsRef)] + #[allow(clippy::exhaustive_structs)] + pub struct TestConfig { + /// + pub path_rules: PathConfig, + /// + pub circuit_timing: CircuitTiming, + /// + pub preemptive_circuits: PreemptiveCircuitConfig, + /// + pub guardmgr: tor_guardmgr::TestConfig, + } + impl AsRef<[BridgeConfig]> for TestConfig { + fn as_ref(&self) -> &[BridgeConfig] { + &self.guardmgr.bridges + } + } + impl AsRef for TestConfig { + fn as_ref(&self) -> &FallbackList { + &self.guardmgr.fallbacks + } + } + impl GuardMgrConfig for TestConfig { + fn bridges_enabled(&self) -> bool { + self.guardmgr.bridges_enabled() + } + } + impl CircMgrConfig for TestConfig { + fn path_rules(&self) -> &PathConfig { &self.path_rules } + fn circuit_timing(&self) -> &CircuitTiming { &self.circuit_timing } + fn preemptive_circuits(&self) -> &PreemptiveCircuitConfig { &self.preemptive_circuits } + } +} + #[cfg(test)] mod test { // @@ begin test lint list maintained by maint/add_warning @@ diff --git a/crates/tor-circmgr/src/lib.rs b/crates/tor-circmgr/src/lib.rs index 3e100af19..858dbe40d 100644 --- a/crates/tor-circmgr/src/lib.rs +++ b/crates/tor-circmgr/src/lib.rs @@ -55,6 +55,9 @@ use std::sync::{Arc, Mutex, Weak}; use std::time::{Duration, Instant}; use tracing::{debug, error, info, trace, warn}; +#[cfg(feature = "testing")] +pub use config::test_config::TestConfig; + pub mod build; mod config; mod err;