{
  system ? builtins.currentSystem,
  config ? { },
  pkgs ? import ../../.. { inherit system config; },

  lib ? pkgs.lib,
}:
let
  makeTest = import ./make-test-python.nix;
  mkTestName =
    pkg: "${pkg.pname}_${builtins.replaceStrings [ "." ] [ "" ] (lib.versions.majorMinor pkg.version)}";
  redisPackages = {
    inherit (pkgs) redis keydb;
  };
  makeRedisTest =
    {
      package,
      name ? mkTestName package,
    }:
    makeTest {
      inherit name;
      meta.maintainers = [
        lib.maintainers.flokli
        lib.teams.helsinki-systems.members
      ];

      nodes = {
        machine =
          { lib, ... }:

          {
            services = {
              redis = {
                inherit package;
                servers."".enable = true;
                servers."test".enable = true;
              };
            };

            users.users = lib.listToAttrs (
              map
                (
                  suffix:
                  lib.nameValuePair "member${suffix}" {
                    createHome = false;
                    description = "A member of the redis${suffix} group";
                    isNormalUser = true;
                    extraGroups = [ "redis${suffix}" ];
                  }
                )
                [
                  ""
                  "-test"
                ]
            );
          };
      };

      testScript =
        { nodes, ... }:
        let
          inherit (nodes.machine.services) redis;
        in
        ''
          start_all()
          machine.wait_for_unit("redis")
          machine.wait_for_unit("redis-test")

          # The unnamed Redis server still opens a port for backward-compatibility
          machine.wait_for_open_port(6379)

          machine.wait_for_file("${redis.servers."".unixSocket}")
          machine.wait_for_file("${redis.servers."test".unixSocket}")

          # The unix socket is accessible to the redis group
          machine.succeed('su member -c "${pkgs.redis}/bin/redis-cli ping | grep PONG"')
          machine.succeed('su member-test -c "${pkgs.redis}/bin/redis-cli ping | grep PONG"')

          machine.succeed("${pkgs.redis}/bin/redis-cli ping | grep PONG")
          machine.succeed("${pkgs.redis}/bin/redis-cli -s ${redis.servers."".unixSocket} ping | grep PONG")
          machine.succeed("${pkgs.redis}/bin/redis-cli -s ${
            redis.servers."test".unixSocket
          } ping | grep PONG")
        '';
    };
in
lib.mapAttrs (_: package: makeRedisTest { inherit package; }) redisPackages
