blob: 4472baac48061324c7b90ea8b79e5750d1f46d3b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
|
{ 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")
'';
}
|