summaryrefslogtreecommitdiffstats
path: root/nixos/tests/easytier.nix
blob: 9eb580169195f23748642a6b2a438872c819e2d4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
{ lib, ... }:
{
  name = "easytier";
  meta.maintainers = with lib.maintainers; [ ltrump ];

  nodes =
    let
      genPeer =
        hostConfig: settings:
        lib.mkMerge [
          {
            services.easytier = {
              enable = true;
              instances.default = {
                settings = {
                  network_name = "easytier_test";
                  network_secret = "easytier_test_secret";
                }
                // settings;
              };
            };

            networking.useDHCP = false;
            networking.firewall.allowedTCPPorts = [
              11010
              11011
            ];
            networking.firewall.allowedUDPPorts = [
              11010
              11011
            ];
          }
          hostConfig
        ];
    in
    {
      relay =
        genPeer
          {
            virtualisation.vlans = [
              1
              2
            ];

            networking.interfaces.eth1.ipv4.addresses = [
              {
                address = "192.168.1.11";
                prefixLength = 24;
              }
            ];

            networking.interfaces.eth2.ipv4.addresses = [
              {
                address = "192.168.2.11";
                prefixLength = 24;
              }
            ];
          }
          {
            ipv4 = "10.144.144.1";
            listeners = [
              "tcp://0.0.0.0:11010"
              "wss://0.0.0.0:11011"
            ];
          };

      peer1 =
        genPeer
          {
            virtualisation.vlans = [ 1 ];
          }
          {
            ipv4 = "10.144.144.2";
            peers = [ "tcp://192.168.1.11:11010" ];
          };

      peer2 =
        genPeer
          {
            virtualisation.vlans = [ 2 ];
          }
          {
            ipv4 = "10.144.144.3";
            peers = [ "wss://192.168.2.11:11011" ];
          };
    };

  testScript = ''
    start_all()

    relay.wait_for_unit("easytier-default.service")
    peer1.wait_for_unit("easytier-default.service")
    peer2.wait_for_unit("easytier-default.service")

    # relay is accessible by the other hosts
    peer1.succeed("ping -c5 192.168.1.11")
    peer2.succeed("ping -c5 192.168.2.11")

    # The other hosts are in separate vlans
    peer1.fail("ping -c5 192.168.2.11")
    peer2.fail("ping -c5 192.168.1.11")

    # Each host can ping themselves through EasyTier
    relay.succeed("ping -c5 10.144.144.1")
    peer1.succeed("ping -c5 10.144.144.2")
    peer2.succeed("ping -c5 10.144.144.3")

    # Relay is accessible by the other hosts through EasyTier
    peer1.succeed("ping -c5 10.144.144.1")
    peer2.succeed("ping -c5 10.144.144.1")

    # Relay can access the other hosts through EasyTier
    relay.succeed("ping -c5 10.144.144.2")
    relay.succeed("ping -c5 10.144.144.3")

    # The other hosts in separate vlans can access each other through EasyTier
    peer1.succeed("ping -c5 10.144.144.3")
    peer2.succeed("ping -c5 10.144.144.2")
  '';
}