at 25.11-pre 2.7 kB view raw
1import ./make-test-python.nix ( 2 { pkgs, lib, ... }: 3 4 let 5 6 # Build Quake with coverage instrumentation. 7 overrides = pkgs: { 8 quake3game = pkgs.quake3game.override (args: { 9 stdenv = pkgs.stdenvAdapters.addCoverageInstrumentation args.stdenv; 10 }); 11 }; 12 13 # Only allow the demo data to be used (only if it's unfreeRedistributable). 14 unfreePredicate = 15 pkg: 16 let 17 allowPackageNames = [ 18 "quake3-demodata" 19 "quake3-pointrelease" 20 ]; 21 allowLicenses = [ lib.licenses.unfreeRedistributable ]; 22 in 23 lib.elem pkg.pname allowPackageNames && lib.elem (pkg.meta.license or null) allowLicenses; 24 25 client = 26 { pkgs, ... }: 27 28 { 29 imports = [ ./common/x11.nix ]; 30 hardware.graphics.enable = true; 31 environment.systemPackages = [ pkgs.quake3demo ]; 32 nixpkgs.config.packageOverrides = overrides; 33 nixpkgs.config.allowUnfreePredicate = unfreePredicate; 34 }; 35 36 in 37 38 rec { 39 name = "quake3"; 40 meta = with lib.maintainers; { 41 maintainers = [ domenkozar ]; 42 }; 43 44 # TODO: lcov doesn't work atm 45 #makeCoverageReport = true; 46 47 nodes = { 48 server = 49 { pkgs, ... }: 50 51 { 52 systemd.services.quake3-server = { 53 wantedBy = [ "multi-user.target" ]; 54 script = 55 "${pkgs.quake3demo}/bin/quake3-server +set g_gametype 0 " 56 + "+map q3dm7 +addbot grunt +addbot daemia 2> /tmp/log"; 57 }; 58 nixpkgs.config.packageOverrides = overrides; 59 nixpkgs.config.allowUnfreePredicate = unfreePredicate; 60 networking.firewall.allowedUDPPorts = [ 27960 ]; 61 }; 62 63 client1 = client; 64 client2 = client; 65 }; 66 67 testScript = '' 68 start_all() 69 70 server.wait_for_unit("quake3-server") 71 client1.wait_for_x() 72 client2.wait_for_x() 73 74 client1.execute("quake3 +set r_fullscreen 0 +set name Foo +connect server >&2 &", check_return = False) 75 client2.execute("quake3 +set r_fullscreen 0 +set name Bar +connect server >&2 &", check_return = False) 76 77 server.wait_until_succeeds("grep -q 'Foo.*entered the game' /tmp/log") 78 server.wait_until_succeeds("grep -q 'Bar.*entered the game' /tmp/log") 79 80 server.sleep(10) # wait for a while to get a nice screenshot 81 82 client1.block() 83 84 server.sleep(20) 85 86 client1.screenshot("screen1") 87 client2.screenshot("screen2") 88 89 client1.unblock() 90 91 server.sleep(10) 92 93 client1.screenshot("screen3") 94 client2.screenshot("screen4") 95 96 client1.shutdown() 97 client2.shutdown() 98 server.stop_job("quake3-server") 99 ''; 100 101 } 102)