Skip to content

Commit 9269508

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 76fc95b commit 9269508

File tree

15 files changed

+178
-606
lines changed

15 files changed

+178
-606
lines changed

nix/ext/tests/default.nix

Lines changed: 6 additions & 41 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 = [ (testLib.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 installedExtension;
5318
in
5419
self.inputs.nixpkgs.lib.nixos.runTest {
5520
name = pname;
@@ -70,13 +35,13 @@ let
7035
support_upgrade = True
7136
pg17_configuration = "${pg17-configuration}"
7237
ext_has_background_worker = ${
73-
if (testLib.installedExtension "15") ? hasBackgroundWorker then "True" else "False"
38+
if (installedExtension "15") ? hasBackgroundWorker then "True" else "False"
7439
}
7540
sql_test_directory = Path("${../../tests}")
7641
77-
pg_regress_test_name = "${(testLib.installedExtension "15").pgRegressTestName or pname}"
78-
ext_schema = "${(testLib.installedExtension "15").defaultSchema or "public"}"
79-
lib_name = "${(testLib.installedExtension "15").libName or pname}"
42+
pg_regress_test_name = "${(installedExtension "15").pgRegressTestName or pname}"
43+
ext_schema = "${(installedExtension "15").defaultSchema or "public"}"
44+
lib_name = "${(installedExtension "15").libName or pname}"
8045
print(f"Running tests for extension: {lib_name}")
8146
8247
${builtins.readFile ./lib.py}

nix/ext/tests/http.nix

Lines changed: 4 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,11 @@
11
{ self, pkgs }:
22
let
33
pname = "http";
4-
inherit (pkgs) lib;
5-
installedExtension =
6-
postgresMajorVersion:
7-
self.legacyPackages.${pkgs.stdenv.hostPlatform.system}."psql_${postgresMajorVersion}".exts."${
8-
pname
9-
}";
10-
versions = postgresqlMajorVersion: (installedExtension postgresqlMajorVersion).versions;
11-
postgresqlWithExtension =
12-
postgresql:
13-
let
14-
majorVersion = lib.versions.major postgresql.version;
15-
pkg = pkgs.buildEnv {
16-
name = "postgresql-${majorVersion}-${pname}";
17-
paths = [
18-
postgresql
19-
postgresql.lib
20-
(installedExtension majorVersion)
21-
];
22-
passthru = {
23-
inherit (postgresql) version psqlSchema;
24-
installedExtensions = [ (installedExtension majorVersion) ];
25-
lib = pkg;
26-
withPackages = _: pkg;
27-
withJIT = pkg;
28-
withoutJIT = 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;
444
testLib = import ./lib.nix {
455
inherit self pkgs;
466
testedExtensionName = pname;
477
};
48-
psql_15 = postgresqlWithExtension self.packages.${pkgs.system}.postgresql_15;
49-
psql_17 = postgresqlWithExtension self.packages.${pkgs.system}.postgresql_17;
8+
inherit (testLib) versions psql_15 psql_17;
509
in
5110
self.inputs.nixpkgs.lib.nixos.runTest {
5211
name = pname;
@@ -57,12 +16,12 @@ self.inputs.nixpkgs.lib.nixos.runTest {
5716
let
5817
pg17-configuration = "${nodes.server.system.build.toplevel}/specialisation/postgresql17";
5918
# Convert versions to major.minor format (e.g., "1.5.0" -> "1.5")
60-
toMajorMinor = map (v: lib.versions.majorMinor v);
19+
toMajorMinor = map (v: pkgs.lib.versions.majorMinor v);
6120
in
6221
''
6322
versions = {
64-
"15": [${lib.concatStringsSep ", " (map (s: ''"${s}"'') (toMajorMinor (versions "15")))}],
65-
"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")))}],
6625
}
6726
6827
def run_sql(query):

nix/ext/tests/lib.nix

Lines changed: 63 additions & 13 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
#
@@ -55,19 +59,6 @@ rec {
5559
...
5660
}:
5761
{
58-
virtualisation = {
59-
forwardPorts = [
60-
{
61-
from = "host";
62-
host.port = 13022;
63-
guest.port = 22;
64-
}
65-
];
66-
};
67-
services.openssh = {
68-
enable = true;
69-
};
70-
7162
services.postgresql = {
7263
enable = true;
7364
package = psql_15;
@@ -137,4 +128,63 @@ rec {
137128
};
138129
};
139130
};
131+
132+
# Build a PostgreSQL package that includes a list of extensions.
133+
#
134+
# The included extension can be accessed via the `testedExtension` attribute.
135+
#
136+
mkPostgresqlWithExtensions =
137+
postgresql: # The PostgreSQL package to extend with the extension
138+
extensions: # A list of extension packages to include, the first will be the testedExtension
139+
let
140+
majorVersion = pkgs.lib.versions.major postgresql.version;
141+
# Build paths for all extensions
142+
extensionPaths = map (
143+
ext: self.legacyPackages.${pkgs.system}."psql_${majorVersion}".exts."${ext}"
144+
) extensions;
145+
# Automatically add orioledb if building for OrioleDB
146+
orioledbPaths =
147+
pkgs.lib.optional postgresql.isOrioleDB
148+
self.legacyPackages.${pkgs.system}."psql_orioledb-17".exts.orioledb;
149+
pkg = pkgs.buildEnv {
150+
name = "postgresql-${majorVersion}-${testedExtensionName}";
151+
paths = [
152+
postgresql
153+
postgresql.lib
154+
]
155+
++ extensionPaths
156+
++ orioledbPaths;
157+
passthru = {
158+
inherit (postgresql) version psqlSchema;
159+
lib = pkg;
160+
testedExtension = builtins.head extensionPaths;
161+
withPackages = _: pkg;
162+
withJIT = pkg;
163+
withoutJIT = pkg;
164+
installedExtensions = [ (installedExtension majorVersion) ];
165+
};
166+
nativeBuildInputs = [ pkgs.makeWrapper ];
167+
pathsToLink = [
168+
"/"
169+
"/bin"
170+
"/lib"
171+
];
172+
postBuild = ''
173+
wrapProgram $out/bin/postgres --set NIX_PGLIBDIR $out/lib
174+
wrapProgram $out/bin/pg_ctl --set NIX_PGLIBDIR $out/lib
175+
wrapProgram $out/bin/pg_upgrade --set NIX_PGLIBDIR $out/lib
176+
'';
177+
};
178+
in
179+
pkg;
180+
psql_15 = mkPostgresqlWithExtensions self.packages.${pkgs.system}.postgresql_15 [
181+
testedExtensionName
182+
];
183+
psql_17 = mkPostgresqlWithExtensions self.packages.${pkgs.system}.postgresql_17 [
184+
testedExtensionName
185+
];
186+
# Get available extension versions for a specific PostgreSQL major version.
187+
versions =
188+
postgresqlMajorVersion: # The PostgreSQL major version (e.g., "15", "17")
189+
(installedExtension postgresqlMajorVersion).versions;
140190
}

