diff --git a/nix/ext/plpgsql-check.nix b/nix/ext/plpgsql-check.nix index dc4cd946e..d63ac1a2e 100644 --- a/nix/ext/plpgsql-check.nix +++ b/nix/ext/plpgsql-check.nix @@ -133,12 +133,6 @@ buildEnv { inherit versions numberOfVersions switch-ext-version; pname = "${pname}-all"; hasBackgroundWorker = true; - defaultSettings = { - shared_preload_libraries = [ - "plpgsql" - "plpgsql_check" - ]; - }; version = "multi-" + lib.concatStringsSep "-" (map (v: lib.replaceStrings [ "." ] [ "-" ] v) versions); }; diff --git a/nix/ext/tests/default.nix b/nix/ext/tests/default.nix index e1401c004..f22e34a50 100644 --- a/nix/ext/tests/default.nix +++ b/nix/ext/tests/default.nix @@ -3,137 +3,23 @@ let testsDir = ./.; testFiles = builtins.attrNames (builtins.readDir testsDir); nixFiles = builtins.filter ( - name: builtins.match ".*\\.nix$" name != null && name != "default.nix" + name: builtins.match ".*\\.nix$" name != null && name != "default.nix" && name != "lib.nix" ) testFiles; extTest = extension_name: let pname = extension_name; + testLib = import ./lib.nix { + inherit self pkgs; + testedExtensionName = extension_name; + }; inherit (pkgs) lib; - installedExtension = - postgresMajorVersion: self.packages.${pkgs.system}."psql_${postgresMajorVersion}/exts/${pname}-all"; - versions = postgresqlMajorVersion: (installedExtension postgresqlMajorVersion).versions; - postgresqlWithExtension = - postgresql: - let - majorVersion = lib.versions.major postgresql.version; - pkg = pkgs.buildEnv { - name = "postgresql-${majorVersion}-${pname}"; - paths = [ - postgresql - postgresql.lib - (installedExtension majorVersion) - ]; - passthru = { - inherit (postgresql) version psqlSchema; - lib = pkg; - withPackages = _: pkg; - }; - nativeBuildInputs = [ pkgs.makeWrapper ]; - pathsToLink = [ - "/" - "/bin" - "/lib" - ]; - postBuild = '' - wrapProgram $out/bin/postgres --set NIX_PGLIBDIR $out/lib - wrapProgram $out/bin/pg_ctl --set NIX_PGLIBDIR $out/lib - wrapProgram $out/bin/pg_upgrade --set NIX_PGLIBDIR $out/lib - ''; - }; - in - pkg; - psql_15 = postgresqlWithExtension self.packages.${pkgs.system}.postgresql_15; - psql_17 = postgresqlWithExtension self.packages.${pkgs.system}.postgresql_17; + inherit (testLib) versions psql_15 psql_17; in self.inputs.nixpkgs.lib.nixos.runTest { 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 = psql_15; - enableTCPIP = true; - authentication = '' - local all postgres peer map=postgres - local all all peer map=root - ''; - identMap = '' - root root supabase_admin - postgres postgres postgres - ''; - ensureUsers = [ - { - name = "supabase_admin"; - ensureClauses.superuser = true; - } - ]; - settings = (installedExtension "15").defaultSettings or { }; - }; - - networking.firewall.allowedTCPPorts = [ config.services.postgresql.settings.port ]; - - specialisation.postgresql17.configuration = { - services.postgresql = { - package = lib.mkForce psql_17; - settings = (installedExtension "17").defaultSettings or { }; - }; - - systemd.services.postgresql-migrate = { - serviceConfig = { - Type = "oneshot"; - RemainAfterExit = true; - User = "postgres"; - Group = "postgres"; - StateDirectory = "postgresql"; - WorkingDirectory = "${builtins.dirOf config.services.postgresql.dataDir}"; - }; - script = - let - oldPostgresql = psql_15; - newPostgresql = psql_17; - oldDataDir = "${builtins.dirOf config.services.postgresql.dataDir}/${oldPostgresql.psqlSchema}"; - newDataDir = "${builtins.dirOf config.services.postgresql.dataDir}/${newPostgresql.psqlSchema}"; - in - '' - if [[ ! -d ${newDataDir} ]]; then - install -d -m 0700 -o postgres -g postgres "${newDataDir}" - ${newPostgresql}/bin/initdb -D "${newDataDir}" - ${newPostgresql}/bin/pg_upgrade --old-datadir "${oldDataDir}" --new-datadir "${newDataDir}" \ - --old-bindir "${oldPostgresql}/bin" --new-bindir "${newPostgresql}/bin" \ - ${ - if config.services.postgresql.settings.shared_preload_libraries != null then - " --old-options='-c shared_preload_libraries=${config.services.postgresql.settings.shared_preload_libraries}' --new-options='-c shared_preload_libraries=${config.services.postgresql.settings.shared_preload_libraries}'" - else - "" - } - else - echo "${newDataDir} already exists" - fi - ''; - }; - - systemd.services.postgresql = { - after = [ "postgresql-migrate.service" ]; - requires = [ "postgresql-migrate.service" ]; - }; - }; - }; + nodes.server = { config, ... }: testLib.mkDefaultNixosTestNode { inherit config psql_15 psql_17; }; testScript = { nodes, ... }: let @@ -148,10 +34,10 @@ let extension_name = "${pname}" pg17_configuration = "${pg17-configuration}" ext_has_background_worker = ${ - if (installedExtension "15") ? hasBackgroundWorker then "True" else "False" + if (testLib.installedExtension "15") ? hasBackgroundWorker then "True" else "False" } sql_test_directory = Path("${../../tests}") - pg_regress_test_name = "${(installedExtension "15").pgRegressTestName or pname}" + pg_regress_test_name = "${(testLib.installedExtension "15").pgRegressTestName or pname}" ${builtins.readFile ./lib.py} diff --git a/nix/ext/tests/http.nix b/nix/ext/tests/http.nix index 09075c374..b0ddd706f 100644 --- a/nix/ext/tests/http.nix +++ b/nix/ext/tests/http.nix @@ -1,115 +1,27 @@ { self, pkgs }: let pname = "http"; - inherit (pkgs) lib; - installedExtension = - postgresMajorVersion: self.packages.${pkgs.system}."psql_${postgresMajorVersion}/exts/${pname}-all"; - versions = postgresqlMajorVersion: (installedExtension postgresqlMajorVersion).versions; - postgresqlWithExtension = - postgresql: - let - majorVersion = lib.versions.major postgresql.version; - pkg = pkgs.buildEnv { - name = "postgresql-${majorVersion}-${pname}"; - paths = [ - postgresql - postgresql.lib - (installedExtension majorVersion) - ]; - passthru = { - inherit (postgresql) version psqlSchema; - lib = pkg; - withPackages = _: pkg; - }; - nativeBuildInputs = [ pkgs.makeWrapper ]; - pathsToLink = [ - "/" - "/bin" - "/lib" - ]; - postBuild = '' - wrapProgram $out/bin/postgres --set NIX_PGLIBDIR $out/lib - wrapProgram $out/bin/pg_ctl --set NIX_PGLIBDIR $out/lib - wrapProgram $out/bin/pg_upgrade --set NIX_PGLIBDIR $out/lib - ''; - }; - in - pkg; + testLib = import ./lib.nix { + inherit self pkgs; + testedExtensionName = pname; + }; + inherit (testLib) versions psql_15 psql_17; in self.inputs.nixpkgs.lib.nixos.runTest { 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.system}.postgresql_15; - }; - - specialisation.postgresql17.configuration = { - services.postgresql = { - package = lib.mkForce (postgresqlWithExtension self.packages.${pkgs.system}.postgresql_17); - }; - - systemd.services.postgresql-migrate = { - serviceConfig = { - Type = "oneshot"; - RemainAfterExit = true; - User = "postgres"; - Group = "postgres"; - StateDirectory = "postgresql"; - WorkingDirectory = "${builtins.dirOf config.services.postgresql.dataDir}"; - }; - script = - let - oldPostgresql = postgresqlWithExtension self.packages.${pkgs.system}.postgresql_15; - newPostgresql = postgresqlWithExtension self.packages.${pkgs.system}.postgresql_17; - oldDataDir = "${builtins.dirOf config.services.postgresql.dataDir}/${oldPostgresql.psqlSchema}"; - newDataDir = "${builtins.dirOf config.services.postgresql.dataDir}/${newPostgresql.psqlSchema}"; - in - '' - if [[ ! -d ${newDataDir} ]]; then - install -d -m 0700 -o postgres -g postgres "${newDataDir}" - ${newPostgresql}/bin/initdb -D "${newDataDir}" - ${newPostgresql}/bin/pg_upgrade --old-datadir "${oldDataDir}" --new-datadir "${newDataDir}" \ - --old-bindir "${oldPostgresql}/bin" --new-bindir "${newPostgresql}/bin" - else - echo "${newDataDir} already exists" - fi - ''; - }; - - systemd.services.postgresql = { - after = [ "postgresql-migrate.service" ]; - requires = [ "postgresql-migrate.service" ]; - }; - }; - }; + nodes.server = { config, ... }: testLib.mkDefaultNixosTestNode { inherit config psql_15 psql_17; }; testScript = { nodes, ... }: let pg17-configuration = "${nodes.server.system.build.toplevel}/specialisation/postgresql17"; # Convert versions to major.minor format (e.g., "1.5.0" -> "1.5") - toMajorMinor = map (v: lib.versions.majorMinor v); + toMajorMinor = map (v: pkgs.lib.versions.majorMinor v); in '' versions = { - "15": [${lib.concatStringsSep ", " (map (s: ''"${s}"'') (toMajorMinor (versions "15")))}], - "17": [${lib.concatStringsSep ", " (map (s: ''"${s}"'') (toMajorMinor (versions "17")))}], + "15": [${pkgs.lib.concatStringsSep ", " (map (s: ''"${s}"'') (toMajorMinor (versions "15")))}], + "17": [${pkgs.lib.concatStringsSep ", " (map (s: ''"${s}"'') (toMajorMinor (versions "17")))}], } def run_sql(query): diff --git a/nix/ext/tests/lib.nix b/nix/ext/tests/lib.nix new file mode 100644 index 000000000..5329b55fa --- /dev/null +++ b/nix/ext/tests/lib.nix @@ -0,0 +1,196 @@ +# lib.nix +# +# Common utilities and configuration builders for PostgreSQL extension tests. +# +# This module provides reusable functions to create NixOS test nodes with +# standard PostgreSQL configurations, reducing duplication across extension +# test files. +# +# ## Exports +# +# - `installedExtension`: Function to get the installed extension package for a PostgreSQL version +# - `mkDefaultNixosTestNode`: Creates a NixOS test node with standard PostgreSQL setup +# - `psql_15`: PostgreSQL 15 package with the tested extension +# - `psql_17`: PostgreSQL 17 package with the tested extension +# - `versions`: Function to get available extension versions for a PostgreSQL version +# - `mkPostgresqlWithExtensions`: Builds a PostgreSQL package with a list of extensions +# +# ## Examples +# +# See existing test files for real-world examples: +# - Simple tests: postgis.nix, http.nix, plpgsql_check.nix +# - With custom settings: vault.nix, pgsodium.nix +# - With environment variables: pgroonga.nix +# - Complex specialisations: pgrouting.nix +{ + self, + pkgs, + testedExtensionName, +}: +rec { + # Get the installed extension package for a specific PostgreSQL major version. + # + # Type: installedExtension :: String -> Derivation + # + # Example: + # installedExtension "15" => derivation + installedExtension = + postgresMajorVersion: # The PostgreSQL major version (e.g., "15", "17") + self.packages.${pkgs.system}."psql_${postgresMajorVersion}/exts/${testedExtensionName}-all"; + + # Create a default NixOS test node with PostgreSQL configured for extension testing. + # + # When psql_17 is null, the postgresql17 specialisation is disabled. + # This is useful for extensions that only support PostgreSQL 15. + # + # Override or extend configuration using lib.mkMerge: + # Example: + # lib.mkMerge [ + # (mkDefaultNixosTestNode { inherit config psql_15 psql_17; }) + # { services.postgresql.settings.shared_preload_libraries = lib.mkForce "my_ext"; } + # ] + mkDefaultNixosTestNode = + { + config, # The node's config attribute + psql_15, # PostgreSQL 15 package with extension + psql_17 ? null, # PostgreSQL 17 package with extension (optional) + ... + }: + { + virtualisation = { + forwardPorts = [ + { + from = "host"; + host.port = 13022; + guest.port = 22; + } + ]; + }; + services.openssh = { + enable = true; + }; + + services.postgresql = { + enable = true; + package = psql_15; + enableTCPIP = true; + authentication = '' + local all postgres peer map=postgres + local all all peer map=root + ''; + identMap = '' + root root supabase_admin + postgres postgres postgres + ''; + ensureUsers = [ + { + name = "supabase_admin"; + ensureClauses.superuser = true; + } + ]; + settings = (installedExtension "15").defaultSettings or { }; + }; + + networking.firewall.allowedTCPPorts = [ config.services.postgresql.settings.port ]; + + specialisation.postgresql17.configuration = pkgs.lib.mkIf (psql_17 != null) { + services.postgresql = { + package = pkgs.lib.mkForce psql_17; + settings = (installedExtension "17").defaultSettings or { }; + }; + + systemd.services.postgresql-migrate = { + serviceConfig = { + Type = "oneshot"; + RemainAfterExit = true; + User = "postgres"; + Group = "postgres"; + StateDirectory = "postgresql"; + WorkingDirectory = "${builtins.dirOf config.services.postgresql.dataDir}"; + }; + script = + let + oldPostgresql = psql_15; + newPostgresql = psql_17; + oldDataDir = "${builtins.dirOf config.services.postgresql.dataDir}/${oldPostgresql.psqlSchema}"; + newDataDir = "${builtins.dirOf config.services.postgresql.dataDir}/${newPostgresql.psqlSchema}"; + in + '' + if [[ ! -d ${newDataDir} ]]; then + install -d -m 0700 -o postgres -g postgres "${newDataDir}" + ${newPostgresql}/bin/initdb -D "${newDataDir}" + ${newPostgresql}/bin/pg_upgrade --old-datadir "${oldDataDir}" --new-datadir "${newDataDir}" \ + --old-bindir "${oldPostgresql}/bin" --new-bindir "${newPostgresql}/bin" \ + ${ + if config.services.postgresql.settings.shared_preload_libraries != null then + " --old-options='-c shared_preload_libraries=${config.services.postgresql.settings.shared_preload_libraries}' --new-options='-c shared_preload_libraries=${config.services.postgresql.settings.shared_preload_libraries}'" + else + "" + } + else + echo "${newDataDir} already exists" + fi + ''; + }; + + systemd.services.postgresql = { + after = [ "postgresql-migrate.service" ]; + requires = [ "postgresql-migrate.service" ]; + }; + }; + }; + + # Build a PostgreSQL package that includes a list of extensions. + # + # The included extension can be accessed via the `testedExtension` attribute. + # + mkPostgresqlWithExtensions = + postgresql: # The PostgreSQL package to extend with the extension + extensions: # A list of extension packages to include, the first will be the testedExtension + let + majorVersion = pkgs.lib.versions.major postgresql.version; + # Build paths for all extensions + extensionPaths = map ( + ext: self.packages.${pkgs.system}."psql_${majorVersion}/exts/${ext}-all" + ) extensions; + # Automatically add orioledb if building for OrioleDB + orioledbPaths = + pkgs.lib.optional postgresql.isOrioleDB + self.packages.${pkgs.system}."psql_orioledb-17/exts/orioledb"; + pkg = pkgs.buildEnv { + name = "postgresql-${majorVersion}-${testedExtensionName}"; + paths = [ + postgresql + postgresql.lib + ] ++ extensionPaths ++ orioledbPaths; + passthru = { + inherit (postgresql) version psqlSchema; + lib = pkg; + testedExtension = builtins.head extensionPaths; + withPackages = _: pkg; + }; + nativeBuildInputs = [ pkgs.makeWrapper ]; + pathsToLink = [ + "/" + "/bin" + "/lib" + ]; + postBuild = '' + wrapProgram $out/bin/postgres --set NIX_PGLIBDIR $out/lib + wrapProgram $out/bin/pg_ctl --set NIX_PGLIBDIR $out/lib + wrapProgram $out/bin/pg_upgrade --set NIX_PGLIBDIR $out/lib + ''; + }; + in + pkg; + psql_15 = mkPostgresqlWithExtensions self.packages.${pkgs.system}.postgresql_15 [ + testedExtensionName + ]; + psql_17 = mkPostgresqlWithExtensions self.packages.${pkgs.system}.postgresql_17 [ + testedExtensionName + ]; + # Get available extension versions for a specific PostgreSQL major version. + versions = + postgresqlMajorVersion: # The PostgreSQL major version (e.g., "15", "17") + (installedExtension postgresqlMajorVersion).versions; +} diff --git a/nix/ext/tests/pg_repack.nix b/nix/ext/tests/pg_repack.nix index dae534d2e..7491b8db8 100644 --- a/nix/ext/tests/pg_repack.nix +++ b/nix/ext/tests/pg_repack.nix @@ -1,121 +1,16 @@ { self, pkgs }: let pname = "pg_repack"; - inherit (pkgs) lib; - installedExtension = - postgresMajorVersion: self.packages.${pkgs.system}."psql_${postgresMajorVersion}/exts/${pname}-all"; - versions = postgresqlMajorVersion: (installedExtension postgresqlMajorVersion).versions; - postgresqlWithExtension = - postgresql: - let - majorVersion = lib.versions.major postgresql.version; - pkg = pkgs.buildEnv { - name = "postgresql-${majorVersion}-${pname}"; - paths = [ - postgresql - postgresql.lib - (installedExtension majorVersion) - ]; - passthru = { - inherit (postgresql) version psqlSchema; - lib = pkg; - withPackages = _: pkg; - }; - nativeBuildInputs = [ pkgs.makeWrapper ]; - pathsToLink = [ - "/" - "/bin" - "/lib" - ]; - postBuild = '' - wrapProgram $out/bin/postgres --set NIX_PGLIBDIR $out/lib - wrapProgram $out/bin/pg_ctl --set NIX_PGLIBDIR $out/lib - wrapProgram $out/bin/pg_upgrade --set NIX_PGLIBDIR $out/lib - ''; - }; - in - pkg; + testLib = import ./lib.nix { + inherit self pkgs; + testedExtensionName = pname; + }; + inherit (testLib) versions psql_15 psql_17; in self.inputs.nixpkgs.lib.nixos.runTest { 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.system}.postgresql_15; - enableTCPIP = true; - authentication = '' - local all postgres peer map=postgres - local all all peer map=root - ''; - identMap = '' - root root supabase_admin - postgres postgres postgres - ''; - ensureUsers = [ - { - name = "supabase_admin"; - ensureClauses.superuser = true; - } - ]; - }; - - networking.firewall.allowedTCPPorts = [ config.services.postgresql.settings.port ]; - - specialisation.postgresql17.configuration = { - services.postgresql = { - package = lib.mkForce (postgresqlWithExtension self.packages.${pkgs.system}.postgresql_17); - }; - - systemd.services.postgresql-migrate = { - serviceConfig = { - Type = "oneshot"; - RemainAfterExit = true; - User = "postgres"; - Group = "postgres"; - StateDirectory = "postgresql"; - WorkingDirectory = "${builtins.dirOf config.services.postgresql.dataDir}"; - }; - script = - let - oldPostgresql = postgresqlWithExtension self.packages.${pkgs.system}.postgresql_15; - newPostgresql = postgresqlWithExtension self.packages.${pkgs.system}.postgresql_17; - oldDataDir = "${builtins.dirOf config.services.postgresql.dataDir}/${oldPostgresql.psqlSchema}"; - newDataDir = "${builtins.dirOf config.services.postgresql.dataDir}/${newPostgresql.psqlSchema}"; - in - '' - if [[ ! -d ${newDataDir} ]]; then - install -d -m 0700 -o postgres -g postgres "${newDataDir}" - ${newPostgresql}/bin/initdb -D "${newDataDir}" - ${newPostgresql}/bin/pg_upgrade --old-datadir "${oldDataDir}" --new-datadir "${newDataDir}" \ - --old-bindir "${oldPostgresql}/bin" --new-bindir "${newPostgresql}/bin" - else - echo "${newDataDir} already exists" - fi - ''; - }; - - systemd.services.postgresql = { - after = [ "postgresql-migrate.service" ]; - requires = [ "postgresql-migrate.service" ]; - }; - }; - }; + nodes.server = { config, ... }: testLib.mkDefaultNixosTestNode { inherit config psql_15 psql_17; }; testScript = { nodes, ... }: let @@ -124,8 +19,8 @@ self.inputs.nixpkgs.lib.nixos.runTest { '' from pathlib import Path versions = { - "15": [${lib.concatStringsSep ", " (map (s: ''"${s}"'') (versions "15"))}], - "17": [${lib.concatStringsSep ", " (map (s: ''"${s}"'') (versions "17"))}], + "15": [${pkgs.lib.concatStringsSep ", " (map (s: ''"${s}"'') (versions "15"))}], + "17": [${pkgs.lib.concatStringsSep ", " (map (s: ''"${s}"'') (versions "17"))}], } extension_name = "${pname}" support_upgrade = False diff --git a/nix/ext/tests/pgmq.nix b/nix/ext/tests/pgmq.nix index 94438d612..2e1c1ad4b 100644 --- a/nix/ext/tests/pgmq.nix +++ b/nix/ext/tests/pgmq.nix @@ -1,108 +1,21 @@ { self, pkgs }: let pname = "pgmq"; - inherit (pkgs) lib; - installedExtension = - postgresMajorVersion: self.packages.${pkgs.system}."psql_${postgresMajorVersion}/exts/${pname}-all"; - versions = postgresqlMajorVersion: (installedExtension postgresqlMajorVersion).versions; - postgresqlWithExtension = - postgresql: - let - majorVersion = lib.versions.major postgresql.version; - pkg = pkgs.buildEnv { - name = "postgresql-${majorVersion}-${pname}"; - paths = [ - postgresql - postgresql.lib - (installedExtension majorVersion) - ]; - passthru = { - inherit (postgresql) version psqlSchema; - lib = pkg; - withPackages = _: pkg; - }; - nativeBuildInputs = [ pkgs.makeWrapper ]; - pathsToLink = [ - "/" - "/bin" - "/lib" - ]; - postBuild = '' - wrapProgram $out/bin/postgres --set NIX_PGLIBDIR $out/lib - wrapProgram $out/bin/pg_ctl --set NIX_PGLIBDIR $out/lib - wrapProgram $out/bin/pg_upgrade --set NIX_PGLIBDIR $out/lib - ''; - }; - in - pkg; - psql_15 = postgresqlWithExtension self.packages.${pkgs.system}.postgresql_15; - psql_17 = postgresqlWithExtension self.packages.${pkgs.system}.postgresql_17; + testLib = import ./lib.nix { + inherit self pkgs; + testedExtensionName = pname; + }; + inherit (testLib) + versions + installedExtension + psql_15 + psql_17 + ; in self.inputs.nixpkgs.lib.nixos.runTest { - name = "timescaledb"; + name = pname; hostPkgs = pkgs; - nodes.server = - { config, ... }: - { - services.postgresql = { - enable = true; - package = (postgresqlWithExtension psql_15); - authentication = '' - local all postgres peer map=postgres - local all all peer map=root - ''; - identMap = '' - root root supabase_admin - postgres postgres postgres - ''; - ensureUsers = [ - { - name = "supabase_admin"; - ensureClauses.superuser = true; - } - ]; - settings = (installedExtension "15").defaultSettings or { }; - }; - - specialisation.postgresql17.configuration = { - services.postgresql = { - package = lib.mkForce psql_17; - }; - - systemd.services.postgresql-migrate = { - serviceConfig = { - Type = "oneshot"; - RemainAfterExit = true; - User = "postgres"; - Group = "postgres"; - StateDirectory = "postgresql"; - WorkingDirectory = "${builtins.dirOf config.services.postgresql.dataDir}"; - }; - script = - let - oldPostgresql = psql_15; - newPostgresql = psql_17; - oldDataDir = "${builtins.dirOf config.services.postgresql.dataDir}/${oldPostgresql.psqlSchema}"; - newDataDir = "${builtins.dirOf config.services.postgresql.dataDir}/${newPostgresql.psqlSchema}"; - in - '' - if [[ ! -d ${newDataDir} ]]; then - install -d -m 0700 -o postgres -g postgres "${newDataDir}" - ${newPostgresql}/bin/initdb -D "${newDataDir}" - ${newPostgresql}/bin/pg_upgrade --old-datadir "${oldDataDir}" --new-datadir "${newDataDir}" \ - --old-bindir "${oldPostgresql}/bin" --new-bindir "${newPostgresql}/bin" - else - echo "${newDataDir} already exists" - fi - ''; - }; - - systemd.services.postgresql = { - after = [ "postgresql-migrate.service" ]; - requires = [ "postgresql-migrate.service" ]; - }; - }; - }; + nodes.server = { config, ... }: testLib.mkDefaultNixosTestNode { inherit config psql_15 psql_17; }; testScript = { nodes, ... }: let @@ -111,8 +24,8 @@ self.inputs.nixpkgs.lib.nixos.runTest { '' from pathlib import Path versions = { - "15": [${lib.concatStringsSep ", " (map (s: ''"${s}"'') (versions "15"))}], - "17": [${lib.concatStringsSep ", " (map (s: ''"${s}"'') (versions "17"))}], + "15": [${pkgs.lib.concatStringsSep ", " (map (s: ''"${s}"'') (versions "15"))}], + "17": [${pkgs.lib.concatStringsSep ", " (map (s: ''"${s}"'') (versions "17"))}], } extension_name = "${pname}" support_upgrade = True diff --git a/nix/ext/tests/pgroonga.nix b/nix/ext/tests/pgroonga.nix index 83af20ac8..281d7ce52 100644 --- a/nix/ext/tests/pgroonga.nix +++ b/nix/ext/tests/pgroonga.nix @@ -1,128 +1,32 @@ { self, pkgs }: let pname = "pgroonga"; - inherit (pkgs) lib; - installedExtension = - postgresMajorVersion: self.packages.${pkgs.system}."psql_${postgresMajorVersion}/exts/${pname}-all"; - versions = postgresqlMajorVersion: (installedExtension postgresqlMajorVersion).versions; - postgresqlWithExtension = - postgresql: - let - majorVersion = lib.versions.major postgresql.version; - pkg = pkgs.buildEnv { - name = "postgresql-${majorVersion}-${pname}"; - paths = [ - postgresql - postgresql.lib - (installedExtension majorVersion) - ]; - passthru = { - inherit (postgresql) version psqlSchema; - lib = pkg; - withPackages = _: pkg; - }; - nativeBuildInputs = [ pkgs.makeWrapper ]; - pathsToLink = [ - "/" - "/bin" - "/lib" - ]; - postBuild = '' - wrapProgram $out/bin/postgres --set NIX_PGLIBDIR $out/lib - wrapProgram $out/bin/pg_ctl --set NIX_PGLIBDIR $out/lib - wrapProgram $out/bin/pg_upgrade --set NIX_PGLIBDIR $out/lib - ''; - }; - in - pkg; - psql_15 = postgresqlWithExtension self.packages.${pkgs.system}.postgresql_15; - psql_17 = postgresqlWithExtension self.packages.${pkgs.system}.postgresql_17; + testLib = import ./lib.nix { + inherit self pkgs; + testedExtensionName = pname; + }; + inherit (testLib) + versions + installedExtension + psql_15 + psql_17 + ; in self.inputs.nixpkgs.lib.nixos.runTest { 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 = psql_15; - enableTCPIP = true; - authentication = '' - local all postgres peer map=postgres - local all all peer map=root - ''; - identMap = '' - root root supabase_admin - postgres postgres postgres - ''; - ensureUsers = [ - { - name = "supabase_admin"; - ensureClauses.superuser = true; - } - ]; - }; - systemd.services.postgresql.environment.MECAB_DICDIR = "${ - self.packages.${pkgs.system}.mecab-naist-jdic - }/lib/mecab/dic/naist-jdic"; - systemd.services.postgresql.environment.MECAB_CONFIG = "${pkgs.mecab}/bin/mecab-config"; - systemd.services.postgresql.environment.GRN_PLUGINS_DIR = "${ - self.packages.${pkgs.system}.supabase-groonga - }/lib/groonga/plugins"; - - specialisation.postgresql17.configuration = { - services.postgresql = { - package = lib.mkForce psql_17; + pkgs.lib.mkMerge [ + (testLib.mkDefaultNixosTestNode { inherit config psql_15 psql_17; }) + { + systemd.services.postgresql.environment = { + MECAB_DICDIR = "${self.packages.${pkgs.system}.mecab-naist-jdic}/lib/mecab/dic/naist-jdic"; + MECAB_CONFIG = "${pkgs.mecab}/bin/mecab-config"; + GRN_PLUGINS_DIR = "${self.packages.${pkgs.system}.supabase-groonga}/lib/groonga/plugins"; }; - - systemd.services.postgresql-migrate = { - serviceConfig = { - Type = "oneshot"; - RemainAfterExit = true; - User = "postgres"; - Group = "postgres"; - StateDirectory = "postgresql"; - WorkingDirectory = "${builtins.dirOf config.services.postgresql.dataDir}"; - }; - script = - let - oldPostgresql = psql_15; - newPostgresql = psql_17; - oldDataDir = "${builtins.dirOf config.services.postgresql.dataDir}/${oldPostgresql.psqlSchema}"; - newDataDir = "${builtins.dirOf config.services.postgresql.dataDir}/${newPostgresql.psqlSchema}"; - in - '' - if [[ ! -d ${newDataDir} ]]; then - install -d -m 0700 -o postgres -g postgres "${newDataDir}" - ${newPostgresql}/bin/initdb -D "${newDataDir}" - ${newPostgresql}/bin/pg_upgrade --old-datadir "${oldDataDir}" --new-datadir "${newDataDir}" \ - --old-bindir "${oldPostgresql}/bin" --new-bindir "${newPostgresql}/bin" - else - echo "${newDataDir} already exists" - fi - ''; - }; - - systemd.services.postgresql = { - after = [ "postgresql-migrate.service" ]; - requires = [ "postgresql-migrate.service" ]; - }; - }; - }; + } + ]; testScript = { nodes, ... }: let @@ -131,8 +35,8 @@ self.inputs.nixpkgs.lib.nixos.runTest { '' from pathlib import Path versions = { - "15": [${lib.concatStringsSep ", " (map (s: ''"${s}"'') (versions "15"))}], - "17": [${lib.concatStringsSep ", " (map (s: ''"${s}"'') (versions "17"))}], + "15": [${pkgs.lib.concatStringsSep ", " (map (s: ''"${s}"'') (versions "15"))}], + "17": [${pkgs.lib.concatStringsSep ", " (map (s: ''"${s}"'') (versions "17"))}], } extension_name = "${pname}" pg17_configuration = "${pg17-configuration}" diff --git a/nix/ext/tests/pgrouting.nix b/nix/ext/tests/pgrouting.nix index f8775e4aa..5366301a2 100644 --- a/nix/ext/tests/pgrouting.nix +++ b/nix/ext/tests/pgrouting.nix @@ -1,159 +1,81 @@ { self, pkgs }: let pname = "pgrouting"; - inherit (pkgs) lib; - installedExtension = - postgresMajorVersion: self.packages.${pkgs.system}."psql_${postgresMajorVersion}/exts/${pname}-all"; - versions = postgresqlMajorVersion: (installedExtension postgresqlMajorVersion).versions; - postgresqlWithExtension = - postgresql: - let - majorVersion = lib.versions.major postgresql.version; - pkg = pkgs.buildEnv { - name = "postgresql-${majorVersion}-${pname}"; - paths = - [ - postgresql - postgresql.lib - (installedExtension majorVersion) - self.packages.${pkgs.system}."psql_${majorVersion}/exts/postgis-all" - ] - ++ lib.optional (postgresql.isOrioleDB - ) self.packages.${pkgs.system}."psql_orioledb-17/exts/orioledb"; - passthru = { - inherit (postgresql) version psqlSchema; - lib = pkg; - withPackages = _: pkg; - }; - nativeBuildInputs = [ pkgs.makeWrapper ]; - pathsToLink = [ - "/" - "/bin" - "/lib" - ]; - postBuild = '' - wrapProgram $out/bin/postgres --set NIX_PGLIBDIR $out/lib - wrapProgram $out/bin/pg_ctl --set NIX_PGLIBDIR $out/lib - wrapProgram $out/bin/pg_upgrade --set NIX_PGLIBDIR $out/lib - ''; - }; - in - pkg; pg_regress = pkgs.callPackage ../pg_regress.nix { postgresql = self.packages.${pkgs.system}.postgresql_15; }; + testLib = import ./lib.nix { + inherit self pkgs; + testedExtensionName = pname; + }; + inherit (testLib) mkPostgresqlWithExtensions versions; + psql_15 = mkPostgresqlWithExtensions self.packages.${pkgs.system}.postgresql_15 [ + pname + "postgis" + ]; + psql_17 = mkPostgresqlWithExtensions self.packages.${pkgs.system}.postgresql_17 [ + pname + "postgis" + ]; + psql_orioledb_17 = mkPostgresqlWithExtensions self.packages.${pkgs.system}.postgresql_orioledb-17 [ + pname + "postgis" + ]; in self.inputs.nixpkgs.lib.nixos.runTest { name = pname; hostPkgs = pkgs; nodes.server = { config, ... }: - { - virtualisation = { - forwardPorts = [ - { - from = "host"; - host.port = 13022; - guest.port = 22; - } - ]; - }; - services.openssh = { - enable = true; - }; - users.users.root.openssh.authorizedKeys.keys = [ - "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIo+ulCUfJjnCVgfM4946Ih5Nm8DeZZiayYeABHGPEl7 jfroche" - ]; - - services.postgresql = { - enable = true; - package = postgresqlWithExtension self.packages.${pkgs.system}.postgresql_15; - }; - - specialisation.postgresql17.configuration = { - services.postgresql = { - package = lib.mkForce (postgresqlWithExtension self.packages.${pkgs.system}.postgresql_17); - }; - - systemd.services.postgresql-migrate = { - serviceConfig = { - Type = "oneshot"; - RemainAfterExit = true; - User = "postgres"; - Group = "postgres"; - StateDirectory = "postgresql"; - WorkingDirectory = "${builtins.dirOf config.services.postgresql.dataDir}"; - }; - script = - let - oldPostgresql = postgresqlWithExtension self.packages.${pkgs.system}.postgresql_15; - newPostgresql = postgresqlWithExtension self.packages.${pkgs.system}.postgresql_17; - oldDataDir = "${builtins.dirOf config.services.postgresql.dataDir}/${oldPostgresql.psqlSchema}"; - newDataDir = "${builtins.dirOf config.services.postgresql.dataDir}/${newPostgresql.psqlSchema}"; - in - '' - if [[ ! -d ${newDataDir} ]]; then - install -d -m 0700 -o postgres -g postgres "${newDataDir}" - ${newPostgresql}/bin/initdb -D "${newDataDir}" - ${newPostgresql}/bin/pg_upgrade --old-datadir "${oldDataDir}" --new-datadir "${newDataDir}" \ - --old-bindir "${oldPostgresql}/bin" --new-bindir "${newPostgresql}/bin" - else - echo "${newDataDir} already exists" - fi + pkgs.lib.mkMerge [ + (testLib.mkDefaultNixosTestNode { inherit config psql_15 psql_17; }) + { + specialisation.orioledb17.configuration = { + services.postgresql = { + package = pkgs.lib.mkForce psql_orioledb_17; + settings = { + shared_preload_libraries = "orioledb"; + default_table_access_method = "orioledb"; + }; + initdbArgs = [ + "--allow-group-access" + "--locale-provider=icu" + "--encoding=UTF-8" + "--icu-locale=en_US.UTF-8" + ]; + initialScript = pkgs.writeText "init-postgres-with-orioledb" '' + CREATE EXTENSION orioledb CASCADE; ''; - }; - - systemd.services.postgresql = { - after = [ "postgresql-migrate.service" ]; - requires = [ "postgresql-migrate.service" ]; - }; - }; - - specialisation.orioledb17.configuration = { - services.postgresql = { - package = lib.mkForce (postgresqlWithExtension self.packages.${pkgs.system}.postgresql_orioledb-17); - settings = { - shared_preload_libraries = "orioledb"; - default_table_access_method = "orioledb"; }; - initdbArgs = [ - "--allow-group-access" - "--locale-provider=icu" - "--encoding=UTF-8" - "--icu-locale=en_US.UTF-8" - ]; - initialScript = pkgs.writeText "init-postgres-with-orioledb" '' - CREATE EXTENSION orioledb CASCADE; - ''; - }; - systemd.services.postgresql-migrate = { - # we don't support migrating from postgresql 17 to orioledb-17 so we just reinit the datadir - serviceConfig = { - Type = "oneshot"; - RemainAfterExit = true; - User = "postgres"; - Group = "postgres"; - StateDirectory = "postgresql"; - WorkingDirectory = "${builtins.dirOf config.services.postgresql.dataDir}"; + systemd.services.postgresql-migrate = { + # we don't support migrating from postgresql 17 to orioledb-17 so we just reinit the datadir + serviceConfig = { + Type = "oneshot"; + RemainAfterExit = true; + User = "postgres"; + Group = "postgres"; + StateDirectory = "postgresql"; + WorkingDirectory = "${builtins.dirOf config.services.postgresql.dataDir}"; + }; + script = + let + newPostgresql = psql_orioledb_17; + in + '' + set -x + systemctl cat postgresql.service + rm -rf ${builtins.dirOf config.services.postgresql.dataDir}/${newPostgresql.psqlSchema} + ''; }; - script = - let - newPostgresql = postgresqlWithExtension self.packages.${pkgs.system}.postgresql_orioledb-17; - in - '' - set -x - systemctl cat postgresql.service - rm -rf ${builtins.dirOf config.services.postgresql.dataDir}/${newPostgresql.psqlSchema} - ''; - }; - systemd.services.postgresql = { - after = [ "postgresql-migrate.service" ]; - requires = [ "postgresql-migrate.service" ]; + systemd.services.postgresql = { + after = [ "postgresql-migrate.service" ]; + requires = [ "postgresql-migrate.service" ]; + }; }; - }; - }; + } + ]; testScript = { nodes, ... }: let @@ -162,9 +84,9 @@ self.inputs.nixpkgs.lib.nixos.runTest { in '' versions = { - "15": [${lib.concatStringsSep ", " (map (s: ''"${s}"'') (versions "15"))}], - "17": [${lib.concatStringsSep ", " (map (s: ''"${s}"'') (versions "17"))}], - "orioledb-17": [${lib.concatStringsSep ", " (map (s: ''"${s}"'') (versions "orioledb-17"))}], + "15": [${pkgs.lib.concatStringsSep ", " (map (s: ''"${s}"'') (versions "15"))}], + "17": [${pkgs.lib.concatStringsSep ", " (map (s: ''"${s}"'') (versions "17"))}], + "orioledb-17": [${pkgs.lib.concatStringsSep ", " (map (s: ''"${s}"'') (versions "orioledb-17"))}], } def run_sql(query): diff --git a/nix/ext/tests/pgsodium.nix b/nix/ext/tests/pgsodium.nix index 9ad1aec4b..9d1753e49 100644 --- a/nix/ext/tests/pgsodium.nix +++ b/nix/ext/tests/pgsodium.nix @@ -1,42 +1,21 @@ { self, pkgs }: let pname = "pgsodium"; - inherit (pkgs) lib; - installedExtension = - postgresMajorVersion: self.packages.${pkgs.system}."psql_${postgresMajorVersion}/exts/${pname}-all"; - versions = postgresqlMajorVersion: (installedExtension postgresqlMajorVersion).versions; - postgresqlWithExtension = - postgresql: - let - majorVersion = lib.versions.major postgresql.version; - pkg = pkgs.buildEnv { - name = "postgresql-${majorVersion}-${pname}"; - paths = [ - postgresql - postgresql.lib - (installedExtension majorVersion) - self.packages.${pkgs.system}."psql_${majorVersion}/exts/hypopg-all" - ]; - passthru = { - inherit (postgresql) version psqlSchema; - lib = pkg; - withPackages = _: pkg; - }; - nativeBuildInputs = [ pkgs.makeWrapper ]; - pathsToLink = [ - "/" - "/bin" - "/lib" - ]; - postBuild = '' - wrapProgram $out/bin/postgres --set NIX_PGLIBDIR $out/lib - wrapProgram $out/bin/pg_ctl --set NIX_PGLIBDIR $out/lib - wrapProgram $out/bin/pg_upgrade --set NIX_PGLIBDIR $out/lib - ''; - }; - in - pkg; - pgsodiumGetKey = lib.getExe ( + testLib = import ./lib.nix { + inherit self pkgs; + testedExtensionName = pname; + }; + inherit (testLib) mkPostgresqlWithExtensions versions; + psql_15 = mkPostgresqlWithExtensions self.packages.${pkgs.system}.postgresql_15 [ + pname + "hypopg" + ]; + psql_17 = mkPostgresqlWithExtensions self.packages.${pkgs.system}.postgresql_17 [ + pname + "hypopg" + ]; + + pgsodiumGetKey = pkgs.lib.getExe ( pkgs.writeShellScriptBin "pgsodium-getkey" '' echo 0000000000000000000000000000000000000000000000000000000000000000 '' @@ -47,67 +26,42 @@ self.inputs.nixpkgs.lib.nixos.runTest { hostPkgs = pkgs; nodes.server = { config, ... }: - { - virtualisation = { - forwardPorts = [ - { - from = "host"; - host.port = 13022; - guest.port = 22; - } - ]; - }; - - services.postgresql = { - enable = true; - package = postgresqlWithExtension self.packages.${pkgs.system}.postgresql_15; - settings = { - "shared_preload_libraries" = pname; - "pgsodium.getkey_script" = pgsodiumGetKey; - }; - }; - - specialisation.postgresql17.configuration = { + pkgs.lib.mkMerge [ + (testLib.mkDefaultNixosTestNode { inherit config psql_15 psql_17; }) + { services.postgresql = { - package = lib.mkForce (postgresqlWithExtension self.packages.${pkgs.system}.postgresql_17); - }; - - systemd.services.postgresql-migrate = { - serviceConfig = { - Type = "oneshot"; - RemainAfterExit = true; - User = "postgres"; - Group = "postgres"; - StateDirectory = "postgresql"; - WorkingDirectory = "${builtins.dirOf config.services.postgresql.dataDir}"; + settings = { + "shared_preload_libraries" = pkgs.lib.mkForce pname; + "pgsodium.getkey_script" = pgsodiumGetKey; }; - script = - let - oldPostgresql = postgresqlWithExtension self.packages.${pkgs.system}.postgresql_15; - newPostgresql = postgresqlWithExtension self.packages.${pkgs.system}.postgresql_17; - oldDataDir = "${builtins.dirOf config.services.postgresql.dataDir}/${oldPostgresql.psqlSchema}"; - newDataDir = "${builtins.dirOf config.services.postgresql.dataDir}/${newPostgresql.psqlSchema}"; - in - '' - if [[ ! -d ${newDataDir} ]]; then - install -d -m 0700 -o postgres -g postgres "${newDataDir}" - ${newPostgresql}/bin/initdb -D "${newDataDir}" - echo "shared_preload_libraries = '${pname}'" >> "${newDataDir}/postgresql.conf" - echo "pgsodium.getkey_script = '${pgsodiumGetKey}'" >> "${newDataDir}/postgresql.conf"; - ${newPostgresql}/bin/pg_upgrade --old-datadir "${oldDataDir}" --new-datadir "${newDataDir}" \ - --old-bindir "${oldPostgresql}/bin" --new-bindir "${newPostgresql}/bin" - else - echo "${newDataDir} already exists" - fi - ''; }; - systemd.services.postgresql = { - after = [ "postgresql-migrate.service" ]; - requires = [ "postgresql-migrate.service" ]; + specialisation.postgresql17.configuration = { + systemd.services.postgresql-migrate = { + script = pkgs.lib.mkForce ( + let + oldPostgresql = psql_15; + newPostgresql = psql_17; + oldDataDir = "${builtins.dirOf config.services.postgresql.dataDir}/${oldPostgresql.psqlSchema}"; + newDataDir = "${builtins.dirOf config.services.postgresql.dataDir}/${newPostgresql.psqlSchema}"; + in + '' + if [[ ! -d ${newDataDir} ]]; then + install -d -m 0700 -o postgres -g postgres "${newDataDir}" + ${newPostgresql}/bin/initdb -D "${newDataDir}" + echo "shared_preload_libraries = '${pname}'" >> "${newDataDir}/postgresql.conf" + echo "pgsodium.getkey_script = '${pgsodiumGetKey}'" >> "${newDataDir}/postgresql.conf"; + ${newPostgresql}/bin/pg_upgrade --old-datadir "${oldDataDir}" --new-datadir "${newDataDir}" \ + --old-bindir "${oldPostgresql}/bin" --new-bindir "${newPostgresql}/bin" + else + echo "${newDataDir} already exists" + fi + '' + ); + }; }; - }; - }; + } + ]; testScript = { nodes, ... }: let @@ -115,8 +69,8 @@ self.inputs.nixpkgs.lib.nixos.runTest { in '' versions = { - "15": [${lib.concatStringsSep ", " (map (s: ''"${s}"'') (versions "15"))}], - "17": [${lib.concatStringsSep ", " (map (s: ''"${s}"'') (versions "17"))}], + "15": [${pkgs.lib.concatStringsSep ", " (map (s: ''"${s}"'') (versions "15"))}], + "17": [${pkgs.lib.concatStringsSep ", " (map (s: ''"${s}"'') (versions "17"))}], } def run_sql(query): diff --git a/nix/ext/tests/plpgsql_check.nix b/nix/ext/tests/plpgsql_check.nix index 105ed8a88..9f4460fbd 100644 --- a/nix/ext/tests/plpgsql_check.nix +++ b/nix/ext/tests/plpgsql_check.nix @@ -1,124 +1,21 @@ { self, pkgs }: let pname = "plpgsql_check"; - inherit (pkgs) lib; - installedExtension = - postgresMajorVersion: self.packages.${pkgs.system}."psql_${postgresMajorVersion}/exts/${pname}-all"; - versions = postgresqlMajorVersion: (installedExtension postgresqlMajorVersion).versions; - postgresqlWithExtension = - postgresql: - let - majorVersion = lib.versions.major postgresql.version; - pkg = pkgs.buildEnv { - name = "postgresql-${majorVersion}-${pname}"; - paths = [ - postgresql - postgresql.lib - (installedExtension majorVersion) - ]; - passthru = { - inherit (postgresql) version psqlSchema; - lib = pkg; - withPackages = _: pkg; - }; - nativeBuildInputs = [ pkgs.makeWrapper ]; - pathsToLink = [ - "/" - "/bin" - "/lib" - ]; - postBuild = '' - wrapProgram $out/bin/postgres --set NIX_PGLIBDIR $out/lib - wrapProgram $out/bin/pg_ctl --set NIX_PGLIBDIR $out/lib - wrapProgram $out/bin/pg_upgrade --set NIX_PGLIBDIR $out/lib - ''; - }; - in - pkg; - psql_15 = postgresqlWithExtension self.packages.${pkgs.system}.postgresql_15; - psql_17 = postgresqlWithExtension self.packages.${pkgs.system}.postgresql_17; + testLib = import ./lib.nix { + inherit self pkgs; + testedExtensionName = pname; + }; + inherit (testLib) + versions + installedExtension + psql_15 + psql_17 + ; in self.inputs.nixpkgs.lib.nixos.runTest { 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 = psql_15; - enableTCPIP = true; - authentication = '' - local all postgres peer map=postgres - local all all peer map=root - ''; - identMap = '' - root root supabase_admin - postgres postgres postgres - ''; - ensureUsers = [ - { - name = "supabase_admin"; - ensureClauses.superuser = true; - } - ]; - settings = (installedExtension "15").defaultSettings or { }; - }; - - networking.firewall.allowedTCPPorts = [ config.services.postgresql.settings.port ]; - - specialisation.postgresql17.configuration = { - services.postgresql = { - package = lib.mkForce psql_17; - }; - - systemd.services.postgresql-migrate = { - serviceConfig = { - Type = "oneshot"; - RemainAfterExit = true; - User = "postgres"; - Group = "postgres"; - StateDirectory = "postgresql"; - WorkingDirectory = "${builtins.dirOf config.services.postgresql.dataDir}"; - }; - script = - let - oldPostgresql = psql_15; - newPostgresql = psql_17; - oldDataDir = "${builtins.dirOf config.services.postgresql.dataDir}/${oldPostgresql.psqlSchema}"; - newDataDir = "${builtins.dirOf config.services.postgresql.dataDir}/${newPostgresql.psqlSchema}"; - in - '' - if [[ ! -d ${newDataDir} ]]; then - install -d -m 0700 -o postgres -g postgres "${newDataDir}" - ${newPostgresql}/bin/initdb -D "${newDataDir}" - ${newPostgresql}/bin/pg_upgrade --old-datadir "${oldDataDir}" --new-datadir "${newDataDir}" \ - --old-bindir "${oldPostgresql}/bin" --new-bindir "${newPostgresql}/bin" - else - echo "${newDataDir} already exists" - fi - ''; - }; - - systemd.services.postgresql = { - after = [ "postgresql-migrate.service" ]; - requires = [ "postgresql-migrate.service" ]; - }; - }; - }; + nodes.server = { config, ... }: testLib.mkDefaultNixosTestNode { inherit config psql_15 psql_17; }; testScript = { nodes, ... }: let @@ -127,8 +24,8 @@ self.inputs.nixpkgs.lib.nixos.runTest { '' from pathlib import Path versions = { - "15": [${lib.concatStringsSep ", " (map (s: ''"${s}"'') (versions "15"))}], - "17": [${lib.concatStringsSep ", " (map (s: ''"${s}"'') (versions "17"))}], + "15": [${pkgs.lib.concatStringsSep ", " (map (s: ''"${s}"'') (versions "15"))}], + "17": [${pkgs.lib.concatStringsSep ", " (map (s: ''"${s}"'') (versions "17"))}], } extension_name = "${pname}" support_upgrade = True diff --git a/nix/ext/tests/plv8.nix b/nix/ext/tests/plv8.nix index 085ddd42f..9471ae6f8 100644 --- a/nix/ext/tests/plv8.nix +++ b/nix/ext/tests/plv8.nix @@ -2,86 +2,22 @@ { self, pkgs }: let pname = "plv8"; - inherit (pkgs) lib; - installedExtension = - postgresMajorVersion: self.packages.${pkgs.system}."psql_${postgresMajorVersion}/exts/${pname}-all"; - versions = postgresqlMajorVersion: (installedExtension postgresqlMajorVersion).versions; - postgresqlWithExtension = - postgresql: - let - majorVersion = lib.versions.major postgresql.version; - pkg = pkgs.buildEnv { - name = "postgresql-${majorVersion}-${pname}"; - paths = [ - postgresql - postgresql.lib - (installedExtension majorVersion) - ]; - passthru = { - inherit (postgresql) version psqlSchema; - lib = pkg; - withPackages = _: pkg; - }; - nativeBuildInputs = [ pkgs.makeWrapper ]; - pathsToLink = [ - "/" - "/bin" - "/lib" - ]; - postBuild = '' - wrapProgram $out/bin/postgres --set NIX_PGLIBDIR $out/lib - wrapProgram $out/bin/pg_ctl --set NIX_PGLIBDIR $out/lib - wrapProgram $out/bin/pg_upgrade --set NIX_PGLIBDIR $out/lib - ''; - }; - in - pkg; - psql_15 = postgresqlWithExtension self.packages.${pkgs.system}.postgresql_15; + testLib = import ./lib.nix { + inherit self pkgs; + testedExtensionName = pname; + }; + inherit (testLib) versions installedExtension psql_15; in self.inputs.nixpkgs.lib.nixos.runTest { name = pname; hostPkgs = pkgs; - nodes.server = - { ... }: - { - virtualisation = { - forwardPorts = [ - { - from = "host"; - host.port = 13022; - guest.port = 22; - } - ]; - }; - services.openssh = { - enable = true; - }; - - services.postgresql = { - enable = true; - package = postgresqlWithExtension self.packages.${pkgs.system}.postgresql_15; - authentication = '' - local all postgres peer map=postgres - local all all peer map=root - ''; - identMap = '' - root root supabase_admin - postgres postgres postgres - ''; - ensureUsers = [ - { - name = "supabase_admin"; - ensureClauses.superuser = true; - } - ]; - }; - }; + nodes.server = { config, ... }: testLib.mkDefaultNixosTestNode { inherit config psql_15; }; testScript = { ... }: '' from pathlib import Path versions = { - "15": [${lib.concatStringsSep ", " (map (s: ''"${s}"'') (versions "15"))}], + "15": [${pkgs.lib.concatStringsSep ", " (map (s: ''"${s}"'') (versions "15"))}], } extension_name = "${pname}" support_upgrade = False diff --git a/nix/ext/tests/postgis.nix b/nix/ext/tests/postgis.nix index ab6a4b3f8..ea47a3c37 100644 --- a/nix/ext/tests/postgis.nix +++ b/nix/ext/tests/postgis.nix @@ -1,104 +1,16 @@ { self, pkgs }: let pname = "postgis"; - inherit (pkgs) lib; - installedExtension = - postgresMajorVersion: self.packages.${pkgs.system}."psql_${postgresMajorVersion}/exts/${pname}-all"; - versions = postgresqlMajorVersion: (installedExtension postgresqlMajorVersion).versions; - postgresqlWithExtension = - postgresql: - let - majorVersion = lib.versions.major postgresql.version; - pkg = pkgs.buildEnv { - name = "postgresql-${majorVersion}-${pname}"; - paths = [ - postgresql - postgresql.lib - (installedExtension majorVersion) - ]; - passthru = { - inherit (postgresql) version psqlSchema; - lib = pkg; - withPackages = _: pkg; - }; - nativeBuildInputs = [ pkgs.makeWrapper ]; - pathsToLink = [ - "/" - "/bin" - "/lib" - ]; - postBuild = '' - wrapProgram $out/bin/postgres --set NIX_PGLIBDIR $out/lib - wrapProgram $out/bin/pg_ctl --set NIX_PGLIBDIR $out/lib - wrapProgram $out/bin/pg_upgrade --set NIX_PGLIBDIR $out/lib - ''; - }; - in - pkg; + testLib = import ./lib.nix { + inherit self pkgs; + testedExtensionName = pname; + }; + inherit (testLib) versions psql_15 psql_17; in self.inputs.nixpkgs.lib.nixos.runTest { 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.system}.postgresql_15; - }; - - specialisation.postgresql17.configuration = { - services.postgresql = { - package = lib.mkForce (postgresqlWithExtension self.packages.${pkgs.system}.postgresql_17); - }; - - systemd.services.postgresql-migrate = { - serviceConfig = { - Type = "oneshot"; - RemainAfterExit = true; - User = "postgres"; - Group = "postgres"; - StateDirectory = "postgresql"; - WorkingDirectory = "${builtins.dirOf config.services.postgresql.dataDir}"; - }; - script = - let - oldPostgresql = postgresqlWithExtension self.packages.${pkgs.system}.postgresql_15; - newPostgresql = postgresqlWithExtension self.packages.${pkgs.system}.postgresql_17; - oldDataDir = "${builtins.dirOf config.services.postgresql.dataDir}/${oldPostgresql.psqlSchema}"; - newDataDir = "${builtins.dirOf config.services.postgresql.dataDir}/${newPostgresql.psqlSchema}"; - in - '' - if [[ ! -d ${newDataDir} ]]; then - install -d -m 0700 -o postgres -g postgres "${newDataDir}" - ${newPostgresql}/bin/initdb -D "${newDataDir}" - ${newPostgresql}/bin/pg_upgrade --old-datadir "${oldDataDir}" --new-datadir "${newDataDir}" \ - --old-bindir "${oldPostgresql}/bin" --new-bindir "${newPostgresql}/bin" - else - echo "${newDataDir} already exists" - fi - ''; - }; - - systemd.services.postgresql = { - after = [ "postgresql-migrate.service" ]; - requires = [ "postgresql-migrate.service" ]; - }; - }; - }; + nodes.server = { config, ... }: testLib.mkDefaultNixosTestNode { inherit config psql_15 psql_17; }; testScript = { nodes, ... }: let @@ -106,8 +18,8 @@ self.inputs.nixpkgs.lib.nixos.runTest { in '' versions = { - "15": [${lib.concatStringsSep ", " (map (s: ''"${s}"'') (versions "15"))}], - "17": [${lib.concatStringsSep ", " (map (s: ''"${s}"'') (versions "17"))}], + "15": [${pkgs.lib.concatStringsSep ", " (map (s: ''"${s}"'') (versions "15"))}], + "17": [${pkgs.lib.concatStringsSep ", " (map (s: ''"${s}"'') (versions "17"))}], } def run_sql(query): diff --git a/nix/ext/tests/timescaledb.nix b/nix/ext/tests/timescaledb.nix index 1bab187d1..d6a77caaf 100644 --- a/nix/ext/tests/timescaledb.nix +++ b/nix/ext/tests/timescaledb.nix @@ -1,72 +1,29 @@ { self, pkgs }: let pname = "timescaledb"; - inherit (pkgs) lib; - installedExtension = - postgresMajorVersion: self.packages.${pkgs.system}."psql_${postgresMajorVersion}/exts/${pname}-all"; - versions = (installedExtension "15").versions; - postgresqlWithExtension = - postgresql: - let - majorVersion = lib.versions.major postgresql.version; - pkg = pkgs.buildEnv { - name = "postgresql-${majorVersion}-${pname}"; - paths = [ - postgresql - postgresql.lib - (installedExtension majorVersion) - ]; - passthru = { - inherit (postgresql) version psqlSchema; - lib = pkg; - withPackages = _: pkg; - }; - nativeBuildInputs = [ pkgs.makeWrapper ]; - pathsToLink = [ - "/" - "/bin" - "/lib" - ]; - postBuild = '' - wrapProgram $out/bin/postgres --set NIX_PGLIBDIR $out/lib - wrapProgram $out/bin/pg_ctl --set NIX_PGLIBDIR $out/lib - wrapProgram $out/bin/pg_upgrade --set NIX_PGLIBDIR $out/lib - ''; - }; - in - pkg; - psql_15 = postgresqlWithExtension self.packages.${pkgs.system}.postgresql_15; + testLib = import ./lib.nix { + inherit self pkgs; + testedExtensionName = pname; + }; + inherit (testLib) psql_15; + versions = (testLib.installedExtension "15").versions; in self.inputs.nixpkgs.lib.nixos.runTest { name = "timescaledb"; hostPkgs = pkgs; nodes.server = - { ... }: - { - services.postgresql = { - enable = true; - package = (postgresqlWithExtension psql_15); - authentication = '' - local all postgres peer map=postgres - local all all peer map=root - ''; - identMap = '' - root root supabase_admin - postgres postgres postgres - ''; - ensureUsers = [ - { - name = "supabase_admin"; - ensureClauses.superuser = true; - } - { name = "service_role"; } - ]; - - settings = { - shared_preload_libraries = "timescaledb"; + { config, ... }: + pkgs.lib.mkMerge [ + (testLib.mkDefaultNixosTestNode { inherit config psql_15; }) + { + services.postgresql = { + ensureUsers = [ { name = "service_role"; } ]; + settings = { + shared_preload_libraries = pkgs.lib.mkForce "timescaledb"; + }; }; - }; - }; + } + ]; testScript = { ... }: '' @@ -78,7 +35,7 @@ self.inputs.nixpkgs.lib.nixos.runTest { server.wait_for_unit("postgresql.service") versions = { - "15": [${lib.concatStringsSep ", " (map (s: ''"${s}"'') versions)}], + "15": [${pkgs.lib.concatStringsSep ", " (map (s: ''"${s}"'') versions)}], } extension_name = "${pname}" support_upgrade = True diff --git a/nix/ext/tests/vault.nix b/nix/ext/tests/vault.nix index 7b16247a5..3245ac592 100644 --- a/nix/ext/tests/vault.nix +++ b/nix/ext/tests/vault.nix @@ -1,136 +1,73 @@ { self, pkgs }: let pname = "supabase_vault"; - inherit (pkgs) lib; - installedExtension = - postgresMajorVersion: self.packages.${pkgs.system}."psql_${postgresMajorVersion}/exts/${pname}-all"; - versions = postgresqlMajorVersion: (installedExtension postgresqlMajorVersion).versions; - postgresqlWithExtension = - postgresql: - let - majorVersion = lib.versions.major postgresql.version; - pkg = pkgs.buildEnv { - name = "postgresql-${majorVersion}-${pname}"; - paths = [ - postgresql - postgresql.lib - (installedExtension majorVersion) - self.packages.${pkgs.system}."psql_${majorVersion}/exts/pgsodium-all" # dependency - ]; - passthru = { - inherit (postgresql) version psqlSchema; - lib = pkg; - withPackages = _: pkg; - }; - nativeBuildInputs = [ pkgs.makeWrapper ]; - pathsToLink = [ - "/" - "/bin" - "/lib" - ]; - postBuild = '' - wrapProgram $out/bin/postgres --set NIX_PGLIBDIR $out/lib - wrapProgram $out/bin/pg_ctl --set NIX_PGLIBDIR $out/lib - wrapProgram $out/bin/pg_upgrade --set NIX_PGLIBDIR $out/lib - ''; - }; - in - pkg; - vaultGetKey = lib.getExe ( + testLib = import ./lib.nix { + inherit self pkgs; + testedExtensionName = pname; + }; + inherit (testLib) mkPostgresqlWithExtensions versions; + psql_15 = mkPostgresqlWithExtensions self.packages.${pkgs.system}.postgresql_15 [ + pname + "pgsodium" + ]; + psql_17 = mkPostgresqlWithExtensions self.packages.${pkgs.system}.postgresql_17 [ + pname + "pgsodium" + ]; + vaultGetKey = pkgs.lib.getExe ( pkgs.writeShellScriptBin "vault-getkey" '' echo 0000000000000000000000000000000000000000000000000000000000000000 '' ); - psql_15 = postgresqlWithExtension self.packages.${pkgs.system}.postgresql_15; - psql_17 = postgresqlWithExtension self.packages.${pkgs.system}.postgresql_17; in self.inputs.nixpkgs.lib.nixos.runTest { name = pname; hostPkgs = pkgs; nodes.server = { config, ... }: - { - virtualisation = { - forwardPorts = [ - { - from = "host"; - host.port = 13022; - guest.port = 22; - } - ]; - }; - - services.postgresql = { - enable = true; - package = psql_15; - authentication = '' - local all postgres peer map=postgres - local all all peer map=root - ''; - identMap = '' - root root supabase_admin - postgres postgres postgres - ''; - initialScript = pkgs.writeText "vault-init.sql" '' - CREATE SCHEMA vault; - ''; - ensureUsers = [ - { - name = "supabase_admin"; - ensureClauses.superuser = true; - } - { name = "service_role"; } - ]; - settings = { - "shared_preload_libraries" = "${pname},pgsodium"; - "pgsodium.getkey_script" = vaultGetKey; - "search_path" = "\"$user\", public, auth, extensions"; - "vault.getkey_script" = vaultGetKey; - }; - }; - - specialisation.postgresql17.configuration = { + pkgs.lib.mkMerge [ + (testLib.mkDefaultNixosTestNode { inherit config psql_15 psql_17; }) + { services.postgresql = { - package = lib.mkForce psql_17; - }; - - systemd.services.postgresql-migrate = { - serviceConfig = { - Type = "oneshot"; - RemainAfterExit = true; - User = "postgres"; - Group = "postgres"; - StateDirectory = "postgresql"; - WorkingDirectory = "${builtins.dirOf config.services.postgresql.dataDir}"; + initialScript = pkgs.writeText "vault-init.sql" '' + CREATE SCHEMA vault; + ''; + ensureUsers = [ { name = "service_role"; } ]; + settings = { + "shared_preload_libraries" = pkgs.lib.mkForce "${pname},pgsodium"; + "pgsodium.getkey_script" = vaultGetKey; + "vault.getkey_script" = vaultGetKey; + "search_path" = "\"$user\", public, auth, extensions"; }; - script = - let - oldPostgresql = psql_15; - newPostgresql = psql_17; - oldDataDir = "${builtins.dirOf config.services.postgresql.dataDir}/${oldPostgresql.psqlSchema}"; - newDataDir = "${builtins.dirOf config.services.postgresql.dataDir}/${newPostgresql.psqlSchema}"; - in - '' - if [[ ! -d ${newDataDir} ]]; then - install -d -m 0700 -o postgres -g postgres "${newDataDir}" - ${newPostgresql}/bin/initdb -D "${newDataDir}" - echo "shared_preload_libraries = '${pname},pgsodium'" >> "${newDataDir}/postgresql.conf" - echo "vault.getkey_script = '${vaultGetKey}'" >> "${newDataDir}/postgresql.conf"; - echo "pgsodium.getkey_script = '${vaultGetKey}'" >> "${newDataDir}/postgresql.conf"; - ${newPostgresql}/bin/pg_upgrade --old-datadir "${oldDataDir}" --new-datadir "${newDataDir}" \ - --old-bindir "${oldPostgresql}/bin" --new-bindir "${newPostgresql}/bin" - else - echo "${newDataDir} already exists" - fi - ''; }; - systemd.services.postgresql = { - after = [ "postgresql-migrate.service" ]; - requires = [ "postgresql-migrate.service" ]; + specialisation.postgresql17.configuration = { + systemd.services.postgresql-migrate = { + script = pkgs.lib.mkForce ( + let + oldPostgresql = psql_15; + newPostgresql = psql_17; + oldDataDir = "${builtins.dirOf config.services.postgresql.dataDir}/${oldPostgresql.psqlSchema}"; + newDataDir = "${builtins.dirOf config.services.postgresql.dataDir}/${newPostgresql.psqlSchema}"; + in + '' + if [[ ! -d ${newDataDir} ]]; then + install -d -m 0700 -o postgres -g postgres "${newDataDir}" + ${newPostgresql}/bin/initdb -D "${newDataDir}" + echo "shared_preload_libraries = '${pname},pgsodium'" >> "${newDataDir}/postgresql.conf" + echo "vault.getkey_script = '${vaultGetKey}'" >> "${newDataDir}/postgresql.conf"; + echo "pgsodium.getkey_script = '${vaultGetKey}'" >> "${newDataDir}/postgresql.conf"; + ${newPostgresql}/bin/pg_upgrade --old-datadir "${oldDataDir}" --new-datadir "${newDataDir}" \ + --old-bindir "${oldPostgresql}/bin" --new-bindir "${newPostgresql}/bin" + else + echo "${newDataDir} already exists" + fi + '' + ); + }; }; - }; - }; + } + ]; testScript = { nodes, ... }: let @@ -139,17 +76,17 @@ self.inputs.nixpkgs.lib.nixos.runTest { '' from pathlib import Path versions = { - "15": [${lib.concatStringsSep ", " (map (s: ''"${s}"'') (versions "15"))}], - "17": [${lib.concatStringsSep ", " (map (s: ''"${s}"'') (versions "17"))}], + "15": [${pkgs.lib.concatStringsSep ", " (map (s: ''"${s}"'') (versions "15"))}], + "17": [${pkgs.lib.concatStringsSep ", " (map (s: ''"${s}"'') (versions "17"))}], } extension_name = "${pname}" support_upgrade = True pg17_configuration = "${pg17-configuration}" ext_has_background_worker = ${ - if (installedExtension "15") ? hasBackgroundWorker then "True" else "False" + if (testLib.installedExtension "15") ? hasBackgroundWorker then "True" else "False" } sql_test_directory = Path("${../../tests}") - pg_regress_test_name = "${(installedExtension "15").pgRegressTestName or pname}" + pg_regress_test_name = "${(testLib.installedExtension "15").pgRegressTestName or pname}" ${builtins.readFile ./lib.py}