1515 postgresql
1616 postgresql . lib
1717 ( installedExtension majorVersion )
18- self . packages . ${ pkgs . system } . "psql_${ majorVersion } /exts/hypopg" # dependency
1918 ] ;
2019 passthru = {
2120 inherit ( postgresql ) version psqlSchema ;
3635 } ;
3736 in
3837 pkg ;
38+ psql_15 = postgresqlWithExtension self . packages . ${ pkgs . system } . postgresql_15 ;
39+ psql_17 = postgresqlWithExtension self . packages . ${ pkgs . system } . postgresql_17 ;
3940in
4041self . inputs . nixpkgs . lib . nixos . runTest {
4142 name = pname ;
@@ -55,12 +56,17 @@ self.inputs.nixpkgs.lib.nixos.runTest {
5556
5657 services . postgresql = {
5758 enable = true ;
58- package = postgresqlWithExtension self . packages . ${ pkgs . system } . postgresql_15 ;
59+ package = psql_15 ;
60+ # pg_regress test for pgjwt rely on the "extensions" schema to be present
61+ initialScript = pkgs . writeText "init-postgres-with-schema" ''
62+ CREATE SCHEMA IF NOT EXISTS extensions;
63+ CREATE EXTENSION IF NOT EXISTS pgcrypto WITH SCHEMA extensions;
64+ '' ;
5965 } ;
6066
6167 specialisation . postgresql17 . configuration = {
6268 services . postgresql = {
63- package = lib . mkForce ( postgresqlWithExtension self . packages . ${ pkgs . system } . postgresql_17 ) ;
69+ package = lib . mkForce psql_17 ;
6470 } ;
6571
6672 systemd . services . postgresql-migrate = {
@@ -74,8 +80,8 @@ self.inputs.nixpkgs.lib.nixos.runTest {
7480 } ;
7581 script =
7682 let
77- oldPostgresql = postgresqlWithExtension self . packages . ${ pkgs . system } . postgresql_15 ;
78- newPostgresql = postgresqlWithExtension self . packages . ${ pkgs . system } . postgresql_17 ;
83+ oldPostgresql = psql_15 ;
84+ newPostgresql = psql_17 ;
7985 oldDataDir = "${ builtins . dirOf config . services . postgresql . dataDir } /${ oldPostgresql . psqlSchema } " ;
8086 newDataDir = "${ builtins . dirOf config . services . postgresql . dataDir } /${ newPostgresql . psqlSchema } " ;
8187 in
@@ -103,45 +109,72 @@ self.inputs.nixpkgs.lib.nixos.runTest {
103109 pg17-configuration = "${ nodes . server . system . build . toplevel } /specialisation/postgresql17" ;
104110 in
105111 ''
112+ from pathlib import Path
106113 versions = {
107114 "15": [${ lib . concatStringsSep ", " ( map ( s : ''"${ s } "'' ) ( versions "15" ) ) } ],
108115 "17": [${ lib . concatStringsSep ", " ( map ( s : ''"${ s } "'' ) ( versions "17" ) ) } ],
109116 }
117+ extension_name = "${ pname } "
118+ support_upgrade = False
119+ pg17_configuration = "${ pg17-configuration } "
120+ ext_has_background_worker = ${
121+ if ( installedExtension "15" ) ? hasBackgroundWorker then "True" else "False"
122+ }
123+ sql_test_directory = Path("${ ../../tests } ")
124+ pg_regress_test_name = "${ ( installedExtension "15" ) . pgRegressTestName or pname } "
110125
111- def run_sql(query):
112- return server.succeed(f"""sudo -u postgres psql -t -A -F\",\" -c \"{query}\" """).strip()
113-
114- def check_upgrade_path(pg_version):
115- with subtest("Check ${ pname } upgrade path"):
116- firstVersion = versions[pg_version][0]
117- server.succeed("sudo -u postgres psql -c 'DROP EXTENSION IF EXISTS ${ pname } ;'")
118- run_sql(f"""CREATE EXTENSION ${ pname } WITH VERSION '{firstVersion}' CASCADE;""")
119- installed_version = run_sql(r"""SELECT extversion FROM pg_extension WHERE extname = '${ pname } ';""")
120- assert installed_version == firstVersion, f"Expected ${ pname } version {firstVersion}, but found {installed_version}"
121- for version in versions[pg_version][1:]:
122- run_sql(f"""ALTER EXTENSION ${ pname } UPDATE TO '{version}';""")
123- installed_version = run_sql(r"""SELECT extversion FROM pg_extension WHERE extname = '${ pname } ';""")
124- assert installed_version == version, f"Expected ${ pname } version {version}, but found {installed_version}"
126+ ${ builtins . readFile ./lib.py }
125127
126128 start_all()
127129
128130 server.wait_for_unit("multi-user.target")
129131 server.wait_for_unit("postgresql.service")
130132
131- check_upgrade_path("15")
133+ test = PostgresExtensionTest(server, extension_name, versions, sql_test_directory, support_upgrade)
134+
135+ with subtest("Check upgrade path with postgresql 15"):
136+ test.check_upgrade_path("15")
137+
138+ with subtest("Check pg_regress with postgresql 15 after extension upgrade"):
139+ # We need to uninstall the extension before running pg_regress
140+ test.drop_extension()
141+ test.check_pg_regress(Path("${ psql_15 } /lib/pgxs/src/test/regress/pg_regress"), "15", pg_regress_test_name)
142+
143+ last_version = None
144+ with subtest("Check the install of the last version of the extension"):
145+ last_version = test.check_install_last_version("15")
132146
133- with subtest("Check ${ pname } latest extension version"):
134- server.succeed("sudo -u postgres psql -c 'DROP EXTENSION ${ pname } ;'")
135- server.succeed("sudo -u postgres psql -c 'CREATE EXTENSION ${ pname } CASCADE;'")
136- installed_extensions=run_sql(r"""SELECT extname, extversion FROM pg_extension;""")
137- latestVersion = versions["15"][-1]
138- assert f"${ pname } ,{latestVersion}" in installed_extensions
147+ if ext_has_background_worker:
148+ with subtest("Test switch_${ pname } _version"):
149+ test.check_switch_extension_with_background_worker(Path("${ psql_15 } /lib/${ pname } .so"), "15")
150+
151+ with subtest("Check pg_regress with postgresql 15 after installing the last version"):
152+ # We need to uninstall the extension before running pg_regress
153+ test.drop_extension()
154+ test.check_pg_regress(Path("${ psql_15 } /lib/pgxs/src/test/regress/pg_regress"), "15", pg_regress_test_name)
139155
140156 with subtest("switch to postgresql 17"):
141157 server.succeed(
142- " ${ pg17-configuration } /bin/switch-to-configuration test >&2"
158+ f"{pg17_configuration }/bin/switch-to-configuration test >&2"
143159 )
144160
145- check_upgrade_path("17")
161+ with subtest("Check last version of the extension after postgresql upgrade"):
162+ test.assert_version_matches(last_version)
163+
164+ with subtest("Check upgrade path with postgresql 17"):
165+ test.check_upgrade_path("17")
166+
167+ with subtest("Check pg_regress with postgresql 17 after extension upgrade"):
168+ # We need to uninstall the extension before running pg_regress
169+ test.drop_extension()
170+ test.check_pg_regress(Path("${ psql_17 } /lib/pgxs/src/test/regress/pg_regress"), "17", pg_regress_test_name)
171+
172+ with subtest("Check the install of the last version of the extension"):
173+ test.check_install_last_version("17")
174+
175+ with subtest("Check pg_regress with postgresql 17 after installing the last version"):
176+ # We need to uninstall the extension before running pg_regress
177+ test.drop_extension()
178+ test.check_pg_regress(Path("${ psql_17 } /lib/pgxs/src/test/regress/pg_regress"), "17", pg_regress_test_name)
146179 '' ;
147180}
0 commit comments