On Wed, 2009-08-12 at 01:42 -0700, Garrett Cooper wrote: 
> On Tue, Aug 11, 2009 at 10:30 AM, Subrata
> Modak<[email protected]> wrote:
> > At the heart of this infrastructure is this Script, which will actually:
> > 1) Change the temporary command file generated by runltp,
> > 2) Create a new temporary command file which will have the following entries
> > against each one entry in the command file:
> >        i) Same TAG COMMAND_LINE entry,
> >        ii) Entry to call the script to insert faults,
> >        iii) Entry to run as many loops as specified by the user,
> >        iv) Entry to call the script to restore kernel to default state,
> >
> > It is capable of creating new entries in the temporary command file with the
> > following tags and command lines:
> > TAG_NAME=tag1,  COMMANDLINE="test1",
> > TAG_NAME=tag1_loop1,    COMMANDLINE="insert_fault_in_kernel; test1",
> > TAG_NAME=tag1_loop2,    COMMANDLINE="test1",
> > ...
> > TAG_NAME=tag1_loopn,    COMMANDLINE="test1; restore_default_kernel",
> >
> > Signed-off-by: Subrata Modak <[email protected]>
> > ---
> >
> > diff -uprN 
> > ltp-full-20090731.orig/tools/create_kernel_faults_in_loops_and_probability.pl
> >  ltp-full-20090731/tools/create_kernel_faults_in_loops_and_probability.pl
> > --- 
> > ltp-full-20090731.orig/tools/create_kernel_faults_in_loops_and_probability.pl
> >        1970-01-01 05:30:00.000000000 +0530
> > +++ 
> > ltp-full-20090731/tools/create_kernel_faults_in_loops_and_probability.pl    
> > 2009-08-11 20:23:54.000000000 +0530
> > @@ -0,0 +1,97 @@
> > +#!/usr/bin/perl
> > +################################################################################
> > +##                                                                         
> >    ##
> > +## Copyright (c) International Business Machines  Corp., 2009              
> >    ##
> > +##                                                                         
> >    ##
> > +## This program is free software;  you can redistribute it and/or modify   
> >    ##
> > +## it under the terms of the GNU General Public License as published by    
> >    ##
> > +## the Free Software Foundation; either version 2 of the License, or       
> >    ##
> > +## (at your option) any later version.                                     
> >    ##
> > +##                                                                         
> >    ##
> > +## This program is distributed in the hope that it will be useful, but     
> >    ##
> > +## WITHOUT ANY WARRANTY; without even the implied warranty of 
> > MERCHANTABILITY ##
> > +## or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public 
> > License   ##
> > +## for more details.                                                       
> >    ##
> > +##                                                                         
> >    ##
> > +## You should have received a copy of the GNU General Public License       
> >    ##
> > +## along with this program;  if not, write to the Free Software            
> >    ##
> > +## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 
> >    ##
> > +##                                                                         
> >    ##
> > +################################################################################
> > +#                                                                          
> >    ##
> > +# File :        create_kernel_faults_in_loops_and_probability.pl           
> >   ##
> > +#                                                                          
> >    ##
> > +# Usage:        create_kernel_faults_in_loops_and_probability.pl\          
> >   ##
> > +#              <LTP_COMMAND_FILE> <NO_OF_LOOPS_EACH_TEST_WILL_RUN>\        
> >   ##
> > +#              <PROBABILITY_OF_FAULT_INJECTION>                            
> >   ##
> > +#                                                                          
> >    ##
> > +# Description:  This is a simple perl script which will take ltp command 
> > file ##
> > +#              as input and then create a final command file while will 
> > have ##
> > +#              the following entries for each test tag:                    
> >   ##
> > +#              1) <tag_name_loop1> <test_binary_name>                      
> >   ##
> > +#              2) <tag_name_loop2> <insert_kernel_faults.sh 
> > test_binary_name>##
> > +#              3) tag entried from loop3 to loop(n-1)                      
> >   ##
> > +#              4) <tag_name_loopn> <restore_kernel_faults_default.sh 
> > test_binary_name>##
> > +#                                                                          
> >    ##
> > +# Author:       Subrata Modak <[email protected]>                 
> >    ##
> > +#                                                                          
> >    ##
> > +# History:      Aug 11 2009 - Created - Subrata Modak.                     
> >    ##
> > +################################################################################
> > +
> > +my $command_file       = shift (@ARGV) || syntax();
> > +my $loops              = shift (@ARGV) || syntax();
> > +my $failure_probability        = shift (@ARGV) || syntax();
> > +
> > +sub syntax() {
> > +       print "syntax: create_fault_in_loops_and_probability.pl\
> > +       <LTP_COMMAND_FILE> <NO_OF_LOOPS_EACH_TEST_WILL_RUN>\
> > +       <PROBABILITY_OF_FAULT_INJECTION>\n";
> > +       exit (1);
> > +}
> > +#$ENV{TEST_START_TIME})
> > +
> > +
> > +open (FILE, $command_file) || die "Cannot open file: $command_file\n";
> > +while ($line = <FILE>) {
> > +       if ($line =~ /^#/) {
> > +               print "$line";
> > +               next;
> > +       }
> > +       if ($line =~ /^\n$/) {
> > +               next;
> > +       }
> > +       chomp $line;
> > +       print "$line\n"; #Print one instance for stable execution
> > +       @tag_and_actual_command = split(/\ /, $line);
> > +
> > +       #The remaining loops should be running under fault injection
> > +       for ($counter=1; $counter<=$loops; $counter++) {
> > +               my $token_counter = 0;
> > +               foreach my $token (@tag_and_actual_command) {
> > +                       if ($token_counter == 0 ) {
> > +                               #Time to append the actual command tag with 
> > the loop no.
> > +                               print $token . "_loop_" . $counter . " ";
> > +                               $token_counter++;
> > +                               next;
> > +                       }
> > +                       if ($token_counter == 1 && $counter == 1) {
> > +                               #Time to include the fault injection script 
> > in the first loop
> > +                               print 
> > "\$LTPROOT/tools/insert_kernel_faults.sh " . $failure_probability . "; " . 
> > $token;
> > +                               $token_counter++;
> > +                               next;
> > +                       }
> > +                       print " " . $token . " ";
> > +               }
> > +               if ($counter == $loops) {
> > +                       #Time to withdraw the faults once the last loop has 
> > been executed
> > +                       #Until all faults has been successfully restored to 
> > default values...
> > +                       #Keep restoring them
> > +                       print "; " . 
> > "\$LTPROOT/tools/restore_kernel_faults_default.sh; RC=\$?; while [ \$RC -ne 
> > 0 ]; do \$LTPROOT/tools/restore_kernel_faults_default.sh; RC=\$?; done\n"
> > +               } else {
> > +                       print "\n"
> > +               }
> > +       }
> > +
> > +}
> > +close (FILE);
> > +
> 
> Hi Subrata,
>     1. Why is this written in perl? bourne shell should be the maximum
> requirement for any and all infrastructure scripts.

I initially wrote this in perl as i feel more comfortable in doing
regular expression in perl than in any other language. If you want you
can later replace it with a shell script, i will not have any objection.

> 2. Why not write this in a runtest-ish file format, e.g.
> 
> [tag] [command]
> 
>     ? That way you can feed the command through pan at least...

ThatÅ› exactly it is doing. Before the original temporary command file is
passed to ltp-pan, this script is just modifying that command file and
passing to ltp-pan. So, ltp-pan has no idea of what it is running. It is
just parsing the tags and commands associated with them. I am exploiting
that behavior only without touching anything in ltp-pan.

Regards--
Subrata

> Thanks
> -Garrett


------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with 
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list

Reply via email to