@@ -6,16 +6,21 @@ package org.lightningdevkit.ldknode
66import kotlin.UInt
77import kotlin.test.Test
88import kotlin.test.assertEquals
9+ import kotlin.test.assertTrue
910import kotlin.io.path.createTempDirectory
1011import org.junit.runner.RunWith
1112import org.lightningdevkit.ldknode.*;
1213import android.content.Context.MODE_PRIVATE
1314import androidx.test.core.app.ApplicationProvider
1415import androidx.test.ext.junit.runners.AndroidJUnit4
16+ import com.sun.jna.Pointer
1517
1618@RunWith(AndroidJUnit4 ::class )
1719class AndroidLibTest {
1820 @Test fun node_start_stop () {
21+ val logWriter1 = CustomLogWriter (CustomLogWriter .LogLevel .GOSSIP )
22+ val logWriter2 = CustomLogWriter (CustomLogWriter .LogLevel .GOSSIP )
23+
1924 val tmpDir1 = createTempDirectory(" ldk_node" ).toString()
2025 println (" Random dir 1: $tmpDir1 " )
2126 val tmpDir2 = createTempDirectory(" ldk_node" ).toString()
@@ -37,6 +42,9 @@ class AndroidLibTest {
3742 val builder1 = Builder .fromConfig(config1)
3843 val builder2 = Builder .fromConfig(config2)
3944
45+ builder1.setCustomLogger(logWriter1)
46+ builder2.setCustomLogger(logWriter2)
47+
4048 val node1 = builder1.build()
4149 val node2 = builder2.build()
4250
@@ -55,7 +63,63 @@ class AndroidLibTest {
5563 val address2 = node2.onchain_payment().newOnchainAddress()
5664 println (" Funding address 2: $address2 " )
5765
66+ assertTrue(logWriter1.getLogMessages().isNotEmpty())
67+ assertTrue(logWriter2.getLogMessages().isNotEmpty())
68+
5869 node1.stop()
5970 node2.stop()
6071 }
6172}
73+
74+ class CustomLogWriter (private var currentLogLevel : LogLevel = LogLevel .INFO ) :
75+ LogWriter (Pointer .NULL ) {
76+ enum class LogLevel {
77+ ERROR , WARN , INFO , DEBUG , TRACE , GOSSIP
78+ }
79+
80+ private val logMessages = mutableListOf<String >()
81+
82+ fun setLogLevel (level : LogLevel ) {
83+ currentLogLevel = level
84+ }
85+
86+ fun getLogMessages (): List <String > {
87+ return logMessages.toList()
88+ }
89+
90+ override fun log (record : LogRecord ) {
91+ val recordLevel =
92+ when (record.level.toString().lowercase()) {
93+ " error" -> LogLevel .ERROR
94+ " warn" -> LogLevel .WARN
95+ " info" -> LogLevel .INFO
96+ " debug" -> LogLevel .DEBUG
97+ " trace" -> LogLevel .TRACE
98+ " gossip" -> LogLevel .GOSSIP
99+ else -> LogLevel .INFO
100+ }
101+
102+ if (isLevelEnabled(recordLevel)) {
103+ val logMessage = formatRecord(record)
104+ logMessages.add(logMessage)
105+ }
106+ }
107+
108+ private fun formatRecord (record : LogRecord ): String {
109+ val timestamp =
110+ java.time.LocalDateTime .now()
111+ .format(java.time.format.DateTimeFormatter .ofPattern(" yyyy-MM-dd HH:mm:ss" ))
112+ return String .format(
113+ " %s %-5s [%s:%d] %s\n " ,
114+ timestamp,
115+ record.level,
116+ record.modulePath,
117+ record.line,
118+ record.args
119+ )
120+ }
121+
122+ private fun isLevelEnabled (level : LogLevel ): Boolean {
123+ return level.ordinal <= currentLogLevel.ordinal
124+ }
125+ }
0 commit comments