nixpkgs/nixos/tests/postgresql/default.nix

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

42 lines
1,014 B
Nix
Raw Normal View History

{
system ? builtins.currentSystem,
config ? { },
pkgs ? import ../../.. { inherit system config; },
}:
with import ../../lib/testing-python.nix { inherit system pkgs; };
let
postgresql: refactor `postgresqlVersions` attribute & tests Every postgresql testcase essentially does the following things: * Filter `postgresqlVersions` for server packages * Filter postgresql server packages for suitable ones (i.e. extensions must support the given version) * Generate an attribute-set of testcases The first item became necessary in 7ab1e888334ddc2745b285e3df0b0efd5839d0f8 given that `postgresql/default.nix` now exposes JIT and non-JIT servers AND a `libpq` that is not suitable for the tests here. This changes restructures this a little bit, i.e.: * Having an attribute-set that contains a bunch of postgresql servers and a single client package seems odd (and the sole consumer of `postgresqlVersions` in nixpkgs, the test suite, has to take that into account). Hence, postgresql's default.nix now provides `libpq` (the client) and a `postgresqlVersions` attribute with all supported JIT and non-JIT variants of postgresql. * Each test-case gets a third argument, a function called `genTests`: this function sets `recurseForDerivations = true;` and generates an attribute-set of tests for each postgresql version given a function that returns a testcase or multiple test-cases (`makeTestFor`). The argument to `makeTestFor` is a postgresql server package. This function also accepts a filter predicate that is passed against `filterAttrs` to remove postgresql server packages that are not suitable for the test (e.g. because the version isn't supported by the extension to test). I checked by making sure that the `.drv` doesn't change on staging with this change on top for postgresq, postgresql-jit, postgresql-wal-receiver, postgresql-tls-client-cert, anonymizer, pgjwt, pgvecto-rs, timescaledb, tsja and wal2json.
2025-01-26 13:10:53 +01:00
inherit (pkgs.lib)
recurseIntoAttrs
filterAttrs
mapAttrs
const
;
genTests =
{
makeTestFor,
filter ? (_: _: true),
}:
recurseIntoAttrs (
mapAttrs (const makeTestFor) (filterAttrs filter pkgs.postgresqlVersions)
// {
passthru.override = makeTestFor;
}
);
importWithArgs = path: import path { inherit pkgs makeTest genTests; };
in
{
# postgresql
postgresql = importWithArgs ./postgresql.nix;
postgresql-jit = importWithArgs ./postgresql-jit.nix;
postgresql-wal-receiver = importWithArgs ./postgresql-wal-receiver.nix;
postgresql-tls-client-cert = importWithArgs ./postgresql-tls-client-cert.nix;
# extensions
anonymizer = importWithArgs ./anonymizer.nix;
pgjwt = importWithArgs ./pgjwt.nix;
wal2json = importWithArgs ./wal2json.nix;
}