diff --git a/.cirrus.yml b/.cirrus.yml
index f31923333e..0113799a6e 100644
--- a/.cirrus.yml
+++ b/.cirrus.yml
@@ -195,6 +195,21 @@ task:
meson test $MTEST_ARGS --num-processes ${TEST_JOBS}
EOF
+ # test runningcheck, freebsd chosen because it's currently fast enough
+ test_running_script: |
+ su postgres <<-EOF
+ set -e
+ ulimit -c unlimited
+ meson test $MTEST_ARGS --quiet --suite setup
+ export LD_LIBRARY_PATH="$(pwd)/build/tmp_install/usr/local/pgsql/lib/:$LD_LIBRARY_PATH"
+ mkdir -p build/testrun
+ build/tmp_install/usr/local/pgsql/bin/initdb -N build/runningcheck --no-instructions -A trust
+ echo "include '$(pwd)/src/tools/ci/pg_ci_base.conf'" >> build/runningcheck/postgresql.conf
+ build/tmp_install/usr/local/pgsql/bin/pg_ctl -c -o '-c fsync=off' -D build/runningcheck -l build/testrun/runningcheck.log start
+ meson test $MTEST_ARGS --num-processes ${TEST_JOBS} --setup running
+ build/tmp_install/usr/local/pgsql/bin/pg_ctl -D build/runningcheck stop
+ EOF
+
on_failure:
<<: *on_failure_meson
cores_script: src/tools/ci/cores_backtrace.sh freebsd /tmp/cores
diff --git a/contrib/basic_archive/meson.build b/contrib/basic_archive/meson.build
index c30dcfa5d4..08d72598e9 100644
--- a/contrib/basic_archive/meson.build
+++ b/contrib/basic_archive/meson.build
@@ -25,5 +25,8 @@ tests += {
'regress_args': [
'--temp-config', files('basic_archive.conf'),
],
+ # Disabled because these tests require "shared_preload_libraries=basic_archive",
+ # which typical runningcheck users do not have (e.g. buildfarm clients).
+ 'runningcheck': false,
},
}
diff --git a/contrib/pg_freespacemap/meson.build b/contrib/pg_freespacemap/meson.build
index 904b37b6e9..f802e297b6 100644
--- a/contrib/pg_freespacemap/meson.build
+++ b/contrib/pg_freespacemap/meson.build
@@ -33,5 +33,8 @@ tests += {
'regress_args': [
'--temp-config', files('pg_freespacemap.conf')
],
+ # Disabled because these tests require "autovacuum=off", which
+ # typical runningcheck users do not have (e.g. buildfarm clients).
+ 'runningcheck': false,
},
}
diff --git a/contrib/pg_stat_statements/meson.build b/contrib/pg_stat_statements/meson.build
index 854df138e7..bd0e42331e 100644
--- a/contrib/pg_stat_statements/meson.build
+++ b/contrib/pg_stat_statements/meson.build
@@ -41,5 +41,9 @@ tests += {
'pg_stat_statements',
],
'regress_args': ['--temp-config', files('pg_stat_statements.conf')],
+ # Disabled because these tests require
+ # "shared_preload_libraries=pg_stat_statements", which typical
+ # runningcheck users do not have (e.g. buildfarm clients).
+ 'runningcheck': false,
},
}
diff --git a/contrib/pg_walinspect/meson.build b/contrib/pg_walinspect/meson.build
index 4314a3182a..351f184de8 100644
--- a/contrib/pg_walinspect/meson.build
+++ b/contrib/pg_walinspect/meson.build
@@ -28,6 +28,9 @@ tests += {
'sql': [
'pg_walinspect',
],
+ # Disabled because these tests require "wal_level=replica", which
+ # some runningcheck users do not have (e.g. buildfarm clients).
'regress_args': ['--temp-config', files('walinspect.conf')],
+ 'runningcheck': false,
},
}
diff --git a/contrib/test_decoding/meson.build b/contrib/test_decoding/meson.build
index 6876792fd8..65dfd3f7d8 100644
--- a/contrib/test_decoding/meson.build
+++ b/contrib/test_decoding/meson.build
@@ -43,6 +43,9 @@ tests += {
'regress_args': [
'--temp-config', files('logical.conf'),
],
+ # Disabled because these tests require "wal_level=logical", which
+ # typical runningcheck users do not have (e.g. buildfarm clients).
+ 'runningcheck': false,
},
'isolation': {
'specs': [
@@ -61,6 +64,8 @@ tests += {
'regress_args': [
'--temp-config', files('logical.conf'),
],
+ # see above
+ 'runningcheck': false,
},
'tap': {
'tests': [
diff --git a/doc/src/sgml/installation.sgml b/doc/src/sgml/installation.sgml
index 9c7f019392..f64f329044 100644
--- a/doc/src/sgml/installation.sgml
+++ b/doc/src/sgml/installation.sgml
@@ -2108,6 +2108,12 @@ ninja
detailed information about interpreting the test results. You can
repeat this test at any later time by issuing the same command.
+
+
+ To run pg_regress and pg_isolation_regress tests against a running
+ postgres instance, specify --setup running as an
+ argument to meson test.
+
diff --git a/meson.build b/meson.build
index 39fc3ddab2..3cb50c0b17 100644
--- a/meson.build
+++ b/meson.build
@@ -2920,6 +2920,20 @@ endif
# Test Generation
###############################################################
+# When using a meson version understanding exclude_suites, define a
+# 'tmp_install' test setup (the default) that excludes tests running against a
+# pre-existing install and a 'running' setup that conflicts with creation of
+# the temporary installation and tap tests (which don't support running
+# against a running server).
+
+running_suites = []
+install_suites = []
+if meson.version().version_compare('>=0.57')
+ runningcheck = true
+else
+ runningcheck = false
+endif
+
testwrap = files('src/tools/testwrap')
foreach test_dir : tests
@@ -2927,7 +2941,6 @@ foreach test_dir : tests
testwrap,
'--basedir', meson.build_root(),
'--srcdir', test_dir['sd'],
- '--testgroup', test_dir['name'],
]
foreach kind, v : test_dir
@@ -2940,55 +2953,94 @@ foreach test_dir : tests
if kind in ['regress', 'isolation', 'ecpg']
if kind == 'regress'
runner = pg_regress
+ fallback_dbname = 'regression_@0@'
elif kind == 'isolation'
runner = pg_isolation_regress
+ fallback_dbname = 'isolation_regression_@0@'
elif kind == 'ecpg'
runner = pg_regress_ecpg
+ fallback_dbname = 'ecpg_regression_@0@'
endif
- test_output = test_result_dir / test_dir['name'] / kind
+ test_group = test_dir['name']
+ test_group_running = test_dir['name'] + '-running'
- test_command = [
+ test_output = test_result_dir / test_group / kind
+ test_output_running = test_result_dir / test_group_running/ kind
+
+ # Unless specified by the test, choose a non-conflicting database name,
+ # to avoid conflicts when running against existing server.
+ dbname = t.get('dbname',
+ fallback_dbname.format(test_dir['name']))
+
+ test_command_base = [
runner.full_path(),
'--inputdir', t.get('inputdir', test_dir['sd']),
'--expecteddir', t.get('expecteddir', test_dir['sd']),
- '--outputdir', test_output,
- '--temp-instance', test_output / 'tmp_check',
'--bindir', '',
'--dlpath', test_dir['bd'],
'--max-concurrent-tests=20',
- '--port', testport.to_string(),
+ '--dbname', dbname,
] + t.get('regress_args', [])
+ test_selection = []
if t.has_key('schedule')
- test_command += ['--schedule', t['schedule'],]
+ test_selection += ['--schedule', t['schedule'],]
endif
if kind == 'isolation'
- test_command += t.get('specs', [])
+ test_selection += t.get('specs', [])
else
- test_command += t.get('sql', [])
+ test_selection += t.get('sql', [])
endif
env = test_env
env.prepend('PATH', temp_install_bindir, test_dir['bd'])
test_kwargs = {
- 'suite': [test_dir['name']],
'priority': 10,
'timeout': 1000,
'depends': test_deps + t.get('deps', []),
'env': env,
} + t.get('test_kwargs', {})
- test(test_dir['name'] / kind,
+ test(test_group / kind,
python,
- args: testwrap_base + [
+ args: [
+ testwrap_base,
+ '--testgroup', test_group,
'--testname', kind,
- '--', test_command,
+ '--',
+ test_command_base,
+ '--outputdir', test_output,
+ '--temp-instance', test_output / 'tmp_check',
+ '--port', testport.to_string(),
+ test_selection,
],
+ suite: test_group,
kwargs: test_kwargs,
)
+ install_suites += test_group
+
+ # some tests can't support running against running DB
+ if runningcheck and t.get('runningcheck', true)
+ test(test_group_running / kind,
+ python,
+ args: [
+ testwrap_base,
+ '--testgroup', test_group_running,
+ '--testname', kind,
+ '--',
+ test_command_base,
+ '--outputdir', test_output_running,
+ test_selection,
+ ],
+ is_parallel: t.get('runningcheck-parallel', true),
+ suite: test_group_running,
+ kwargs: test_kwargs,
+ )
+ running_suites += test_group_running
+ endif
testport += 1
elif kind == 'tap'
@@ -3011,9 +3063,10 @@ foreach test_dir : tests
env.set(name, value)
endforeach
+ test_group = test_dir['name']
test_kwargs = {
'protocol': 'tap',
- 'suite': [test_dir['name']],
+ 'suite': test_group,
'timeout': 1000,
'depends': test_deps + t.get('deps', []),
'env': env,
@@ -3033,12 +3086,14 @@ foreach test_dir : tests
python,
kwargs: test_kwargs,
args: testwrap_base + [
+ '--testgroup', test_dir['name'],
'--testname', onetap_p,
'--', test_command,
test_dir['sd'] / onetap,
],
)
endforeach
+ install_suites += test_group
else
error('unknown kind @0@ of test in @1@'.format(kind, test_dir['sd']))
endif
@@ -3047,6 +3102,14 @@ foreach test_dir : tests
endforeach # directories with tests
+# repeat condition so meson realizes version dependency
+if meson.version().version_compare('>=0.57')
+ add_test_setup('tmp_install',
+ is_default: true,
+ exclude_suites: running_suites)
+ add_test_setup('running',
+ exclude_suites: ['setup'] + install_suites)
+endif
###############################################################
diff --git a/src/interfaces/ecpg/test/meson.build b/src/interfaces/ecpg/test/meson.build
index 94b26d1031..d4f1f1c0fc 100644
--- a/src/interfaces/ecpg/test/meson.build
+++ b/src/interfaces/ecpg/test/meson.build
@@ -84,6 +84,7 @@ tests += {
'test_kwargs': {
'depends': ecpg_test_dependencies,
},
+ 'dbname': 'ecpg1_regression,ecpg2_regression',
'regress_args': ecpg_regress_args,
},
}
diff --git a/src/test/isolation/meson.build b/src/test/isolation/meson.build
index e2ed400a80..a999791876 100644
--- a/src/test/isolation/meson.build
+++ b/src/test/isolation/meson.build
@@ -67,5 +67,6 @@ tests += {
'priority': 40,
'timeout': 1000,
},
+ 'dbname': 'isolation_regression',
},
}
diff --git a/src/test/modules/commit_ts/meson.build b/src/test/modules/commit_ts/meson.build
index 60cb12164d..fa86e70e88 100644
--- a/src/test/modules/commit_ts/meson.build
+++ b/src/test/modules/commit_ts/meson.build
@@ -6,6 +6,9 @@ tests += {
'sql': [
'commit_timestamp',
],
+ # Disabled because these tests require "track_commit_timestamp = on",
+ # which typical runningcheck users do not have (e.g. buildfarm clients).
+ 'runningcheck': false,
},
'tap': {
'tests': [
diff --git a/src/test/modules/snapshot_too_old/meson.build b/src/test/modules/snapshot_too_old/meson.build
index efd3f1f113..5094b52949 100644
--- a/src/test/modules/snapshot_too_old/meson.build
+++ b/src/test/modules/snapshot_too_old/meson.build
@@ -10,5 +10,8 @@ tests += {
'sto_using_hash_index',
],
'regress_args': ['--temp-config', files('sto.conf')],
+ # Disabled because these tests require "old_snapshot_threshold" >= 0, which
+ # typical runningcheck users do not have (e.g. buildfarm clients).
+ 'runningcheck': false,
},
}
diff --git a/src/test/modules/test_oat_hooks/meson.build b/src/test/modules/test_oat_hooks/meson.build
index 8802bbbac5..e9d09d92c3 100644
--- a/src/test/modules/test_oat_hooks/meson.build
+++ b/src/test/modules/test_oat_hooks/meson.build
@@ -25,5 +25,6 @@ tests += {
'test_oat_hooks',
],
'regress_args': ['--no-locale', '--encoding=UTF8'],
+ 'runningcheck': false,
},
}
diff --git a/src/test/modules/test_pg_dump/meson.build b/src/test/modules/test_pg_dump/meson.build
index 41021829f3..73f1fcf942 100644
--- a/src/test/modules/test_pg_dump/meson.build
+++ b/src/test/modules/test_pg_dump/meson.build
@@ -13,6 +13,8 @@ tests += {
'sql': [
'test_pg_dump',
],
+ # doesn't delete its user
+ 'runningcheck': false,
},
'tap': {
'tests': [
diff --git a/src/test/modules/test_slru/meson.build b/src/test/modules/test_slru/meson.build
index ca4633c793..74dacd11ac 100644
--- a/src/test/modules/test_slru/meson.build
+++ b/src/test/modules/test_slru/meson.build
@@ -31,5 +31,6 @@ tests += {
'test_slru',
],
'regress_args': ['--temp-config', files('test_slru.conf')],
+ 'runningcheck': false,
},
}
diff --git a/src/test/modules/worker_spi/meson.build b/src/test/modules/worker_spi/meson.build
index a4a158c75b..660d721eea 100644
--- a/src/test/modules/worker_spi/meson.build
+++ b/src/test/modules/worker_spi/meson.build
@@ -30,6 +30,8 @@ tests += {
'sql': [
'worker_spi',
],
- 'regress_args': ['--temp-config', files('dynamic.conf'), '--dbname=contrib_regression'],
+ 'dbname': 'contrib_regression',
+ 'regress_args': ['--temp-config', files('dynamic.conf')],
+ 'runningcheck': false,
},
}
diff --git a/src/test/regress/meson.build b/src/test/regress/meson.build
index 72a23737fa..fbca624948 100644
--- a/src/test/regress/meson.build
+++ b/src/test/regress/meson.build
@@ -75,5 +75,6 @@ tests += {
'priority': 50,
'timeout': 1000,
},
+ 'dbname': 'regression',
},
}