Files
nixpkgs/nixos/tests/kvrocks.nix
2026-08-12 16:55:08 +08:00

123 lines
4.6 KiB
Nix

{ lib, pkgs, ... }:
{
name = "kvrocks";
meta.maintainers = with lib.maintainers; [ xyenon ];
nodes.machine = {
services.kvrocks = {
enable = true;
settings.log-level = "debug";
};
specialisation."nonDefaultDataDir".configuration = {
services.kvrocks.settings.dir = "/var/lib/kvrocks-custom";
};
specialisation."unixSocket".configuration = {
services.kvrocks.settings.bind = [ ];
services.kvrocks.settings.unixsocket = "/run/kvrocks/kvrocks.sock";
};
specialisation."tcpAndUnix".configuration = {
services.kvrocks.settings.unixsocket = "/run/kvrocks/kvrocks.sock";
};
specialisation."socketActivation".configuration = {
services.kvrocks = {
socketActivation = true;
settings.bind = [ "127.0.0.1" ];
};
};
specialisation."socketActivationAndUnix".configuration = {
services.kvrocks = {
socketActivation = true;
settings = {
bind = [ "127.0.0.1" ];
unixsocket = "/run/kvrocks/kvrocks.sock";
};
};
};
};
testScript =
{ nodes, ... }:
let
inherit (nodes.machine.services) kvrocks;
port = toString kvrocks.settings.port;
redisCliTcp = "${pkgs.redis}/bin/redis-cli -p ${port}";
unixsocket = "/run/kvrocks/kvrocks.sock";
redisCliUnix = "${pkgs.redis}/bin/redis-cli -s ${unixsocket}";
switchTo =
name:
"${nodes.machine.system.build.toplevel}/specialisation/${name}/bin/switch-to-configuration test";
in
''
start_all()
machine.wait_for_unit("kvrocks.service")
machine.wait_for_open_port(${port})
machine.succeed("${redisCliTcp} ping | grep PONG")
with subtest("Test normal usage"):
machine.succeed("${redisCliTcp} set k1 v1 | grep OK")
machine.succeed("${redisCliTcp} get k1 | grep v1")
machine.systemctl("restart kvrocks")
machine.wait_for_unit("kvrocks.service")
machine.wait_for_open_port(${port})
machine.succeed("${redisCliTcp} get k1 | grep v1")
with subtest("Test usage with non-default data directory"):
machine.succeed("${switchTo "nonDefaultDataDir"}")
machine.wait_for_unit("kvrocks.service")
machine.wait_for_open_port(${port})
machine.succeed("test -d /var/lib/kvrocks-custom")
machine.succeed("${redisCliTcp} set k2 v2 | grep OK")
machine.succeed("${redisCliTcp} get k2 | grep v2")
machine.systemctl("restart kvrocks")
machine.wait_for_unit("kvrocks.service")
machine.wait_for_open_port(${port})
machine.succeed("${redisCliTcp} get k2 | grep v2")
with subtest("Test usage with unix socket only"):
machine.succeed("${switchTo "unixSocket"}")
machine.wait_for_unit("kvrocks.service")
machine.wait_for_file("${unixsocket}")
machine.succeed("${redisCliUnix} set k3 v3 | grep OK")
machine.succeed("${redisCliUnix} get k3 | grep v3")
machine.systemctl("restart kvrocks")
machine.wait_for_unit("kvrocks.service")
machine.wait_for_file("${unixsocket}")
machine.succeed("${redisCliUnix} get k3 | grep v3")
with subtest("Test usage with TCP and unix socket"):
machine.succeed("${switchTo "tcpAndUnix"}")
machine.wait_for_unit("kvrocks.service")
machine.wait_for_open_port(${port})
machine.wait_for_file("${unixsocket}")
machine.succeed("${redisCliTcp} set k4 v4 | grep OK")
machine.succeed("${redisCliTcp} get k4 | grep v4")
machine.succeed("${redisCliUnix} get k4 | grep v4")
with subtest("Test usage with socket activation"):
machine.succeed("${switchTo "socketActivation"}")
machine.wait_for_unit("kvrocks.socket")
machine.wait_until_succeeds("${redisCliTcp} ping | grep PONG")
machine.wait_for_unit("kvrocks.service")
machine.wait_for_open_port(${port})
machine.succeed("${redisCliTcp} set k5 v5 | grep OK")
machine.succeed("${redisCliTcp} get k5 | grep v5")
with subtest("Test usage with socket activation and unix socket"):
machine.succeed("${switchTo "socketActivationAndUnix"}")
machine.wait_for_unit("kvrocks.socket")
machine.wait_until_succeeds("${redisCliTcp} ping | grep PONG")
machine.wait_for_unit("kvrocks.service")
machine.wait_for_open_port(${port})
machine.wait_for_file("${unixsocket}")
machine.succeed("${redisCliTcp} set k6 v6 | grep OK")
machine.succeed("${redisCliTcp} get k6 | grep v6")
machine.succeed("${redisCliUnix} get k6 | grep v6")
'';
}