Skip to content

Commit 0660dfa

Browse files
committed
test(kotlin-jvm): set custom logging via builder method
1 parent e07716d commit 0660dfa

File tree

1 file changed

+64
-1
lines changed
  • bindings/kotlin/ldk-node-jvm/lib/src/test/kotlin/org/lightningdevkit/ldknode

1 file changed

+64
-1
lines changed

bindings/kotlin/ldk-node-jvm/lib/src/test/kotlin/org/lightningdevkit/ldknode/LibraryTest.kt

Lines changed: 64 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ import java.net.http.HttpRequest
99
import java.net.http.HttpResponse
1010
import kotlin.io.path.createTempDirectory
1111
import kotlin.test.assertEquals
12-
12+
import kotlin.test.assertTrue
13+
~~~
1314
fun 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)
96150
class 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

Comments
 (0)