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 17eb2af9..f2287f46 100644 --- a/web/src/integrationTest/java/de/cotto/lndmanagej/controller/StatusControllerIT.java +++ b/web/src/integrationTest/java/de/cotto/lndmanagej/controller/StatusControllerIT.java @@ -11,7 +11,9 @@ import org.springframework.test.web.servlet.MockMvc; import java.util.List; import java.util.Set; +import java.util.stream.Stream; +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_TO_NODE_3; import static org.hamcrest.core.Is.is; @@ -54,4 +56,15 @@ class StatusControllerIT { mockMvc.perform(get(PREFIX + "/open-channels/pubkeys")) .andExpect(jsonPath("$.pubkeys", is(sortedPubkeys))); } + + @Test + void getPubkeysForAllChannels() throws Exception { + when(channelService.getAllLocalChannels()).thenReturn(Stream.of(LOCAL_OPEN_CHANNEL_TO_NODE_3, CLOSED_CHANNEL)); + List sortedPubkeys = List.of( + CLOSED_CHANNEL.getRemotePubkey().toString(), + LOCAL_OPEN_CHANNEL_TO_NODE_3.getRemotePubkey().toString() + ); + mockMvc.perform(get(PREFIX + "/all-channels/pubkeys")) + .andExpect(jsonPath("$.pubkeys", is(sortedPubkeys))); + } } \ No newline at end of file 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 41a5bca9..2bf90609 100644 --- a/web/src/main/java/de/cotto/lndmanagej/controller/StatusController.java +++ b/web/src/main/java/de/cotto/lndmanagej/controller/StatusController.java @@ -4,6 +4,7 @@ import com.codahale.metrics.MetricRegistry; 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.LocalChannel; import de.cotto.lndmanagej.model.LocalOpenChannel; import de.cotto.lndmanagej.model.Pubkey; import de.cotto.lndmanagej.service.ChannelService; @@ -47,6 +48,17 @@ public class StatusController { return new PubkeysDto(pubkeys); } + @GetMapping("/all-channels/pubkeys") + public PubkeysDto getPubkeysForAllChannels() { + mark("getPubkeysForAllChannels"); + List pubkeys = channelService.getAllLocalChannels() + .map(LocalChannel::getRemotePubkey) + .sorted() + .distinct() + .collect(Collectors.toList()); + return new PubkeysDto(pubkeys); + } + private void mark(String name) { metrics.mark(MetricRegistry.name(getClass(), name)); } 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 26048abf..4f93f7c1 100644 --- a/web/src/test/java/de/cotto/lndmanagej/controller/StatusControllerTest.java +++ b/web/src/test/java/de/cotto/lndmanagej/controller/StatusControllerTest.java @@ -13,7 +13,10 @@ import org.mockito.junit.jupiter.MockitoExtension; import java.util.List; import java.util.Set; +import java.util.stream.Stream; +import static de.cotto.lndmanagej.model.CoopClosedChannelFixtures.CLOSED_CHANNEL; +import static de.cotto.lndmanagej.model.CoopClosedChannelFixtures.CLOSED_CHANNEL_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_TO_NODE_3; @@ -61,8 +64,23 @@ class StatusControllerTest { } @Test - void getPeerPubkeys_without_no_duplicates() { + void getPubkeysForOpenChannels_without_no_duplicates() { when(channelService.getOpenChannels()).thenReturn(Set.of(LOCAL_OPEN_CHANNEL, LOCAL_OPEN_CHANNEL_2)); assertThat(statusController.getPubkeysForOpenChannels().pubkeys()).containsExactly(PUBKEY_2.toString()); } + + @Test + void getPubkeysForAllChannels() { + when(channelService.getAllLocalChannels()).thenReturn(Stream.of(LOCAL_OPEN_CHANNEL_TO_NODE_3, CLOSED_CHANNEL)); + List expectedPubkeys = + List.of(CLOSED_CHANNEL.getRemotePubkey(), LOCAL_OPEN_CHANNEL_TO_NODE_3.getRemotePubkey()); + assertThat(statusController.getPubkeysForAllChannels()).isEqualTo(new PubkeysDto(expectedPubkeys)); + verify(metrics).mark(argThat(name -> name.endsWith(".getPubkeysForAllChannels"))); + } + + @Test + void getPubkeysForAllChannels_without_no_duplicates() { + when(channelService.getAllLocalChannels()).thenReturn(Stream.of(CLOSED_CHANNEL_2, CLOSED_CHANNEL)); + assertThat(statusController.getPubkeysForAllChannels().pubkeys()).containsExactly(PUBKEY_2.toString()); + } } \ No newline at end of file