1import ./make-test.nix ({ pkgs, ...} :
2
3let
4 client = { config, pkgs, ... }: {
5 imports = [ ./common/x11.nix ];
6 environment.systemPackages = [ pkgs.mumble ];
7 };
8in
9{
10 name = "mumble";
11 meta = with pkgs.stdenv.lib.maintainers; {
12 maintainers = [ thoughtpolice eelco chaoflow ];
13 };
14
15 nodes = {
16 server = { config, pkgs, ... }: {
17 services.murmur.enable = true;
18 services.murmur.registerName = "NixOS tests";
19 networking.firewall.allowedTCPPorts = [ config.services.murmur.port ];
20 };
21
22 client1 = client;
23 client2 = client;
24 };
25
26 testScript = ''
27 startAll;
28
29 $server->waitForUnit("murmur.service");
30 $client1->waitForX;
31 $client2->waitForX;
32
33 $client1->execute("mumble mumble://client1\@server/test &");
34 $client2->execute("mumble mumble://client2\@server/test &");
35
36 # cancel client audio configuration
37 $client1->waitForWindow(qr/Audio Tuning Wizard/);
38 $client2->waitForWindow(qr/Audio Tuning Wizard/);
39 $server->sleep(5); # wait because mumble is slow to register event handlers
40 $client1->sendKeys("esc");
41 $client2->sendKeys("esc");
42
43 # cancel client cert configuration
44 $client1->waitForWindow(qr/Certificate Management/);
45 $client2->waitForWindow(qr/Certificate Management/);
46 $server->sleep(5); # wait because mumble is slow to register event handlers
47 $client1->sendKeys("esc");
48 $client2->sendKeys("esc");
49
50 # accept server certificate
51 $client1->waitForWindow(qr/^Mumble$/);
52 $client2->waitForWindow(qr/^Mumble$/);
53 $server->sleep(5); # wait because mumble is slow to register event handlers
54 $client1->sendChars("y");
55 $client2->sendChars("y");
56 $server->sleep(5); # wait because mumble is slow to register event handlers
57
58 # sometimes the wrong of the 2 windows is focused, we switch focus and try pressing "y" again
59 $client1->sendKeys("alt-tab");
60 $client2->sendKeys("alt-tab");
61 $server->sleep(5); # wait because mumble is slow to register event handlers
62 $client1->sendChars("y");
63 $client2->sendChars("y");
64
65 # Find clients in logs
66 $server->waitUntilSucceeds("grep -q 'client1' /var/log/murmur/murmurd.log");
67 $server->waitUntilSucceeds("grep -q 'client2' /var/log/murmur/murmurd.log");
68
69 $server->sleep(5); # wait to get screenshot
70 $client1->screenshot("screen1");
71 $client2->screenshot("screen2");
72 '';
73})