blob: 053b4888d6d9943d65558f3233a4f50883c3393a [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_modake099b2a2007-10-29 12:22:01 +000063#
subrata_modak6838ec32007-09-14 10:10:12 +000064#################################################################################
subrata_modakbc833d32007-07-25 10:12:02 +000065
plars4a120e82004-09-02 18:56:06 +000066
67
68setup()
69{
70 cd `dirname $0` || \
71 {
72 echo "FATAL: unable to change directory to $(dirname $0)"
73 exit 1
74 }
75 export LTPROOT=${PWD}
76 export TMPBASE="/tmp"
77 export TMP="${TMPBASE}/ltp-$$"
subrata_modak4a57fe82007-09-24 06:40:12 +000078 export TMPDIR="${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
robbiew7d43d772005-02-07 20:07:30 +0000149 -v Print more verbose output to screen.
subrata_modakbc833d32007-07-25 10:12:02 +0000150 -w CMDFILEADDR Uses wget to get the user's list of testcases.
plars4a120e82004-09-02 18:56:06 +0000151 -x INSTANCES Run multiple instances of this testsuite.
152
subrata_modake099b2a2007-10-29 12:22:01 +0000153 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 +0000154
plars4a120e82004-09-02 18:56:06 +0000155
156 EOF
157exit 0
158}
159
plars4a120e82004-09-02 18:56:06 +0000160main()
161{
subrata_modakbc833d32007-07-25 10:12:02 +0000162 local CMDFILES=""
plars4a120e82004-09-02 18:56:06 +0000163 local PRETTY_PRT=""
subrata_modak5d7deea2007-09-15 13:51:36 +0000164 local ALT_DIR_OUT=0
165 local ALT_DIR_RES=0
subrata_modake47fb352007-11-25 17:03:49 +0000166 local ALT_HTML_OUT=0
subrata_modak08dde6f2007-11-28 11:02:51 +0000167 local ALT_EMAIL_OUT=0
plars4a120e82004-09-02 18:56:06 +0000168 local RUN_NETEST=0
169 local QUIET_MODE=""
robbiew7d43d772005-02-07 20:07:30 +0000170 local VERBOSE_MODE=""
plars4a120e82004-09-02 18:56:06 +0000171 local NETPIPE=0
172 local GENLOAD=0
173 local MEMSIZE=0
174 local DURATION=""
subrata_modakbc833d32007-07-25 10:12:02 +0000175 local CMDFILEADDR=""
subrata_modake47fb352007-11-25 17:03:49 +0000176 local LOGFILE_NAME=""
plars4a120e82004-09-02 18:56:06 +0000177 local LOGFILE=""
subrata_modake47fb352007-11-25 17:03:49 +0000178 local OUTPUTFILE_NAME=""
179 local OUTPUTFILE=""
180 local HTMLFILE_NAME=""
181 local HTMLFILE=""
subrata_modak08dde6f2007-11-28 11:02:51 +0000182 local EMAIL_TO=""
plars4a120e82004-09-02 18:56:06 +0000183 local SCENFILES=""
robbiew7d43d772005-02-07 20:07:30 +0000184 local TAG_RESTRICT_STRING=""
185 local PAN_COMMAND=""
mreed1091696422006-05-03 19:07:22 +0000186 version_date=`head -n 1 $LTPROOT/ChangeLog`
plars4a120e82004-09-02 18:56:06 +0000187
subrata_modak08dde6f2007-11-28 11:02:51 +0000188 while getopts a:c:C:d:D:f:ehi:g:l:m:Nno:pqr:s:t:vw:x: arg
plars4a120e82004-09-02 18:56:06 +0000189 do case $arg in
subrata_modak08dde6f2007-11-28 11:02:51 +0000190 a) EMAIL_TO=$OPTARG
191 ALT_EMAIL_OUT=1;;
plars4a120e82004-09-02 18:56:06 +0000192 c)
subrata_modake099b2a2007-10-29 12:22:01 +0000193 NUM_PROCS=$(($OPTARG))
194 if [ "$NUM_PROCS" -eq 0 ]; then
195 # User Did not Define the Value ,or, User Defined Zero,
196 # hence, prevent from creating infinite processes
197 NUM_PROCS=1
198 fi
plars4a120e82004-09-02 18:56:06 +0000199 $LTPROOT/testcases/bin/genload --cpu $NUM_PROCS >/dev/null 2>&1 &
200 GENLOAD=1 ;;
subrata_modakbc833d32007-07-25 10:12:02 +0000201
subrata_modak5d7deea2007-09-15 13:51:36 +0000202 C)
subrata_modak6838ec32007-09-14 10:10:12 +0000203 case $OPTARG in
204 /*)
205 FAILCMDFILE="-C $OPTARG" ;;
206 *)
207 FAILCMDFILE="-C $LTPROOT/output/$OPTARG"
subrata_modak5d7deea2007-09-15 13:51:36 +0000208 ALT_DIR_OUT=1 ;;
subrata_modak6838ec32007-09-14 10:10:12 +0000209 esac ;;
plars4a120e82004-09-02 18:56:06 +0000210
211 d) # append $$ to TMP, as it is recursively
212 # removed at end of script.
subrata_modak4a57fe82007-09-24 06:40:12 +0000213 export TMPBASE=$OPTARG
214 export TMP="${TMPBASE}/ltp-$$"
robbiew538bc1a2005-03-11 19:26:14 +0000215 export TMPDIR="$TMP";;
subrata_modake099b2a2007-10-29 12:22:01 +0000216
217 D) NUM_PROCS=1; NUM_FILES=1; NUM_BYTES=$((1024 * 1024 * 1024)); CLEAN_FLAG=0
218 ARGUMENT_LIST=$(($OPTARG))
219 TOTAL_ARGUMENTS=1 # Initial Assume
220 for ARGUMENT in `echo "$ARGUMENT_LIST" | sed 's/,/\n/g'` # Store all value in a Loop
221 do
222 case $TOTAL_ARGUMENTS in
223 1) NUM_PROCS="$ARGUMENT" ;;
224 2) NUM_FILES="$ARGUMENT" ;;
225 3) NUM_BYTES="$ARGUMENT" ;;
226 4) CLEAN_FLAG="$ARGUMENT" ;;
227 esac
228 TOTAL_ARGUMENTS=`expr $TOTAL_ARGUMENTS + 1`
229 done
230 # just to get the default values if the user passed 0
231 if [ "$NUM_PROCS" -eq 0 ]; then
232 NUM_PROCS=1
233 fi
234 if [ "$NUM_FILES" -eq 0 ]; then
235 NUM_FILES=1
236 fi
237 if [ "$NUM_BYTES" -eq 0 ]; then
238 NUM_BYTES=$((1024 * 1024 * 1024))
239 fi
240 if [ "$CLEAN_FLAG" -ne 1 ]; then
241 CLEAN_FLAG=0
242 fi
243 if [ "$CLEAN_FLAG" -eq 1 ]; then
244 # Do not unlink file in this case
245 $LTPROOT/testcases/bin/genload --hdd $NUM_PROCS --hdd-files \
246 $NUM_FILES --hdd-bytes $NUM_BYTES >/dev/null 2>&1 &
247 else
248 # Cleanup otherwise
249 $LTPROOT/testcases/bin/genload --hdd $NUM_PROCS --hdd-files \
250 $NUM_FILES --hdd-bytes $NUM_BYTES --hdd-noclean >/dev/null 2>&1 &
251 fi
252 GENLOAD=1;;
253
mreed1091696422006-05-03 19:07:22 +0000254 e) # Print out the version of LTP
255 version_of_ltp
256 ;;
plars4a120e82004-09-02 18:56:06 +0000257 f) # Execute user defined set of testcases.
subrata_modakbc833d32007-07-25 10:12:02 +0000258 # Can be more then one file, just separate it with ',', like:
259 # -f nfs,commands,/tmp/testfile
260 CMDFILES=$OPTARG;;
subrata_modake47fb352007-11-25 17:03:49 +0000261 g) HTMLFILE_NAME="$OPTARG"
262 case $OPTARG in
263 /*)
264 HTMLFILE="$OPTARG";;
265 *)
subrata_modakd48c4d02008-01-23 12:59:40 +0000266 HTMLFILE="$LTPROOT/output/$OPTARG";;
267 esac
268 ALT_DIR_OUT=1
269 ALT_HTML_OUT=1;;
plars4a120e82004-09-02 18:56:06 +0000270 h) usage;;
271
subrata_modake099b2a2007-10-29 12:22:01 +0000272 i)
273 NUM_PROCS=$(($OPTARG))
274 if [ "$NUM_PROCS" -eq 0 ]; then
275 # User Did not Define the Value ,or, User Defined Zero,
276 # hence, prevent from creating infinite processes
277 NUM_PROCS=1
278 fi
279 $LTPROOT/testcases/bin/genload --io $NUM_PROCS >/dev/null 2>&1 &
plars4a120e82004-09-02 18:56:06 +0000280 GENLOAD=1 ;;
281
282 l)
subrata_modak6838ec32007-09-14 10:10:12 +0000283 LOGFILE_NAME="$OPTARG"
plars4a120e82004-09-02 18:56:06 +0000284 case $OPTARG in
subrata_modak5d7deea2007-09-15 13:51:36 +0000285 /*)
plars4a120e82004-09-02 18:56:06 +0000286 LOGFILE="-l $OPTARG" ;;
287 *)
288 LOGFILE="-l $LTPROOT/results/$OPTARG"
subrata_modak5d7deea2007-09-15 13:51:36 +0000289 ALT_DIR_RES=1 ;;
plars4a120e82004-09-02 18:56:06 +0000290 esac ;;
291
subrata_modake099b2a2007-10-29 12:22:01 +0000292 m) NUM_PROCS=1; CHUNKS=1; BYTES=$((256 * 1024 * 1024)); HANGUP_FLAG=0
293 ARGUMENT_LIST=$(($OPTARG))
294 TOTAL_ARGUMENTS=1 # Initial Assume
295 for ARGUMENT in `echo "$ARGUMENT_LIST" | sed 's/,/\n/g'` # Store all value in a Loop
296 do
297 case $TOTAL_ARGUMENTS in
298 1) NUM_PROCS="$ARGUMENT" ;;
299 2) CHUNKS="$ARGUMENT" ;;
300 3) BYTES="$ARGUMENT" ;;
301 4) HANGUP_FLAG="$ARGUMENT" ;;
302 esac
303 TOTAL_ARGUMENTS=`expr $TOTAL_ARGUMENTS + 1`
304 done
305 # just to get the default values if the user passed 0
306 if [ "$NUM_PROCS" -eq 0 ]; then
307 NUM_PROCS=1
308 fi
309 if [ "$CHUNKS" -eq 0 ]; then
310 CHUNKS=1
311 fi
312 if [ "$BYTES" -eq 0 ]; then
313 BYTES=$((256 * 1024 * 1024))
314 fi
315 if [ "$HANGUP_FLAG" -ne 1 ]; then
316 HANGUP_FLAG=0
317 fi
318 if [ "$HANGUP_FLAG" -eq 1 ]; then
319 # Hang in a Sleep loop after memory allocated
320 $LTPROOT/testcases/bin/genload --vm $NUM_PROCS --vm-chunks \
321 $CHUNKS --vm-bytes $BYTES --vm-hang >/dev/null 2>&1 &
322 else
323 # Otherwise Do not Hangup
324 $LTPROOT/testcases/bin/genload --vm $NUM_PROCS --vm-chunks \
325 $CHUNKS --vm-bytes $BYTES >/dev/null 2>&1 &
326 fi
plars4a120e82004-09-02 18:56:06 +0000327 GENLOAD=1;;
328
329 N) RUN_NETEST=1;;
330
331 n)
332 $LTPROOT/testcases/bin/netpipe.sh
333 NETPIPE=1;;
334
subrata_modak6838ec32007-09-14 10:10:12 +0000335 o) OUTPUTFILE_NAME="$OPTARG"
subrata_modak6838ec32007-09-14 10:10:12 +0000336 case $OPTARG in
337 /*)
338 OUTPUTFILE="-o $OPTARG";;
339 *)
340 OUTPUTFILE="-o $LTPROOT/output/$OPTARG"
subrata_modak5d7deea2007-09-15 13:51:36 +0000341 ALT_DIR_OUT=1 ;;
subrata_modak6838ec32007-09-14 10:10:12 +0000342 esac ;;
plars4a120e82004-09-02 18:56:06 +0000343
344 p) PRETTY_PRT=" -p ";;
345
346 q) QUIET_MODE=" -q ";;
347
348 r) LTPROOT=$OPTARG;;
349
robbiew7d43d772005-02-07 20:07:30 +0000350 s) TAG_RESTRICT_STRING=$OPTARG;;
351
plars4a120e82004-09-02 18:56:06 +0000352 t) # In case you want to specify the time
353 # to run from the command line
354 # (2m = two minutes, 2h = two hours, etc)
355 DURATION="-t $OPTARG" ;;
356
robbiew7d43d772005-02-07 20:07:30 +0000357 v) VERBOSE_MODE=1;;
subrata_modakbc833d32007-07-25 10:12:02 +0000358
359 w) CMDFILEADDR=$OPTARG;;
robbiew7d43d772005-02-07 20:07:30 +0000360
plars4a120e82004-09-02 18:56:06 +0000361 x) # number of ltp's to run
362 cat <<-EOF >&1
363 WARNING: The use of -x can cause unpredictable failures, as a
364 result of concurrently running multiple tests designed
365 to be ran exclusively.
366 Pausing for 10 seconds..."
367 EOF
368 sleep 10
369 INSTANCES="-x $OPTARG -O ${TMP}";;
370
371 \?) usage;;
372 esac
373 done
subrata_modak6838ec32007-09-14 10:10:12 +0000374
375 ## It would be nice if a Failed File is compulsorily created (gives User better Idea of Tests that failed)
376
377 if [ ! "$FAILCMDFILE" ]; then ## User has not mentioned about Failed File name
subrata_modak5d7deea2007-09-15 13:51:36 +0000378 ALT_DIR_OUT=1
subrata_modak6838ec32007-09-14 10:10:12 +0000379 if [ ! "$OUTPUTFILE" ]; then ## User has not mentioned about Output File name either
380 if [ ! "$LOGFILE" ]; then ## User has not mentioned about Log File name either
381 FAILED_FILE_NAME=`date +"%Y_%b_%d-%Hh_%Mm_%Ss"`
382 FAILCMDFILE="-C $LTPROOT/output/LTP_RUN_ON-$FAILED_FILE_NAME.failed"
subrata_modak6838ec32007-09-14 10:10:12 +0000383 else ## User Fortunately wanted a log file,
384 FAILED_FILE_NAME=`basename $LOGFILE_NAME` ## Extract log file name and use it to construct Failed file name
385 FAILCMDFILE="-C $LTPROOT/output/LTP_RUN_ON-$FAILED_FILE_NAME.failed"
subrata_modak6838ec32007-09-14 10:10:12 +0000386 fi
387 else ## User Fortunately wanted a Output file
388 FAILED_FILE_NAME=`basename $OUTPUTFILE_NAME` ## Extract output file name and use it to construct Failed file name
389 FAILCMDFILE="-C $LTPROOT/output/LTP_RUN_ON-$FAILED_FILE_NAME.failed"
subrata_modak6838ec32007-09-14 10:10:12 +0000390 fi
391 fi
subrata_modaka1fd64b2007-04-11 11:24:49 +0000392
subrata_modakd48c4d02008-01-23 12:59:40 +0000393 if [ "$ALT_HTML_OUT" -eq 1 ] ; then ## User wants the HTML version of the output
394 QUIET_MODE="" ## Suppressing this guy as it will prevent generation of proper output
395 ## which the HTML parser will require
subrata_modake47fb352007-11-25 17:03:49 +0000396 if [ ! "$OUTPUTFILE" ]; then ## User has not mentioned about the Outputfile name, then we need to definitely generate one
397 OUTPUTFILE_NAME=`date +"%Y_%b_%d-%Hh_%Mm_%Ss"`
398 OUTPUTFILE="-o $LTPROOT/output/LTP_RUN_ON-$OUTPUTFILE_NAME.output"
subrata_modak08dde6f2007-11-28 11:02:51 +0000399 ALT_DIR_OUT=1
subrata_modake47fb352007-11-25 17:03:49 +0000400 if [ ! "$HTMLFILE" ] ; then ## User has not mentioned HTML File name, We need to create one
401 HTMLFILE_NAME=`basename $OUTPUTFILE_NAME`
402 HTMLFILE="$LTPROOT/output/$HTMLFILE_NAME.html"
403 fi
404 fi
405 fi
406
subrata_modak5d7deea2007-09-15 13:51:36 +0000407 # If we need, create the output directory
408 [ "$ALT_DIR_OUT" -eq 1 ] && \
409 {
410 echo "INFO: creating $LTPROOT/output directory"
411 [ ! -d $LTPROOT/output ] && \
412 {
413 mkdir -p $LTPROOT/output || \
414 {
415 echo "ERROR: failed to create $LTPROOT/output"
416 exit 1
417 }
418 }
419 }
420 # If we need, create the results directory
421 [ "$ALT_DIR_RES" -eq 1 ] && \
422 {
423 echo "INFO: creating $LTPROOT/results directory"
424 [ ! -d $LTPROOT/results ] && \
425 {
426 mkdir -p $LTPROOT/results || \
427 {
428 echo "ERROR: failed to create $LTPROOT/results"
429 exit 1
430 }
431 }
432 }
433
subrata_modaka1fd64b2007-04-11 11:24:49 +0000434 # Added -m 777 for tests that call tst_tmpdir() and try to
435 # write to it as user nobody
436 mkdir -m 777 -p $TMP || \
plars4a120e82004-09-02 18:56:06 +0000437 {
robbiew7d43d772005-02-07 20:07:30 +0000438 echo "FATAL: Unable to make temporary directory $TMP"
plars4a120e82004-09-02 18:56:06 +0000439 exit 1
440 }
441
442 cd $TMP || \
443 {
444 echo "could not cd ${TMP} ... exiting"
445 exit 1
446 }
447
448 [ "$RUN_NETEST" -eq 1 ] && \
449 {
450 [ -z "$RHOST" ] || [ -z "$PASSWD" ] && \
451 {
452 [ -z "$RHOST" ] && \
453 {
454 echo \
455 "INFO: Enter RHOST = 'name of the remote host machine'"
456 echo -n "-> "
457 read RHOST
458 }
459
460 [ -z "$PASSWD" ] && \
461 {
462 echo " "
463 echo \
464 "INFO: Enter PASSWD = 'root passwd of the remote host machine'"
465 echo -n "-> "
466 read PASSWD
467 }
468 export RHOST=$RHOST
469 export PASSWD=$PASSWD
470 echo "WARNING: security of $RHOST may be compromised"
471 }
472 }
473
474 # If user does not provide a command file select a default set of testcases
475 # to execute.
subrata_modakbc833d32007-07-25 10:12:02 +0000476 if [ -z "$CMDFILES" ] && [ -z "$CMDFILEADDR" ]
plars4a120e82004-09-02 18:56:06 +0000477 then
subrata_modakbc833d32007-07-25 10:12:02 +0000478 cat <<-EOF >&1
plars4a120e82004-09-02 18:56:06 +0000479
480 INFO: no command files were provided, using default,
481 system calls, memory management, IPC, scheduler
482 direct io, file system, math and pty tests will
483 now be executed
484
485 EOF
486
subrata_modakbc833d32007-07-25 10:12:02 +0000487 for SCENFILES in ${LTPROOT}/runtest/syscalls ${LTPROOT}/runtest/fs \
plars4a120e82004-09-02 18:56:06 +0000488 ${LTPROOT}/runtest/fsx ${LTPROOT}/runtest/dio \
489 ${LTPROOT}/runtest/mm ${LTPROOT}/runtest/ipc \
490 ${LTPROOT}/runtest/sched ${LTPROOT}/runtest/math \
subrata_modak0c5f9702007-04-26 11:02:47 +0000491 ${LTPROOT}/runtest/nptl ${LTPROOT}/runtest/pty \
subrata_modak2817ce12008-01-23 13:45:03 +0000492 ${LTPROOT}/runtest/containers \
493 ${LTPROOT}/runtest/filecaps
plars4a120e82004-09-02 18:56:06 +0000494 do
495 [ -a "$SCENFILES" ] || \
496 {
497 echo "FATAL: missing scenario file $SCENFILES"
498 exit 1
499 }
500
501 cat $SCENFILES >> ${TMP}/alltests || \
502 {
503 echo "FATAL: unable to create command file"
504 exit 1
505 }
506 done
subrata_modakbc833d32007-07-25 10:12:02 +0000507 fi
508
509 [ -n "$CMDFILES" ] && \
510 {
511 for SCENFILES in `echo "$CMDFILES" | sed 's/,/\n/g'`
512 do
513 [ -f "$SCENFILES" ] || SCENFILES="$LTPROOT/runtest/$SCENFILES"
514 cat "$SCENFILES" >> ${TMP}/alltests || \
515 {
516 echo "FATAL: unable to create command file"
517 exit 1
518 }
519 done
520 }
521
522 [ -n "$CMDFILEADDR" ] && \
523 {
524 wget -q "${CMDFILEADDR}" -O ${TMP}/wgetcmdfile
525 if [ $? -ne 0 ]; then
526 echo "FATAL: error while getting the command file with wget (address $CMDFILEADDR)"
527 exit 1
528 fi
529 cat "${TMP}/wgetcmdfile" >> ${TMP}/alltests || \
plars4a120e82004-09-02 18:56:06 +0000530 {
subrata_modakbc833d32007-07-25 10:12:02 +0000531 echo "FATAL: unable to create command file"
plars4a120e82004-09-02 18:56:06 +0000532 exit 1
533 }
subrata_modakbc833d32007-07-25 10:12:02 +0000534 }
535
plars4a120e82004-09-02 18:56:06 +0000536 [ "$RUN_NETEST" -eq 1 ] && \
537 {
538 for SCENFILES in ${LTPROOT}/runtest/tcp_cmds \
539 ${LTPROOT}/runtest/multicast \
540 ${LTPROOT}/runtest/rpc \
541 ${LTPROOT}/runtest/nfs
542 do
543 [ -a "$SCENFILES" ] || \
544 {
545 echo "FATAL: missing scenario file $SCENFILES"
546 exit 1
547 }
548
subrata_modakbc833d32007-07-25 10:12:02 +0000549 cat "$SCENFILES" >> ${TMP}/alltests || \
plars4a120e82004-09-02 18:56:06 +0000550 {
551 echo "FATAL: unable to create command file"
552 exit 1
553 }
554 done
555 }
subrata_modakbc833d32007-07-25 10:12:02 +0000556
plars4a120e82004-09-02 18:56:06 +0000557 # The fsx-linux tests use the SCRATCHDEV environment variable as a location
558 # that can be reformatted and run on. Set SCRATCHDEV if you want to run
559 # these tests. As a safeguard, this is disabled.
560 unset SCRATCHDEV
561 [ -n "$SCRATCHDEV" ] && \
562 {
563 cat ${LTPROOT}/runtest/fsx >> ${TMP}/alltests ||
564 {
565 echo "FATAL: unable to create fsx-linux tests command file"
566 exit 1
567 }
568 }
subrata_modakbc833d32007-07-25 10:12:02 +0000569
570 # If enabled, execute only test cases that match the PATTERN
571 if [ -n "$TAG_RESTRICT_STRING" ]
572 then
573 mv -f ${TMP}/alltests ${TMP}/alltests.orig
574 grep $TAG_RESTRICT_STRING ${TMP}/alltests.orig > ${TMP}/alltests #Not worth checking return codes for this case
575 fi
plars4a120e82004-09-02 18:56:06 +0000576
577 # check for required users and groups
578 ${LTPROOT}/IDcheck.sh &>/dev/null || \
579 {
580 echo "WARNING: required users and groups not present"
581 echo "WARNING: some test cases may fail"
582 }
robbiew7d43d772005-02-07 20:07:30 +0000583
plars4a120e82004-09-02 18:56:06 +0000584 # display versions of installed software
585 [ -z "$QUIET_MODE" ] && \
586 {
587 ${LTPROOT}/ver_linux || \
588 {
589 echo "WARNING: unable to display versions of software installed"
590 exit 1
591 }
592 }
593
594 [ ! -z "$QUIET_MODE" ] && { echo "INFO: Test start time: $(date)" ; }
robbiew7d43d772005-02-07 20:07:30 +0000595 PAN_COMMAND="${LTPROOT}/pan/pan $QUIET_MODE -e -S $INSTANCES $DURATION -a $$ \
subrata_modakbc833d32007-07-25 10:12:02 +0000596 -n $$ $PRETTY_PRT -f ${TMP}/alltests $LOGFILE $OUTPUTFILE $FAILCMDFILE"
robbiew7d43d772005-02-07 20:07:30 +0000597 if [ ! -z "$VERBOSE_MODE" ] ; then
598 echo "COMMAND: $PAN_COMMAND"
599 if [ ! -z "$TAG_RESTRICT_STRING" ] ; then
600 echo "INFO: Restricted to $TAG_RESTRICT_STRING"
601 fi
602 fi
603 #$PAN_COMMAND #Duplicated code here, because otherwise if we fail, only "PAN_COMMAND" gets output
subrata_modake47fb352007-11-25 17:03:49 +0000604 test_start_time=$(date)
subrata_modakd48c4d02008-01-23 12:59:40 +0000605 ${LTPROOT}/pan/pan $QUIET_MODE -e -S $INSTANCES $DURATION -a $$ -n $$ $PRETTY_PRT -f ${TMP}/alltests $LOGFILE $OUTPUTFILE $FAILCMDFILE
606
plars4a120e82004-09-02 18:56:06 +0000607 if [ $? -eq 0 ]; then
608 echo "INFO: pan reported all tests PASS"
609 VALUE=0
subrata_modake47fb352007-11-25 17:03:49 +0000610 export LTP_EXIT_VALUE=0;
plars4a120e82004-09-02 18:56:06 +0000611 else
612 echo "INFO: pan reported some tests FAIL"
613 VALUE=1
subrata_modake47fb352007-11-25 17:03:49 +0000614 export LTP_EXIT_VALUE=1;
plars4a120e82004-09-02 18:56:06 +0000615 fi
mreed1091696422006-05-03 19:07:22 +0000616 echo "LTP Version: $version_date"
617
subrata_modake47fb352007-11-25 17:03:49 +0000618 if [ "$ALT_HTML_OUT" -eq 1 ] ; then #User wants the HTML output to be created, it then needs to be generated
619 export LTP_VERSION=$version_date
620 export TEST_START_TIME=$test_start_time
621 export TEST_END_TIME=$(date)
622 OUTPUT_DIRECTORY=`echo $OUTPUTFILE | cut -c4-`
623 LOGS_DIRECTORY="$LTPROOT/results"
624 export TEST_OUTPUT_DIRECTORY="$LTPROOT/output"
625 export TEST_LOGS_DIRECTORY=$LOGS_DIRECTORY
626 echo "Generating HTML Output.....!!"
627 ( perl $LTPROOT/tools/genhtml.pl $LTPROOT/tools/html_report_header.txt test_start test_end test_output execution_status $OUTPUT_DIRECTORY > $HTMLFILE; )
628 echo "Generated HTML Output.....!!"
629 echo "Location: $HTMLFILE";
630
631 fi
632
subrata_modak08dde6f2007-11-28 11:02:51 +0000633 if [ "$ALT_EMAIL_OUT" -eq 1 ] ; then ## User wants reports to be e-mailed
634 if [ [ ! "$HTMLFILE_NAME" ] -o [ ! "$OUTPUTFILE_NAME" ] -o [ ! "$LOGFILE_NAME" ] ] ; then
635 ##User does not have output/logs/html-output, nothing to be mailed in this situation
636 echo "Nothing to be mailed here...."
637 else
638 TAR_FILE_NAME=LTP_RUN_$version_date`date +"%Y_%b_%d-%Hh_%Mm_%Ss"`.tar
639 if [ "$HTMLFILE_NAME" ] ; then ## HTML file Exists
640 if [ "$ALT_HTML_OUT" -ne 1 ] ; then ## The HTML file path is absolute and not $LTPROOT/output
641 mkdir -p $LTPROOT/output ## We need to create this Directory
642 cp $HTMLFILE_NAME $LTPROOT/output/
643 fi
644 fi
645 if [ "$OUTPUTFILE_NAME" ] ; then ## Output file exists
646 if [ "$ALT_DIR_OUT" -ne 1 ] ; then ## The Output file path is absolute and not $LTPROOT/output
647 mkdir -p $LTPROOT/output ## We need to create this Directory
648 cp $OUTPUTFILE_NAME $LTPROOT/output/
649 fi
650 fi
651 if [ "$LOGFILE_NAME" ] ; then ## Log file exists
652 if [ "$ALT_DIR_RES" -ne 1 ] ; then ## The Log file path is absolute and not $LTPROOT/results
653 mkdir -p $LTPROOT/results ## We need to create this Directory
654 cp $LOGFILE_NAME $LTPROOT/results/
655 fi
656 fi
657 if [ -d $LTPROOT/output ] ; then
658 tar -cf ./$TAR_FILE_NAME $LTPROOT/output
659 if [ $? -eq 0 ]; then
660 echo "Created TAR File: ./$TAR_FILE_NAME successfully, added $LTPROOT/output"
661 else
662 echo "Cannot Create TAR File: ./$TAR_FILE_NAME for adding $LTPROOT/output"
663 fi
664 fi
665 if [ -d $LTPROOT/results ] ; then
666 tar -uf ./$TAR_FILE_NAME $LTPROOT/results
667 if [ $? -eq 0 ]; then
668 echo "Updated TAR File: ./$TAR_FILE_NAME successfully, added $LTPROOT/results"
669 else
670 echo "Cannot Update TAR File: ./$TAR_FILE_NAME for adding $LTPROOT/results"
671 fi
672 fi
673 if [ -e $LTPROOT/nohup.out ] ; then ## If User would have Chosen nohup to do ltprun
674 tar -uf ./$TAR_FILE_NAME $LTPROOT/nohup.out
675 if [ $? -eq 0 ]; then
676 echo "Updated TAR File: ./$TAR_FILE_NAME successfully, added $LTPROOT/nohup.out"
677 else
678 echo "Cannot Update TAR File: ./$TAR_FILE_NAME for adding $LTPROOT/nohup.out"
679 fi
680 fi
681 gzip ./$TAR_FILE_NAME ## gzip this guy
682 if [ $? -eq 0 ]; then
683 echo "Gunzipped TAR File: ./$TAR_FILE_NAME"
684 else
685 echo "Cannot Gunzip TAR File: ./$TAR_FILE_NAME"
686 fi
687 if [ -e /usr/bin/mutt ] ; then ## This is a better mail client than others
688 echo "Starting mailing reports to: $EMAIL_TO, file: ./$TAR_FILE_NAME.gz"
689 mutt -a ./$TAR_FILE_NAME.gz -s "LTP Reports on $test_start_time" $EMAIL_TO < /dev/null
690 if [ $? -eq 0 ]; then
691 echo "Reports Successfully mailed to: $EMAIL_TO"
692 else
693 echo "Reports cannot be mailed to: $EMAIL_TO"
694 fi
695 else ## Use our Ageold mail program
696 echo "Starting mailing reports to: $EMAIL_TO, file: ./$TAR_FILE_NAME.gz"
697 uuencode ./$TAR_FILE_NAME.gz $TAR_FILE_NAME.gz | mail $EMAIL_TO -s "LTP Reports on $test_start_time"
698 if [ $? -eq 0 ]; then
699 echo "Reports Successfully mailed to: $EMAIL_TO"
700 else
701 echo "Reports cannot be mailed to: $EMAIL_TO"
702 fi
703 fi
704 fi
705 fi
706
plars4a120e82004-09-02 18:56:06 +0000707 [ ! -z "$QUIET_MODE" ] && { echo "INFO: Test end time: $(date)" ; }
708
subrata_modake099b2a2007-10-29 12:22:01 +0000709 [ "$GENLOAD" -eq 1 ] && { killall -9 genload >/dev/null 2>&1; }
710 [ "$NETPIPE" -eq 1 ] && { killall -9 NPtcp >/dev/null 2>&1; }
plars4a120e82004-09-02 18:56:06 +0000711
subrata_modak5d7deea2007-09-15 13:51:36 +0000712 [ "$ALT_DIR_OUT" -eq 1 ] || [ "$ALT_DIR_RES" -eq 1 ] && \
plars4a120e82004-09-02 18:56:06 +0000713 {
714 cat <<-EOF >&1
715
716 ###############################################################"
717
718 Done executing testcases."
subrata_modak6838ec32007-09-14 10:10:12 +0000719 log result(s) is in $LTPROOT/results directory"
720 output/failed result(s) in $LTPROOT/output directory [If you did not provide Absolute Path]
mreed1091696422006-05-03 19:07:22 +0000721 LTP Version: $version_date
plars4a120e82004-09-02 18:56:06 +0000722 ###############################################################"
723
724 EOF
725 }
726 exit $VALUE
727}
728
729cleanup()
730{
731 rm -rf ${TMP}
732}
733
734trap "cleanup" 0
735setup
736main "$@"