diff --git a/nixos/tests/all-tests.nix b/nixos/tests/all-tests.nix index b1ca7bbcbcdf..f105bcf0740b 100644 --- a/nixos/tests/all-tests.nix +++ b/nixos/tests/all-tests.nix @@ -1211,6 +1211,7 @@ in { vault-postgresql = handleTest ./vault-postgresql.nix {}; vaultwarden = discoverTests (import ./vaultwarden.nix); vector = handleTest ./vector {}; + velocity = runTest ./velocity.nix; vengi-tools = handleTest ./vengi-tools.nix {}; victoriametrics = handleTest ./victoriametrics {}; vikunja = handleTest ./vikunja.nix {}; diff --git a/nixos/tests/velocity.nix b/nixos/tests/velocity.nix new file mode 100644 index 000000000000..1e701977514d --- /dev/null +++ b/nixos/tests/velocity.nix @@ -0,0 +1,68 @@ +{ lib, pkgs, ... }: +{ + name = "velocity"; + meta = { + platforms = [ + "x86_64-linux" + "aarch64-linux" + ]; + maintainers = [ lib.maintainers.Tert0 ]; + }; + + nodes.server = + { ... }: + { + imports = + let + mkVelocityService = name: pkg: { + systemd.sockets.${name} = { + socketConfig = { + ListenFIFO = "/run/${name}.stdin"; + Service = "${name}"; + }; + }; + systemd.services.${name} = { + serviceConfig = { + ExecStart = "${pkg}/bin/velocity"; + DynamicUser = true; + StateDirectory = "${name}"; + WorkingDirectory = "/var/lib/${name}"; + + Sockets = "${name}.socket"; + StandardInput = "socket"; + StandardOutput = "journal"; + StandardError = "journal"; + }; + }; + }; + in + [ + (mkVelocityService "velocity-without-native" ( + pkgs.velocity.override { withVelocityNative = false; } + )) + (mkVelocityService "velocity-with-native" (pkgs.velocity.override { withVelocityNative = true; })) + ]; + + environment.systemPackages = [ pkgs.mcstatus ]; + }; + + testScript = '' + def test_velocity(name: str, native: bool): + server.start_job(name) + server.wait_for_unit(name); + server.wait_for_open_port(25565) + server.wait_until_succeeds(f"journalctl -b -u {name} | grep -q 'Booting up Velocity nixpkgs-${pkgs.velocity.version}...'") + connections_startup_query = "Connections will use epoll channels, libdeflate (.+) compression, OpenSSL 3.x.x (.+) ciphers" if native else "Connections will use epoll channels, Java compression, Java ciphers" + server.wait_until_succeeds(f"journalctl -b -u {name} | grep -q -E '{connections_startup_query}'") + server.wait_until_succeeds(f"journalctl -b -u {name} | grep -q 'Done ([0-9]*.[0-9]*s)!'"); + + _, status_result = server.execute("mcstatus localhost:25565 status") + assert "A Velocity Server" in status_result + + server.execute(f"echo stop > /run/{name}.stdin") + server.wait_for_closed_port(25565); + + test_velocity("velocity-without-native", False) + test_velocity("velocity-with-native", True) + ''; +}