meson: Add 'running' test setup, as a replacement for installcheck
To run all tests that support running against existing server: $ meson test --setup running To run just the main pg_regress tests against existing server: $ meson test --setup running regress-running/regress To ensure the 'running' setup continues to work, test it as part of the freebsd CI task. Discussion: https://postgr.es/m/CAH2-Wz=XDQcmLoo7RR_i6FKQdDmcyb9q5gStnfuuQXrOGhB2sQ@mail.gmail.com
This commit is contained in:
parent
8305629afe
commit
3f0e786ccb
15
.cirrus.yml
15
.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
|
||||
|
|
|
@ -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,
|
||||
},
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
},
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
},
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
},
|
||||
}
|
||||
|
|
|
@ -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': [
|
||||
|
|
|
@ -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.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
To run pg_regress and pg_isolation_regress tests against a running
|
||||
postgres instance, specify <userinput>--setup running</userinput> as an
|
||||
argument to <userinput>meson test</userinput>.
|
||||
</para>
|
||||
</step>
|
||||
|
||||
<step id="meson-install">
|
||||
|
|
91
meson.build
91
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
|
||||
|
||||
|
||||
###############################################################
|
||||
|
|
|
@ -84,6 +84,7 @@ tests += {
|
|||
'test_kwargs': {
|
||||
'depends': ecpg_test_dependencies,
|
||||
},
|
||||
'dbname': 'ecpg1_regression,ecpg2_regression',
|
||||
'regress_args': ecpg_regress_args,
|
||||
},
|
||||
}
|
||||
|
|
|
@ -67,5 +67,6 @@ tests += {
|
|||
'priority': 40,
|
||||
'timeout': 1000,
|
||||
},
|
||||
'dbname': 'isolation_regression',
|
||||
},
|
||||
}
|
||||
|
|
|
@ -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': [
|
||||
|
|
|
@ -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,
|
||||
},
|
||||
}
|
||||
|
|
|
@ -25,5 +25,6 @@ tests += {
|
|||
'test_oat_hooks',
|
||||
],
|
||||
'regress_args': ['--no-locale', '--encoding=UTF8'],
|
||||
'runningcheck': false,
|
||||
},
|
||||
}
|
||||
|
|
|
@ -13,6 +13,8 @@ tests += {
|
|||
'sql': [
|
||||
'test_pg_dump',
|
||||
],
|
||||
# doesn't delete its user
|
||||
'runningcheck': false,
|
||||
},
|
||||
'tap': {
|
||||
'tests': [
|
||||
|
|
|
@ -31,5 +31,6 @@ tests += {
|
|||
'test_slru',
|
||||
],
|
||||
'regress_args': ['--temp-config', files('test_slru.conf')],
|
||||
'runningcheck': false,
|
||||
},
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
},
|
||||
}
|
||||
|
|
|
@ -75,5 +75,6 @@ tests += {
|
|||
'priority': 50,
|
||||
'timeout': 1000,
|
||||
},
|
||||
'dbname': 'regression',
|
||||
},
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue