From f3503cb0f6ffe19c03c731b4b6069f26584917b4 Mon Sep 17 00:00:00 2001 From: Richard Levitte Date: Wed, 11 Sep 2019 11:02:24 +0200 Subject: [PATCH] util/perl/OpenSSL/Test.pm: Disable stdout/stderr redirection on non-verbosity ... except on VMS, where output from executed programs doesn't seem to be captured properly by Test::Harness or TAP::Harness. Reviewed-by: Matt Caswell (Merged from https://github.com/openssl/openssl/pull/9862) --- util/perl/OpenSSL/Test.pm | 49 +++++++++++++++++++++++++-------------- 1 file changed, 31 insertions(+), 18 deletions(-) diff --git a/util/perl/OpenSSL/Test.pm b/util/perl/OpenSSL/Test.pm index cf7502b0a6..9f72b66822 100644 --- a/util/perl/OpenSSL/Test.pm +++ b/util/perl/OpenSSL/Test.pm @@ -446,16 +446,21 @@ sub run { die "OpenSSL::Test::run(): statusvar value not a scalar reference" if $opts{statusvar} && ref($opts{statusvar}) ne "SCALAR"; - # In non-verbose, we want to shut up the command interpreter, in case - # it has something to complain about. On VMS, it might complain both - # on stdout and stderr + # For some reason, program output, or even output from this function + # somehow isn't caught by TAP::Harness (TAP::Parser?) on VMS, so we're + # silencing it specifically there until further notice. my $save_STDOUT; my $save_STDERR; - if ($ENV{HARNESS_ACTIVE} && !$ENV{HARNESS_VERBOSE}) { - open $save_STDOUT, '>&', \*STDOUT or die "Can't dup STDOUT: $!"; - open $save_STDERR, '>&', \*STDERR or die "Can't dup STDERR: $!"; - open STDOUT, ">", devnull(); - open STDERR, ">", devnull(); + if ($^O eq 'VMS') { + # In non-verbose, we want to shut up the command interpreter, in case + # it has something to complain about. On VMS, it might complain both + # on stdout and stderr + if ($ENV{HARNESS_ACTIVE} && !$ENV{HARNESS_VERBOSE}) { + open $save_STDOUT, '>&', \*STDOUT or die "Can't dup STDOUT: $!"; + open $save_STDERR, '>&', \*STDERR or die "Can't dup STDERR: $!"; + open STDOUT, ">", devnull(); + open STDERR, ">", devnull(); + } } $ENV{HARNESS_OSSL_LEVEL} = $level + 1; @@ -489,16 +494,21 @@ sub run { ${$opts{statusvar}} = $r; } - if ($ENV{HARNESS_ACTIVE} && !$ENV{HARNESS_VERBOSE}) { - close STDOUT; - close STDERR; - open STDOUT, '>&', $save_STDOUT or die "Can't restore STDOUT: $!"; - open STDERR, '>&', $save_STDERR or die "Can't restore STDERR: $!"; + # Restore STDOUT / STDERR on VMS + if ($^O eq 'VMS') { + if ($ENV{HARNESS_ACTIVE} && !$ENV{HARNESS_VERBOSE}) { + close STDOUT; + close STDERR; + open STDOUT, '>&', $save_STDOUT or die "Can't restore STDOUT: $!"; + open STDERR, '>&', $save_STDERR or die "Can't restore STDERR: $!"; + } + + print STDERR "$prefix$display_cmd => $e\n" + if !$ENV{HARNESS_ACTIVE} || $ENV{HARNESS_VERBOSE}; + } else { + print STDERR "$prefix$display_cmd => $e\n"; } - print STDERR "$prefix$display_cmd => $e\n" - if !$ENV{HARNESS_ACTIVE} || $ENV{HARNESS_VERBOSE}; - # At this point, $? stops being interesting, and unfortunately, # there are Test::More versions that get picky if we leave it # non-zero. @@ -1244,8 +1254,11 @@ sub __decorate_cmd { my $display_cmd = "$cmdstr$stdin$stdout$stderr"; - $stderr=" 2> ".$null - unless $stderr || !$ENV{HARNESS_ACTIVE} || $ENV{HARNESS_VERBOSE}; + # VMS program output escapes TAP::Parser + if ($^O eq 'VMS') { + $stderr=" 2> ".$null + unless $stderr || !$ENV{HARNESS_ACTIVE} || $ENV{HARNESS_VERBOSE}; + } $cmdstr .= "$stdin$stdout$stderr"; -- 2.25.1