11{ self , pkgs } :
22let
3+ pname = "pg_net" ;
34 inherit ( pkgs ) lib ;
45 installedExtension =
5- postgresMajorVersion : self . packages . ${ pkgs . system } . "psql_${ postgresMajorVersion } /exts/pg_net-all" ;
6- versions = ( installedExtension "17" ) . versions ;
7- firstVersion = lib . head versions ;
8- latestVersion = lib . last versions ;
6+ postgresMajorVersion : self . packages . ${ pkgs . system } . "psql_${ postgresMajorVersion } /exts/${ pname } -all" ;
7+ versions = postgresqlMajorVersion : ( installedExtension postgresqlMajorVersion ) . versions ;
98 postgresqlWithExtension =
109 postgresql :
1110 let
1211 majorVersion = lib . versions . major postgresql . version ;
1312 pkg = pkgs . buildEnv {
14- name = "postgresql-${ majorVersion } -pg_net " ;
13+ name = "postgresql-${ majorVersion } -${ pname } " ;
1514 paths = [
1615 postgresql
1716 postgresql . lib
4039 psql_17 = postgresqlWithExtension self . packages . ${ pkgs . system } . postgresql_17 ;
4140in
4241self . inputs . nixpkgs . lib . nixos . runTest {
43- name = "pg_net " ;
42+ name = "${ pname } " ;
4443 hostPkgs = pkgs ;
4544 nodes . server =
4645 { config , ... } :
@@ -65,7 +64,7 @@ self.inputs.nixpkgs.lib.nixos.runTest {
6564 enable = true ;
6665 package = psql_15 ;
6766 settings = {
68- shared_preload_libraries = "pg_net" ;
67+ shared_preload_libraries = pname ;
6968 } ;
7069 } ;
7170
@@ -116,60 +115,68 @@ self.inputs.nixpkgs.lib.nixos.runTest {
116115 pg17-configuration = "${ nodes . server . system . build . toplevel } /specialisation/postgresql17" ;
117116 in
118117 ''
118+ versions = {
119+ "15": [${ lib . concatStringsSep ", " ( map ( s : ''"${ s } "'' ) ( versions "15" ) ) } ],
120+ "17": [${ lib . concatStringsSep ", " ( map ( s : ''"${ s } "'' ) ( versions "17" ) ) } ],
121+ }
122+
119123 def run_sql(query):
120124 return server.succeed(f"""sudo -u postgres psql -t -A -F\",\" -c \"{query}\" """).strip()
121125
122- def check_upgrade_path():
123- with subtest("Check pg_net upgrade path"):
124- server.succeed("sudo -u postgres psql -c 'DROP EXTENSION IF EXISTS pg_net;'")
125- run_sql(r"""CREATE EXTENSION pg_net WITH VERSION \"${ firstVersion } \";""")
126- installed_version = run_sql(r"""SELECT extversion FROM pg_extension WHERE extname = 'pg_net';""")
127- assert installed_version == "${ firstVersion } ", f"Expected pg_net version ${ firstVersion } , but found {installed_version}"
128- for version in [${ lib . concatStringsSep ", " ( map ( s : ''"${ s } "'' ) versions ) } ][1:]:
129- run_sql(f"""ALTER EXTENSION pg_net UPDATE TO '{version}';""")
130- installed_version = run_sql(r"""SELECT extversion FROM pg_extension WHERE extname = 'pg_net';""")
131- assert installed_version == version, f"Expected pg_net version {version}, but found {installed_version}"
126+ def check_upgrade_path(pg_version):
127+ with subtest("Check ${ pname } upgrade path"):
128+ firstVersion = versions[pg_version][0]
129+ server.succeed("sudo -u postgres psql -c 'DROP EXTENSION IF EXISTS ${ pname } ;'")
130+ run_sql(f"""CREATE EXTENSION ${ pname } WITH VERSION '{firstVersion}' CASCADE;""")
131+ installed_version = run_sql(r"""SELECT extversion FROM pg_extension WHERE extname = '${ pname } ';""")
132+ assert installed_version == firstVersion, f"Expected ${ pname } version {firstVersion}, but found {installed_version}"
133+ for version in versions[pg_version][1:]:
134+ run_sql(f"""ALTER EXTENSION ${ pname } UPDATE TO '{version}';""")
135+ installed_version = run_sql(r"""SELECT extversion FROM pg_extension WHERE extname = '${ pname } ';""")
136+ assert installed_version == version, f"Expected ${ pname } version {version}, but found {installed_version}"
132137
133138 start_all()
134139
135140 server.wait_for_unit("multi-user.target")
136141 server.wait_for_unit("postgresql.service")
137142
138- check_upgrade_path()
143+ check_upgrade_path("15" )
139144
140- with subtest("Test switch_pg_net_version "):
145+ with subtest("Test switch_ ${ pname } _version "):
141146 # Check that we are using the last version first
142- pg_net_version = server.succeed("readlink -f ${ psql_15 } /lib/pg_net.so").strip()
143- print(f"Current pg_net version: {pg_net_version}")
144- assert pg_net_version.endswith("pg_net-${ latestVersion } .so"), f"Expected pg_net version ${ latestVersion } , but found {pg_net_version}"
147+ ext_version = server.succeed("readlink -f ${ psql_15 } /lib/${ pname } .so").strip()
148+ firstVersion = versions["15"][0]
149+ latestVersion = versions["15"][-1]
150+ assert ext_version.endswith(f"${ pname } -{latestVersion}.so"), f"Expected ${ pname } version {latestVersion}, but found {ext_version}"
145151
146152 server.succeed(
147- "switch_pg_net_version $ {firstVersion } "
153+ f"switch_ ${ pname } _version {firstVersion}"
148154 )
149155
150- pg_net_version = server.succeed("readlink -f ${ psql_15 } /lib/pg_net .so").strip()
151- assert pg_net_version .endswith("pg_net- ${ firstVersion } .so"), f"Expected pg_net version $ {firstVersion } , but found {pg_net_version }"
156+ ext_version = server.succeed("readlink -f ${ psql_15 } /lib/${ pname } .so").strip()
157+ assert ext_version .endswith(f" ${ pname } -{ firstVersion}.so"), f"Expected ${ pname } version {firstVersion}, but found {ext_version }"
152158
153159 server.succeed(
154- "switch_pg_net_version $ {latestVersion } "
160+ f"switch_ ${ pname } _version {latestVersion}"
155161 )
156162
157- with subtest("Check pg_net latest extension version"):
158- server.succeed("sudo -u postgres psql -c 'DROP EXTENSION pg_net ;'")
159- server.succeed("sudo -u postgres psql -c 'CREATE EXTENSION pg_net ;'")
163+ with subtest("Check ${ pname } latest extension version"):
164+ server.succeed("sudo -u postgres psql -c 'DROP EXTENSION ${ pname } ;'")
165+ server.succeed("sudo -u postgres psql -c 'CREATE EXTENSION ${ pname } ;'")
160166 installed_extensions=run_sql(r"""SELECT extname, extversion FROM pg_extension;""")
161- assert "pg_net,${ latestVersion } " in installed_extensions
167+ latestVersion = versions["15"][-1]
168+ assert f"${ pname } ,{latestVersion}" in installed_extensions
162169
163170 with subtest("switch to multiple node configuration"):
164171 server.succeed(
165172 "${ pg17-configuration } /bin/switch-to-configuration test >&2"
166173 )
167174
168- with subtest("Check pg_net latest extension version"):
175+ with subtest("Check ${ pname } latest extension version"):
169176 installed_extensions=run_sql(r"""SELECT extname, extversion FROM pg_extension;""")
170- assert "pg_net,${ latestVersion } " in installed_extensions
171-
172- check_upgrade_path()
177+ latestVersion = versions["15"][-1]
178+ assert f"${ pname } ,{latestVersion}" in installed_extensions
173179
180+ check_upgrade_path("17")
174181 '' ;
175182}
0 commit comments