X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/4716eb134de74f09bda227c6f3bdea71924acc8c..84b8dc13e7c8f527d463ea3e65da796d8e786fc6:/tools/tesh/tesh.pl diff --git a/tools/tesh/tesh.pl b/tools/tesh/tesh.pl index 739b37ed35..fe1d60dbf0 100755 --- a/tools/tesh/tesh.pl +++ b/tools/tesh/tesh.pl @@ -35,6 +35,7 @@ they produce the expected output and return the expected value. --cfg arg : add parameter --cfg=arg to each command line --log arg : add parameter --log=arg to each command line --enable-coverage : ignore output lines starting with "profiling:" + --enable-sanitizers : ignore output lines starting with containing warnings =head1 TEST SUITE FILE SYTAX @@ -177,7 +178,7 @@ by the lexicographical sort. The solution is to prefix each line of your output with temporal information so that lines can be grouped by timestamps. The -lexicographical sort then only applies to lines that occured at the +lexicographical sort then only applies to lines that occurred at the same timestamp. Here is a SimGrid example: # Sort only lines depending on the first 19 chars @@ -239,6 +240,7 @@ BEGIN { } my $enable_coverage = 0; +my $enable_sanitizers = 0; my $diff_tool = 0; my $diff_tool_tmp_fh = 0; my $diff_tool_tmp_filename = 0; @@ -307,6 +309,7 @@ GetOptions( 'cfg=s' => sub { $opts{'cfg'} .= " --cfg=$_[1]" }, 'log=s' => sub { $opts{'log'} .= " --log=$_[1]" }, 'enable-coverage+' => \$enable_coverage, + 'enable-sanitizers+' => \$enable_sanitizers, ); $tesh_file = pop @ARGV; @@ -314,6 +317,7 @@ $tesh_name = $tesh_file; $tesh_name =~ s|^.*?/([^/]*)$|$1|; print "Enable coverage\n" if ($enable_coverage); +print "Enable sanitizers\n" if ($enable_sanitizers); if ($diff_tool) { use File::Temp qw/ tempfile /; @@ -322,7 +326,13 @@ if ($diff_tool) { } if ( $tesh_file =~ m/(.*)\.tesh/ ) { - print "Test suite `$tesh_file'\n"; + my $fullname = $tesh_file; + if (not ($fullname =~ m|^/|)) { # not absolute path + my $dir = qx,pwd,; + chomp($dir); + $fullname = "$dir/$fullname" + } + print "Test suite '$tesh_file'\n"; } else { $tesh_name = "(stdin)"; print "Test suite from stdin\n"; @@ -373,8 +383,7 @@ sub exec_cmd { my @cmdline; if(defined $ENV{VALGRIND_COMMAND}) { push @cmdline, $ENV{VALGRIND_COMMAND}; - my $noquotes = substr $ENV{VALGRIND_OPTIONS}, 1, -1; - push @cmdline, split(" ", $noquotes); + push @cmdline, split(" ", $ENV{VALGRIND_OPTIONS}); if($cmd{'timeout'} ne 'no'){ $cmd{'timeout'}=$cmd{'timeout'}*20 } @@ -404,7 +413,7 @@ sub analyze_result { eval { finish( $cmd{'job'} ); }; - if ($@) { # deal with the errors that occured in the child process + if ($@) { # deal with the errors that occurred in the child process if ($@ =~ /timeout/) { $cmd{'job'}->kill_kill; $cmd{'timeouted'} = 1; @@ -426,9 +435,12 @@ sub analyze_result { chomp $got; print $diff_tool_tmp_fh "> $got\n" if ($diff_tool); - unless ( $enable_coverage and $got =~ /^profiling:/ ) { + unless (( $enable_coverage and $got =~ /^profiling:/ ) or + ( $enable_sanitizers and $got =~ m/WARNING: ASan doesn't fully support/) or + ( $got =~ m/Unable to clean temporary file C:/)) # Crude hack to ignore cruft from Java on Windows + { push @got, $got; - } + } } # How did the child process terminate?