Skip to content

Commit 4d654bc

Browse files
committed
fix: wrap restartWithRgsServer with runCatching
1 parent 8a31c0f commit 4d654bc

2 files changed

Lines changed: 62 additions & 17 deletions

File tree

app/src/main/java/to/bitkit/repositories/LightningRepo.kt

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -617,26 +617,31 @@ class LightningRepo @Inject constructor(
617617
}
618618

619619
suspend fun restartWithRgsServer(newRgsUrl: String): Result<Unit> = withContext(bgDispatcher) {
620-
Logger.info("Changing ldk-node RGS server to: '$newRgsUrl'", context = TAG)
620+
runCatching {
621+
Logger.info("Changing ldk-node RGS server to: '$newRgsUrl'", context = TAG)
621622

622-
waitForNodeToStop().onFailure { return@withContext Result.failure(it) }
623-
stop().onFailure {
624-
Logger.error("Failed to stop node during RGS server change", it, context = TAG)
625-
return@withContext Result.failure(it)
626-
}
623+
waitForNodeToStop().onFailure { return@runCatching Result.failure(it) }
624+
stop().onFailure {
625+
Logger.error("Failed to stop node during RGS server change", it, context = TAG)
626+
return@runCatching Result.failure(it)
627+
}
627628

628-
Logger.debug("Starting node with new RGS server: '$newRgsUrl'", context = TAG)
629+
Logger.debug("Starting node with new RGS server: '$newRgsUrl'", context = TAG)
629630

630-
start(
631-
shouldRetry = false,
632-
customRgsServerUrl = newRgsUrl,
633-
).onFailure {
634-
Logger.warn("Failed ldk-node config change, attempting recovery…", context = TAG)
635-
restartWithPreviousConfig()
636-
}.onSuccess {
637-
settingsStore.update { it.copy(rgsServerUrl = newRgsUrl) }
638-
639-
Logger.info("Successfully changed RGS server", context = TAG)
631+
start(
632+
shouldRetry = false,
633+
customRgsServerUrl = newRgsUrl,
634+
).onFailure {
635+
Logger.warn("Failed ldk-node config change, attempting recovery…", context = TAG)
636+
restartWithPreviousConfig()
637+
}.onSuccess {
638+
settingsStore.update { it.copy(rgsServerUrl = newRgsUrl) }
639+
640+
Logger.info("Successfully changed RGS server", context = TAG)
641+
}
642+
}.getOrElse {
643+
Logger.error("Unexpected error during RGS server change", it, context = TAG)
644+
Result.failure(it)
640645
}
641646
}
642647

app/src/test/java/to/bitkit/repositories/LightningRepoTest.kt

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -498,6 +498,46 @@ class LightningRepoTest : BaseUnitTest() {
498498
assertTrue(result.isFailure)
499499
}
500500

501+
@Test
502+
fun `restartWithRgsServer should setup with new rgs server`() = test {
503+
startNodeForTesting()
504+
val customRgsUrl = "https://rgs.example.com/snapshot"
505+
whenever(lightningService.node).thenReturn(null)
506+
whenever(lightningService.stop()).thenReturn(Unit)
507+
508+
val result = sut.restartWithRgsServer(customRgsUrl)
509+
510+
assertTrue(result.isSuccess)
511+
val inOrder = inOrder(lightningService)
512+
inOrder.verify(lightningService).stop()
513+
inOrder.verify(lightningService).setup(any(), isNull(), eq(customRgsUrl), anyOrNull(), anyOrNull())
514+
inOrder.verify(lightningService).start(anyOrNull(), any())
515+
assertEquals(NodeLifecycleState.Running, sut.lightningState.value.nodeLifecycleState)
516+
}
517+
518+
@Test
519+
fun `restartWithRgsServer should handle stop failure`() = test {
520+
startNodeForTesting()
521+
whenever(lightningService.stop()).thenThrow(RuntimeException("Stop failed"))
522+
523+
val result = sut.restartWithRgsServer("https://rgs.example.com/snapshot")
524+
525+
assertTrue(result.isFailure)
526+
}
527+
528+
@Test
529+
fun `restartWithRgsServer should handle start failure and recover`() = test {
530+
startNodeForTesting()
531+
whenever(lightningService.node).thenReturn(null)
532+
whenever(lightningService.stop()).thenReturn(Unit)
533+
whenever(lightningService.setup(any(), isNull(), eq("https://bad.rgs/snapshot"), anyOrNull(), anyOrNull()))
534+
.thenThrow(RuntimeException("Failed to start node"))
535+
536+
val result = sut.restartWithRgsServer("https://bad.rgs/snapshot")
537+
538+
assertTrue(result.isFailure)
539+
}
540+
501541
@Test
502542
fun `getFeeRateForSpeed should use provided feeRates`() = test {
503543
val mockFeeRates = mock<FeeRates>()

0 commit comments

Comments
 (0)