Home | History | Annotate | Download | only in ltp
      1 #!/bin/sh
      2 ################################################################################
      3 ##                                                                            ##
      4 ## Copyright (c) International Business Machines  Corp., 2001,2005            ##
      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: runltplite
     22 #
     23 # Description:  This script can be used to run a subset the tests in the LTP test suite
     24 #               This script is typically used as a quick test to check an install base.
     25 #
     26 # Authors:      Manoj Iyer - manoji (at] us.ibm.com
     27 #               Robbie Williamson - robbiew (at] us.ibm.com
     28 #               Marty Ridgeway - mridge (at] us.ibm.com
     29 #
     30 # History:      Created runltplite script to run a subset of the LTP testsuite
     31 #
     32 #
     33 #
     34 #
     35 #
     36 #
     37 #
     38 #
     39 
     40 . "$(dirname $0)/runltp"
     41 
     42 setup()
     43 {
     44     cd `dirname $0` || \
     45     {
     46         echo "FATAL: unable to change directory to $(dirname $0)"
     47         exit 1
     48     }
     49     export LTPROOT=${PWD}
     50     export TMPBASE="/tmp"
     51     export TMP="${TMPBASE}/ltp-$$"
     52     export PATH="${PATH}:${LTPROOT}/testcases/bin"
     53 
     54     export LTP_DEV=""
     55     export LTP_DEV_FS_TYPE="ext2"
     56 
     57     [ -d $LTPROOT/testcases/bin ] ||
     58     {
     59         echo "FATAL: LTP not installed correctly"
     60         echo "INFO:  Follow directions in INSTALL!"
     61         exit 1
     62     }
     63 
     64     [ -e $LTPROOT/bin/ltp-pan ] ||
     65     {
     66         echo "FATAL: Test suite driver 'ltp-pan' not found"
     67         echo "INFO:  Follow directions in INSTALL!"
     68         exit 1
     69     }
     70 }
     71 
     72 
     73 usage()
     74 {
     75     cat <<-EOF >&2
     76 
     77     usage: ${0##*/} -c [-d TMPDIR] [-i # (in Mb)]
     78     [ -l LOGFILE ] [ -o OUTPUTFILE ] [ -m # (in Mb)] -N -q
     79     [ -r LTPROOT ] -v
     80 
     81     -c NUM_PROCS    Run LTP under additional background CPU load.
     82     -d TMPDIR       Directory where temporary files will be created.
     83     -h              Help. Prints all available options.
     84     -i # (in Mb)    Run LTP with a _min_ IO load of # Mb in background.
     85     -l LOGFILE      Log results of test in a logfile.
     86     -m # (in Mb)    Run LTP with a _min_ memory load of # Mb in background.
     87     -N              Run all the networking tests.
     88     -o OUTPUTFILE   Redirect test output to a file.
     89     -p              Human readable format logfiles.
     90     -q              Print less verbose output to screen.
     91     -r LTPROOT      Fully qualified path where testsuite is installed.
     92     -S SKIPFILE     Skip tests specified in SKIPFILE.
     93     -b DEVICE       Some tests require an unmounted block device to run
     94                     correctly.
     95     -B LTP_DEV_FS_TYPE  The file system of test block devices.
     96 
     97     example: ${0##*/} -i 1024 -m 128 -p -q  -l /tmp/resultlog.$$ -d ${PWD}
     98 
     99 
    100 	EOF
    101 exit 0
    102 }
    103 
    104 
    105 main()
    106 {
    107     local CMDFILE="ltplite"
    108     local PRETTY_PRT=""
    109     local ALT_DIR=0
    110     local RUN_NETEST=0
    111     local QUIET_MODE=""
    112     local VERBOSE_MODE=""
    113     local NETPIPE=0
    114     local GENLOAD=0
    115     local MEMSIZE=0
    116     local DURATION=""
    117     local BYTESIZE=0
    118     local LOGFILE=""
    119     local PRETTY_PRT=""
    120     local TAG_RESTRICT_STRING=""
    121     local PAN_COMMAND=""
    122 
    123     local scenfile=""
    124 
    125     while getopts c:d:hi:l:m:No:pqr:S:b:B: arg
    126     do  case $arg in
    127         c)
    128 	    NUM_PROCS=$(($OPTARG))
    129             $LTPROOT/testcases/bin/genload --cpu $NUM_PROCS >/dev/null 2>&1 &
    130             GENLOAD=1 ;;
    131 
    132         d)  # append $$ to TMP, as it is recursively
    133             # removed at end of script.
    134             TMPBASE=$OPTARG
    135             TMP="${TMPBASE}/ltp-$$"
    136             export TMPDIR="$TMP";;
    137 
    138         h)  usage;;
    139 
    140         i)
    141             BYTESIZE=$(($OPTARG * 1024 * 1024))
    142             $LTPROOT/testcases/bin/genload --io 1 >/dev/null 2>&1 &
    143             $LTPROOT/testcases/bin/genload --hdd 0 --hdd-bytes $BYTESIZE \
    144             >/dev/null 2>&1 &
    145             GENLOAD=1 ;;
    146 
    147         l)
    148 
    149             [ ! -d $LTPROOT/results ] && \
    150             {
    151                echo "INFO: creating $LTPROOT/results directory"
    152                mkdir -p $LTPROOT/results || \
    153                {
    154                    echo "ERROR: failed to create $LTPROOT/results"
    155                    exit 1
    156                 }
    157             }
    158             case $OPTARG in
    159 	    /*)
    160                 LOGFILE="-l $OPTARG" ;;
    161             *)
    162                 LOGFILE="-l $LTPROOT/results/$OPTARG"
    163                 ALT_DIR=1 ;;
    164             esac ;;
    165 
    166         m)
    167             MEMSIZE=$(($OPTARG * 1024 * 1024))
    168             $LTPROOT/testcases/bin/genload  --vm 0 --vm-bytes $MEMSIZE \
    169                 >/dev/null 2>&1 &
    170             GENLOAD=1;;
    171 
    172         N)  RUN_NETEST=1;;
    173 
    174         o)  OUTPUTFILE="-o $OPTARG" ;;
    175 
    176         p)  PRETTY_PRT=" -p ";;
    177 
    178         q)  QUIET_MODE=" -q ";;
    179 
    180         r)  LTPROOT=$OPTARG;;
    181 
    182         S)  case $OPTARG in
    183                 /*)
    184                     SKIPFILE=$OPTARG;;
    185                 *)
    186                     SKIPFILE="$LTPROOT/$OPTARG";;
    187             esac ;;
    188 
    189         b)  DEVICE=$OPTARG;;
    190 
    191         B)  LTP_DEV_FS_TYPE=$OPTARG;;
    192 
    193 
    194         \?) usage;;
    195         esac
    196     done
    197 
    198 
    199     mkdir -p $TMP || \
    200     {
    201         echo "FATAL: Unable to make temporary directory $TMP"
    202         exit 1
    203     }
    204 
    205     cd $TMP || \
    206     {
    207       echo "could not cd ${TMP} ... exiting"
    208       exit 1
    209     }
    210 
    211 # Run Networking tests ?
    212 
    213     [ "$RUN_NETEST" -eq 1 ] && \
    214     {
    215         [ -z "$RHOST" ] || [ -z "$PASSWD" ] && \
    216         {
    217             [ -z "$RHOST" ] && \
    218             {
    219                 echo \
    220                 "INFO: Enter RHOST = 'name of the remote host machine'"
    221                 echo -n "-> "
    222                 read RHOST
    223             }
    224 
    225             [ -z "$PASSWD" ] && \
    226             {
    227                 echo " "
    228                 echo \
    229                 "INFO: Enter PASSWD = 'root passwd of the remote host machine'"
    230                 echo -n "-> "
    231                 read PASSWD
    232             }
    233             export RHOST=$RHOST
    234             export PASSWD=$PASSWD
    235             echo "WARNING: security of $RHOST may be compromised"
    236         }
    237     }
    238 
    239     # If user does not provide a command file select a default set of testcases
    240     # to execute.
    241     if   [ -f $CMDFILE ] || \
    242                 CMDFILE="$LTPROOT/runtest/$CMDFILE"
    243 	then
    244         cat $CMDFILE > ${TMP}/alltests || \
    245         {
    246             echo "FATAL: Unable to create command file"
    247             exit 1
    248         }
    249     fi
    250 
    251     if [ "$RUN_NETEST" -eq 1 ]; then
    252         SCENARIO_LISTS="$SCENARIO_LISTS $LTPROOT/scenario_groups/network"
    253     fi
    254 
    255     # DO NOT INDENT/DEDENT!
    256         if [ -n "$SCENARIO_LISTS" ]; then
    257             # Insurance to make sure that the first element in the pipe
    258             # completed successfully.
    259             cat_ok_sentinel=$TMP/cat_ok.$$
    260 	    (cat $SCENARIO_LISTS && touch "$cat_ok_sentinel") | \
    261                 while read scenfile; do
    262 
    263                     scenfile=${LTPROOT}/runtest/$scenfile
    264 
    265                     # Skip over non-existent scenario files; things are
    266                     # robust enough now that the build will fail if these
    267                     # files don't exist.
    268                     [ -f "$scenfile" ] || continue
    269 
    270                     cat $scenfile >> "$TMP/alltests" || {
    271                         echo "FATAL: unable to append to command file"
    272                         rm -Rf "$TMP"
    273                         rm -f "$cat_ok_sentinel"
    274                         exit 1
    275                     }
    276 
    277                 done
    278 
    279             rm -f "$cat_ok_sentinel"
    280 
    281         fi
    282     # ^^DO NOT INDENT/DEDENT!^^
    283 
    284     # The fsx-linux tests use the SCRATCHDEV environment variable as a location
    285     # that can be reformatted and run on.  Set SCRATCHDEV if you want to run
    286     # these tests.  As a safeguard, this is disabled.
    287     unset SCRATCHDEV
    288     [ -n "$SCRATCHDEV" ] && \
    289     {
    290          cat ${LTPROOT}/runtest/fsx >> ${TMP}/alltests ||
    291          {
    292              echo "FATAL: unable to create  fsx-linux tests command file"
    293              exit 1
    294          }
    295     }
    296 
    297     # check for required users and groups
    298     ${LTPROOT}/IDcheck.sh >/dev/null 2>&1 || \
    299     {
    300         echo "WARNING: required users and groups not present"
    301         echo "WARNING: some test cases may fail"
    302     }
    303 
    304     [ -n "$CMDFILES" ] && \
    305     {
    306         for scenfile in `echo "$CMDFILES" | tr ',' ' '`
    307         do
    308             [ -f "$scenfile" ] || scenfile="$LTPROOT/runtest/$scenfile"
    309             cat "$scenfile" >> ${TMP}/alltests || \
    310             {
    311                 echo "FATAL: unable to create command file"
    312                 rm -Rf "$TMP"
    313                 exit 1
    314             }
    315         done
    316     }
    317 
    318     # Blacklist or skip tests if a SKIPFILE was specified with -S
    319     if [ -n "${SKIPFILE}" ]; then
    320         for test_name in $(awk '{print $1}' "${SKIPFILE}"); do
    321             case "${test_name}" in \#*) continue;; esac
    322             sed -i "/\<${test_name}\>/c\\${test_name} exit 32;" alltests
    323         done
    324     fi
    325 
    326     # display versions of installed software
    327     [ -z "$QUIET_MODE" ] && \
    328     {
    329         ${LTPROOT}/ver_linux || \
    330         {
    331             echo "WARNING: unable to display versions of software installed"
    332             exit 1
    333         }
    334     }
    335 
    336     set_block_device
    337 
    338     [ ! -z "$QUIET_MODE" ] && { echo "INFO: Test start time: $(date)" ; }
    339     PAN_COMMAND="${LTPROOT}/bin/ltp-pan $QUIET_MODE -e -S $INSTANCES $DURATION -a $$ \
    340     -n $$ $PRETTY_PRT -f ${TMP}/alltests $LOGFILE $OUTPUTFILE"
    341     if [ ! -z "$VERBOSE_MODE" ] ; then
    342       echo "COMMAND:    $PAN_COMMAND"
    343       if [ ! -z "$TAG_RESTRICT_STRING" ] ; then
    344         echo "INFO: Restricted to $TAG_RESTRICT_STRING"
    345       fi
    346     fi
    347     #$PAN_COMMAND #Duplicated code here, because otherwise if we fail, only "PAN_COMMAND" gets output
    348     # Some tests need to run inside the "bin" directory.
    349     cd "${LTPROOT}/testcases/bin"
    350     ${LTPROOT}/bin/ltp-pan $QUIET_MODE -e -S $INSTANCES $DURATION -a $$ \
    351     -n $$ $PRETTY_PRT -f ${TMP}/alltests $LOGFILE $OUTPUTFILE
    352 
    353     if [ $? -eq 0 ]; then
    354       echo "INFO: ltp-pan reported all tests PASS"
    355       VALUE=0
    356     else
    357       echo "INFO: ltp-pan reported some tests FAIL"
    358       VALUE=1
    359     fi
    360     cd ..
    361     [ ! -z "$QUIET_MODE" ] && { echo "INFO: Test end time: $(date)" ; }
    362 
    363     [ "$GENLOAD" -eq 1 ] && { killall -9 genload ; }
    364     [ "$NETPIPE" -eq 1 ] && { killall -9 NPtcp ; }
    365 
    366     [ "$ALT_DIR" -eq 1 ] && \
    367     {
    368     cat <<-EOF >&1
    369 
    370        ###############################################################"
    371 
    372             Done executing testcases."
    373             result log is in the $LTPROOT/results directory"
    374 
    375        ###############################################################"
    376 
    377 	EOF
    378     }
    379     exit $VALUE
    380 }
    381 
    382 cleanup()
    383 {
    384     rm -rf ${TMP}
    385 }
    386 
    387 trap "cleanup" 0
    388 setup
    389 main "$@"
    390 
    391 #vim: syntax=sh
    392