Merge: postgresqlPackages: refactor extension checks with helper (#343486)

This commit is contained in:
Maximilian Bosch 2024-09-25 19:06:11 +02:00 committed by GitHub
commit fc16319c06
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
9 changed files with 63 additions and 106 deletions

View File

@ -18,17 +18,15 @@ with pkgs; {
testScript = { nodes, ... }: testScript = { nodes, ... }:
let let
sqlSU = "${nodes.master.config.services.postgresql.superUser}"; sqlSU = "${nodes.master.services.postgresql.superUser}";
pgProve = "${pkgs.perlPackages.TAPParserSourceHandlerpgTAP}"; pgProve = "${pkgs.perlPackages.TAPParserSourceHandlerpgTAP}";
inherit (nodes.master.services.postgresql.package.pkgs) pgjwt;
in in
'' ''
start_all() start_all()
master.wait_for_unit("postgresql") master.wait_for_unit("postgresql")
master.succeed( master.succeed(
"${pkgs.gnused}/bin/sed -e '12 i CREATE EXTENSION pgcrypto;\\nCREATE EXTENSION pgtap;\\nSET search_path TO tap,public;' ${pgjwt.src}/test.sql > /tmp/test.sql" "${pkgs.sudo}/bin/sudo -u ${sqlSU} PGOPTIONS=--search_path=tap,public ${pgProve}/bin/pg_prove -d postgres -v -f ${pgjwt.src}/test.sql"
)
master.succeed(
"${pkgs.sudo}/bin/sudo -u ${sqlSU} PGOPTIONS=--search_path=tap,public ${pgProve}/bin/pg_prove -d postgres -v -f /tmp/test.sql"
) )
''; '';
}) })

View File

