Make sure the temporary error log resides in a well defined location
authorRichard Levitte <levitte@openssl.org>
Wed, 9 Sep 2015 15:29:06 +0000 (17:29 +0200)
committerRichard Levitte <levitte@openssl.org>
Wed, 9 Sep 2015 17:12:09 +0000 (19:12 +0200)
If a test recipe does something like this:

    indir "foo.$$" => sub {
        chmod 0500, File::Spec->curdir();
        ok(run(app(["something"])));
    }

we get a problem, because we were storing the temporary stderr file in
the current directory at all times (so while inside the 'indir', we
would attemp to store it in "foo.$$").

So, change our ways to always store that temporary file in the exact
same location, defined by the environment variable RESULT_D, or
failing that TEST_D, or failing that $TOP/test.

Reviewed-by: Rich Salz <rsalz@openssl.org>
test/testlib/OpenSSL/Test.pm

index f378351f6575925811d3b777c1e34caf49743619..c64d68de46c35848ff4d635e50ed5c1b4ce60004 100644 (file)
@@ -720,7 +720,8 @@ sub __build_cmd {
 
     $saved_stderr = $opts{stderr}              if defined($opts{stderr});
 
 
     $saved_stderr = $opts{stderr}              if defined($opts{stderr});
 
-    my $errlog = $num ? "$test_name.$num.tmp_err" : "$test_name.tmp_err";
+    my $errlog =
+        __results_file($num ? "$test_name.$num.tmp_err" : "$test_name.tmp_err");
     my $display_cmd = "$cmd$arg_str$stdin$stdout$stderr";
     $cmd .= "$arg_str$stdin$stdout 2> $errlog";
 
     my $display_cmd = "$cmd$arg_str$stdin$stdout$stderr";
     $cmd .= "$arg_str$stdin$stdout 2> $errlog";