done credit goes to Valentin as a creator of this feature! On Wed, Jan 25, 2012 at 3:11 PM, Jeff Squyres <jsquy...@cisco.com> wrote:
> Yummy -- thanks Mike! > > Can you add this field (and any others you have added) to the wiki? > > https://svn.open-mpi.org/trac/mtt/wiki/MTTINIFileFields > > This is our *only* documentation; it's important to keep it up to date. > > Thanks! > > > On Jan 25, 2012, at 6:02 AM, mi...@osl.iu.edu wrote: > > > Author: miked > > Date: 2012-01-25 06:02:47 EST (Wed, 25 Jan 2012) > > New Revision: 1433 > > URL: https://svn.open-mpi.org/trac/mtt/changeset/1433 > > > > Log: > > * Introduce mtt.break_threshold_timeout_and_fail ini param to specify % > of overall failed tests to trigger stop execution. > > > > > > Text files modified: > > trunk/lib/MTT/Reporter/TextFile.pm | 9 ++++- > > trunk/lib/MTT/Test/Run.pm | 30 ++++++++++++++++---- > > trunk/lib/MTT/Test/RunEngine.pm | 60 > +++++++++++++++++++++++++++++++-------- > > trunk/lib/MTT/Util.pm | 6 ++++ > > trunk/lib/MTT/Values.pm | 3 + > > 5 files changed, 86 insertions(+), 22 deletions(-) > > > > Modified: trunk/lib/MTT/Reporter/TextFile.pm > > > ============================================================================== > > --- trunk/lib/MTT/Reporter/TextFile.pm (original) > > +++ trunk/lib/MTT/Reporter/TextFile.pm 2012-01-25 06:02:47 EST > (Wed, 25 Jan 2012) > > @@ -230,8 +230,13 @@ > > my $filename = "All_phase-summary.txt"; > > my $file = "$dirname/" . MTT::Files::make_safe_filename("$filename"); > > > > - my $body = join("\n", ($summary_header, $table->render, $perf_stat, > $summary_footer)); > > - > > + my $body; > > + if ($MTT::Globals::Internals->{is_stopped_on_break_threshold}){ > > + $body = join("\n", ($summary_header, $table->render, > $perf_stat, $MTT::Globals::Internals->{stopped_on_break_threshold_message}, > $summary_footer)); > > + } > > + else{ > > + $body = join("\n", ($summary_header, $table->render, > $perf_stat, $summary_footer)); > > + } > > print $body; > > _output_results($file, $body); > > > > > > Modified: trunk/lib/MTT/Test/Run.pm > > > ============================================================================== > > --- trunk/lib/MTT/Test/Run.pm (original) > > +++ trunk/lib/MTT/Test/Run.pm 2012-01-25 06:02:47 EST (Wed, 25 Jan 2012) > > @@ -64,8 +64,11 @@ > > > #-------------------------------------------------------------------------- > > > > sub Run { > > - my ($ini, $ini_full, $install_dir, $runs_data_dir, $force) = @_; > > + my ($ini, $ini_full, $install_dir, $runs_data_dir, $force, > $count_total_tests_number) = @_; > > > > + if ($count_total_tests_number ne "yes"){ > > + Run($ini, $ini_full, $install_dir, $runs_data_dir, > $force,"yes"); > > + } > > # Save the environment > > my %ENV_SAVE = %ENV; > > > > @@ -188,7 +191,7 @@ > > _do_run($ini, $section, $test_build, > > $mpi_get, $mpi_install, > > $install_dir, $runs_data_dir, > > - $force); > > + > $force,$count_total_tests_number); > > delete > $MTT::Globals::Internals->{mpi_get_name}; > > delete > $MTT::Globals::Internals->{mpi_install_name}; > > delete > $MTT::Globals::Internals->{test_get_name}; > > @@ -196,12 +199,24 @@ > > delete > $MTT::Globals::Internals->{test_run_name}; > > %ENV = %ENV_SAVE; > > } > > + last > > + if > ($MTT::Globals::Internals->{is_stopped_on_break_threshold}); > > } > > + last > > + if > ($MTT::Globals::Internals->{is_stopped_on_break_threshold}); > > } > > + last > > + if > ($MTT::Globals::Internals->{is_stopped_on_break_threshold}); > > } > > + last > > + if > ($MTT::Globals::Internals->{is_stopped_on_break_threshold}); > > } > > + last > > + if > ($MTT::Globals::Internals->{is_stopped_on_break_threshold}); > > } > > } > > + last > > + if ($MTT::Globals::Internals->{is_stopped_on_break_threshold}); > > } > > > > Verbose("*** Run test phase complete\n"); > > @@ -211,7 +226,7 @@ > > > > sub _do_run { > > my ($ini, $section, $test_build, $mpi_get, $mpi_install, > $install_dir, > > - $runs_data_dir, $force) = @_; > > + $runs_data_dir, $force, $count_total_tests_number) = @_; > > > > # Simple section name > > my $simple_section = GetSimpleSection($section); > > @@ -528,9 +543,13 @@ > > # If we got a list of tests to run, invoke the run engine to > > # actually run them. > > if ($ret && $ret->{test_result}) { > > - MTT::Test::RunEngine::RunEngine($ini, $section, $install_dir, > > + my $return_value; > > + $return_value = MTT::Test::RunEngine::RunEngine($ini, $section, > $install_dir, > > $runs_data_dir, $mpi_details, > > - $test_build, $force, $ret); > > + $test_build, $force, $ret, > $count_total_tests_number); > > + if ($count_total_tests_number eq "yes"){ > > + $MTT::Globals::Internals->{total_tests_counter} += > $return_value; > > + } > > } > > > > # Unload any loaded environment modules > > @@ -545,7 +564,6 @@ > > # means reverting to an env snapshot. > > MTT::EnvImporter::unload(reverse @env_importers); > > } > > - > > } > > > > > #-------------------------------------------------------------------------- > > > > Modified: trunk/lib/MTT/Test/RunEngine.pm > > > ============================================================================== > > --- trunk/lib/MTT/Test/RunEngine.pm (original) > > +++ trunk/lib/MTT/Test/RunEngine.pm 2012-01-25 06:02:47 EST (Wed, 25 > Jan 2012) > > @@ -38,10 +38,14 @@ > > my $section; > > my $mpi_details_name; > > my $test_run_full_name; > > +my $break_threshold; > > > > # Keep track of how many tests have passed, failed, skipped, and timed > out > > my $test_results_count; > > > > +#same as test_results_count but global over all envokations of RunEngine > > +my $test_results_count_global; > > + > > # Submit results after each run or after *all* the runs > > my $report_after_each_result = 0; > > my $report_results_count = 0; > > @@ -56,7 +60,7 @@ > > my ($install_dir, $runs_data_dir, $mpi_details, $test_build, $force, > $ret); > > > > # Make sure though, that the $ini remains a global > > - ($ini, $section, $install_dir, $runs_data_dir, $mpi_details, > $test_build, $force, $ret) = @_; > > + ($ini, $section, $install_dir, $runs_data_dir, $mpi_details, > $test_build, $force, $ret, my $count_total_tests_number) = @_; > > > > my $test_results; > > $group_reports = MTT::Values::Value($ini, "mtt", > "submit_group_results"); > > @@ -81,12 +85,16 @@ > > my $variants_count_total = > > $test_count_total * $np_count_total * $argv_count_total * > $exec_count_total; > > > > + if ($count_total_tests_number eq "yes"){ > > + return $variants_count_total; > > + } > > # Set some thresholds for an early exit > > - my $break_threshold; > > + $break_threshold = undef; > > $break_threshold->{MTT::Values::PASS} = Value($ini, $section, > "break_threshold_pass"); > > $break_threshold->{MTT::Values::FAIL} = Value($ini, $section, > "break_threshold_fail"); > > $break_threshold->{MTT::Values::TIMED_OUT} = Value($ini, $section, > "break_threshold_timeout"); > > $break_threshold->{MTT::Values::SKIPPED} = Value($ini, $section, > "break_threshold_skipped"); > > + $break_threshold->{MTT::Values::TIMED_OUT_OR_FAIL} = Value($ini, > "mtt", "break_threshold_timeout_and_fail"); > > > > # This boolean value defaults to 0, and allows the user to submit > results > > # after each test to ensure at least *some* results are submitted > (in case > > @@ -208,25 +216,29 @@ > > $run->{wdir} = $wdir; > > } > > # Just one np, or an array of np values? > > + > > if (ref($all_np) eq "") { > > - $test_results->{$all_np} = > > - _run_one_np($install_dir, $run, $mpi_details, $all_np, > $force); > > + $test_results->{$all_np} = _run_one_np($install_dir, $run, > $mpi_details, $all_np, $force); > > } else { > > foreach my $this_np (@$all_np) { > > # See if we're supposed to terminate. > > last > > - if (MTT::Util::time_to_terminate()); > > + if (MTT::Util::time_to_terminate()); > > + > > + $test_results->{$all_np} = _run_one_np($install_dir, > $run, $mpi_details, $this_np,$force); > > > > - $test_results->{$this_np} = > > - _run_one_np($install_dir, $run, $mpi_details, > $this_np, > > - $force); > > + last > > + if > ($MTT::Globals::Internals->{is_stopped_on_break_threshold}); > > } > > } > > + > > + last > > + if > ($MTT::Globals::Internals->{is_stopped_on_break_threshold}); > > ++$test_count; > > > > # Write out the "to be saved" test run results > > MTT::Test::SaveRuns($runs_data_dir); > > - > > + > > $MTT::Test::Run::mpi_details = $save_run_mpi_details; > > > > # Output a progress bar > > @@ -247,6 +259,7 @@ > > > > MTT::Reporter::QueueSubmit(); > > } > > + > > } > > > > sub _run_one_np { > > @@ -290,16 +303,30 @@ > > foreach my $e (@$execs) { > > # See if we're supposed to terminate. > > last > > - if (MTT::Util::time_to_terminate()); > > + if (MTT::Util::time_to_terminate()); > > + > > _run_one_test($install_dir, $run, $mpi_details, $e, > $name, > > - $variant++, $force); > > + $variant++, $force); > > + > > + last > > + if (MTT::Util::check_break_threshold( > > + $test_results_count_global, > > + $break_threshold, > > + > $MTT::Globals::Internals->{total_tests_counter}) > > + ); > > } > > } > > - > > + last > > + if (MTT::Util::check_break_threshold( > > + $test_results_count_global, > > + $break_threshold, > > + $MTT::Globals::Internals->{total_tests_counter}) > > + ); > > + > > $MTT::Test::Run::test_argv = undef; > > } > > } > > - > > + > > $MTT::Test::Run::test_np = undef; > > } > > > > @@ -457,6 +484,13 @@ > > $test_results_count->{$report->{test_result}}++ > > if (exists($report->{test_result})); > > > > + $test_results_count_global->{$report->{test_result}}++ > > + if (exists($report->{test_result})); > > + > > + $test_results_count_global->{MTT::Values::TIMED_OUT_OR_FAIL}++ > > + if (exists($report->{test_result}) && > > + (MTT::Values::FAIL == $report->{test_result} || > MTT::Values::TIMED_OUT == $report->{test_result})); > > + > > # If there is an after_each step, run it > > $ENV{MTT_TEST_RUN_RESULT_MESSAGE} = > > (MTT::Values::PASS == $report->{test_result} ? "passed" : > > > > Modified: trunk/lib/MTT/Util.pm > > > ============================================================================== > > --- trunk/lib/MTT/Util.pm (original) > > +++ trunk/lib/MTT/Util.pm 2012-01-25 06:02:47 EST (Wed, 25 Jan 2012) > > @@ -205,6 +205,12 @@ > > > > if (($count->{$result} / $total) > $threshold->{$result}) { > > Verbose("--> Threshold ($per) exceeded for > \"$result_label\": $count->{$result} out of $total.\n"); > > + $MTT::Globals::Internals->{is_stopped_on_break_threshold} = > "true"; > > + > $MTT::Globals::Internals->{stopped_on_break_threshold_message} = "--> > Threshold ($per) exceeded for \"$result_label\": $count->{$result} out of > $total.\n"; > > + print STDOUT "--> Threshold ($per) exceeded for > \"$result_label\": $count->{$result} out of $total.\n"; > > + if > ($MTT::Globals::Internals->{is_stopped_on_break_threshold}){ > > + print STDOUT "0xdeadbeef: it works"; > > + } > > return 1; > > } > > } > > > > Modified: trunk/lib/MTT/Values.pm > > > ============================================================================== > > --- trunk/lib/MTT/Values.pm (original) > > +++ trunk/lib/MTT/Values.pm 2012-01-25 06:02:47 EST (Wed, 25 Jan 2012) > > @@ -45,6 +45,7 @@ > > PASS => 1, > > SKIPPED => 2, > > TIMED_OUT => 3, > > + TIMED_OUT_OR_FAIL =>4, > > }; > > > > # Map to human-readable English labels > > @@ -53,7 +54,7 @@ > > $result_messages->{MTT::Values::PASS} = "pass"; > > $result_messages->{MTT::Values::TIMED_OUT} = "timeout"; > > $result_messages->{MTT::Values::SKIPPED} = "skipped"; > > - > > +$result_messages->{MTT::Values::TIMED_OUT_OR_FAIL} = "timeout_and_fail"; > > # current $ini and $section parameters (we use it in funclets) > > our $evaluate_string_ini; > > our $evaluate_string_section; > > _______________________________________________ > > mtt-svn mailing list > > mtt-...@open-mpi.org > > http://www.open-mpi.org/mailman/listinfo.cgi/mtt-svn > > > -- > Jeff Squyres > jsquy...@cisco.com > For corporate legal information go to: > http://www.cisco.com/web/about/doing_business/legal/cri/ > > > _______________________________________________ > mtt-devel mailing list > mtt-de...@open-mpi.org > http://www.open-mpi.org/mailman/listinfo.cgi/mtt-devel >