X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=src%2Ftypes.rs;h=f38a3760b316897b78729d4e96aa865c122b8969;hb=f46a13944933c9c6c42fbeba66473d6e548d7cda;hp=6fafbd3e340fb3507933889d6f47aef63f157ec2;hpb=cf326fd7a9f42c58a24788943745f066ecb5f641;p=rapid-gossip-sync-server diff --git a/src/types.rs b/src/types.rs index 6fafbd3..f38a376 100644 --- a/src/types.rs +++ b/src/types.rs @@ -1,9 +1,10 @@ use std::sync::Arc; use lightning::sign::KeysManager; -use lightning::ln::msgs::{ChannelAnnouncement, ChannelUpdate}; +use lightning::ln::msgs::{ChannelAnnouncement, ChannelUpdate, NodeAnnouncement}; use lightning::ln::peer_handler::{ErroringMessageHandler, IgnoringMessageHandler, PeerManager}; use lightning::util::logger::{Logger, Record}; +use crate::config; use crate::downloader::GossipRouter; use crate::verifier::ChainVerifier; @@ -13,8 +14,10 @@ pub(crate) type GossipPeerManager = Arc), + // the second element is an optional override for the seen value + ChannelAnnouncement(ChannelAnnouncement, Option), + ChannelUpdate(ChannelUpdate, Option), } #[derive(Clone, Copy)] @@ -27,8 +30,64 @@ impl RGSSLogger { } impl Logger for RGSSLogger { - fn log(&self, record: &Record) { - // TODO: allow log level threshold to be set + fn log(&self, record: Record) { + let threshold = config::log_level(); + if record.level < threshold { + return; + } println!("{:<5} [{} : {}, {}] {}", record.level.to_string(), record.module_path, record.file, record.line, record.args); } } + +#[cfg(test)] +pub mod tests { + use std::collections::HashMap; + use std::sync::{Mutex}; + use lightning::util::logger::{Level, Logger, Record}; + + pub struct TestLogger { + level: Level, + pub(crate) id: String, + pub lines: Mutex>, + } + + impl TestLogger { + pub fn new() -> TestLogger { + let id = crate::tests::db_test_schema(); + Self::with_id(id) + } + pub fn with_id(id: String) -> TestLogger { + TestLogger { + level: Level::Gossip, + 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)); + } + + /// Search for the number of occurrence of the logged lines which + /// 1. belongs to the specified module and + /// 2. contains `line` in it. + /// And asserts if the number of occurrences is the same with the given `count` + pub fn assert_log_contains(&self, module: &str, line: &str, count: usize) { + let log_entries = self.lines.lock().unwrap(); + let l: usize = log_entries.iter().filter(|&(&(ref m, ref l), _c)| { + m == module && l.contains(line) + }).map(|(_, c)| { c }).sum(); + assert_eq!(l, 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; + println!("{:<5} {} [{} : {}, {}] {}", record.level.to_string(), self.id, record.module_path, record.file, record.line, record.args); + } + } +}