-
Notifications
You must be signed in to change notification settings - Fork 560
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[PATCH] Add support for test.valgrind parallel testing #13658
Comments
From @wolfsageCreated by wolfsage@gmail.comThe included patch allows test.valgrind to run tests in parallel. Valgrind output for each test will be printed out after the test 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 Perl Info
|
From @wolfsage0001-Add-support-for-test.valgrind-to-run-in-parallel.patchFrom 1821b7d8c0a5989671bd6e63e1b87a7fd02ade55 Mon Sep 17 00:00:00 2001
From: Matthew Horsfall <WolfSage@gmail.com>
Date: Thu, 13 Mar 2014 08:10:07 -0400
Subject: [PATCH] Add support for test.valgrind to run in parallel.
---
Makefile.SH | 2 +-
t/TEST | 11 +++++------
t/harness | 20 ++++++++++++++++++++
3 files changed, 26 insertions(+), 7 deletions(-)
diff --git a/Makefile.SH b/Makefile.SH
index 6e9df1a..3b5d023 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 96eb6a4..356bdc2 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 1ed70cb..845b270 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 {
--
1.7.9.5
|
From @wolfsageThe previous patch didn't clean out the valgrind-current files before This patch fixes that. |
From @wolfsage0001-Add-support-for-test.valgrind-to-run-in-parallel.patchFrom dd41612de0c6c8e66526116acba8fb98f1299609 Mon Sep 17 00:00:00 2001
From: Matthew Horsfall <WolfSage@gmail.com>
Date: Thu, 13 Mar 2014 08:10:07 -0400
Subject: [PATCH] Add support for test.valgrind to run in parallel.
---
Makefile.SH | 2 +-
t/TEST | 24 +++++++++++++++++-------
t/harness | 20 ++++++++++++++++++++
3 files changed, 38 insertions(+), 8 deletions(-)
diff --git a/Makefile.SH b/Makefile.SH
index 6e9df1a..3b5d023 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 96eb6a4..d6cfb48 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}";
@@ -310,6 +309,16 @@ sub _before_fork {
chdir $run_dir or die "Can't chdir to '$run_dir': $!";
}
+ # Remove previous valgrind output otherwise it will interfere
+ my $test = $options->{test};
+
+ (local $Valgrind_Log = "$test.valgrind-current") =~ s/^.*\///;
+
+ if ($ENV{PERL_VALGRIND} && -e $Valgrind_Log) {
+ unlink $Valgrind_Log
+ or warn "$0: Failed to unlink '$Valgrind_Log': $!\n";
+ }
+
return;
}
@@ -553,7 +562,8 @@ EOT
$te = '';
}
- (local $Valgrind_Log = "$test.valgrind-current") =~ s/^.*\///;
+ (local $Valgrind_Log = "$test.valgrind-current") =~ s/^.*\///;
+
my $results = _run_test($test, $type);
my $failure;
diff --git a/t/harness b/t/harness
index 1ed70cb..845b270 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 {
--
1.7.9.5
|
From @wolfsageWhile I think this patch makes parallel testing possible and testing I need to consider this more thoroughly (but by all means, use this -- Matthew Horsfall (alh) |
From @jkeenanOn Sat Mar 15 06:21:11 2014, alh wrote:
Matthew: Will you be submitting a new patch for this ticket? Thank you very much. |
The RT System itself - Status changed from 'new' to 'open' |
@wolfsage - Status changed from 'open' to 'resolved' |
Migrated from rt.perl.org#121431 (status was 'resolved')
Searchable as RT121431$
The text was updated successfully, but these errors were encountered: