Re: [HACKERS] Testlib.pm vs msys - Mailing list pgsql-hackers
From | Tom Lane |
---|---|
Subject | Re: [HACKERS] Testlib.pm vs msys |
Date | |
Msg-id | 7398.1501081973@sss.pgh.pa.us Whole thread Raw |
In response to | Re: [HACKERS] Testlib.pm vs msys (Andrew Dunstan <andrew.dunstan@2ndquadrant.com>) |
Responses |
Re: [HACKERS] Testlib.pm vs msys
|
List | pgsql-hackers |
Andrew Dunstan <andrew.dunstan@2ndquadrant.com> writes: > On 07/26/2017 09:33 AM, Tom Lane wrote: >> It might be interesting to look into its copy of IPC::Run and see if >> the wait technology is different from later versions. > It's using 0.94 just like my Linux box. Oh well, I hoped maybe we could update that. >> I still find this pretty ugly :-(. > I'm open to alternative suggestions. But I don't want to spend a heck of > a lot of time on this. Well, let's at least do the temp files a little more safely. Maybe like this? regards, tom lane 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..758c920 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,24 @@ sub command_like like($stdout, $expected_stdout, "$test_name: matches"); } +sub command_like_safe +{ + # Doesn't rely 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); + my $stdoutfile = File::Temp->new(); + my $stderrfile = File::Temp->new(); + print("# Running: " . join(" ", @{$cmd}) . "\n"); + my $result = IPC::Run::run $cmd, '>', $stdoutfile, '2>', $stderrfile; + $stdout = slurp_file($stdoutfile); + $stderr = slurp_file($stderrfile); + 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
pgsql-hackers by date: