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 47c58d93..e8655412 100644 --- a/application/src/integrationTest/java/de/cotto/lndmanagej/controller/NodeControllerIT.java +++ b/application/src/integrationTest/java/de/cotto/lndmanagej/controller/NodeControllerIT.java @@ -1,6 +1,7 @@ package de.cotto.lndmanagej.controller; import de.cotto.lndmanagej.metrics.Metrics; +import de.cotto.lndmanagej.model.Node; import de.cotto.lndmanagej.service.NodeService; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -39,9 +40,10 @@ class NodeControllerIT { @Test void getDetails() throws Exception { - when(nodeService.getAlias(PUBKEY_2)).thenReturn(ALIAS_2); + when(nodeService.getNode(PUBKEY_2)).thenReturn(new Node(PUBKEY_2, ALIAS_2, 0, true)); mockMvc.perform(get(NODE_PREFIX + "/details")) .andExpect(jsonPath("$.pubkey", is(PUBKEY_2.toString()))) - .andExpect(jsonPath("$.alias", is(ALIAS_2))); + .andExpect(jsonPath("$.alias", is(ALIAS_2))) + .andExpect(jsonPath("$.online", is(true))); } } \ No newline at end of file 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 bb7b56bb..13e0fd5a 100644 --- a/application/src/main/java/de/cotto/lndmanagej/controller/NodeController.java +++ b/application/src/main/java/de/cotto/lndmanagej/controller/NodeController.java @@ -2,6 +2,7 @@ package de.cotto.lndmanagej.controller; import com.codahale.metrics.MetricRegistry; import de.cotto.lndmanagej.metrics.Metrics; +import de.cotto.lndmanagej.model.Node; import de.cotto.lndmanagej.model.Pubkey; import de.cotto.lndmanagej.service.NodeService; import org.springframework.web.bind.annotation.GetMapping; @@ -29,6 +30,7 @@ public class NodeController { @GetMapping("/details") public NodeDetailsDto getDetails(@PathVariable Pubkey pubkey) { metrics.mark(MetricRegistry.name(getClass(), "getDetails")); - return new NodeDetailsDto(pubkey, getAlias(pubkey)); + Node node = nodeService.getNode(pubkey); + return new NodeDetailsDto(pubkey, node.alias(), node.online()); } } diff --git a/application/src/main/java/de/cotto/lndmanagej/controller/NodeDetailsDto.java b/application/src/main/java/de/cotto/lndmanagej/controller/NodeDetailsDto.java index b81a8322..b4a3cb68 100644 --- a/application/src/main/java/de/cotto/lndmanagej/controller/NodeDetailsDto.java +++ b/application/src/main/java/de/cotto/lndmanagej/controller/NodeDetailsDto.java @@ -6,6 +6,7 @@ import de.cotto.lndmanagej.model.Pubkey; public record NodeDetailsDto( @JsonSerialize(using = ToStringSerializer.class) Pubkey pubkey, - String alias + String alias, + boolean online ) { } diff --git a/application/src/main/java/de/cotto/lndmanagej/service/NodeService.java b/application/src/main/java/de/cotto/lndmanagej/service/NodeService.java index f61e2757..97f19995 100644 --- a/application/src/main/java/de/cotto/lndmanagej/service/NodeService.java +++ b/application/src/main/java/de/cotto/lndmanagej/service/NodeService.java @@ -3,6 +3,7 @@ package de.cotto.lndmanagej.service; import com.google.common.cache.LoadingCache; import de.cotto.lndmanagej.caching.CacheBuilder; import de.cotto.lndmanagej.grpc.GrpcNodeInfo; +import de.cotto.lndmanagej.model.Node; import de.cotto.lndmanagej.model.Pubkey; import org.springframework.stereotype.Component; @@ -25,8 +26,12 @@ public class NodeService { return aliasCache.getUnchecked(pubkey); } + public Node getNode(Pubkey pubkey) { + return grpcNodeInfo.getNode(pubkey); + } + private String getAliasWithoutCache(Pubkey pubkey) { - return grpcNodeInfo.getNode(pubkey).alias(); + return getNode(pubkey).alias(); } } 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 a4e4adc7..d5eea610 100644 --- a/application/src/test/java/de/cotto/lndmanagej/controller/NodeControllerTest.java +++ b/application/src/test/java/de/cotto/lndmanagej/controller/NodeControllerTest.java @@ -1,6 +1,7 @@ package de.cotto.lndmanagej.controller; import de.cotto.lndmanagej.metrics.Metrics; +import de.cotto.lndmanagej.model.Node; import de.cotto.lndmanagej.service.NodeService; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -36,8 +37,8 @@ class NodeControllerTest { @Test void getNodeDetails() { - NodeDetailsDto expectedDetails = new NodeDetailsDto(PUBKEY_2, ALIAS_2); - when(nodeService.getAlias(PUBKEY_2)).thenReturn(ALIAS_2); + NodeDetailsDto expectedDetails = new NodeDetailsDto(PUBKEY_2, ALIAS_2, true); + when(nodeService.getNode(PUBKEY_2)).thenReturn(new Node(PUBKEY_2, ALIAS_2, 0, true)); assertThat(nodeController.getDetails(PUBKEY_2)).isEqualTo(expectedDetails); verify(metrics).mark(argThat(name -> name.endsWith(".getDetails"))); diff --git a/application/src/test/java/de/cotto/lndmanagej/service/NodeServiceTest.java b/application/src/test/java/de/cotto/lndmanagej/service/NodeServiceTest.java index b2a059f1..15e72a4d 100644 --- a/application/src/test/java/de/cotto/lndmanagej/service/NodeServiceTest.java +++ b/application/src/test/java/de/cotto/lndmanagej/service/NodeServiceTest.java @@ -26,4 +26,10 @@ class NodeServiceTest { when(grpcNodeInfo.getNode(PUBKEY)).thenReturn(NODE); assertThat(nodeService.getAlias(PUBKEY)).isEqualTo(ALIAS); } + + @Test + void getNode() { + when(grpcNodeInfo.getNode(PUBKEY)).thenReturn(NODE); + assertThat(nodeService.getNode(PUBKEY)).isEqualTo(NODE); + } } \ No newline at end of file diff --git a/grpc-adapter/src/main/java/de/cotto/lndmanagej/grpc/GrpcBase.java b/grpc-adapter/src/main/java/de/cotto/lndmanagej/grpc/GrpcBase.java index fae8c845..b5b0241a 100644 --- a/grpc-adapter/src/main/java/de/cotto/lndmanagej/grpc/GrpcBase.java +++ b/grpc-adapter/src/main/java/de/cotto/lndmanagej/grpc/GrpcBase.java @@ -1,7 +1,9 @@ package de.cotto.lndmanagej.grpc; +import com.codahale.metrics.MetricRegistry; import com.google.common.annotations.VisibleForTesting; import de.cotto.lndmanagej.LndConfiguration; +import de.cotto.lndmanagej.metrics.Metrics; import io.grpc.StatusRuntimeException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -13,10 +15,12 @@ import java.util.function.Supplier; public class GrpcBase { private final Logger logger = LoggerFactory.getLogger(getClass()); protected final StubCreator stubCreator; + private final Metrics metrics; @SuppressWarnings("PMD.ConstructorCallsOverridableMethod") - protected GrpcBase(LndConfiguration lndConfiguration) throws IOException { + protected GrpcBase(LndConfiguration lndConfiguration, Metrics metrics) throws IOException { stubCreator = getStubCreator(lndConfiguration); + this.metrics = metrics; } @VisibleForTesting @@ -37,4 +41,8 @@ public class GrpcBase { return Optional.empty(); } } + + protected void mark(String name) { + metrics.mark(MetricRegistry.name(getClass(), name)); + } } diff --git a/grpc-adapter/src/main/java/de/cotto/lndmanagej/grpc/GrpcNodeInfo.java b/grpc-adapter/src/main/java/de/cotto/lndmanagej/grpc/GrpcNodeInfo.java index 1f6481e9..f1ffe02a 100644 --- a/grpc-adapter/src/main/java/de/cotto/lndmanagej/grpc/GrpcNodeInfo.java +++ b/grpc-adapter/src/main/java/de/cotto/lndmanagej/grpc/GrpcNodeInfo.java @@ -4,6 +4,7 @@ import de.cotto.lndmanagej.model.Node; import de.cotto.lndmanagej.model.Pubkey; import lnrpc.LightningNode; import lnrpc.NodeInfo; +import lnrpc.Peer; import org.springframework.stereotype.Component; @Component @@ -20,10 +21,15 @@ public class GrpcNodeInfo { return Node.forPubkey(pubkey); } LightningNode node = nodeInfo.getNode(); + boolean isPeer = grpcService.listPeers().stream() + .map(Peer::getPubKey) + .map(Pubkey::create) + .anyMatch(pubkey::equals); return Node.builder() .withPubkey(pubkey) .withAlias(node.getAlias()) .withLastUpdate(node.getLastUpdate()) + .withOnlineStatus(isPeer) .build(); } } diff --git a/grpc-adapter/src/main/java/de/cotto/lndmanagej/grpc/GrpcRouterService.java b/grpc-adapter/src/main/java/de/cotto/lndmanagej/grpc/GrpcRouterService.java index 93dfd565..d71396eb 100644 --- a/grpc-adapter/src/main/java/de/cotto/lndmanagej/grpc/GrpcRouterService.java +++ b/grpc-adapter/src/main/java/de/cotto/lndmanagej/grpc/GrpcRouterService.java @@ -1,6 +1,5 @@ package de.cotto.lndmanagej.grpc; -import com.codahale.metrics.MetricRegistry; import de.cotto.lndmanagej.LndConfiguration; import de.cotto.lndmanagej.metrics.Metrics; import org.springframework.stereotype.Component; @@ -16,11 +15,9 @@ import java.util.Iterator; @Component public class GrpcRouterService extends GrpcBase { private final RouterGrpc.RouterBlockingStub routerStub; - private final Metrics metrics; public GrpcRouterService(LndConfiguration lndConfiguration, Metrics metrics) throws IOException { - super(lndConfiguration); - this.metrics = metrics; + super(lndConfiguration, metrics); routerStub = stubCreator.getRouterStub(); } @@ -30,12 +27,8 @@ public class GrpcRouterService extends GrpcBase { } Iterator getHtlcEvents() { - mark(); + mark("subscribeHtlcEvents"); return get(() -> routerStub.subscribeHtlcEvents(SubscribeHtlcEventsRequest.getDefaultInstance())) .orElse(Collections.emptyIterator()); } - - private void mark() { - metrics.mark(MetricRegistry.name(getClass(), "subscribeHtlcEvents")); - } } diff --git a/grpc-adapter/src/main/java/de/cotto/lndmanagej/grpc/GrpcService.java b/grpc-adapter/src/main/java/de/cotto/lndmanagej/grpc/GrpcService.java index 4ae86b96..92462812 100644 --- a/grpc-adapter/src/main/java/de/cotto/lndmanagej/grpc/GrpcService.java +++ b/grpc-adapter/src/main/java/de/cotto/lndmanagej/grpc/GrpcService.java @@ -1,6 +1,5 @@ package de.cotto.lndmanagej.grpc; -import com.codahale.metrics.MetricRegistry; import com.google.common.cache.LoadingCache; import de.cotto.lndmanagej.LndConfiguration; import de.cotto.lndmanagej.caching.CacheBuilder; @@ -18,6 +17,7 @@ import lnrpc.GetInfoResponse; import lnrpc.GetTransactionsRequest; import lnrpc.LightningGrpc; import lnrpc.ListChannelsRequest; +import lnrpc.ListPeersRequest; import lnrpc.NodeInfo; import lnrpc.NodeInfoRequest; import lnrpc.PendingChannelsRequest; @@ -35,7 +35,6 @@ import java.util.Optional; public class GrpcService extends GrpcBase { private static final int CACHE_EXPIRY_MILLISECONDS = 200; - private final Metrics metrics; private final LightningGrpc.LightningBlockingStub lightningStub; private final LoadingCache> channelsCache = new CacheBuilder() .withExpiryMilliseconds(CACHE_EXPIRY_MILLISECONDS) @@ -45,8 +44,7 @@ public class GrpcService extends GrpcBase { .build(this::getPendingChannelsWithoutCache); public GrpcService(LndConfiguration lndConfiguration, Metrics metrics) throws IOException { - super(lndConfiguration); - this.metrics = metrics; + super(lndConfiguration, metrics); lightningStub = stubCreator.getLightningStub(); } @@ -60,6 +58,13 @@ public class GrpcService extends GrpcBase { return get(() -> lightningStub.getInfo(lnrpc.GetInfoRequest.getDefaultInstance())); } + public List listPeers() { + mark("listPeers"); + return get( + () -> lightningStub.listPeers(ListPeersRequest.getDefaultInstance()).getPeersList() + ).orElse(List.of()); + } + public Optional getNodeInfo(Pubkey pubkey) { mark("getNodeInfo"); return get(() -> { @@ -126,8 +131,4 @@ public class GrpcService extends GrpcBase { return get(() -> lightningStub.listChannels(ListChannelsRequest.getDefaultInstance()).getChannelsList()) .orElse(List.of()); } - - private void mark(String name) { - metrics.mark(MetricRegistry.name(getClass(), name)); - } } diff --git a/grpc-adapter/src/test/java/de/cotto/lndmanagej/grpc/GrpcBaseTest.java b/grpc-adapter/src/test/java/de/cotto/lndmanagej/grpc/GrpcBaseTest.java index 59ff2238..d25b4b42 100644 --- a/grpc-adapter/src/test/java/de/cotto/lndmanagej/grpc/GrpcBaseTest.java +++ b/grpc-adapter/src/test/java/de/cotto/lndmanagej/grpc/GrpcBaseTest.java @@ -1,24 +1,37 @@ package de.cotto.lndmanagej.grpc; +import de.cotto.lndmanagej.metrics.Metrics; import io.grpc.Status; import io.grpc.StatusRuntimeException; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; +import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.argThat; +import static org.mockito.Mockito.verify; @ExtendWith(MockitoExtension.class) class GrpcBaseTest { @InjectMocks private TestableGrpcBase grpcBase; + @Mock + private Metrics metrics; + @Test void get() { assertThat(grpcBase.get(() -> "x")).contains("x"); } + @Test + void name() { + grpcBase.mark("foo"); + verify(metrics).mark(argThat(name -> name.endsWith(".foo"))); + } + @Test void get_failure() { assertThat(grpcBase.get(() -> { diff --git a/grpc-adapter/src/test/java/de/cotto/lndmanagej/grpc/GrpcNodeInfoTest.java b/grpc-adapter/src/test/java/de/cotto/lndmanagej/grpc/GrpcNodeInfoTest.java index 3e877c97..380c1567 100644 --- a/grpc-adapter/src/test/java/de/cotto/lndmanagej/grpc/GrpcNodeInfoTest.java +++ b/grpc-adapter/src/test/java/de/cotto/lndmanagej/grpc/GrpcNodeInfoTest.java @@ -1,5 +1,6 @@ package de.cotto.lndmanagej.grpc; +import de.cotto.lndmanagej.model.Pubkey; import lnrpc.LightningNode; import lnrpc.NodeInfo; import org.junit.jupiter.api.BeforeEach; @@ -9,9 +10,13 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; +import java.util.List; import java.util.Optional; import static de.cotto.lndmanagej.model.NodeFixtures.NODE; +import static de.cotto.lndmanagej.model.NodeFixtures.NODE_PEER; +import static de.cotto.lndmanagej.model.PubkeyFixtures.PUBKEY; +import static de.cotto.lndmanagej.model.PubkeyFixtures.PUBKEY_2; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.when; @@ -34,9 +39,16 @@ class GrpcNodeInfoTest { @Test void getNode() { + when(grpcService.listPeers()).thenReturn(List.of(peer(PUBKEY_2))); assertThat(grpcNodeInfo.getNode(NODE.pubkey())).isEqualTo(NODE); } + @Test + void getNode_for_peer() { + when(grpcService.listPeers()).thenReturn(List.of(peer(PUBKEY))); + assertThat(grpcNodeInfo.getNode(NODE.pubkey())).isEqualTo(NODE_PEER); + } + @Test void getNode_sets_alias() { assertThat(grpcNodeInfo.getNode(NODE.pubkey()).alias()).isEqualTo(NODE.alias()); @@ -52,4 +64,8 @@ class GrpcNodeInfoTest { when(grpcService.getNodeInfo(NODE.pubkey())).thenReturn(Optional.empty()); assertThat(grpcNodeInfo.getNode(NODE.pubkey()).alias()).isEqualTo(NODE.pubkey().toString()); } + + private lnrpc.Peer peer(Pubkey pubkey) { + return lnrpc.Peer.newBuilder().setPubKey(pubkey.toString()).build(); + } } \ No newline at end of file diff --git a/grpc-adapter/src/test/java/de/cotto/lndmanagej/grpc/TestableGrpcBase.java b/grpc-adapter/src/test/java/de/cotto/lndmanagej/grpc/TestableGrpcBase.java index d69bb22d..a646e2ac 100644 --- a/grpc-adapter/src/test/java/de/cotto/lndmanagej/grpc/TestableGrpcBase.java +++ b/grpc-adapter/src/test/java/de/cotto/lndmanagej/grpc/TestableGrpcBase.java @@ -1,14 +1,15 @@ package de.cotto.lndmanagej.grpc; import de.cotto.lndmanagej.LndConfiguration; +import de.cotto.lndmanagej.metrics.Metrics; import java.io.IOException; import static org.mockito.Mockito.mock; public class TestableGrpcBase extends GrpcBase { - public TestableGrpcBase(LndConfiguration lndConfiguration) throws IOException { - super(lndConfiguration); + public TestableGrpcBase(LndConfiguration lndConfiguration, Metrics metrics) throws IOException { + super(lndConfiguration, metrics); } @Override diff --git a/model/src/main/java/de/cotto/lndmanagej/model/Node.java b/model/src/main/java/de/cotto/lndmanagej/model/Node.java index 3fc09626..535b82a1 100644 --- a/model/src/main/java/de/cotto/lndmanagej/model/Node.java +++ b/model/src/main/java/de/cotto/lndmanagej/model/Node.java @@ -7,13 +7,19 @@ import java.util.Objects; import static java.util.Objects.requireNonNull; -public record Node(@Nonnull String alias, int lastUpdate, @Nonnull Pubkey pubkey) implements Comparable { +public record Node( + @Nonnull Pubkey pubkey, + @Nonnull String alias, + int lastUpdate, + boolean online +) implements Comparable { private static final Map HARDCODED_ALIASES = Map.of( Pubkey.create("02f72978d40efeffca537139ad6ac9f09970c000a2dbc0d7aa55a71327c4577a80"), "Chivo IBEX_a0", Pubkey.create("037cc5f9f1da20ac0d60e83989729a204a33cc2d8e80438969fadf35c1c5f1233b"), "BlueWallet" ); - public Node(String alias, int lastUpdate, Pubkey pubkey) { + public Node(Pubkey pubkey, String alias, int lastUpdate, boolean online) { + this.online = online; this.alias = HARDCODED_ALIASES.getOrDefault(pubkey, alias); this.lastUpdate = lastUpdate; this.pubkey = pubkey; @@ -62,6 +68,8 @@ public record Node(@Nonnull String alias, int lastUpdate, @Nonnull Pubkey pubkey @Nullable private Pubkey pubkey; + private boolean online; + public Builder withAlias(String alias) { this.alias = alias; return this; @@ -80,9 +88,13 @@ public record Node(@Nonnull String alias, int lastUpdate, @Nonnull Pubkey pubkey return this; } - public Node build() { - return new Node(requireNonNull(alias), lastUpdate, requireNonNull(pubkey)); + public Builder withOnlineStatus(boolean online) { + this.online = online; + return this; } + public Node build() { + return new Node(requireNonNull(pubkey), requireNonNull(alias), lastUpdate, online); + } } } diff --git a/model/src/test/java/de/cotto/lndmanagej/model/NodeTest.java b/model/src/test/java/de/cotto/lndmanagej/model/NodeTest.java index 05713728..1d42d86a 100644 --- a/model/src/test/java/de/cotto/lndmanagej/model/NodeTest.java +++ b/model/src/test/java/de/cotto/lndmanagej/model/NodeTest.java @@ -6,6 +6,7 @@ import org.junit.jupiter.api.Test; import static de.cotto.lndmanagej.model.NodeFixtures.ALIAS; import static de.cotto.lndmanagej.model.NodeFixtures.LAST_UPDATE; import static de.cotto.lndmanagej.model.NodeFixtures.NODE; +import static de.cotto.lndmanagej.model.NodeFixtures.NODE_PEER; import static de.cotto.lndmanagej.model.NodeFixtures.NODE_WITHOUT_ALIAS; import static de.cotto.lndmanagej.model.PubkeyFixtures.PUBKEY; import static org.assertj.core.api.Assertions.assertThat; @@ -46,44 +47,65 @@ class NodeTest { @Test void builder_without_alias_uses_pubkey() { - Node node = Node.builder().withPubkey(PUBKEY).withLastUpdate(LAST_UPDATE).build(); + Node node = Node.builder().withPubkey(PUBKEY).withLastUpdate(LAST_UPDATE).withOnlineStatus(false).build(); assertThat(node).isEqualTo(NODE_WITHOUT_ALIAS); } @Test void builder_without_pubkey() { assertThatNullPointerException().isThrownBy( - () -> Node.builder().withAlias(ALIAS).withLastUpdate(LAST_UPDATE).build() + () -> Node.builder().withAlias(ALIAS).withLastUpdate(LAST_UPDATE).withOnlineStatus(false).build() ); } @Test void builder_without_last_update() { - Node node = Node.builder().withPubkey(PUBKEY).withAlias(ALIAS).build(); + Node node = Node.builder().withPubkey(PUBKEY).withAlias(ALIAS).withOnlineStatus(false).build(); assertThat(node.lastUpdate()).isEqualTo(0); } @Test - void builder_with_all_arguments_pubkey_first() { + void builder_without_online_status() { Node node = Node.builder().withPubkey(PUBKEY).withAlias(ALIAS).withLastUpdate(LAST_UPDATE).build(); assertThat(node).isEqualTo(NODE); } + @Test + void builder_with_all_arguments_pubkey_first() { + Node node = Node.builder() + .withPubkey(PUBKEY) + .withAlias(ALIAS) + .withOnlineStatus(false) + .withLastUpdate(LAST_UPDATE) + .build(); + assertThat(node).isEqualTo(NODE); + } + @Test void builder_with_all_arguments_alias_first() { - Node node = Node.builder().withAlias(ALIAS).withPubkey(PUBKEY).withLastUpdate(LAST_UPDATE).build(); - assertThat(node).isEqualTo(NODE); + Node node = Node.builder() + .withAlias(ALIAS) + .withPubkey(PUBKEY) + .withLastUpdate(LAST_UPDATE) + .withOnlineStatus(true) + .build(); + assertThat(node).isEqualTo(NODE_PEER); } @Test void testToString() { - Node node = Node.builder().withPubkey(PUBKEY).withAlias(ALIAS).withLastUpdate(LAST_UPDATE).build(); + Node node = Node.builder() + .withPubkey(PUBKEY) + .withAlias(ALIAS) + .withLastUpdate(LAST_UPDATE) + .withOnlineStatus(false) + .build(); assertThat(node).hasToString(ALIAS); } @Test void testEquals_only_by_pubkey() { - EqualsVerifier.forClass(Node.class).usingGetClass().withIgnoredFields("alias", "lastUpdate").verify(); + EqualsVerifier.forClass(Node.class).usingGetClass().withIgnoredFields("alias", "lastUpdate", "online").verify(); } @Test @@ -136,6 +158,12 @@ class NodeTest { assertThat(NODE.lastUpdate()).isEqualTo(LAST_UPDATE); } + @Test + void online() { + assertThat(NODE.online()).isFalse(); + assertThat(NODE_PEER.online()).isTrue(); + } + private Node createFor(String pubkey) { return Node.forPubkey(Pubkey.create(pubkey)); } diff --git a/model/src/testFixtures/java/de/cotto/lndmanagej/model/NodeFixtures.java b/model/src/testFixtures/java/de/cotto/lndmanagej/model/NodeFixtures.java index 8614b885..011b00ec 100644 --- a/model/src/testFixtures/java/de/cotto/lndmanagej/model/NodeFixtures.java +++ b/model/src/testFixtures/java/de/cotto/lndmanagej/model/NodeFixtures.java @@ -3,8 +3,6 @@ package de.cotto.lndmanagej.model; import java.time.Instant; import static de.cotto.lndmanagej.model.PubkeyFixtures.PUBKEY; -import static de.cotto.lndmanagej.model.PubkeyFixtures.PUBKEY_2; -import static de.cotto.lndmanagej.model.PubkeyFixtures.PUBKEY_3; public class NodeFixtures { public static final String ALIAS = "Node"; @@ -18,16 +16,11 @@ public class NodeFixtures { .withLastUpdate(LAST_UPDATE) .build(); - public static final Node NODE_2 = Node.builder() - .withPubkey(PUBKEY_2) - .withAlias(ALIAS_2) - .withLastUpdate(LAST_UPDATE) - .build(); - - public static final Node NODE_3 = Node.builder() - .withPubkey(PUBKEY_3) - .withAlias(ALIAS_3) + public static final Node NODE_PEER = Node.builder() + .withPubkey(PUBKEY) + .withAlias(ALIAS) .withLastUpdate(LAST_UPDATE) + .withOnlineStatus(true) .build(); public static final Node NODE_WITHOUT_ALIAS = Node.builder()