From bc55943f9d0a75bd692ed954542ea23e9895c152 Mon Sep 17 00:00:00 2001 From: Carsten Otto Date: Fri, 12 Nov 2021 15:55:56 +0100 Subject: [PATCH] get channel IDs for open channels in compact format --- .../controller/LegacyControllerIT.java | 9 +++++++++ .../controller/LegacyController.java | 18 +++++++++++++++--- .../controller/LegacyControllerTest.java | 10 ++++++++++ .../de/cotto/lndmanagej/model/ChannelId.java | 7 +++++++ .../cotto/lndmanagej/model/ChannelIdTest.java | 11 +++++++++-- .../lndmanagej/model/ChannelIdFixtures.java | 9 ++++++--- 6 files changed, 56 insertions(+), 8 deletions(-) diff --git a/application/src/integrationTest/java/de/cotto/lndmanagej/controller/LegacyControllerIT.java b/application/src/integrationTest/java/de/cotto/lndmanagej/controller/LegacyControllerIT.java index c46515fe..c9b9ceab 100644 --- a/application/src/integrationTest/java/de/cotto/lndmanagej/controller/LegacyControllerIT.java +++ b/application/src/integrationTest/java/de/cotto/lndmanagej/controller/LegacyControllerIT.java @@ -15,6 +15,8 @@ import java.util.Set; import static de.cotto.lndmanagej.model.ChannelIdFixtures.CHANNEL_ID; import static de.cotto.lndmanagej.model.ChannelIdFixtures.CHANNEL_ID_3; +import static de.cotto.lndmanagej.model.ChannelIdFixtures.CHANNEL_ID_COMPACT; +import static de.cotto.lndmanagej.model.ChannelIdFixtures.CHANNEL_ID_COMPACT_3; import static de.cotto.lndmanagej.model.LocalChannelFixtures.LOCAL_CHANNEL; import static de.cotto.lndmanagej.model.LocalChannelFixtures.LOCAL_CHANNEL_3; import static de.cotto.lndmanagej.model.LocalChannelFixtures.LOCAL_CHANNEL_TO_NODE_3; @@ -74,6 +76,13 @@ class LegacyControllerIT { .andExpect(content().string(CHANNEL_ID + "\n" + CHANNEL_ID_3)); } + @Test + void getOpenChannelIdsCompact() throws Exception { + when(channelService.getOpenChannels()).thenReturn(Set.of(LOCAL_CHANNEL, LOCAL_CHANNEL_3)); + mockMvc.perform(get("/legacy/open-channels/compact")) + .andExpect(content().string(CHANNEL_ID_COMPACT + "\n" + CHANNEL_ID_COMPACT_3)); + } + @Test void isSyncedToChain_true() throws Exception { when(ownNodeService.isSyncedToChain()).thenReturn(true); diff --git a/application/src/main/java/de/cotto/lndmanagej/controller/LegacyController.java b/application/src/main/java/de/cotto/lndmanagej/controller/LegacyController.java index 40896986..7999926f 100644 --- a/application/src/main/java/de/cotto/lndmanagej/controller/LegacyController.java +++ b/application/src/main/java/de/cotto/lndmanagej/controller/LegacyController.java @@ -14,6 +14,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.stream.Collectors; +import java.util.stream.Stream; @RestController @RequestMapping("/legacy") @@ -52,13 +53,18 @@ public class LegacyController { @GetMapping("/open-channels") public String getOpenChannelIds() { - return channelService.getOpenChannels().stream() - .map(Channel::getId) - .sorted() + return getOpenChannelIdsSorted() .map(ChannelId::toString) .collect(Collectors.joining(NEWLINE)); } + @GetMapping("/open-channels/compact") + public String getOpenChannelIdsCompact() { + return getOpenChannelIdsSorted() + .map(ChannelId::getCompactForm) + .collect(Collectors.joining(NEWLINE)); + } + @GetMapping("/peer-pubkeys") public String getPeerPubkeys() { return channelService.getOpenChannels().stream() @@ -93,4 +99,10 @@ public class LegacyController { public long getOutgoingBaseFee(@PathVariable ChannelId channelId) { return feeService.getOutgoingBaseFee(channelId).milliSatoshis(); } + + private Stream getOpenChannelIdsSorted() { + return channelService.getOpenChannels().stream() + .map(Channel::getId) + .sorted(); + } } diff --git a/application/src/test/java/de/cotto/lndmanagej/controller/LegacyControllerTest.java b/application/src/test/java/de/cotto/lndmanagej/controller/LegacyControllerTest.java index 009ebbc4..54f15331 100644 --- a/application/src/test/java/de/cotto/lndmanagej/controller/LegacyControllerTest.java +++ b/application/src/test/java/de/cotto/lndmanagej/controller/LegacyControllerTest.java @@ -18,6 +18,8 @@ import java.util.Set; 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; +import static de.cotto.lndmanagej.model.ChannelIdFixtures.CHANNEL_ID_COMPACT; +import static de.cotto.lndmanagej.model.ChannelIdFixtures.CHANNEL_ID_COMPACT_3; import static de.cotto.lndmanagej.model.LocalChannelFixtures.LOCAL_CHANNEL; import static de.cotto.lndmanagej.model.LocalChannelFixtures.LOCAL_CHANNEL_2; import static de.cotto.lndmanagej.model.LocalChannelFixtures.LOCAL_CHANNEL_3; @@ -75,6 +77,14 @@ class LegacyControllerTest { ); } + @Test + void getOpenChannelIdsCompact() { + when(channelService.getOpenChannels()).thenReturn(Set.of(LOCAL_CHANNEL, LOCAL_CHANNEL_3)); + assertThat(legacyController.getOpenChannelIdsCompact()).isEqualTo( + CHANNEL_ID_COMPACT + "\n" + CHANNEL_ID_COMPACT_3 + ); + } + @Test void getOpenChannelIds_ordered() { when(channelService.getOpenChannels()).thenReturn(Set.of(LOCAL_CHANNEL_3, LOCAL_CHANNEL)); diff --git a/model/src/main/java/de/cotto/lndmanagej/model/ChannelId.java b/model/src/main/java/de/cotto/lndmanagej/model/ChannelId.java index b343eedd..c5ff13d8 100644 --- a/model/src/main/java/de/cotto/lndmanagej/model/ChannelId.java +++ b/model/src/main/java/de/cotto/lndmanagej/model/ChannelId.java @@ -24,6 +24,13 @@ public record ChannelId(long shortChannelId) implements Comparable { return fromShortChannelId(shortChannelId); } + public String getCompactForm() { + long block = shortChannelId >> 40; + long transaction = shortChannelId >> 16 & 0xFFFFFF; + long output = shortChannelId & 0xFFFF; + return block + ":" + transaction + ":" + output; + } + @Override public String toString() { return String.valueOf(shortChannelId); diff --git a/model/src/test/java/de/cotto/lndmanagej/model/ChannelIdTest.java b/model/src/test/java/de/cotto/lndmanagej/model/ChannelIdTest.java index 2c04500e..59a72050 100644 --- a/model/src/test/java/de/cotto/lndmanagej/model/ChannelIdTest.java +++ b/model/src/test/java/de/cotto/lndmanagej/model/ChannelIdTest.java @@ -4,6 +4,8 @@ import nl.jqno.equalsverifier.EqualsVerifier; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; +import static de.cotto.lndmanagej.model.ChannelIdFixtures.CHANNEL_ID; +import static de.cotto.lndmanagej.model.ChannelIdFixtures.CHANNEL_ID_COMPACT; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException; @@ -125,6 +127,11 @@ class ChannelIdTest { assertThat(channelId1.compareTo(channelId2)).isGreaterThan(0); } + @Test + void getCompactForm() { + assertThat(CHANNEL_ID.getCompactForm()).isEqualTo(CHANNEL_ID_COMPACT); + } + @Test void testEquals() { EqualsVerifier.forClass(ChannelId.class).verify(); @@ -132,7 +139,7 @@ class ChannelIdTest { @Test void testToString() { - String expectedString = String.valueOf(ChannelIdFixtures.CHANNEL_ID.shortChannelId()); - assertThat(ChannelIdFixtures.CHANNEL_ID).hasToString(expectedString); + String expectedString = String.valueOf(CHANNEL_ID.shortChannelId()); + assertThat(CHANNEL_ID).hasToString(expectedString); } } \ No newline at end of file diff --git a/model/src/testFixtures/java/de/cotto/lndmanagej/model/ChannelIdFixtures.java b/model/src/testFixtures/java/de/cotto/lndmanagej/model/ChannelIdFixtures.java index f88f1240..30432320 100644 --- a/model/src/testFixtures/java/de/cotto/lndmanagej/model/ChannelIdFixtures.java +++ b/model/src/testFixtures/java/de/cotto/lndmanagej/model/ChannelIdFixtures.java @@ -1,7 +1,10 @@ package de.cotto.lndmanagej.model; public class ChannelIdFixtures { - public static final ChannelId CHANNEL_ID = ChannelId.fromCompactForm("712345:123:1"); - public static final ChannelId CHANNEL_ID_2 = ChannelId.fromCompactForm("799999:456:2"); - public static final ChannelId CHANNEL_ID_3 = ChannelId.fromCompactForm("799999:456:3"); + public static final String CHANNEL_ID_COMPACT = "712345:123:1"; + public static final String CHANNEL_ID_COMPACT_2 = "799999:456:2"; + public static final String CHANNEL_ID_COMPACT_3 = "799999:456:3"; + public static final ChannelId CHANNEL_ID = ChannelId.fromCompactForm(CHANNEL_ID_COMPACT); + public static final ChannelId CHANNEL_ID_2 = ChannelId.fromCompactForm(CHANNEL_ID_COMPACT_2); + public static final ChannelId CHANNEL_ID_3 = ChannelId.fromCompactForm(CHANNEL_ID_COMPACT_3); }