Bladeren bron

Panic if the logger is not set.

Added a "must-log" feature to test_utils to turn it on or off. This is
a useful feature so it is turned on by default.
Jing Yang 4 jaren geleden
bovenliggende
commit
fdcfcfb31e
3 gewijzigde bestanden met toevoegingen van 30 en 4 verwijderingen
  1. 4 0
      test_utils/Cargo.toml
  2. 19 2
      test_utils/src/thread_local_logger.rs
  3. 7 2
      tests/persist_tests.rs

+ 4 - 0
test_utils/Cargo.toml

@@ -7,3 +7,7 @@ edition = "2018"
 env_logger = "0.8"
 log = "0.4"
 rand = "0.8"
+
+[features]
+default = ["must-log"]
+must-log = []

+ 19 - 2
test_utils/src/thread_local_logger.rs

@@ -5,8 +5,12 @@ use log::{Log, Metadata, Record};
 use std::fmt::Formatter;
 
 pub struct GlobalLogger;
+#[cfg(not(feature = "must-log"))]
 #[derive(Clone)]
 pub struct LocalLogger(Arc<dyn Log>);
+#[cfg(feature = "must-log")]
+#[derive(Clone)]
+pub struct LocalLogger(Option<Arc<dyn Log>>);
 
 thread_local!(static LOCAL_LOGGER: RefCell<LocalLogger> = Default::default());
 
@@ -24,7 +28,10 @@ pub fn global_init_once() {
 
 pub fn thread_init<T: 'static + Log>(logger: T) {
     global_init_once();
+    #[cfg(not(feature = "must-log"))]
     self::set(LocalLogger(Arc::new(logger)));
+    #[cfg(feature = "must-log")]
+    self::set(LocalLogger(Some(Arc::new(logger))));
 }
 
 pub fn get() -> LocalLogger {
@@ -41,7 +48,12 @@ pub fn reset() {
 
 impl Default for LocalLogger {
     fn default() -> Self {
-        Self(Arc::new(NopLogger))
+        #[cfg(not(feature = "must-log"))]
+        {
+            Self(Arc::new(NopLogger))
+        }
+        #[cfg(feature = "must-log")]
+        Self(None)
     }
 }
 
@@ -49,7 +61,12 @@ impl std::ops::Deref for LocalLogger {
     type Target = dyn Log;
 
     fn deref(&self) -> &Self::Target {
-        self.0.deref()
+        #[cfg(not(feature = "must-log"))]
+        {
+            self.0.deref()
+        }
+        #[cfg(feature = "must-log")]
+        self.0.as_ref().unwrap().as_ref()
     }
 }
 

+ 7 - 2
tests/persist_tests.rs

@@ -219,8 +219,11 @@ fn unreliable_agree() -> config::Result<()> {
     for iters in 1..50 {
         for j in 0..4 {
             let cfg = cfg.clone();
-            let handle =
-                std::thread::spawn(move || cfg.one(100 * iters + j, 1, true));
+            let logger = test_utils::thread_local_logger::get();
+            let handle = std::thread::spawn(move || {
+                test_utils::thread_local_logger::set(logger);
+                cfg.one(100 * iters + j, 1, true)
+            });
             handles.push(handle);
         }
 
@@ -318,7 +321,9 @@ fn internal_churn(unreliable: bool) -> config::Result<()> {
     for client_index in 0..3 {
         let stop = stop.clone();
         let cfg = cfg.clone();
+        let logger = test_utils::thread_local_logger::get();
         let handle = std::thread::spawn(move || {
+            test_utils::thread_local_logger::set(logger);
             let mut cmds = vec![];
             while !stop.load(Ordering::SeqCst) {
                 let cmd = thread_rng().gen();