diff options
author | Richard Levitte <levitte@openssl.org> | 2017-03-21 10:53:56 +0100 |
---|---|---|
committer | Richard Levitte <levitte@openssl.org> | 2017-03-21 16:12:29 +0100 |
commit | 34a6a9b1599788ce4e85a08d579ff19bcb6a4b89 (patch) | |
tree | 8ab61c29f28dd7fe6eef0c5d759ec2a3ed2c1020 /test/testlib | |
parent | b6ef12c4baa3a2c1ff0e3ac71270588dfcfe8cbd (diff) |
OpenSSL::Test: add a statusvar option for run with capture => 1
When using run() with capture => 1, there was no way to find out if
the command was successful or not. This change adds a statusvar
option, that must refer to a scalar variable, for example:
my $status = undef;
my @line = run(["whatever"], capture => 1, statusvar => \$status);
$status will be 1 if the command "whatever" was successful, 0
otherwise.
Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/3004)
Diffstat (limited to 'test/testlib')
-rw-r--r-- | test/testlib/OpenSSL/Test.pm | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/test/testlib/OpenSSL/Test.pm b/test/testlib/OpenSSL/Test.pm index 66fa4dcb0f..cbfc867a7f 100644 --- a/test/testlib/OpenSSL/Test.pm +++ b/test/testlib/OpenSSL/Test.pm @@ -403,6 +403,12 @@ return the resulting output as an array of lines. If false or not given, the command will be executed with C<system()>, and C<run> will return 1 if the command was successful or 0 if it wasn't. +=item B<statusvar =E<gt> VARREF> + +If used, B<VARREF> must be a reference to a scalar variable. It will be +assigned a boolean indicating if the command succeeded or not. This is +particularly useful together with B<capture>. + =back For further discussion on what is considered a successful command or not, see @@ -427,6 +433,9 @@ sub run { my $r = 0; my $e = 0; + 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 @@ -445,11 +454,13 @@ sub run { # to make it easier to compare with a manual run of the command. if ($opts{capture}) { @r = `$prefix$cmd`; - $e = ($? & 0x7f) ? ($? & 0x7f)|0x80 : ($? >> 8); } else { system("$prefix$cmd"); - $e = ($? & 0x7f) ? ($? & 0x7f)|0x80 : ($? >> 8); - $r = $hooks{exit_checker}->($e); + } + $e = ($? & 0x7f) ? ($? & 0x7f)|0x80 : ($? >> 8); + $r = $hooks{exit_checker}->($e); + if ($opts{statusvar}) { + ${$opts{statusvar}} = $r; } if ($ENV{HARNESS_ACTIVE} && !$ENV{HARNESS_VERBOSE}) { |