@@ -9,7 +9,8 @@ import java.net.http.HttpRequest
99import java.net.http.HttpResponse
1010import kotlin.io.path.createTempDirectory
1111import kotlin.test.assertEquals
12-
12+ import kotlin.test.assertTrue
13+ ~~~
1314fun runCommandAndWait (vararg cmd : String ): String {
1415 println (" Running command \" ${cmd.joinToString(" " )} \" " )
1516
@@ -92,6 +93,59 @@ fun waitForBlock(esploraEndpoint: String, blockHash: String) {
9293 }
9394}
9495
96+ class CustomLogWriter (private var currentLogLevel : LogLevel = LogLevel .INFO , noPointer : NoPointer = NoPointer ) :
97+ LogWriter (noPointer) {
98+ enum class LogLevel {
99+ ERROR , WARN , INFO , DEBUG , TRACE , GOSSIP
100+ }
101+
102+ private val logMessages = mutableListOf<String >()
103+
104+ fun setLogLevel (level : LogLevel ) {
105+ currentLogLevel = level
106+ }
107+
108+ fun getLogMessages (): List <String > {
109+ return logMessages.toList()
110+ }
111+
112+ override fun log (record : LogRecord ) {
113+ val recordLevel =
114+ when (record.level.toString().lowercase()) {
115+ " error" -> LogLevel .ERROR
116+ " warn" -> LogLevel .WARN
117+ " info" -> LogLevel .INFO
118+ " debug" -> LogLevel .DEBUG
119+ " trace" -> LogLevel .TRACE
120+ " gossip" -> LogLevel .GOSSIP
121+ else -> LogLevel .INFO
122+ }
123+
124+ if (isLevelEnabled(recordLevel)) {
125+ val logMessage = formatRecord(record)
126+ logMessages.add(logMessage)
127+ }
128+ }
129+
130+ private fun formatRecord (record : LogRecord ): String {
131+ val timestamp =
132+ java.time.LocalDateTime .now()
133+ .format(java.time.format.DateTimeFormatter .ofPattern(" yyyy-MM-dd HH:mm:ss" ))
134+ return String .format(
135+ " %s %-5s [%s:%d] %s\n " ,
136+ timestamp,
137+ record.level,
138+ record.modulePath,
139+ record.line,
140+ record.args
141+ )
142+ }
143+
144+ private fun isLevelEnabled (level : LogLevel ): Boolean {
145+ return level.ordinal <= currentLogLevel.ordinal
146+ }
147+ }
148+
95149@TestInstance(TestInstance .Lifecycle .PER_CLASS )
96150class LibraryTest {
97151
@@ -106,6 +160,9 @@ class LibraryTest {
106160 }
107161
108162 @Test fun fullCycle () {
163+ val logWriter1 = CustomLogWriter (CustomLogWriter .LogLevel .GOSSIP )
164+ val logWriter2 = CustomLogWriter (CustomLogWriter .LogLevel .GOSSIP )
165+
109166 val tmpDir1 = createTempDirectory(" ldk_node" ).toString()
110167 println (" Random dir 1: $tmpDir1 " )
111168 val tmpDir2 = createTempDirectory(" ldk_node" ).toString()
@@ -129,8 +186,11 @@ class LibraryTest {
129186
130187 val builder1 = Builder .fromConfig(config1)
131188 builder1.setChainSourceEsplora(esploraEndpoint, null )
189+ builder1.setCustomLogger(logWriter1)
190+
132191 val builder2 = Builder .fromConfig(config2)
133192 builder2.setChainSourceEsplora(esploraEndpoint, null )
193+ builder2.setCustomLogger(logWriter2)
134194
135195 val node1 = builder1.build()
136196 val node2 = builder2.build()
@@ -262,6 +322,9 @@ class LibraryTest {
262322 assert (spendableBalance1AfterClose < 100000u )
263323 assertEquals(102500uL , spendableBalance2AfterClose)
264324
325+ assertTrue(logWriter1.getLogMessages().isNotEmpty())
326+ assertTrue(logWriter2.getLogMessages().isNotEmpty())
327+
265328 node1.stop()
266329 node2.stop()
267330 }
0 commit comments