aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorgjoranv <gv@verizonmedia.com>2023-02-17 14:31:27 +0100
committergjoranv <gv@verizonmedia.com>2023-02-17 14:45:22 +0100
commitfcb117eac8d8bf22dedbe78db04918d10bb33f1f (patch)
tree6e6f1c553ac27d4ff60ddd6c5a8e9faeae172bc3
parent83b51daa3b9a979d202ebea537f29132783ea476 (diff)
Make wireguard peers comparable on hostname.
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/RealNodeRepository.java2
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/wireguard/ConfigserverPeer.java7
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/RealNodeRepositoryTest.java2
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/wireguard/WireguardPeerTest.java34
4 files changed, 42 insertions, 3 deletions
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/RealNodeRepository.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/RealNodeRepository.java
index 6199d7c30f3..7b888f1280c 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/RealNodeRepository.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/RealNodeRepository.java
@@ -136,7 +136,7 @@ public class RealNodeRepository implements NodeRepository {
return response.nodes.stream()
.map(RealNodeRepository::createTenantPeer)
- .sorted(Comparator.comparing(ConfigserverPeer::hostname))
+ .sorted()
.toList();
}
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/wireguard/ConfigserverPeer.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/wireguard/ConfigserverPeer.java
index b1c1e83dedd..510bdacfe0c 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/wireguard/ConfigserverPeer.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/wireguard/ConfigserverPeer.java
@@ -14,11 +14,16 @@ import java.util.Optional;
*/
public record ConfigserverPeer(HostName hostname,
List<VersionedIpAddress> ipAddresses,
- Optional<WireguardKey> publicKey) {
+ Optional<WireguardKey> publicKey) implements Comparable<ConfigserverPeer> {
public ConfigserverPeer {
if (ipAddresses.isEmpty()) throw new IllegalArgumentException("No IP addresses for peer node " + hostname.value());
ipAddresses = ipAddresses.stream().sorted().toList();
}
+ @Override
+ public int compareTo(ConfigserverPeer o) {
+ return hostname.value().compareTo(o.hostname.value());
+ }
+
}
diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/RealNodeRepositoryTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/RealNodeRepositoryTest.java
index 8ed7eac6a41..f47e8e63b79 100644
--- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/RealNodeRepositoryTest.java
+++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/configserver/noderepository/RealNodeRepositoryTest.java
@@ -224,7 +224,7 @@ public class RealNodeRepositoryTest {
"::101:1", "127.0.101.1",
"000011112222333344445555666677778888999900c=");
- assertWireguardPeer(exclavePeers.get(0), "host3.yahoo.com",
+ assertWireguardPeer(exclavePeers.get(1), "host3.yahoo.com",
"::3:1", "127.0.3.1",
"333344445555666677778888999900001111222211c=");
}
diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/wireguard/WireguardPeerTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/wireguard/WireguardPeerTest.java
new file mode 100644
index 00000000000..113ee4ab86d
--- /dev/null
+++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/wireguard/WireguardPeerTest.java
@@ -0,0 +1,34 @@
+package com.yahoo.vespa.hosted.node.admin.wireguard;
+
+import com.yahoo.config.provision.HostName;
+import com.yahoo.vespa.hosted.node.admin.task.util.network.VersionedIpAddress;
+import org.junit.jupiter.api.Test;
+
+import java.util.List;
+import java.util.Optional;
+import java.util.stream.Stream;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+/**
+ * @author gjoranv
+ */
+public class WireguardPeerTest {
+
+ @Test
+ void peers_are_sorted_by_hostname_ascending() {
+ List<ConfigserverPeer> peers = Stream.of(
+ peer("b"),
+ peer("a"),
+ peer("c")
+ ).sorted().toList();
+
+ assertEquals("a", peers.get(0).hostname().value());
+ assertEquals("b", peers.get(1).hostname().value());
+ assertEquals("c", peers.get(2).hostname().value());
+ }
+
+ private static ConfigserverPeer peer(String hostname) {
+ return new ConfigserverPeer(HostName.of(hostname), List.of(VersionedIpAddress.from("::1:1")), Optional.empty());
+ }
+}