Skip to content
This repository was archived by the owner on Jul 7, 2024. It is now read-only.

Commit 104f723

Browse files
committed
add test for node backport
1 parent 50d7804 commit 104f723

File tree

2 files changed

+102
-1
lines changed

2 files changed

+102
-1
lines changed

result

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
/nix/store/w168s6ni8s5qvnpqj71rzfwr92mf25zs-vm-test-run-azusa
1+
/nix/store/cvs541ha04qxlyipb2k9wdnjwdq0kjdp-vm-test-run-node-backport

test.nix

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -499,4 +499,105 @@ in {
499499
# pprof type doesn't matter
500500
'';
501501
});
502+
node-backport = let
503+
networkName = "testnet";
504+
networkName2 = "othernet";
505+
testDomain = "cs";
506+
in let
507+
node = { token }:
508+
{ pkgs, ... }: {
509+
imports = [
510+
base
511+
self.outputs.nixosModules.${system}.node
512+
];
513+
514+
networking.firewall.allowedTCPPorts = [ 39251 ];
515+
qrystal.services.node = csConfig [ networkName networkName2 ] token;
516+
systemd.services.qrystal-node.wantedBy = [ ];
517+
};
518+
in lib.runTest ({
519+
name = "node-backport";
520+
hostPkgs = pkgs;
521+
nodes = {
522+
node1 = node { token = node1Token; };
523+
node2 = node { token = node2Token; };
524+
cs = { pkgs, ... }: {
525+
imports = [ base self.outputs.nixosModules.${system}.cs ];
526+
527+
networking.firewall.allowedTCPPorts = [ 39252 ];
528+
qrystal.services.cs = {
529+
enable = true;
530+
config = {
531+
tls = csTls;
532+
tokens = [
533+
(nodeToken "node1" node1Hash [ networkName networkName2 ])
534+
(nodeToken "node2" node2Hash [ networkName networkName2 ])
535+
];
536+
central.networks.${networkName} = networkBase // {
537+
peers.node1 = {
538+
host = "node1:58120";
539+
allowedIPs = [ "10.123.0.1/32" ];
540+
canSee.only = [ "node2" ];
541+
};
542+
peers.node2 = {
543+
host = "node2:58120";
544+
allowedIPs = [ "10.123.0.2/32" ];
545+
canSee.only = [ "node1" ];
546+
};
547+
};
548+
central.networks.${networkName2} = networkBase // {
549+
keepalive = "10s";
550+
listenPort = 58121;
551+
ips = [ "10.45.0.1/16" ];
552+
peers.node1 = {
553+
host = "node1:58121";
554+
allowedIPs = [ "10.45.0.1/32" ];
555+
canSee.only = [ "node2" ];
556+
};
557+
peers.node2 = {
558+
host = "node2:58121";
559+
allowedIPs = [ "10.45.0.2/32" ];
560+
canSee.only = [ "node1" ];
561+
};
562+
};
563+
};
564+
};
565+
};
566+
};
567+
testScript = { nodes, ... }: ''
568+
nodes = [node1, node2]
569+
addrs = ["10.123.0.2", "10.123.0.1"]
570+
cs.start()
571+
cs.wait_for_unit("qrystal-cs.service")
572+
for node in nodes:
573+
node.start()
574+
node.systemctl("start qrystal-node.service")
575+
node.wait_for_unit("qrystal-node.service", timeout=20)
576+
print("all nodes started")
577+
# NOTE: there is a race condition where the peers' pubkeys could not be
578+
# set yet when pinged (so that's why we're using wait_until_*
579+
for i, node in enumerate(nodes):
580+
print(node.wait_until_succeeds("wg show"))
581+
print(node.wait_until_succeeds("wg show ${networkName}"))
582+
print(node.wait_until_succeeds("wg show ${networkName2}"))
583+
print(node.execute("cat /etc/wireguard/${networkName}.conf")[1])
584+
print(node.execute("ip route show")[1])
585+
for addr in addrs:
586+
print(node.execute(f"ip route get {addr}")[1])
587+
for i, node in enumerate(nodes):
588+
print(node.execute(f"ping -c 1 {addrs[i]}")[1])
589+
node.wait_until_succeeds(f"ping -c 1 {addrs[i]}")
590+
cs.crash() # bye bye
591+
# 1st, nodes must survive CS crashing
592+
for i, node in enumerate(nodes):
593+
print(node.execute(f"ping -c 1 {addrs[i]}")[1])
594+
node.wait_until_succeeds(f"ping -c 1 {addrs[i]}")
595+
# 2nd, nodes must survive CS crashing + restart
596+
for i, node in enumerate(nodes):
597+
node.systemctl("restart qrystal-node.service")
598+
for i, node in enumerate(nodes):
599+
print(node.execute(f"ping -c 1 {addrs[i]}")[1])
600+
node.wait_until_succeeds(f"ping -c 1 {addrs[i]}")
601+
'';
602+
});
502603
}

0 commit comments

Comments
 (0)