Skip to content

Commit 625cec1

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 7e3bc6d commit 625cec1

File tree

13 files changed

+169
-495
lines changed

13 files changed

+169
-495
lines changed

nix/ext/tests/default.nix

Lines changed: 2 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -9,44 +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-
};
30-
nativeBuildInputs = [ pkgs.makeWrapper ];
31-
pathsToLink = [
32-
"/"
33-
"/bin"
34-
"/lib"
35-
];
36-
postBuild = ''
37-
wrapProgram $out/bin/postgres --set NIX_PGLIBDIR $out/lib
38-
wrapProgram $out/bin/pg_ctl --set NIX_PGLIBDIR $out/lib
39-
wrapProgram $out/bin/pg_upgrade --set NIX_PGLIBDIR $out/lib
40-
'';
41-
};
42-
in
43-
pkg;
4412
testLib = import ./lib.nix {
4513
inherit self pkgs;
4614
testedExtensionName = extension_name;
4715
};
48-
psql_15 = postgresqlWithExtension self.packages.${pkgs.system}.postgresql_15;
49-
psql_17 = postgresqlWithExtension self.packages.${pkgs.system}.postgresql_17;
16+
inherit (pkgs) lib;
17+
inherit (testLib) versions psql_15 psql_17;
5018
in
5119
self.inputs.nixpkgs.lib.nixos.runTest {
5220
name = pname;

nix/ext/tests/http.nix

Lines changed: 4 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,11 @@
11
{ self, pkgs }:
22
let
33
pname = "http";
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;
384
testLib = import ./lib.nix {
395
inherit self pkgs;
406
testedExtensionName = pname;
417
};
42-
psql_15 = postgresqlWithExtension self.packages.${pkgs.system}.postgresql_15;
43-
psql_17 = postgresqlWithExtension self.packages.${pkgs.system}.postgresql_17;
8+
inherit (testLib) versions psql_15 psql_17;
449
in
4510
self.inputs.nixpkgs.lib.nixos.runTest {
4611
name = pname;
@@ -51,12 +16,12 @@ self.inputs.nixpkgs.lib.nixos.runTest {
5116
let
5217
pg17-configuration = "${nodes.server.system.build.toplevel}/specialisation/postgresql17";
5318
# Convert versions to major.minor format (e.g., "1.5.0" -> "1.5")
54-
toMajorMinor = map (v: lib.versions.majorMinor v);
19+
toMajorMinor = map (v: pkgs.lib.versions.majorMinor v);
5520
in
5621
''
5722
versions = {
58-
"15": [${lib.concatStringsSep ", " (map (s: ''"${s}"'') (toMajorMinor (versions "15")))}],
59-
"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")))}],
6025
}
6126
6227
def run_sql(query):

nix/ext/tests/lib.nix

Lines changed: 62 additions & 4 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
#
@@ -31,7 +35,7 @@ rec {
3135
# Example:
3236
# installedExtension "15" => derivation
3337
installedExtension =
34-
postgresMajorVersion:
38+
postgresMajorVersion: # The PostgreSQL major version (e.g., "15", "17")
3539
self.packages.${pkgs.system}."psql_${postgresMajorVersion}/exts/${testedExtensionName}-all";
3640

3741
# Create a default NixOS test node with PostgreSQL configured for extension testing.
@@ -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,58 @@ 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.packages.${pkgs.system}."psql_${majorVersion}/exts/${ext}-all"
155+
) extensions;
156+
# Automatically add orioledb if building for OrioleDB
157+
orioledbPaths =
158+
pkgs.lib.optional postgresql.isOrioleDB
159+
self.packages.${pkgs.system}."psql_orioledb-17/exts/orioledb";
160+
pkg = pkgs.buildEnv {
161+
name = "postgresql-${majorVersion}-${testedExtensionName}";
162+
paths = [
163+
postgresql
164+
postgresql.lib
165+
] ++ extensionPaths ++ orioledbPaths;
166+
passthru = {
167+
inherit (postgresql) version psqlSchema;
168+
lib = pkg;
169+
testedExtension = builtins.head extensionPaths;
170+
withPackages = _: pkg;
171+
};
172+
nativeBuildInputs = [ pkgs.makeWrapper ];
173+
pathsToLink = [
174+
"/"
175+
"/bin"
176+
"/lib"
177+
];
178+
postBuild = ''
179+
wrapProgram $out/bin/postgres --set NIX_PGLIBDIR $out/lib
180+
wrapProgram $out/bin/pg_ctl --set NIX_PGLIBDIR $out/lib
181+
wrapProgram $out/bin/pg_upgrade --set NIX_PGLIBDIR $out/lib
182+
'';
183+
};
184+
in
185+
pkg;
186+
psql_15 = mkPostgresqlWithExtensions self.packages.${pkgs.system}.postgresql_15 [
187+
testedExtensionName
188+
];
189+
psql_17 = mkPostgresqlWithExtensions self.packages.${pkgs.system}.postgresql_17 [
190+
testedExtensionName
191+
];
192+
# Get available extension versions for a specific PostgreSQL major version.
193+
versions =
194+
postgresqlMajorVersion: # The PostgreSQL major version (e.g., "15", "17")
195+
(installedExtension postgresqlMajorVersion).versions;
138196
}

