Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion nix/cargo-pgrx/mkPgrxExtension.nix
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ let
import (builtins.fetchTarball {
url = "https://channels.nixos.org/nixos-22.11/nixexprs.tar.xz";
sha256 = "1j7h75a9hwkkm97jicky5rhvzkdwxsv5v46473rl6agvq2sj97y1";
}) { system = stdenv.hostPlatform.system; }
}) { inherit (stdenv.hostPlatform) system; }
);
in
rustPlatform.bindgenHook.overrideAttrs {
Expand Down
30 changes: 14 additions & 16 deletions nix/checks.nix
Original file line number Diff line number Diff line change
Expand Up @@ -439,21 +439,19 @@
;
devShell = self'.devShells.default;
}
// pkgs.lib.optionalAttrs (pkgs.stdenv.isLinux) (
{
inherit (self'.packages)
postgresql_15_debug
postgresql_15_src
postgresql_orioledb-17_debug
postgresql_orioledb-17_src
postgresql_17_debug
postgresql_17_src
;
}
// (import ./ext/tests {
inherit self;
inherit pkgs;
})
);
// (import ./ext/tests {
inherit self;
inherit pkgs;
})
// pkgs.lib.optionalAttrs (pkgs.stdenv.isLinux) {
inherit (self'.packages)
postgresql_15_debug
postgresql_15_src
postgresql_orioledb-17_debug
postgresql_orioledb-17_src
postgresql_17_debug
postgresql_17_src
;
};
};
}
35 changes: 15 additions & 20 deletions nix/ext/tests/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ let

