already there!
:)

On Fri, Mar 2, 2012 at 6:36 PM, Jeffrey Squyres <jsquy...@cisco.com> wrote:

> Sweet!
>
> Can you document this on the wiki in the listing of all the INI fields?
>
>
> On Mar 2, 2012, at 10:27 AM, mi...@osl.iu.edu wrote:
>
> > Author: miked
> > Date: 2012-03-02 10:27:34 EST (Fri, 02 Mar 2012)
> > New Revision: 1440
> > URL: https://svn.open-mpi.org/trac/mtt/changeset/1440
> >
> > Log:
> > Now it is possible to shuffle tests in mtt. The parameter that enables
> this feature is:
> > shuffle_tests=
> > it can be assigned a comma separated list of allowed values: sections,
> tests, execs, nps, args, all.
> >
> > Notations:
> >       sections - shuffle test_run sections found in mtt
> >       tests - shuffle test executables if any (we have single executable
> per test_run)
> >       execs - shuffle exec command line present in main [MTT] section
> >       nps - shuffle runs with different nps
> >       args - shuffle executable arguments
> >       all - enable all the above.
> >
> >
> > Text files modified:
> >   trunk/lib/MTT/Globals.pm           |    65
> +++++++++++----------------------------
> >   trunk/lib/MTT/Reporter/Email.pm    |     6 ++-
> >   trunk/lib/MTT/Reporter/TextFile.pm |     2
> >   trunk/lib/MTT/Test/Run.pm          |     7 +++
> >   trunk/lib/MTT/Test/RunEngine.pm    |    61
> +++++++++++++++++++++++++++++--------
> >   trunk/lib/MTT/Util.pm              |    14 ++++++-
> >   6 files changed, 89 insertions(+), 66 deletions(-)
> >
> > Modified: trunk/lib/MTT/Globals.pm
> >
> ==============================================================================
> > --- trunk/lib/MTT/Globals.pm  (original)
> > +++ trunk/lib/MTT/Globals.pm  2012-03-02 10:27:34 EST (Fri, 02 Mar 2012)
> > @@ -80,8 +80,7 @@
> >
> >     save_intermediate_report => undef,
> >     save_intermediate_report_enable => undef,
> > -    ini_value_run_for => undef,
> > -    start_time => localtime,
> > +     shuffle_tests => undef,
> >     description => undef,
> > };
> >
> > @@ -181,50 +180,24 @@
> >         $Values->{save_intermediate_report_enable} = $val;
> >     }
> >
> > -#    $val = MTT::Values::Value($ini, "MTT", "finish_at");
> > -#    if (defined($val)) {
> > -#            #finish_at format: hh:mm[dd/MM]
> > -#            $val =~ m/(\d\d:\d\d)(\[(\d\d)\/(\d\d)\])*/;
> > -#            my $stop_time = $1.":00";
> > -#            my $stop_day = $3;
> > -#            my $stop_month =$4;
> > -#            my @timeData = localtime(time);
> > -#            #@timedata : [0]secs [1]minutes [2]hours [3]days [4]month-1
> > -#            my $finish_time =
> MTT::Util::parse_time_to_seconds($stop_time);
> > -#
> > -#
> > -#            my
> $local_time=$timeData[2].":".$timeData[1].":".$timeData[0];
> > -#            my $current_time =
> MTT::Util::parse_time_to_seconds($local_time);
> > -#
> > -#
> > -#
> > -#            my $secs_left;
> > -#            if ($current_time < $finish_time){
> > -#                    $secs_left = $finish_time-$current_time;
> > -#            } else {
> > -#                    $secs_left = $finish_time+24*3600-$current_time;
> > -#            }
> > -#            $Values->{ini_value_run_for} = $secs_left;
> > -#
> > -#            if (!$stop_month){
> > -#            if ($stop_day){
> > -#                    if ($stop_day < $timeData[3]){
> > -#                            MTT::Messages::Warning("Stop date is less
> than start date: disabling stop_at feature");
> > -#                            $Values->{ini_value_run_for} = undef;
> > -#                    }else if ($stop_day == $timeData[3]){
> > -#                            if ($finish_time < $current_time){
> > -#                                    MTT::Messages::Warning("The stop
> is less than start time: disabling stop_at feature");
> > -#                            }
> > -#                    }else{
> > -#                            if ($finish_time > $current_time){
> > -#                                    $secs_left += 24*3600;
> > -#                            }
> > -#                    }
> > -#            }
> > -#            }
> > -#            printf "secs_left = ",$secs_left, "hours_left =
> ",$secs_left/3600,"\n";
> > -#
> > -#    }
> > +
> > +    $val = MTT::Values::Value($ini, "MTT", "shuffle_tests");
> > +    if (defined($val)) {
> > +         my @shuffles = grep length, split(/\s*,\s*/,$val);
> > +         my @allowed_shuffles = ('sections', 'tests', 'execs', 'nps',
> 'args', 'all');
> > +         my %allowed_map = map { $_ => 1} @allowed_shuffles;
> > +         foreach my $sh (@shuffles){
> > +             if (!exists($allowed_map{$sh})){
> > +                     MTT::Messages::Error("<$sh> is not allowed
> shuffle_tests value. Allowed are:", join(',',@allowed_shuffles),".");
> > +             }
> > +             $Values->{shuffle_tests}->{$sh} = 1;
> > +         }
> > +         if ($Values->{shuffle_tests}->{all}){
> > +             foreach my $allow (@allowed_shuffles){
> > +                     $Values->{shuffle_tests}->{$allow} = 1;
> > +             }
> > +         }
> > +    }
> > }
> >
> >
> #--------------------------------------------------------------------------
> >
> > Modified: trunk/lib/MTT/Reporter/Email.pm
> >
> ==============================================================================
> > --- trunk/lib/MTT/Reporter/Email.pm   (original)
> > +++ trunk/lib/MTT/Reporter/Email.pm   2012-03-02 10:27:34 EST (Fri, 02
> Mar 2012)
> > @@ -148,8 +148,10 @@
> >                       $to = Value( $Ini, $Section, "email_to" );
> >               }
> >       }
> > -     my $body = $subject."\n".$footer."\n";
> > -     MTT::Mail::Send($subject, $to, $from, $body );
> > +     my $body = $footer."\n";
> > +     if ($to){
> > +             MTT::Mail::Send($subject, $to, $from, $body );
> > +     }
> > }
> >
> > 1;
> >
> > Modified: trunk/lib/MTT/Reporter/TextFile.pm
> >
> ==============================================================================
> > --- trunk/lib/MTT/Reporter/TextFile.pm        (original)
> > +++ trunk/lib/MTT/Reporter/TextFile.pm        2012-03-02 10:27:34 EST
> (Fri, 02 Mar 2012)
> > @@ -142,7 +142,7 @@
> > sub Flush{
> >       my ($info, $entries) = @_;
> >       my @results_to_flush = @results;
> > -     push(@results_to_flush, $entries);
> > +     push(@results_to_flush, $entries) if $entries;
> >       _summary_report(\@results_to_flush, "yes")
> >         if (@results_to_flush);
> >
> >
> > Modified: trunk/lib/MTT/Test/Run.pm
> >
> ==============================================================================
> > --- trunk/lib/MTT/Test/Run.pm (original)
> > +++ trunk/lib/MTT/Test/Run.pm 2012-03-02 10:27:34 EST (Fri, 02 Mar 2012)
> > @@ -77,7 +77,12 @@
> >
> >     # Go through all the sections in the ini file looking for section
> >     # names that begin with "Test run:"
> > -    foreach my $section ($ini->Sections()) {
> > +    my @sects = $ini->Sections();
> > +    if ($MTT::Globals::Values->{shuffle_tests}->{sections}){
> > +     MTT::Util::shuffle(\@sects);
> > +    }
> > +
> > +    foreach my $section (@sects) {
> >         # See if we're supposed to terminate.  Only check in the
> >         # outtermost and innermost loops (even though we *could* check
> >         # at every loop level); that's good enough.
> >
> > Modified: trunk/lib/MTT/Test/RunEngine.pm
> >
> ==============================================================================
> > --- trunk/lib/MTT/Test/RunEngine.pm   (original)
> > +++ trunk/lib/MTT/Test/RunEngine.pm   2012-03-02 10:27:34 EST (Fri, 02
> Mar 2012)
> > @@ -39,7 +39,7 @@
> > my $mpi_details_name;
> > my $test_run_full_name;
> > my $break_threshold;
> > -
> > +my $shuffle;
> > # Keep track of how many tests have passed, failed, skipped, and timed
> out
> > my $test_results_count;
> >
> > @@ -52,7 +52,6 @@
> > my $report_after_n_results;
> > my $prev_section_name = undef;
> > my $group_reports = 0;
> > -my $tests_performed = 0;
> >
> >
> #--------------------------------------------------------------------------
> >
> > @@ -96,6 +95,10 @@
> >     $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");
> > +
> > +     $shuffle = undef;
> > +    _register_shuffles($ini,$section);
> > +
> >       my $reports_per_job = Value($ini, "mtt", "reports_per_job");
> >     # 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
> > @@ -167,6 +170,10 @@
> >     $verbose_out = 0;
> >     my $test_count = 0;
> >     my $printed = 0;
> > +    if ($shuffle->{tests}){
> > +     MTT::Util::shuffle(\@{$ret->{tests}});
> > +    }
> > +
> >     foreach my $run (@{$ret->{tests}}) {
> >
> >         # See if we're supposed to terminate.
> > @@ -221,6 +228,9 @@
> >         if (ref($all_np) eq "") {
> >             $test_results->{$all_np} = _run_one_np($install_dir, $run,
> $mpi_details, $all_np, $force);
> >         } else {
> > +             if ($shuffle->{nps}){
> > +                     MTT::Util::shuffle($all_np);
> > +             }
> >             foreach my $this_np (@$all_np) {
> >                 # See if we're supposed to terminate.
> >                 last
> > @@ -288,13 +298,19 @@
> >         if (ref($all_argv) eq "") {
> >             $all_argv = [$all_argv];
> >         }
> > -
> > +             if ($shuffle->{args}){
> > +                     MTT::Util::shuffle($all_argv);
> > +             }
> >         foreach my $this_argv (@$all_argv) {
> >             $MTT::Test::Run::test_argv = $this_argv;
> >
> >             # Get all the exec's for this one np
> >             my $execs =
> MTT::Values::EvaluateString($mpi_details->{exec}, $ini, $mpi_details_name);
> > -
> > +            if (ref($execs) ne "" && $shuffle->{execs}){
> > +             MTT::Util::shuffle($execs);
> > +            }
> > +
> > +
> >             # If we just got one, run it.  Otherwise, loop over running
> them.
> >             if (ref($execs) eq "") {
> >                 _run_one_test($install_dir, $run, $mpi_details, $execs,
> $name, 1,
> > @@ -497,14 +513,7 @@
> >                 if (exists($report->{test_result}) &&
> >                     (MTT::Values::FAIL == $report->{test_result} ||
> MTT::Values::TIMED_OUT == $report->{test_result}));
> >
> > -    $tests_performed++;
> >
> > -     #print "\t\t--> Test #",$tests_performed," done\n";
> > -
> > -
> > -     #MTT::Reporter::Flush();
> > -     #MTT::Reporter::TextFile::deSubmit();
> > -
> >     # If there is an after_each step, run it
> >     $ENV{MTT_TEST_RUN_RESULT_MESSAGE} =
> >         (MTT::Values::PASS == $report->{test_result} ? "passed" :
> > @@ -558,6 +567,32 @@
> >         }
> >     }
> > }
> > -
> > -
> > +sub _register_shuffles{
> > +     my ($ini,$section) = @_;
> > +
> > +     my $val = MTT::Values::Value($ini, $section, "shuffle_tests");
> > +     if (defined($val)) {
> > +         my @shuffles = grep length, split(/\s*,\s*/,$val);
> > +         my @allowed_shuffles = ('tests', 'execs', 'nps', 'args',
> 'all', 'none');
> > +         my %allowed_map = map { $_ => 1} @allowed_shuffles;
> > +         foreach my $sh (@shuffles){
> > +             if (!exists($allowed_map{$sh})){
> > +                     MTT::Messages::Error("<$sh> is not allowed section
> specific shuffle_tests value. Allowed are:",
> join(',',@allowed_shuffles),".");
> > +             }
> > +             $shuffle->{$sh} = 1;
> > +         }
> > +         if ($shuffle->{none}){
> > +             $shuffle = undef;
> > +         }
> > +         if ($shuffle->{all}){
> > +             foreach my $allow (@allowed_shuffles){
> > +                     $shuffle->{$allow} = 1;
> > +             }
> > +         }
> > +
> > +     }
> > +    else{
> > +     $shuffle = $MTT::Globals::Values->{shuffle_tests};
> > +    }
> > +}
> > 1;
> >
> > Modified: trunk/lib/MTT/Util.pm
> >
> ==============================================================================
> > --- trunk/lib/MTT/Util.pm     (original)
> > +++ trunk/lib/MTT/Util.pm     2012-03-02 10:27:34 EST (Fri, 02 Mar 2012)
> > @@ -208,9 +208,6 @@
> >             $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;
> >         }
> >     }
> > @@ -395,4 +392,15 @@
> >     }
> > }
> >
> >
> +#--------------------------------------------------------------------------
> > +sub shuffle{
> > +     # Shuffle an array given via reference randomly
> > +     my $array = shift;
> > +    my $i;
> > +    for ($i = @$array; --$i; ) {
> > +        my $j = int rand ($i+1);
> > +        next if $i == $j;
> > +        @$array[$i,$j] = @$array[$j,$i];
> > +    }
> > +}
> > 1;
> > _______________________________________________
> > 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
>

Reply via email to