1{ pkgs, ... }:
2{
3 name = "turn-rs";
4
5 nodes = {
6 server = {
7 virtualisation.vlans = [ 1 ];
8
9 networking = {
10 useNetworkd = true;
11 useDHCP = false;
12 firewall.enable = false;
13 };
14
15 systemd.network.networks."01-eth1" = {
16 name = "eth1";
17 networkConfig.Address = "10.0.0.1/24";
18 };
19
20 services.turn-rs = {
21 enable = true;
22 secretFile = pkgs.writeText "secret" ''
23 USER_1_CREDS="foobar"
24 '';
25 settings = {
26 turn = {
27 realm = "localhost";
28 interfaces = [
29 {
30 transport = "udp";
31 bind = "127.0.0.1:3478";
32 external = "127.0.0.1:3478";
33 }
34 {
35 transport = "tcp";
36 bind = "127.0.0.1:3478";
37 external = "127.0.0.1:3478";
38 }
39 ];
40 };
41
42 auth.static_credentials.user1 = "$USER_1_CREDS";
43 };
44 };
45 };
46 };
47
48 testScript = # python
49 ''
50 import json
51
52 start_all()
53 server.wait_for_unit('turn-rs.service')
54 server.wait_for_open_port(3000, "127.0.0.1")
55
56 info = server.succeed('curl http://localhost:3000/info')
57 jsonInfo = json.loads(info)
58 assert len(jsonInfo['interfaces']) == 2, f'Interfaces doesn\'t contain two entries:\n{json.dumps(jsonInfo, indent=2)}'
59
60 config = server.succeed('cat /run/turn-rs/config.toml')
61 assert 'foobar' in config, f'Secrets are not properly injected:\n{config}'
62 '';
63}