summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Horsfall (via RT) <perlbug-followup@perl.org>2014-03-13 05:39:48 -0700
committerKarl Williamson <public@khwilliamson.com>2014-03-18 12:51:22 -0600
commitf0aff2daa44923f600f6e1f2429a2add2214a9d5 (patch)
tree6d12c59da3c2bbe9608fdfa99261330241edc361
parentabda4963ba7186d442f9f005c2a04308f0e13418 (diff)
downloadperl-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-xMakefile.SH2
-rwxr-xr-xt/TEST11
-rw-r--r--t/harness20
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
diff --git a/t/TEST b/t/TEST
index 96eb6a48dc..356bdc2b3c 100755
--- a/t/TEST
+++ b/t/TEST
@@ -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}";
diff --git a/t/harness b/t/harness
index 1ed70cb1d3..845b2708b4 100644
--- a/t/harness
+++ b/t/harness
@@ -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 {