Add assert_log method to TestLogger to harden test
authorAntoine Riard <ariard@student.42.fr>
Mon, 30 Dec 2019 22:30:27 +0000 (17:30 -0500)
committerAntoine Riard <ariard@student.42.fr>
Sun, 5 Jan 2020 22:23:32 +0000 (17:23 -0500)
Extend mock Node with logger.

lightning/src/ln/functional_test_utils.rs
lightning/src/util/test_utils.rs

index 45e04b94673dae4f4ee51441c923df98e7faa1b8..e99e96097aade150ee0ffed542ef7ce5ec72098b 100644 (file)
@@ -66,6 +66,7 @@ pub struct Node {
        pub node_seed: [u8; 32],
        pub network_payment_count: Rc<RefCell<u8>>,
        pub network_chan_count: Rc<RefCell<u32>>,
+       pub logger: Arc<test_utils::TestLogger>
 }
 impl Drop for Node {
        fn drop(&mut self) {
@@ -835,7 +836,8 @@ pub fn create_network(node_count: usize, node_config: &[Option<UserConfig>]) ->
        let payment_count = Rc::new(RefCell::new(0));
 
        for i in 0..node_count {
-               let logger: Arc<Logger> = Arc::new(test_utils::TestLogger::with_id(format!("node {}", i)));
+               let test_logger = Arc::new(test_utils::TestLogger::with_id(format!("node {}", i)));
+               let logger = &(Arc::clone(&test_logger) as Arc<Logger>);
                let feeest = Arc::new(test_utils::TestFeeEstimator { sat_per_kw: 253 });
                let chain_monitor = Arc::new(chaininterface::ChainWatchInterfaceUtil::new(Network::Testnet, Arc::clone(&logger)));
                let block_notifier = Arc::new(chaininterface::BlockNotifier::new(chain_monitor.clone()));
@@ -857,6 +859,7 @@ pub fn create_network(node_count: usize, node_config: &[Option<UserConfig>]) ->
                        network_payment_count: payment_count.clone(),
                        network_chan_count: chan_count.clone(),
                        block_notifier,
+                       logger: test_logger
                });
        }
 
index 6ea1265c3107603f25be46d272b64811b28dd870..4381e21768c0be0a7665cfe0ce190353fdeff5dc 100644 (file)
@@ -22,6 +22,7 @@ use secp256k1::{SecretKey, PublicKey};
 use std::time::{SystemTime, UNIX_EPOCH};
 use std::sync::{Arc,Mutex};
 use std::{mem};
+use std::collections::HashMap;
 
 pub struct TestVecWriter(pub Vec<u8>);
 impl Writer for TestVecWriter {
@@ -190,6 +191,7 @@ impl msgs::RoutingMessageHandler for TestRoutingMessageHandler {
 pub struct TestLogger {
        level: Level,
        id: String,
+       pub lines: Mutex<HashMap<(String, String), usize>>,
 }
 
 impl TestLogger {
@@ -200,15 +202,21 @@ impl TestLogger {
                TestLogger {
                        level: Level::Trace,
                        id,
+                       lines: Mutex::new(HashMap::new())
                }
        }
        pub fn enable(&mut self, level: Level) {
                self.level = level;
        }
+       pub fn assert_log(&self, module: String, line: String, count: usize) {
+               let log_entries = self.lines.lock().unwrap();
+               assert_eq!(log_entries.get(&(module, line)), Some(&count));
+       }
 }
 
 impl Logger for TestLogger {
        fn log(&self, record: &Record) {
+               *self.lines.lock().unwrap().entry((record.module_path.to_string(), format!("{}", record.args))).or_insert(0) += 1;
                if self.level >= record.level {
                        println!("{:<5} {} [{} : {}, {}] {}", record.level.to_string(), self.id, record.module_path, record.file, record.line, record.args);
                }