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:

Previous
From: Amit Khandekar
Date:
Subject: Re: [HACKERS] UPDATE of partition key
Next
From: Shubham Barai
Date:
Subject: [HACKERS] GSoC 2017: weekly progress reports (week 8)