From 4db3775c0fa2ac78abea8844b73247fb55af57ef Mon Sep 17 00:00:00 2001 From: Andrew Deason Date: Tue, 9 Apr 2024 15:31:13 -0500 Subject: [PATCH] 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 Reviewed-by: Michael Meffie --- tests/tests-lib/perl5/afstest.pm | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/tests/tests-lib/perl5/afstest.pm b/tests/tests-lib/perl5/afstest.pm index b2ee9bcdf6..544b9c9777 100644 --- a/tests/tests-lib/perl5/afstest.pm +++ b/tests/tests-lib/perl5/afstest.pm @@ -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($;$) {