{ 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"; }; }; 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; # 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") # Check that the service is active and not failed machine.succeed("systemctl is-active minecraft-server-main.service") # Wait for the server to fully start up - minecraft with mods can take longer machine.sleep(60) # Verify the service hasn't crashed after startup machine.succeed("systemctl is-active minecraft-server-main.service") # Verify the server port is listening machine.wait_for_open_port(25565) ''; }