Re: Improving log capture of TAP tests with IPC::Run

From: Heikki Linnakangas <hlinnaka(at)iki(dot)fi>
To: Michael Paquier <michael(dot)paquier(at)gmail(dot)com>
Cc: PostgreSQL mailing lists <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: Improving log capture of TAP tests with IPC::Run
Date: 2015-07-08 15:49:25
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-hackers

On 07/08/2015 11:26 AM, Michael Paquier wrote:
> On Wed, Jul 8, 2015 at 6:10 AM, Heikki Linnakangas <hlinnaka(at)iki(dot)fi> wrote:
>> * whenever a test case is reported as success/fail.
> Just to be sure, does this concern the "ok/not ok" messages printed
> out by each test run? Or is it a custom message that you have in mind?

Right. It would be nice to have the same output that's printed to the
console also in the log.

>> Looking at the manual page of Test::More, it looks like you could change
>> where the perl script's STDOUT and STDERR point to, because Test::More takes
>> a copy of them (when? at program startup I guess..). That would be much more
>> convenient than decorating every run call with ">> logfile".
> Hm. There are two types of logs we want to capture:
> 1) stdout and stderr from the subprocesses kicked by IPC::Run::run
> 2) Status messages written in the log file by the process running the tests.
> Perhaps we could redirect the output of stdout and stderr but I think
> that this is going to need an fd open from the beginning of the test
> until the end, with something like that:
> open my $test_logfile_fd, '>>', $test_logfile;
> *STDOUT = $test_logfile_fd;
> *STDERR = $test_logfile_fd;
> While that would work on OSX and Linux for sure, I suspect that this
> will not on Windows where two concurrent processes cannot write to the
> same file.

Hmm, as long as you make sure all the processes use the same filehandle,
rather than open the log file separately, I think it should work. But
it's Windows, so who knows..

I came up with the attached, which does that. It also plays some tricks
with perl "tie", to copy the "ok - ..." lines that go to the console, to
the log.

I tried to test that on my Windows system, but I don't have IPC::Run
installed. How did you get that on Windows? Can you test this?

> Also, the output can be correctly captured by just
> appending that to a couple of places:
> [ '>>', $test_logfile, '2>&1']
> And this solution proves to work as well on Windows...

Yeah, but that's tedious.

- Heikki

Attachment Content-Type Size
improve-TAP-logging-2.patch text/x-diff 18.1 KB

In response to


Browse pgsql-hackers by date

  From Date Subject
Next Message Corey Huinker 2015-07-08 15:51:26 Re: dblink: add polymorphic functions.
Previous Message Jim Nasby 2015-07-08 15:41:08 Re: Determine operator from it's function