identify node by pubkey

This commit is contained in:
Carsten Otto
2021-11-12 09:41:17 +01:00
parent 9c2afa0abc
commit 3459f2ad8d
7 changed files with 41 additions and 22 deletions

View File

@@ -3,6 +3,7 @@ package de.cotto.lndmanagej.service;
import de.cotto.lndmanagej.grpc.GrpcChannels;
import de.cotto.lndmanagej.model.Channel;
import de.cotto.lndmanagej.model.Node;
import de.cotto.lndmanagej.model.Pubkey;
import org.springframework.stereotype.Component;
import java.util.Set;
@@ -16,9 +17,14 @@ public class ChannelService {
this.grpcChannels = grpcChannels;
}
public Set<Channel> getOpenChannelsWith(Node node) {
public Set<Channel> getOpenChannelsWith(Pubkey peer) {
Node peerNode = Node.forPubkey(peer);
return getOpenChannelsWith(peerNode);
}
public Set<Channel> getOpenChannelsWith(Node peer) {
return grpcChannels.getChannels().stream()
.filter(c -> c.getNodes().contains(node))
.filter(c -> c.getNodes().contains(peer))
.collect(Collectors.toSet());
}
}

View File

@@ -40,9 +40,8 @@ public class NodeService {
.build(loader);
}
public List<ChannelId> getOpenChannelIds(Pubkey pubkey) {
Node node = getNode(pubkey);
return channelService.getOpenChannelsWith(node).stream()
public List<ChannelId> getOpenChannelIds(Pubkey peer) {
return channelService.getOpenChannelsWith(peer).stream()
.map(Channel::getId)
.sorted()
.collect(Collectors.toList());

View File

@@ -17,6 +17,7 @@ import static de.cotto.lndmanagej.model.ChannelIdFixtures.CHANNEL_ID_2;
import static de.cotto.lndmanagej.model.NodeFixtures.NODE;
import static de.cotto.lndmanagej.model.NodeFixtures.NODE_2;
import static de.cotto.lndmanagej.model.NodeFixtures.NODE_3;
import static de.cotto.lndmanagej.model.PubkeyFixtures.PUBKEY_2;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.when;
@@ -29,7 +30,13 @@ class ChannelServiceTest {
private GrpcChannels grpcChannels;
@Test
void getOpenChannelsWith() {
void getOpenChannelsWith_by_pubkey() {
when(grpcChannels.getChannels()).thenReturn(Set.of(CHANNEL, CHANNEL_3));
assertThat(channelService.getOpenChannelsWith(PUBKEY_2)).containsExactlyInAnyOrder(CHANNEL, CHANNEL_3);
}
@Test
void getOpenChannelsWith_by_node() {
when(grpcChannels.getChannels()).thenReturn(Set.of(CHANNEL, CHANNEL_3));
assertThat(channelService.getOpenChannelsWith(NODE_2)).containsExactlyInAnyOrder(CHANNEL, CHANNEL_3);
}

View File

@@ -15,8 +15,8 @@ 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.NodeFixtures.ALIAS;
import static de.cotto.lndmanagej.model.NodeFixtures.NODE;
import static de.cotto.lndmanagej.model.NodeFixtures.NODE_2;
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;
@@ -39,15 +39,13 @@ class NodeServiceTest {
@Test
void getOpenChannelIds() {
when(grpcNodeInfo.getNode(PUBKEY)).thenReturn(NODE_2);
when(channelService.getOpenChannelsWith(NODE_2)).thenReturn(Set.of(CHANNEL, CHANNEL_3));
assertThat(nodeService.getOpenChannelIds(PUBKEY)).containsExactly(CHANNEL_ID, CHANNEL_ID_3);
when(channelService.getOpenChannelsWith(PUBKEY_2)).thenReturn(Set.of(CHANNEL, CHANNEL_3));
assertThat(nodeService.getOpenChannelIds(PUBKEY_2)).containsExactly(CHANNEL_ID, CHANNEL_ID_3);
}
@Test
void getOpenChannelIds_ordered() {
when(grpcNodeInfo.getNode(PUBKEY)).thenReturn(NODE_2);
when(channelService.getOpenChannelsWith(NODE_2)).thenReturn(Set.of(CHANNEL_3, CHANNEL));
assertThat(nodeService.getOpenChannelIds(PUBKEY)).containsExactly(CHANNEL_ID, CHANNEL_ID_3);
when(channelService.getOpenChannelsWith(PUBKEY_2)).thenReturn(Set.of(CHANNEL_3, CHANNEL));
assertThat(nodeService.getOpenChannelIds(PUBKEY_2)).containsExactly(CHANNEL_ID, CHANNEL_ID_3);
}
}

View File

@@ -17,7 +17,7 @@ public class GrpcNodeInfo {
public Node getNode(Pubkey pubkey) {
NodeInfo nodeInfo = grpcService.getNodeInfo(pubkey).orElse(null);
if (nodeInfo == null) {
return Node.builder().withPubkey(pubkey).build();
return Node.forPubkey(pubkey);
}
LightningNode node = nodeInfo.getNode();
return Node.builder()

View File

@@ -23,6 +23,10 @@ public record Node(@Nonnull String alias, int lastUpdate, @Nonnull Pubkey pubkey
return new Builder();
}
public static Node forPubkey(Pubkey pubkey) {
return Node.builder().withPubkey(pubkey).build();
}
@Override
public String toString() {
return alias;

View File

@@ -32,6 +32,11 @@ class NodeTest {
assertThat(node.alias()).isEqualTo("BlueWallet");
}
@Test
void forPubkey() {
assertThat(Node.forPubkey(PUBKEY)).isEqualTo(Node.builder().withPubkey(PUBKEY).build());
}
@Test
void builder_without_arguments() {
assertThatNullPointerException().isThrownBy(
@@ -97,22 +102,22 @@ class NodeTest {
@Test
void compareTo_by_pubkey_same() {
Node node1 = forPubkey("aaa000aaa000abc000abc000abc000abc000abc000abc000abc000abc000abc000");
Node node2 = forPubkey("aaa000aaa000abc000abc000abc000abc000abc000abc000abc000abc000abc000");
Node node1 = createFor("aaa000aaa000abc000abc000abc000abc000abc000abc000abc000abc000abc000");
Node node2 = createFor("aaa000aaa000abc000abc000abc000abc000abc000abc000abc000abc000abc000");
assertThat(node1.compareTo(node2)).isEqualTo(0);
}
@Test
void compareTo_by_pubkey_smaller() {
Node node1 = forPubkey("aaa00abc000abc000abc000abc000abc000abc000abc000abc000abc000abc000a");
Node node2 = forPubkey("fff00abc000abc000abc000abc000abc000abc000abc000abc000abc000abc000a");
Node node1 = createFor("aaa00abc000abc000abc000abc000abc000abc000abc000abc000abc000abc000a");
Node node2 = createFor("fff00abc000abc000abc000abc000abc000abc000abc000abc000abc000abc000a");
assertThat(node1.compareTo(node2)).isLessThan(0);
}
@Test
void compareTo_by_pubkey_larger() {
Node node1 = forPubkey("0c123abc000abc000abc000abc000abc000abc000abc000abc000abc000abc000a");
Node node2 = forPubkey("0b123abc000abc000abc000abc000abc000abc000abc000abc000abc000abc000a");
Node node1 = createFor("0c123abc000abc000abc000abc000abc000abc000abc000abc000abc000abc000a");
Node node2 = createFor("0b123abc000abc000abc000abc000abc000abc000abc000abc000abc000abc000a");
assertThat(node1.compareTo(node2)).isGreaterThan(0);
}
@@ -131,8 +136,8 @@ class NodeTest {
assertThat(NODE.lastUpdate()).isEqualTo(LAST_UPDATE);
}
private Node forPubkey(String pubkey) {
return Node.builder().withPubkey(Pubkey.create(pubkey)).withAlias(ALIAS).withLastUpdate(LAST_UPDATE).build();
private Node createFor(String pubkey) {
return Node.forPubkey(Pubkey.create(pubkey));
}
}