phase 2: promote services/, tests/, patches/, lib/, scripts/
This commit is contained in:
97
tests/minecraft.nix
Normal file
97
tests/minecraft.nix
Normal file
@@ -0,0 +1,97 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
inputs,
|
||||
...
|
||||
}:
|
||||
let
|
||||
baseServiceConfigs = import ../service-configs.nix;
|
||||
testServiceConfigs = lib.recursiveUpdate baseServiceConfigs {
|
||||
zpool_ssds = "";
|
||||
https.domain = "test.local";
|
||||
minecraft.parent_dir = "/var/lib/minecraft";
|
||||
minecraft.memory = rec {
|
||||
heap_size_m = 1000;
|
||||
};
|
||||
};
|
||||
|
||||
# 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
|
||||
];
|
||||
|
||||
# Force to 0 because no huge pages in vms ?
|
||||
boot.kernel.sysctl."vm.nr_hugepages" = lib.mkForce 0;
|
||||
|
||||
# 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
|
||||
'';
|
||||
}
|
||||
Reference in New Issue
Block a user