@ -4,7 +4,7 @@
, fetchFromGitHub , fetchFromGitHub
, h3_4 , h3_4
, postgresql , postgresql
, postgresqlTestHook , postgresqlTestExtension
}: }:
stdenv.mkDerivation (finalAttrs: { stdenv.mkDerivation (finalAttrs: {
@ -42,14 +42,9 @@ stdenv.mkDerivation (finalAttrs: {
install -D -t $out/share/postgresql/extension h3_postgis/h3_postgis-*.sql h3_postgis/h3_postgis.control install -D -t $out/share/postgresql/extension h3_postgis/h3_postgis-*.sql h3_postgis/h3_postgis.control
''; '';
passthru.tests.extension = stdenv.mkDerivation { passthru.tests.extension = postgresqlTestExtension {
name = "h3-pg-test"; inherit (finalAttrs) finalPackage;
dontUnpack = true; withPackages = [ "postgis" ];
doCheck = true;
buildInputs = [ postgresqlTestHook ];
nativeCheckInputs = [ (postgresql.withPackages (ps: [ ps.h3-pg ps.postgis ])) ];
postgresqlTestUserOptions = "LOGIN SUPERUSER";
passAsFile = [ "sql" ];
sql = '' sql = ''
CREATE EXTENSION h3; CREATE EXTENSION h3;
CREATE EXTENSION h3_postgis CASCADE; CREATE EXTENSION h3_postgis CASCADE;
@ -57,13 +52,6 @@ stdenv.mkDerivation (finalAttrs: {
SELECT h3_lat_lng_to_cell(POINT('37.3615593,-122.0553238'), 5); SELECT h3_lat_lng_to_cell(POINT('37.3615593,-122.0553238'), 5);
SELECT ST_NPoints(h3_cell_to_boundary_geometry('8a63a9a99047fff')); SELECT ST_NPoints(h3_cell_to_boundary_geometry('8a63a9a99047fff'));
''; '';
failureHook = "postgresqlStop";
checkPhase = ''
runHook preCheck
psql -a -v ON_ERROR_STOP=1 -f $sqlPath
runHook postCheck
'';
installPhase = "touch $out";
}; };
meta = with lib; { meta = with lib; {

View File

@ -3,7 +3,7 @@
, cmake , cmake
, fetchFromGitHub , fetchFromGitHub
, postgresql , postgresql
, postgresqlTestHook , postgresqlTestExtension
}: }:
stdenv.mkDerivation (finalAttrs: { stdenv.mkDerivation (finalAttrs: {
@ -40,30 +40,17 @@ stdenv.mkDerivation (finalAttrs: {
"-DBUILD_FOR_DISTRIBUTING=ON" "-DBUILD_FOR_DISTRIBUTING=ON"
]; ];
passthru.tests.extension = stdenv.mkDerivation { passthru.tests.extension = postgresqlTestExtension {
name = "lantern-pg-test"; inherit (finalAttrs) finalPackage;
dontUnpack = true;
doCheck = true;
buildInputs = [ postgresqlTestHook ];
nativeCheckInputs = [ (postgresql.withPackages (_: [ finalAttrs.finalPackage ])) ];
postgresqlTestUserOptions = "LOGIN SUPERUSER";
passAsFile = [ "sql" ];
sql = '' sql = ''
CREATE EXTENSION lantern; CREATE EXTENSION lantern;
CREATE TABLE small_world (id integer, vector real[3]); CREATE TABLE small_world (id integer, vector real[3]);
INSERT INTO small_world (id, vector) VALUES (0, '{0,0,0}'), (1, '{0,0,1}'); INSERT INTO small_world (id, vector) VALUES (0, '{0,0,0}'), (1, '{0,0,1}');
CREATE INDEX ON small_world USING hnsw (vector dist_l2sq_ops) CREATE INDEX ON small_world USING lantern_hnsw (vector dist_l2sq_ops)
WITH (M=2, ef_construction=10, ef=4, dim=3); WITH (M=2, ef_construction=10, ef=4, dim=3);
''; '';
failureHook = "postgresqlStop";
checkPhase = ''
runHook preCheck
psql -a -v ON_ERROR_STOP=1 -f $sqlPath
runHook postCheck
'';
installPhase = "touch $out";
}; };
meta = with lib; { meta = with lib; {

View File

@ -2,7 +2,7 @@
, stdenv , stdenv
, fetchFromGitHub , fetchFromGitHub
, postgresql , postgresql
, postgresqlTestHook , postgresqlTestExtension
, testers , testers
, zlib , zlib
}: }:
@ -30,20 +30,9 @@ stdenv.mkDerivation (finalAttrs: {
version = testers.testVersion { version = testers.testVersion {
package = finalAttrs.finalPackage; package = finalAttrs.finalPackage;
}; };
extension = stdenv.mkDerivation { extension = postgresqlTestExtension {
name = "plpgsql-check-test"; inherit (finalAttrs) finalPackage;
dontUnpack = true; sql = "CREATE EXTENSION pg_repack;";
doCheck = true;
buildInputs = [ postgresqlTestHook ];
nativeCheckInputs = [ (postgresql.withPackages (ps: [ ps.pg_repack ])) ];
postgresqlTestUserOptions = "LOGIN SUPERUSER";
failureHook = "postgresqlStop";
checkPhase = ''
runHook preCheck
psql -a -v ON_ERROR_STOP=1 -c "CREATE EXTENSION pg_repack;"
runHook postCheck
'';
installPhase = "touch $out";
}; };
}; };

View File

@ -1,4 +1,4 @@
{ lib, stdenv, fetchFromGitHub, postgresql, postgresqlTestHook }: { lib, stdenv, fetchFromGitHub, postgresql, postgresqlTestExtension }:
stdenv.mkDerivation (finalAttrs: { stdenv.mkDerivation (finalAttrs: {
pname = "pg_squeeze"; pname = "pg_squeeze";
@ -25,18 +25,12 @@ stdenv.mkDerivation (finalAttrs: {
runHook postInstall runHook postInstall
''; '';
passthru.tests.extension = stdenv.mkDerivation { passthru.tests.extension = postgresqlTestExtension {
name = "pg_squeeze-test"; inherit (finalAttrs) finalPackage;
dontUnpack = true;
doCheck = true;
nativeCheckInputs = [ postgresqlTestHook (postgresql.withPackages (_: [ finalAttrs.finalPackage ])) ];
failureHook = "postgresqlStop";
postgresqlTestUserOptions = "LOGIN SUPERUSER";
postgresqlExtraSettings = '' postgresqlExtraSettings = ''
wal_level = logical wal_level = logical
shared_preload_libraries = 'pg_squeeze' shared_preload_libraries = 'pg_squeeze'
''; '';
passAsFile = [ "sql" ];
sql = '' sql = ''
CREATE EXTENSION pg_squeeze; CREATE EXTENSION pg_squeeze;
@ -48,12 +42,6 @@ stdenv.mkDerivation (finalAttrs: {
VALUES ('public', 'a', ('{30}', '{22}', NULL, NULL, '{3, 5}')); VALUES ('public', 'a', ('{30}', '{22}', NULL, NULL, '{3, 5}'));
SELECT squeeze.squeeze_table('public', 'a', NULL, NULL, NULL); SELECT squeeze.squeeze_table('public', 'a', NULL, NULL, NULL);
''; '';
checkPhase = ''
runHook preCheck
psql -a -v ON_ERROR_STOP=1 -f $sqlPath
runHook postCheck
'';
installPhase = "touch $out";
}; };
meta = with lib; { meta = with lib; {

View File

@ -1,6 +1,6 @@
{ lib, stdenv, fetchFromGitHub, postgresql, unstableGitUpdater, nixosTests }: { lib, stdenv, fetchFromGitHub, postgresql, unstableGitUpdater, nixosTests, postgresqlTestExtension }:
stdenv.mkDerivation { stdenv.mkDerivation (finalAttrs: {
pname = "pgjwt"; pname = "pgjwt";
version = "0-unstable-2023-03-02"; version = "0-unstable-2023-03-02";
@ -19,7 +19,17 @@ stdenv.mkDerivation {
passthru.updateScript = unstableGitUpdater { }; passthru.updateScript = unstableGitUpdater { };
passthru.tests = { inherit (nixosTests) pgjwt; }; passthru.tests = {
inherit (nixosTests) pgjwt;
extension = postgresqlTestExtension {
inherit (finalAttrs) finalPackage;
sql = ''
CREATE EXTENSION pgjwt CASCADE;
SELECT sign('{"sub":"1234567890","name":"John Doe","admin":true}', 'secret');
'';
};
};
meta = with lib; { meta = with lib; {
description = "PostgreSQL implementation of JSON Web Tokens"; description = "PostgreSQL implementation of JSON Web Tokens";
@ -30,4 +40,4 @@ stdenv.mkDerivation {
platforms = postgresql.meta.platforms; platforms = postgresql.meta.platforms;
maintainers = with maintainers; [spinus]; maintainers = with maintainers; [spinus];
}; };
} })

View File

@ -3,7 +3,7 @@
, fetchFromGitHub , fetchFromGitHub
, libsodium , libsodium
, postgresql , postgresql
, postgresqlTestHook , postgresqlTestExtension
}: }:
stdenv.mkDerivation (finalAttrs: { stdenv.mkDerivation (finalAttrs: {
@ -35,17 +35,11 @@ stdenv.mkDerivation (finalAttrs: {
runHook postInstall runHook postInstall
''; '';
passthru.tests.extension = stdenv.mkDerivation { passthru.tests.extension = postgresqlTestExtension {
name = "pgsodium-test"; inherit (finalAttrs) finalPackage;
dontUnpack = true;
doCheck = true;
nativeCheckInputs = [ postgresqlTestHook (postgresql.withPackages (_: [ finalAttrs.finalPackage ])) ];
failureHook = "postgresqlStop";
postgresqlTestUserOptions = "LOGIN SUPERUSER";
postgresqlExtraSettings = '' postgresqlExtraSettings = ''
shared_preload_libraries=pgsodium shared_preload_libraries=pgsodium
''; '';
passAsFile = [ "sql" ];
sql = '' sql = ''
CREATE EXTENSION pgsodium; CREATE EXTENSION pgsodium;
@ -54,12 +48,6 @@ stdenv.mkDerivation (finalAttrs: {
SELECT pgsodium.randombytes_random() FROM generate_series(0, 5); SELECT pgsodium.randombytes_random() FROM generate_series(0, 5);
SELECT * FROM pgsodium.crypto_box_new_keypair(); SELECT * FROM pgsodium.crypto_box_new_keypair();
''; '';
checkPhase = ''
runHook preCheck
psql -a -v ON_ERROR_STOP=1 -f $sqlPath
runHook postCheck
'';
installPhase = "touch $out";
}; };
meta = with lib; { meta = with lib; {

View File

@ -1,13 +1,13 @@
{ lib, stdenv, fetchFromGitHub, postgresql, postgresqlTestHook }: { lib, stdenv, fetchFromGitHub, postgresql, postgresqlTestExtension }:
stdenv.mkDerivation rec { stdenv.mkDerivation (finalAttrs: {
pname = "plpgsql-check"; pname = "plpgsql-check";
version = "2.7.5"; version = "2.7.5";
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "okbob"; owner = "okbob";
repo = "plpgsql_check"; repo = "plpgsql_check";
rev = "v${version}"; rev = "v${finalAttrs.version}";
hash = "sha256-CD/G/wX6o+mC6gowlpFe1DdJWyh3cB9wxSsW2GXrENE="; hash = "sha256-CD/G/wX6o+mC6gowlpFe1DdJWyh3cB9wxSsW2GXrENE=";
}; };
@ -19,28 +19,17 @@ stdenv.mkDerivation rec {
install -D -t $out/share/postgresql/extension *.control install -D -t $out/share/postgresql/extension *.control
''; '';
passthru.tests.extension = stdenv.mkDerivation { passthru.tests.extension = postgresqlTestExtension {
name = "plpgsql-check-test"; inherit (finalAttrs) finalPackage;
dontUnpack = true; sql = "CREATE EXTENSION plpgsql_check;";
doCheck = true;
buildInputs = [ postgresqlTestHook ];
nativeCheckInputs = [ (postgresql.withPackages (ps: [ ps.plpgsql_check ])) ];
postgresqlTestUserOptions = "LOGIN SUPERUSER";
failureHook = "postgresqlStop";
checkPhase = ''
runHook preCheck
psql -a -v ON_ERROR_STOP=1 -c "CREATE EXTENSION plpgsql_check;"
runHook postCheck
'';
installPhase = "touch $out";
}; };
meta = with lib; { meta = with lib; {
description = "Linter tool for language PL/pgSQL"; description = "Linter tool for language PL/pgSQL";
homepage = "https://github.com/okbob/plpgsql_check"; homepage = "https://github.com/okbob/plpgsql_check";
changelog = "https://github.com/okbob/plpgsql_check/releases/tag/v${version}"; changelog = "https://github.com/okbob/plpgsql_check/releases/tag/v${finalAttrs.version}";
platforms = postgresql.meta.platforms; platforms = postgresql.meta.platforms;
license = licenses.mit; license = licenses.mit;
maintainers = [ ]; maintainers = [ ];
}; };
} })

View File

@ -16,6 +16,7 @@ let
# for postgresql.pkgs # for postgresql.pkgs
, self, newScope, buildEnv , self, newScope, buildEnv
, stdenvNoCC, postgresqlTestHook
# source specification # source specification
, version, hash, muslPatches ? {} , version, hash, muslPatches ? {}
@ -271,6 +272,25 @@ let
inherit (llvmPackages) llvm; inherit (llvmPackages) llvm;
postgresql = this; postgresql = this;
stdenv = stdenv'; stdenv = stdenv';
postgresqlTestExtension = { finalPackage, withPackages ? [], ... } @ extraArgs:
stdenvNoCC.mkDerivation ({
name = "${finalPackage.name}-test-extension";
dontUnpack = true;
doCheck = true;
nativeCheckInputs = [
postgresqlTestHook
(this.withPackages (ps: [ finalPackage ] ++ (map (p: ps."${p}") withPackages)))
];
failureHook = "postgresqlStop";
postgresqlTestUserOptions = "LOGIN SUPERUSER";
passAsFile = [ "sql" ];
checkPhase = ''
runHook preCheck
psql -a -v ON_ERROR_STOP=1 -f "$sqlPath"
runHook postCheck
'';
installPhase = "touch $out";
} // extraArgs);
}; };
newSelf = self // scope; newSelf = self // scope;
newSuper = { callPackage = newScope (scope // this.pkgs); }; newSuper = { callPackage = newScope (scope // this.pkgs); };