Skip to content

Commit 7fa2928

Browse files
committed
test(kotlin-android): set custom log writer via builder method
This commit adds a CustomLogWriter class to the kotlin library test, configuring the writer via the exposed node builder and tests the ability to log to the custom writer destination.
1 parent 0347e04 commit 7fa2928

File tree

2 files changed

+65
-0
lines changed

2 files changed

+65
-0
lines changed

bindings/kotlin/ldk-node-android/lib/src/androidTest/kotlin/org/lightningdevkit/ldknode/AndroidLibTest.kt

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,21 @@ package org.lightningdevkit.ldknode
66
import kotlin.UInt
77
import kotlin.test.Test
88
import kotlin.test.assertEquals
9+
import kotlin.test.assertTrue
910
import kotlin.io.path.createTempDirectory
1011
import org.junit.runner.RunWith
1112
import org.lightningdevkit.ldknode.*;
1213
import android.content.Context.MODE_PRIVATE
1314
import androidx.test.core.app.ApplicationProvider
1415
import androidx.test.ext.junit.runners.AndroidJUnit4
16+
import com.sun.jna.Pointer
1517

1618
@RunWith(AndroidJUnit4::class)
1719
class 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+
}

bindings/ldk_node.udl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ interface Builder {
5555
void set_storage_dir_path(string storage_dir_path);
5656
void set_filesystem_logger(FilesystemLoggerConfig fs_config);
5757
void set_log_facade_logger(LogLevel log_level);
58+
void set_custom_logger(LogWriter log_writer);
5859
void set_network(Network network);
5960
[Throws=BuildError]
6061
void set_listening_addresses(sequence<SocketAddress> listening_addresses);

0 commit comments

Comments
 (0)