1{ pkgs, ... }:
2
3let
4 client =
5 { pkgs, ... }:
6
7 {
8 imports = [ ./common/x11.nix ];
9 hardware.graphics.enable = true;
10 environment.systemPackages = [ pkgs.openarena ];
11 };
12
13in
14{
15 name = "openarena";
16 meta = with pkgs.lib.maintainers; {
17 maintainers = [ fpletz ];
18 };
19
20 nodes = {
21 server = {
22 services.openarena = {
23 enable = true;
24 extraFlags = [
25 "+set g_gametype 0"
26 "+map oa_dm7"
27 "+addbot Angelyss"
28 "+addbot Arachna"
29 ];
30 openPorts = true;
31 };
32 };
33
34 client1 = client;
35 client2 = client;
36 };
37
38 testScript = ''
39 start_all()
40
41 server.wait_for_unit("openarena")
42 server.wait_until_succeeds("ss --numeric --udp --listening | grep -q 27960")
43
44 client1.wait_for_x()
45 client2.wait_for_x()
46
47 client1.execute("openarena +set r_fullscreen 0 +set name Foo +connect server >&2 &")
48 client2.execute("openarena +set r_fullscreen 0 +set name Bar +connect server >&2 &")
49
50 server.wait_until_succeeds(
51 "journalctl -u openarena -e | grep -q 'Foo.*entered the game'"
52 )
53 server.wait_until_succeeds(
54 "journalctl -u openarena -e | grep -q 'Bar.*entered the game'"
55 )
56
57 server.sleep(10) # wait for a while to get a nice screenshot
58
59 client1.screenshot("screen_client1_1")
60 client2.screenshot("screen_client2_1")
61
62 client1.block()
63
64 server.sleep(10)
65
66 client1.screenshot("screen_client1_2")
67 client2.screenshot("screen_client2_2")
68
69 client1.unblock()
70
71 server.sleep(10)
72
73 client1.screenshot("screen_client1_3")
74 client2.screenshot("screen_client2_3")
75 '';
76
77}