test/run_tests.pl: Make sure to exit with a code that's understood universally
[openssl.git] / test / run_tests.pl
index a91d7619003ab1568f5a8aebceb6cf19e1938208..66f620e216c074bf83688f02432835ad9453d011 100644 (file)
@@ -85,7 +85,16 @@ my $harness = $TAP_Harness->new(\%tapargs);
 my $ret = $harness->runtests(map { abs2rel($_, rel2abs(curdir())); }
                                  sort keys %tests);
 
-exit $ret->has_errors if (ref($ret) eq "TAP::Parser::Aggregator");
+# $ret->has_errors may be any number, not just 0 or 1.  On VMS, numbers
+# from 2 and on are used as is as VMS statuses, which has severity encoded
+# in the lower 3 bits.  0 and 1, on the other hand, generate SUCCESS and
+# FAILURE, so for currect reporting on all platforms, we make sure the only
+# exit codes are 0 and 1.  Double-bang is the trick to do so.
+exit !!$ret->has_errors if (ref($ret) eq "TAP::Parser::Aggregator");
+
+# If this isn't a TAP::Parser::Aggregator, it's the pre-TAP test harness,
+# which simply dies at the end if any test failed, so we don't need to bother
+# with any exit code in that case.
 
 sub find_matching_tests {
     my ($glob) = @_;