{ config, lib, pkgs, inputs, ... }: let testServiceConfigs = { minecraft = { server_name = "main"; parent_dir = "/var/lib/minecraft"; }; https = { domain = "test.local"; }; ports = { minecraft = 25565; }; zpool_ssds = ""; }; # Create pkgs with nix-minecraft overlay and unfree packages allowed testPkgs = import inputs.nixpkgs { system = pkgs.stdenv.targetPlatform.system; config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [ "minecraft-server" ]; overlays = [ inputs.nix-minecraft.overlay (import ../modules/overlays.nix) ]; }; in testPkgs.testers.runNixOSTest { name = "minecraft server startup test"; node.specialArgs = { inherit inputs lib; service_configs = testServiceConfigs; username = "testuser"; }; nodes.machine = { lib, ... }: { imports = [ ../services/minecraft.nix ]; # Enable caddy service (required by minecraft service) services.caddy.enable = true; # Enable networking for the test (needed for minecraft mods to download mappings) networking.dhcpcd.enable = true; # Disable the ZFS mount dependency service in test environment systemd.services."minecraft-server-main_mounts".enable = lib.mkForce false; # Remove service dependencies that require ZFS systemd.services.minecraft-server-main = { wants = lib.mkForce [ ]; after = lib.mkForce [ ]; requires = lib.mkForce [ ]; serviceConfig = { Nice = lib.mkForce 0; LimitMEMLOCK = lib.mkForce "infinity"; }; }; # Test-specific overrides only - reduce memory for testing services.minecraft-servers.servers.main.jvmOpts = lib.mkForce "-Xmx1G -Xms1G"; # Create test user users.users.testuser = { isNormalUser = true; uid = 1000; extraGroups = [ "minecraft" ]; }; }; testScript = '' start_all() machine.wait_for_unit("multi-user.target") # Wait for minecraft service to be available machine.wait_for_unit("minecraft-server-main.service") # Wait up to 60 seconds for the server to complete startup with machine.nested("Waiting for minecraft server startup completion"): try: machine.wait_until_succeeds( "grep -Eq '\\[[0-9]+:[0-9]+:[0-9]+\\] \\[Server thread/INFO\\]: Done \\([0-9]+\\.[0-9]+s\\)! For help, type \"help\"' /var/lib/minecraft/main/logs/latest.log", timeout=120 ) except Exception: print(machine.succeed("cat /var/lib/minecraft/main/logs/latest.log")) raise ''; }