nix/ext/tests/orioledb.nix

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -47,19 +47,6 @@ self.inputs.nixpkgs.lib.nixos.runTest {
4747
nodes.server =
4848
{ ... }:
4949
{
50-
virtualisation = {
51-
forwardPorts = [
52-
{
53-
from = "host";
54-
host.port = 13022;
55-
guest.port = 22;
56-
}
57-
];
58-
};
59-
services.openssh = {
60-
enable = true;
61-
};
62-
6350
services.postgresql = {
6451
enable = true;
6552
package = psql_orioledb;

nix/ext/tests/pg_repack.nix

Lines changed: 3 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,11 @@
11
{ self, pkgs }:
22
let
33
pname = "pg_repack";
4-
inherit (pkgs) lib;
5-
installedExtension =
6-
postgresMajorVersion:
7-
self.legacyPackages.${pkgs.stdenv.hostPlatform.system}."psql_${postgresMajorVersion}".exts."${
8-
pname
9-
}";
10-
versions = postgresqlMajorVersion: (installedExtension postgresqlMajorVersion).versions;
11-
postgresqlWithExtension =
12-
postgresql:
13-
let
14-
majorVersion = lib.versions.major postgresql.version;
15-
pkg = pkgs.buildEnv {
16-
name = "postgresql-${majorVersion}-${pname}";
17-
paths = [
18-
postgresql
19-
postgresql.lib
20-
(installedExtension majorVersion)
21-
];
22-
passthru = {
23-
inherit (postgresql) version psqlSchema;
24-
installedExtensions = [ (installedExtension majorVersion) ];
25-
lib = pkg;
26-
withPackages = _: pkg;
27-
withJIT = pkg;
28-
withoutJIT = 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;
444
testLib = import ./lib.nix {
455
inherit self pkgs;
466
testedExtensionName = pname;
477
};
48-
psql_15 = postgresqlWithExtension self.packages.${pkgs.system}.postgresql_15;
49-
psql_17 = postgresqlWithExtension self.packages.${pkgs.system}.postgresql_17;
8+
inherit (testLib) versions psql_15 psql_17;
509
in
5110
self.inputs.nixpkgs.lib.nixos.runTest {
5211
name = pname;
@@ -60,8 +19,8 @@ self.inputs.nixpkgs.lib.nixos.runTest {
6019
''
6120
from pathlib import Path
6221
versions = {
63-
"15": [${lib.concatStringsSep ", " (map (s: ''"${s}"'') (versions "15"))}],
64-
"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"))}],
6524
}
6625
extension_name = "${pname}"
6726
support_upgrade = False

nix/ext/tests/pgjwt.nix

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -50,16 +50,6 @@ self.inputs.nixpkgs.lib.nixos.runTest {
5050
nodes.server =
5151
{ config, ... }:
5252
{
53-
virtualisation = {
54-
forwardPorts = [
55-
{
56-
from = "host";
57-
host.port = 13022;
58-
guest.port = 22;
59-
}
60-
];
61-
};
62-
6353
services.postgresql = {
6454
enable = true;
6555
package = psql_15;

0 commit comments

Comments
 (0)