Add a few tests to tor-config.

This commit is contained in:
Nick Mathewson 2021-12-07 19:52:49 -05:00
parent 42ae8c7a2a
commit b3b6a92145
5 changed files with 95 additions and 4 deletions

24
Cargo.lock generated
View File

@ -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"

View File

@ -25,3 +25,4 @@ directories = { version = "4.0.1", optional = true }
[dev-dependencies]
dirs = "4.0.0"
tracing-test = "0.2.1"

View File

@ -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."));
}
}

View File

@ -66,3 +66,48 @@ impl<T> From<T> for MutCfg<T> {
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<u32> = MutCfg::default();
assert_eq!(*m.get(), 0);
let m: MutCfg<u32> = 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);
}
}

View File

@ -443,9 +443,8 @@ impl<R: Runtime> DirMgr<R> {
// 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(())