at 15.09-beta 2.1 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 13in 14 15rec { 16 name = "quake3"; 17 meta = with pkgs.stdenv.lib.maintainers; { 18 maintainers = [ iElectric eelco chaoflow ]; 19 }; 20 21 # TODO: lcov doesn't work atm 22 #makeCoverageReport = true; 23 24 client = 25 { config, pkgs, ... }: 26 27 { imports = [ ./common/x11.nix ]; 28 hardware.opengl.driSupport = true; 29 environment.systemPackages = [ pkgs.quake3demo ]; 30 nixpkgs.config.packageOverrides = overrides; 31 }; 32 33 nodes = 34 { server = 35 { config, pkgs, ... }: 36 37 { jobs."quake3-server" = 38 { startOn = "startup"; 39 exec = 40 "${pkgs.quake3demo}/bin/quake3-server '+set g_gametype 0' " + 41 "'+map q3dm7' '+addbot grunt' '+addbot daemia' 2> /tmp/log"; 42 }; 43 nixpkgs.config.packageOverrides = overrides; 44 networking.firewall.allowedUDPPorts = [ 27960 ]; 45 }; 46 47 client1 = client; 48 client2 = client; 49 }; 50 51 testScript = 52 '' 53 startAll; 54 55 $server->waitForUnit("quake3-server"); 56 $client1->waitForX; 57 $client2->waitForX; 58 59 $client1->execute("quake3 '+set r_fullscreen 0' '+set name Foo' '+connect server' &"); 60 $client2->execute("quake3 '+set r_fullscreen 0' '+set name Bar' '+connect server' &"); 61 62 $server->waitUntilSucceeds("grep -q 'Foo.*entered the game' /tmp/log"); 63 $server->waitUntilSucceeds("grep -q 'Bar.*entered the game' /tmp/log"); 64 65 $server->sleep(10); # wait for a while to get a nice screenshot 66 67 $client1->block(); 68 69 $server->sleep(20); 70 71 $client1->screenshot("screen1"); 72 $client2->screenshot("screen2"); 73 74 $client1->unblock(); 75 76 $server->sleep(10); 77 78 $client1->screenshot("screen3"); 79 $client2->screenshot("screen4"); 80 81 $client1->shutdown(); 82 $client2->shutdown(); 83 $server->stopJob("quake3-server"); 84 ''; 85 86})