blob: 7277ef14be08c361f3dafa5e52c03394c22ac86a [file] [log] [blame]
plars4a120e82004-09-02 18:56:06 +00001#!/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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 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@mail.utexas.edu
26# Robbe Williamson - robbiew@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
subrata_modaka1fd64b2007-04-11 11:24:49 +000035# - all checks should be enlclosed in " " to avoid bash error
plars4a120e82004-09-02 18:56:06 +000036# - exit with error if pan is not found in pan directory
subrata_modakbc833d32007-07-25 10:12:02 +000037#
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
subrata_modak6838ec32007-09-14 10:10:12 +000047#
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#
subrata_modak5d7deea2007-09-15 13:51:36 +000053# Sep 14 2007 - Modified - Ricardo Salveti de Araujo
54# - cleaning and removing duplicated code
55#
subrata_modake099b2a2007-10-29 12:22:01 +000056# Oct 27 2007 - Modified - Ricardo Salveti de Araujo and Subrata Modak
57# - better ways to integrate "ltp/tools/genload/stress" with "ltp/runltp"
subrata_modake47fb352007-11-25 17:03:49 +000058# 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
subrata_modakf376b482007-11-28 11:30:54 +000061# Nov 28 2007 - Modified - Subrata Modak
62# - Added a new option to mail back LTP reports
subrata_modak43938212008-05-19 08:48:46 +000063# May 19 2008 - Modified - Subrata Modak
64# - Added capability for default Log file generation
subrata_modake099b2a2007-10-29 12:22:01 +000065#
subrata_modak6838ec32007-09-14 10:10:12 +000066#################################################################################
subrata_modakbc833d32007-07-25 10:12:02 +000067
plars4a120e82004-09-02 18:56:06 +000068
69
70setup()
71{
72 cd `dirname $0` || \
73 {
74 echo "FATAL: unable to change directory to $(dirname $0)"
75 exit 1
76 }
77 export LTPROOT=${PWD}
78 export TMPBASE="/tmp"
plars4a120e82004-09-02 18:56:06 +000079 export PATH="${PATH}:${LTPROOT}/testcases/bin"
80
81 [ -d $LTPROOT/testcases/bin ] ||
82 {
83 echo "FATAL: Test suite not installed correctly"
84 echo "INFO: as root user type 'make ; make install'"
85 exit 1
86 }
87
88 [ -e $LTPROOT/pan/pan ] ||
89 {
90 echo "FATAL: Test suite driver 'pan' not found"
91 echo "INFO: as root user type 'make ; make install'"
92 exit 1
93 }
94}
95
mreed1091696422006-05-03 19:07:22 +000096version_of_ltp()
97{
subrata_modaka1fd64b2007-04-11 11:24:49 +000098 head -n 1 $LTPROOT/ChangeLog
99 exit 0
mreed1091696422006-05-03 19:07:22 +0000100}
plars4a120e82004-09-02 18:56:06 +0000101
102usage()
103{
104 cat <<-EOF >&2
105
subrata_modakf376b482007-11-28 11:30:54 +0000106 usage: ./${0##*/} [ -a EMAIL_TO ] [ -c NUM_PROCS ] [ -C FAILCMDFILE ] [ -d TMPDIR ]
subrata_modake47fb352007-11-25 17:03:49 +0000107 [ -D NUM_PROCS,NUM_FILES,NUM_BYTES,CLEAN_FLAG ] -e [ -f CMDFILES(,...) ] [ -g HTMLFILE]
subrata_modake099b2a2007-10-29 12:22:01 +0000108 [ -i NUM_PROCS ] [ -l LOGFILE ] [ -m NUM_PROCS,CHUNKS,BYTES,HANGUP_FLAG ]
109 -N -n [ -o OUTPUTFILE ] -p -q [ -r LTPROOT ] [ -s PATTERN ] [ -t DURATION ]
110 -v [ -w CMDFILEADDR ] [ -x INSTANCES ]
plars4a120e82004-09-02 18:56:06 +0000111
subrata_modak08dde6f2007-11-28 11:02:51 +0000112 -a EMAIL_TO EMAIL all your Reports to this E-mail Address
subrata_modake099b2a2007-10-29 12:22:01 +0000113 -c NUM_PROCS Run LTP under additional background CPU load
114 [NUM_PROCS = no. of processes creating the CPU Load by spinning over sqrt()
115 (Defaults to 1 when value)]
subrata_modakbc833d32007-07-25 10:12:02 +0000116 -C FAILCMDFILE Command file with all failed test cases.
plars4a120e82004-09-02 18:56:06 +0000117 -d TMPDIR Directory where temporary files will be created.
subrata_modake099b2a2007-10-29 12:22:01 +0000118 -D NUM_PROCS,NUM_FILES,NUM_BYTES,CLEAN_FLAG
119 Run LTP under additional background Load on Secondary Storage (Seperate by comma)
120 [NUM_PROCS = no. of processes creating Storage Load by spinning over write()]
121 [NUM_FILES = Write() to these many files (Defaults to 1 when value 0 or undefined)]
122 [NUM_BYTES = write these many bytes (defaults to 1GB, when value 0 or undefined)]
123 [CLEAN_FLAG = unlink file to which random data written, when value 1]
mreed1091696422006-05-03 19:07:22 +0000124 -e Prints the date of the current LTP release
subrata_modakbc833d32007-07-25 10:12:02 +0000125 -f CMDFILES Execute user defined list of testcases (separate with ',')
subrata_modake47fb352007-11-25 17:03:49 +0000126 -g HTMLFILE Create an additional HTML output format
plars4a120e82004-09-02 18:56:06 +0000127 -h Help. Prints all available options.
subrata_modake099b2a2007-10-29 12:22:01 +0000128 -i NUM_PROCS Run LTP under additional background Load on IO Bus
129 [NUM_PROCS = no. of processes creating IO Bus Load by spinning over sync()]
plars4a120e82004-09-02 18:56:06 +0000130 -l LOGFILE Log results of test in a logfile.
subrata_modake099b2a2007-10-29 12:22:01 +0000131 -m NUM_PROCS,CHUNKS,BYTES,HANGUP_FLAG
132 Run LTP under additional background Load on Main memory (Seperate by comma)
133 [NUM_PROCS = no. of processes creating main Memory Load by spinning over malloc()]
134 [CHUNKS = malloc these many chunks (default is 1 when value 0 or undefined)]
135 [BYTES = malloc CHUNKS of BYTES bytes (default is 256MB when value 0 or undefined) ]
136 [HANGUP_FLAG = hang in a sleep loop after memory allocated, when value 1]
plars4a120e82004-09-02 18:56:06 +0000137 -N Run all the networking tests.
138 -n Run LTP with network traffic in background.
139 -o OUTPUTFILE Redirect test output to a file.
140 -p Human readable format logfiles.
141 -q Print less verbose output to screen.
142 -r LTPROOT Fully qualified path where testsuite is installed.
subrata_modaka1fd64b2007-04-11 11:24:49 +0000143 -s PATTERN Only run test cases which match PATTERN.
plars4a120e82004-09-02 18:56:06 +0000144 -t DURATION Execute the testsuite for given duration. Examples:
145 -t 60s = 60 seconds
146 -t 45m = 45 minutes
147 -t 24h = 24 hours
148 -t 2d = 2 days
subrata_modak8c138332008-01-28 11:19:32 +0000149 -T REPETITION Execute the testsuite for REPETITION no. of times
robbiew7d43d772005-02-07 20:07:30 +0000150 -v Print more verbose output to screen.
subrata_modakbc833d32007-07-25 10:12:02 +0000151 -w CMDFILEADDR Uses wget to get the user's list of testcases.
plars4a120e82004-09-02 18:56:06 +0000152 -x INSTANCES Run multiple instances of this testsuite.
153
subrata_modake099b2a2007-10-29 12:22:01 +0000154 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}
plars4a120e82004-09-02 18:56:06 +0000155
plars4a120e82004-09-02 18:56:06 +0000156
157 EOF
158exit 0
159}
160
plars4a120e82004-09-02 18:56:06 +0000161main()
162{
subrata_modakbc833d32007-07-25 10:12:02 +0000163 local CMDFILES=""
plars4a120e82004-09-02 18:56:06 +0000164 local PRETTY_PRT=""
subrata_modak5d7deea2007-09-15 13:51:36 +0000165 local ALT_DIR_OUT=0
166 local ALT_DIR_RES=0
subrata_modake47fb352007-11-25 17:03:49 +0000167 local ALT_HTML_OUT=0
subrata_modak08dde6f2007-11-28 11:02:51 +0000168 local ALT_EMAIL_OUT=0
plars4a120e82004-09-02 18:56:06 +0000169 local RUN_NETEST=0
subrata_modak8c138332008-01-28 11:19:32 +0000170 local RUN_REPEATED=0
plars4a120e82004-09-02 18:56:06 +0000171 local QUIET_MODE=""
robbiew7d43d772005-02-07 20:07:30 +0000172 local VERBOSE_MODE=""
plars4a120e82004-09-02 18:56:06 +0000173 local NETPIPE=0
174 local GENLOAD=0
175 local MEMSIZE=0
176 local DURATION=""
subrata_modakbc833d32007-07-25 10:12:02 +0000177 local CMDFILEADDR=""
subrata_modak43938212008-05-19 08:48:46 +0000178 local FAILCMDFILE=""
subrata_modake47fb352007-11-25 17:03:49 +0000179 local LOGFILE_NAME=""
plars4a120e82004-09-02 18:56:06 +0000180 local LOGFILE=""
subrata_modake47fb352007-11-25 17:03:49 +0000181 local OUTPUTFILE_NAME=""
182 local OUTPUTFILE=""
183 local HTMLFILE_NAME=""
184 local HTMLFILE=""
subrata_modak08dde6f2007-11-28 11:02:51 +0000185 local EMAIL_TO=""
plars4a120e82004-09-02 18:56:06 +0000186 local SCENFILES=""
robbiew7d43d772005-02-07 20:07:30 +0000187 local TAG_RESTRICT_STRING=""
188 local PAN_COMMAND=""
subrata_modak43938212008-05-19 08:48:46 +0000189 local DEFAULT_FILE_NAME_GENERATION_TIME=`date +"%Y_%b_%d-%Hh_%Mm_%Ss"`
mreed1091696422006-05-03 19:07:22 +0000190 version_date=`head -n 1 $LTPROOT/ChangeLog`
plars4a120e82004-09-02 18:56:06 +0000191
subrata_modak8c138332008-01-28 11:19:32 +0000192 while getopts a:c:C:d:D:f:ehi:g:l:m:Nno:pqr:s:t:T:vw:x: arg
plars4a120e82004-09-02 18:56:06 +0000193 do case $arg in
subrata_modak08dde6f2007-11-28 11:02:51 +0000194 a) EMAIL_TO=$OPTARG
195 ALT_EMAIL_OUT=1;;
plars4a120e82004-09-02 18:56:06 +0000196 c)
subrata_modake099b2a2007-10-29 12:22:01 +0000197 NUM_PROCS=$(($OPTARG))
198 if [ "$NUM_PROCS" -eq 0 ]; then
199 # User Did not Define the Value ,or, User Defined Zero,
200 # hence, prevent from creating infinite processes
201 NUM_PROCS=1
202 fi
plars4a120e82004-09-02 18:56:06 +0000203 $LTPROOT/testcases/bin/genload --cpu $NUM_PROCS >/dev/null 2>&1 &
204 GENLOAD=1 ;;
subrata_modakbc833d32007-07-25 10:12:02 +0000205
subrata_modak5d7deea2007-09-15 13:51:36 +0000206 C)
subrata_modak6838ec32007-09-14 10:10:12 +0000207 case $OPTARG in
208 /*)
209 FAILCMDFILE="-C $OPTARG" ;;
210 *)
211 FAILCMDFILE="-C $LTPROOT/output/$OPTARG"
subrata_modak5d7deea2007-09-15 13:51:36 +0000212 ALT_DIR_OUT=1 ;;
subrata_modak6838ec32007-09-14 10:10:12 +0000213 esac ;;
plars4a120e82004-09-02 18:56:06 +0000214
subrata_modak5ee3e892008-10-21 13:17:56 +0000215 d) # convert the user path to absolute path.
216 export TMPBASE=`cd \`dirname ${OPTARG}\`; pwd`/`basename ${OPTARG}` ;;
subrata_modake099b2a2007-10-29 12:22:01 +0000217
218 D) NUM_PROCS=1; NUM_FILES=1; NUM_BYTES=$((1024 * 1024 * 1024)); CLEAN_FLAG=0
subrata_modak548379d2008-08-20 09:15:49 +0000219 ARGUMENT_LIST=$OPTARG
subrata_modake099b2a2007-10-29 12:22:01 +0000220 TOTAL_ARGUMENTS=1 # Initial Assume
221 for ARGUMENT in `echo "$ARGUMENT_LIST" | sed 's/,/\n/g'` # Store all value in a Loop
222 do
223 case $TOTAL_ARGUMENTS in
224 1) NUM_PROCS="$ARGUMENT" ;;
225 2) NUM_FILES="$ARGUMENT" ;;
226 3) NUM_BYTES="$ARGUMENT" ;;
227 4) CLEAN_FLAG="$ARGUMENT" ;;
228 esac
229 TOTAL_ARGUMENTS=`expr $TOTAL_ARGUMENTS + 1`
230 done
231 # just to get the default values if the user passed 0
232 if [ "$NUM_PROCS" -eq 0 ]; then
233 NUM_PROCS=1
234 fi
235 if [ "$NUM_FILES" -eq 0 ]; then
236 NUM_FILES=1
237 fi
238 if [ "$NUM_BYTES" -eq 0 ]; then
239 NUM_BYTES=$((1024 * 1024 * 1024))
240 fi
241 if [ "$CLEAN_FLAG" -ne 1 ]; then
242 CLEAN_FLAG=0
243 fi
244 if [ "$CLEAN_FLAG" -eq 1 ]; then
245 # Do not unlink file in this case
246 $LTPROOT/testcases/bin/genload --hdd $NUM_PROCS --hdd-files \
247 $NUM_FILES --hdd-bytes $NUM_BYTES >/dev/null 2>&1 &
248 else
249 # Cleanup otherwise
250 $LTPROOT/testcases/bin/genload --hdd $NUM_PROCS --hdd-files \
251 $NUM_FILES --hdd-bytes $NUM_BYTES --hdd-noclean >/dev/null 2>&1 &
252 fi
253 GENLOAD=1;;
254
mreed1091696422006-05-03 19:07:22 +0000255 e) # Print out the version of LTP
256 version_of_ltp
257 ;;
plars4a120e82004-09-02 18:56:06 +0000258 f) # Execute user defined set of testcases.
subrata_modakbc833d32007-07-25 10:12:02 +0000259 # Can be more then one file, just separate it with ',', like:
260 # -f nfs,commands,/tmp/testfile
261 CMDFILES=$OPTARG;;
subrata_modake47fb352007-11-25 17:03:49 +0000262 g) HTMLFILE_NAME="$OPTARG"
263 case $OPTARG in
264 /*)
265 HTMLFILE="$OPTARG";;
266 *)
subrata_modakd48c4d02008-01-23 12:59:40 +0000267 HTMLFILE="$LTPROOT/output/$OPTARG";;
268 esac
269 ALT_DIR_OUT=1
270 ALT_HTML_OUT=1;;
plars4a120e82004-09-02 18:56:06 +0000271 h) usage;;
272
subrata_modake099b2a2007-10-29 12:22:01 +0000273 i)
274 NUM_PROCS=$(($OPTARG))
275 if [ "$NUM_PROCS" -eq 0 ]; then
276 # User Did not Define the Value ,or, User Defined Zero,
277 # hence, prevent from creating infinite processes
278 NUM_PROCS=1
279 fi
280 $LTPROOT/testcases/bin/genload --io $NUM_PROCS >/dev/null 2>&1 &
plars4a120e82004-09-02 18:56:06 +0000281 GENLOAD=1 ;;
282
283 l)
subrata_modak6838ec32007-09-14 10:10:12 +0000284 LOGFILE_NAME="$OPTARG"
plars4a120e82004-09-02 18:56:06 +0000285 case $OPTARG in
subrata_modak5d7deea2007-09-15 13:51:36 +0000286 /*)
plars4a120e82004-09-02 18:56:06 +0000287 LOGFILE="-l $OPTARG" ;;
288 *)
289 LOGFILE="-l $LTPROOT/results/$OPTARG"
subrata_modak5d7deea2007-09-15 13:51:36 +0000290 ALT_DIR_RES=1 ;;
plars4a120e82004-09-02 18:56:06 +0000291 esac ;;
292
subrata_modake099b2a2007-10-29 12:22:01 +0000293 m) NUM_PROCS=1; CHUNKS=1; BYTES=$((256 * 1024 * 1024)); HANGUP_FLAG=0
subrata_modak29a96d82008-08-27 13:34:46 +0000294 ARGUMENT_LIST=$OPTARG
subrata_modake099b2a2007-10-29 12:22:01 +0000295 TOTAL_ARGUMENTS=1 # Initial Assume
296 for ARGUMENT in `echo "$ARGUMENT_LIST" | sed 's/,/\n/g'` # Store all value in a Loop
297 do
298 case $TOTAL_ARGUMENTS in
299 1) NUM_PROCS="$ARGUMENT" ;;
300 2) CHUNKS="$ARGUMENT" ;;
301 3) BYTES="$ARGUMENT" ;;
302 4) HANGUP_FLAG="$ARGUMENT" ;;
303 esac
304 TOTAL_ARGUMENTS=`expr $TOTAL_ARGUMENTS + 1`
305 done
306 # just to get the default values if the user passed 0
307 if [ "$NUM_PROCS" -eq 0 ]; then
308 NUM_PROCS=1
309 fi
310 if [ "$CHUNKS" -eq 0 ]; then
311 CHUNKS=1
312 fi
313 if [ "$BYTES" -eq 0 ]; then
314 BYTES=$((256 * 1024 * 1024))
315 fi
316 if [ "$HANGUP_FLAG" -ne 1 ]; then
317 HANGUP_FLAG=0
318 fi
319 if [ "$HANGUP_FLAG" -eq 1 ]; then
320 # Hang in a Sleep loop after memory allocated
321 $LTPROOT/testcases/bin/genload --vm $NUM_PROCS --vm-chunks \
322 $CHUNKS --vm-bytes $BYTES --vm-hang >/dev/null 2>&1 &
323 else
324 # Otherwise Do not Hangup
325 $LTPROOT/testcases/bin/genload --vm $NUM_PROCS --vm-chunks \
326 $CHUNKS --vm-bytes $BYTES >/dev/null 2>&1 &
327 fi
plars4a120e82004-09-02 18:56:06 +0000328 GENLOAD=1;;
329
330 N) RUN_NETEST=1;;
331
332 n)
333 $LTPROOT/testcases/bin/netpipe.sh
334 NETPIPE=1;;
335
subrata_modak6838ec32007-09-14 10:10:12 +0000336 o) OUTPUTFILE_NAME="$OPTARG"
subrata_modak6838ec32007-09-14 10:10:12 +0000337 case $OPTARG in
338 /*)
339 OUTPUTFILE="-o $OPTARG";;
340 *)
341 OUTPUTFILE="-o $LTPROOT/output/$OPTARG"
subrata_modak5d7deea2007-09-15 13:51:36 +0000342 ALT_DIR_OUT=1 ;;
subrata_modak6838ec32007-09-14 10:10:12 +0000343 esac ;;
plars4a120e82004-09-02 18:56:06 +0000344
345 p) PRETTY_PRT=" -p ";;
346
347 q) QUIET_MODE=" -q ";;
348
349 r) LTPROOT=$OPTARG;;
350
robbiew7d43d772005-02-07 20:07:30 +0000351 s) TAG_RESTRICT_STRING=$OPTARG;;
352
plars4a120e82004-09-02 18:56:06 +0000353 t) # In case you want to specify the time
354 # to run from the command line
355 # (2m = two minutes, 2h = two hours, etc)
356 DURATION="-t $OPTARG" ;;
subrata_modak8c138332008-01-28 11:19:32 +0000357
358 T) # In case you want the testcases to runsequentially RUN_REPEATED times
359 RUN_REPEATED=$OPTARG;;
360
robbiew7d43d772005-02-07 20:07:30 +0000361 v) VERBOSE_MODE=1;;
subrata_modakbc833d32007-07-25 10:12:02 +0000362
363 w) CMDFILEADDR=$OPTARG;;
robbiew7d43d772005-02-07 20:07:30 +0000364
plars4a120e82004-09-02 18:56:06 +0000365 x) # number of ltp's to run
366 cat <<-EOF >&1
367 WARNING: The use of -x can cause unpredictable failures, as a
368 result of concurrently running multiple tests designed
369 to be ran exclusively.
370 Pausing for 10 seconds..."
371 EOF
372 sleep 10
subrata_modak6edfbda2008-10-17 12:25:48 +0000373 INSTANCES="-x $OPTARG";;
plars4a120e82004-09-02 18:56:06 +0000374
375 \?) usage;;
376 esac
377 done
subrata_modak43938212008-05-19 08:48:46 +0000378
379 ## It would be nice to create a default log file even if the user has not mentioned
380 if [ ! "$LOGFILE" ]; then ## User has not mentioned about Log File name
381 LOGFILE_NAME=$DEFAULT_FILE_NAME_GENERATION_TIME
382 LOGFILE="-l $LTPROOT/results/LTP_RUN_ON-$LOGFILE_NAME.log"
383 ALT_DIR_RES=1
384 PRETTY_PRT=" -p "
385 fi
subrata_modak6838ec32007-09-14 10:10:12 +0000386
387 ## It would be nice if a Failed File is compulsorily created (gives User better Idea of Tests that failed)
388
389 if [ ! "$FAILCMDFILE" ]; then ## User has not mentioned about Failed File name
subrata_modak5d7deea2007-09-15 13:51:36 +0000390 ALT_DIR_OUT=1
subrata_modak6838ec32007-09-14 10:10:12 +0000391 if [ ! "$OUTPUTFILE" ]; then ## User has not mentioned about Output File name either
392 if [ ! "$LOGFILE" ]; then ## User has not mentioned about Log File name either
subrata_modak43938212008-05-19 08:48:46 +0000393 FAILED_FILE_NAME=$DEFAULT_FILE_NAME_GENERATION_TIME
subrata_modak6838ec32007-09-14 10:10:12 +0000394 FAILCMDFILE="-C $LTPROOT/output/LTP_RUN_ON-$FAILED_FILE_NAME.failed"
subrata_modak6838ec32007-09-14 10:10:12 +0000395 else ## User Fortunately wanted a log file,
396 FAILED_FILE_NAME=`basename $LOGFILE_NAME` ## Extract log file name and use it to construct Failed file name
397 FAILCMDFILE="-C $LTPROOT/output/LTP_RUN_ON-$FAILED_FILE_NAME.failed"
subrata_modak6838ec32007-09-14 10:10:12 +0000398 fi
399 else ## User Fortunately wanted a Output file
400 FAILED_FILE_NAME=`basename $OUTPUTFILE_NAME` ## Extract output file name and use it to construct Failed file name
401 FAILCMDFILE="-C $LTPROOT/output/LTP_RUN_ON-$FAILED_FILE_NAME.failed"
subrata_modak6838ec32007-09-14 10:10:12 +0000402 fi
403 fi
subrata_modaka1fd64b2007-04-11 11:24:49 +0000404
subrata_modakd48c4d02008-01-23 12:59:40 +0000405 if [ "$ALT_HTML_OUT" -eq 1 ] ; then ## User wants the HTML version of the output
406 QUIET_MODE="" ## Suppressing this guy as it will prevent generation of proper output
407 ## which the HTML parser will require
subrata_modake47fb352007-11-25 17:03:49 +0000408 if [ ! "$OUTPUTFILE" ]; then ## User has not mentioned about the Outputfile name, then we need to definitely generate one
subrata_modak43938212008-05-19 08:48:46 +0000409 OUTPUTFILE_NAME=$DEFAULT_FILE_NAME_GENERATION_TIME
subrata_modake47fb352007-11-25 17:03:49 +0000410 OUTPUTFILE="-o $LTPROOT/output/LTP_RUN_ON-$OUTPUTFILE_NAME.output"
subrata_modak08dde6f2007-11-28 11:02:51 +0000411 ALT_DIR_OUT=1
subrata_modake47fb352007-11-25 17:03:49 +0000412 if [ ! "$HTMLFILE" ] ; then ## User has not mentioned HTML File name, We need to create one
413 HTMLFILE_NAME=`basename $OUTPUTFILE_NAME`
414 HTMLFILE="$LTPROOT/output/$HTMLFILE_NAME.html"
415 fi
416 fi
417 fi
418
subrata_modak5d7deea2007-09-15 13:51:36 +0000419 # If we need, create the output directory
420 [ "$ALT_DIR_OUT" -eq 1 ] && \
421 {
422 echo "INFO: creating $LTPROOT/output directory"
423 [ ! -d $LTPROOT/output ] && \
424 {
425 mkdir -p $LTPROOT/output || \
426 {
427 echo "ERROR: failed to create $LTPROOT/output"
428 exit 1
429 }
430 }
431 }
432 # If we need, create the results directory
433 [ "$ALT_DIR_RES" -eq 1 ] && \
434 {
435 echo "INFO: creating $LTPROOT/results directory"
436 [ ! -d $LTPROOT/results ] && \
437 {
438 mkdir -p $LTPROOT/results || \
439 {
440 echo "ERROR: failed to create $LTPROOT/results"
441 exit 1
442 }
443 }
444 }
445
subrata_modaka1fd64b2007-04-11 11:24:49 +0000446 # Added -m 777 for tests that call tst_tmpdir() and try to
447 # write to it as user nobody
subrata_modak5ee3e892008-10-21 13:17:56 +0000448 mkdir -m 777 -p $TMPBASE || \
449 {
450 echo "FATAL: Unable to make temporary directory $TMPBASE"
451 exit 1
452 }
453 # use mktemp to create "safe" temporary directories
454 export TMPTEMPLATE="${TMPBASE}/ltp-XXXXXXXXXX"
subrata_modak6edfbda2008-10-17 12:25:48 +0000455 TMP=`mktemp -d $TMPTEMPLATE` || \
plars4a120e82004-09-02 18:56:06 +0000456 {
subrata_modak6edfbda2008-10-17 12:25:48 +0000457 echo "FATAL: Unable to make temporary directory: $TMP"
458 exit 1
459 }
460 export TMP
subrata_modak5ee3e892008-10-21 13:17:56 +0000461 # To be evoked by tst_tmpdir()
462 # write to it as user nobody
463 export TMPDIR="/tmp"
subrata_modak6edfbda2008-10-17 12:25:48 +0000464
465 chmod 777 $TMP || \
466 {
467 echo "unable to chmod 777 $TMP ... aborting"
plars4a120e82004-09-02 18:56:06 +0000468 exit 1
469 }
470
471 cd $TMP || \
472 {
473 echo "could not cd ${TMP} ... exiting"
474 exit 1
475 }
476
subrata_modak6edfbda2008-10-17 12:25:48 +0000477 ! [ -z $INSTANCES ] && \
478 {
479 INSTANCES="$INSTANCES -O ${TMP}"
480 }
481
plars4a120e82004-09-02 18:56:06 +0000482 [ "$RUN_NETEST" -eq 1 ] && \
483 {
484 [ -z "$RHOST" ] || [ -z "$PASSWD" ] && \
485 {
486 [ -z "$RHOST" ] && \
487 {
488 echo \
489 "INFO: Enter RHOST = 'name of the remote host machine'"
490 echo -n "-> "
491 read RHOST
492 }
493
494 [ -z "$PASSWD" ] && \
495 {
496 echo " "
497 echo \
498 "INFO: Enter PASSWD = 'root passwd of the remote host machine'"
499 echo -n "-> "
500 read PASSWD
501 }
502 export RHOST=$RHOST
503 export PASSWD=$PASSWD
504 echo "WARNING: security of $RHOST may be compromised"
505 }
506 }
507
508 # If user does not provide a command file select a default set of testcases
509 # to execute.
subrata_modakbc833d32007-07-25 10:12:02 +0000510 if [ -z "$CMDFILES" ] && [ -z "$CMDFILEADDR" ]
plars4a120e82004-09-02 18:56:06 +0000511 then
subrata_modakbc833d32007-07-25 10:12:02 +0000512 cat <<-EOF >&1
plars4a120e82004-09-02 18:56:06 +0000513
514 INFO: no command files were provided, using default,
515 system calls, memory management, IPC, scheduler
516 direct io, file system, math and pty tests will
517 now be executed
518
519 EOF
520
subrata_modak58c9d112008-10-23 13:31:35 +0000521 for SCENFILES in ${LTPROOT}/runtest/syscalls \
522 ${LTPROOT}/runtest/fs \
523 ${LTPROOT}/runtest/fsx \
524 ${LTPROOT}/runtest/dio \
subrata_modakc4ac9082008-12-29 11:02:21 +0000525 ${LTPROOT}/runtest/io \
subrata_modak58c9d112008-10-23 13:31:35 +0000526 ${LTPROOT}/runtest/mm \
527 ${LTPROOT}/runtest/ipc \
528 ${LTPROOT}/runtest/sched \
529 ${LTPROOT}/runtest/math \
530 ${LTPROOT}/runtest/nptl \
531 ${LTPROOT}/runtest/pty \
532 ${LTPROOT}/runtest/containers \
533 ${LTPROOT}/runtest/fs_bind \
534 ${LTPROOT}/runtest/controllers \
535 ${LTPROOT}/runtest/filecaps \
536 ${LTPROOT}/runtest/fcntl-locktests \
537 ${LTPROOT}/runtest/connectors \
538 ${LTPROOT}/runtest/admin_tools \
539 ${LTPROOT}/runtest/timers \
subrata_modak53407442008-10-29 09:46:03 +0000540 ${LTPROOT}/runtest/power_management_tests \
subrata_modak00310c42008-10-29 15:43:51 +0000541 ${LTPROOT}/runtest/numa \
subrata_modakeaa52dc2008-11-13 10:11:22 +0000542 ${LTPROOT}/runtest/hugetlb \
subrata_modak348f7bc2008-12-19 08:46:27 +0000543 ${LTPROOT}/runtest/commands \
544 ${LTPROOT}/runtest/hyperthreading
plars4a120e82004-09-02 18:56:06 +0000545 do
vapiere42c4b22008-03-08 12:49:06 +0000546 [ -e "$SCENFILES" ] || \
plars4a120e82004-09-02 18:56:06 +0000547 {
548 echo "FATAL: missing scenario file $SCENFILES"
549 exit 1
550 }
551
552 cat $SCENFILES >> ${TMP}/alltests || \
553 {
554 echo "FATAL: unable to create command file"
555 exit 1
556 }
557 done
subrata_modakbc833d32007-07-25 10:12:02 +0000558 fi
559
560 [ -n "$CMDFILES" ] && \
561 {
562 for SCENFILES in `echo "$CMDFILES" | sed 's/,/\n/g'`
563 do
564 [ -f "$SCENFILES" ] || SCENFILES="$LTPROOT/runtest/$SCENFILES"
565 cat "$SCENFILES" >> ${TMP}/alltests || \
566 {
567 echo "FATAL: unable to create command file"
568 exit 1
569 }
570 done
571 }
572
573 [ -n "$CMDFILEADDR" ] && \
574 {
575 wget -q "${CMDFILEADDR}" -O ${TMP}/wgetcmdfile
576 if [ $? -ne 0 ]; then
577 echo "FATAL: error while getting the command file with wget (address $CMDFILEADDR)"
578 exit 1
579 fi
580 cat "${TMP}/wgetcmdfile" >> ${TMP}/alltests || \
plars4a120e82004-09-02 18:56:06 +0000581 {
subrata_modakbc833d32007-07-25 10:12:02 +0000582 echo "FATAL: unable to create command file"
plars4a120e82004-09-02 18:56:06 +0000583 exit 1
584 }
subrata_modakbc833d32007-07-25 10:12:02 +0000585 }
586
plars4a120e82004-09-02 18:56:06 +0000587 [ "$RUN_NETEST" -eq 1 ] && \
588 {
589 for SCENFILES in ${LTPROOT}/runtest/tcp_cmds \
590 ${LTPROOT}/runtest/multicast \
591 ${LTPROOT}/runtest/rpc \
592 ${LTPROOT}/runtest/nfs
593 do
vapiere42c4b22008-03-08 12:49:06 +0000594 [ -e "$SCENFILES" ] || \
plars4a120e82004-09-02 18:56:06 +0000595 {
596 echo "FATAL: missing scenario file $SCENFILES"
597 exit 1
598 }
599
subrata_modakbc833d32007-07-25 10:12:02 +0000600 cat "$SCENFILES" >> ${TMP}/alltests || \
plars4a120e82004-09-02 18:56:06 +0000601 {
602 echo "FATAL: unable to create command file"
603 exit 1
604 }
605 done
606 }
subrata_modakbc833d32007-07-25 10:12:02 +0000607
plars4a120e82004-09-02 18:56:06 +0000608 # The fsx-linux tests use the SCRATCHDEV environment variable as a location
609 # that can be reformatted and run on. Set SCRATCHDEV if you want to run
610 # these tests. As a safeguard, this is disabled.
611 unset SCRATCHDEV
612 [ -n "$SCRATCHDEV" ] && \
613 {
614 cat ${LTPROOT}/runtest/fsx >> ${TMP}/alltests ||
615 {
616 echo "FATAL: unable to create fsx-linux tests command file"
617 exit 1
618 }
619 }
subrata_modakbc833d32007-07-25 10:12:02 +0000620
621 # If enabled, execute only test cases that match the PATTERN
622 if [ -n "$TAG_RESTRICT_STRING" ]
623 then
624 mv -f ${TMP}/alltests ${TMP}/alltests.orig
625 grep $TAG_RESTRICT_STRING ${TMP}/alltests.orig > ${TMP}/alltests #Not worth checking return codes for this case
626 fi
plars4a120e82004-09-02 18:56:06 +0000627
628 # check for required users and groups
629 ${LTPROOT}/IDcheck.sh &>/dev/null || \
630 {
631 echo "WARNING: required users and groups not present"
632 echo "WARNING: some test cases may fail"
633 }
robbiew7d43d772005-02-07 20:07:30 +0000634
plars4a120e82004-09-02 18:56:06 +0000635 # display versions of installed software
636 [ -z "$QUIET_MODE" ] && \
637 {
638 ${LTPROOT}/ver_linux || \
639 {
640 echo "WARNING: unable to display versions of software installed"
641 exit 1
642 }
643 }
644
subrata_modak8c138332008-01-28 11:19:32 +0000645 if [ $RUN_REPEATED -gt 1 ]; then # You need to specify at least more than 1 sequential run, else it runs default
646 echo "PAN will run these test cases $RUN_REPEATED times....."
647 echo "Test Tags will be Prepended with ITERATION NO.s....."
648 inc=1
649 sed -e '/^$/ d' -e 's/^[ ,\t]*//' -e '/^#/ d' < ${TMP}/alltests > ${TMP}/alltests.temp ##This removes all newlines, leading spaces, tabs, #
650 sed 's/^[0-9,a-z,A-Z]*/'"$inc"'_ITERATION_&/' < ${TMP}/alltests.temp > ${TMP}/alltests ## .temp is kept as Base file
651 while [ $inc -lt $RUN_REPEATED ] ; do
652 inc=`expr $inc + 1`
653 sed 's/^[0-9,a-z,A-Z]*/'"$inc"'_ITERATION_&/' < ${TMP}/alltests.temp >> ${TMP}/alltests #Keep appending with Iteration No.s
654 done
655 fi
656
plars4a120e82004-09-02 18:56:06 +0000657 [ ! -z "$QUIET_MODE" ] && { echo "INFO: Test start time: $(date)" ; }
robbiew7d43d772005-02-07 20:07:30 +0000658 PAN_COMMAND="${LTPROOT}/pan/pan $QUIET_MODE -e -S $INSTANCES $DURATION -a $$ \
subrata_modakbc833d32007-07-25 10:12:02 +0000659 -n $$ $PRETTY_PRT -f ${TMP}/alltests $LOGFILE $OUTPUTFILE $FAILCMDFILE"
robbiew7d43d772005-02-07 20:07:30 +0000660 if [ ! -z "$VERBOSE_MODE" ] ; then
661 echo "COMMAND: $PAN_COMMAND"
662 if [ ! -z "$TAG_RESTRICT_STRING" ] ; then
663 echo "INFO: Restricted to $TAG_RESTRICT_STRING"
664 fi
665 fi
666 #$PAN_COMMAND #Duplicated code here, because otherwise if we fail, only "PAN_COMMAND" gets output
subrata_modak43938212008-05-19 08:48:46 +0000667
668 ## Display the Output/Log/Failed/HTML file names here
669 echo -e "LOG File: \c"
670 echo $LOGFILE | cut -b4-
671
672 if [ "$OUTPUTFILE" ]; then
673 echo -e "OUTPUT File: \c"
674 echo $OUTPUTFILE | cut -b4-
675 fi
676
677 echo -e "FAILED COMMAND File: \c"
678 echo $FAILCMDFILE | cut -b4-
679
680 if [ "$HTMLFILE" ]; then
681 echo "HTML File: $HTMLFILE"
682 fi
683
684 echo "Running tests......."
subrata_modake47fb352007-11-25 17:03:49 +0000685 test_start_time=$(date)
subrata_modakd48c4d02008-01-23 12:59:40 +0000686 ${LTPROOT}/pan/pan $QUIET_MODE -e -S $INSTANCES $DURATION -a $$ -n $$ $PRETTY_PRT -f ${TMP}/alltests $LOGFILE $OUTPUTFILE $FAILCMDFILE
687
plars4a120e82004-09-02 18:56:06 +0000688 if [ $? -eq 0 ]; then
689 echo "INFO: pan reported all tests PASS"
690 VALUE=0
subrata_modake47fb352007-11-25 17:03:49 +0000691 export LTP_EXIT_VALUE=0;
plars4a120e82004-09-02 18:56:06 +0000692 else
693 echo "INFO: pan reported some tests FAIL"
694 VALUE=1
subrata_modake47fb352007-11-25 17:03:49 +0000695 export LTP_EXIT_VALUE=1;
plars4a120e82004-09-02 18:56:06 +0000696 fi
mreed1091696422006-05-03 19:07:22 +0000697 echo "LTP Version: $version_date"
698
subrata_modake47fb352007-11-25 17:03:49 +0000699 if [ "$ALT_HTML_OUT" -eq 1 ] ; then #User wants the HTML output to be created, it then needs to be generated
700 export LTP_VERSION=$version_date
701 export TEST_START_TIME=$test_start_time
702 export TEST_END_TIME=$(date)
703 OUTPUT_DIRECTORY=`echo $OUTPUTFILE | cut -c4-`
704 LOGS_DIRECTORY="$LTPROOT/results"
705 export TEST_OUTPUT_DIRECTORY="$LTPROOT/output"
706 export TEST_LOGS_DIRECTORY=$LOGS_DIRECTORY
707 echo "Generating HTML Output.....!!"
708 ( perl $LTPROOT/tools/genhtml.pl $LTPROOT/tools/html_report_header.txt test_start test_end test_output execution_status $OUTPUT_DIRECTORY > $HTMLFILE; )
709 echo "Generated HTML Output.....!!"
710 echo "Location: $HTMLFILE";
711
712 fi
713
subrata_modak08dde6f2007-11-28 11:02:51 +0000714 if [ "$ALT_EMAIL_OUT" -eq 1 ] ; then ## User wants reports to be e-mailed
715 if [ [ ! "$HTMLFILE_NAME" ] -o [ ! "$OUTPUTFILE_NAME" ] -o [ ! "$LOGFILE_NAME" ] ] ; then
716 ##User does not have output/logs/html-output, nothing to be mailed in this situation
717 echo "Nothing to be mailed here...."
718 else
subrata_modak43938212008-05-19 08:48:46 +0000719 TAR_FILE_NAME=LTP_RUN_$version_date$DEFAULT_FILE_NAME_GENERATION_TIME.tar
subrata_modak08dde6f2007-11-28 11:02:51 +0000720 if [ "$HTMLFILE_NAME" ] ; then ## HTML file Exists
721 if [ "$ALT_HTML_OUT" -ne 1 ] ; then ## The HTML file path is absolute and not $LTPROOT/output
722 mkdir -p $LTPROOT/output ## We need to create this Directory
723 cp $HTMLFILE_NAME $LTPROOT/output/
724 fi
725 fi
726 if [ "$OUTPUTFILE_NAME" ] ; then ## Output file exists
727 if [ "$ALT_DIR_OUT" -ne 1 ] ; then ## The Output file path is absolute and not $LTPROOT/output
728 mkdir -p $LTPROOT/output ## We need to create this Directory
729 cp $OUTPUTFILE_NAME $LTPROOT/output/
730 fi
731 fi
732 if [ "$LOGFILE_NAME" ] ; then ## Log file exists
733 if [ "$ALT_DIR_RES" -ne 1 ] ; then ## The Log file path is absolute and not $LTPROOT/results
734 mkdir -p $LTPROOT/results ## We need to create this Directory
735 cp $LOGFILE_NAME $LTPROOT/results/
736 fi
737 fi
738 if [ -d $LTPROOT/output ] ; then
739 tar -cf ./$TAR_FILE_NAME $LTPROOT/output
740 if [ $? -eq 0 ]; then
741 echo "Created TAR File: ./$TAR_FILE_NAME successfully, added $LTPROOT/output"
742 else
743 echo "Cannot Create TAR File: ./$TAR_FILE_NAME for adding $LTPROOT/output"
744 fi
745 fi
746 if [ -d $LTPROOT/results ] ; then
747 tar -uf ./$TAR_FILE_NAME $LTPROOT/results
748 if [ $? -eq 0 ]; then
749 echo "Updated TAR File: ./$TAR_FILE_NAME successfully, added $LTPROOT/results"
750 else
751 echo "Cannot Update TAR File: ./$TAR_FILE_NAME for adding $LTPROOT/results"
752 fi
753 fi
754 if [ -e $LTPROOT/nohup.out ] ; then ## If User would have Chosen nohup to do ltprun
755 tar -uf ./$TAR_FILE_NAME $LTPROOT/nohup.out
756 if [ $? -eq 0 ]; then
757 echo "Updated TAR File: ./$TAR_FILE_NAME successfully, added $LTPROOT/nohup.out"
758 else
759 echo "Cannot Update TAR File: ./$TAR_FILE_NAME for adding $LTPROOT/nohup.out"
760 fi
761 fi
762 gzip ./$TAR_FILE_NAME ## gzip this guy
763 if [ $? -eq 0 ]; then
764 echo "Gunzipped TAR File: ./$TAR_FILE_NAME"
765 else
766 echo "Cannot Gunzip TAR File: ./$TAR_FILE_NAME"
767 fi
768 if [ -e /usr/bin/mutt ] ; then ## This is a better mail client than others
769 echo "Starting mailing reports to: $EMAIL_TO, file: ./$TAR_FILE_NAME.gz"
770 mutt -a ./$TAR_FILE_NAME.gz -s "LTP Reports on $test_start_time" $EMAIL_TO < /dev/null
771 if [ $? -eq 0 ]; then
772 echo "Reports Successfully mailed to: $EMAIL_TO"
773 else
774 echo "Reports cannot be mailed to: $EMAIL_TO"
775 fi
776 else ## Use our Ageold mail program
777 echo "Starting mailing reports to: $EMAIL_TO, file: ./$TAR_FILE_NAME.gz"
778 uuencode ./$TAR_FILE_NAME.gz $TAR_FILE_NAME.gz | mail $EMAIL_TO -s "LTP Reports on $test_start_time"
779 if [ $? -eq 0 ]; then
780 echo "Reports Successfully mailed to: $EMAIL_TO"
781 else
782 echo "Reports cannot be mailed to: $EMAIL_TO"
783 fi
784 fi
785 fi
786 fi
787
plars4a120e82004-09-02 18:56:06 +0000788 [ ! -z "$QUIET_MODE" ] && { echo "INFO: Test end time: $(date)" ; }
789
subrata_modake099b2a2007-10-29 12:22:01 +0000790 [ "$GENLOAD" -eq 1 ] && { killall -9 genload >/dev/null 2>&1; }
791 [ "$NETPIPE" -eq 1 ] && { killall -9 NPtcp >/dev/null 2>&1; }
plars4a120e82004-09-02 18:56:06 +0000792
subrata_modak5d7deea2007-09-15 13:51:36 +0000793 [ "$ALT_DIR_OUT" -eq 1 ] || [ "$ALT_DIR_RES" -eq 1 ] && \
plars4a120e82004-09-02 18:56:06 +0000794 {
795 cat <<-EOF >&1
796
797 ###############################################################"
798
799 Done executing testcases."
mreed1091696422006-05-03 19:07:22 +0000800 LTP Version: $version_date
plars4a120e82004-09-02 18:56:06 +0000801 ###############################################################"
802
803 EOF
804 }
805 exit $VALUE
806}
807
808cleanup()
809{
810 rm -rf ${TMP}
811}
812
813trap "cleanup" 0
814setup
815main "$@"