1{ lib, ... }:
2let
3 peer1-ip = "538:f40f:1c51:9bd9:9569:d3f6:d0a1:b2df";
4 peer2-ip = "5b6:6776:fee0:c1f3:db00:b6a8:d013:d38f";
5in
6{
7 name = "mycelium";
8 meta.maintainers = with lib.maintainers; [ lassulus ];
9
10 nodes = {
11 peer1 = {
12 virtualisation.vlans = [ 1 ];
13 networking.interfaces.eth1.ipv4.addresses = [
14 {
15 address = "192.168.1.11";
16 prefixLength = 24;
17 }
18 ];
19
20 services.mycelium = {
21 enable = true;
22 addHostedPublicNodes = false;
23 openFirewall = true;
24 keyFile = ./peer1.key;
25 peers = [
26 "quic://192.168.1.12:9651"
27 "tcp://192.168.1.12:9651"
28 ];
29 };
30 };
31
32 peer2 = {
33 virtualisation.vlans = [ 1 ];
34 networking.interfaces.eth1.ipv4.addresses = [
35 {
36 address = "192.168.1.12";
37 prefixLength = 24;
38 }
39 ];
40
41 services.mycelium = {
42 enable = true;
43 addHostedPublicNodes = false;
44 openFirewall = true;
45 keyFile = ./peer2.key;
46 };
47 };
48 };
49
50 testScript = ''
51 start_all()
52
53 peer1.wait_for_unit("network-online.target")
54 peer2.wait_for_unit("network-online.target")
55 peer1.wait_for_unit("mycelium.service")
56 peer2.wait_for_unit("mycelium.service")
57
58 # Give mycelium some time to discover the other peer
59 peer1.wait_until_succeeds("ping -c1 ${peer2-ip}", timeout=10)
60 peer2.succeed("ping -c1 ${peer1-ip}")
61
62 peer1.succeed("mycelium peers list | grep 192.168.1.12")
63 peer2.succeed("mycelium peers list | grep 192.168.1.11")
64
65 '';
66}