at 17.09-beta 2.6 kB view raw
1import ./make-test.nix ({ pkgs, ...} : 2 3let 4 5 # Build Quake with coverage instrumentation. 6 overrides = pkgs: 7 rec { 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 = pkg: with pkgs.lib; let 15 allowDrvPredicates = [ "quake3-demo" "quake3-pointrelease" ]; 16 allowLicenses = [ pkgs.lib.licenses.unfreeRedistributable ]; 17 in any (flip hasPrefix pkg.name) allowDrvPredicates && 18 elem (pkg.meta.license or null) allowLicenses; 19 20in 21 22rec { 23 name = "quake3"; 24 meta = with pkgs.stdenv.lib.maintainers; { 25 maintainers = [ domenkozar eelco chaoflow ]; 26 }; 27 28 # TODO: lcov doesn't work atm 29 #makeCoverageReport = true; 30 31 client = 32 { config, pkgs, ... }: 33 34 { imports = [ ./common/x11.nix ]; 35 hardware.opengl.driSupport = true; 36 environment.systemPackages = [ pkgs.quake3demo ]; 37 nixpkgs.config.packageOverrides = overrides; 38 nixpkgs.config.allowUnfreePredicate = unfreePredicate; 39 }; 40 41 nodes = 42 { server = 43 { config, pkgs, ... }: 44 45 { systemd.services."quake3-server" = 46 { wantedBy = [ "multi-user.target" ]; 47 script = 48 "${pkgs.quake3demo}/bin/quake3-server +set g_gametype 0 " + 49 "+map q3dm7 +addbot grunt +addbot daemia 2> /tmp/log"; 50 }; 51 nixpkgs.config.packageOverrides = overrides; 52 nixpkgs.config.allowUnfreePredicate = unfreePredicate; 53 networking.firewall.allowedUDPPorts = [ 27960 ]; 54 }; 55 56 client1 = client; 57 client2 = client; 58 }; 59 60 testScript = 61 '' 62 startAll; 63 64 $server->waitForUnit("quake3-server"); 65 $client1->waitForX; 66 $client2->waitForX; 67 68 $client1->execute("quake3 +set r_fullscreen 0 +set name Foo +connect server &"); 69 $client2->execute("quake3 +set r_fullscreen 0 +set name Bar +connect server &"); 70 71 $server->waitUntilSucceeds("grep -q 'Foo.*entered the game' /tmp/log"); 72 $server->waitUntilSucceeds("grep -q 'Bar.*entered the game' /tmp/log"); 73 74 $server->sleep(10); # wait for a while to get a nice screenshot 75 76 $client1->block(); 77 78 $server->sleep(20); 79 80 $client1->screenshot("screen1"); 81 $client2->screenshot("screen2"); 82 83 $client1->unblock(); 84 85 $server->sleep(10); 86 87 $client1->screenshot("screen3"); 88 $client2->screenshot("screen4"); 89 90 $client1->shutdown(); 91 $client2->shutdown(); 92 $server->stopJob("quake3-server"); 93 ''; 94 95})