Skip to content

Commit 26aff81

Browse files
committed
test(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. [WIP]
1 parent 0347e04 commit 26aff81

File tree

2 files changed

+56
-0
lines changed

2 files changed

+56
-0
lines changed

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

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ 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.*;
@@ -16,6 +17,9 @@ import androidx.test.ext.junit.runners.AndroidJUnit4
1617
@RunWith(AndroidJUnit4::class)
1718
class AndroidLibTest {
1819
@Test fun node_start_stop() {
20+
val logWriter1 = CustomLogWriter(CustomLogWriter.LogLevel.GOSSIP)
21+
val logWriter2 = CustomLogWriter(CustomLogWriter.LogLevel.GOSSIP)
22+
1923
val tmpDir1 = createTempDirectory("ldk_node").toString()
2024
println("Random dir 1: $tmpDir1")
2125
val tmpDir2 = createTempDirectory("ldk_node").toString()
@@ -37,6 +41,9 @@ class AndroidLibTest {
3741
val builder1 = Builder.fromConfig(config1)
3842
val builder2 = Builder.fromConfig(config2)
3943

44+
builder1.set_custom_logger(logWriter1)
45+
builder2.set_custom_logger(logWriter2)
46+
4047
val node1 = builder1.build()
4148
val node2 = builder2.build()
4249

@@ -55,7 +62,55 @@ class AndroidLibTest {
5562
val address2 = node2.onchain_payment().newOnchainAddress()
5663
println("Funding address 2: $address2")
5764

65+
assertTrue(logWriter1.getLogMessages().isNotEmpty())
66+
assertTrue(logWriter2.getLogMessages().isNotEmpty())
67+
5868
node1.stop()
5969
node2.stop()
6070
}
6171
}
72+
73+
class CustomLogWriter(private var currentLogLevel: LogLevel = LogLevel.INFO): LogWriter {
74+
enum class LogLevel {
75+
ERROR, WARN, INFO, DEBUG, TRACE, GOSSIP
76+
}
77+
78+
private val logMessages = mutableListOf<String>()
79+
80+
fun setLogLevel(level: LogLevel) {
81+
currentLogLevel = level
82+
}
83+
84+
override fun log(record: LogRecord) {
85+
val recordLevel = when(record.level.toLowerCase()) {
86+
"error" -> LogLevel.ERROR
87+
"warn" -> LogLevel.WARN
88+
"info" -> LogLevel.INFO
89+
"debug" -> LogLevel.DEBUG
90+
"trace" -> LogLevel.TRACE
91+
"gossip" -> LogLevel.GOSSIP
92+
else -> LogLevel.INFO
93+
}
94+
95+
if (isLevelEnabled(recordLevel)) {
96+
val log_message = formatRecord(record)
97+
logMessages.add(log_message)
98+
}
99+
}
100+
101+
private fun formatRecord(record: LogRecord): String {
102+
val timestamp = java.time.LocalDateTime.now().format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))
103+
return String.format(
104+
"%s %-5s [%s:%d] %s\n",
105+
timestamp,
106+
record.level,
107+
record.modulePath,
108+
record.line,
109+
record.message
110+
)
111+
}
112+
113+
private fun isLevelEnabled(level: LogLevel): Boolean {
114+
return level.ordinal <= currentLogLevel.ordinal
115+
}
116+
}

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)