nixpkgs/nixos/tests/quake3.nix
Jade Lovelace 3fd324f823 nixos: remove historical maintainership of modules by eelco
Eelco has made several early contributions to NixOS including writing
the samba module among other things, but is more or less inactive these
days.

By my brief inspection, he has not committed to the nixos/ tree since
releasing Nix 2.13 in early 2023 and merging a PR to networking tests
slightly before that. A lot of these tests/modules are actually
unmaintained in practice, so we should update the code to reflect the
practical reality so someone can consider picking them up.
2024-05-12 12:48:57 -07:00

96 lines
2.5 KiB
Nix

import ./make-test-python.nix ({ pkgs, lib, ...} :
let
# Build Quake with coverage instrumentation.
overrides = pkgs:
{
quake3game = pkgs.quake3game.override (args: {
stdenv = pkgs.stdenvAdapters.addCoverageInstrumentation args.stdenv;
});
};
# Only allow the demo data to be used (only if it's unfreeRedistributable).
unfreePredicate = pkg: let
allowPackageNames = [ "quake3-demodata" "quake3-pointrelease" ];
allowLicenses = [ lib.licenses.unfreeRedistributable ];
in lib.elem pkg.pname allowPackageNames &&
lib.elem (pkg.meta.license or null) allowLicenses;
client =
{ pkgs, ... }:
{ imports = [ ./common/x11.nix ];
hardware.opengl.driSupport = true;
environment.systemPackages = [ pkgs.quake3demo ];
nixpkgs.config.packageOverrides = overrides;
nixpkgs.config.allowUnfreePredicate = unfreePredicate;
};
in
rec {
name = "quake3";
meta = with lib.maintainers; {
maintainers = [ domenkozar ];
};
# TODO: lcov doesn't work atm
#makeCoverageReport = true;
nodes =
{ server =
{ pkgs, ... }:
{ systemd.services.quake3-server =
{ wantedBy = [ "multi-user.target" ];
script =
"${pkgs.quake3demo}/bin/quake3-server +set g_gametype 0 " +
"+map q3dm7 +addbot grunt +addbot daemia 2> /tmp/log";
};
nixpkgs.config.packageOverrides = overrides;
nixpkgs.config.allowUnfreePredicate = unfreePredicate;
networking.firewall.allowedUDPPorts = [ 27960 ];
};
client1 = client;
client2 = client;
};
testScript =
''
start_all()
server.wait_for_unit("quake3-server")
client1.wait_for_x()
client2.wait_for_x()
client1.execute("quake3 +set r_fullscreen 0 +set name Foo +connect server &")
client2.execute("quake3 +set r_fullscreen 0 +set name Bar +connect server &")
server.wait_until_succeeds("grep -q 'Foo.*entered the game' /tmp/log")
server.wait_until_succeeds("grep -q 'Bar.*entered the game' /tmp/log")
server.sleep(10) # wait for a while to get a nice screenshot
client1.block()
server.sleep(20)
client1.screenshot("screen1")
client2.screenshot("screen2")
client1.unblock()
server.sleep(10)
client1.screenshot("screen3")
client2.screenshot("screen4")
client1.shutdown()
client2.shutdown()
server.stop_job("quake3-server")
'';
})