Home | History | Annotate | Download | only in ltp
      1 #!/bin/sh
      2 ################################################################################
      3 ##                                                                            ##
      4 ## Copyright (c) International Business Machines  Corp., 2001                 ##
      5 ##                                                                            ##
      6 ## This program is free software;  you can redistribute it and#or modify      ##
      7 ## it under the terms of the GNU General Public License as published by       ##
      8 ## the Free Software Foundation; either version 2 of the License, or          ##
      9 ## (at your option) any later version.                                        ##
     10 ##                                                                            ##
     11 ## This program is distributed in the hope that it will be useful, but        ##
     12 ## WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY ##
     13 ## or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License   ##
     14 ## for more details.                                                          ##
     15 ##                                                                            ##
     16 ## You should have received a copy of the GNU General Public License          ##
     17 ## along with this program;  if not, write to the Free Software               ##
     18 ## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA    ##
     19 ##                                                                            ##
     20 ################################################################################
     21 # File: runltp
     22 #
     23 # Description:  This script can be used to the tests in the LTP test suite
     24 #
     25 # Authors:      Manoj Iyer - manjo (at] mail.utexas.edu
     26 #               Robbe Williamson - robbiew (at] us.ibm.com
     27 #
     28 # History:      Oct 07 2003 - Modified - Manoj Iyer
     29 #               - use functions
     30 #               - clean up on script exit
     31 #               - error checking etc.
     32 #
     33 #               Oct 08 2003 - Modified - Manoj Iyer
     34 #               - fixed bug in creating results directory
     35 #               - all checks should be enlclosed in " " to avoid bash error
     36 #               - exit with error if ltp-pan is not found in pan directory
     37 #
     38 #               Jul 22 2007 - Modified - Ricardo Salveti de Araujo
     39 #               - added support to put more then one file at CMDLINE (-f)
     40 #               - added a new option, that the user can pass the address of
     41 #               the command file, and it'll use wget to get it (-w)
     42 #               - now -s does the grep at the selected command files (default,
     43 #               -f or -w)
     44 #
     45 #               Jul 23 2007 - Modified - Ricardo Salveti de Araujo
     46 #               - added flag to get the command file that has all failed tests
     47 #
     48 #               Sep 11 2007 - Modified - Subrata Modak
     49 #               - added option to create Failed File if it is not an absolute path
     50 #               - added option to create Output File if it is not an absolute path
     51 #               - added option to create Failed File compulsory, even if user has not mentioned it
     52 #
     53 #               Sep 14 2007 - Modified - Ricardo Salveti de Araujo
     54 #               - cleaning and removing duplicated code
     55 #
     56 #               Oct 27 2007 - Modified - Ricardo Salveti de Araujo and Subrata Modak
     57 #               - better ways to integrate "ltp/tools/genload/stress" with "ltp/runltp"
     58 #               Nov 24 2007 - Modified - Subrata Modak
     59 #               - Added a new option to generate output in HTML format also. Also retaining
     60 #                 the original test format
     61 #               Nov 28 2007 - Modified - Subrata Modak
     62 #               - Added a new option to mail back LTP reports
     63 #               May 19 2008 - Modified - Subrata Modak
     64 #               - Added capability for default Log file generation
     65 #		Aug 17 2009 - Modified - Subrata Modak
     66 #		- Added Fault Injection generation Capability through -F Option
     67 #
     68 #################################################################################
     69 
     70 
     71 
     72 setup()
     73 {
     74     cd `dirname $0` || \
     75     {
     76         echo "FATAL: unable to change directory to $(dirname $0)"
     77         exit 1
     78     }
     79     export LTPROOT=${PWD}
     80     export TMPBASE="/tmp"
     81     export PATH="${PATH}:${LTPROOT}/testcases/bin"
     82 
     83     export LTP_DEV_FS_TYPE="ext2"
     84 
     85     [ -d "$LTPROOT/testcases/bin" ] ||
     86     {
     87         echo "FATAL: LTP not installed correctly"
     88         echo "INFO:  Follow directions in INSTALL!"
     89         exit 1
     90     }
     91 
     92     [ -e "$LTPROOT/bin/ltp-pan" ] ||
     93     {
     94         echo "FATAL: Test suite driver 'ltp-pan' not found"
     95         echo "INFO:  Follow directions in INSTALL!"
     96         exit 1
     97     }
     98 }
     99 
    100 version_of_ltp()
    101 {
    102     cat "$LTPROOT/Version"
    103     exit 0
    104 }
    105 
    106 usage()
    107 {
    108     cat <<-EOF >&2
    109 
    110     usage: ${0##*/} [ -a EMAIL_TO ] [ -c NUM_PROCS ] [ -C FAILCMDFILE ] [ -T TCONFCMDFILE ]
    111     [ -d TMPDIR ] [ -D NUM_PROCS,NUM_FILES,NUM_BYTES,CLEAN_FLAG ] -e [ -f CMDFILES(,...) ]
    112     [ -g HTMLFILE] [ -i NUM_PROCS ] [ -l LOGFILE ] [ -m NUM_PROCS,CHUNKS,BYTES,HANGUP_FLAG ]
    113     -N -n [ -o OUTPUTFILE ] -p -q -Q [ -r LTPROOT ] [ -s PATTERN ] [ -t DURATION ]
    114     -v [ -w CMDFILEADDR ] [ -x INSTANCES ] [ -b DEVICE ] [-B LTP_DEV_FS_TYPE]
    115 	[ -F LOOPS,PERCENTAGE ] [ -z BIG_DEVICE ] [-Z  LTP_BIG_DEV_FS_TYPE]
    116 
    117     -a EMAIL_TO     EMAIL all your Reports to this E-mail Address
    118     -c NUM_PROCS    Run LTP under additional background CPU load
    119                     [NUM_PROCS = no. of processes creating the CPU Load by spinning over sqrt()
    120                                  (Defaults to 1 when value)]
    121     -C FAILCMDFILE  Command file with all failed test cases.
    122     -T TCONFCMDFILE Command file with all test cases that are not fully tested.
    123     -d TMPDIR       Directory where temporary files will be created.
    124     -D NUM_PROCS,NUM_FILES,NUM_BYTES,CLEAN_FLAG
    125                     Run LTP under additional background Load on Secondary Storage (Seperate by comma)
    126                     [NUM_PROCS   = no. of processes creating Storage Load by spinning over write()]
    127                     [NUM_FILES   = Write() to these many files (Defaults to 1 when value 0 or undefined)]
    128                     [NUM_BYTES   = write these many bytes (defaults to 1GB, when value 0 or undefined)]
    129                     [CLEAN_FLAG  = unlink file to which random data written, when value 1]
    130     -e              Prints the date of the current LTP release
    131     -f CMDFILES     Execute user defined list of testcases (separate with ',')
    132 	-F LOOPS,PERCENTAGE Induce PERCENTAGE Fault in the Kernel Subsystems, and, run each test for LOOPS loop
    133     -g HTMLFILE     Create an additional HTML output format
    134     -h              Help. Prints all available options.
    135     -i NUM_PROCS    Run LTP under additional background Load on IO Bus
    136                     [NUM_PROCS   = no. of processes creating IO Bus Load by spinning over sync()]
    137     -K DMESG_LOG_DIR
    138 			Log Kernel messages generated for each test cases inside this directory
    139     -l LOGFILE      Log results of test in a logfile.
    140     -m NUM_PROCS,CHUNKS,BYTES,HANGUP_FLAG
    141                     Run LTP under additional background Load on Main memory (Seperate by comma)
    142                     [NUM_PROCS   = no. of processes creating main Memory Load by spinning over malloc()]
    143                     [CHUNKS      = malloc these many chunks (default is 1 when value 0 or undefined)]
    144                     [BYTES       = malloc CHUNKS of BYTES bytes (default is 256MB when value 0 or undefined) ]
    145                     [HANGUP_FLAG = hang in a sleep loop after memory allocated, when value 1]
    146 	-M CHECK_TYPE
    147 		[CHECK_TYPE=1 => Full Memory Leak Check tracing children as well]
    148 		[CHECK_TYPE=2 => Thread Concurrency Check tracing children as well]
    149 		[CHECK_TYPE=3 => Full Memory Leak & Thread Concurrency Check tracing children as well]
    150     -N              Run all the networking tests.
    151     -n              Run LTP with network traffic in background.
    152     -o OUTPUTFILE   Redirect test output to a file.
    153     -p              Human readable format logfiles.
    154     -q              Print less verbose output to screen. This implies
    155                     not logging start of the test in kernel log.
    156     -Q              Don't log start of test in kernel log.
    157     -r LTPROOT      Fully qualified path where testsuite is installed.
    158     -R              Randomize test order.
    159     -s PATTERN      Only run test cases which match PATTERN.
    160     -S SKIPFILE     Skip tests specified in SKIPFILE
    161     -t DURATION     Execute the testsuite for given duration. Examples:
    162                       -t 60s = 60 seconds
    163                       -t 45m = 45 minutes
    164                       -t 24h = 24 hours
    165                       -t 2d  = 2 days
    166     -I ITERATIONS   Execute the testsuite ITERATIONS times.
    167     -w CMDFILEADDR  Uses wget to get the user's list of testcases.
    168     -x INSTANCES    Run multiple instances of this testsuite.
    169     -b DEVICE       Some tests require an unmounted block device
    170                     to run correctly.
    171     -B LTP_DEV_FS_TYPE The file system of test block devices.
    172     -z BIG_DEVICE   Some tests require a big unmounted block device
    173                     to run correctly.
    174     -Z  LTP_BIG_DEV_FS_TYPE The file system of the big device
    175 
    176 
    177 
    178     example: ${0##*/} -c 2 -i 2 -m 2,4,10240,1 -D 2,10,10240,1 -p -q  -l /tmp/result-log.$$ -o /tmp/result-output.$$ -C /tmp/result-failed.$$ -d ${PWD}
    179 
    180 
    181 	EOF
    182 exit 0
    183 }
    184 
    185 main()
    186 {
    187     local CMDFILES=
    188     local PRETTY_PRT=
    189     local ALT_DIR_OUT=0
    190     local ALT_DIR_RES=0
    191     local ALT_HTML_OUT=0
    192     local ALT_EMAIL_OUT=0
    193     local ALT_DMESG_OUT=0
    194     local RUN_NETEST=0
    195     local RUN_REPEATED=0
    196     local QUIET_MODE=
    197     local NO_KMSG=
    198     local NETPIPE=0
    199     local GENLOAD=0
    200     local MEMSIZE=0
    201     local DURATION=
    202     local CMDFILEADDR=
    203     local FAILCMDFILE=
    204     local TCONFCMDFILE=
    205     local INJECT_KERNEL_FAULT=
    206     local INJECT_KERNEL_FAULT_PERCENTAGE=
    207     local INJECT_FAULT_LOOPS_PER_TEST=
    208     local VALGRIND_CHECK=
    209     local VALGRIND_CHECK_TYPE=
    210     local LOGFILE_NAME=
    211     local LOGFILE=
    212     local OUTPUTFILE_NAME=
    213     local OUTPUTFILE=
    214     local HTMLFILE_NAME=
    215     local HTMLFILE=
    216     local DMESG_DIR=
    217     local EMAIL_TO=
    218     local TAG_RESTRICT_STRING=
    219     local PAN_COMMAND=
    220     local RANDOMRUN=0
    221     local DEFAULT_FILE_NAME_GENERATION_TIME=`date +"%Y_%m_%d-%Hh_%Mm_%Ss"`
    222     local scenfile=
    223 
    224     version_date=$(cat "$LTPROOT/Version")
    225 
    226     while getopts a:b:B:c:C:T:d:D:ef:F:g:hi:I:K:l:m:M:No:pqQr:Rs:S:t:T:w:x:z:Z: arg
    227     do  case $arg in
    228         a)  EMAIL_TO=$OPTARG
    229             ALT_EMAIL_OUT=1;;
    230         c)
    231             NUM_PROCS=$(($OPTARG))
    232             if   [ "$NUM_PROCS" -eq 0 ]; then
    233                 # User Did not Define the Value ,or, User Defined Zero,
    234                 # hence, prevent from creating infinite processes
    235                 NUM_PROCS=1
    236             fi
    237             $LTPROOT/testcases/bin/genload --cpu $NUM_PROCS >/dev/null 2>&1 &
    238             GENLOAD=1 ;;
    239 
    240         C)
    241             case $OPTARG in
    242             /*)
    243                 FAILCMDFILE="-C $OPTARG" ;;
    244             *)
    245                 FAILCMDFILE="-C $LTPROOT/output/$OPTARG"
    246                 ALT_DIR_OUT=1 ;;
    247             esac ;;
    248 
    249         T)
    250             case $OPTARG in
    251             /*)
    252                 TCONFCMDFILE="-T $OPTARG" ;;
    253             *)
    254                 TCONFCMDFILE="-T $LTPROOT/output/$OPTARG"
    255                 ALT_DIR_OUT=1 ;;
    256             esac ;;
    257 
    258         d)  # convert the user path to absolute path.
    259             export TMPBASE=$(readlink -f ${OPTARG}) ;;
    260 
    261         D)  NUM_PROCS=1; NUM_FILES=1; NUM_BYTES=$((1024 * 1024 * 1024)); CLEAN_FLAG=0
    262             ARGUMENT_LIST=$OPTARG
    263             TOTAL_ARGUMENTS=1
    264             for ARGUMENT in `echo "$ARGUMENT_LIST" | tr ',' ' '`
    265             do
    266                 case $TOTAL_ARGUMENTS in
    267                     1) NUM_PROCS="$ARGUMENT" ;;
    268                     2) NUM_FILES="$ARGUMENT" ;;
    269                     3) NUM_BYTES="$ARGUMENT" ;;
    270                     4) CLEAN_FLAG="$ARGUMENT" ;;
    271                 esac
    272                 TOTAL_ARGUMENTS=`expr $TOTAL_ARGUMENTS + 1`
    273             done
    274             # just to get the default values if the user passed 0
    275             if [ "$NUM_PROCS" -eq 0 ]; then
    276                 NUM_PROCS=1
    277             fi
    278             if [ "$NUM_FILES" -eq 0 ]; then
    279                 NUM_FILES=1
    280             fi
    281             if [ "$NUM_BYTES" -eq 0 ]; then
    282                 NUM_BYTES=$((1024 * 1024 * 1024))
    283             fi
    284             if [ "$CLEAN_FLAG" -ne 1 ]; then
    285                 CLEAN_FLAG=0
    286             fi
    287             if [ "$CLEAN_FLAG" -eq 1 ]; then
    288                 # Do not unlink file in this case
    289                 $LTPROOT/testcases/bin/genload --hdd $NUM_PROCS --hdd-files \
    290                     $NUM_FILES --hdd-bytes $NUM_BYTES >/dev/null 2>&1 &
    291             else
    292                 # Cleanup otherwise
    293                 $LTPROOT/testcases/bin/genload --hdd $NUM_PROCS --hdd-files \
    294                     $NUM_FILES --hdd-bytes $NUM_BYTES --hdd-noclean >/dev/null 2>&1 &
    295             fi
    296             GENLOAD=1;;
    297 
    298         e)  # Print out the version of LTP
    299             version_of_ltp
    300 	    ;;
    301         f)  # Execute user defined set of testcases.
    302             # Can be more then one file, just separate it with ',', like:
    303             # -f nfs,commands,/tmp/testfile
    304             CMDFILES=$OPTARG;;
    305 	F)	INJECT_KERNEL_FAULT=1
    306 		#Seperate out the NO_OF_LOOPS & FAULT_PERCENTAGE
    307 		INJECT_FAULT_LOOPS_PER_TEST=`echo $OPTARG |cut -d',' -f1 | tr -d '\n' | tr -d ' '`
    308 		INJECT_KERNEL_FAULT_PERCENTAGE=`echo $OPTARG |cut -d',' -f2 | tr -d '\n' | tr -d ' '`
    309 		if [ ! $INJECT_FAULT_LOOPS_PER_TEST ]; then
    310 			echo "Loops not properly defined. Resorting to default 5..."
    311 			export INJECT_FAULT_LOOPS_PER_TEST=5
    312 		fi
    313 		if [ ! $INJECT_KERNEL_FAULT_PERCENTAGE ]; then
    314 			echo "Fault Persentage not properly defined. Resorting to default 10..."
    315 			export INJECT_KERNEL_FAULT_PERCENTAGE=10
    316 		fi;;
    317         g)  HTMLFILE_NAME="$OPTARG"
    318             case $OPTARG in
    319             /*)
    320                 HTMLFILE="$OPTARG";;
    321             *)
    322                 HTMLFILE="$LTPROOT/output/$OPTARG";;
    323             esac
    324             ALT_DIR_OUT=1
    325             ALT_HTML_OUT=1;;
    326         h)  usage;;
    327 
    328         i)
    329             NUM_PROCS=$(($OPTARG))
    330             if   [ "$NUM_PROCS" -eq 0 ]; then
    331                 # User Did not Define the Value ,or, User Defined Zero,
    332                 # hence, prevent from creating infinite processes
    333                 NUM_PROCS=1
    334             fi
    335             $LTPROOT/testcases/bin/genload --io $NUM_PROCS >/dev/null 2>&1 &
    336             GENLOAD=1 ;;
    337 
    338         K)
    339 	    case $OPTARG in
    340         	   /*)
    341 			DMESG_DIR="$OPTARG-dmesg-output-`echo $$-``date +%X | tr -d ' '`";;
    342 	            *)
    343 		        DMESG_DIR="$LTPROOT/output/$OPTARG-dmesg-output-`echo $$-``date +%X | tr -d ' '`";;
    344 	    esac
    345             mkdir -p $DMESG_DIR
    346             ALT_DMESG_OUT=1;;
    347         l)
    348             LOGFILE_NAME="$OPTARG"
    349             case $OPTARG in
    350             /*)
    351                 LOGFILE="-l $OPTARG" ;;
    352             *)
    353                 LOGFILE="-l $LTPROOT/results/$OPTARG"
    354                 ALT_DIR_RES=1 ;;
    355             esac ;;
    356 
    357         m)  NUM_PROCS=1; CHUNKS=1; BYTES=$((256 * 1024 * 1024)); HANGUP_FLAG=0
    358             ARGUMENT_LIST=$OPTARG
    359             TOTAL_ARGUMENTS=1
    360             for ARGUMENT in `echo "$ARGUMENT_LIST" | tr ',' ' '`
    361             do
    362                 case $TOTAL_ARGUMENTS in
    363                     1) NUM_PROCS="$ARGUMENT" ;;
    364                     2) CHUNKS="$ARGUMENT" ;;
    365                     3) BYTES="$ARGUMENT" ;;
    366                     4) HANGUP_FLAG="$ARGUMENT" ;;
    367                 esac
    368                 TOTAL_ARGUMENTS=`expr $TOTAL_ARGUMENTS + 1`
    369             done
    370             # just to get the default values if the user passed 0
    371             if [ "$NUM_PROCS" -eq 0 ]; then
    372                 NUM_PROCS=1
    373             fi
    374             if [ "$CHUNKS" -eq 0 ]; then
    375                 CHUNKS=1
    376             fi
    377             if [ "$BYTES" -eq 0 ]; then
    378                 BYTES=$((256 * 1024 * 1024))
    379             fi
    380             if [ "$HANGUP_FLAG" -ne 1 ]; then
    381                 HANGUP_FLAG=0
    382             fi
    383             if [ "$HANGUP_FLAG" -eq 1 ]; then
    384                 # Hang in a Sleep loop after memory allocated
    385                 $LTPROOT/testcases/bin/genload --vm $NUM_PROCS --vm-chunks \
    386                     $CHUNKS --vm-bytes $BYTES --vm-hang >/dev/null 2>&1 &
    387             else
    388                 # Otherwise Do not Hangup
    389                 $LTPROOT/testcases/bin/genload --vm $NUM_PROCS --vm-chunks \
    390                     $CHUNKS --vm-bytes $BYTES >/dev/null 2>&1 &
    391             fi
    392             GENLOAD=1;;
    393 	M)
    394 		VALGRIND_CHECK=1
    395 		VALGRIND_CHECK_TYPE="$OPTARG";;
    396 
    397         N)  RUN_NETEST=1;;
    398 
    399         o)  OUTPUTFILE_NAME="$OPTARG"
    400             case $OPTARG in
    401             /*)
    402                 OUTPUTFILE="-o $OPTARG";;
    403             *)
    404                 OUTPUTFILE="-o $LTPROOT/output/$OPTARG"
    405                 ALT_DIR_OUT=1 ;;
    406             esac ;;
    407 
    408         p)  PRETTY_PRT="-p";;
    409 
    410         q)  QUIET_MODE="-q";;
    411 
    412         Q)  NO_KMSG="-Q";;
    413 
    414         r)  LTPROOT=$OPTARG;;
    415 
    416         R)  RANDOMRUN=1;;
    417 
    418         s)  TAG_RESTRICT_STRING=$OPTARG;;
    419 
    420 	S)  case $OPTARG in
    421             /*)
    422                 SKIPFILE=$OPTARG;;
    423             *)
    424                 SKIPFILE="$LTPROOT/$OPTARG";;
    425             esac ;;
    426 
    427         t)  # In case you want to specify the time
    428             # to run from the command line
    429             # (2m = two minutes, 2h = two hours, etc)
    430             DURATION="-t $OPTARG" ;;
    431 
    432         I)  # In case you want the testcases to runsequentially RUN_REPEATED times
    433             RUN_REPEATED=$OPTARG;;
    434 
    435         w)  CMDFILEADDR=$OPTARG;;
    436 
    437         x)  # number of ltp's to run
    438             cat <<-EOF >&1
    439             WARNING: The use of -x can cause unpredictable failures, as a
    440                      result of concurrently running multiple tests designed
    441                      to be ran exclusively.
    442                      Pausing for 10 seconds..."
    443 	EOF
    444             sleep 10
    445             INSTANCES="-x $OPTARG";;
    446         b) DEVICE=$OPTARG;;
    447         B) LTP_DEV_FS_TYPE=$OPTARG;;
    448         z) BIG_DEVICE=$OPTARG;;
    449         Z) BIG_DEVICE_FS_TYPE=$OPTARG;;
    450         \?) usage;;
    451         esac
    452     done
    453 
    454     ## It would be nice to create a default log file even if the user has not mentioned
    455     if [ ! "$LOGFILE" ]; then                                ## User has not mentioned about Log File name
    456        LOGFILE_NAME="$DEFAULT_FILE_NAME_GENERATION_TIME"
    457        LOGFILE="-l $LTPROOT/results/LTP_RUN_ON-$LOGFILE_NAME.log"
    458        ALT_DIR_RES=1
    459        PRETTY_PRT="-p"
    460     fi
    461 
    462     ## It would be nice if a Failed File is compulsorily created (gives User better Idea of Tests that failed)
    463 
    464     if [ ! "$FAILCMDFILE" ]; then                            ## User has not mentioned about Failed File name
    465          ALT_DIR_OUT=1
    466          if [ ! "$OUTPUTFILE" ]; then		             ## User has not mentioned about Output File name either
    467             if [ ! "$LOGFILE" ]; then                        ## User has not mentioned about Log File name either
    468                FAILED_FILE_NAME="$DEFAULT_FILE_NAME_GENERATION_TIME"
    469                FAILCMDFILE="-C $LTPROOT/output/LTP_RUN_ON-$FAILED_FILE_NAME.failed"
    470             else					     ## User Fortunately wanted a log file,
    471                FAILED_FILE_NAME=`basename $LOGFILE_NAME`     ## Extract log file name and use it to construct Failed file name
    472                FAILCMDFILE="-C $LTPROOT/output/LTP_RUN_ON-$FAILED_FILE_NAME.failed"
    473             fi
    474          else                                                ## User Fortunately wanted a Output file
    475                FAILED_FILE_NAME=`basename $OUTPUTFILE_NAME`  ## Extract output file name and use it to construct Failed file name
    476                FAILCMDFILE="-C $LTPROOT/output/LTP_RUN_ON-$FAILED_FILE_NAME.failed"
    477          fi
    478     fi
    479 
    480     if [ ! "$TCONFCMDFILE" ]; then
    481          ALT_DIR_OUT=1
    482          if [ ! "$OUTPUTFILE" ]; then
    483             if [ ! "$LOGFILE" ]; then
    484                TCONF_FILE_NAME="$DEFAULT_FILE_NAME_GENERATION_TIME"
    485                TCONFCMDFILE="-T $LTPROOT/output/LTP_RUN_ON-${TCONF_FILE_NAME}.tconf"
    486             else
    487                TCONF_FILE_NAME=`basename $LOGFILE_NAME`
    488                TCONFCMDFILE="-T $LTPROOT/output/LTP_RUN_ON-${TCONF_FILE_NAME}.tconf"
    489             fi
    490          else
    491                TCONF_FILE_NAME=`basename $OUTPUTFILE_NAME`
    492                TCONFCMDFILE="-T $LTPROOT/output/LTP_RUN_ON-${TCONF_FILE_NAME}.tconf"
    493          fi
    494     fi
    495 
    496     if [ "$ALT_HTML_OUT" -eq 1 ] ; then                      ## User wants the HTML version of the output
    497        QUIET_MODE=""                                         ## Suppressing this guy as it will prevent generation of proper output
    498                                                              ## which the HTML parser will require
    499        if [ ! "$OUTPUTFILE" ]; then                          ## User has not mentioned about the Outputfile name, then we need to definitely generate one
    500           OUTPUTFILE_NAME="$DEFAULT_FILE_NAME_GENERATION_TIME"
    501           OUTPUTFILE="-o $LTPROOT/output/LTP_RUN_ON-$OUTPUTFILE_NAME.output"
    502           ALT_DIR_OUT=1
    503           if [ ! "$HTMLFILE" ] ; then                        ## User has not mentioned HTML File name, We need to create one
    504              HTMLFILE_NAME=`basename $OUTPUTFILE_NAME`
    505              HTMLFILE="$LTPROOT/output/$HTMLFILE_NAME.html"
    506           fi
    507        fi
    508     fi
    509 
    510     # If we need, create the output directory
    511     [ "$ALT_DIR_OUT" -eq 1 ] && \
    512     {
    513         [ ! -d $LTPROOT/output ] && \
    514         {
    515            echo "INFO: creating $LTPROOT/output directory"
    516            mkdir -p $LTPROOT/output || \
    517            {
    518                echo "ERROR: failed to create $LTPROOT/output"
    519                exit 1
    520             }
    521         }
    522     }
    523     # If we need, create the results directory
    524     [ "$ALT_DIR_RES" -eq 1 ] && \
    525     {
    526         echo "INFO: creating $LTPROOT/results directory"
    527         [ ! -d $LTPROOT/results ] && \
    528         {
    529            mkdir -p $LTPROOT/results || \
    530            {
    531                echo "ERROR: failed to create $LTPROOT/results"
    532                exit 1
    533             }
    534         }
    535     }
    536 
    537     # Added -m 777 for tests that call tst_tmpdir() and try to
    538     #  write to it as user nobody
    539     mkdir -m 777 -p $TMPBASE || \
    540     {
    541         echo "FATAL: Unable to make temporary directory $TMPBASE"
    542         exit 1
    543     }
    544     # use mktemp to create "safe" temporary directories
    545     export TMPTEMPLATE="${TMPBASE}/ltp-XXXXXXXXXX"
    546     TMP=`mktemp -d $TMPTEMPLATE` || \
    547     {
    548         echo "FATAL: Unable to make temporary directory: $TMP"
    549         exit 1
    550     }
    551     export TMP
    552     # To be invoked by tst_tmpdir()
    553     # write to it as user nobody
    554     export TMPDIR=$TMP
    555 
    556     chmod 777 $TMP || \
    557     {
    558       echo "unable to chmod 777 $TMP ... aborting"
    559       exit 1
    560     }
    561 
    562     cd $TMP || \
    563     {
    564       echo "could not cd ${TMP} ... exiting"
    565       exit 1
    566     }
    567 
    568     [ -n "$INSTANCES" ] && \
    569     {
    570       INSTANCES="$INSTANCES -O ${TMP}"
    571     }
    572 
    573     [ "$RUN_NETEST" -eq 1 ] && \
    574     {
    575         [ -z "$RHOST" ] || [ -z "$PASSWD" ] && \
    576         {
    577             [ -z "$RHOST" ] && \
    578             {
    579                 printf "INFO: Enter RHOST = 'name of the remote host machine'"
    580                 printf "\n-> "
    581                 read RHOST
    582             }
    583 
    584             [ -z "$PASSWD" ] && \
    585             {
    586                 printf "\nINFO: "
    587                 printf "Enter PASSWD = 'root passwd of the remote host machine'"
    588                 printf "\n-> "
    589                 read PASSWD
    590             }
    591             export RHOST=$RHOST
    592             export PASSWD=$PASSWD
    593             echo "WARNING: security of $RHOST may be compromised"
    594         }
    595     }
    596 
    597     # If user does not provide a command file select a default set of testcases
    598     # to execute.
    599     if [ -z "$CMDFILES" ] && [ -z "$CMDFILEADDR" ]
    600     then
    601         cat <<-EOF >&1
    602 
    603     INFO: no command files were provided. Will execute the following
    604           runtest scenario files:
    605 
    606 `cat $LTPROOT/scenario_groups/default | tr '\012' ' '`
    607 
    608 	EOF
    609 
    610 	SCENARIO_LISTS="$LTPROOT/scenario_groups/default"
    611         if [ "$RUN_NETEST" -eq 1 ]; then
    612             SCENARIO_LISTS="$SCENARIO_LISTS $LTPROOT/scenario_groups/network"
    613         fi
    614 
    615     # DO NOT INDENT/DEDENT!
    616         if [ -n "$SCENARIO_LISTS" ]; then
    617             # Insurance to make sure that the first element in the pipe
    618             # completed successfully.
    619             cat_ok_sentinel=$TMP/cat_ok.$$
    620 	    (cat $SCENARIO_LISTS && touch "$cat_ok_sentinel") | \
    621                 while read scenfile; do
    622 
    623                     scenfile=${LTPROOT}/runtest/$scenfile
    624 
    625                     # Skip over non-existent scenario files; things are
    626                     # robust enough now that the build will fail if these
    627                     # files don't exist.
    628                     [ -f "$scenfile" ] || continue
    629 
    630                     cat $scenfile >> "$TMP/alltests" || {
    631                         echo "FATAL: unable to append to command file"
    632                         rm -Rf "$TMP"
    633                         rm -f "$cat_ok_sentinel"
    634                         exit 1
    635                     }
    636 
    637                 done
    638 
    639             rm -f "$cat_ok_sentinel"
    640 
    641         fi
    642     # ^^DO NOT INDENT/DEDENT!^^
    643 
    644     fi
    645 
    646     [ -n "$CMDFILES" ] && \
    647     {
    648         for scenfile in `echo "$CMDFILES" | tr ',' ' '`
    649         do
    650             [ -f "$scenfile" ] || scenfile="$LTPROOT/runtest/$scenfile"
    651             cat "$scenfile" >> ${TMP}/alltests || \
    652             {
    653                 echo "FATAL: unable to create command file"
    654                 rm -Rf "$TMP"
    655                 exit 1
    656             }
    657         done
    658     }
    659 
    660     [ -n "$CMDFILEADDR" ] && \
    661     {
    662         wget -q "${CMDFILEADDR}" -O ${TMP}/wgetcmdfile
    663         if [ $? -ne 0 ]; then
    664             echo "FATAL: error while getting the command file with wget (address $CMDFILEADDR)"
    665             exit 1
    666         fi
    667         cat "${TMP}/wgetcmdfile" >> ${TMP}/alltests || \
    668         {
    669             echo "FATAL: unable to create command file"
    670             exit 1
    671         }
    672     }
    673 
    674     # The fsx-linux tests use the SCRATCHDEV environment variable as a location
    675     # that can be reformatted and run on.  Set SCRATCHDEV if you want to run
    676     # these tests.  As a safeguard, this is disabled.
    677     unset SCRATCHDEV
    678     [ -n "$SCRATCHDEV" ] && \
    679     {
    680          cat ${LTPROOT}/runtest/fsx >> ${TMP}/alltests ||
    681          {
    682              echo "FATAL: unable to create  fsx-linux tests command file"
    683              exit 1
    684          }
    685     }
    686 
    687     # If enabled, execute only test cases that match the PATTERN
    688     if [ -n "$TAG_RESTRICT_STRING" ]
    689     then
    690         mv -f ${TMP}/alltests ${TMP}/alltests.orig
    691 	    grep $TAG_RESTRICT_STRING ${TMP}/alltests.orig > ${TMP}/alltests #Not worth checking return codes for this case
    692     fi
    693 
    694     # Blacklist or skip tests if a SKIPFILE was specified with -S
    695     if [ -n "${SKIPFILE}" ]; then
    696         for test_name in $(awk '{print $1}' "${SKIPFILE}"); do
    697             case "${test_name}" in \#*) continue;; esac
    698             sed -i "/\<${test_name}\>/c\\${test_name} exit 32;" alltests
    699         done
    700     fi
    701 
    702     # check for required users and groups
    703     ${LTPROOT}/IDcheck.sh || \
    704     {
    705         echo "WARNING: required users and groups not present"
    706         echo "WARNING: some test cases may fail"
    707     }
    708 
    709     # display versions of installed software
    710     [ -z "$QUIET_MODE" ] && \
    711     {
    712         ${LTPROOT}/ver_linux || \
    713         {
    714             echo "WARNING: unable to display versions of software installed"
    715             exit 1
    716     }
    717     }
    718 
    719     set_block_device
    720 
    721     # here even if the user don't specify a big block device, we
    722     # also don't create the big block device.
    723     if [ -z "$BIG_DEVICE" ]; then
    724         echo "no big block device was specified on commandline."
    725         echo "Tests which require a big block device are disabled."
    726         echo "You can specify it with option -z"
    727     else
    728         export LTP_BIG_DEV=$BIG_DEVICE
    729         if [ -z "$BIG_DEVICE_FS_TYPE" ]; then
    730             export LTP_BIG_DEV_FS_TYPE="ext2"
    731         else
    732             export LTP_BIG_DEV_FS_TYPE=$BIG_DEVICE_FS_TYPE
    733         fi
    734     fi
    735 
    736     if [ $RUN_REPEATED -gt 1 ]; then # You need to specify at least more than 1 sequential run, else it runs default
    737          echo "PAN will run these test cases $RUN_REPEATED times....."
    738          echo "Test Tags will be Prepended with ITERATION NO.s....."
    739          inc=1
    740          sed -e '/^$/ d' -e 's/^[ ,\t]*//' -e '/^#/ d' < ${TMP}/alltests > ${TMP}/alltests.temp ##This removes all newlines, leading spaces, tabs, #
    741          sed 's/^[0-9,a-z,A-Z]*/'"$inc"'_ITERATION_&/' < ${TMP}/alltests.temp > ${TMP}/alltests ## .temp is kept as Base file
    742          while [ $inc -lt $RUN_REPEATED ] ; do
    743                inc=`expr $inc + 1`
    744                sed 's/^[0-9,a-z,A-Z]*/'"$inc"'_ITERATION_&/' < ${TMP}/alltests.temp >> ${TMP}/alltests #Keep appending with Iteration No.s
    745          done
    746     fi
    747 
    748     if [ "$RANDOMRUN" != "0" ]; then
    749         sort -R ${TMP}/alltests -o ${TMP}/alltests
    750     fi
    751 
    752     [ ! -z "$QUIET_MODE" ] && { echo "INFO: Test start time: $(date)" ; }
    753     PAN_COMMAND="${LTPROOT}/bin/ltp-pan $QUIET_MODE $NO_KMSG -e -S $INSTANCES $DURATION -a $$ \
    754     -n $$ $PRETTY_PRT -f ${TMP}/alltests $LOGFILE $OUTPUTFILE $FAILCMDFILE $TCONFCMDFILE"
    755     echo "COMMAND:    $PAN_COMMAND"
    756     if [ ! -z "$TAG_RESTRICT_STRING" ] ; then
    757       echo "INFO: Restricted to $TAG_RESTRICT_STRING"
    758     fi
    759     #$PAN_COMMAND #Duplicated code here, because otherwise if we fail, only "PAN_COMMAND" gets output
    760 
    761     ## Display the Output/Log/Failed/HTML file names here
    762     printf "LOG File: "
    763     echo $LOGFILE | cut -b4-
    764 
    765     if [ "$OUTPUTFILE" ]; then
    766        printf "OUTPUT File: "
    767        echo $OUTPUTFILE | cut -b4-
    768     fi
    769 
    770     printf "FAILED COMMAND File: "
    771     echo $FAILCMDFILE | cut -b4-
    772 
    773    printf "TCONF COMMAND File: "
    774    echo $TCONFCMDFILE | cut -b4-
    775 
    776     if [ "$HTMLFILE" ]; then
    777        echo "HTML File: $HTMLFILE"
    778     fi
    779 
    780     echo "Running tests......."
    781     test_start_time=$(date)
    782 
    783 	# User wants testing with Kernel Fault Injection
    784 	if [ $INJECT_KERNEL_FAULT ] ; then
    785 		#See if Debugfs is mounted, and
    786 		#Fault Injection Framework available through Debugfs
    787 		use_faultinjection=true
    788 		for debug_subdir in \
    789 			fail_io_timeout \
    790 			fail_make_request \
    791 			fail_page_alloc \
    792 			failslab \
    793 		; do
    794 			if [ -d "/sys/kernel/debug/$debug_subdir" ]
    795 			then
    796 				use_faultinjection=true
    797 				break
    798 			fi
    799 		done
    800 		if $use_faultinjection; then
    801 			#If atleast one of the Framework is available
    802 			#Go ahead to Inject Fault & Create required
    803 			#Command Files for LTP run
    804 			echo Running tests with Fault Injection Enabled in the Kernel...
    805 			awk -v LOOPS=$INJECT_FAULT_LOOPS_PER_TEST \
    806 				-v PERCENTAGE=$INJECT_KERNEL_FAULT_PERCENTAGE \
    807 				-f ${LTPROOT}/bin/create_kernel_faults_in_loops_and_probability.awk \
    808 				${TMP}/alltests > ${TMP}/alltests.tmp
    809 			cp ${TMP}/alltests.tmp ${TMP}/alltests
    810 			rm -rf ${TMP}/alltests.tmp
    811 		else
    812 			echo Fault Injection not enabled in the Kernel..
    813 			echo Running tests normally...
    814 		fi
    815 	fi
    816 
    817 	## Valgrind Check will work only when Kernel Fault Injection is not expected,
    818 	## We do not want to test Faults when valgrind is running
    819 	if [ $VALGRIND_CHECK ]; then
    820 		if [ ! $INJECT_KERNEL_FAULT ]; then
    821 			which valgrind || VALGRIND_CHECK_TYPE=XYZ
    822 			case $VALGRIND_CHECK_TYPE in
    823 			[1-3])
    824 				awk -v CHECK_LEVEL=$VALGRIND_CHECK_TYPE \
    825 					-f ${LTPROOT}/bin/create_valgrind_check.awk \
    826 					${TMP}/alltests $VALGRIND_CHECK_TYPE > \
    827 					${TMP}/alltests.tmp
    828 				cp ${TMP}/alltests.tmp ${TMP}/alltests
    829 				rm -rf ${TMP}/alltests.tmp
    830 				;;
    831 			*)
    832 				echo "Invalid Memory Check Type, or, Valgrind is not available"
    833 				;;
    834 			esac
    835 		fi
    836 	fi
    837 
    838 	if [ $ALT_DMESG_OUT -eq 1 ] ; then
    839 		#We want to print dmesg output for each test,lets do the trick inside the script
    840 		echo Enabling dmesg output logging for each test...
    841 		awk -v DMESG_DIR=$DMESG_DIR \
    842 			-f ${LTPROOT}/bin/create_dmesg_entries_for_each_test.awk \
    843 			${TMP}/alltests > ${TMP}/alltests.tmp
    844 		cp ${TMP}/alltests.tmp ${TMP}/alltests
    845 		rm -rf ${TMP}/alltests.tmp
    846 	fi
    847     # Some tests need to run inside the "bin" directory.
    848     cd "${LTPROOT}/testcases/bin"
    849     "${LTPROOT}/bin/ltp-pan" $QUIET_MODE $NO_KMSG -e -S $INSTANCES $DURATION -a $$ -n $$ $PRETTY_PRT -f ${TMP}/alltests $LOGFILE $OUTPUTFILE $FAILCMDFILE $TCONFCMDFILE
    850 
    851     if [ $? -eq 0 ]; then
    852       echo "INFO: ltp-pan reported all tests PASS"
    853       VALUE=0
    854       export LTP_EXIT_VALUE=0;
    855     else
    856       echo "INFO: ltp-pan reported some tests FAIL"
    857       VALUE=1
    858       export LTP_EXIT_VALUE=1;
    859     fi
    860     cd ..
    861     echo "LTP Version: $version_date"
    862 
    863 	# $DMESG_DIR is used to cache messages obtained from dmesg after a test run.
    864 	# Proactively reap all of the 0-byte files in $DMESG_DIR as they have zero value
    865 	# and only clutter up the filesystem.
    866 
    867 	if [ $ALT_DMESG_OUT -eq 1 ] ; then
    868 		if ! find "$DMESG_DIR" -size 0 -exec rm {} + ; then
    869 			echo "cd to $DMESG_DIR failed: $?"
    870 		fi
    871 		if [ -n "$(ls "$DMESG_DIR")" ] ; then
    872 			echo "Kernel messages were generated for LTP tests $version_date"
    873 		else
    874 			echo "No Kernel messages were generated for LTP tests $version_date"
    875 		fi
    876 	fi
    877 
    878     if [ "$ALT_HTML_OUT" -eq 1 ] ; then        #User wants the HTML output to be created, it then needs to be generated
    879        export LTP_VERSION=$version_date
    880        export TEST_START_TIME="$test_start_time"
    881        export TEST_END_TIME="$(date)"
    882        OUTPUT_DIRECTORY=`echo $OUTPUTFILE | cut -c4-`
    883        LOGS_DIRECTORY="$LTPROOT/results"
    884        export TEST_OUTPUT_DIRECTORY="$LTPROOT/output"
    885        export TEST_LOGS_DIRECTORY=$LOGS_DIRECTORY
    886        echo "Generating HTML Output.....!!"
    887        ( perl $LTPROOT/bin/genhtml.pl $LTPROOT/bin/html_report_header.txt test_start test_end test_output execution_status $OUTPUT_DIRECTORY  > $HTMLFILE; )
    888        echo "Generated HTML Output.....!!"
    889        echo "Location: $HTMLFILE";
    890 
    891     fi
    892 
    893     if [ "$ALT_EMAIL_OUT" -eq 1 ] ; then                      ## User wants reports to be e-mailed
    894        if [ [ ! "$HTMLFILE_NAME" ] -o [ ! "$OUTPUTFILE_NAME" ] -o [ ! "$LOGFILE_NAME" ] ] ; then
    895           ##User does not have output/logs/html-output, nothing to be mailed in this situation
    896           echo "Nothing to be mailed here...."
    897        else
    898            TAR_FILE_NAME=LTP_RUN_$version_date$DEFAULT_FILE_NAME_GENERATION_TIME.tar
    899            if [ "$HTMLFILE_NAME" ] ; then                          ## HTML file Exists
    900               if [ "$ALT_HTML_OUT" -ne 1 ] ; then                  ## The HTML file path is absolute and not $LTPROOT/output
    901                  mkdir -p $LTPROOT/output                          ## We need to create this Directory
    902                  cp $HTMLFILE_NAME $LTPROOT/output/
    903               fi
    904            fi
    905            if [ "$OUTPUTFILE_NAME" ] ; then                        ## Output file exists
    906               if [ "$ALT_DIR_OUT" -ne 1 ] ; then                   ## The Output file path is absolute and not $LTPROOT/output
    907                  mkdir -p $LTPROOT/output                          ## We need to create this Directory
    908                  cp $OUTPUTFILE_NAME $LTPROOT/output/
    909               fi
    910            fi
    911            if [ "$LOGFILE_NAME" ] ; then                           ## Log file exists
    912               if [ "$ALT_DIR_RES" -ne 1 ] ; then                   ## The Log file path is absolute and not $LTPROOT/results
    913                  mkdir -p $LTPROOT/results                         ## We need to create this Directory
    914                  cp $LOGFILE_NAME $LTPROOT/results/
    915               fi
    916            fi
    917            if [ -d $LTPROOT/output ] ; then
    918               tar -cf  ./$TAR_FILE_NAME $LTPROOT/output
    919               if [ $? -eq 0 ]; then
    920                  echo "Created TAR File: ./$TAR_FILE_NAME successfully, added $LTPROOT/output"
    921               else
    922                  echo "Cannot Create TAR File: ./$TAR_FILE_NAME for adding $LTPROOT/output"
    923               fi
    924            fi
    925            if [ -d $LTPROOT/results ] ; then
    926               tar -uf ./$TAR_FILE_NAME $LTPROOT/results
    927               if [ $? -eq 0 ]; then
    928                  echo "Updated TAR File: ./$TAR_FILE_NAME successfully, added $LTPROOT/results"
    929               else
    930                  echo "Cannot Update TAR File: ./$TAR_FILE_NAME for adding $LTPROOT/results"
    931               fi
    932            fi
    933            if [ -e $LTPROOT/nohup.out ] ; then                     ## If User would have Chosen nohup to do ltprun
    934               tar -uf ./$TAR_FILE_NAME $LTPROOT/nohup.out
    935               if [ $? -eq 0 ]; then
    936                  echo "Updated TAR File: ./$TAR_FILE_NAME successfully, added $LTPROOT/nohup.out"
    937               else
    938                  echo "Cannot Update TAR File: ./$TAR_FILE_NAME for adding $LTPROOT/nohup.out"
    939               fi
    940            fi
    941            gzip ./$TAR_FILE_NAME                                     ## gzip this guy
    942            if [ $? -eq 0 ]; then
    943               echo "Gunzipped TAR File: ./$TAR_FILE_NAME"
    944            else
    945               echo "Cannot Gunzip TAR File: ./$TAR_FILE_NAME"
    946            fi
    947            if [ -e /usr/bin/mutt ] ; then                          ## This is a better mail client than others
    948               echo "Starting mailing reports to: $EMAIL_TO, file: ./$TAR_FILE_NAME.gz"
    949               mutt -a ./$TAR_FILE_NAME.gz -s "LTP Reports on $test_start_time" $EMAIL_TO < /dev/null
    950               if [ $? -eq 0 ]; then
    951                  echo "Reports Successfully mailed to: $EMAIL_TO"
    952               else
    953                  echo "Reports cannot be mailed to: $EMAIL_TO"
    954               fi
    955            else ## Use our Ageold mail program
    956               echo "Starting mailing reports to: $EMAIL_TO, file: ./$TAR_FILE_NAME.gz"
    957               uuencode ./$TAR_FILE_NAME.gz $TAR_FILE_NAME.gz | mail  $EMAIL_TO -s "LTP Reports on $test_start_time"
    958               if [ $? -eq 0 ]; then
    959                  echo "Reports Successfully mailed to: $EMAIL_TO"
    960               else
    961                  echo "Reports cannot be mailed to: $EMAIL_TO"
    962               fi
    963            fi
    964        fi
    965     fi
    966 
    967     [ ! -z "$QUIET_MODE" ] && { echo "INFO: Test end time: $(date)" ; }
    968 
    969     [ "$GENLOAD" -eq 1 ] && { killall -9 genload  >/dev/null 2>&1; }
    970     [ "$NETPIPE" -eq 1 ] && { killall -9 NPtcp  >/dev/null 2>&1; }
    971 
    972     [ "$ALT_DIR_OUT" -eq 1 ] || [ "$ALT_DIR_RES" -eq 1 ] && \
    973     {
    974     cat <<-EOF >&1
    975 
    976        ###############################################################
    977 
    978             Done executing testcases.
    979             LTP Version:  $version_date
    980        ###############################################################
    981 
    982 	EOF
    983     }
    984     exit $VALUE
    985 }
    986 
    987 create_block()
    988 {
    989     #create a block device
    990     dd if=/dev/zero of=${TMP}/test.img bs=1024 count=262144 >/dev/null 2>&1
    991     if [ $? -ne 0 ]; then
    992         echo "Failed to create loopback device image, please check disk space and re-run"
    993         return 1
    994     else
    995         ##search for an unused loop dev
    996         LOOP_DEV=$(losetup -f)
    997         if [ $? -ne 0 ]; then
    998             echo "no unused loop device is found"
    999             return 1
   1000         else
   1001             ##attach the created file to loop dev.
   1002             losetup $LOOP_DEV ${TMP}/test.img
   1003             if [ $? -ne 0 ]; then
   1004                 echo "losetup failed to create block device"
   1005                 return 1
   1006             fi
   1007             DEVICE=$LOOP_DEV
   1008             return 0
   1009         fi
   1010     fi
   1011 }
   1012 
   1013 set_block_device()
   1014 {
   1015     if [ -z "$DEVICE" ]; then
   1016         create_block
   1017         if [ $? -ne 0 ]; then
   1018             echo "no block device was specified on commandline."
   1019             echo "Block device could not be created using loopback device"
   1020             echo "Tests which require block device are disabled."
   1021             echo "You can specify it with option -b"
   1022 	else
   1023             export LTP_DEV=$DEVICE
   1024         fi
   1025     else
   1026         export LTP_DEV=$DEVICE
   1027     fi
   1028 }
   1029 
   1030 cleanup()
   1031 {
   1032     [ "$LOOP_DEV" ] && losetup -d $LOOP_DEV
   1033     rm -rf ${TMP}
   1034 }
   1035 
   1036 
   1037 LTP_SCRIPT="$(basename $0)"
   1038 
   1039 if [ "$LTP_SCRIPT" = "runltp" ]; then
   1040     trap "cleanup" 0
   1041     setup
   1042     main "$@"
   1043 fi
   1044