summaryrefslogtreecommitdiffstats
path: root/nixos/tests/rathole.nix
blob: a6c11af628884ce093484e13f6fa62786d99b26e (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
{ lib, ... }:

let
  successMessage = "Success 3333115147933743662";
in
{
  name = "rathole";
  meta.maintainers = with lib.maintainers; [ xokdvium ];
  nodes = {
    server = {
      networking = {
        useNetworkd = true;
        useDHCP = false;
        firewall.enable = false;
      };

      systemd.network.networks."01-eth1" = {
        name = "eth1";
        networkConfig.Address = "10.0.0.1/24";
      };

      services.rathole = {
        enable = true;
        role = "server";
        settings = {
          server = {
            bind_addr = "0.0.0.0:2333";
            services = {
              success-message = {
                bind_addr = "0.0.0.0:80";
                token = "hunter2";
              };
            };
          };
        };
      };
    };

    client =
      { pkgs, ... }:
      {
        networking = {
          useNetworkd = true;
          useDHCP = false;
        };

        systemd.network.networks."01-eth1" = {
          name = "eth1";
          networkConfig.Address = "10.0.0.2/24";
        };

        services.nginx = {
          enable = true;
          virtualHosts."127.0.0.1" = {
            root = pkgs.writeTextDir "success-message.txt" successMessage;
          };
        };

        services.rathole = {
          enable = true;
          role = "client";
          credentialsFile = pkgs.writeText "rathole-credentials.toml" ''
            [client.services.success-message]
            token = "hunter2"
          '';
          settings = {
            client = {
              remote_addr = "10.0.0.1:2333";
              services.success-message = {
                local_addr = "127.0.0.1:80";
              };
            };
          };
        };
      };
  };

  testScript = ''
    start_all()
    server.wait_for_unit("rathole.service")
    server.wait_for_open_port(2333)
    client.wait_for_unit("rathole.service")
    server.wait_for_open_port(80)
    response = server.succeed("curl http://127.0.0.1/success-message.txt")
    assert "${successMessage}" in response, "Got invalid response"
    response = client.succeed("curl http://10.0.0.1/success-message.txt")
    assert "${successMessage}" in response, "Got invalid response"
  '';
}