From 1af968ee25a450e700767ff235fd71b456cf841d Mon Sep 17 00:00:00 2001 From: Carsten Otto Date: Tue, 23 Nov 2021 22:41:01 +0100 Subject: [PATCH] add "is active" to channel details --- .../TransactionBackgroundLoaderTest.java | 12 ++++++--- .../cotto/lndmanagej/grpc/GrpcChannels.java | 3 ++- .../lndmanagej/grpc/GrpcChannelsTest.java | 13 +++++----- .../cotto/lndmanagej/model/LocalChannel.java | 4 +++ .../lndmanagej/model/LocalOpenChannel.java | 14 ++++++++--- .../model/LocalOpenChannelTest.java | 25 ++++++++++++++++++- .../model/WaitingCloseChannelTest.java | 5 ++++ .../model/LocalOpenChannelFixtures.java | 17 +++++++++---- .../ChannelDetailsControllerIT.java | 1 + .../controller/dto/ChannelDetailsDto.java | 2 ++ .../controller/dto/ChannelDetailsDtoTest.java | 13 ++++++++++ 11 files changed, 90 insertions(+), 19 deletions(-) diff --git a/backend/src/test/java/de/cotto/lndmanagej/service/TransactionBackgroundLoaderTest.java b/backend/src/test/java/de/cotto/lndmanagej/service/TransactionBackgroundLoaderTest.java index 2a1bfdf2..d7e0b578 100644 --- a/backend/src/test/java/de/cotto/lndmanagej/service/TransactionBackgroundLoaderTest.java +++ b/backend/src/test/java/de/cotto/lndmanagej/service/TransactionBackgroundLoaderTest.java @@ -144,7 +144,9 @@ class TransactionBackgroundLoaderTest { PUBKEY_2, BALANCE_INFORMATION, LOCAL, - false); + false, + true + ); LocalOpenChannel channel2 = new LocalOpenChannel( CHANNEL_ID_2, CHANNEL_POINT_2, @@ -153,7 +155,9 @@ class TransactionBackgroundLoaderTest { PUBKEY_2, BALANCE_INFORMATION, LOCAL, - false); + false, + true + ); LocalOpenChannel channel3 = new LocalOpenChannel( CHANNEL_ID_3, CHANNEL_POINT_3, @@ -162,7 +166,9 @@ class TransactionBackgroundLoaderTest { PUBKEY_2, BALANCE_INFORMATION, LOCAL, - false); + false, + true + ); when(channelService.getOpenChannels()).thenReturn(Set.of(channel1, channel2, channel3)); String unknownHash = CHANNEL_POINT_3.getTransactionHash(); when(transactionService.isUnknown(any())).thenReturn(false); diff --git a/grpc-adapter/src/main/java/de/cotto/lndmanagej/grpc/GrpcChannels.java b/grpc-adapter/src/main/java/de/cotto/lndmanagej/grpc/GrpcChannels.java index 7f2db712..65701213 100644 --- a/grpc-adapter/src/main/java/de/cotto/lndmanagej/grpc/GrpcChannels.java +++ b/grpc-adapter/src/main/java/de/cotto/lndmanagej/grpc/GrpcChannels.java @@ -124,7 +124,8 @@ public class GrpcChannels extends GrpcChannelsBase { Pubkey.create(lndChannel.getRemotePubkey()), balanceInformation, getOpenInitiator(lndChannel), - lndChannel.getPrivate() + lndChannel.getPrivate(), + lndChannel.getActive() ); } diff --git a/grpc-adapter/src/test/java/de/cotto/lndmanagej/grpc/GrpcChannelsTest.java b/grpc-adapter/src/test/java/de/cotto/lndmanagej/grpc/GrpcChannelsTest.java index 9a3cbd3a..5f127fa7 100644 --- a/grpc-adapter/src/test/java/de/cotto/lndmanagej/grpc/GrpcChannelsTest.java +++ b/grpc-adapter/src/test/java/de/cotto/lndmanagej/grpc/GrpcChannelsTest.java @@ -67,8 +67,8 @@ class GrpcChannelsTest { @Test void getChannels() { when(grpcService.getChannels()).thenReturn(List.of( - channel(CHANNEL_ID, true, false), - channel(CHANNEL_ID_2, false, false) + channel(CHANNEL_ID, true, false, true), + channel(CHANNEL_ID_2, false, false, false) )); assertThat(grpcChannels.getChannels()).containsExactlyInAnyOrder(LOCAL_OPEN_CHANNEL, LOCAL_OPEN_CHANNEL_2); } @@ -76,7 +76,7 @@ class GrpcChannelsTest { @Test void getChannels_private() { when(grpcService.getChannels()).thenReturn(List.of( - channel(CHANNEL_ID, true, true) + channel(CHANNEL_ID, true, true, true) )); assertThat(grpcChannels.getChannels()).containsExactlyInAnyOrder(LOCAL_OPEN_CHANNEL_PRIVATE); } @@ -128,8 +128,8 @@ class GrpcChannelsTest { @Test void getChannel() { when(grpcService.getChannels()).thenReturn(List.of( - channel(CHANNEL_ID_2, false, false), - channel(CHANNEL_ID, true, false) + channel(CHANNEL_ID_2, false, false, false), + channel(CHANNEL_ID, true, false, true) )); assertThat(grpcChannels.getChannel(CHANNEL_ID)).contains(LOCAL_OPEN_CHANNEL); } @@ -139,7 +139,7 @@ class GrpcChannelsTest { assertThat(grpcChannels.getChannel(CHANNEL_ID)).isEmpty(); } - private Channel channel(ChannelId channelId, boolean isInitiator, boolean isPrivate) { + private Channel channel(ChannelId channelId, boolean isInitiator, boolean isPrivate, boolean isActive) { ChannelConstraints localConstraints = ChannelConstraints.newBuilder() .setChanReserveSat(BALANCE_INFORMATION.localReserve().satoshis()) .build(); @@ -157,6 +157,7 @@ class GrpcChannelsTest { .setRemoteConstraints(remoteConstraints) .setInitiator(isInitiator) .setPrivate(isPrivate) + .setActive(isActive) .build(); } diff --git a/model/src/main/java/de/cotto/lndmanagej/model/LocalChannel.java b/model/src/main/java/de/cotto/lndmanagej/model/LocalChannel.java index faddd5c6..9c8cd48e 100644 --- a/model/src/main/java/de/cotto/lndmanagej/model/LocalChannel.java +++ b/model/src/main/java/de/cotto/lndmanagej/model/LocalChannel.java @@ -34,6 +34,10 @@ public class LocalChannel extends Channel { return privateChannel; } + public boolean isActive() { + return false; + } + @Override @SuppressWarnings("CPD-START") public boolean equals(Object other) { diff --git a/model/src/main/java/de/cotto/lndmanagej/model/LocalOpenChannel.java b/model/src/main/java/de/cotto/lndmanagej/model/LocalOpenChannel.java index df55225b..c929b654 100644 --- a/model/src/main/java/de/cotto/lndmanagej/model/LocalOpenChannel.java +++ b/model/src/main/java/de/cotto/lndmanagej/model/LocalOpenChannel.java @@ -4,6 +4,7 @@ import java.util.Objects; public class LocalOpenChannel extends LocalChannel { private final BalanceInformation balanceInformation; + private final boolean active; public LocalOpenChannel( ChannelId channelId, @@ -13,16 +14,23 @@ public class LocalOpenChannel extends LocalChannel { Pubkey remotePubkey, BalanceInformation balanceInformation, OpenInitiator openInitiator, - boolean isPrivate + boolean isPrivate, + boolean active ) { super(channelId, channelPoint, capacity, ownPubkey, remotePubkey, openInitiator, isPrivate); this.balanceInformation = balanceInformation; + this.active = active; } public BalanceInformation getBalanceInformation() { return balanceInformation; } + @Override + public boolean isActive() { + return active; + } + @Override @SuppressWarnings("CPD-START") public boolean equals(Object other) { @@ -36,11 +44,11 @@ public class LocalOpenChannel extends LocalChannel { return false; } LocalOpenChannel that = (LocalOpenChannel) other; - return Objects.equals(balanceInformation, that.balanceInformation); + return active == that.active && Objects.equals(balanceInformation, that.balanceInformation); } @Override public int hashCode() { - return Objects.hash(super.hashCode(), balanceInformation); + return Objects.hash(super.hashCode(), balanceInformation, active); } } diff --git a/model/src/test/java/de/cotto/lndmanagej/model/LocalOpenChannelTest.java b/model/src/test/java/de/cotto/lndmanagej/model/LocalOpenChannelTest.java index 144c84dd..eb08472e 100644 --- a/model/src/test/java/de/cotto/lndmanagej/model/LocalOpenChannelTest.java +++ b/model/src/test/java/de/cotto/lndmanagej/model/LocalOpenChannelTest.java @@ -12,6 +12,8 @@ import static de.cotto.lndmanagej.model.ChannelFixtures.CAPACITY; import static de.cotto.lndmanagej.model.ChannelIdFixtures.CHANNEL_ID; import static de.cotto.lndmanagej.model.ChannelPointFixtures.CHANNEL_POINT; 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_PRIVATE; import static de.cotto.lndmanagej.model.OpenInitiator.LOCAL; import static de.cotto.lndmanagej.model.PubkeyFixtures.PUBKEY; import static de.cotto.lndmanagej.model.PubkeyFixtures.PUBKEY_2; @@ -33,7 +35,8 @@ class LocalOpenChannelTest { PUBKEY, BALANCE_INFORMATION, LOCAL, - false + false, + true ); assertThat(localOpenChannel.getRemotePubkey()).isEqualTo(PUBKEY); } @@ -63,6 +66,26 @@ class LocalOpenChannelTest { assertThat(LOCAL_OPEN_CHANNEL.getOpenInitiator()).isEqualTo(LOCAL); } + @Test + void isPrivateChannel_false() { + assertThat(LOCAL_OPEN_CHANNEL.isPrivateChannel()).isFalse(); + } + + @Test + void isPrivateChannel_true() { + assertThat(LOCAL_OPEN_CHANNEL_PRIVATE.isPrivateChannel()).isTrue(); + } + + @Test + void isActive_true() { + assertThat(LOCAL_OPEN_CHANNEL.isActive()).isTrue(); + } + + @Test + void isActive_false() { + assertThat(LOCAL_OPEN_CHANNEL_2.isActive()).isFalse(); + } + @Test void testEquals() { EqualsVerifier.forClass(LocalOpenChannel.class).usingGetClass().verify(); diff --git a/model/src/test/java/de/cotto/lndmanagej/model/WaitingCloseChannelTest.java b/model/src/test/java/de/cotto/lndmanagej/model/WaitingCloseChannelTest.java index 7e7594cd..ba016f51 100644 --- a/model/src/test/java/de/cotto/lndmanagej/model/WaitingCloseChannelTest.java +++ b/model/src/test/java/de/cotto/lndmanagej/model/WaitingCloseChannelTest.java @@ -43,6 +43,11 @@ class WaitingCloseChannelTest { assertThat(WAITING_CLOSE_CHANNEL.getPubkeys()).containsExactlyInAnyOrder(PUBKEY, PUBKEY_2); } + @Test + void isActive() { + assertThat(WAITING_CLOSE_CHANNEL.isActive()).isFalse(); + } + @Test void testEquals() { EqualsVerifier.forClass(WaitingCloseChannel.class).usingGetClass().verify(); 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 8a7b2f98..1f624159 100644 --- a/model/src/testFixtures/java/de/cotto/lndmanagej/model/LocalOpenChannelFixtures.java +++ b/model/src/testFixtures/java/de/cotto/lndmanagej/model/LocalOpenChannelFixtures.java @@ -25,7 +25,8 @@ public class LocalOpenChannelFixtures { PUBKEY_2, BALANCE_INFORMATION, LOCAL, - false + false, + true ); public static final LocalOpenChannel LOCAL_OPEN_CHANNEL_MORE_BALANCE = new LocalOpenChannel( @@ -36,7 +37,8 @@ public class LocalOpenChannelFixtures { PUBKEY_2, BALANCE_INFORMATION_2, LOCAL, - false + false, + true ); public static final LocalOpenChannel LOCAL_OPEN_CHANNEL_PRIVATE = new LocalOpenChannel( @@ -47,6 +49,7 @@ public class LocalOpenChannelFixtures { PUBKEY_2, BALANCE_INFORMATION, LOCAL, + true, true ); public static final LocalOpenChannel LOCAL_OPEN_CHANNEL_2 = @@ -58,6 +61,7 @@ public class LocalOpenChannelFixtures { PUBKEY_2, BALANCE_INFORMATION, REMOTE, + false, false ); public static final LocalOpenChannel LOCAL_OPEN_CHANNEL_MORE_BALANCE_2 = @@ -69,7 +73,8 @@ public class LocalOpenChannelFixtures { PUBKEY_2, BALANCE_INFORMATION_2, REMOTE, - false + false, + true ); public static final LocalOpenChannel LOCAL_OPEN_CHANNEL_3 = new LocalOpenChannel( @@ -80,7 +85,8 @@ public class LocalOpenChannelFixtures { PUBKEY_2, BALANCE_INFORMATION, LOCAL, - false + false, + true ); public static final LocalOpenChannel LOCAL_OPEN_CHANNEL_TO_NODE_3 = new LocalOpenChannel( @@ -91,6 +97,7 @@ public class LocalOpenChannelFixtures { PUBKEY_3, BALANCE_INFORMATION, LOCAL, - false + false, + true ); } diff --git a/web/src/integrationTest/java/de/cotto/lndmanagej/controller/ChannelDetailsControllerIT.java b/web/src/integrationTest/java/de/cotto/lndmanagej/controller/ChannelDetailsControllerIT.java index ff5a09b4..ba62a6e2 100644 --- a/web/src/integrationTest/java/de/cotto/lndmanagej/controller/ChannelDetailsControllerIT.java +++ b/web/src/integrationTest/java/de/cotto/lndmanagej/controller/ChannelDetailsControllerIT.java @@ -73,6 +73,7 @@ class ChannelDetailsControllerIT { .andExpect(jsonPath("$.capacity", is(String.valueOf(CAPACITY.satoshis())))) .andExpect(jsonPath("$.openHeight", is(CHANNEL_ID.getBlockHeight()))) .andExpect(jsonPath("$.private", is(true))) + .andExpect(jsonPath("$.active", is(true))) .andExpect(jsonPath("$.onChainCosts.openCosts", is("1000"))) .andExpect(jsonPath("$.onChainCosts.closeCosts", is("2000"))) .andExpect(jsonPath("$.balance.localBalance", is("2000"))) diff --git a/web/src/main/java/de/cotto/lndmanagej/controller/dto/ChannelDetailsDto.java b/web/src/main/java/de/cotto/lndmanagej/controller/dto/ChannelDetailsDto.java index 6ac1eddd..cac296c5 100644 --- a/web/src/main/java/de/cotto/lndmanagej/controller/dto/ChannelDetailsDto.java +++ b/web/src/main/java/de/cotto/lndmanagej/controller/dto/ChannelDetailsDto.java @@ -16,6 +16,7 @@ public record ChannelDetailsDto( String remoteAlias, String capacity, @JsonProperty("private") boolean privateChannel, + boolean active, BalanceInformationDto balance, OnChainCostsDto onChainCosts ) { @@ -35,6 +36,7 @@ public record ChannelDetailsDto( remoteAlias, String.valueOf(localChannel.getCapacity().satoshis()), localChannel.isPrivateChannel(), + localChannel.isActive(), BalanceInformationDto.createFrom(balanceInformation), onChainCosts ); diff --git a/web/src/test/java/de/cotto/lndmanagej/controller/dto/ChannelDetailsDtoTest.java b/web/src/test/java/de/cotto/lndmanagej/controller/dto/ChannelDetailsDtoTest.java index 1d63fe53..aefb8cdf 100644 --- a/web/src/test/java/de/cotto/lndmanagej/controller/dto/ChannelDetailsDtoTest.java +++ b/web/src/test/java/de/cotto/lndmanagej/controller/dto/ChannelDetailsDtoTest.java @@ -8,6 +8,7 @@ import static de.cotto.lndmanagej.model.ChannelFixtures.CAPACITY; import static de.cotto.lndmanagej.model.ChannelIdFixtures.CHANNEL_ID; import static de.cotto.lndmanagej.model.ChannelPointFixtures.CHANNEL_POINT; import static de.cotto.lndmanagej.model.CoopClosedChannelFixtures.CLOSED_CHANNEL; +import static de.cotto.lndmanagej.model.LocalOpenChannelFixtures.LOCAL_OPEN_CHANNEL; import static de.cotto.lndmanagej.model.LocalOpenChannelFixtures.LOCAL_OPEN_CHANNEL_PRIVATE; import static de.cotto.lndmanagej.model.NodeFixtures.ALIAS; import static de.cotto.lndmanagej.model.PubkeyFixtures.PUBKEY_2; @@ -71,6 +72,18 @@ class ChannelDetailsDtoTest { assertThat(dto.privateChannel()).isTrue(); } + @Test + void active_true() { + ChannelDetailsDto dto = + new ChannelDetailsDto(LOCAL_OPEN_CHANNEL, ALIAS, BALANCE_INFORMATION, ON_CHAIN_COSTS); + assertThat(dto.active()).isTrue(); + } + + @Test + void active_false() { + assertThat(CHANNEL_DETAILS_DTO.active()).isFalse(); + } + @Test void balance() { assertThat(CHANNEL_DETAILS_DTO.balance()).isEqualTo(BalanceInformationDto.createFrom(BALANCE_INFORMATION));