diff --git a/nix/ext/tests/default.nix b/nix/ext/tests/default.nix index facd250f6..93759b39a 100644 --- a/nix/ext/tests/default.nix +++ b/nix/ext/tests/default.nix @@ -10,6 +10,10 @@ let let pname = extension_name; inherit (pkgs) lib; + + support_upgrade = if pname == "pg_repack" then false else true; + run_pg_regress = if pname == "pg_repack" then false else true; + installedExtension = postgresMajorVersion: self.packages.${pkgs.system}."psql_${postgresMajorVersion}/exts/${pname}-all"; versions = postgresqlMajorVersion: (installedExtension postgresqlMajorVersion).versions; @@ -148,7 +152,7 @@ let extension_name = "${pname}" pg17_configuration = "${pg17-configuration}" ext_has_background_worker = ${ - if (installedExtension "15") ? hasBackgroundWorker then "True" else "False" + if support_upgrade && (installedExtension "15") ? hasBackgroundWorker then "True" else "False" } sql_test_directory = Path("${../../tests}") pg_regress_test_name = "${(installedExtension "15").pgRegressTestName or pname}" @@ -160,24 +164,40 @@ let server.wait_for_unit("multi-user.target") server.wait_for_unit("postgresql.service") - test = PostgresExtensionTest(server, extension_name, versions, sql_test_directory) + test = PostgresExtensionTest(server, extension_name, versions, sql_test_directory, ${ + if support_upgrade then "True" else "False" + }) with subtest("Check upgrade path with postgresql 15"): test.check_upgrade_path("15") - with subtest("Check pg_regress with postgresql 15 after extension upgrade"): - test.check_pg_regress(Path("${psql_15}/lib/pgxs/src/test/regress/pg_regress"), "15", pg_regress_test_name) + ${ + if run_pg_regress then + '' + with subtest("Check pg_regress with postgresql 15 after extension upgrade"): + test.check_pg_regress(Path("${psql_15}/lib/pgxs/src/test/regress/pg_regress"), "15", pg_regress_test_name) + '' + else + "" + } last_version = None with subtest("Check the install of the last version of the extension"): last_version = test.check_install_last_version("15") - if ext_has_background_worker: - with subtest("Test switch_${pname}_version"): - test.check_switch_extension_with_background_worker(Path("${psql_15}/lib/${pname}.so"), "15") + ${ + if support_upgrade then + '' + if ext_has_background_worker: + with subtest("Test switch_${pname}_version"): + test.check_switch_extension_with_background_worker(Path("${psql_15}/lib/${pname}.so"), "15") - with subtest("Check pg_regress with postgresql 15 after installing the last version"): - test.check_pg_regress(Path("${psql_15}/lib/pgxs/src/test/regress/pg_regress"), "15", pg_regress_test_name) + with subtest("Check pg_regress with postgresql 15 after installing the last version"): + test.check_pg_regress(Path("${psql_15}/lib/pgxs/src/test/regress/pg_regress"), "15", pg_regress_test_name) + '' + else + "" + } with subtest("switch to postgresql 17"): server.succeed( @@ -190,14 +210,21 @@ let with subtest("Check upgrade path with postgresql 17"): test.check_upgrade_path("17") - with subtest("Check pg_regress with postgresql 17 after extension upgrade"): - test.check_pg_regress(Path("${psql_17}/lib/pgxs/src/test/regress/pg_regress"), "17", pg_regress_test_name) + ${ + if run_pg_regress then + '' + with subtest("Check pg_regress with postgresql 17 after extension upgrade"): + test.check_pg_regress(Path("${psql_17}/lib/pgxs/src/test/regress/pg_regress"), "17", pg_regress_test_name) - with subtest("Check the install of the last version of the extension"): - test.check_install_last_version("17") + with subtest("Check the install of the last version of the extension"): + test.check_install_last_version("17") - with subtest("Check pg_regress with postgresql 17 after installing the last version"): - test.check_pg_regress(Path("${psql_17}/lib/pgxs/src/test/regress/pg_regress"), "17", pg_regress_test_name) + with subtest("Check pg_regress with postgresql 17 after installing the last version"): + test.check_pg_regress(Path("${psql_17}/lib/pgxs/src/test/regress/pg_regress"), "17", pg_regress_test_name) + '' + else + "" + } ''; }; in @@ -221,6 +248,7 @@ builtins.listToAttrs ( "pg_hashids" "pg_jsonschema" "pg_net" + "pg_repack" "pg_stat_monitor" "pg_tle" "pgaudit" diff --git a/nix/ext/tests/pg_repack.nix b/nix/ext/tests/pg_repack.nix deleted file mode 100644 index dae534d2e..000000000 --- a/nix/ext/tests/pg_repack.nix +++ /dev/null @@ -1,162 +0,0 @@ -{ 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; -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" ]; - }; - }; - }; - testScript = - { nodes, ... }: - let - pg17-configuration = "${nodes.server.system.build.toplevel}/specialisation/postgresql17"; - in - '' - from pathlib import Path - versions = { - "15": [${lib.concatStringsSep ", " (map (s: ''"${s}"'') (versions "15"))}], - "17": [${lib.concatStringsSep ", " (map (s: ''"${s}"'') (versions "17"))}], - } - extension_name = "${pname}" - support_upgrade = False - pg17_configuration = "${pg17-configuration}" - sql_test_directory = Path("${../../tests}") - - ${builtins.readFile ./lib.py} - - start_all() - - server.wait_for_unit("multi-user.target") - server.wait_for_unit("postgresql.service") - - test = PostgresExtensionTest(server, extension_name, versions, sql_test_directory, support_upgrade) - - with subtest("Check upgrade path with postgresql 15"): - test.check_upgrade_path("15") - - last_version = None - with subtest("Check the install of the last version of the extension"): - last_version = test.check_install_last_version("15") - - with subtest("switch to postgresql 17"): - server.succeed( - f"{pg17_configuration}/bin/switch-to-configuration test >&2" - ) - - with subtest("Check last version of the extension after upgrade"): - test.assert_version_matches(last_version) - - with subtest("Check upgrade path with postgresql 17"): - test.check_upgrade_path("17") - ''; -}