1{
2 system ? builtins.currentSystem,
3 config ? { },
4 pkgs ? import ../../.. { inherit system config; },
5
6 lib ? pkgs.lib,
7}:
8let
9 makeTest = import ./make-test-python.nix;
10 mkTestName =
11 pkg: "${pkg.pname}_${builtins.replaceStrings [ "." ] [ "" ] (lib.versions.majorMinor pkg.version)}";
12 redisPackages = {
13 inherit (pkgs) redis keydb valkey;
14 };
15 makeRedisTest =
16 {
17 package,
18 name ? mkTestName package,
19 }:
20 makeTest {
21 inherit name;
22 meta.maintainers = [
23 lib.maintainers.flokli
24 ]
25 ++ lib.teams.helsinki-systems.members;
26
27 nodes = {
28 machine =
29 { lib, ... }:
30
31 {
32 services = {
33 redis = {
34 inherit package;
35 servers."".enable = true;
36 servers."test".enable = true;
37 };
38 };
39
40 users.users = lib.listToAttrs (
41 map
42 (
43 suffix:
44 lib.nameValuePair "member${suffix}" {
45 createHome = false;
46 description = "A member of the redis${suffix} group";
47 isNormalUser = true;
48 extraGroups = [ "redis${suffix}" ];
49 }
50 )
51 [
52 ""
53 "-test"
54 ]
55 );
56 };
57 };
58
59 testScript =
60 { nodes, ... }:
61 let
62 inherit (nodes.machine.services) redis;
63 in
64 ''
65 start_all()
66 machine.wait_for_unit("redis")
67 machine.wait_for_unit("redis-test")
68
69 # The unnamed Redis server still opens a port for backward-compatibility
70 machine.wait_for_open_port(6379)
71
72 machine.wait_for_file("${redis.servers."".unixSocket}")
73 machine.wait_for_file("${redis.servers."test".unixSocket}")
74
75 # The unix socket is accessible to the redis group
76 machine.succeed('su member -c "${pkgs.redis}/bin/redis-cli ping | grep PONG"')
77 machine.succeed('su member-test -c "${pkgs.redis}/bin/redis-cli ping | grep PONG"')
78
79 machine.succeed("${pkgs.redis}/bin/redis-cli ping | grep PONG")
80 machine.succeed("${pkgs.redis}/bin/redis-cli -s ${redis.servers."".unixSocket} ping | grep PONG")
81 machine.succeed("${pkgs.redis}/bin/redis-cli -s ${
82 redis.servers."test".unixSocket
83 } ping | grep PONG")
84 '';
85 };
86in
87lib.mapAttrs (_: package: makeRedisTest { inherit package; }) redisPackages