From: Justin Pryzby Date: Tue, 18 Jan 2022 17:48:37 -0600 Subject: [PATCH 8/8] vcregress: run alltaptests in parallel The test changes are needed to avoid these failures: https://github.com/justinpryzby/postgres/runs/5174636590 [15:59:59.408] Bailout called. Further testing stopped: could not create test directory "c:/cirrus/tmp_check/t_C:\cirrus\src\bin\pgbench\t\002_pgbench_no_server_stuff": Invalid argument [15:59:59.408] FAILED--Further testing stopped: could not create test directory "c:/cirrus/tmp_check/t_C:\cirrus\src\bin\pgbench\t\002_pgbench_no_server_stuff": Invalid argument https://github.com/justinpryzby/postgres/runs/5174788205 [16:37:09.891] # Failed test 'reading traces/disallowed_in_pipeline.trace: could not open "traces/disallowed_in_pipeline.trace": The system cannot find the path specified at C:\cirrus\src\test\modules\libpq_pipeline\t\001_libpq_pipeline.pl line 70. https://github.com/justinpryzby/postgres/runs/5174877506 pg_regress: could not open file "../regress/parallel_schedule" for reading: No such file or directory XXX: avoid breaking src/bin/psql/t/010_tab_completion.pl Should pass the srcdir to all taptests, or go back to writing the results to tmp_check ? See also: f4ce6c4d3a30ec3a12c7f64b90a6fc82887ddd7b 795862c280c5949bafcd8c44543d887fd32b590a db973ffb3ca43e65a0bf15175a35184a53bf977d --- src/bin/pgbench/t/002_pgbench_no_server.pl | 4 ++-- .../libpq_pipeline/t/001_libpq_pipeline.pl | 5 ++++- src/test/recovery/t/027_stream_regress.pl | 4 ++-- src/tools/msvc/vcregress.pl | 16 +++++----------- 4 files changed, 13 insertions(+), 16 deletions(-) diff --git a/src/bin/pgbench/t/002_pgbench_no_server.pl b/src/bin/pgbench/t/002_pgbench_no_server.pl index acad19edd0c..84e36dcd3fe 100644 --- a/src/bin/pgbench/t/002_pgbench_no_server.pl +++ b/src/bin/pgbench/t/002_pgbench_no_server.pl @@ -8,12 +8,12 @@ use strict; use warnings; +use File::Basename; use PostgreSQL::Test::Utils; use Test::More; # create a directory for scripts -my $testname = $0; -$testname =~ s,.*/,,; +my $testname = basename($0); $testname =~ s/\.pl$//; my $testdir = "$PostgreSQL::Test::Utils::tmp_check/t_${testname}_stuff"; diff --git a/src/test/modules/libpq_pipeline/t/001_libpq_pipeline.pl b/src/test/modules/libpq_pipeline/t/001_libpq_pipeline.pl index 0c164dcaba5..facfec5cad4 100644 --- a/src/test/modules/libpq_pipeline/t/001_libpq_pipeline.pl +++ b/src/test/modules/libpq_pipeline/t/001_libpq_pipeline.pl @@ -49,7 +49,10 @@ for my $testname (@tests) my $expected; my $result; - $expected = slurp_file_eval("traces/$testname.trace"); + # Hack to allow TESTDIR=. during parallel tap tests + my $inputdir = "$ENV{'TESTDIR'}/src/test/modules/libpq_pipeline"; + $inputdir = "$ENV{'TESTDIR'}" if ! -e $inputdir; + $expected = slurp_file_eval("$inputdir/traces/$testname.trace"); next unless $expected ne ""; $result = slurp_file_eval($traceout); next unless $result ne ""; diff --git a/src/test/recovery/t/027_stream_regress.pl b/src/test/recovery/t/027_stream_regress.pl index c0aae707ea1..4b84e3e78f5 100644 --- a/src/test/recovery/t/027_stream_regress.pl +++ b/src/test/recovery/t/027_stream_regress.pl @@ -58,9 +58,9 @@ system_or_bail($ENV{PG_REGRESS} . " $extra_opts " . "--bindir= " . "--host=" . $node_primary->host . " " . "--port=" . $node_primary->port . " " . - "--schedule=../regress/parallel_schedule " . + "--schedule=\"$dlpath/parallel_schedule\" " . "--max-concurrent-tests=20 " . - "--inputdir=../regress " . + "--inputdir=\"$dlpath\" " . "--outputdir=\"$outputdir\""); # Clobber all sequences with their next value, so that we don't have diff --git a/src/tools/msvc/vcregress.pl b/src/tools/msvc/vcregress.pl index 4572db8eca4..b178713b911 100644 --- a/src/tools/msvc/vcregress.pl +++ b/src/tools/msvc/vcregress.pl @@ -299,8 +299,6 @@ sub alltaptests { InstallTemp(); - my $mstat = 0; - # Find out all the existing TAP tests by looking for t/ directories # in the tree. my @tap_dirs = (); @@ -314,15 +312,11 @@ sub alltaptests }, @top_dir); - $ENV{REGRESS_OUTPUTDIR} = "$topdir/src/test/recovery/tmp_check"; - # Process each test - foreach my $test_path (@tap_dirs) - { - my $dir = dirname($test_path); - my $status = tap_check($dir); - $mstat ||= $status; - } - exit $mstat if $mstat; + # Run all the tap tests in a single prove instance for good performance + $ENV{REGRESS_OUTPUTDIR} = "$topdir/src/test/recovery/tmp_check"; # For recovery check + $ENV{PROVE_TESTS} = "@tap_dirs"; + my $status = tap_check('PROVE_FLAGS=--ext=.pl', "$topdir"); + exit $status if $status; return; } -- 2.17.1 --4e5ZDkbgLEOfWmLx--