Skip to content

Commit f7d9879

Browse files
committed
feat: bump ver and add tests
1 parent 772c1ce commit f7d9879

File tree

2 files changed

+156
-3
lines changed

2 files changed

+156
-3
lines changed

ansible/vars.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@ postgres_major:
99

1010
# Full version strings for each major version
1111
postgres_release:
12-
postgresorioledb-17: "17.5.1.015-orioledb"
13-
postgres17: "17.4.1.072"
14-
postgres15: "15.8.1.129"
12+
postgresorioledb-17: "17.5.1.015-orioledb-pg-net-1"
13+
postgres17: "17.4.1.072-pg-net-1"
14+
postgres15: "15.8.1.129-pg-net-1"
1515

1616
# Non Postgres Extensions
1717
pgbouncer_release: "1.19.0"

nix/ext/tests/pg_net.nix

Lines changed: 153 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,153 @@
1+
{ self, pkgs }:
2+
let
3+
inherit (pkgs) lib;
4+
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;
9+
postgresqlWithExtension =
10+
postgresql:
11+
let
12+
majorVersion = lib.versions.major postgresql.version;
13+
pkg = pkgs.buildEnv {
14+
name = "postgresql-${majorVersion}-pg_net";
15+
paths = [
16+
postgresql
17+
postgresql.lib
18+
(installedExtension majorVersion)
19+
];
20+
passthru = {
21+
inherit (postgresql) version psqlSchema;
22+
lib = pkg;
23+
withPackages = _: pkg;
24+
};
25+
nativeBuildInputs = [ pkgs.makeWrapper ];
26+
pathsToLink = [
27+
"/"
28+
"/bin"
29+
"/lib"
30+
];
31+
postBuild = ''
32+
wrapProgram $out/bin/postgres --set NIX_PGLIBDIR $out/lib
33+
wrapProgram $out/bin/pg_ctl --set NIX_PGLIBDIR $out/lib
34+
wrapProgram $out/bin/pg_upgrade --set NIX_PGLIBDIR $out/lib
35+
'';
36+
};
37+
in
38+
pkg;
39+
in
40+
self.inputs.nixpkgs.lib.nixos.runTest {
41+
name = "pg_net";
42+
hostPkgs = pkgs;
43+
nodes.server =
44+
{ config, ... }:
45+
{
46+
virtualisation = {
47+
forwardPorts = [
48+
{
49+
from = "host";
50+
host.port = 13022;
51+
guest.port = 22;
52+
}
53+
];
54+
};
55+
services.openssh = {
56+
enable = true;
57+
};
58+
users.users.root.openssh.authorizedKeys.keys = [
59+
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIo+ulCUfJjnCVgfM4946Ih5Nm8DeZZiayYeABHGPEl7 jfroche"
60+
];
61+
62+
services.postgresql = {
63+
enable = true;
64+
package = postgresqlWithExtension self.packages.${pkgs.system}.postgresql_15;
65+
settings = {
66+
shared_preload_libraries = "pg_net";
67+
};
68+
};
69+
70+
specialisation.postgresql17.configuration = {
71+
services.postgresql = {
72+
package = lib.mkForce (postgresqlWithExtension self.packages.${pkgs.system}.postgresql_17);
73+
};
74+
75+
systemd.services.postgresql-migrate = {
76+
serviceConfig = {
77+
Type = "oneshot";
78+
RemainAfterExit = true;
79+
User = "postgres";
80+
Group = "postgres";
81+
StateDirectory = "postgresql";
82+
WorkingDirectory = "${builtins.dirOf config.services.postgresql.dataDir}";
83+
};
84+
script =
85+
let
86+
oldPostgresql = postgresqlWithExtension self.packages.${pkgs.system}.postgresql_15;
87+
newPostgresql = postgresqlWithExtension self.packages.${pkgs.system}.postgresql_17;
88+
oldDataDir = "${builtins.dirOf config.services.postgresql.dataDir}/${oldPostgresql.psqlSchema}";
89+
newDataDir = "${builtins.dirOf config.services.postgresql.dataDir}/${newPostgresql.psqlSchema}";
90+
in
91+
''
92+
if [[ ! -d ${newDataDir} ]]; then
93+
install -d -m 0700 -o postgres -g postgres "${newDataDir}"
94+
${newPostgresql}/bin/initdb -D "${newDataDir}"
95+
${newPostgresql}/bin/pg_upgrade --old-datadir "${oldDataDir}" --new-datadir "${newDataDir}" \
96+
--old-bindir "${oldPostgresql}/bin" --new-bindir "${newPostgresql}/bin"
97+
else
98+
echo "${newDataDir} already exists"
99+
fi
100+
'';
101+
};
102+
103+
systemd.services.postgresql = {
104+
after = [ "postgresql-migrate.service" ];
105+
requires = [ "postgresql-migrate.service" ];
106+
};
107+
};
108+
};
109+
testScript =
110+
{ nodes, ... }:
111+
let
112+
pg17-configuration = "${nodes.server.system.build.toplevel}/specialisation/postgresql17";
113+
in
114+
''
115+
def run_sql(query):
116+
return server.succeed(f"""sudo -u postgres psql -t -A -F\",\" -c \"{query}\" """).strip()
117+
118+
def check_upgrade_path():
119+
with subtest("Check pg_net upgrade path"):
120+
server.succeed("sudo -u postgres psql -c 'DROP EXTENSION IF EXISTS pg_net;'")
121+
run_sql(r"""CREATE EXTENSION pg_net WITH VERSION \"${firstVersion}\";""")
122+
installed_version = run_sql(r"""SELECT extversion FROM pg_extension WHERE extname = 'pg_net';""")
123+
assert installed_version == "${firstVersion}", f"Expected pg_net version ${firstVersion}, but found {installed_version}"
124+
for version in [${lib.concatStringsSep ", " (map (s: ''"${s}"'') versions)}][1:]:
125+
run_sql(f"""ALTER EXTENSION pg_net UPDATE TO '{version}';""")
126+
installed_version = run_sql(r"""SELECT extversion FROM pg_extension WHERE extname = 'pg_net';""")
127+
assert installed_version == version, f"Expected pg_net version {version}, but found {installed_version}"
128+
129+
start_all()
130+
131+
server.wait_for_unit("multi-user.target")
132+
server.wait_for_unit("postgresql.service")
133+
134+
check_upgrade_path()
135+
136+
with subtest("Check pg_net latest extension version"):
137+
server.succeed("sudo -u postgres psql -c 'DROP EXTENSION pg_net;'")
138+
server.succeed("sudo -u postgres psql -c 'CREATE EXTENSION pg_net;'")
139+
installed_extensions=run_sql(r"""SELECT extname, extversion FROM pg_extension;""")
140+
assert "pg_net,${latestVersion}" in installed_extensions
141+
142+
with subtest("switch to multiple node configuration"):
143+
server.succeed(
144+
"${pg17-configuration}/bin/switch-to-configuration test >&2"
145+
)
146+
147+
with subtest("Check pg_net latest extension version"):
148+
installed_extensions=run_sql(r"""SELECT extname, extversion FROM pg_extension;""")
149+
assert "pg_net,${latestVersion}" in installed_extensions
150+
151+
check_upgrade_path()
152+
'';
153+
}

0 commit comments

Comments
 (0)