From b3b6a92145380ebe685bd2410db32fdee4a97e9b Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Tue, 7 Dec 2021 19:52:49 -0500 Subject: [PATCH] Add a few tests to tor-config. --- Cargo.lock | 24 +++++++++++++++++ crates/tor-config/Cargo.toml | 1 + crates/tor-config/src/lib.rs | 24 ++++++++++++++++- crates/tor-config/src/mut_cfg.rs | 45 ++++++++++++++++++++++++++++++++ crates/tor-dirmgr/src/lib.rs | 5 ++-- 5 files changed, 95 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index aa56c4116..9b17008e5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2595,6 +2595,7 @@ dependencies = [ "shellexpand", "thiserror", "tracing", + "tracing-test", ] [[package]] @@ -2979,6 +2980,29 @@ dependencies = [ "tracing-log", ] +[[package]] +name = "tracing-test" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3eb7bda2e93bbc9c5b247034acc6a4b3d04f033a3d4b8fc1cb87d4d1c7c7ebd7" +dependencies = [ + "lazy_static", + "tracing-core", + "tracing-subscriber", + "tracing-test-macro", +] + +[[package]] +name = "tracing-test-macro" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4801dca35e4e2cee957c469bd4a1c370fadb7894c0d50721a40eba3523e6e91c" +dependencies = [ + "lazy_static", + "quote", + "syn", +] + [[package]] name = "try-lock" version = "0.2.3" diff --git a/crates/tor-config/Cargo.toml b/crates/tor-config/Cargo.toml index 5311a6648..79808bc1c 100644 --- a/crates/tor-config/Cargo.toml +++ b/crates/tor-config/Cargo.toml @@ -25,3 +25,4 @@ directories = { version = "4.0.1", optional = true } [dev-dependencies] dirs = "4.0.0" +tracing-test = "0.2.1" diff --git a/crates/tor-config/src/lib.rs b/crates/tor-config/src/lib.rs index 0a96431f9..b58b86797 100644 --- a/crates/tor-config/src/lib.rs +++ b/crates/tor-config/src/lib.rs @@ -69,9 +69,31 @@ impl Reconfigure { }) } Reconfigure::WarnOnFailures => { - tracing::warn!("Cannot change field {} on a running client", field.as_ref()); + tracing::warn!("Cannot change {} on a running client.", field.as_ref()); Ok(()) } } } } + +#[cfg(test)] +mod test { + use super::*; + use tracing_test::traced_test; + + #[test] + #[traced_test] + fn reconfigure_helpers() { + let how = Reconfigure::AllOrNothing; + let err = how.cannot_change("the_laws_of_physics").unwrap_err(); + assert_eq!( + err.to_string(), + "Cannot change the_laws_of_physics on a running client.".to_owned() + ); + + let how = Reconfigure::WarnOnFailures; + let ok = how.cannot_change("stuff"); + assert!(ok.is_ok()); + assert!(logs_contain("Cannot change stuff on a running client.")); + } +} diff --git a/crates/tor-config/src/mut_cfg.rs b/crates/tor-config/src/mut_cfg.rs index 73a101d20..792b13fed 100644 --- a/crates/tor-config/src/mut_cfg.rs +++ b/crates/tor-config/src/mut_cfg.rs @@ -66,3 +66,48 @@ impl From for MutCfg { MutCfg::new(config) } } + +#[cfg(test)] +mod test { + use super::*; + + #[test] + fn basic_constructors() { + let m = MutCfg::new(7_u32); + assert_eq!(*m.get(), 7); + let m: MutCfg = MutCfg::default(); + assert_eq!(*m.get(), 0); + let m: MutCfg = 100.into(); + assert_eq!(*m.get(), 100); + } + + #[test] + fn mutate_with_existing_ref() { + let m = MutCfg::new(100_u32); + let old_ref = m.get(); + m.replace(101); + assert_eq!(*old_ref, 100); + assert_eq!(*m.get(), 101); + } + + #[test] + fn check_and_replace() { + let m = MutCfg::new(100_u32); + let different_100 = Arc::new(100_u32); + // won't replace, since it is a different arc. + assert!(!m.check_and_replace(&different_100, 200)); + let old_100 = m.get(); + assert_eq!(*old_100, 100); + assert!(m.check_and_replace(&old_100, 200)); + assert_eq!(*m.get(), 200); + } + + #[test] + fn map_and_replace() { + let m = MutCfg::new(100_u32); + let m_old = m.get(); + m.map_and_replace(|old_val| **old_val * 20); + assert_eq!(*m.get(), 2000); + assert_eq!(*m_old, 100); + } +} diff --git a/crates/tor-dirmgr/src/lib.rs b/crates/tor-dirmgr/src/lib.rs index 05e90d03f..89c51df41 100644 --- a/crates/tor-dirmgr/src/lib.rs +++ b/crates/tor-dirmgr/src/lib.rs @@ -443,9 +443,8 @@ impl DirMgr { // was no current netdir.) self.netdir_consensus_changed.store(true, Ordering::SeqCst); - // TODO(nickm): need to make sure that notify gets called. But - // first I should probably refactor notify() to be more like the - // backend for tor-events. + // TODO(nickm): need to make sure that notify gets called. But first I should probably + // refactor notify() to be more like the backend for tor-events. } Ok(())