summaryrefslogtreecommitdiffstats
path: root/nixos/tests/turn-rs.nix
blob: a7237c87cd7b9d33bfa8ce675986a8b1062d5c7b (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
{ pkgs, ... }:
{
  name = "turn-rs";

  nodes = {
    server = {
      virtualisation.vlans = [ 1 ];

      networking = {
        useNetworkd = true;
        useDHCP = false;
        firewall.enable = false;
      };

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

      services.turn-rs = {
        enable = true;
        secretFile = pkgs.writeText "secret" ''
          USER_1_CREDS="foobar"
        '';
        settings = {
          server = {
            realm = "localhost";
            interfaces = [
              {
                transport = "udp";
                listen = "127.0.0.1:3478";
                external = "127.0.0.1:3478";
              }
              {
                transport = "tcp";
                listen = "127.0.0.1:3478";
                external = "127.0.0.1:3478";
              }
            ];
          };

          auth."static-credentials".user1 = "$USER_1_CREDS";
        };
      };
    };
  };

  testScript = # python
    ''
      start_all()
      server.wait_for_unit('turn-rs.service')
      server.wait_for_open_port(3478, "127.0.0.1")

      base = (
          "${pkgs.coturn}/bin/turnutils_uclient"
          " -L 127.0.0.1 -e 127.0.0.1 -u user1 -w foobar -X -y -t"
      )
      for extra in ["", "-s", "-t", "-t -s"]:
          out = server.succeed(f"{base} {extra} 127.0.0.1")
          assert "ERROR" not in out, f"turnutils_uclient errors:\n{out}"
          assert "Total lost packets 0 (0.000000%)" in out, (
              f"turnutils_uclient reported packet loss or did not finish:\n{out}"
          )

      config = server.succeed('cat /run/turn-rs/config.toml')
      assert 'foobar' in config, f'Secrets are not properly injected:\n{config}'
    '';
}