mirror of
https://github.com/NixOS/nixpkgs.git
synced 2026-09-14 19:30:21 +00:00
123 lines
4.6 KiB
Nix
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")
|
|
'';
|
|
}
|