tests: Redirect diag() to stdout by default

Currently our perl tests use Test::More, which sends diag() messages
to stderr, including when reporting why a test failed.

Our 'runtests' harness from c-tap-harness discards stderr from test
programs, unless we run in single-test mode (-o). As a result, when we
run tests with 'runtests -v' and a test fails, we can't see any
diagnostic information if the test was using perl's Test::More,
including why a test failed. If the test is written in C using
c-tap-harness bindings, diag() goes to stdout, and this problem
doesn't happen.

To make sure we can see diag() messages from perl tests, change the
default behavior for Test::More to print diag() messages to stdout,
where they will be read by 'runtests' and shown by 'runtests -v'.  The
diag messages are still discarded when running in non-v (and non-o)
mode.

Change-Id: I971a61cb9c83e85949ba6adf9af0ee54b0b23680
Reviewed-on: https://gerrit.openafs.org/15734
Tested-by: Andrew Deason <adeason@sinenomine.net>
Reviewed-by: Michael Meffie <mmeffie@sinenomine.net>
This commit is contained in:
Andrew Deason 2024-04-09 15:31:13 -05:00 committed by Michael Meffie
parent ff817eca28
commit 4db3775c0f

View File

@ -25,6 +25,17 @@ require Exporter;
our @ISA = qw(Exporter);
our @EXPORT_OK = qw(src_path obj_path);
use Test::More;
# Make Test::More print diag() messages to stdout, instead of stderr.
# Historically, diag() from Test::More prints to stderr, but diag() from
# c-tap-harness prints to stdout as part of the TAP stream. Running
# 'runtests -v' ignores stderr, so by default any perl diag()s are lost. Change
# the default behavior to diag() to stdout, so we can see diagnostics in
# 'runtests -v' when tests fail.
my $tb = Test::More->builder;
$tb->failure_output($tb->output);
sub
x_path($;$)
{