{ config, lib, pkgs, inputs, ... }: let # Create pkgs with nix-minecraft overlay and unfree packages allowed testPkgs = import inputs.nixpkgs { system = pkgs.system; config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [ "minecraft-server" ]; overlays = [ inputs.nix-minecraft.overlay (import ../overlays.nix) ]; }; # Create a wrapper module that imports the actual minecraft service minecraftService = { config, ... }: { imports = [ (import ../services/minecraft.nix { inherit lib config; pkgs = testPkgs; service_configs = { minecraft = { server_name = "main"; parent_dir = "/var/lib/minecraft"; }; https = { domain = "test.local"; }; zpool_ssds = ""; }; username = "testuser"; }) ]; # Override nixpkgs config to prevent conflicts in test environment nixpkgs.config = lib.mkForce { allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [ "minecraft-server" ]; }; }; in testPkgs.testers.runNixOSTest { name = "minecraft server startup test"; nodes.machine = { ... }: { imports = [ inputs.nix-minecraft.nixosModules.minecraft-servers minecraftService ]; # 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 [ ]; }; # 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=60 ) except Exception: print(machine.succeed("cat /var/lib/minecraft/main/logs/latest.log")) raise ''; }