X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/76ae11e09dec419fb20f7c1bb4778a612a2d5bce..82a824eaf401ea21fa8f4e111ae0e6f4879ef10c:/tools/tesh/tesh.pl diff --git a/tools/tesh/tesh.pl b/tools/tesh/tesh.pl index 9f218e9101..2dd685b593 100755 --- a/tools/tesh/tesh.pl +++ b/tools/tesh/tesh.pl @@ -29,7 +29,7 @@ my $enable_coverage=0; my $diff_tool=0; my $diff_tool_tmp_fh=0; my $diff_tool_tmp_filename=0; -my $sort_prefix = 19; +my $sort_prefix = -1; my $tesh_file; my $tesh_name; my $error=0; @@ -280,6 +280,8 @@ sub exec_cmd { die "fork() failed: $!" unless defined $forked; if ( $forked == 0 ) { # child sleep $time_to_wait; + kill(SIGTERM, $cmd{'pid'}); + sleep 1; kill(SIGKILL, $cmd{'pid'}); exit $time_to_wait; } @@ -332,27 +334,38 @@ sub parse_out { } if ($cmd{'sort'}){ + # Save the unsorted observed output to report it on error. + map { push @{$cmd{'unsorted got'}}, $_ } @got; + sub mysort{ substr($a, 0, $sort_prefix) cmp substr($b, 0, $sort_prefix) } use sort 'stable'; - @got = sort mysort @got; + if ($sort_prefix>0) { + @got = sort mysort @got; + } else { + @got = sort @got; + } while (@got and $got[0] eq "") { shift @got; } - #also resort the other one, as perl sort is not the same as the C one used to generate teshes + # Sort the expected output to make it easier to write for humans if(defined($cmd{'out'})){ - @{$cmd{'out'}}=sort mysort @{$cmd{'out'}}; + if ($sort_prefix>0) { + @{$cmd{'out'}} = sort mysort @{$cmd{'out'}}; + } else { + @{$cmd{'out'}} = sort @{$cmd{'out'}}; + } while (@{$cmd{'out'}} and ${$cmd{'out'}}[0] eq "") { shift @{$cmd{'out'}}; } } } - #Did we timeout ? If yes, handle it. If not, kill the forked process. + # Did we timeout ? If yes, handle it. If not, kill the forked process. - if($timeout==-1 and $gotret eq "got signal SIGKILL"){ + if($timeout==-1 and ($gotret eq "got signal SIGTERM" or $gotret eq "got signal SIGKILL")){ $gotret="return code 0"; $timeout=1; $gotret= "timeout after $time_to_wait sec"; @@ -395,8 +408,17 @@ sub parse_out { print "(ignoring the output of <$cmd{'file'}:$cmd{'line'}> as requested)\n" } if (length $diff) { - print "Output of <$cmd{'file'}:$cmd{'line'}> mismatch:\n"; + print "Output of <$cmd{'file'}:$cmd{'line'}> mismatch".($cmd{'sort'}?" (even after sorting)":"").":\n"; map { print "$_\n" } split(/\n/,$diff); + if ($cmd{'sort'}) { + print "WARNING: Both the observed output and expected output were sorted as requested.\n"; + print "WARNING: Output were only sorted using the $sort_prefix first chars.\n" + if ($sort_prefix>0); + print "WARNING: Use to sort by simulated date and process ID only.\n"; + # print "----8<--------------- Begin of unprocessed observed output (as it should appear in file):\n"; + # map {print "> $_\n"} @{$cmd{'unsorted got'}}; + # print "--------------->8---- End of the unprocessed observed output.\n"; + } print "Test suite `$cmd{'file'}': NOK (<$cmd{'file'}:$cmd{'line'}> output mismatch)\n"; $error=1;