nix/ext/tests/pg_repack.nix

Lines changed: 3 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,11 @@
11
{ self, pkgs }:
22
let
33
pname = "pg_repack";
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;
384
testLib = import ./lib.nix {
395
inherit self pkgs;
406
testedExtensionName = pname;
417
};
42-
psql_15 = postgresqlWithExtension self.packages.${pkgs.system}.postgresql_15;
43-
psql_17 = postgresqlWithExtension self.packages.${pkgs.system}.postgresql_17;
8+
inherit (testLib) versions psql_15 psql_17;
449
in
4510
self.inputs.nixpkgs.lib.nixos.runTest {
4611
name = pname;
@@ -54,8 +19,8 @@ self.inputs.nixpkgs.lib.nixos.runTest {
5419
''
5520
from pathlib import Path
5621
versions = {
57-
"15": [${lib.concatStringsSep ", " (map (s: ''"${s}"'') (versions "15"))}],
58-
"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"))}],
5924
}
6025
extension_name = "${pname}"
6126
support_upgrade = False

nix/ext/tests/pgmq.nix

Lines changed: 8 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,16 @@
11
{ self, pkgs }:
22
let
33
pname = "pgmq";
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;
384
testLib = import ./lib.nix {
395
inherit self pkgs;
406
testedExtensionName = pname;
417
};
42-
psql_15 = postgresqlWithExtension self.packages.${pkgs.system}.postgresql_15;
43-
psql_17 = postgresqlWithExtension self.packages.${pkgs.system}.postgresql_17;
8+
inherit (testLib)
9+
versions
10+
installedExtension
11+
psql_15
12+
psql_17
13+
;
4414
in
4515
self.inputs.nixpkgs.lib.nixos.runTest {
4616
name = pname;
@@ -54,8 +24,8 @@ self.inputs.nixpkgs.lib.nixos.runTest {
5424
''
5525
from pathlib import Path
5626
versions = {
57-
"15": [${lib.concatStringsSep ", " (map (s: ''"${s}"'') (versions "15"))}],
58-
"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"))}],
5929
}
6030
extension_name = "${pname}"
6131
support_upgrade = True

nix/ext/tests/pgroonga.nix

Lines changed: 9 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,23 @@
11
{ self, pkgs }:
22
let
33
pname = "pgroonga";
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;
384
testLib = import ./lib.nix {
395
inherit self pkgs;
406
testedExtensionName = pname;
417
};
42-
psql_15 = postgresqlWithExtension self.packages.${pkgs.system}.postgresql_15;
43-
psql_17 = postgresqlWithExtension self.packages.${pkgs.system}.postgresql_17;
8+
inherit (testLib)
9+
versions
10+
installedExtension
11+
psql_15
12+
psql_17
13+
;
4414
in
4515
self.inputs.nixpkgs.lib.nixos.runTest {
4616
name = pname;
4717
hostPkgs = pkgs;
4818
nodes.server =
4919
{ config, ... }:
50-
lib.mkMerge [
20+
pkgs.lib.mkMerge [
5121
(testLib.mkDefaultNixosTestNode { inherit config psql_15 psql_17; })
5222
{
5323
systemd.services.postgresql.environment = {
@@ -65,8 +35,8 @@ self.inputs.nixpkgs.lib.nixos.runTest {
6535
''
6636
from pathlib import Path
6737
versions = {
68-
"15": [${lib.concatStringsSep ", " (map (s: ''"${s}"'') (versions "15"))}],
69-
"17": [${lib.concatStringsSep ", " (map (s: ''"${s}"'') (versions "17"))}],
38+
"15": [${pkgs.lib.concatStringsSep ", " (map (s: ''"${s}"'') (versions "15"))}],
39+
"17": [${pkgs.lib.concatStringsSep ", " (map (s: ''"${s}"'') (versions "17"))}],
7040
}
7141
extension_name = "${pname}"
7242
pg17_configuration = "${pg17-configuration}"

0 commit comments

Comments
 (0)