Skip to content

Commit 89485d9

Browse files
committed
refactor: move more generic functions to test lib
Move `postgresqlWithExtension` and `versions` to the test lib to reduce code duplication across extension tests.
1 parent 8e9ed1f commit 89485d9

File tree

13 files changed

+173
-541
lines changed

13 files changed

+173
-541
lines changed

nix/ext/tests/default.nix

Lines changed: 2 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -9,47 +9,12 @@ let
99
extension_name:
1010
let
1111
pname = extension_name;
12-
inherit (pkgs) lib;
13-
versions = postgresqlMajorVersion: (testLib.installedExtension postgresqlMajorVersion).versions;
14-
postgresqlWithExtension =
15-
postgresql:
16-
let
17-
majorVersion = lib.versions.major postgresql.version;
18-
pkg = pkgs.buildEnv {
19-
name = "postgresql-${majorVersion}-${pname}";
20-
paths = [
21-
postgresql
22-
postgresql.lib
23-
(testLib.installedExtension majorVersion)
24-
];
25-
passthru = {
26-
inherit (postgresql) version psqlSchema;
27-
lib = pkg;
28-
withPackages = _: pkg;
29-
withJIT = pkg;
30-
withoutJIT = pkg;
31-
installedExtensions = [ (installedExtension majorVersion) ];
32-
};
33-
nativeBuildInputs = [ pkgs.makeWrapper ];
34-
pathsToLink = [
35-
"/"
36-
"/bin"
37-
"/lib"
38-
];
39-
postBuild = ''
40-
wrapProgram $out/bin/postgres --set NIX_PGLIBDIR $out/lib
41-
wrapProgram $out/bin/pg_ctl --set NIX_PGLIBDIR $out/lib
42-
wrapProgram $out/bin/pg_upgrade --set NIX_PGLIBDIR $out/lib
43-
'';
44-
};
45-
in
46-
pkg;
4712
testLib = import ./lib.nix {
4813
inherit self pkgs;
4914
testedExtensionName = extension_name;
5015
};
51-
psql_15 = postgresqlWithExtension self.packages.${pkgs.system}.postgresql_15;
52-
psql_17 = postgresqlWithExtension self.packages.${pkgs.system}.postgresql_17;
16+
inherit (pkgs) lib;
17+
inherit (testLib) versions psql_15 psql_17;
5318
in
5419
self.inputs.nixpkgs.lib.nixos.runTest {
5520
name = pname;

nix/ext/tests/http.nix

Lines changed: 4 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,11 @@
11
{ self, pkgs }:
22
let
33
pname = "http";
4-
inherit (pkgs) lib;
5-
installedExtension =
6-
postgresMajorVersion:
7-
self.legacyPackages.${pkgs.system}."psql_${postgresMajorVersion}".exts."${pname}";
8-
versions = postgresqlMajorVersion: (installedExtension postgresqlMajorVersion).versions;
9-
postgresqlWithExtension =
10-
postgresql:
11-
let
12-
majorVersion = lib.versions.major postgresql.version;
13-
pkg = pkgs.buildEnv {
14-
name = "postgresql-${majorVersion}-${pname}";
15-
paths = [
16-
postgresql
17-
postgresql.lib
18-
(installedExtension majorVersion)
19-
];
20-
passthru = {
21-
inherit (postgresql) version psqlSchema;
22-
installedExtensions = [ (installedExtension majorVersion) ];
23-
lib = pkg;
24-
withPackages = _: pkg;
25-
withJIT = pkg;
26-
withoutJIT = pkg;
27-
};
28-
nativeBuildInputs = [ pkgs.makeWrapper ];
29-
pathsToLink = [
30-
"/"
31-
"/bin"
32-
"/lib"
33-
];
34-
postBuild = ''
35-
wrapProgram $out/bin/postgres --set NIX_PGLIBDIR $out/lib
36-
wrapProgram $out/bin/pg_ctl --set NIX_PGLIBDIR $out/lib
37-
wrapProgram $out/bin/pg_upgrade --set NIX_PGLIBDIR $out/lib
38-
'';
39-
};
40-
in
41-
pkg;
424
testLib = import ./lib.nix {
435
inherit self pkgs;
446
testedExtensionName = pname;
457
};
46-
psql_15 = postgresqlWithExtension self.packages.${pkgs.system}.postgresql_15;
47-
psql_17 = postgresqlWithExtension self.packages.${pkgs.system}.postgresql_17;
8+
inherit (testLib) versions psql_15 psql_17;
489
in
4910
self.inputs.nixpkgs.lib.nixos.runTest {
5011
name = pname;
@@ -55,12 +16,12 @@ self.inputs.nixpkgs.lib.nixos.runTest {
5516
let
5617
pg17-configuration = "${nodes.server.system.build.toplevel}/specialisation/postgresql17";
5718
# Convert versions to major.minor format (e.g., "1.5.0" -> "1.5")
58-
toMajorMinor = map (v: lib.versions.majorMinor v);
19+
toMajorMinor = map (v: pkgs.lib.versions.majorMinor v);
5920
in
6021
''
6122
versions = {
62-
"15": [${lib.concatStringsSep ", " (map (s: ''"${s}"'') (toMajorMinor (versions "15")))}],
63-
"17": [${lib.concatStringsSep ", " (map (s: ''"${s}"'') (toMajorMinor (versions "17")))}],
23+
"15": [${pkgs.lib.concatStringsSep ", " (map (s: ''"${s}"'') (toMajorMinor (versions "15")))}],
24+
"17": [${pkgs.lib.concatStringsSep ", " (map (s: ''"${s}"'') (toMajorMinor (versions "17")))}],
6425
}
6526
6627
def run_sql(query):

nix/ext/tests/lib.nix

Lines changed: 66 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@
1010
#
1111
# - `installedExtension`: Function to get the installed extension package for a PostgreSQL version
1212
# - `mkDefaultNixosTestNode`: Creates a NixOS test node with standard PostgreSQL setup
13+
# - `psql_15`: PostgreSQL 15 package with the tested extension
14+
# - `psql_17`: PostgreSQL 17 package with the tested extension
15+
# - `versions`: Function to get available extension versions for a PostgreSQL version
16+
# - `mkPostgresqlWithExtensions`: Builds a PostgreSQL package with a list of extensions
1317
#
1418
# ## Examples
1519
#
@@ -47,9 +51,9 @@ rec {
4751
# ]
4852
mkDefaultNixosTestNode =
4953
{
50-
config, # The node's config attribute
51-
psql_15, # PostgreSQL 15 package with extension
52-
psql_17 ? null, # PostgreSQL 17 package with extension (optional)
54+
config, # The node's config attribute
55+
psql_15, # PostgreSQL 15 package with extension
56+
psql_17 ? null, # PostgreSQL 17 package with extension (optional)
5357
...
5458
}:
5559
{
@@ -135,4 +139,63 @@ rec {
135139
};
136140
};
137141
};
142+
143+
# Build a PostgreSQL package that includes a list of extensions.
144+
#
145+
# The included extension can be accessed via the `testedExtension` attribute.
146+
#
147+
mkPostgresqlWithExtensions =
148+
postgresql: # The PostgreSQL package to extend with the extension
149+
extensions: # A list of extension packages to include, the first will be the testedExtension
150+
let
151+
majorVersion = pkgs.lib.versions.major postgresql.version;
152+
# Build paths for all extensions
153+
extensionPaths = map (
154+
ext: self.legacyPackages.${pkgs.system}."psql_${majorVersion}".exts."${ext}"
155+
) extensions;
156+
# Automatically add orioledb if building for OrioleDB
157+
orioledbPaths =
158+
pkgs.lib.optional postgresql.isOrioleDB
159+
self.legacyPackages.${pkgs.system}."psql_orioledb-17".exts.orioledb;
160+
pkg = pkgs.buildEnv {
161+
name = "postgresql-${majorVersion}-${testedExtensionName}";
162+
paths = [
163+
postgresql
164+
postgresql.lib
165+
]
166+
++ extensionPaths
167+
++ orioledbPaths;
168+
passthru = {
169+
inherit (postgresql) version psqlSchema;
170+
lib = pkg;
171+
testedExtension = builtins.head extensionPaths;
172+
withPackages = _: pkg;
173+
withJIT = pkg;
174+
withoutJIT = pkg;
175+
installedExtensions = [ (installedExtension majorVersion) ];
176+
};
177+
nativeBuildInputs = [ pkgs.makeWrapper ];
178+
pathsToLink = [
179+
"/"
180+
"/bin"
181+
"/lib"
182+
];
183+
postBuild = ''
184+
wrapProgram $out/bin/postgres --set NIX_PGLIBDIR $out/lib
185+
wrapProgram $out/bin/pg_ctl --set NIX_PGLIBDIR $out/lib
186+
wrapProgram $out/bin/pg_upgrade --set NIX_PGLIBDIR $out/lib
187+
'';
188+
};
189+
in
190+
pkg;
191+
psql_15 = mkPostgresqlWithExtensions self.packages.${pkgs.system}.postgresql_15 [
192+
testedExtensionName
193+
];
194+
psql_17 = mkPostgresqlWithExtensions self.packages.${pkgs.system}.postgresql_17 [
195+
testedExtensionName
196+
];
197+
# Get available extension versions for a specific PostgreSQL major version.
198+
versions =
199+
postgresqlMajorVersion: # The PostgreSQL major version (e.g., "15", "17")
200+
(installedExtension postgresqlMajorVersion).versions;
138201
}

nix/ext/tests/pg_repack.nix

Lines changed: 3 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,11 @@
11
{ self, pkgs }:
22
let
33
pname = "pg_repack";
4-
inherit (pkgs) lib;
5-
installedExtension =
6-
postgresMajorVersion:
7-
self.legacyPackages.${pkgs.system}."psql_${postgresMajorVersion}".exts."${pname}";
8-
versions = postgresqlMajorVersion: (installedExtension postgresqlMajorVersion).versions;
9-
postgresqlWithExtension =
10-
postgresql:
11-
let
12-
majorVersion = lib.versions.major postgresql.version;
13-
pkg = pkgs.buildEnv {
14-
name = "postgresql-${majorVersion}-${pname}";
15-
paths = [
16-
postgresql
17-
postgresql.lib
18-
(installedExtension majorVersion)
19-
];
20-
passthru = {
21-
inherit (postgresql) version psqlSchema;
22-
installedExtensions = [ (installedExtension majorVersion) ];
23-
lib = pkg;
24-
withPackages = _: pkg;
25-
withJIT = pkg;
26-
withoutJIT = pkg;
27-
};
28-
nativeBuildInputs = [ pkgs.makeWrapper ];
29-
pathsToLink = [
30-
"/"
31-
"/bin"
32-
"/lib"
33-
];
34-
postBuild = ''
35-
wrapProgram $out/bin/postgres --set NIX_PGLIBDIR $out/lib
36-
wrapProgram $out/bin/pg_ctl --set NIX_PGLIBDIR $out/lib
37-
wrapProgram $out/bin/pg_upgrade --set NIX_PGLIBDIR $out/lib
38-
'';
39-
};
40-
in
41-
pkg;
424
testLib = import ./lib.nix {
435
inherit self pkgs;
446
testedExtensionName = pname;
457
};
46-
psql_15 = postgresqlWithExtension self.packages.${pkgs.system}.postgresql_15;
47-
psql_17 = postgresqlWithExtension self.packages.${pkgs.system}.postgresql_17;
8+
inherit (testLib) versions psql_15 psql_17;
489
in
4910
self.inputs.nixpkgs.lib.nixos.runTest {
5011
name = pname;
@@ -58,8 +19,8 @@ self.inputs.nixpkgs.lib.nixos.runTest {
5819
''
5920
from pathlib import Path
6021
versions = {
61-
"15": [${lib.concatStringsSep ", " (map (s: ''"${s}"'') (versions "15"))}],
62-
"17": [${lib.concatStringsSep ", " (map (s: ''"${s}"'') (versions "17"))}],
22+
"15": [${pkgs.lib.concatStringsSep ", " (map (s: ''"${s}"'') (versions "15"))}],
23+
"17": [${pkgs.lib.concatStringsSep ", " (map (s: ''"${s}"'') (versions "17"))}],
6324
}
6425
extension_name = "${pname}"
6526
support_upgrade = False

nix/ext/tests/pgmq.nix

Lines changed: 8 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,16 @@
11
{ self, pkgs }:
22
let
33
pname = "pgmq";
4-
inherit (pkgs) lib;
5-
installedExtension =
6-
postgresMajorVersion:
7-
self.legacyPackages.${pkgs.system}."psql_${postgresMajorVersion}".exts."${pname}";
8-
versions = postgresqlMajorVersion: (installedExtension postgresqlMajorVersion).versions;
9-
postgresqlWithExtension =
10-
postgresql:
11-
let
12-
majorVersion = lib.versions.major postgresql.version;
13-
pkg = pkgs.buildEnv {
14-
name = "postgresql-${majorVersion}-${pname}";
15-
paths = [
16-
postgresql
17-
postgresql.lib
18-
(installedExtension majorVersion)
19-
];
20-
passthru = {
21-
inherit (postgresql) version psqlSchema;
22-
installedExtensions = [ (installedExtension majorVersion) ];
23-
lib = pkg;
24-
withPackages = _: pkg;
25-
withJIT = pkg;
26-
withoutJIT = pkg;
27-
};
28-
nativeBuildInputs = [ pkgs.makeWrapper ];
29-
pathsToLink = [
30-
"/"
31-
"/bin"
32-
"/lib"
33-
];
34-
postBuild = ''
35-
wrapProgram $out/bin/postgres --set NIX_PGLIBDIR $out/lib
36-
wrapProgram $out/bin/pg_ctl --set NIX_PGLIBDIR $out/lib
37-
wrapProgram $out/bin/pg_upgrade --set NIX_PGLIBDIR $out/lib
38-
'';
39-
};
40-
in
41-
pkg;
424
testLib = import ./lib.nix {
435
inherit self pkgs;
446
testedExtensionName = pname;
457
};
46-
psql_15 = postgresqlWithExtension self.packages.${pkgs.system}.postgresql_15;
47-
psql_17 = postgresqlWithExtension self.packages.${pkgs.system}.postgresql_17;
8+
inherit (testLib)
9+
versions
10+
installedExtension
11+
psql_15
12+
psql_17
13+
;
4814
in
4915
self.inputs.nixpkgs.lib.nixos.runTest {
5016
name = pname;
@@ -58,8 +24,8 @@ self.inputs.nixpkgs.lib.nixos.runTest {
5824
''
5925
from pathlib import Path
6026
versions = {
61-
"15": [${lib.concatStringsSep ", " (map (s: ''"${s}"'') (versions "15"))}],
62-
"17": [${lib.concatStringsSep ", " (map (s: ''"${s}"'') (versions "17"))}],
27+
"15": [${pkgs.lib.concatStringsSep ", " (map (s: ''"${s}"'') (versions "15"))}],
28+
"17": [${pkgs.lib.concatStringsSep ", " (map (s: ''"${s}"'') (versions "17"))}],
6329
}
6430
extension_name = "${pname}"
6531
support_upgrade = True

0 commit comments

Comments
 (0)