diff options
author | Matthew Horsfall (via RT) <perlbug-followup@perl.org> | 2014-03-13 05:39:48 -0700 |
---|---|---|
committer | Karl Williamson <public@khwilliamson.com> | 2014-03-18 12:51:22 -0600 |
commit | f0aff2daa44923f600f6e1f2429a2add2214a9d5 (patch) | |
tree | 6d12c59da3c2bbe9608fdfa99261330241edc361 | |
parent | abda4963ba7186d442f9f005c2a04308f0e13418 (diff) | |
download | perl-f0aff2daa44923f600f6e1f2429a2add2214a9d5.tar.gz |
Add support for test.valgrind parallel testing
# New Ticket Created by Matthew Horsfall
# Please include the string: [perl #121431]
# in the subject line of all future correspondence about this issue.
# <URL: https://rt.perl.org/Ticket/Display.html?id=121431 >
This is a bug report for perl from wolfsage@gmail.com,
generated with the help of perlbug 1.39 running under perl 5.14.2.
-----------------------------------------------------------------
[Please describe your issue here]
The included patch allows test.valgrind to run tests in parallel.
Valgrind output for each test will be printed out after the test
completes, with the name of the test prefixing every line.
Example usage might be:
TEST_JOBS=8 make test.valgrind VALGRIND='valgrind -q' 2>&1 | tee out.txt
-q is needed to ensure only *errors* are captured, otherwise the output will
be much louder than it already is. (Perhaps this should be the default mode?)
[Please do not change anything below this line]
-----------------------------------------------------------------
-rwxr-xr-x | Makefile.SH | 2 | ||||
-rwxr-xr-x | t/TEST | 11 | ||||
-rw-r--r-- | t/harness | 20 |
3 files changed, 26 insertions, 7 deletions
diff --git a/Makefile.SH b/Makefile.SH index 6e9df1a810..3b5d02315d 100755 --- a/Makefile.SH +++ b/Makefile.SH @@ -1510,7 +1510,7 @@ test.valgrind check.valgrind: test_prep @grep "^usemymalloc='n'" config.sh >/dev/null || exit 1 @echo "And of course you have to have valgrind..." $(VALGRIND) $(VG_TEST) || exit 1 - PERL_VALGRIND=1 VALGRIND='$(VALGRIND)' $(RUN_TESTS) choose + PERL_VALGRIND=1 VALGRIND='$(VALGRIND)' TESTFILE=harness $(RUN_TESTS) choose !NO!SUBS! ;; esac @@ -284,16 +284,15 @@ sub _cmd { if ($ENV{PERL_VALGRIND}) { my $perl_supp = $options->{return_dir} ? "$options->{return_dir}/perl.supp" : "perl.supp"; my $valgrind_exe = $ENV{VALGRIND} // 'valgrind'; + if ($options->{run_dir}) { + $Valgrind_Log = "$options->{run_dir}/$Valgrind_Log"; + } my $vg_opts = $ENV{VG_OPTS} - // '--log-fd=3 ' + // "--log-file=$Valgrind_Log " . "--suppressions=$perl_supp --leak-check=yes " . "--leak-resolution=high --show-reachable=yes " - . "--num-callers=50 --track-origins=yes"; + . "--num-callers=50 --track-origins=yes"; $perl = "$valgrind_exe $vg_opts $perl"; - $redir = "3>$Valgrind_Log"; - if ($options->{run_dir}) { - $Valgrind_Log = "$options->{run_dir}/$Valgrind_Log"; - } } my $args = "$options->{testswitch} $options->{switch} $options->{utf8}"; @@ -16,6 +16,7 @@ use Config; $::do_nothing = $::do_nothing = 1; require './TEST'; +our $Valgrind_Log; my $Verbose = 0; $Verbose++ while @ARGV && $ARGV[0] eq '-v' && shift; @@ -224,10 +225,29 @@ my $h = TAP::Harness->new({ $options = $options{$test} = _scan_test($test, $type); } + (local $Valgrind_Log = "$test.valgrind-current") =~ s/^.*\///; + return [ split ' ', _cmd($options, $type) ]; }, }); +# Print valgrind output after test completes +if ($ENV{PERL_VALGRIND}) { + $h->callback( + after_test => sub { + my ($job) = @_; + my $test = $job->[0]; + my $vfile = "$test.valgrind-current"; + $vfile =~ s/^.*\///; + + open(my $voutput, '<', $vfile) or return; + print "$test: Valgrind output:\n"; + print "$test: $_" for <$voutput>; + close($voutput); + } + ); +} + if ($state) { $h->callback( after_test => sub { |