X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=fuzz%2Fsrc%2Futils%2Ftest_logger.rs;h=5046869c0a9abe1c92a0ee57d86a3f489081d760;hb=d782df01ba430490e5e7a60e673f7990b237102b;hp=097d001dbb25f80e0049a6c1526c379365a0f49f;hpb=e28fd78e67b92de9f42dae3636c5dbea5e9b1f86;p=rust-lightning diff --git a/fuzz/src/utils/test_logger.rs b/fuzz/src/utils/test_logger.rs index 097d001d..5046869c 100644 --- a/fuzz/src/utils/test_logger.rs +++ b/fuzz/src/utils/test_logger.rs @@ -1,23 +1,64 @@ +// This file is Copyright its original authors, visible in version control +// history. +// +// This file is licensed under the Apache License, Version 2.0 or the MIT license +// , at your option. +// You may not use this file except in accordance with one or both of these +// licenses. + use lightning::util::logger::{Logger, Record}; -pub struct TestLogger { - #[cfg(test)] +use std::sync::{Arc, Mutex}; +use std::io::Write; + +pub trait Output : Clone + 'static { + fn locked_write(&self, data: &[u8]); +} + +#[derive(Clone)] +pub struct DevNull {} +impl Output for DevNull { + fn locked_write(&self, _data: &[u8]) {} +} +#[derive(Clone)] +pub struct StringBuffer(Arc>); +impl Output for StringBuffer { + fn locked_write(&self, data: &[u8]) { + self.0.lock().unwrap().push_str(&String::from_utf8(data.to_vec()).unwrap()); + } +} +impl StringBuffer { + pub fn new() -> Self { + Self(Arc::new(Mutex::new(String::new()))) + } + pub fn into_string(self) -> String { + Arc::try_unwrap(self.0).unwrap().into_inner().unwrap() + } +} + +pub struct TestLogger { id: String, + out: Out, +} +impl TestLogger { + pub fn new(id: String, out: Out) -> TestLogger { + TestLogger { id, out } + } } -impl TestLogger { - pub fn new(_id: String) -> TestLogger { - TestLogger { - #[cfg(test)] - id: _id - } +struct LockedWriteAdapter<'a, Out: Output>(&'a Out); +impl<'a, Out: Output> Write for LockedWriteAdapter<'a, Out> { + fn write(&mut self, data: &[u8]) -> Result { + self.0.locked_write(data); + Ok(data.len()) } + fn flush(&mut self) -> Result<(), std::io::Error> { Ok(()) } } -impl Logger for TestLogger { +impl Logger for TestLogger { fn log(&self, record: &Record) { - #[cfg(test)] - println!("{:<5} {} [{} : {}, {}] {}", record.level.to_string(), self.id, record.module_path, record.file, record.line, record.args); - #[cfg(not(test))] - let _ = format!("{}", record.args); + write!(LockedWriteAdapter(&self.out), + "{:<5} {} [{} : {}, {}] {}\n", record.level.to_string(), self.id, record.module_path, record.file, record.line, record.args) + .unwrap(); } }