Skip to content

Commit 3d2a47d

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

File tree

1 file changed

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

1 file changed

+65
-0
lines changed

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

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@ import java.net.http.HttpRequest
99
import java.net.http.HttpResponse
1010
import kotlin.io.path.createTempDirectory
1111
import kotlin.test.assertEquals
12+
import com.sun.jna.Pointer
13+
import kotlin.test.DefaultAsserter.assertTrue
14+
import kotlin.test.assertTrue
1215

1316
fun runCommandAndWait(vararg cmd: String): String {
1417
println("Running command \"${cmd.joinToString(" ")}\"")
@@ -92,6 +95,59 @@ fun waitForBlock(esploraEndpoint: String, blockHash: String) {
9295
}
9396
}
9497

98+
class CustomLogWriter(private var currentLogLevel: LogLevel = LogLevel.INFO) :
99+
LogWriter(Pointer.NULL) {
100+
enum class LogLevel {
101+
ERROR, WARN, INFO, DEBUG, TRACE, GOSSIP
102+
}
103+
104+
private val logMessages = mutableListOf<String>()
105+
106+
fun setLogLevel(level: LogLevel) {
107+
currentLogLevel = level
108+
}
109+
110+
fun getLogMessages(): List<String> {
111+
return logMessages.toList()
112+
}
113+
114+
override fun log(record: LogRecord) {
115+
val recordLevel =
116+
when (record.level.toString().lowercase()) {
117+
"error" -> LogLevel.ERROR
118+
"warn" -> LogLevel.WARN
119+
"info" -> LogLevel.INFO
120+
"debug" -> LogLevel.DEBUG
121+
"trace" -> LogLevel.TRACE
122+
"gossip" -> LogLevel.GOSSIP
123+
else -> LogLevel.INFO
124+
}
125+
126+
if (isLevelEnabled(recordLevel)) {
127+
val logMessage = formatRecord(record)
128+
logMessages.add(logMessage)
129+
}
130+
}
131+
132+
private fun formatRecord(record: LogRecord): String {
133+
val timestamp =
134+
java.time.LocalDateTime.now()
135+
.format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))
136+
return String.format(
137+
"%s %-5s [%s:%d] %s\n",
138+
timestamp,
139+
record.level,
140+
record.modulePath,
141+
record.line,
142+
record.args
143+
)
144+
}
145+
146+
private fun isLevelEnabled(level: LogLevel): Boolean {
147+
return level.ordinal <= currentLogLevel.ordinal
148+
}
149+
}
150+
95151
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
96152
class LibraryTest {
97153

@@ -106,6 +162,9 @@ class LibraryTest {
106162
}
107163

108164
@Test fun fullCycle() {
165+
val logWriter1 = CustomLogWriter(CustomLogWriter.LogLevel.GOSSIP)
166+
val logWriter2 = CustomLogWriter(CustomLogWriter.LogLevel.GOSSIP)
167+
109168
val tmpDir1 = createTempDirectory("ldk_node").toString()
110169
println("Random dir 1: $tmpDir1")
111170
val tmpDir2 = createTempDirectory("ldk_node").toString()
@@ -129,8 +188,11 @@ class LibraryTest {
129188

130189
val builder1 = Builder.fromConfig(config1)
131190
builder1.setChainSourceEsplora(esploraEndpoint, null)
191+
builder1.setCustomLogger(logWriter1)
192+
132193
val builder2 = Builder.fromConfig(config2)
133194
builder2.setChainSourceEsplora(esploraEndpoint, null)
195+
builder2.setCustomLogger(logWriter2)
134196

135197
val node1 = builder1.build()
136198
val node2 = builder2.build()
@@ -262,6 +324,9 @@ class LibraryTest {
262324
assert(spendableBalance1AfterClose < 100000u)
263325
assertEquals(102500uL, spendableBalance2AfterClose)
264326

327+
assertTrue(logWriter1.getLogMessages().isNotEmpty())
328+
assertTrue(logWriter2.getLogMessages().isNotEmpty())
329+
265330
node1.stop()
266331
node2.stop()
267332
}

0 commit comments

Comments
 (0)