]> AND Public Git Repository - simgrid.git/blobdiff - tools/tesh/tesh.pl
Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
tesh: only make an absolute path out of test file if not already one
[simgrid.git] / tools / tesh / tesh.pl
index 739b37ed351e56d7f951a5cdae2c2e20d468a1c9..fe1d60dbf0af44e828fbe9f2599ed45866d6a66c 100755 (executable)
@@ -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:"
   --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
 
 
 =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
 
 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
 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_coverage        = 0;
+my $enable_sanitizers        = 0;
 my $diff_tool              = 0;
 my $diff_tool_tmp_fh       = 0;
 my $diff_tool_tmp_filename = 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,
     '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;
 );
 
 $tesh_file = pop @ARGV;
@@ -314,6 +317,7 @@ $tesh_name = $tesh_file;
 $tesh_name =~ s|^.*?/([^/]*)$|$1|;
 
 print "Enable coverage\n" if ($enable_coverage);
 $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 /;
 
 if ($diff_tool) {
     use File::Temp qw/ tempfile /;
@@ -322,7 +326,13 @@ if ($diff_tool) {
 }
 
 if ( $tesh_file =~ m/(.*)\.tesh/ ) {
 }
 
 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";
 } 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 @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
       }
       if($cmd{'timeout'} ne 'no'){
           $cmd{'timeout'}=$cmd{'timeout'}*20
       }
@@ -404,7 +413,7 @@ sub analyze_result {
     eval {
        finish( $cmd{'job'} );
     };
     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;
        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);
 
         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;
             push @got, $got;
-        }
+        } 
     }
 
     # How did the child process terminate?
     }
 
     # How did the child process terminate?