installedExtension =
postgresMajorVersion:
self.legacyPackages.${pkgs.stdenv.hostPlatform.system}."psql_${postgresMajorVersion}".exts."${
self.legacyPackages.${pkgs.pkgsLinux.stdenv.hostPlatform.system}."psql_${postgresMajorVersion}".exts."${
pname
}";
versions = postgresqlMajorVersion: (installedExtension postgresqlMajorVersion).versions;
Expand All @@ -25,15 +25,15 @@ let
let
majorVersion =
if postgresql.isOrioleDB then "orioledb-17" else lib.versions.major postgresql.version;
pkg = pkgs.buildEnv {
pkg = pkgs.pkgsLinux.buildEnv {
name = "postgresql-${majorVersion}-${pname}";
paths = [
postgresql
postgresql.lib
(installedExtension majorVersion)
]
++ lib.optional (postgresql.isOrioleDB
) self.legacyPackages.${pkgs.stdenv.hostPlatform.system}.psql_orioledb-17.exts.orioledb;
) self.legacyPackages.${pkgs.pkgsLinux.stdenv.hostPlatform.system}.psql_orioledb-17.exts.orioledb;
passthru = {
inherit (postgresql) version psqlSchema;
lib = pkg;
Expand All @@ -42,7 +42,7 @@ let
withoutJIT = pkg;
installedExtensions = [ (installedExtension majorVersion) ];
};
nativeBuildInputs = [ pkgs.makeWrapper ];
nativeBuildInputs = [ pkgs.pkgsLinux.makeWrapper ];
pathsToLink = [
"/"
"/bin"
Expand All @@ -56,27 +56,21 @@ let
};
in
pkg;
psql_15 = postgresqlWithExtension self.packages.${pkgs.stdenv.hostPlatform.system}.postgresql_15;
psql_17 = postgresqlWithExtension self.packages.${pkgs.stdenv.hostPlatform.system}.postgresql_17;
psql_15 =
postgresqlWithExtension
self.packages.${pkgs.pkgsLinux.stdenv.hostPlatform.system}.postgresql_15;
psql_17 =
postgresqlWithExtension
self.packages.${pkgs.pkgsLinux.stdenv.hostPlatform.system}.postgresql_17;
orioledb_17 =
postgresqlWithExtension
self.packages.${pkgs.stdenv.hostPlatform.system}.postgresql_orioledb-17;
self.packages.${pkgs.pkgsLinux.stdenv.hostPlatform.system}.postgresql_orioledb-17;
in
self.inputs.nixpkgs.lib.nixos.runTest {
pkgs.testers.runNixOSTest {
name = pname;
hostPkgs = pkgs;
nodes.server =
{ config, ... }:
{
virtualisation = {
forwardPorts = [
{
from = "host";
host.port = 13022;
guest.port = 22;
}
];
};
services.openssh = {
enable = true;
};
Expand Down Expand Up @@ -153,7 +147,8 @@ let
specialisation.orioledb17.configuration = {
services.postgresql = {
package = lib.mkForce (
postgresqlWithExtension self.packages.${pkgs.stdenv.hostPlatform.system}.postgresql_orioledb-17
postgresqlWithExtension
self.packages.${pkgs.pkgsLinux.stdenv.hostPlatform.system}.postgresql_orioledb-17
);
settings = lib.mkForce (
((installedExtension "17").defaultSettings or { })
Expand Down Expand Up @@ -191,7 +186,7 @@ let
let
newPostgresql =
postgresqlWithExtension
self.packages.${pkgs.stdenv.hostPlatform.system}.postgresql_orioledb-17;
self.packages.${pkgs.pkgsLinux.stdenv.hostPlatform.system}.postgresql_orioledb-17;
in
''
if [[ -z "${newPostgresql.psqlSchema}" ]]; then
Expand Down
112 changes: 85 additions & 27 deletions nix/ext/tests/http.nix
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,10 @@
let
pname = "http";
inherit (pkgs) lib;
mockServer = ../../tests/http-mock-server.py;
installedExtension =
postgresMajorVersion:
self.legacyPackages.${pkgs.stdenv.hostPlatform.system}."psql_${postgresMajorVersion}".exts."${
self.legacyPackages.${pkgs.pkgsLinux.stdenv.hostPlatform.system}."psql_${postgresMajorVersion}".exts."${
pname
}";
versions = postgresqlMajorVersion: (installedExtension postgresqlMajorVersion).versions;
Expand All @@ -13,15 +14,15 @@ let
let
majorVersion =
if postgresql.isOrioleDB then "orioledb-17" else lib.versions.major postgresql.version;
pkg = pkgs.buildEnv {
pkg = pkgs.pkgsLinux.buildEnv {
name = "postgresql-${majorVersion}-${pname}";
paths = [
postgresql
postgresql.lib
(installedExtension majorVersion)
]
++ lib.optional (postgresql.isOrioleDB
) self.legacyPackages.${pkgs.stdenv.hostPlatform.system}.psql_orioledb-17.exts.orioledb;
) self.legacyPackages.${pkgs.pkgsLinux.stdenv.hostPlatform.system}.psql_orioledb-17.exts.orioledb;
passthru = {
inherit (postgresql) version psqlSchema;
installedExtensions = [ (installedExtension majorVersion) ];
Expand All @@ -30,7 +31,7 @@ let
withJIT = pkg;
withoutJIT = pkg;
};
nativeBuildInputs = [ pkgs.makeWrapper ];
nativeBuildInputs = [ pkgs.pkgsLinux.makeWrapper ];
pathsToLink = [
"/"
"/bin"
Expand All @@ -44,34 +45,30 @@ let
};
in
pkg;
psql_15 = postgresqlWithExtension self.packages.${pkgs.stdenv.hostPlatform.system}.postgresql_15;
psql_17 = postgresqlWithExtension self.packages.${pkgs.stdenv.hostPlatform.system}.postgresql_17;
psql_15 =
postgresqlWithExtension
self.packages.${pkgs.pkgsLinux.stdenv.hostPlatform.system}.postgresql_15;
psql_17 =
postgresqlWithExtension
self.packages.${pkgs.pkgsLinux.stdenv.hostPlatform.system}.postgresql_17;
orioledb_17 =
postgresqlWithExtension
self.packages.${pkgs.stdenv.hostPlatform.system}.postgresql_orioledb-17;
self.packages.${pkgs.pkgsLinux.stdenv.hostPlatform.system}.postgresql_orioledb-17;
in
self.inputs.nixpkgs.lib.nixos.runTest {
pkgs.testers.runNixOSTest {
name = pname;
hostPkgs = pkgs;
nodes.server =
{ config, ... }:
{
virtualisation = {
forwardPorts = [
{
from = "host";
host.port = 13022;
guest.port = 22;
}
];
};
services.openssh = {
enable = true;
};

services.postgresql = {
enable = true;
package = postgresqlWithExtension self.packages.${pkgs.stdenv.hostPlatform.system}.postgresql_15;
package =
postgresqlWithExtension
self.packages.${pkgs.pkgsLinux.stdenv.hostPlatform.system}.postgresql_15;
settings = (installedExtension "15").defaultSettings or { };
authentication = ''
local all postgres peer map=postgres
Expand All @@ -89,24 +86,40 @@ self.inputs.nixpkgs.lib.nixos.runTest {
];
initialScript = pkgs.writeText "init-postgres" ''
CREATE TABLE IF NOT EXISTS test_config (key TEXT PRIMARY KEY, value TEXT);
INSERT INTO test_config (key, value) VALUES ('http_mock_port', '8880') ON CONFLICT (key) DO UPDATE SET value = EXCLUDED.value;
'';
};

systemd.services.http-mock-server = {
wantedBy = [ "multi-user.target" ];
before = [ "postgresql.service" ];
serviceConfig = {
Type = "simple";
Restart = "on-failure";
RestartSec = "2";
TimeoutStartSec = "30";
User = "root";
};
environment = {
HTTP_MOCK_PORT_FILE = "/tmp/http-mock-port";
PYTHONUNBUFFERED = "1";
};
script = ''
${pkgs.python3}/bin/python3 ${../../tests/http-mock-server.py}
# Ensure temp directory exists
mkdir -p /tmp

# Start the mock server
exec ${pkgs.pkgsLinux.python3}/bin/python3 ${mockServer}
'';
};

systemd.services.postgresql = {
after = [ "http-mock-server.service" ];
};

specialisation.postgresql17.configuration = {
services.postgresql = {
package = lib.mkForce (
postgresqlWithExtension self.packages.${pkgs.stdenv.hostPlatform.system}.postgresql_17
postgresqlWithExtension self.packages.${pkgs.pkgsLinux.stdenv.hostPlatform.system}.postgresql_17
);
settings = ((installedExtension "17").defaultSettings or { });
};
Expand All @@ -124,10 +137,10 @@ self.inputs.nixpkgs.lib.nixos.runTest {
let
oldPostgresql =
postgresqlWithExtension
self.packages.${pkgs.stdenv.hostPlatform.system}.postgresql_15;
self.packages.${pkgs.pkgsLinux.stdenv.hostPlatform.system}.postgresql_15;
newPostgresql =
postgresqlWithExtension
self.packages.${pkgs.stdenv.hostPlatform.system}.postgresql_17;
self.packages.${pkgs.pkgsLinux.stdenv.hostPlatform.system}.postgresql_17;
oldDataDir = "${builtins.dirOf config.services.postgresql.dataDir}/${oldPostgresql.psqlSchema}";
newDataDir = "${builtins.dirOf config.services.postgresql.dataDir}/${newPostgresql.psqlSchema}";
in
Expand All @@ -152,7 +165,8 @@ self.inputs.nixpkgs.lib.nixos.runTest {
specialisation.orioledb17.configuration = {
services.postgresql = {
package = lib.mkForce (
postgresqlWithExtension self.packages.${pkgs.stdenv.hostPlatform.system}.postgresql_orioledb-17
postgresqlWithExtension
self.packages.${pkgs.pkgsLinux.stdenv.hostPlatform.system}.postgresql_orioledb-17
);
settings = lib.mkForce (
((installedExtension "17").defaultSettings or { })
Expand All @@ -175,7 +189,6 @@ self.inputs.nixpkgs.lib.nixos.runTest {
pkgs.writeText "init-postgres-with-orioledb" ''
CREATE EXTENSION orioledb CASCADE;
CREATE TABLE IF NOT EXISTS test_config (key TEXT PRIMARY KEY, value TEXT);
INSERT INTO test_config (key, value) VALUES ('http_mock_port', '8880') ON CONFLICT (key) DO UPDATE SET value = EXCLUDED.value;
''
);
};
Expand All @@ -194,7 +207,7 @@ self.inputs.nixpkgs.lib.nixos.runTest {
let
newPostgresql =
postgresqlWithExtension
self.packages.${pkgs.stdenv.hostPlatform.system}.postgresql_orioledb-17;
self.packages.${pkgs.pkgsLinux.stdenv.hostPlatform.system}.postgresql_orioledb-17;
in
''
if [[ -z "${newPostgresql.psqlSchema}" ]]; then
Expand Down Expand Up @@ -243,8 +256,37 @@ self.inputs.nixpkgs.lib.nixos.runTest {
start_all()

server.wait_for_unit("multi-user.target")
server.wait_for_unit("http-mock-server.service")
server.wait_for_unit("postgresql.service")

# Read the HTTP mock port and configure it in PostgreSQL
# Wait for the port file to be created with retry logic
server.succeed("""
for i in {1..30}; do
if [ -f /tmp/http-mock-port ]; then
break
fi
echo "Waiting for HTTP mock server port file... ($i/30)"
sleep 1
done

if [ ! -f /tmp/http-mock-port ]; then
echo "ERROR: HTTP mock server port file not found after 30 seconds"
systemctl status http-mock-server.service || true
journalctl -u http-mock-server.service --no-pager || true
exit 1
fi
""")

http_port = server.succeed("cat /tmp/http-mock-port").strip()
server.succeed(f"""
sudo -u postgres psql -d postgres -c '
CREATE TABLE IF NOT EXISTS test_config (key TEXT PRIMARY KEY, value TEXT);
INSERT INTO test_config (key, value) VALUES ('"'"'http_mock_port'"'"', '"'"'{http_port}'"'"')
ON CONFLICT (key) DO UPDATE SET value = EXCLUDED.value;
'
""")

test = PostgresExtensionTest(server, extension_name, versions, sql_test_directory, support_upgrade, ext_schema, lib_name)
test.create_schema()

Expand All @@ -269,6 +311,14 @@ self.inputs.nixpkgs.lib.nixos.runTest {
server.succeed(
"${pg17-configuration}/bin/switch-to-configuration test >&2"
)
server.wait_for_unit("postgresql.service")
# Reconfigure the HTTP mock port after switching PostgreSQL version
server.succeed(f"""
sudo -u postgres psql -d postgres -c '
INSERT INTO test_config (key, value) VALUES ('"'"'http_mock_port'"'"', '"'"'{http_port}'"'"')
ON CONFLICT (key) DO UPDATE SET value = EXCLUDED.value;
'
""")

with subtest("Check last version of the extension after postgresql upgrade"):
test.assert_version_matches(last_version)
Expand All @@ -289,6 +339,14 @@ self.inputs.nixpkgs.lib.nixos.runTest {
server.succeed(
"${orioledb17-configuration}/bin/switch-to-configuration test >&2"
)
server.wait_for_unit("postgresql.service")
# Reconfigure the HTTP mock port after switching to orioledb
server.succeed(f"""
sudo -u postgres psql -d postgres -c '
INSERT INTO test_config (key, value) VALUES ('"'"'http_mock_port'"'"', '"'"'{http_port}'"'"')
ON CONFLICT (key) DO UPDATE SET value = EXCLUDED.value;
'
""")
installed_extensions=test.run_sql("""SELECT extname FROM pg_extension WHERE extname = 'orioledb';""")
assert "orioledb" in installed_extensions
test.create_schema()
Expand Down
Loading
Loading