From 4a245e15f5789e75d4a6cd01aadc70aa3272bef2 Mon Sep 17 00:00:00 2001 From: Carsten Otto Date: Mon, 22 Nov 2021 10:23:28 +0100 Subject: [PATCH] add aggregated balance information to node details --- .../controller/NodeControllerIT.java | 12 ++++ .../lndmanagej/controller/NodeController.java | 10 +++- .../controller/dto/BalanceInformationDto.java | 28 +++++++++ .../controller/dto/NodeDetailsDto.java | 1 + .../lndmanagej/service/BalanceService.java | 13 ++++- .../controller/NodeControllerTest.java | 11 ++++ .../dto/BalanceInformationDtoTest.java | 21 +++++++ .../service/BalanceServiceTest.java | 17 ++++++ .../lndmanagej/model/BalanceInformation.java | 37 +++++++++--- .../model/BalanceInformationTest.java | 57 ++++++++++++++++--- .../model/BalanceInformationFixtures.java | 9 ++- .../model/LocalOpenChannelFixtures.java | 23 ++++++++ 12 files changed, 218 insertions(+), 21 deletions(-) create mode 100644 application/src/main/java/de/cotto/lndmanagej/controller/dto/BalanceInformationDto.java create mode 100644 application/src/test/java/de/cotto/lndmanagej/controller/dto/BalanceInformationDtoTest.java diff --git a/application/src/integrationTest/java/de/cotto/lndmanagej/controller/NodeControllerIT.java b/application/src/integrationTest/java/de/cotto/lndmanagej/controller/NodeControllerIT.java index 51df0cab..a07bf60e 100644 --- a/application/src/integrationTest/java/de/cotto/lndmanagej/controller/NodeControllerIT.java +++ b/application/src/integrationTest/java/de/cotto/lndmanagej/controller/NodeControllerIT.java @@ -3,6 +3,7 @@ package de.cotto.lndmanagej.controller; import de.cotto.lndmanagej.metrics.Metrics; import de.cotto.lndmanagej.model.Coins; import de.cotto.lndmanagej.model.Node; +import de.cotto.lndmanagej.service.BalanceService; import de.cotto.lndmanagej.service.ChannelService; import de.cotto.lndmanagej.service.NodeService; import de.cotto.lndmanagej.service.OnChainCostService; @@ -15,6 +16,7 @@ import org.springframework.test.web.servlet.MockMvc; import java.util.List; import java.util.Set; +import static de.cotto.lndmanagej.model.BalanceInformationFixtures.BALANCE_INFORMATION; import static de.cotto.lndmanagej.model.ChannelIdFixtures.CHANNEL_ID; import static de.cotto.lndmanagej.model.ChannelIdFixtures.CHANNEL_ID_2; import static de.cotto.lndmanagej.model.ChannelIdFixtures.CHANNEL_ID_3; @@ -49,6 +51,9 @@ class NodeControllerIT { @MockBean private OnChainCostService onChainCostService; + @MockBean + private BalanceService balanceService; + @MockBean @SuppressWarnings("unused") private Metrics metrics; @@ -69,6 +74,7 @@ class NodeControllerIT { when(channelService.getForceClosingChannelsFor(PUBKEY_2)).thenReturn(Set.of(FORCE_CLOSING_CHANNEL_2)); when(onChainCostService.getOpenCostsWith(PUBKEY_2)).thenReturn(Coins.ofSatoshis(123)); when(onChainCostService.getCloseCostsWith(PUBKEY_2)).thenReturn(Coins.ofSatoshis(456)); + when(balanceService.getBalanceInformation(PUBKEY_2)).thenReturn(BALANCE_INFORMATION); List channelIds = List.of(CHANNEL_ID.toString(), CHANNEL_ID_2.toString()); List closedChannelIds = List.of(CHANNEL_ID.toString(), CHANNEL_ID_3.toString()); List waitingCloseChannelIds = List.of(CHANNEL_ID.toString()); @@ -82,6 +88,12 @@ class NodeControllerIT { .andExpect(jsonPath("$.pendingForceClosingChannels", is(forceClosingChannelIds))) .andExpect(jsonPath("$.onChainCosts.openCosts", is("123"))) .andExpect(jsonPath("$.onChainCosts.closeCosts", is("456"))) + .andExpect(jsonPath("$.balance.localBalance", is("1000"))) + .andExpect(jsonPath("$.balance.localReserve", is("100"))) + .andExpect(jsonPath("$.balance.localAvailable", is("900"))) + .andExpect(jsonPath("$.balance.remoteBalance", is("123"))) + .andExpect(jsonPath("$.balance.remoteReserve", is("10"))) + .andExpect(jsonPath("$.balance.remoteAvailable", is("113"))) .andExpect(jsonPath("$.online", is(true))); } diff --git a/application/src/main/java/de/cotto/lndmanagej/controller/NodeController.java b/application/src/main/java/de/cotto/lndmanagej/controller/NodeController.java index 64c9d66c..edb0e5e4 100644 --- a/application/src/main/java/de/cotto/lndmanagej/controller/NodeController.java +++ b/application/src/main/java/de/cotto/lndmanagej/controller/NodeController.java @@ -1,16 +1,19 @@ package de.cotto.lndmanagej.controller; import com.codahale.metrics.MetricRegistry; +import de.cotto.lndmanagej.controller.dto.BalanceInformationDto; import de.cotto.lndmanagej.controller.dto.ChannelsForNodeDto; import de.cotto.lndmanagej.controller.dto.NodeDetailsDto; import de.cotto.lndmanagej.controller.dto.ObjectMapperConfiguration; import de.cotto.lndmanagej.controller.dto.OnChainCostsDto; import de.cotto.lndmanagej.metrics.Metrics; +import de.cotto.lndmanagej.model.BalanceInformation; import de.cotto.lndmanagej.model.Channel; import de.cotto.lndmanagej.model.ChannelId; import de.cotto.lndmanagej.model.Coins; import de.cotto.lndmanagej.model.Node; import de.cotto.lndmanagej.model.Pubkey; +import de.cotto.lndmanagej.service.BalanceService; import de.cotto.lndmanagej.service.ChannelService; import de.cotto.lndmanagej.service.NodeService; import de.cotto.lndmanagej.service.OnChainCostService; @@ -32,17 +35,20 @@ public class NodeController { private final Metrics metrics; private final ChannelService channelService; private final OnChainCostService onChainCostService; + private final BalanceService balanceService; public NodeController( NodeService nodeService, ChannelService channelService, Metrics metrics, - OnChainCostService onChainCostService + OnChainCostService onChainCostService, + BalanceService balanceService ) { this.nodeService = nodeService; this.metrics = metrics; this.channelService = channelService; this.onChainCostService = onChainCostService; + this.balanceService = balanceService; } @GetMapping("/alias") @@ -57,6 +63,7 @@ public class NodeController { Node node = nodeService.getNode(pubkey); Coins openCosts = onChainCostService.getOpenCostsWith(pubkey); Coins closeCosts = onChainCostService.getCloseCostsWith(pubkey); + BalanceInformation balanceInformation = balanceService.getBalanceInformation(pubkey); return new NodeDetailsDto( pubkey, node.alias(), @@ -65,6 +72,7 @@ public class NodeController { toSortedList(channelService.getWaitingCloseChannelsFor(pubkey)), toSortedList(channelService.getForceClosingChannelsFor(pubkey)), new OnChainCostsDto(openCosts, closeCosts), + BalanceInformationDto.createFrom(balanceInformation), node.online() ); } diff --git a/application/src/main/java/de/cotto/lndmanagej/controller/dto/BalanceInformationDto.java b/application/src/main/java/de/cotto/lndmanagej/controller/dto/BalanceInformationDto.java new file mode 100644 index 00000000..ab0ab7dc --- /dev/null +++ b/application/src/main/java/de/cotto/lndmanagej/controller/dto/BalanceInformationDto.java @@ -0,0 +1,28 @@ +package de.cotto.lndmanagej.controller.dto; + +import de.cotto.lndmanagej.model.BalanceInformation; +import de.cotto.lndmanagej.model.Coins; + +public record BalanceInformationDto( + String localBalance, + String localReserve, + String localAvailable, + String remoteBalance, + String remoteReserve, + String remoteAvailable +) { + public static BalanceInformationDto createFrom(BalanceInformation balanceInformation) { + return new BalanceInformationDto( + toString(balanceInformation.localBalance()), + toString(balanceInformation.localReserve()), + toString(balanceInformation.localAvailable()), + toString(balanceInformation.remoteBalance()), + toString(balanceInformation.remoteReserve()), + toString(balanceInformation.remoteAvailable()) + ); + } + + private static String toString(Coins coins) { + return String.valueOf(coins.satoshis()); + } +} diff --git a/application/src/main/java/de/cotto/lndmanagej/controller/dto/NodeDetailsDto.java b/application/src/main/java/de/cotto/lndmanagej/controller/dto/NodeDetailsDto.java index 0e0e98c7..2cdb31a2 100644 --- a/application/src/main/java/de/cotto/lndmanagej/controller/dto/NodeDetailsDto.java +++ b/application/src/main/java/de/cotto/lndmanagej/controller/dto/NodeDetailsDto.java @@ -15,6 +15,7 @@ public record NodeDetailsDto( List waitingCloseChannels, List pendingForceClosingChannels, OnChainCostsDto onChainCosts, + BalanceInformationDto balance, boolean online ) { } diff --git a/application/src/main/java/de/cotto/lndmanagej/service/BalanceService.java b/application/src/main/java/de/cotto/lndmanagej/service/BalanceService.java index 68b53661..199cd59a 100644 --- a/application/src/main/java/de/cotto/lndmanagej/service/BalanceService.java +++ b/application/src/main/java/de/cotto/lndmanagej/service/BalanceService.java @@ -2,6 +2,7 @@ package de.cotto.lndmanagej.service; import de.cotto.lndmanagej.grpc.GrpcChannels; import de.cotto.lndmanagej.model.BalanceInformation; +import de.cotto.lndmanagej.model.Channel; import de.cotto.lndmanagej.model.ChannelId; import de.cotto.lndmanagej.model.Coins; import de.cotto.lndmanagej.model.LocalOpenChannel; @@ -29,7 +30,7 @@ public class BalanceService { public Coins getAvailableLocalBalance(ChannelId channelId) { return getBalanceInformation(channelId) - .map(BalanceInformation::availableLocalBalance) + .map(BalanceInformation::localAvailable) .orElse(Coins.NONE); } @@ -42,10 +43,18 @@ public class BalanceService { public Coins getAvailableRemoteBalance(ChannelId channelId) { return getBalanceInformation(channelId) - .map(BalanceInformation::availableRemoteBalance) + .map(BalanceInformation::remoteAvailable) .orElse(Coins.NONE); } + public BalanceInformation getBalanceInformation(Pubkey pubkey) { + return channelService.getOpenChannelsWith(pubkey).stream() + .map(Channel::getId) + .map(this::getBalanceInformation) + .flatMap(Optional::stream) + .reduce(BalanceInformation.EMPTY, BalanceInformation::add); + } + private Optional getBalanceInformation(ChannelId channelId) { return grpcChannels.getChannel(channelId) .map(LocalOpenChannel::getBalanceInformation); diff --git a/application/src/test/java/de/cotto/lndmanagej/controller/NodeControllerTest.java b/application/src/test/java/de/cotto/lndmanagej/controller/NodeControllerTest.java index ec411f19..05b987fc 100644 --- a/application/src/test/java/de/cotto/lndmanagej/controller/NodeControllerTest.java +++ b/application/src/test/java/de/cotto/lndmanagej/controller/NodeControllerTest.java @@ -1,11 +1,14 @@ package de.cotto.lndmanagej.controller; +import de.cotto.lndmanagej.controller.dto.BalanceInformationDto; import de.cotto.lndmanagej.controller.dto.ChannelsForNodeDto; import de.cotto.lndmanagej.controller.dto.NodeDetailsDto; import de.cotto.lndmanagej.controller.dto.OnChainCostsDto; import de.cotto.lndmanagej.metrics.Metrics; +import de.cotto.lndmanagej.model.BalanceInformation; import de.cotto.lndmanagej.model.Coins; import de.cotto.lndmanagej.model.Node; +import de.cotto.lndmanagej.service.BalanceService; import de.cotto.lndmanagej.service.ChannelService; import de.cotto.lndmanagej.service.NodeService; import de.cotto.lndmanagej.service.OnChainCostService; @@ -18,6 +21,7 @@ import org.mockito.junit.jupiter.MockitoExtension; import java.util.List; import java.util.Set; +import static de.cotto.lndmanagej.model.BalanceInformationFixtures.BALANCE_INFORMATION; import static de.cotto.lndmanagej.model.ChannelIdFixtures.CHANNEL_ID; import static de.cotto.lndmanagej.model.ChannelIdFixtures.CHANNEL_ID_2; import static de.cotto.lndmanagej.model.ChannelIdFixtures.CHANNEL_ID_3; @@ -57,6 +61,9 @@ class NodeControllerTest { @Mock private OnChainCostService onChainCostService; + @Mock + private BalanceService balanceService; + @Test void getAlias() { when(nodeService.getAlias(PUBKEY_2)).thenReturn(ALIAS_2); @@ -69,6 +76,7 @@ class NodeControllerTest { void getNodeDetails_no_channels() { when(onChainCostService.getOpenCostsWith(any())).thenReturn(Coins.NONE); when(onChainCostService.getCloseCostsWith(any())).thenReturn(Coins.NONE); + when(balanceService.getBalanceInformation(any())).thenReturn(BalanceInformation.EMPTY); NodeDetailsDto expectedDetails = new NodeDetailsDto( PUBKEY_2, ALIAS_2, @@ -77,6 +85,7 @@ class NodeControllerTest { List.of(), List.of(), new OnChainCostsDto(Coins.NONE, Coins.NONE), + BalanceInformationDto.createFrom(BalanceInformation.EMPTY), true ); when(nodeService.getNode(PUBKEY_2)).thenReturn(new Node(PUBKEY_2, ALIAS_2, 0, true)); @@ -100,6 +109,7 @@ class NodeControllerTest { Coins closeCosts = Coins.ofSatoshis(456); when(onChainCostService.getOpenCostsWith(PUBKEY_2)).thenReturn(openCosts); when(onChainCostService.getCloseCostsWith(PUBKEY_2)).thenReturn(closeCosts); + when(balanceService.getBalanceInformation(PUBKEY_2)).thenReturn(BALANCE_INFORMATION); NodeDetailsDto expectedDetails = new NodeDetailsDto( PUBKEY_2, ALIAS_2, @@ -108,6 +118,7 @@ class NodeControllerTest { List.of(CHANNEL_ID, CHANNEL_ID_2), List.of(CHANNEL_ID, CHANNEL_ID_2, CHANNEL_ID_3), new OnChainCostsDto(openCosts, closeCosts), + BalanceInformationDto.createFrom(BALANCE_INFORMATION), false ); diff --git a/application/src/test/java/de/cotto/lndmanagej/controller/dto/BalanceInformationDtoTest.java b/application/src/test/java/de/cotto/lndmanagej/controller/dto/BalanceInformationDtoTest.java new file mode 100644 index 00000000..a3b92dec --- /dev/null +++ b/application/src/test/java/de/cotto/lndmanagej/controller/dto/BalanceInformationDtoTest.java @@ -0,0 +1,21 @@ +package de.cotto.lndmanagej.controller.dto; + +import org.junit.jupiter.api.Test; + +import static de.cotto.lndmanagej.model.BalanceInformationFixtures.BALANCE_INFORMATION; +import static org.assertj.core.api.Assertions.assertThat; + +class BalanceInformationDtoTest { + @Test + void createFrom() { + BalanceInformationDto expected = new BalanceInformationDto( + String.valueOf(BALANCE_INFORMATION.localBalance().satoshis()), + String.valueOf(BALANCE_INFORMATION.localReserve().satoshis()), + String.valueOf(BALANCE_INFORMATION.localAvailable().satoshis()), + String.valueOf(BALANCE_INFORMATION.remoteBalance().satoshis()), + String.valueOf(BALANCE_INFORMATION.remoteReserve().satoshis()), + String.valueOf(BALANCE_INFORMATION.remoteAvailable().satoshis()) + ); + assertThat(BalanceInformationDto.createFrom(BALANCE_INFORMATION)).isEqualTo(expected); + } +} \ No newline at end of file diff --git a/application/src/test/java/de/cotto/lndmanagej/service/BalanceServiceTest.java b/application/src/test/java/de/cotto/lndmanagej/service/BalanceServiceTest.java index 3e27e15e..41740046 100644 --- a/application/src/test/java/de/cotto/lndmanagej/service/BalanceServiceTest.java +++ b/application/src/test/java/de/cotto/lndmanagej/service/BalanceServiceTest.java @@ -1,6 +1,7 @@ package de.cotto.lndmanagej.service; import de.cotto.lndmanagej.grpc.GrpcChannels; +import de.cotto.lndmanagej.model.BalanceInformation; import de.cotto.lndmanagej.model.Coins; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -15,6 +16,8 @@ import static de.cotto.lndmanagej.model.ChannelIdFixtures.CHANNEL_ID; import static de.cotto.lndmanagej.model.ChannelIdFixtures.CHANNEL_ID_2; import static de.cotto.lndmanagej.model.LocalOpenChannelFixtures.LOCAL_OPEN_CHANNEL; import static de.cotto.lndmanagej.model.LocalOpenChannelFixtures.LOCAL_OPEN_CHANNEL_2; +import static de.cotto.lndmanagej.model.LocalOpenChannelFixtures.LOCAL_OPEN_CHANNEL_MORE_BALANCE; +import static de.cotto.lndmanagej.model.LocalOpenChannelFixtures.LOCAL_OPEN_CHANNEL_MORE_BALANCE_2; import static de.cotto.lndmanagej.model.PubkeyFixtures.PUBKEY; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.when; @@ -30,6 +33,20 @@ class BalanceServiceTest { @Mock private ChannelService channelService; + @Test + void getBalanceInformation_for_pubkey() { + BalanceInformation expected = new BalanceInformation( + Coins.ofSatoshis(2_000), + Coins.ofSatoshis(200), + Coins.ofSatoshis(246), + Coins.ofSatoshis(20) + ); + when(channelService.getOpenChannelsWith(PUBKEY)).thenReturn(Set.of(LOCAL_OPEN_CHANNEL, LOCAL_OPEN_CHANNEL_2)); + when(grpcChannels.getChannel(CHANNEL_ID)).thenReturn(Optional.of(LOCAL_OPEN_CHANNEL_MORE_BALANCE)); + when(grpcChannels.getChannel(CHANNEL_ID_2)).thenReturn(Optional.of(LOCAL_OPEN_CHANNEL_MORE_BALANCE_2)); + assertThat(balanceService.getBalanceInformation(PUBKEY)).isEqualTo(expected); + } + @Test void getAvailableLocalBalance_channel() { when(grpcChannels.getChannel(CHANNEL_ID)).thenReturn(Optional.of(LOCAL_OPEN_CHANNEL)); diff --git a/model/src/main/java/de/cotto/lndmanagej/model/BalanceInformation.java b/model/src/main/java/de/cotto/lndmanagej/model/BalanceInformation.java index 203dcb10..52f11c0a 100644 --- a/model/src/main/java/de/cotto/lndmanagej/model/BalanceInformation.java +++ b/model/src/main/java/de/cotto/lndmanagej/model/BalanceInformation.java @@ -3,23 +3,42 @@ package de.cotto.lndmanagej.model; public record BalanceInformation( Coins localBalance, Coins localReserve, + Coins localAvailable, Coins remoteBalance, - Coins remoteReserve + Coins remoteReserve, + Coins remoteAvailable ) { - public Coins availableLocalBalance() { - Coins availableLocalBalance = localBalance().subtract(localReserve()); + public static final BalanceInformation EMPTY = + new BalanceInformation(Coins.NONE, Coins.NONE, Coins.NONE, Coins.NONE); + + public BalanceInformation(Coins localBalance, Coins localReserve, Coins remoteBalance, Coins remoteReserve) { + this( + localBalance, + localReserve, + getAvailableBalance(localBalance, localReserve), + remoteBalance, + remoteReserve, + getAvailableBalance(remoteBalance, remoteReserve) + ); + } + + private static Coins getAvailableBalance(Coins localBalance, Coins localReserve) { + Coins availableLocalBalance = localBalance.subtract(localReserve); if (availableLocalBalance.isNegative()) { return Coins.NONE; } return availableLocalBalance; } - public Coins availableRemoteBalance() { - Coins availableRemoteBalance = remoteBalance().subtract(remoteReserve()); - if (availableRemoteBalance.isNegative()) { - return Coins.NONE; - } - return availableRemoteBalance; + public BalanceInformation add(BalanceInformation other) { + return new BalanceInformation( + localBalance.add(other.localBalance), + localReserve.add(other.localReserve), + localAvailable.add(other.localAvailable), + remoteBalance.add(other.remoteBalance), + remoteReserve.add(other.remoteReserve), + remoteAvailable.add(other.remoteAvailable) + ); } } diff --git a/model/src/test/java/de/cotto/lndmanagej/model/BalanceInformationTest.java b/model/src/test/java/de/cotto/lndmanagej/model/BalanceInformationTest.java index b94759ca..70c0216e 100644 --- a/model/src/test/java/de/cotto/lndmanagej/model/BalanceInformationTest.java +++ b/model/src/test/java/de/cotto/lndmanagej/model/BalanceInformationTest.java @@ -3,32 +3,73 @@ package de.cotto.lndmanagej.model; import nl.jqno.equalsverifier.EqualsVerifier; import org.junit.jupiter.api.Test; +import static de.cotto.lndmanagej.model.BalanceInformation.EMPTY; import static de.cotto.lndmanagej.model.BalanceInformationFixtures.BALANCE_INFORMATION; +import static de.cotto.lndmanagej.model.BalanceInformationFixtures.BALANCE_INFORMATION_2; import static org.assertj.core.api.Assertions.assertThat; class BalanceInformationTest { @Test - void availableLocalBalance() { - assertThat(BALANCE_INFORMATION.availableLocalBalance()).isEqualTo(Coins.ofSatoshis(900)); + void empty() { + assertThat(EMPTY).isEqualTo(new BalanceInformation(Coins.NONE, Coins.NONE, Coins.NONE, Coins.NONE)); } @Test - void availableLocalBalance_negative() { + void add_empty_to_empty() { + assertThat(EMPTY.add(EMPTY)).isEqualTo(EMPTY); + } + + @Test + void add_empty_to_something() { + assertThat(BALANCE_INFORMATION.add(EMPTY)).isEqualTo(BALANCE_INFORMATION); + } + + @Test + void add() { + BalanceInformation expected = new BalanceInformation( + BALANCE_INFORMATION.localBalance().add(BALANCE_INFORMATION_2.localBalance()), + BALANCE_INFORMATION.localReserve().add(BALANCE_INFORMATION_2.localReserve()), + BALANCE_INFORMATION.remoteBalance().add(BALANCE_INFORMATION_2.remoteBalance()), + BALANCE_INFORMATION.remoteReserve().add(BALANCE_INFORMATION_2.remoteReserve()) + ); + assertThat(BALANCE_INFORMATION.add(BALANCE_INFORMATION_2)).isEqualTo(expected); + } + + @Test + void add_with_zero_available_due_to_reserve() { + BalanceInformation zeroAvailableBalance = new BalanceInformation( + Coins.ofSatoshis(50), + Coins.ofSatoshis(100), + Coins.ofSatoshis(20), + Coins.ofSatoshis(100) + ); + BalanceInformation sum = BALANCE_INFORMATION.add(zeroAvailableBalance); + assertThat(sum.localAvailable()).isEqualTo(BALANCE_INFORMATION.localAvailable()); + assertThat(sum.remoteAvailable()).isEqualTo(BALANCE_INFORMATION.remoteAvailable()); + } + + @Test + void localAvailableBalance() { + assertThat(BALANCE_INFORMATION.localAvailable()).isEqualTo(Coins.ofSatoshis(900)); + } + + @Test + void localAvailableBalance_negative() { BalanceInformation balanceInformation = new BalanceInformation(Coins.ofSatoshis(100), Coins.ofSatoshis(200), Coins.NONE, Coins.NONE); - assertThat(balanceInformation.availableLocalBalance()).isEqualTo(Coins.NONE); + assertThat(balanceInformation.localAvailable()).isEqualTo(Coins.NONE); } @Test - void availableRemoteBalance() { - assertThat(BALANCE_INFORMATION.availableRemoteBalance()).isEqualTo(Coins.ofSatoshis(113)); + void remoteAvailableBalance() { + assertThat(BALANCE_INFORMATION.remoteAvailable()).isEqualTo(Coins.ofSatoshis(113)); } @Test - void availableRemoteBalance_negative() { + void remoteAvailableBalance_negative() { BalanceInformation balanceInformation = new BalanceInformation(Coins.NONE, Coins.NONE, Coins.ofSatoshis(100), Coins.ofSatoshis(200)); - assertThat(balanceInformation.availableRemoteBalance()).isEqualTo(Coins.NONE); + assertThat(balanceInformation.remoteAvailable()).isEqualTo(Coins.NONE); } @Test diff --git a/model/src/testFixtures/java/de/cotto/lndmanagej/model/BalanceInformationFixtures.java b/model/src/testFixtures/java/de/cotto/lndmanagej/model/BalanceInformationFixtures.java index 6dcd4449..a2c3a84b 100644 --- a/model/src/testFixtures/java/de/cotto/lndmanagej/model/BalanceInformationFixtures.java +++ b/model/src/testFixtures/java/de/cotto/lndmanagej/model/BalanceInformationFixtures.java @@ -2,10 +2,17 @@ package de.cotto.lndmanagej.model; public class BalanceInformationFixtures { public static final Coins LOCAL_BALANCE = Coins.ofSatoshis(1_000); - public static final Coins REMOTE_BALANCE = Coins.ofSatoshis(123); public static final Coins LOCAL_RESERVE = Coins.ofSatoshis(100); + public static final Coins REMOTE_BALANCE = Coins.ofSatoshis(123); public static final Coins REMOTE_RESERVE = Coins.ofSatoshis(10); + public static final Coins LOCAL_BALANCE_2 = Coins.ofSatoshis(1_000); + public static final Coins LOCAL_RESERVE_2 = Coins.ofSatoshis(100); + public static final Coins REMOTE_BALANCE_2 = Coins.ofSatoshis(123); + public static final Coins REMOTE_RESERVE_2 = Coins.ofSatoshis(10); + public static final BalanceInformation BALANCE_INFORMATION = new BalanceInformation(LOCAL_BALANCE, LOCAL_RESERVE, REMOTE_BALANCE, REMOTE_RESERVE); + public static final BalanceInformation BALANCE_INFORMATION_2 = + new BalanceInformation(LOCAL_BALANCE_2, LOCAL_RESERVE_2, REMOTE_BALANCE_2, REMOTE_RESERVE_2); } diff --git a/model/src/testFixtures/java/de/cotto/lndmanagej/model/LocalOpenChannelFixtures.java b/model/src/testFixtures/java/de/cotto/lndmanagej/model/LocalOpenChannelFixtures.java index 89b52b9e..3f0b129d 100644 --- a/model/src/testFixtures/java/de/cotto/lndmanagej/model/LocalOpenChannelFixtures.java +++ b/model/src/testFixtures/java/de/cotto/lndmanagej/model/LocalOpenChannelFixtures.java @@ -1,6 +1,7 @@ package de.cotto.lndmanagej.model; import static de.cotto.lndmanagej.model.BalanceInformationFixtures.BALANCE_INFORMATION; +import static de.cotto.lndmanagej.model.BalanceInformationFixtures.BALANCE_INFORMATION_2; import static de.cotto.lndmanagej.model.ChannelFixtures.CAPACITY; import static de.cotto.lndmanagej.model.ChannelFixtures.CAPACITY_2; import static de.cotto.lndmanagej.model.ChannelIdFixtures.CHANNEL_ID; @@ -26,6 +27,17 @@ public class LocalOpenChannelFixtures { LOCAL, false ); + public static final LocalOpenChannel LOCAL_OPEN_CHANNEL_MORE_BALANCE = + new LocalOpenChannel( + CHANNEL_ID, + CHANNEL_POINT, + CAPACITY, + PUBKEY, + PUBKEY_2, + BALANCE_INFORMATION_2, + LOCAL, + false + ); public static final LocalOpenChannel LOCAL_OPEN_CHANNEL_PRIVATE = new LocalOpenChannel( CHANNEL_ID, @@ -48,6 +60,17 @@ public class LocalOpenChannelFixtures { REMOTE, false ); + public static final LocalOpenChannel LOCAL_OPEN_CHANNEL_MORE_BALANCE_2 = + new LocalOpenChannel( + CHANNEL_ID_2, + CHANNEL_POINT, + CAPACITY, + PUBKEY, + PUBKEY_2, + BALANCE_INFORMATION, + REMOTE, + false + ); public static final LocalOpenChannel LOCAL_OPEN_CHANNEL_3 = new LocalOpenChannel( CHANNEL_ID_3,