add minecraft test

This commit is contained in:
Simon Gardling 2025-08-11 15:30:43 -07:00
parent 14c4aed363
commit 80df89e9a1
Signed by: titaniumtown
GPG Key ID: 9AB28AC10ECE533D
3 changed files with 122 additions and 3 deletions

View File

@ -225,7 +225,7 @@
packages.${system} = packages.${system} =
let let
testSuite = import ./tests/tests.nix { testSuite = import ./tests/tests.nix {
inherit pkgs lib; inherit pkgs lib inputs;
config = self.nixosConfigurations.muffin.config; config = self.nixosConfigurations.muffin.config;
}; };
in in

118
tests/minecraft.nix Normal file
View File

@ -0,0 +1,118 @@
{
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 ];
};
# Create a wrapper module that imports the actual minecraft service
minecraftService =
{ config, ... }:
let
# Import the minecraft service configuration
serviceConfig = 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";
};
in
{
imports = [ serviceConfig ];
# 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")
# Check that the minecraft process is running
machine.succeed("pgrep -f minecraft")
# Verify the server port is listening
machine.wait_for_open_port(25565)
# Check that minecraft data directory was created
machine.succeed("test -d /var/lib/minecraft/main")
# Verify server.properties was created
machine.succeed("test -f /var/lib/minecraft/main/server.properties")
# Check that mods directory exists and contains the expected mods
machine.succeed("test -d /var/lib/minecraft/main/mods")
machine.succeed("ls /var/lib/minecraft/main/mods | grep -q fabric-api")
machine.succeed("ls /var/lib/minecraft/main/mods | grep -q ferritecore")
machine.succeed("ls /var/lib/minecraft/main/mods | grep -q lithium")
# Check that there are no critical errors in the logs
machine.succeed("! journalctl -u minecraft-server-main.service --no-pager | grep -i 'error\\|exception\\|failed'")
print("Minecraft server with specific mods started successfully!")
'';
}

View File

@ -3,11 +3,12 @@
lib, lib,
pkgs, pkgs,
... ...
}: }@args:
let let
handleTest = file: import file { inherit config lib pkgs; }; handleTest = file: import file (args);
in in
{ {
zfsTest = handleTest ./zfs.nix; zfsTest = handleTest ./zfs.nix;
testTest = handleTest ./testTest.nix; testTest = handleTest ./testTest.nix;
minecraftTest = handleTest ./minecraft.nix;
} }