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