Skip to content

Commit fb2478f

Browse files
committed
feat: updating tests to use lib.nix supabase settings
1 parent a33447e commit fb2478f

16 files changed

Lines changed: 1414 additions & 2108 deletions

nix/ext/tests/default.nix

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -363,7 +363,6 @@ builtins.listToAttrs (
363363
"pg_tle"
364364
"pgaudit"
365365
"pgtap"
366-
"postgis"
367366
"vector"
368367
"wal2json"
369368
"wrappers"

nix/ext/tests/http.nix

Lines changed: 113 additions & 275 deletions
Large diffs are not rendered by default.

nix/ext/tests/index_advisor.nix

Lines changed: 107 additions & 215 deletions
Large diffs are not rendered by default.

nix/ext/tests/orioledb.nix

Lines changed: 43 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -1,79 +1,60 @@
11
{ self, pkgs }:
22
let
33
pname = "orioledb";
4-
inherit (pkgs) lib;
5-
postgresqlWithExtension =
6-
postgresql:
7-
let
8-
majorVersion = lib.versions.major postgresql.version;
9-
pkg = pkgs.pkgsLinux.buildEnv {
10-
name = "postgresql-${majorVersion}-${pname}";
11-
paths = [
12-
postgresql
13-
postgresql.lib
14-
(self.legacyPackages.${pkgs.pkgsLinux.stdenv.hostPlatform.system}."psql_orioledb-17".exts.orioledb)
15-
];
16-
passthru = {
17-
inherit (postgresql) version psqlSchema;
18-
installedExtensions = [
19-
(self.legacyPackages.${pkgs.pkgsLinux.stdenv.hostPlatform.system}."psql_orioledb-17".exts.orioledb)
20-
];
21-
lib = pkg;
22-
withPackages = _: pkg;
23-
withJIT = pkg;
24-
withoutJIT = pkg;
25-
};
26-
nativeBuildInputs = [ pkgs.pkgsLinux.makeWrapper ];
27-
pathsToLink = [
28-
"/"
29-
"/bin"
30-
"/lib"
31-
];
32-
postBuild = ''
33-
wrapProgram $out/bin/postgres --set NIX_PGLIBDIR $out/lib
34-
wrapProgram $out/bin/pg_ctl --set NIX_PGLIBDIR $out/lib
35-
wrapProgram $out/bin/pg_upgrade --set NIX_PGLIBDIR $out/lib
36-
'';
37-
};
38-
in
39-
pkg;
40-
psql_orioledb =
41-
postgresqlWithExtension
42-
self.packages.${pkgs.pkgsLinux.stdenv.hostPlatform.system}.postgresql_orioledb-17;
4+
testLib = import ./lib.nix { inherit self pkgs; };
435
in
446
pkgs.testers.runNixOSTest {
457
name = pname;
468
nodes.server =
479
{ ... }:
4810
{
49-
services.openssh = {
50-
enable = true;
51-
};
11+
imports = [
12+
(testLib.makeSupabaseTestConfig {
13+
majorVersion = "15";
14+
})
15+
];
5216

53-
services.postgresql = {
54-
enable = true;
55-
package = psql_orioledb;
56-
settings = {
57-
shared_preload_libraries = "orioledb";
58-
default_table_access_method = "orioledb";
59-
};
60-
initdbArgs = [
61-
"--allow-group-access"
62-
"--locale-provider=icu"
63-
"--encoding=UTF-8"
64-
"--icu-locale=en_US.UTF-8"
65-
];
66-
initialScript = pkgs.writeText "init-postgres-with-orioledb" ''
67-
CREATE EXTENSION orioledb CASCADE;
68-
'';
69-
};
17+
specialisation.orioledb17.configuration = testLib.makeOrioledbSpecialisation { };
7018
};
7119
testScript =
72-
{ ... }:
20+
{ nodes, ... }:
21+
let
22+
orioledb17-configuration = "${nodes.server.system.build.toplevel}/specialisation/orioledb17";
23+
in
7324
''
25+
orioledb17_configuration = "${orioledb17-configuration}"
26+
7427
start_all()
7528
76-
server.wait_for_unit("multi-user.target")
77-
server.wait_for_unit("postgresql.service")
29+
# Wait for full Supabase initialization on PG 15
30+
server.wait_for_unit("supabase-db-init.service")
31+
32+
with subtest("switch to orioledb 17"):
33+
server.succeed(
34+
f"{orioledb17_configuration}/bin/switch-to-configuration test >&2"
35+
)
36+
server.wait_for_unit("supabase-db-init.service")
37+
38+
with subtest("Verify OrioleDB is running"):
39+
installed_extensions = server.succeed(
40+
"psql -U supabase_admin -d postgres -t -A -c \"SELECT extname FROM pg_extension WHERE extname = 'orioledb';\""
41+
).strip()
42+
assert "orioledb" in installed_extensions, (
43+
f"Expected orioledb extension to be installed, got: {installed_extensions}"
44+
)
45+
46+
dam = server.succeed(
47+
"psql -U supabase_admin -d postgres -t -A -c \"SHOW default_table_access_method;\""
48+
).strip()
49+
assert dam == "orioledb", (
50+
f"Expected default_table_access_method = orioledb, got: {dam}"
51+
)
52+
53+
with subtest("Verify OrioleDB init scripts and migrations ran"):
54+
roles = server.succeed(
55+
"psql -U supabase_admin -d postgres -t -A -c \"SELECT rolname FROM pg_roles ORDER BY rolname;\""
56+
).strip()
57+
for role in ["anon", "authenticated", "authenticator", "supabase_admin"]:
58+
assert role in roles, f"Expected role {role} to exist, got: {roles}"
7859
'';
7960
}

nix/ext/tests/pg_plan_filter.nix

Lines changed: 77 additions & 112 deletions
Original file line numberDiff line numberDiff line change
@@ -1,142 +1,107 @@
1+
# plan_filter is a shared-library-only module, not a CREATE EXTENSION type
2+
# extension. It's loaded via shared_preload_libraries and configured via GUC
3+
# parameters (plan_filter.statement_cost_limit, plan_filter.limit_select_only).
4+
# See: https://github.com/pgexperts/pg_plan_filter
15
{ self, pkgs }:
26
let
3-
pname = "plan_filter";
4-
inherit (pkgs) lib;
5-
installedExtension =
6-
postgresMajorVersion:
7-
self.legacyPackages.${pkgs.pkgsLinux.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.pkgsLinux.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.pkgsLinux.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;
44-
psql_15 =
45-
postgresqlWithExtension
46-
self.packages.${pkgs.pkgsLinux.stdenv.hostPlatform.system}.postgresql_15;
47-
psql_17 =
48-
postgresqlWithExtension
49-
self.packages.${pkgs.pkgsLinux.stdenv.hostPlatform.system}.postgresql_17;
7+
testLib = import ./lib.nix { inherit self pkgs; };
508
in
519
pkgs.testers.runNixOSTest {
52-
name = pname;
10+
name = "plan_filter";
5311
nodes.server =
54-
{ config, ... }:
12+
{ ... }:
5513
{
56-
services.postgresql = {
57-
enable = true;
58-
package = psql_15;
59-
settings = (installedExtension "15").defaultSettings or { };
60-
};
61-
62-
specialisation.postgresql17.configuration = {
63-
services.postgresql = {
64-
package = lib.mkForce psql_17;
65-
settings = (installedExtension "15").defaultSettings or { };
66-
};
67-
68-
systemd.services.postgresql-migrate = {
69-
serviceConfig = {
70-
Type = "oneshot";
71-
RemainAfterExit = true;
72-
User = "postgres";
73-
Group = "postgres";
74-
StateDirectory = "postgresql";
75-
WorkingDirectory = "${builtins.dirOf config.services.postgresql.dataDir}";
76-
};
77-
script =
78-
let
79-
oldPostgresql = psql_15;
80-
newPostgresql = psql_17;
81-
oldDataDir = "${builtins.dirOf config.services.postgresql.dataDir}/${oldPostgresql.psqlSchema}";
82-
newDataDir = "${builtins.dirOf config.services.postgresql.dataDir}/${newPostgresql.psqlSchema}";
83-
in
84-
''
85-
if [[ ! -d ${newDataDir} ]]; then
86-
install -d -m 0700 -o postgres -g postgres "${newDataDir}"
87-
${newPostgresql}/bin/initdb -D "${newDataDir}"
88-
${newPostgresql}/bin/pg_upgrade --old-datadir "${oldDataDir}" --new-datadir "${newDataDir}" \
89-
--old-bindir "${oldPostgresql}/bin" --new-bindir "${newPostgresql}/bin"
90-
else
91-
echo "${newDataDir} already exists"
92-
fi
93-
'';
94-
};
14+
imports = [
15+
(testLib.makeSupabaseTestConfig {
16+
majorVersion = "15";
17+
})
18+
];
9519

96-
systemd.services.postgresql = {
97-
after = [ "postgresql-migrate.service" ];
98-
requires = [ "postgresql-migrate.service" ];
99-
};
20+
specialisation.postgresql17.configuration = testLib.makeUpgradeSpecialisation {
21+
fromMajorVersion = "15";
22+
toMajorVersion = "17";
10023
};
24+
25+
specialisation.orioledb17.configuration = testLib.makeOrioledbSpecialisation { };
10126
};
10227
testScript =
10328
{ nodes, ... }:
10429
let
10530
pg17-configuration = "${nodes.server.system.build.toplevel}/specialisation/postgresql17";
31+
orioledb17-configuration = "${nodes.server.system.build.toplevel}/specialisation/orioledb17";
10632
in
10733
''
108-
from pathlib import Path
109-
versions = {
110-
"15": [${lib.concatStringsSep ", " (map (s: ''"${s}"'') (versions "15"))}],
111-
"17": [${lib.concatStringsSep ", " (map (s: ''"${s}"'') (versions "17"))}],
112-
}
113-
extension_name = "${pname}"
114-
support_upgrade = False
11534
pg17_configuration = "${pg17-configuration}"
116-
ext_has_background_worker = ${
117-
if (installedExtension "15") ? hasBackgroundWorker then "True" else "False"
118-
}
119-
sql_test_directory = Path("${../../tests}")
120-
pg_regress_test_name = "${(installedExtension "15").pgRegressTestName or pname}"
35+
orioledb17_configuration = "${orioledb17-configuration}"
36+
37+
def check_plan_filter(server):
38+
"""Verify plan_filter is loaded and its GUC parameters are functional."""
39+
spl = server.succeed(
40+
"psql -U supabase_admin -d postgres -t -A -c \"SHOW shared_preload_libraries;\""
41+
).strip()
42+
assert "plan_filter" in spl, (
43+
f"Expected plan_filter in shared_preload_libraries, got: {spl}"
44+
)
12145
122-
${builtins.readFile ./lib.py}
46+
# Verify GUC parameter is registered (default: 0 = no filter)
47+
cost_limit = server.succeed(
48+
"psql -U supabase_admin -d postgres -t -A -c \"SHOW plan_filter.statement_cost_limit;\""
49+
).strip()
50+
assert cost_limit is not None, "plan_filter.statement_cost_limit GUC not available"
51+
52+
# Verify the parameter can be set
53+
server.succeed(
54+
"psql -U supabase_admin -d postgres -c \"SET plan_filter.statement_cost_limit = 100000.0;\""
55+
)
12356
12457
start_all()
12558
126-
server.wait_for_unit("multi-user.target")
127-
server.wait_for_unit("postgresql.service")
59+
# Wait for full Supabase initialization (postgres + init-scripts + migrations)
60+
server.wait_for_unit("supabase-db-init.service")
12861
129-
test = PostgresExtensionTest(server, extension_name, versions, sql_test_directory, support_upgrade)
62+
with subtest("Verify PostgreSQL 15 is our custom build"):
63+
pg_version = server.succeed(
64+
"psql -U supabase_admin -d postgres -t -A -c \"SELECT version();\""
65+
).strip()
66+
assert "${testLib.expectedVersions."15"}" in pg_version, (
67+
f"Expected version ${testLib.expectedVersions."15"}, got: {pg_version}"
68+
)
13069
131-
with subtest("Check pg_regress with postgresql 15 after extension upgrade"):
132-
test.check_pg_regress(Path("${psql_15}/lib/pgxs/src/test/regress/pg_regress"), "15", pg_regress_test_name)
70+
with subtest("Verify plan_filter is loaded on PostgreSQL 15"):
71+
check_plan_filter(server)
13372
13473
with subtest("switch to postgresql 17"):
13574
server.succeed(
13675
f"{pg17_configuration}/bin/switch-to-configuration test >&2"
13776
)
77+
server.wait_for_unit("postgresql.service")
78+
79+
with subtest("Verify PostgreSQL 17 is our custom build"):
80+
pg_version = server.succeed(
81+
"psql -U supabase_admin -d postgres -t -A -c \"SELECT version();\""
82+
).strip()
83+
assert "${testLib.expectedVersions."17"}" in pg_version, (
84+
f"Expected version ${testLib.expectedVersions."17"}, got: {pg_version}"
85+
)
86+
87+
with subtest("Verify plan_filter is loaded on PostgreSQL 17"):
88+
check_plan_filter(server)
89+
90+
with subtest("switch to orioledb 17"):
91+
server.succeed(
92+
f"{orioledb17_configuration}/bin/switch-to-configuration test >&2"
93+
)
94+
server.wait_for_unit("supabase-db-init.service")
95+
96+
with subtest("Verify OrioleDB is running"):
97+
installed_extensions = server.succeed(
98+
"psql -U supabase_admin -d postgres -t -A -c \"SELECT extname FROM pg_extension WHERE extname = 'orioledb';\""
99+
).strip()
100+
assert "orioledb" in installed_extensions, (
101+
f"Expected orioledb extension to be installed, got: {installed_extensions}"
102+
)
138103
139-
with subtest("Check pg_regress with postgresql 17 after extension upgrade"):
140-
test.check_pg_regress(Path("${psql_17}/lib/pgxs/src/test/regress/pg_regress"), "17", pg_regress_test_name)
104+
with subtest("Verify plan_filter is loaded on OrioleDB"):
105+
check_plan_filter(server)
141106
'';
142107
}

0 commit comments

Comments
 (0)