OpenSSL::Test: supported filtered command output
authorRichard Levitte <levitte@openssl.org>
Wed, 12 Apr 2017 13:53:09 +0000 (15:53 +0200)
committerRichard Levitte <levitte@openssl.org>
Wed, 12 Apr 2017 13:53:09 +0000 (15:53 +0200)
95-test_external_boringssl.t had a specialised run() variant to prefix
the command output so it wouldn't disturb Test::Harness.  This
functionality if now moved to the run() command, using the added
option 'prefix' that can be set to the string to prefix the output
with.

Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/3201)

test/recipes/95-test_external_boringssl.t
test/testlib/OpenSSL/Test.pm

index a49e6ea466eb07e2c190d9ce2e01bcb259ee0d0f..56505cf98b4184af4e9db02c3b3fc61d0f6a0ec9 100644 (file)
@@ -22,22 +22,10 @@ plan skip_all => "BoringSSL runner not detected"
 plan tests => 1;
 
 indir $ENV{BORING_RUNNER_DIR} => sub {
-    ok(filter_run(cmd(["go", "test", "-shim-path",
-                       bldtop_file("test", "ossl_shim", "ossl_shim"),
-                       "-shim-config",
-                       srctop_file("test", "ossl_shim", "ossl_config.json"),
-                       "-pipe", "-allow-unimplemented"])),
+    ok(run(cmd(["go", "test", "-shim-path",
+                bldtop_file("test", "ossl_shim", "ossl_shim"),
+                "-shim-config",
+                srctop_file("test", "ossl_shim", "ossl_config.json"),
+                "-pipe", "-allow-unimplemented"]), prefix => "go test: "),
        "running BoringSSL tests");
 }, create => 0, cleanup => 0;
-
-# Filter the output so that the "ok" printed by go test doesn't confuse
-# Test::More. Without that it thinks there has been one more test run than was
-# planned
-sub filter_run {
-    my $cmd = cmdstr(shift);
-    open(PIPE, "-|", $cmd);
-    while(<PIPE>) {
-        print STDOUT "go test: ", $_;
-    }
-    close PIPE;
-}
index 06fea0ca6568423c4ff240ddd74f4edbd6c1a7d2..c76ca1caa67b4cf5d06105887ee12714828516ef 100644 (file)
@@ -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<prefix =E<gt> EXPR>
+
+If specified, EXPR will be used as a string to prefix the output from the
+command.  This is useful if the output contains lines starting with C<ok >
+or C<not ok > that can disturb Test::Harness.
+
 =item B<statusvar =E<gt> VARREF>
 
 If used, B<VARREF> must be a reference to a scalar variable.  It will be
@@ -452,8 +458,19 @@ sub run {
     # do.  For example, a program that gets aborted (and therefore signals
     # SIGABRT = 6) will appear to exit with the code 134.  We mimic this
     # to make it easier to compare with a manual run of the command.
-    if ($opts{capture}) {
-       @r = `$prefix$cmd`;
+    if ($opts{capture} || defined($opts{prefix})) {
+       my $pipe;
+
+       open($pipe, '-|', "$prefix$cmd") or die "Can't start command: $!";
+       while(<$pipe>) {
+           my $l = ($opts{prefix} // "") . $_;
+           if ($opts{capture}) {
+               push @r, $l;
+           } else {
+               print STDOUT $l;
+           }
+       }
+       close $pipe;
     } else {
        system("$prefix$cmd");
     }