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