From: Martin Quinson Date: Fri, 9 Oct 2015 19:25:23 +0000 (+0200) Subject: Merge branch 'master' of scm.gforge.inria.fr:/gitroot/simgrid/simgrid X-Git-Tag: v3_12~10 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/ac679d5e69b1eb25e3f82be198607593407e7fc5?hp=8a210e1091c499a7354ac4ff08c19b29c1143093 Merge branch 'master' of scm.gforge.inria.fr:/gitroot/simgrid/simgrid --- diff --git a/appveyor.yml b/appveyor.yml index addf069f6f..8817dd127f 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -18,7 +18,7 @@ environment: BOOST_LIBRARYDIR: c:\Libraries\boost_1_59_0\stage\lib # BOOST_ROOT: c:\Libraries\boost # BOOST_LIBRARYDIR: c:\Libraries\boost\stage\lib - + TESH_ARGS: C:/projects/simgrid/bin/tesh --setenv srcdir=C:/projects/simgrid/examples/java --setenv classpath=C:/projects/simgrid/examples/java;C:/projects/simgrid/teshsuite/java;C:/projects/simgrid/simgrid.jar --cd C:/projects/simgrid/examples/java matrix: - COMPILER: MinGW-w64 @@ -33,7 +33,7 @@ install: - if [%COMPILER%]==[MinGW] rename "C:\Program Files (x86)\Git\bin\sh.exe" "sh2.exe" - if [%COMPILER%]==[MinGW-w64] set PATH=C:\mingw64\bin;%PATH% - if [%COMPILER%]==[MinGW-w64] rename "C:\Program Files (x86)\Git\bin\sh.exe" "sh2.exe" -- if [%COMPILER%]==[MinGW-w64] appveyor DownloadFile "https://raw.githubusercontent.com/symengine/dependencies/5cff7d1736877336cf9fb58267111beea4fa152f/x86_64-4.9.1-release-posix-seh-rt_v3-rev1.7z" -FileName mw64.7z +- if [%COMPILER%]==[MinGW-w64] appveyor DownloadFile "https://raw.githubusercontent.com/symengine/dependencies/5cff7d1736877336cf9fb58267111beea4fa152f/x86_64-4.9.1-release-posix-seh-rt_v3-rev1.7z" -FileName mw64.7z || appveyor DownloadFile "https://raw.githubusercontent.com/symengine/dependencies/5cff7d1736877336cf9fb58267111beea4fa152f/x86_64-4.9.1-release-posix-seh-rt_v3-rev1.7z" -FileName mw64.7z - if [%COMPILER%]==[MinGW-w64] 7z x -oC:\ mw64.7z > NUL - if [%COMPILER%]==[MSYS2] set PATH=C:\msys64\bin,%PATH% @@ -43,10 +43,37 @@ build_script: - if not [%COMPILER%]==[MSVC15] cmake -G "MinGW Makefiles" -Denable_java=ON -Denable_smpi=OFF -Denable_mallocators=OFF -Denable_lto=OFF . - if [%COMPILER%]==[MSVC15] msbuild ALL_BUILD.vcxproj /verbosity:normal - if not [%COMPILER%]==[MSVC15] mingw32-make VERBOSE=1 -- cd C:/projects/simgrid/examples/java ; java -classpath ".;../../simgrid.jar" masterslave.Masterslave ../platforms/platform.xml masterslave/masterslaveDeployment.xml --log=root.thres:verbose --log=xbt.thres:info || true +- cd C:/projects/simgrid/examples/java && java -classpath ".;../../simgrid.jar" masterslave.Masterslave ../platforms/platform.xml masterslave/masterslaveDeployment.xml || true + + +# I cant use the cmake test because of the following error: +# Test project C:/projects/simgrid +# Start 1: mc-replay-random-bug +# ^CTerminate batch job (Y/N)? +# How dafuq am I supposed to press N on appveyor?? I tried closing stdin, in vain +#- bash -c "cd C:/projects/simgrid; exec 0<&-; ctest --output-on-failure" < nul || true -#test_script: -#- ctest --verbose || true +test_script: +- perl %TESH_ARGS% C:/projects/simgrid/examples/java/async/async.tesh +- perl %TESH_ARGS% C:/projects/simgrid/examples/java/bittorrent/bittorrent.tesh +- perl %TESH_ARGS% C:/projects/simgrid/examples/java/master_slave_bypass/bypass.tesh +- perl %TESH_ARGS% C:/projects/simgrid/examples/java/chord/chord.tesh +- perl %TESH_ARGS% C:/projects/simgrid/examples/java/cloud/cloud.tesh +- perl %TESH_ARGS% C:/projects/simgrid/examples/java/cloud/migration/migration.tesh +- perl %TESH_ARGS% C:/projects/simgrid/examples/java/commTime/commtime.tesh +- perl %TESH_ARGS% C:/projects/simgrid/examples/java/kademlia/kademlia.tesh +- perl %TESH_ARGS% C:/projects/simgrid/examples/java/master_slave_kill/kill.tesh +- perl %TESH_ARGS% C:/projects/simgrid/examples/java/masterslave/masterslave.tesh +- perl %TESH_ARGS% C:/projects/simgrid/examples/java/migration/migration.tesh +- perl %TESH_ARGS% C:/projects/simgrid/examples/java/mutualExclusion/mutualexclusion.tesh +- perl %TESH_ARGS% C:/projects/simgrid/examples/java/pingPong/pingpong.tesh +- perl %TESH_ARGS% C:/projects/simgrid/examples/java/priority/priority.tesh +- perl %TESH_ARGS% C:/projects/simgrid/examples/java/startKillTime/startKillTime.tesh +- perl %TESH_ARGS% C:/projects/simgrid/examples/java/surfCpuModel/surf_cpu_model.tesh +- perl %TESH_ARGS% C:/projects/simgrid/examples/java/surfPlugin/surf_plugin.tesh +- perl %TESH_ARGS% C:/projects/simgrid/examples/java/reservationSurfPlugin/reservation_surf_plugin.tesh +- perl %TESH_ARGS% C:/projects/simgrid/examples/java/suspend/suspend.tesh +- perl %TESH_ARGS% C:/projects/simgrid/examples/java/tracing/tracingPingPong.tesh artifacts: - path: simgrid.jar diff --git a/tools/cmake/Java.cmake b/tools/cmake/Java.cmake index ac327078ca..689f11971c 100644 --- a/tools/cmake/Java.cmake +++ b/tools/cmake/Java.cmake @@ -95,9 +95,6 @@ if(enable_lib_in_jar) if(NOT STRIP_COMMAND) set(STRIP_COMMAND "cmake -E echo (strip not found)") endif() - if(WIN32) - set(STRIP_COMMAND "cmake -E echo (dont strip on windows)") - endif() set(JAVA_NATIVE_PATH NATIVE/${CMAKE_SYSTEM_NAME}/${CMAKE_SYSTEM_PROCESSOR}) if(${CMAKE_SYSTEM_PROCESSOR} MATCHES "^i[3-6]86$") diff --git a/tools/tesh/catch-timeout.tesh b/tools/tesh/catch-timeout.tesh index d6ac0a3839..00c5ff660d 100644 --- a/tools/tesh/catch-timeout.tesh +++ b/tools/tesh/catch-timeout.tesh @@ -8,7 +8,6 @@ < $ sleep 6 > Test suite from stdin > [(stdin):2] sleep 6 -> <(stdin):2> timeouted. Kill the process. > Test suite `(stdin)': NOK (<(stdin):2> timeout after 1 sec) > <(stdin):2> No output so far. $ perl ${bindir:=.}/tesh diff --git a/tools/tesh/tesh.pl b/tools/tesh/tesh.pl index f25be34489..d01ce83b85 100755 --- a/tools/tesh/tesh.pl +++ b/tools/tesh/tesh.pl @@ -220,12 +220,15 @@ the content it gets as input. It is not possible to use the cat command, as one would expect, because stream redirections are currently not implemented in Tesh. -=head1 BUGS AND LIMITATIONS +=head1 BUGS, LIMITATIONS AND POSSIBLE IMPROVEMENTS The main limitation is the lack of stream redirections in the commands (">", "<" and "|" shell constructs and friends). The B builtin command makes this situation bearable. +It would be nice if we could replace the tesh file completely with +command line flags when the output is not to be verified. + =cut BEGIN { @@ -240,7 +243,6 @@ my $diff_tool_tmp_fh = 0; my $diff_tool_tmp_filename = 0; my $sort_prefix = -1; my $tesh_file; -my $tesh_name; my $error = 0; my $exitcode = 0; my @bg_cmds; @@ -276,6 +278,9 @@ BEGIN { *WEXITSTATUS = sub { $_[0] >> 8 }; *WIFSIGNALED = sub { ( $_[0] & 127 ) && ( $_[0] & 127 != 127 ) }; *WTERMSIG = sub { $_[0] & 127 }; + + # used on the command lines + $environ{'EXEEXT'} = ".exe"; } } @@ -312,34 +317,14 @@ if ($diff_tool) { } if ( $tesh_file =~ m/(.*)\.tesh/ ) { - $tesh_name = $1; - print "Test suite `$tesh_name'\n"; + print "Test suite `$tesh_file'\n"; } else { $tesh_file = "(stdin)"; - $tesh_name = "(stdin)"; print "Test suite from stdin\n"; } ########################################################################### -sub exit_status { - my $status = shift; - if ( WIFEXITED($status) ) { - $exitcode = WEXITSTATUS($status) + 40; - return "returned code " . WEXITSTATUS($status); - } elsif ( WIFSIGNALED($status) ) { - my $code; - if ( WTERMSIG($status) == SIGINT ) { $code = "SIGINT"; } - elsif ( WTERMSIG($status) == SIGTERM ) { $code = "SIGTERM"; } - elsif ( WTERMSIG($status) == SIGKILL ) { $code = "SIGKILL"; } - elsif ( WTERMSIG($status) == SIGABRT ) { $code = "SIGABRT"; } - elsif ( WTERMSIG($status) == SIGSEGV ) { $code = "SIGSEGV"; } - $exitcode = WTERMSIG($status) + 4; - return "got signal $code"; - } - return "Unparsable status. Is the process stopped?"; -} - sub exec_cmd { my %cmd = %{ $_[0] }; if ( $opts{'debug'} ) { @@ -348,14 +333,7 @@ sub exec_cmd { print "CMD: $cmd{'cmd'}\n"; } - # cleanup the command line - if (RUNNING_ON_WINDOWS) { - var_subst( $cmd{'cmd'}, "EXEEXT", ".exe" ); - } else { - var_subst( $cmd{'cmd'}, "EXEEXT", "" ); - } - - # substitute environ variables + # substitute environment variables foreach my $key ( keys %environ ) { $cmd{'cmd'} = var_subst( $cmd{'cmd'}, $key, $environ{$key} ); } @@ -376,7 +354,7 @@ sub exec_cmd { $cmd{'cmd'} =~ s/^\s+//; $cmd{'cmd'} =~ s/\s+$//; - print "[$tesh_name:$cmd{'line'}] $cmd{'cmd'}\n"; + print "[$cmd{'file'}:$cmd{'line'}] $cmd{'cmd'}\n"; $cmd{'return'} ||= 0; $cmd{'timeout'} ||= $opts{'timeout'}; @@ -403,32 +381,27 @@ sub exec_cmd { sub analyze_result { my %cmd = %{ $_[0] }; - + $cmd{'timeouted'} = 0; # initialization + + # Wait for the end of the child process + ##### eval { finish( $cmd{'job'} ); }; - if ($@) { + if ($@) { # deal with the errors that occured in the child process if ($@ =~ /timeout/) { $cmd{'job'}->kill_kill; $cmd{'timeouted'} = 1; - } elsif ($@ =~ /^ack / and $@ =~ /pipe/) { + } elsif ($@ =~ /^ack / and $@ =~ /pipe/) { # IPC::Run is not very expressive about the pipes that it gets :( print STDERR "Tesh: Broken pipe (ignored).\n"; } else { die $@; # Don't know what it is, so let it go. } } - $cmd{'timeouted'} ||= 0; - - my $gotret = $cmd{'gotret'} = exit_status($?); - - my $wantret; - - if ( defined( $cmd{'expect'} ) and ( $cmd{'expect'} ne "" ) ) { - $wantret = "got signal $cmd{'expect'}"; - } else { - $wantret = "returned code " . ( defined( $cmd{'return'} ) ? $cmd{'return'} : 0 ); - } + # Gather information + #### + # pop all output from executing child my @got; map { print "GOT: $_\n" } ${$cmd{'got'}} if $opts{'debug'}; @@ -442,11 +415,53 @@ sub analyze_result { } } - if ( $cmd{'sort'} ) { + # How did the child process terminate? + my $status = $?; + $cmd{'gotret'} = "Unparsable status. Please report this tesh bug."; + if ( $cmd{'timeouted'} ) { + $cmd{'gotret'} = "timeout after $cmd{'timeout'} sec"; + $error = 1; + $exitcode = 3; + } elsif ( WIFEXITED($status) ) { + $exitcode = WEXITSTATUS($status) + 40; + $cmd{'gotret'} = "returned code " . WEXITSTATUS($status); + } elsif ( WIFSIGNALED($status) ) { + my $code; + if ( WTERMSIG($status) == SIGINT ) { $code = "SIGINT"; } + elsif ( WTERMSIG($status) == SIGTERM ) { $code = "SIGTERM"; } + elsif ( WTERMSIG($status) == SIGKILL ) { $code = "SIGKILL"; } + elsif ( WTERMSIG($status) == SIGABRT ) { $code = "SIGABRT"; } + elsif ( WTERMSIG($status) == SIGSEGV ) { $code = "SIGSEGV"; } + $exitcode = WTERMSIG($status) + 4; + $cmd{'gotret'} = "got signal $code"; + } + + # How was it supposed to terminate? + my $wantret; + if ( defined( $cmd{'expect'} ) and ( $cmd{'expect'} ne "" ) ) { + $wantret = "got signal $cmd{'expect'}"; + } else { + $wantret = "returned code " . ( defined( $cmd{'return'} ) ? $cmd{'return'} : 0 ); + } - # Save the unsorted observed output to report it on error. - map { push @{ $cmd{'unsorted got'} }, $_ } @got; + # Enforce the outcome + #### + + # Did it end as expected? + if ( $cmd{'gotret'} ne $wantret ) { + $error = 1; + my $msg = "Test suite `$cmd{'file'}': NOK (<$cmd{'file'}:$cmd{'line'}> $cmd{'gotret'})\n"; + if ( scalar @got ) { + $msg = $msg . "Output of <$cmd{'file'}:$cmd{'line'}> so far:\n"; + map { $msg .= "|| $_\n" } @got; + } else { + $msg .= "<$cmd{'file'}:$cmd{'line'}> No output so far.\n"; + } + print STDERR "$msg"; + } + # Does the output match? + if ( $cmd{'sort'} ) { sub mysort { substr( $a, 0, $sort_prefix ) cmp substr( $b, 0, $sort_prefix ); } @@ -460,7 +475,7 @@ sub analyze_result { shift @got; } - # Sort the expected output to make it easier to write for humans + # Sort the expected output too, to make tesh files easier to write for humans if ( defined( $cmd{'out'} ) ) { if ( $sort_prefix > 0 ) { @{ $cmd{'out'} } = sort mysort @{ $cmd{'out'} }; @@ -473,52 +488,32 @@ sub analyze_result { } } - # Did we timeout? - - if ( $cmd{'timeouted'} ) { - $gotret = "timeout after $cmd{'timeout'} sec"; - $error = 1; - $exitcode = 3; - print STDERR "<$cmd{'file'}:$cmd{'line'}> timeouted. Kill the process.\n"; - } - if ( $gotret ne $wantret ) { - $error = 1; - my $msg = "Test suite `$cmd{'file'}': NOK (<$cmd{'file'}:$cmd{'line'}> $gotret)\n"; - if ( scalar @got ) { - $msg = $msg . "Output of <$cmd{'file'}:$cmd{'line'}> so far:\n"; - map { $msg .= "|| $_\n" } @got; - } else { - $msg .= "<$cmd{'file'}:$cmd{'line'}> No output so far.\n"; - } - print STDERR "$msg"; - } - - # Does the output match? - my $diff; + # Report the output if asked so or if it differs if ( defined( $cmd{'output display'} ) ) { print "[Tesh/INFO] Here is the (ignored) command output:\n"; map { print "||$_\n" } @got; } elsif ( defined( $cmd{'output ignore'} ) ) { print "(ignoring the output of <$cmd{'file'}:$cmd{'line'}> as requested)\n"; } else { - $diff = build_diff( \@{ $cmd{'out'} }, \@got ); - } - if ( length $diff ) { - 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"; - exit 2; + my $diff = build_diff( \@{ $cmd{'out'} }, \@got ); + + if ( length $diff ) { + 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"; + exit 2; + } } } @@ -532,8 +527,10 @@ if ( $tesh_file eq "(stdin)" ) { } my %cmd; # everything about the next command to run +my $tesh_name = $tesh_file; +$tesh_name =~ s|^.*?/([^/]*)$|$1|; my $line_num = 0; -LINE: while ( defined( my $line = <$infh> ) and not $error ) { +LINE: while ( not $error and defined( my $line = <$infh> )) { chomp $line; $line =~ s/\r//g; @@ -551,7 +548,7 @@ LINE: while ( defined( my $line = <$infh> ) and not $error ) { $line = $1 . $next; } - # Push delayed commands on empty lines + # If the line is empty, run any previously defined block and proceed to next line unless ( $line =~ m/^(.)(.*)$/ ) { if ( defined( $cmd{'cmd'} ) ) { exec_cmd( \%cmd ); @@ -567,31 +564,40 @@ LINE: while ( defined( my $line = <$infh> ) and not $error ) { $arg =~ s/\r//g; $arg =~ s/\\\\/\\/g; - # handle the commands + # Deal with the lines that can contribute to the current command block if ( $cmd =~ /^#/ ) { # comment + next LINE; } elsif ( $cmd eq '>' ) { # expected result line print "[TESH/debug] push expected result\n" if $opts{'debug'}; push @{ $cmd{'out'} }, $arg; + next LINE; } elsif ( $cmd eq '<' ) { # provided input print "[TESH/debug] push provided input\n" if $opts{'debug'}; push @{ $cmd{'in'} }, $arg; + next LINE; } elsif ( $cmd eq 'p' ) { # comment print "[$tesh_name:$line_num] $arg\n"; + next LINE; - } elsif ( $cmd eq '$' ) { # Command - # if we have something buffered, run it now - if ( defined( $cmd{'cmd'} ) ) { - exec_cmd( \%cmd ); - %cmd = (); - } - if ( $arg =~ /^\s*mkfile / ) { # "mkfile" command line + } + + # We dealt with all sort of lines that can contribute to a command block, so we have something else here. + # If we have something buffered, run it now and start a new block + if ( defined( $cmd{'cmd'} ) ) { + exec_cmd( \%cmd ); + %cmd = (); + } + + # Deal with the lines that must be placed before a command block + if ( $cmd eq '$' ) { # Command + if ( $arg =~ /^mkfile / ) { # "mkfile" command line die "[TESH/CRITICAL] Output expected from mkfile command!\n" if scalar @{ cmd { 'out' } }; $cmd{'arg'} = $arg; - $cmd{'arg'} =~ s/\s*mkfile //; + $cmd{'arg'} =~ s/mkfile //; mkfile_cmd( \%cmd ); %cmd = (); @@ -607,80 +613,58 @@ LINE: while ( defined( my $line = <$infh> ) and not $error ) { } else { # regular command $cmd{'cmd'} = $arg; - $cmd{'file'} = $tesh_file; + $cmd{'file'} = $tesh_name; $cmd{'line'} = $line_num; } - } elsif ( $cmd eq '&' ) { # background command line - if ( defined( $cmd{'cmd'} ) ) { - exec_cmd( \%cmd ); - %cmd = (); - } + } elsif ( $cmd eq '&' ) { # background command line + die "[TESH/CRITICAL] mkfile cannot be run in background\n" + if ($arg =~ /^mkfile/); + die "[TESH/CRITICAL] cd cannot be run in background\n" + if ($arg =~ /^cd/); + $cmd{'background'} = 1; $cmd{'cmd'} = $arg; - $cmd{'file'} = $tesh_file; + $cmd{'file'} = $tesh_name; $cmd{'line'} = $line_num; - } elsif ( $line =~ /^!\s*output sort/ ) { #output sort - if ( defined( $cmd{'cmd'} ) ) { - exec_cmd( \%cmd ); - %cmd = (); - } - $cmd{'sort'} = 1; - if ( $line =~ /^!\s*output sort\s+(\d+)/ ) { - $sort_prefix = $1; - } - } elsif ( $line =~ /^!\s*output ignore/ ) { #output ignore - if ( defined( $cmd{'cmd'} ) ) { - exec_cmd( \%cmd ); - %cmd = (); - } - $cmd{'output ignore'} = 1; - } elsif ( $line =~ /^!\s*output display/ ) { #output display - if ( defined( $cmd{'cmd'} ) ) { - exec_cmd( \%cmd ); - %cmd = (); - } - $cmd{'output display'} = 1; - } elsif ( $line =~ /^!\s*expect signal (\w*)/ ) { #expect signal SIGABRT - if ( defined( $cmd{'cmd'} ) ) { - exec_cmd( \%cmd ); - %cmd = (); - } - $cmd{'expect'} = "$1"; - } elsif ( $line =~ /^!\s*expect return/ ) { #expect return - if ( defined( $cmd{'cmd'} ) ) { - exec_cmd( \%cmd ); - %cmd = (); - } - $line =~ s/^! expect return //g; - $line =~ s/\r//g; - $cmd{'return'} = $line; - } elsif ( $line =~ /^!\s*setenv/ ) { #setenv - if ( defined( $cmd{'cmd'} ) ) { - exec_cmd( \%cmd ); - %cmd = (); - } - $line =~ s/^! setenv //g; - $line =~ s/\r//g; - setenv_cmd($line); - } elsif ( $line =~ /^!\s*timeout/ ) { #timeout - if ( defined( $cmd{'cmd'} ) ) { - exec_cmd( \%cmd ); - %cmd = (); - } - $line =~ s/^! timeout //; - $line =~ s/\r//g; - $cmd{'timeout'} = $line; + # Deal with the meta-commands + } elsif ( $line =~ /^! (.*)/) { + $line = $1; + + if ( $line =~ /^output sort/ ) { + $cmd{'sort'} = 1; + if ( $line =~ /^output sort\s+(\d+)/ ) { + $sort_prefix = $1; + } + } elsif ($line =~ /^output ignore/ ) { + $cmd{'output ignore'} = 1; + } elsif ( $line =~ /^output display/ ) { + $cmd{'output display'} = 1; + } elsif ( $line =~ /^expect signal (\w*)/ ) { + $cmd{'expect'} = $1; + } elsif ( $line =~ /^expect return/ ) { + $line =~ s/^expect return //g; + $line =~ s/\r//g; + $cmd{'return'} = $line; + } elsif ( $line =~ /^setenv/ ) { + $line =~ s/^setenv //g; + $line =~ s/\r//g; + setenv_cmd($line); + } elsif ( $line =~ /^timeout/ ) { + $line =~ s/^timeout //; + $line =~ s/\r//g; + $cmd{'timeout'} = $line; + } } else { die "[TESH/CRITICAL] parse error: $line\n"; } } -# We're done reading the input file +# We are done reading the input file close $infh unless ( $tesh_file eq "(stdin)" ); -# Deal with last command +# Deal with last command, if any if ( defined( $cmd{'cmd'} ) ) { exec_cmd( \%cmd ); %cmd = (); @@ -787,7 +771,7 @@ sub cd_cmd($) { print "Chdir to $directory failed: No such file or directory\n"; } if ( $failure == 1 ) { - print "Test suite `$tesh_file': NOK (system error)\n"; + print "Test suite `$cmd{'filefile'}': NOK (system error)\n"; exit 4; } }