From 995d400ceca3e552f84fe19f150fb03327bdc0c2 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Thu, 15 Feb 2024 09:52:08 +0100 Subject: Allow passing extra options to initdb for tests Setting the environment variable PG_TEST_INITDB_EXTRA_OPTS passes extra options to initdb run by pg_regress or PostgreSQL::Test::Cluster's init. This can be useful for a wide variety of uses, like running all tests with checksums enabled, or with JIT enabled, or with different GUC settings, or with different locale settings. (Not all tests are going to pass with arbitrary options, but it is useful to run this against specific test suites.) Reviewed-by: Ian Lawrence Barwick Discussion: https://www.postgresql.org/message-id/flat/d4d2ad9f-1c1d-47a1-bb4d-c10a747d4f15%40eisentraut.org --- src/test/perl/PostgreSQL/Test/Cluster.pm | 7 +++++++ src/test/regress/pg_regress.c | 7 ++++++- 2 files changed, 13 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/test/perl/PostgreSQL/Test/Cluster.pm b/src/test/perl/PostgreSQL/Test/Cluster.pm index e2e70d0dbf9..07da74cf562 100644 --- a/src/test/perl/PostgreSQL/Test/Cluster.pm +++ b/src/test/perl/PostgreSQL/Test/Cluster.pm @@ -114,6 +114,7 @@ use Socket; use Test::More; use PostgreSQL::Test::Utils (); use PostgreSQL::Test::BackgroundPsql (); +use Text::ParseWords qw(shellwords); use Time::HiRes qw(usleep); use Scalar::Util qw(blessed); @@ -519,6 +520,12 @@ sub init $params{allows_streaming} = 0 unless defined $params{allows_streaming}; $params{has_archiving} = 0 unless defined $params{has_archiving}; + my $initdb_extra_opts_env = $ENV{PG_TEST_INITDB_EXTRA_OPTS}; + if (defined $initdb_extra_opts_env) + { + push @{ $params{extra} }, shellwords($initdb_extra_opts_env); + } + mkdir $self->backup_dir; mkdir $self->archive_dir; diff --git a/src/test/regress/pg_regress.c b/src/test/regress/pg_regress.c index c894005dac0..f1f6011ae0a 100644 --- a/src/test/regress/pg_regress.c +++ b/src/test/regress/pg_regress.c @@ -2306,6 +2306,7 @@ regression_main(int argc, char *argv[], const char *keywords[4]; const char *values[4]; PGPing rv; + const char *initdb_extra_opts_env; /* * Prepare the temp instance @@ -2327,6 +2328,8 @@ regression_main(int argc, char *argv[], if (!directory_exists(buf)) make_directory(buf); + initdb_extra_opts_env = getenv("PG_TEST_INITDB_EXTRA_OPTS"); + initStringInfo(&cmd); /* @@ -2339,7 +2342,7 @@ regression_main(int argc, char *argv[], * duplicate it until we require perl at build time. */ initdb_template_dir = getenv("INITDB_TEMPLATE"); - if (initdb_template_dir == NULL || nolocale || debug) + if (initdb_template_dir == NULL || nolocale || debug || initdb_extra_opts_env) { note("initializing database system by running initdb"); @@ -2352,6 +2355,8 @@ regression_main(int argc, char *argv[], appendStringInfoString(&cmd, " --debug"); if (nolocale) appendStringInfoString(&cmd, " --no-locale"); + if (initdb_extra_opts_env) + appendStringInfo(&cmd, " %s", initdb_extra_opts_env); appendStringInfo(&cmd, " > \"%s/log/initdb.log\" 2>&1", outputdir); fflush(NULL); if (system(cmd.data)) -- cgit v1.2.3