77
88#![cfg(any(test, cln_test, vss_test))]
99#![allow(dead_code)]
10+ pub(crate) mod logging;
11+
12+ use logging::TestLogWriter;
1013
11- use chrono::Utc;
1214use ldk_node::config::{
1315 Config, EsploraSyncConfig, DEFAULT_LOG_FILENAME, DEFAULT_LOG_LEVEL, DEFAULT_STORAGE_DIR_PATH,
1416};
1517use ldk_node::io::sqlite_store::SqliteStore;
16- use ldk_node::logger::{LogLevel, LogRecord, LogWriter};
1718use ldk_node::payment::{PaymentDirection, PaymentKind, PaymentStatus};
1819use ldk_node::{
1920 Builder, CustomTlvRecord, Event, LightningBalance, Node, NodeError, PendingSweepBalance,
@@ -40,13 +41,12 @@ use bitcoincore_rpc::RpcApi;
4041use electrsd::{bitcoind, bitcoind::BitcoinD, ElectrsD};
4142use electrum_client::ElectrumApi;
4243
43- use log::{Level, LevelFilter, Log, Record};
4444use rand::distributions::Alphanumeric;
4545use rand::{thread_rng, Rng};
4646
4747use std::env;
4848use std::path::PathBuf;
49- use std::sync::{Arc, Mutex, RwLock};
49+ use std::sync::{Arc, RwLock};
5050use std::time::Duration;
5151
5252macro_rules! expect_event {
@@ -220,28 +220,28 @@ pub(crate) fn random_node_alias() -> Option<NodeAlias> {
220220}
221221
222222pub(crate) fn random_config(anchor_channels: bool) -> TestConfig {
223- let mut config = Config::default();
223+ let mut node_config = Config::default();
224224
225225 if !anchor_channels {
226- config .anchor_channels_config = None;
226+ node_config .anchor_channels_config = None;
227227 }
228228
229- config .network = Network::Regtest;
230- println!("Setting network: {}", config .network);
229+ node_config .network = Network::Regtest;
230+ println!("Setting network: {}", node_config .network);
231231
232232 let rand_dir = random_storage_path();
233233 println!("Setting random LDK storage dir: {}", rand_dir.display());
234- config .storage_dir_path = rand_dir.to_str().unwrap().to_owned();
234+ node_config .storage_dir_path = rand_dir.to_str().unwrap().to_owned();
235235
236236 let rand_listening_addresses = random_listening_addresses();
237237 println!("Setting random LDK listening addresses: {:?}", rand_listening_addresses);
238- config .listening_addresses = Some(rand_listening_addresses);
238+ node_config .listening_addresses = Some(rand_listening_addresses);
239239
240240 let alias = random_node_alias();
241241 println!("Setting random LDK node alias: {:?}", alias);
242- config .node_alias = alias;
242+ node_config .node_alias = alias;
243243
244- TestConfig { node_config: config, log_writer: TestLogWriter ::default() }
244+ TestConfig { node_config, ..Default ::default() }
245245}
246246
247247#[cfg(feature = "uniffi")]
@@ -255,34 +255,12 @@ pub(crate) enum TestChainSource<'a> {
255255 BitcoindRpc(&'a BitcoinD),
256256}
257257
258- #[derive(Clone)]
259- pub(crate) enum TestLogWriter {
260- FileWriter { file_path: String, max_log_level: LogLevel },
261- LogFacade { max_log_level: LogLevel },
262- Custom(Arc<dyn LogWriter>),
263- }
264-
265- impl Default for TestLogWriter {
266- fn default() -> Self {
267- TestLogWriter::FileWriter {
268- file_path: format!("{}/{}", DEFAULT_STORAGE_DIR_PATH, DEFAULT_LOG_FILENAME),
269- max_log_level: DEFAULT_LOG_LEVEL,
270- }
271- }
272- }
273-
274- #[derive(Clone)]
258+ #[derive(Clone, Default)]
275259pub(crate) struct TestConfig {
276260 pub node_config: Config,
277261 pub log_writer: TestLogWriter,
278262}
279263
280- impl Default for TestConfig {
281- fn default() -> Self {
282- Self { node_config: Config::default(), log_writer: TestLogWriter::default() }
283- }
284- }
285-
286264macro_rules! setup_builder {
287265 ($builder: ident, $config: expr) => {
288266 #[cfg(feature = "uniffi")]
@@ -343,10 +321,12 @@ pub(crate) fn setup_node(
343321 }
344322
345323 match &config.log_writer {
346- TestLogWriter::FileWriter { file_path, max_log_level } => {
347- builder.set_filesystem_logger(Some(file_path.clone()), Some(*max_log_level));
324+ TestLogWriter::FileWriter => {
325+ let file_path = format!("{}/{}", DEFAULT_STORAGE_DIR_PATH, DEFAULT_LOG_FILENAME);
326+ let max_log_level = DEFAULT_LOG_LEVEL;
327+ builder.set_filesystem_logger(Some(file_path), Some(max_log_level));
348328 },
349- TestLogWriter::LogFacade { max_log_level } => {
329+ TestLogWriter::LogFacade( max_log_level) => {
350330 builder.set_log_facade_logger(Some(*max_log_level));
351331 },
352332 TestLogWriter::Custom(custom_log_writer) => {
@@ -1209,90 +1189,3 @@ impl KVStore for TestSyncStore {
12091189 self.do_list(primary_namespace, secondary_namespace)
12101190 }
12111191}
1212-
1213- pub(crate) struct MockLogger {
1214- logs: Arc<Mutex<Vec<String>>>,
1215- }
1216-
1217- impl MockLogger {
1218- pub fn new() -> Self {
1219- Self { logs: Arc::new(Mutex::new(Vec::new())) }
1220- }
1221-
1222- pub fn retrieve_logs(&self) -> Vec<String> {
1223- self.logs.lock().unwrap().to_vec()
1224- }
1225- }
1226-
1227- impl Log for MockLogger {
1228- fn enabled(&self, _metadata: &log::Metadata) -> bool {
1229- true
1230- }
1231-
1232- fn log(&self, record: &log::Record) {
1233- let message = format!(
1234- "{} {:<5} [{}:{}] {}",
1235- Utc::now().format("%Y-%m-%d %H:%M:%S"),
1236- record.level().to_string(),
1237- record.module_path().unwrap(),
1238- record.line().unwrap(),
1239- record.args()
1240- );
1241- println!("{message}");
1242- self.logs.lock().unwrap().push(message);
1243- }
1244-
1245- fn flush(&self) {}
1246- }
1247-
1248- impl LogWriter for MockLogger {
1249- fn log<'a>(&self, record: LogRecord) {
1250- let record = MockLogRecord(record).into();
1251- Log::log(self, &record);
1252- }
1253- }
1254-
1255- struct MockLogRecord<'a>(LogRecord<'a>);
1256- struct MockLogLevel(LogLevel);
1257-
1258- impl From<MockLogLevel> for Level {
1259- fn from(level: MockLogLevel) -> Self {
1260- match level.0 {
1261- LogLevel::Gossip | LogLevel::Trace => Level::Trace,
1262- LogLevel::Debug => Level::Debug,
1263- LogLevel::Info => Level::Info,
1264- LogLevel::Warn => Level::Warn,
1265- LogLevel::Error => Level::Error,
1266- }
1267- }
1268- }
1269-
1270- impl<'a> From<MockLogRecord<'a>> for Record<'a> {
1271- fn from(log_record: MockLogRecord<'a>) -> Self {
1272- let log_record = log_record.0;
1273- let level = MockLogLevel(log_record.level).into();
1274-
1275- let mut record_builder = Record::builder();
1276- let record = record_builder
1277- .level(level)
1278- .module_path(Some(log_record.module_path))
1279- .line(Some(log_record.line))
1280- .args(log_record.args);
1281-
1282- record.build()
1283- }
1284- }
1285-
1286- pub(crate) fn init_log_logger(level: LevelFilter) -> Arc<MockLogger> {
1287- let logger = Arc::new(MockLogger::new());
1288- log::set_boxed_logger(Box::new(logger.clone())).unwrap();
1289- log::set_max_level(level);
1290-
1291- logger
1292- }
1293-
1294- pub(crate) fn init_custom_logger() -> Arc<MockLogger> {
1295- let logger = Arc::new(MockLogger::new());
1296-
1297- logger
1298- }
0 commit comments