summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Eisentraut2024-02-15 08:52:08 +0000
committerPeter Eisentraut2024-02-15 09:29:18 +0000
commit995d400ceca3e552f84fe19f150fb03327bdc0c2 (patch)
treeb6f6f325730be3374c7aad55f4ebb01244f17ba0
parent9bc1eee988c31e66a27e007d41020664df490214 (diff)
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 <[email protected]> Discussion: https://www.postgresql.org/message-id/flat/d4d2ad9f-1c1d-47a1-bb4d-c10a747d4f15%40eisentraut.org
-rw-r--r--doc/src/sgml/regress.sgml34
-rw-r--r--src/test/perl/PostgreSQL/Test/Cluster.pm7
-rw-r--r--src/test/regress/pg_regress.c7
3 files changed, 40 insertions, 8 deletions
diff --git a/doc/src/sgml/regress.sgml b/doc/src/sgml/regress.sgml
index 70d9bdefe1b..6a27aae3195 100644
--- a/doc/src/sgml/regress.sgml
+++ b/doc/src/sgml/regress.sgml
@@ -390,12 +390,37 @@ make check LANG=C ENCODING=EUC_JP
<title>Custom Server Settings</title>
<para>
- Custom server settings to use when running a regression test suite can be
+ There are several ways to use custom server settings when running a test
+ suite. This can be useful to enable additional logging, adjust resource
+ limits, or enable extra run-time checks such as <xref
+ linkend="guc-debug-discard-caches"/>. But note that not all tests can be
+ expected to pass cleanly with arbitrary settings.
+ </para>
+
+ <para>
+ Extra options can be passed to the various <command>initdb</command>
+ commands that are run internally during test setup using the environment
+ variable <envar>PG_TEST_INITDB_EXTRA_OPTS</envar>. For example, to run a
+ test with checksums enabled and a custom WAL segment size and
+ <varname>work_mem</varname> setting, use:
+<screen>
+make check PG_TEST_INITDB_EXTRA_OPTS='-k --wal-segsize=4 -c work_mem=50MB'
+</screen>
+ </para>
+
+ <para>
+ For the core regression test suite and other tests driven by
+ <command>pg_regress</command>, custom run-time server settings can also be
set in the <varname>PGOPTIONS</varname> environment variable (for settings
- that allow this):
+ that allow this), for example:
<screen>
make check PGOPTIONS="-c debug_parallel_query=regress -c work_mem=50MB"
</screen>
+ (This makes use of functionality provided by libpq; see <xref
+ linkend="libpq-connect-options"/> for details.)
+ </para>
+
+ <para>
When running against a temporary installation, custom settings can also be
set by supplying a pre-written <filename>postgresql.conf</filename>:
<screen>
@@ -405,11 +430,6 @@ make check EXTRA_REGRESS_OPTS="--temp-config=test_postgresql.conf"
</screen>
</para>
- <para>
- This can be useful to enable additional logging, adjust resource limits,
- or enable extra run-time checks such as <xref
- linkend="guc-debug-discard-caches"/>.
- </para>
</sect2>
<sect2 id="regress-run-extra-tests">
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))