Skip to content

Commit f23b940

Browse files
jfrochesamrose
authored andcommitted
fix: test with plpgsql_check extension
1 parent 6838118 commit f23b940

File tree

3 files changed

+188
-6
lines changed

3 files changed

+188
-6
lines changed

nix/ext/plpgsql-check.nix

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -55,11 +55,6 @@ let
5555
5656
# For the latest version, create default control file and symlink and copy SQL upgrade scripts
5757
if [[ "${version}" == "${latestVersion}" ]]; then
58-
{
59-
echo "default_version = '${version}'"
60-
cat $out/share/postgresql/extension/${pname}--${version}.control
61-
} > $out/share/postgresql/extension/${pname}.control
62-
ln -sfn ${pname}-${latestVersion}${postgresql.dlSuffix} $out/lib/${pname}${postgresql.dlSuffix}
6358
cp *.sql $out/share/postgresql/extension
6459
else
6560
mv ./${pname}--${version}.sql $out/share/postgresql/extension/${pname}--${version}.sql
@@ -103,6 +98,12 @@ buildEnv {
10398
];
10499

105100
postBuild = ''
101+
{
102+
echo "default_version = '${latestVersion}'"
103+
cat $out/share/postgresql/extension/${pname}--${latestVersion}.control
104+
} > $out/share/postgresql/extension/${pname}.control
105+
ln -sfn ${pname}-${latestVersion}${postgresql.dlSuffix} $out/lib/${pname}${postgresql.dlSuffix}
106+
106107
# Verify all expected library files are present
107108
expectedFiles=${toString (numberOfVersions + 1)}
108109
actualFiles=$(ls -l $out/lib/${pname}*${postgresql.dlSuffix} | wc -l)
@@ -131,6 +132,13 @@ buildEnv {
131132
passthru = {
132133
inherit versions numberOfVersions switch-ext-version;
133134
pname = "${pname}-all";
135+
hasBackgroundWorker = true;
136+
defaultSettings = {
137+
shared_preload_libraries = [
138+
"plpgsql"
139+
"plpgsql_check"
140+
];
141+
};
134142
version =
135143
"multi-" + lib.concatStringsSep "-" (map (v: lib.replaceStrings [ "." ] [ "-" ] v) versions);
136144
};

nix/ext/tests/default.nix

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,6 @@ builtins.listToAttrs (
206206
"pg_graphql"
207207
"pg_jsonschema"
208208
"pg_net"
209-
"plpgsql_check"
210209
"vector"
211210
"wrappers"
212211
]

nix/ext/tests/plpgsql_check.nix

Lines changed: 175 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,175 @@
1+
{ self, pkgs }:
2+
let
3+
pname = "plpgsql_check";
4+
inherit (pkgs) lib;
5+
installedExtension =
6+
postgresMajorVersion: self.packages.${pkgs.system}."psql_${postgresMajorVersion}/exts/${pname}-all";
7+
versions = postgresqlMajorVersion: (installedExtension postgresqlMajorVersion).versions;
8+
postgresqlWithExtension =
9+
postgresql:
10+
let
11+
majorVersion = lib.versions.major postgresql.version;
12+
pkg = pkgs.buildEnv {
13+
name = "postgresql-${majorVersion}-${pname}";
14+
paths = [
15+
postgresql
16+
postgresql.lib
17+
(installedExtension majorVersion)
18+
];
19+
passthru = {
20+
inherit (postgresql) version psqlSchema;
21+
lib = pkg;
22+
withPackages = _: pkg;
23+
};
24+
nativeBuildInputs = [ pkgs.makeWrapper ];
25+
pathsToLink = [
26+
"/"
27+
"/bin"
28+
"/lib"
29+
];
30+
postBuild = ''
31+
wrapProgram $out/bin/postgres --set NIX_PGLIBDIR $out/lib
32+
wrapProgram $out/bin/pg_ctl --set NIX_PGLIBDIR $out/lib
33+
wrapProgram $out/bin/pg_upgrade --set NIX_PGLIBDIR $out/lib
34+
'';
35+
};
36+
in
37+
pkg;
38+
psql_15 = postgresqlWithExtension self.packages.${pkgs.system}.postgresql_15;
39+
psql_17 = postgresqlWithExtension self.packages.${pkgs.system}.postgresql_17;
40+
in
41+
self.inputs.nixpkgs.lib.nixos.runTest {
42+
name = pname;
43+
hostPkgs = pkgs;
44+
nodes.server =
45+
{ config, ... }:
46+
{
47+
virtualisation = {
48+
forwardPorts = [
49+
{
50+
from = "host";
51+
host.port = 13022;
52+
guest.port = 22;
53+
}
54+
];
55+
};
56+
services.openssh = {
57+
enable = true;
58+
};
59+
60+
services.postgresql = {
61+
enable = true;
62+
package = psql_15;
63+
enableTCPIP = true;
64+
initialScript = pkgs.writeText "init-postgres-with-password" ''
65+
CREATE USER test WITH PASSWORD 'secret';
66+
'';
67+
authentication = ''
68+
host test postgres samenet scram-sha-256
69+
'';
70+
settings = (installedExtension "15").defaultSettings or { };
71+
};
72+
73+
networking.firewall.allowedTCPPorts = [ config.services.postgresql.settings.port ];
74+
75+
specialisation.postgresql17.configuration = {
76+
services.postgresql = {
77+
package = lib.mkForce psql_17;
78+
};
79+
80+
systemd.services.postgresql-migrate = {
81+
serviceConfig = {
82+
Type = "oneshot";
83+
RemainAfterExit = true;
84+
User = "postgres";
85+
Group = "postgres";
86+
StateDirectory = "postgresql";
87+
WorkingDirectory = "${builtins.dirOf config.services.postgresql.dataDir}";
88+
};
89+
script =
90+
let
91+
oldPostgresql = psql_15;
92+
newPostgresql = psql_17;
93+
oldDataDir = "${builtins.dirOf config.services.postgresql.dataDir}/${oldPostgresql.psqlSchema}";
94+
newDataDir = "${builtins.dirOf config.services.postgresql.dataDir}/${newPostgresql.psqlSchema}";
95+
in
96+
''
97+
if [[ ! -d ${newDataDir} ]]; then
98+
install -d -m 0700 -o postgres -g postgres "${newDataDir}"
99+
${newPostgresql}/bin/initdb -D "${newDataDir}"
100+
${newPostgresql}/bin/pg_upgrade --old-datadir "${oldDataDir}" --new-datadir "${newDataDir}" \
101+
--old-bindir "${oldPostgresql}/bin" --new-bindir "${newPostgresql}/bin"
102+
else
103+
echo "${newDataDir} already exists"
104+
fi
105+
'';
106+
};
107+
108+
systemd.services.postgresql = {
109+
after = [ "postgresql-migrate.service" ];
110+
requires = [ "postgresql-migrate.service" ];
111+
};
112+
};
113+
};
114+
testScript =
115+
{ nodes, ... }:
116+
let
117+
pg17-configuration = "${nodes.server.system.build.toplevel}/specialisation/postgresql17";
118+
in
119+
''
120+
from pathlib import Path
121+
versions = {
122+
"15": [${lib.concatStringsSep ", " (map (s: ''"${s}"'') (versions "15"))}],
123+
"17": [${lib.concatStringsSep ", " (map (s: ''"${s}"'') (versions "17"))}],
124+
}
125+
extension_name = "${pname}"
126+
support_upgrade = True
127+
pg17_configuration = "${pg17-configuration}"
128+
ext_has_background_worker = ${
129+
if (installedExtension "15") ? hasBackgroundWorker then "True" else "False"
130+
}
131+
sql_test_directory = Path("${../../tests}")
132+
pg_regress_test_name = "${(installedExtension "15").pgRegressTestName or pname}"
133+
134+
${builtins.readFile ./lib.py}
135+
136+
start_all()
137+
138+
server.wait_for_unit("multi-user.target")
139+
server.wait_for_unit("postgresql.service")
140+
141+
test = PostgresExtensionTest(server, extension_name, versions, sql_test_directory, support_upgrade)
142+
143+
if ext_has_background_worker:
144+
with subtest("Test switch_${pname}_version"):
145+
test.check_switch_extension_with_background_worker(Path("${psql_15}/lib/${pname}.so"), "15")
146+
147+
with subtest("Check pg_regress with postgresql 15 after installing the last version"):
148+
test.check_pg_regress(Path("${psql_15}/lib/pgxs/src/test/regress/pg_regress"), "15", pg_regress_test_name)
149+
150+
with subtest("switch to postgresql 17"):
151+
server.succeed(
152+
f"{pg17_configuration}/bin/switch-to-configuration test >&2"
153+
)
154+
155+
if ext_has_background_worker:
156+
with subtest("Test switch_${pname}_version"):
157+
test.check_switch_extension_with_background_worker(Path("${psql_17}/lib/${pname}.so"), "17")
158+
159+
with subtest("Check upgrade path with postgresql 17"):
160+
test.check_upgrade_path("17")
161+
162+
last_version = versions["17"][-1]
163+
with subtest("Check last version of the extension after postgresql upgrade"):
164+
test.assert_version_matches(last_version)
165+
166+
with subtest("Check pg_regress with postgresql 17 after extension upgrade"):
167+
test.check_pg_regress(Path("${psql_17}/lib/pgxs/src/test/regress/pg_regress"), "17", pg_regress_test_name)
168+
169+
with subtest("Check the install of the last version of the extension"):
170+
test.check_install_last_version("17")
171+
172+
with subtest("Check pg_regress with postgresql 17 after installing the last version"):
173+
test.check_pg_regress(Path("${psql_17}/lib/pgxs/src/test/regress/pg_regress"), "17", pg_regress_test_name)
174+
'';
175+
}

0 commit comments

Comments
 (0)