On 07/25/2017 02:45 PM, Andrew Dunstan wrote: >> Anyway, if we believe that it broke with f13ea95f9, hen it's plausible >> that CMD.EXE has been sharing pg_ctl's stdout/stderr all along, and we >> just had not noticed before. Could you check what happens if we >> change the bInheritHandles parameter as I suggested upthread? >> >> > > I'll try when I get all the animals caught up. >
This made no difference. And I'm not really surprised, since the test is not hanging when run from an MSVC build. The latter fact makes me theorize that the problem arises from the fairly ancient perl that Msys provides, and which we need to use to run prove so the TAP tests understand the environment's virtualized file paths. The attached patch should get around the problem without upsetting the good work you've been doing in reducing TAP test times generally. cheers andrew -- Andrew Dunstan https://www.2ndQuadrant.com PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
diff --git a/src/bin/pg_ctl/t/001_start_stop.pl b/src/bin/pg_ctl/t/001_start_stop.pl index 9c3551f..3acc80e 100644 --- a/src/bin/pg_ctl/t/001_start_stop.pl +++ b/src/bin/pg_ctl/t/001_start_stop.pl @@ -32,9 +32,17 @@ else print $conf "listen_addresses = '127.0.0.1'\n"; } close $conf; -command_like([ 'pg_ctl', 'start', '-D', "$tempdir/data", - '-l', "$TestLib::log_path/001_start_stop_server.log" ], - qr/done.*server started/s, 'pg_ctl start'); +my $ctlcmd = [ 'pg_ctl', 'start', '-D', "$tempdir/data", + '-l', "$TestLib::log_path/001_start_stop_server.log" ]; +if ($Config{osname} ne 'msys') +{ + command_like($ctlcmd, qr/done.*server started/s, 'pg_ctl start'); +} +else +{ + # use the version of command_like that doesn't hang on Msys here + command_like_safe($ctlcmd, qr/done.*server started/s, 'pg_ctl start'); +} # sleep here is because Windows builds can't check postmaster.pid exactly, # so they may mistake a pre-existing postmaster.pid for one created by the diff --git a/src/test/perl/TestLib.pm b/src/test/perl/TestLib.pm index fe09689..a2df156 100644 --- a/src/test/perl/TestLib.pm +++ b/src/test/perl/TestLib.pm @@ -37,6 +37,7 @@ our @EXPORT = qw( program_version_ok program_options_handling_ok command_like + command_like_safe command_fails_like $windows_os @@ -300,6 +301,23 @@ sub command_like like($stdout, $expected_stdout, "$test_name: matches"); } +sub command_like_safe +{ + # Doesn't rely on on detecting end of file on the file descriptors, + # which can fail, causing the process to hang, notably on Msys + # when used with 'pg_ctl start' + my ($cmd, $expected_stdout, $test_name) = @_; + my ($stdout, $stderr); + print("# Running: " . join(" ", @{$cmd}) . "\n"); + my $result = IPC::Run::run $cmd, '>', 'stdout.txt', '2>', 'stderr.txt'; + $stdout = slurp_file('stdout.txt'); + $stderr = slurfp_file('stderr.txt'); + unlink 'stdout.txt','stderr.txt'; + ok($result, "$test_name: exit code 0"); + is($stderr, '', "$test_name: no stderr"); + like($stdout, $expected_stdout, "$test_name: matches"); +} + sub command_fails_like { my ($cmd, $expected_stderr, $test_name) = @_;
-- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers