1{ pkgs, ... }:
2
3let
4 client =
5 { pkgs, ... }:
6 {
7 imports = [ ./common/x11.nix ];
8 environment.systemPackages = [ pkgs.mumble ];
9 };
10 port = 56457;
11in
12{
13 name = "mumble";
14 meta = with pkgs.lib.maintainers; {
15 maintainers = [ _3JlOy-PYCCKUi ];
16 };
17
18 nodes = {
19 server =
20 { ... }:
21 {
22 services.umurmur = {
23 enable = true;
24 openFirewall = true;
25 settings = {
26 password = "testpassword";
27 channels = [
28 {
29 name = "root";
30 parent = "";
31 description = "Root channel. No entry.";
32 noenter = true;
33 }
34 {
35 name = "lobby";
36 parent = "root";
37 description = "Lobby channel";
38 }
39 ];
40 default_channel = "lobby";
41 bindport = port;
42 };
43 };
44 };
45
46 client1 = client;
47 client2 = client;
48 };
49
50 testScript = ''
51 start_all()
52
53 server.wait_for_unit("umurmur.service")
54 client1.wait_for_x()
55 client2.wait_for_x()
56
57 client1.execute("mumble mumble://client1:testpassword\@server:${toString port}/lobby >&2 &")
58 client2.execute("mumble mumble://client2:testpassword\@server:${toString port}/lobby >&2 &")
59
60 # cancel client audio configuration
61 client1.wait_for_window(r"Audio Tuning Wizard")
62 client2.wait_for_window(r"Audio Tuning Wizard")
63 server.sleep(5) # wait because mumble is slow to register event handlers
64 client1.send_key("esc")
65 client2.send_key("esc")
66
67 # cancel client cert configuration
68 client1.wait_for_window(r"Certificate Management")
69 client2.wait_for_window(r"Certificate Management")
70 server.sleep(5) # wait because mumble is slow to register event handlers
71 client1.send_key("esc")
72 client2.send_key("esc")
73
74 # accept server certificate
75 client1.wait_for_window(r"^Mumble$")
76 client2.wait_for_window(r"^Mumble$")
77 server.sleep(5) # wait because mumble is slow to register event handlers
78 client1.send_chars("y")
79 client2.send_chars("y")
80 server.sleep(5) # wait because mumble is slow to register event handlers
81
82 # sometimes the wrong of the 2 windows is focused, we switch focus and try pressing "y" again
83 client1.send_key("alt-tab")
84 client2.send_key("alt-tab")
85 server.sleep(5) # wait because mumble is slow to register event handlers
86 client1.send_chars("y")
87 client2.send_chars("y")
88
89 # Find clients in logs
90 server.wait_until_succeeds(
91 "journalctl -eu umurmur -o cat | grep -q 'User client1 authenticated'"
92 )
93 server.wait_until_succeeds(
94 "journalctl -eu umurmur -o cat | grep -q 'User client2 authenticated'"
95 )
96 '';
97}