From 280804587e85159d630bd10aa35ee7c6f87ab5c2 Mon Sep 17 00:00:00 2001 From: Carsten Otto Date: Sat, 27 Nov 2021 17:26:30 +0100 Subject: [PATCH] add endpoints: get all / all open channels --- .../controller/StatusControllerIT.java | 22 +++++++++++++++++ .../controller/StatusController.java | 24 +++++++++++++++++++ .../controller/dto/ChannelsDto.java | 8 +++++++ .../controller/StatusControllerTest.java | 20 ++++++++++++++++ 4 files changed, 74 insertions(+) create mode 100644 web/src/main/java/de/cotto/lndmanagej/controller/dto/ChannelsDto.java diff --git a/web/src/integrationTest/java/de/cotto/lndmanagej/controller/StatusControllerIT.java b/web/src/integrationTest/java/de/cotto/lndmanagej/controller/StatusControllerIT.java index 2925446d..15605fd5 100644 --- a/web/src/integrationTest/java/de/cotto/lndmanagej/controller/StatusControllerIT.java +++ b/web/src/integrationTest/java/de/cotto/lndmanagej/controller/StatusControllerIT.java @@ -53,6 +53,17 @@ class StatusControllerIT { .andExpect(content().string("123456")); } + @Test + void getOpenChannels() throws Exception { + when(channelService.getOpenChannels()).thenReturn(Set.of(LOCAL_OPEN_CHANNEL_TO_NODE_3, LOCAL_OPEN_CHANNEL)); + List sortedChannelIds = List.of( + LOCAL_OPEN_CHANNEL.getId().toString(), + LOCAL_OPEN_CHANNEL_TO_NODE_3.getId().toString() + ); + mockMvc.perform(get(PREFIX + "/open-channels/")) + .andExpect(jsonPath("$.channels", is(sortedChannelIds))); + } + @Test void getPubkeysForOpenChannels() throws Exception { when(channelService.getOpenChannels()).thenReturn(Set.of(LOCAL_OPEN_CHANNEL_TO_NODE_3, LOCAL_OPEN_CHANNEL)); @@ -64,6 +75,17 @@ class StatusControllerIT { .andExpect(jsonPath("$.pubkeys", is(sortedPubkeys))); } + @Test + void getAllChannels() throws Exception { + when(channelService.getAllLocalChannels()).thenReturn(Stream.of(LOCAL_OPEN_CHANNEL_TO_NODE_3, CLOSED_CHANNEL)); + List sortedChannelIds = List.of( + CLOSED_CHANNEL.getId().toString(), + LOCAL_OPEN_CHANNEL_TO_NODE_3.getId().toString() + ); + mockMvc.perform(get(PREFIX + "/all-channels/")) + .andExpect(jsonPath("$.channels", is(sortedChannelIds))); + } + @Test void getPubkeysForAllChannels() throws Exception { when(channelService.getAllLocalChannels()).thenReturn(Stream.of(LOCAL_OPEN_CHANNEL_TO_NODE_3, CLOSED_CHANNEL)); diff --git a/web/src/main/java/de/cotto/lndmanagej/controller/StatusController.java b/web/src/main/java/de/cotto/lndmanagej/controller/StatusController.java index 10fab574..ea7ed9d6 100644 --- a/web/src/main/java/de/cotto/lndmanagej/controller/StatusController.java +++ b/web/src/main/java/de/cotto/lndmanagej/controller/StatusController.java @@ -1,9 +1,11 @@ package de.cotto.lndmanagej.controller; import com.codahale.metrics.MetricRegistry; +import de.cotto.lndmanagej.controller.dto.ChannelsDto; import de.cotto.lndmanagej.controller.dto.ObjectMapperConfiguration; import de.cotto.lndmanagej.controller.dto.PubkeysDto; import de.cotto.lndmanagej.metrics.Metrics; +import de.cotto.lndmanagej.model.ChannelId; import de.cotto.lndmanagej.model.LocalChannel; import de.cotto.lndmanagej.model.LocalOpenChannel; import de.cotto.lndmanagej.model.Pubkey; @@ -43,6 +45,17 @@ public class StatusController { return ownNodeService.getBlockHeight(); } + @GetMapping("/open-channels/") + public ChannelsDto getOpenChannels() { + mark("getOpenChannels"); + List channelIds = channelService.getOpenChannels().stream() + .map(LocalOpenChannel::getId) + .sorted() + .distinct() + .collect(Collectors.toList()); + return new ChannelsDto(channelIds); + } + @GetMapping("/open-channels/pubkeys") public PubkeysDto getPubkeysForOpenChannels() { mark("getPubkeysForOpenChannels"); @@ -54,6 +67,17 @@ public class StatusController { return new PubkeysDto(pubkeys); } + @GetMapping("/all-channels/") + public ChannelsDto getAllChannels() { + mark("getAllChannels"); + List channelIds = channelService.getAllLocalChannels() + .map(LocalChannel::getId) + .sorted() + .distinct() + .collect(Collectors.toList()); + return new ChannelsDto(channelIds); + } + @GetMapping("/all-channels/pubkeys") public PubkeysDto getPubkeysForAllChannels() { mark("getPubkeysForAllChannels"); diff --git a/web/src/main/java/de/cotto/lndmanagej/controller/dto/ChannelsDto.java b/web/src/main/java/de/cotto/lndmanagej/controller/dto/ChannelsDto.java new file mode 100644 index 00000000..eeb9cc84 --- /dev/null +++ b/web/src/main/java/de/cotto/lndmanagej/controller/dto/ChannelsDto.java @@ -0,0 +1,8 @@ +package de.cotto.lndmanagej.controller.dto; + +import de.cotto.lndmanagej.model.ChannelId; + +import java.util.List; + +public record ChannelsDto(List channels) { +} diff --git a/web/src/test/java/de/cotto/lndmanagej/controller/StatusControllerTest.java b/web/src/test/java/de/cotto/lndmanagej/controller/StatusControllerTest.java index 72e74fc9..9a0a5671 100644 --- a/web/src/test/java/de/cotto/lndmanagej/controller/StatusControllerTest.java +++ b/web/src/test/java/de/cotto/lndmanagej/controller/StatusControllerTest.java @@ -1,7 +1,9 @@ package de.cotto.lndmanagej.controller; +import de.cotto.lndmanagej.controller.dto.ChannelsDto; import de.cotto.lndmanagej.controller.dto.PubkeysDto; import de.cotto.lndmanagej.metrics.Metrics; +import de.cotto.lndmanagej.model.ChannelId; import de.cotto.lndmanagej.model.Pubkey; import de.cotto.lndmanagej.service.ChannelService; import de.cotto.lndmanagej.service.OwnNodeService; @@ -54,6 +56,15 @@ class StatusControllerTest { assertThat(statusController.isSyncedToChain()).isFalse(); } + @Test + void getOpenChannels() { + when(channelService.getOpenChannels()).thenReturn(Set.of(LOCAL_OPEN_CHANNEL_TO_NODE_3, LOCAL_OPEN_CHANNEL)); + List expectedChannelIds = + List.of(LOCAL_OPEN_CHANNEL.getId(), LOCAL_OPEN_CHANNEL_TO_NODE_3.getId()); + assertThat(statusController.getOpenChannels()).isEqualTo(new ChannelsDto(expectedChannelIds)); + verify(metrics).mark(argThat(name -> name.endsWith(".getOpenChannels"))); + } + @Test void getPubkeysForOpenChannels() { when(channelService.getOpenChannels()).thenReturn(Set.of(LOCAL_OPEN_CHANNEL_TO_NODE_3, LOCAL_OPEN_CHANNEL)); @@ -69,6 +80,15 @@ class StatusControllerTest { assertThat(statusController.getPubkeysForOpenChannels().pubkeys()).containsExactly(PUBKEY_2.toString()); } + @Test + void getAllChannels() { + when(channelService.getAllLocalChannels()).thenReturn(Stream.of(LOCAL_OPEN_CHANNEL_TO_NODE_3, CLOSED_CHANNEL)); + List expectedChannelIds = + List.of(CLOSED_CHANNEL.getId(), LOCAL_OPEN_CHANNEL_TO_NODE_3.getId()); + assertThat(statusController.getAllChannels()).isEqualTo(new ChannelsDto(expectedChannelIds)); + verify(metrics).mark(argThat(name -> name.endsWith(".getAllChannels"))); + } + @Test void getPubkeysForAllChannels() { when(channelService.getAllLocalChannels()).thenReturn(Stream.of(LOCAL_OPEN_CHANNEL_TO_NODE_3, CLOSED_CHANNEL));