8
8
#![ cfg( any( test, cln_test, vss_test) ) ]
9
9
#![ allow( dead_code) ]
10
10
11
+ use chrono:: Utc ;
11
12
use ldk_node:: config:: {
12
13
Config , EsploraSyncConfig , DEFAULT_LOG_FILENAME , DEFAULT_LOG_LEVEL , DEFAULT_STORAGE_DIR_PATH ,
13
14
} ;
14
15
use ldk_node:: io:: sqlite_store:: SqliteStore ;
15
- use ldk_node:: logger:: { LogLevel , LogWriter } ;
16
+ use ldk_node:: logger:: { LogLevel , LogRecord , LogWriter } ;
16
17
use ldk_node:: payment:: { PaymentDirection , PaymentKind , PaymentStatus } ;
17
18
use ldk_node:: {
18
19
Builder , CustomTlvRecord , Event , LightningBalance , Node , NodeError , PendingSweepBalance ,
@@ -39,12 +40,13 @@ use bitcoincore_rpc::RpcApi;
39
40
use electrsd:: { bitcoind, bitcoind:: BitcoinD , ElectrsD } ;
40
41
use electrum_client:: ElectrumApi ;
41
42
43
+ use log:: { Level , LevelFilter , Log , Record } ;
42
44
use rand:: distributions:: Alphanumeric ;
43
45
use rand:: { thread_rng, Rng } ;
44
46
45
47
use std:: env;
46
48
use std:: path:: PathBuf ;
47
- use std:: sync:: { Arc , RwLock } ;
49
+ use std:: sync:: { Arc , Mutex , RwLock } ;
48
50
use std:: time:: Duration ;
49
51
50
52
macro_rules! expect_event {
@@ -1207,3 +1209,90 @@ impl KVStore for TestSyncStore {
1207
1209
self . do_list ( primary_namespace, secondary_namespace)
1208
1210
}
1209
1211
}
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