1{ pkgs, ... }:
2
3let
4 client =
5 { pkgs, ... }:
6 {
7 imports = [ ./common/x11.nix ];
8 environment.systemPackages = [ pkgs.mumble ];
9 };
10
11 # outside of tests, this file should obviously not come from the nix store
12 envFile = pkgs.writeText "nixos-test-mumble-murmurd.env" ''
13 MURMURD_PASSWORD=testpassword
14 '';
15
16in
17{
18 name = "mumble";
19 meta = with pkgs.lib.maintainers; {
20 maintainers = [ thoughtpolice ];
21 };
22
23 nodes = {
24 server =
25 { config, ... }:
26 {
27 security.apparmor.enable = true;
28 services.murmur.enable = true;
29 services.murmur.registerName = "NixOS tests";
30 services.murmur.password = "$MURMURD_PASSWORD";
31 services.murmur.environmentFile = envFile;
32 networking.firewall.allowedTCPPorts = [ config.services.murmur.port ];
33 };
34
35 client1 = client;
36 client2 = client;
37 };
38
39 testScript = ''
40 start_all()
41
42 server.wait_for_unit("murmur.service")
43 client1.wait_for_x()
44 client2.wait_for_x()
45
46 client1.execute("mumble mumble://client1:testpassword\@server/test >&2 &")
47 client2.execute("mumble mumble://client2:testpassword\@server/test >&2 &")
48
49 # cancel client audio configuration
50 client1.wait_for_window(r"Audio Tuning Wizard")
51 client2.wait_for_window(r"Audio Tuning Wizard")
52 server.sleep(5) # wait because mumble is slow to register event handlers
53 client1.send_key("esc")
54 client2.send_key("esc")
55
56 # cancel client cert configuration
57 client1.wait_for_window(r"Certificate Management")
58 client2.wait_for_window(r"Certificate Management")
59 server.sleep(5) # wait because mumble is slow to register event handlers
60 client1.send_key("esc")
61 client2.send_key("esc")
62
63 # accept server certificate
64 client1.wait_for_window(r"^Mumble$")
65 client2.wait_for_window(r"^Mumble$")
66 server.sleep(5) # wait because mumble is slow to register event handlers
67 client1.send_chars("y")
68 client2.send_chars("y")
69 server.sleep(5) # wait because mumble is slow to register event handlers
70
71 # sometimes the wrong of the 2 windows is focused, we switch focus and try pressing "y" again
72 client1.send_key("alt-tab")
73 client2.send_key("alt-tab")
74 server.sleep(5) # wait because mumble is slow to register event handlers
75 client1.send_chars("y")
76 client2.send_chars("y")
77
78 # Find clients in logs
79 server.wait_until_succeeds(
80 "journalctl -eu murmur -o cat | grep -q 'client1.\+Authenticated'"
81 )
82 server.wait_until_succeeds(
83 "journalctl -eu murmur -o cat | grep -q 'client2.\+Authenticated'"
84 )
85
86 server.sleep(5) # wait to get screenshot
87 client1.screenshot("screen1")
88 client2.screenshot("screen2")
89
90 # check if apparmor denied anything
91 server.fail('journalctl -b --no-pager --grep "^audit: .*apparmor=\\"DENIED\\""')
92 '';
93}