blob: f347f55aaa07540c54b1d86b26e07c3f5a584641 [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 ##
Wanlong Gao4548c6c2012-10-19 18:03:36 +080018## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ##
plars4a120e82004-09-02 18:56:06 +000019## ##
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
Chris Dearman37550cf2012-10-17 19:54:01 -070027#
plars4a120e82004-09-02 18:56:06 +000028# History: Oct 07 2003 - Modified - Manoj Iyer
29# - use functions
30# - clean up on script exit
31# - error checking etc.
Chris Dearman37550cf2012-10-17 19:54:01 -070032#
plars4a120e82004-09-02 18:56:06 +000033# 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
subrata_modak14390fd2009-05-19 09:39:11 +000036# - exit with error if ltp-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
yaberauneya6d41cc32010-01-28 16:24:16 +000057# - 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
yaberauneya6d41cc32010-01-28 16:24:16 +000065# Aug 17 2009 - Modified - Subrata Modak
66# - Added Fault Injection generation Capability through -F Option
subrata_modake099b2a2007-10-29 12:22:01 +000067#
subrata_modak6838ec32007-09-14 10:10:12 +000068#################################################################################
subrata_modakbc833d32007-07-25 10:12:02 +000069
plars4a120e82004-09-02 18:56:06 +000070
71
72setup()
73{
yaberauneya6d41cc32010-01-28 16:24:16 +000074 cd `dirname $0` || \
75 {
76 echo "FATAL: unable to change directory to $(dirname $0)"
77 exit 1
78 }
79 export LTPROOT=${PWD}
plars4a120e82004-09-02 18:56:06 +000080 export TMPBASE="/tmp"
yaberauneya6d41cc32010-01-28 16:24:16 +000081 export PATH="${PATH}:${LTPROOT}/testcases/bin"
plars4a120e82004-09-02 18:56:06 +000082
Xiaoguang Wang5b42a1e2013-12-12 19:10:58 +080083 export LTP_DEV_FS_TYPE="ext2"
Xiaoguang Wang5b42a1e2013-12-12 19:10:58 +080084
yaberauneya6d41cc32010-01-28 16:24:16 +000085 [ -d "$LTPROOT/testcases/bin" ] ||
86 {
Garrett Coopercf86b8b2010-11-16 21:46:41 -080087 echo "FATAL: LTP not installed correctly"
88 echo "INFO: Follow directions in INSTALL!"
yaberauneya6d41cc32010-01-28 16:24:16 +000089 exit 1
90 }
91
92 [ -e "$LTPROOT/bin/ltp-pan" ] ||
93 {
94 echo "FATAL: Test suite driver 'ltp-pan' not found"
Garrett Coopercf86b8b2010-11-16 21:46:41 -080095 echo "INFO: Follow directions in INSTALL!"
yaberauneya6d41cc32010-01-28 16:24:16 +000096 exit 1
97 }
plars4a120e82004-09-02 18:56:06 +000098}
99
mreed1091696422006-05-03 19:07:22 +0000100version_of_ltp()
101{
yaberauneyaef772532009-10-09 17:55:43 +0000102 cat "$LTPROOT/Version"
yaberauneya6d41cc32010-01-28 16:24:16 +0000103 exit 0
mreed1091696422006-05-03 19:07:22 +0000104}
plars4a120e82004-09-02 18:56:06 +0000105
Chris Dearman37550cf2012-10-17 19:54:01 -0700106usage()
plars4a120e82004-09-02 18:56:06 +0000107{
yaberauneya6d41cc32010-01-28 16:24:16 +0000108 cat <<-EOF >&2
plars4a120e82004-09-02 18:56:06 +0000109
Xiaoguang Wang5f71cf92014-09-23 15:59:43 +0800110 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 ]
subrata_modake099b2a2007-10-29 12:22:01 +0000113 -N -n [ -o OUTPUTFILE ] -p -q [ -r LTPROOT ] [ -s PATTERN ] [ -t DURATION ]
Xiaoguang Wang5b42a1e2013-12-12 19:10:58 +0800114 -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]
Chris Dearman37550cf2012-10-17 19:54:01 -0700116
subrata_modak08dde6f2007-11-28 11:02:51 +0000117 -a EMAIL_TO EMAIL all your Reports to this E-mail Address
subrata_modake099b2a2007-10-29 12:22:01 +0000118 -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)]
subrata_modakbc833d32007-07-25 10:12:02 +0000121 -C FAILCMDFILE Command file with all failed test cases.
Xiaoguang Wang5f71cf92014-09-23 15:59:43 +0800122 -T TCONFCMDFILE Command file with all test cases that are not fully tested.
plars4a120e82004-09-02 18:56:06 +0000123 -d TMPDIR Directory where temporary files will be created.
subrata_modake099b2a2007-10-29 12:22:01 +0000124 -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]
mreed1091696422006-05-03 19:07:22 +0000130 -e Prints the date of the current LTP release
subrata_modakbc833d32007-07-25 10:12:02 +0000131 -f CMDFILES Execute user defined list of testcases (separate with ',')
yaberauneya6d41cc32010-01-28 16:24:16 +0000132 -F LOOPS,PERCENTAGE Induce PERCENTAGE Fault in the Kernel Subsystems, and, run each test for LOOPS loop
subrata_modake47fb352007-11-25 17:03:49 +0000133 -g HTMLFILE Create an additional HTML output format
plars4a120e82004-09-02 18:56:06 +0000134 -h Help. Prints all available options.
subrata_modake099b2a2007-10-29 12:22:01 +0000135 -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()]
Subrata Modakbd9d4402010-05-12 22:03:21 +0530137 -K DMESG_LOG_DIR
Chris Dearman37550cf2012-10-17 19:54:01 -0700138 Log Kernel messages generated for each test cases inside this directory
plars4a120e82004-09-02 18:56:06 +0000139 -l LOGFILE Log results of test in a logfile.
subrata_modake099b2a2007-10-29 12:22:01 +0000140 -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]
yaberauneya6d41cc32010-01-28 16:24:16 +0000146 -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]
Chris Dearman37550cf2012-10-17 19:54:01 -0700150 -N Run all the networking tests.
plars4a120e82004-09-02 18:56:06 +0000151 -n Run LTP with network traffic in background.
152 -o OUTPUTFILE Redirect test output to a file.
Chris Dearman37550cf2012-10-17 19:54:01 -0700153 -p Human readable format logfiles.
plars4a120e82004-09-02 18:56:06 +0000154 -q Print less verbose output to screen.
155 -r LTPROOT Fully qualified path where testsuite is installed.
Zorro Lang8aa21022016-09-26 21:19:49 +0800156 -R Randomize test order.
subrata_modaka1fd64b2007-04-11 11:24:49 +0000157 -s PATTERN Only run test cases which match PATTERN.
subrata_modak2f6c9812009-08-14 17:07:48 +0000158 -S SKIPFILE Skip tests specified in SKIPFILE
plars4a120e82004-09-02 18:56:06 +0000159 -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
Cyril Hrubis5f795702016-04-26 14:45:57 +0200164 -I ITERATIONS Execute the testsuite ITERATIONS times.
subrata_modakbc833d32007-07-25 10:12:02 +0000165 -w CMDFILEADDR Uses wget to get the user's list of testcases.
plars4a120e82004-09-02 18:56:06 +0000166 -x INSTANCES Run multiple instances of this testsuite.
subrata_modakd9fb3862008-12-29 11:25:36 +0000167 -b DEVICE Some tests require an unmounted block device
168 to run correctly.
Xiaoguang Wang5b42a1e2013-12-12 19:10:58 +0800169 -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
subrata_modakd9fb3862008-12-29 11:25:36 +0000174
plars4a120e82004-09-02 18:56:06 +0000175
Garrett Cooperf95875a2010-03-05 02:44:39 -0800176 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 +0000177
plars4a120e82004-09-02 18:56:06 +0000178
yaberauneya6d41cc32010-01-28 16:24:16 +0000179 EOF
180exit 0
plars4a120e82004-09-02 18:56:06 +0000181}
182
plars4a120e82004-09-02 18:56:06 +0000183main()
184{
subrata_modakbc833d32007-07-25 10:12:02 +0000185 local CMDFILES=""
plars4a120e82004-09-02 18:56:06 +0000186 local PRETTY_PRT=""
subrata_modak5d7deea2007-09-15 13:51:36 +0000187 local ALT_DIR_OUT=0
188 local ALT_DIR_RES=0
subrata_modake47fb352007-11-25 17:03:49 +0000189 local ALT_HTML_OUT=0
subrata_modak08dde6f2007-11-28 11:02:51 +0000190 local ALT_EMAIL_OUT=0
Subrata Modakbd9d4402010-05-12 22:03:21 +0530191 local ALT_DMESG_OUT=0
plars4a120e82004-09-02 18:56:06 +0000192 local RUN_NETEST=0
subrata_modak8c138332008-01-28 11:19:32 +0000193 local RUN_REPEATED=0
yaberauneya6d41cc32010-01-28 16:24:16 +0000194 local QUIET_MODE=""
plars4a120e82004-09-02 18:56:06 +0000195 local NETPIPE=0
196 local GENLOAD=0
197 local MEMSIZE=0
198 local DURATION=""
subrata_modakbc833d32007-07-25 10:12:02 +0000199 local CMDFILEADDR=""
subrata_modak43938212008-05-19 08:48:46 +0000200 local FAILCMDFILE=""
Xiaoguang Wang5f71cf92014-09-23 15:59:43 +0800201 local TCONFCMDFILE=""
yaberauneyaef772532009-10-09 17:55:43 +0000202 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=""
subrata_modake47fb352007-11-25 17:03:49 +0000207 local LOGFILE_NAME=""
plars4a120e82004-09-02 18:56:06 +0000208 local LOGFILE=""
subrata_modake47fb352007-11-25 17:03:49 +0000209 local OUTPUTFILE_NAME=""
210 local OUTPUTFILE=""
211 local HTMLFILE_NAME=""
212 local HTMLFILE=""
Subrata Modakbd9d4402010-05-12 22:03:21 +0530213 local DMESG_DIR=""
subrata_modak08dde6f2007-11-28 11:02:51 +0000214 local EMAIL_TO=""
robbiew7d43d772005-02-07 20:07:30 +0000215 local TAG_RESTRICT_STRING=""
216 local PAN_COMMAND=""
Zorro Lang8aa21022016-09-26 21:19:49 +0800217 local RANDOMRUN=0
look69f39f52014-04-30 09:55:44 +0800218 local DEFAULT_FILE_NAME_GENERATION_TIME=`date +"%Y_%m_%d-%Hh_%Mm_%Ss"`
Garrett Coopercf86b8b2010-11-16 21:46:41 -0800219 local scenfile=
220
yaberauneyaef772532009-10-09 17:55:43 +0000221 version_date=$(cat "$LTPROOT/Version")
plars4a120e82004-09-02 18:56:06 +0000222
Zorro Lang8aa21022016-09-26 21:19:49 +0800223 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
yaberauneya6d41cc32010-01-28 16:24:16 +0000224 do case $arg in
subrata_modak08dde6f2007-11-28 11:02:51 +0000225 a) EMAIL_TO=$OPTARG
226 ALT_EMAIL_OUT=1;;
Chris Dearman37550cf2012-10-17 19:54:01 -0700227 c)
subrata_modake099b2a2007-10-29 12:22:01 +0000228 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
yaberauneya6d41cc32010-01-28 16:24:16 +0000234 $LTPROOT/testcases/bin/genload --cpu $NUM_PROCS >/dev/null 2>&1 &
plars4a120e82004-09-02 18:56:06 +0000235 GENLOAD=1 ;;
subrata_modakbc833d32007-07-25 10:12:02 +0000236
Chris Dearman37550cf2012-10-17 19:54:01 -0700237 C)
subrata_modak6838ec32007-09-14 10:10:12 +0000238 case $OPTARG in
239 /*)
240 FAILCMDFILE="-C $OPTARG" ;;
Chris Dearman37550cf2012-10-17 19:54:01 -0700241 *)
subrata_modak6838ec32007-09-14 10:10:12 +0000242 FAILCMDFILE="-C $LTPROOT/output/$OPTARG"
subrata_modak5d7deea2007-09-15 13:51:36 +0000243 ALT_DIR_OUT=1 ;;
subrata_modak6838ec32007-09-14 10:10:12 +0000244 esac ;;
Chris Dearman37550cf2012-10-17 19:54:01 -0700245
Xiaoguang Wang5f71cf92014-09-23 15:59:43 +0800246 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
subrata_modak5ee3e892008-10-21 13:17:56 +0000255 d) # convert the user path to absolute path.
Garrett Cooper5d520f42012-08-07 08:57:31 -0700256 export TMPBASE=$(readlink -f ${OPTARG}) ;;
subrata_modake099b2a2007-10-29 12:22:01 +0000257
258 D) NUM_PROCS=1; NUM_FILES=1; NUM_BYTES=$((1024 * 1024 * 1024)); CLEAN_FLAG=0
subrata_modak548379d2008-08-20 09:15:49 +0000259 ARGUMENT_LIST=$OPTARG
Garrett Coopercf86b8b2010-11-16 21:46:41 -0800260 TOTAL_ARGUMENTS=1
261 for ARGUMENT in `echo "$ARGUMENT_LIST" | tr ',' ' '`
subrata_modake099b2a2007-10-29 12:22:01 +0000262 do
263 case $TOTAL_ARGUMENTS in
yaberauneya6d41cc32010-01-28 16:24:16 +0000264 1) NUM_PROCS="$ARGUMENT" ;;
265 2) NUM_FILES="$ARGUMENT" ;;
266 3) NUM_BYTES="$ARGUMENT" ;;
267 4) CLEAN_FLAG="$ARGUMENT" ;;
subrata_modake099b2a2007-10-29 12:22:01 +0000268 esac
yaberauneya6d41cc32010-01-28 16:24:16 +0000269 TOTAL_ARGUMENTS=`expr $TOTAL_ARGUMENTS + 1`
subrata_modake099b2a2007-10-29 12:22:01 +0000270 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
yaberauneya6d41cc32010-01-28 16:24:16 +0000286 $LTPROOT/testcases/bin/genload --hdd $NUM_PROCS --hdd-files \
subrata_modake099b2a2007-10-29 12:22:01 +0000287 $NUM_FILES --hdd-bytes $NUM_BYTES >/dev/null 2>&1 &
288 else
289 # Cleanup otherwise
yaberauneya6d41cc32010-01-28 16:24:16 +0000290 $LTPROOT/testcases/bin/genload --hdd $NUM_PROCS --hdd-files \
subrata_modake099b2a2007-10-29 12:22:01 +0000291 $NUM_FILES --hdd-bytes $NUM_BYTES --hdd-noclean >/dev/null 2>&1 &
292 fi
293 GENLOAD=1;;
294
mreed1091696422006-05-03 19:07:22 +0000295 e) # Print out the version of LTP
296 version_of_ltp
yaberauneya6d41cc32010-01-28 16:24:16 +0000297 ;;
plars4a120e82004-09-02 18:56:06 +0000298 f) # Execute user defined set of testcases.
subrata_modakbc833d32007-07-25 10:12:02 +0000299 # Can be more then one file, just separate it with ',', like:
300 # -f nfs,commands,/tmp/testfile
301 CMDFILES=$OPTARG;;
yaberauneya6d41cc32010-01-28 16:24:16 +0000302 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;;
subrata_modake47fb352007-11-25 17:03:49 +0000314 g) HTMLFILE_NAME="$OPTARG"
315 case $OPTARG in
316 /*)
317 HTMLFILE="$OPTARG";;
318 *)
subrata_modakd48c4d02008-01-23 12:59:40 +0000319 HTMLFILE="$LTPROOT/output/$OPTARG";;
320 esac
Chris Dearman37550cf2012-10-17 19:54:01 -0700321 ALT_DIR_OUT=1
subrata_modakd48c4d02008-01-23 12:59:40 +0000322 ALT_HTML_OUT=1;;
plars4a120e82004-09-02 18:56:06 +0000323 h) usage;;
Chris Dearman37550cf2012-10-17 19:54:01 -0700324
subrata_modake099b2a2007-10-29 12:22:01 +0000325 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
yaberauneya6d41cc32010-01-28 16:24:16 +0000332 $LTPROOT/testcases/bin/genload --io $NUM_PROCS >/dev/null 2>&1 &
plars4a120e82004-09-02 18:56:06 +0000333 GENLOAD=1 ;;
Chris Dearman37550cf2012-10-17 19:54:01 -0700334
335 K)
Subrata Modakbd9d4402010-05-12 22:03:21 +0530336 case $OPTARG in
337 /*)
Cyril Hrubisc381f582013-08-08 18:19:35 +0200338 DMESG_DIR="$OPTARG-dmesg-output-`echo $$-``date +%X | tr -d ' '`";;
Subrata Modakbd9d4402010-05-12 22:03:21 +0530339 *)
Cyril Hrubisc381f582013-08-08 18:19:35 +0200340 DMESG_DIR="$LTPROOT/output/$OPTARG-dmesg-output-`echo $$-``date +%X | tr -d ' '`";;
Subrata Modakbd9d4402010-05-12 22:03:21 +0530341 esac
342 mkdir -p $DMESG_DIR
343 ALT_DMESG_OUT=1;;
Chris Dearman37550cf2012-10-17 19:54:01 -0700344 l)
subrata_modak6838ec32007-09-14 10:10:12 +0000345 LOGFILE_NAME="$OPTARG"
plars4a120e82004-09-02 18:56:06 +0000346 case $OPTARG in
subrata_modak5d7deea2007-09-15 13:51:36 +0000347 /*)
plars4a120e82004-09-02 18:56:06 +0000348 LOGFILE="-l $OPTARG" ;;
Chris Dearman37550cf2012-10-17 19:54:01 -0700349 *)
plars4a120e82004-09-02 18:56:06 +0000350 LOGFILE="-l $LTPROOT/results/$OPTARG"
subrata_modak5d7deea2007-09-15 13:51:36 +0000351 ALT_DIR_RES=1 ;;
plars4a120e82004-09-02 18:56:06 +0000352 esac ;;
Chris Dearman37550cf2012-10-17 19:54:01 -0700353
subrata_modake099b2a2007-10-29 12:22:01 +0000354 m) NUM_PROCS=1; CHUNKS=1; BYTES=$((256 * 1024 * 1024)); HANGUP_FLAG=0
subrata_modak29a96d82008-08-27 13:34:46 +0000355 ARGUMENT_LIST=$OPTARG
Garrett Coopercf86b8b2010-11-16 21:46:41 -0800356 TOTAL_ARGUMENTS=1
357 for ARGUMENT in `echo "$ARGUMENT_LIST" | tr ',' ' '`
subrata_modake099b2a2007-10-29 12:22:01 +0000358 do
359 case $TOTAL_ARGUMENTS in
yaberauneya6d41cc32010-01-28 16:24:16 +0000360 1) NUM_PROCS="$ARGUMENT" ;;
361 2) CHUNKS="$ARGUMENT" ;;
362 3) BYTES="$ARGUMENT" ;;
363 4) HANGUP_FLAG="$ARGUMENT" ;;
subrata_modake099b2a2007-10-29 12:22:01 +0000364 esac
yaberauneya6d41cc32010-01-28 16:24:16 +0000365 TOTAL_ARGUMENTS=`expr $TOTAL_ARGUMENTS + 1`
subrata_modake099b2a2007-10-29 12:22:01 +0000366 done
367 # just to get the default values if the user passed 0
yaberauneya6d41cc32010-01-28 16:24:16 +0000368 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
subrata_modake099b2a2007-10-29 12:22:01 +0000380 if [ "$HANGUP_FLAG" -eq 1 ]; then
381 # Hang in a Sleep loop after memory allocated
yaberauneya6d41cc32010-01-28 16:24:16 +0000382 $LTPROOT/testcases/bin/genload --vm $NUM_PROCS --vm-chunks \
subrata_modake099b2a2007-10-29 12:22:01 +0000383 $CHUNKS --vm-bytes $BYTES --vm-hang >/dev/null 2>&1 &
384 else
385 # Otherwise Do not Hangup
yaberauneya6d41cc32010-01-28 16:24:16 +0000386 $LTPROOT/testcases/bin/genload --vm $NUM_PROCS --vm-chunks \
subrata_modake099b2a2007-10-29 12:22:01 +0000387 $CHUNKS --vm-bytes $BYTES >/dev/null 2>&1 &
388 fi
plars4a120e82004-09-02 18:56:06 +0000389 GENLOAD=1;;
yaberauneya6d41cc32010-01-28 16:24:16 +0000390 M)
391 VALGRIND_CHECK=1
392 VALGRIND_CHECK_TYPE="$OPTARG";;
subrata_modak9c7072a2009-08-26 07:00:25 +0000393
plars4a120e82004-09-02 18:56:06 +0000394 N) RUN_NETEST=1;;
Chris Dearman37550cf2012-10-17 19:54:01 -0700395
396 n)
yaberauneya6d41cc32010-01-28 16:24:16 +0000397 $LTPROOT/testcases/bin/netpipe.sh
plars4a120e82004-09-02 18:56:06 +0000398 NETPIPE=1;;
Chris Dearman37550cf2012-10-17 19:54:01 -0700399
subrata_modak6838ec32007-09-14 10:10:12 +0000400 o) OUTPUTFILE_NAME="$OPTARG"
subrata_modak6838ec32007-09-14 10:10:12 +0000401 case $OPTARG in
402 /*)
403 OUTPUTFILE="-o $OPTARG";;
404 *)
405 OUTPUTFILE="-o $LTPROOT/output/$OPTARG"
subrata_modak5d7deea2007-09-15 13:51:36 +0000406 ALT_DIR_OUT=1 ;;
yaberauneya6d41cc32010-01-28 16:24:16 +0000407 esac ;;
Chris Dearman37550cf2012-10-17 19:54:01 -0700408
plars4a120e82004-09-02 18:56:06 +0000409 p) PRETTY_PRT=" -p ";;
Chris Dearman37550cf2012-10-17 19:54:01 -0700410
yaberauneya6d41cc32010-01-28 16:24:16 +0000411 q) QUIET_MODE=" -q ";;
Chris Dearman37550cf2012-10-17 19:54:01 -0700412
plars4a120e82004-09-02 18:56:06 +0000413 r) LTPROOT=$OPTARG;;
Chris Dearman37550cf2012-10-17 19:54:01 -0700414
Zorro Lang8aa21022016-09-26 21:19:49 +0800415 R) RANDOMRUN=1;;
416
robbiew7d43d772005-02-07 20:07:30 +0000417 s) TAG_RESTRICT_STRING=$OPTARG;;
subrata_modak2f6c9812009-08-14 17:07:48 +0000418
yaberauneya6d41cc32010-01-28 16:24:16 +0000419 S) case $OPTARG in
subrata_modak2f6c9812009-08-14 17:07:48 +0000420 /*)
421 SKIPFILE=$OPTARG;;
422 *)
423 SKIPFILE="$LTPROOT/$OPTARG";;
yaberauneya6d41cc32010-01-28 16:24:16 +0000424 esac ;;
Chris Dearman37550cf2012-10-17 19:54:01 -0700425
426 t) # In case you want to specify the time
427 # to run from the command line
plars4a120e82004-09-02 18:56:06 +0000428 # (2m = two minutes, 2h = two hours, etc)
429 DURATION="-t $OPTARG" ;;
subrata_modak8c138332008-01-28 11:19:32 +0000430
Cyril Hrubis5f795702016-04-26 14:45:57 +0200431 I) # In case you want the testcases to runsequentially RUN_REPEATED times
subrata_modak8c138332008-01-28 11:19:32 +0000432 RUN_REPEATED=$OPTARG;;
433
subrata_modakbc833d32007-07-25 10:12:02 +0000434 w) CMDFILEADDR=$OPTARG;;
Chris Dearman37550cf2012-10-17 19:54:01 -0700435
plars4a120e82004-09-02 18:56:06 +0000436 x) # number of ltp's to run
yaberauneya6d41cc32010-01-28 16:24:16 +0000437 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
Chris Dearman37550cf2012-10-17 19:54:01 -0700443 sleep 10
yaberauneya6d41cc32010-01-28 16:24:16 +0000444 INSTANCES="-x $OPTARG";;
subrata_modakd9fb3862008-12-29 11:25:36 +0000445 b) DEVICE=$OPTARG;;
Xiaoguang Wang5b42a1e2013-12-12 19:10:58 +0800446 B) LTP_DEV_FS_TYPE=$OPTARG;;
447 z) BIG_DEVICE=$OPTARG;;
Xiaoguang Wangcb1a4ae2014-04-15 19:33:21 +0800448 Z) BIG_DEVICE_FS_TYPE=$OPTARG;;
plars4a120e82004-09-02 18:56:06 +0000449 \?) usage;;
450 esac
451 done
subrata_modak43938212008-05-19 08:48:46 +0000452
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
look69f39f52014-04-30 09:55:44 +0800455 LOGFILE_NAME="$DEFAULT_FILE_NAME_GENERATION_TIME"
subrata_modak43938212008-05-19 08:48:46 +0000456 LOGFILE="-l $LTPROOT/results/LTP_RUN_ON-$LOGFILE_NAME.log"
457 ALT_DIR_RES=1
458 PRETTY_PRT=" -p "
459 fi
Chris Dearman37550cf2012-10-17 19:54:01 -0700460
461 ## It would be nice if a Failed File is compulsorily created (gives User better Idea of Tests that failed)
subrata_modak6838ec32007-09-14 10:10:12 +0000462
yaberauneya6d41cc32010-01-28 16:24:16 +0000463 if [ ! "$FAILCMDFILE" ]; then ## User has not mentioned about Failed File name
subrata_modak5d7deea2007-09-15 13:51:36 +0000464 ALT_DIR_OUT=1
yaberauneya6d41cc32010-01-28 16:24:16 +0000465 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
look69f39f52014-04-30 09:55:44 +0800467 FAILED_FILE_NAME="$DEFAULT_FILE_NAME_GENERATION_TIME"
yaberauneya6d41cc32010-01-28 16:24:16 +0000468 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"
subrata_modak6838ec32007-09-14 10:10:12 +0000472 fi
yaberauneya6d41cc32010-01-28 16:24:16 +0000473 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"
subrata_modak6838ec32007-09-14 10:10:12 +0000476 fi
477 fi
subrata_modaka1fd64b2007-04-11 11:24:49 +0000478
Xiaoguang Wang5f71cf92014-09-23 15:59:43 +0800479 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
subrata_modakd48c4d02008-01-23 12:59:40 +0000495 if [ "$ALT_HTML_OUT" -eq 1 ] ; then ## User wants the HTML version of the output
yaberauneya6d41cc32010-01-28 16:24:16 +0000496 QUIET_MODE="" ## Suppressing this guy as it will prevent generation of proper output
subrata_modakd48c4d02008-01-23 12:59:40 +0000497 ## which the HTML parser will require
yaberauneya6d41cc32010-01-28 16:24:16 +0000498 if [ ! "$OUTPUTFILE" ]; then ## User has not mentioned about the Outputfile name, then we need to definitely generate one
look69f39f52014-04-30 09:55:44 +0800499 OUTPUTFILE_NAME="$DEFAULT_FILE_NAME_GENERATION_TIME"
subrata_modake47fb352007-11-25 17:03:49 +0000500 OUTPUTFILE="-o $LTPROOT/output/LTP_RUN_ON-$OUTPUTFILE_NAME.output"
subrata_modak08dde6f2007-11-28 11:02:51 +0000501 ALT_DIR_OUT=1
yaberauneya6d41cc32010-01-28 16:24:16 +0000502 if [ ! "$HTMLFILE" ] ; then ## User has not mentioned HTML File name, We need to create one
503 HTMLFILE_NAME=`basename $OUTPUTFILE_NAME`
subrata_modake47fb352007-11-25 17:03:49 +0000504 HTMLFILE="$LTPROOT/output/$HTMLFILE_NAME.html"
505 fi
506 fi
507 fi
508
subrata_modak5d7deea2007-09-15 13:51:36 +0000509 # If we need, create the output directory
yaberauneya6d41cc32010-01-28 16:24:16 +0000510 [ "$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 }
subrata_modak5d7deea2007-09-15 13:51:36 +0000522 # If we need, create the results directory
yaberauneya6d41cc32010-01-28 16:24:16 +0000523 [ "$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 }
subrata_modak5d7deea2007-09-15 13:51:36 +0000535
Chris Dearman37550cf2012-10-17 19:54:01 -0700536 # Added -m 777 for tests that call tst_tmpdir() and try to
subrata_modaka1fd64b2007-04-11 11:24:49 +0000537 # write to it as user nobody
yaberauneya6d41cc32010-01-28 16:24:16 +0000538 mkdir -m 777 -p $TMPBASE || \
539 {
540 echo "FATAL: Unable to make temporary directory $TMPBASE"
541 exit 1
542 }
subrata_modak5ee3e892008-10-21 13:17:56 +0000543 # use mktemp to create "safe" temporary directories
544 export TMPTEMPLATE="${TMPBASE}/ltp-XXXXXXXXXX"
yaberauneya6d41cc32010-01-28 16:24:16 +0000545 TMP=`mktemp -d $TMPTEMPLATE` || \
546 {
547 echo "FATAL: Unable to make temporary directory: $TMP"
548 exit 1
549 }
550 export TMP
subrata_modak225cfbe2009-06-23 14:01:26 +0000551 # To be invoked by tst_tmpdir()
552 # write to it as user nobody
553 export TMPDIR=$TMP
subrata_modak6edfbda2008-10-17 12:25:48 +0000554
yaberauneya6d41cc32010-01-28 16:24:16 +0000555 chmod 777 $TMP || \
556 {
557 echo "unable to chmod 777 $TMP ... aborting"
Garrett Coopercf86b8b2010-11-16 21:46:41 -0800558 exit 1
yaberauneya6d41cc32010-01-28 16:24:16 +0000559 }
Chris Dearman37550cf2012-10-17 19:54:01 -0700560
yaberauneya6d41cc32010-01-28 16:24:16 +0000561 cd $TMP || \
562 {
563 echo "could not cd ${TMP} ... exiting"
564 exit 1
565 }
Chris Dearman37550cf2012-10-17 19:54:01 -0700566
Garrett Coopercf86b8b2010-11-16 21:46:41 -0800567 [ -n "$INSTANCES" ] && \
yaberauneya6d41cc32010-01-28 16:24:16 +0000568 {
Garrett Coopercf86b8b2010-11-16 21:46:41 -0800569 INSTANCES="$INSTANCES -O ${TMP}"
yaberauneya6d41cc32010-01-28 16:24:16 +0000570 }
Chris Dearman37550cf2012-10-17 19:54:01 -0700571
yaberauneya6d41cc32010-01-28 16:24:16 +0000572 [ "$RUN_NETEST" -eq 1 ] && \
573 {
574 [ -z "$RHOST" ] || [ -z "$PASSWD" ] && \
575 {
576 [ -z "$RHOST" ] && \
577 {
Anders Roxell4691f012013-09-03 09:42:35 +0200578 printf "INFO: Enter RHOST = 'name of the remote host machine'"
579 printf "\n-> "
plars4a120e82004-09-02 18:56:06 +0000580 read RHOST
yaberauneya6d41cc32010-01-28 16:24:16 +0000581 }
plars4a120e82004-09-02 18:56:06 +0000582
yaberauneya6d41cc32010-01-28 16:24:16 +0000583 [ -z "$PASSWD" ] && \
584 {
Anders Roxell4691f012013-09-03 09:42:35 +0200585 printf "\nINFO: "
586 printf "Enter PASSWD = 'root passwd of the remote host machine'"
587 printf "\n-> "
plars4a120e82004-09-02 18:56:06 +0000588 read PASSWD
yaberauneya6d41cc32010-01-28 16:24:16 +0000589 }
plars4a120e82004-09-02 18:56:06 +0000590 export RHOST=$RHOST
591 export PASSWD=$PASSWD
yaberauneya6d41cc32010-01-28 16:24:16 +0000592 echo "WARNING: security of $RHOST may be compromised"
593 }
594 }
Chris Dearman37550cf2012-10-17 19:54:01 -0700595
plars4a120e82004-09-02 18:56:06 +0000596 # If user does not provide a command file select a default set of testcases
597 # to execute.
yaberauneya6d41cc32010-01-28 16:24:16 +0000598 if [ -z "$CMDFILES" ] && [ -z "$CMDFILEADDR" ]
599 then
600 cat <<-EOF >&1
plars4a120e82004-09-02 18:56:06 +0000601
Garrett Coopercf86b8b2010-11-16 21:46:41 -0800602 INFO: no command files were provided. Will execute the following
603 runtest scenario files:
Garrett Cooper66d67b52010-11-16 22:42:48 -0800604
605`cat $LTPROOT/scenario_groups/default | tr '\012' ' '`
Chris Dearman37550cf2012-10-17 19:54:01 -0700606
yaberauneya6d41cc32010-01-28 16:24:16 +0000607 EOF
plars4a120e82004-09-02 18:56:06 +0000608
Garrett Cooper89fde872010-11-16 22:38:08 -0800609 SCENARIO_LISTS="$LTPROOT/scenario_groups/default"
Garrett Coopercf86b8b2010-11-16 21:46:41 -0800610 if [ "$RUN_NETEST" -eq 1 ]; then
Garrett Cooper89fde872010-11-16 22:38:08 -0800611 SCENARIO_LISTS="$SCENARIO_LISTS $LTPROOT/scenario_groups/network"
Garrett Coopercf86b8b2010-11-16 21:46:41 -0800612 fi
plars4a120e82004-09-02 18:56:06 +0000613
Garrett Coopercf86b8b2010-11-16 21:46:41 -0800614 # 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.$$
Garrett Cooper66d67b52010-11-16 22:42:48 -0800619 (cat $SCENARIO_LISTS && touch "$cat_ok_sentinel") | \
Garrett Coopercf86b8b2010-11-16 21:46:41 -0800620 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
subrata_modakbc833d32007-07-25 10:12:02 +0000643 fi
644
yaberauneya6d41cc32010-01-28 16:24:16 +0000645 [ -n "$CMDFILES" ] && \
646 {
Garrett Coopercf86b8b2010-11-16 21:46:41 -0800647 for scenfile in `echo "$CMDFILES" | tr ',' ' '`
yaberauneya6d41cc32010-01-28 16:24:16 +0000648 do
Garrett Coopercf86b8b2010-11-16 21:46:41 -0800649 [ -f "$scenfile" ] || scenfile="$LTPROOT/runtest/$scenfile"
650 cat "$scenfile" >> ${TMP}/alltests || \
yaberauneya6d41cc32010-01-28 16:24:16 +0000651 {
652 echo "FATAL: unable to create command file"
Garrett Coopercf86b8b2010-11-16 21:46:41 -0800653 rm -Rf "$TMP"
yaberauneya6d41cc32010-01-28 16:24:16 +0000654 exit 1
655 }
plars4a120e82004-09-02 18:56:06 +0000656 done
yaberauneya6d41cc32010-01-28 16:24:16 +0000657 }
Chris Dearman37550cf2012-10-17 19:54:01 -0700658
yaberauneya6d41cc32010-01-28 16:24:16 +0000659 [ -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
yaberauneyad8f1f5d2010-01-28 15:46:58 +0000665 fi
yaberauneya6d41cc32010-01-28 16:24:16 +0000666 cat "${TMP}/wgetcmdfile" >> ${TMP}/alltests || \
667 {
668 echo "FATAL: unable to create command file"
669 exit 1
670 }
671 }
yaberauneyad8f1f5d2010-01-28 15:46:58 +0000672
plars4a120e82004-09-02 18:56:06 +0000673 # The fsx-linux tests use the SCRATCHDEV environment variable as a location
Chris Dearman37550cf2012-10-17 19:54:01 -0700674 # that can be reformatted and run on. Set SCRATCHDEV if you want to run
plars4a120e82004-09-02 18:56:06 +0000675 # these tests. As a safeguard, this is disabled.
676 unset SCRATCHDEV
yaberauneya6d41cc32010-01-28 16:24:16 +0000677 [ -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 }
subrata_modakbc833d32007-07-25 10:12:02 +0000685
686 # If enabled, execute only test cases that match the PATTERN
yaberauneya6d41cc32010-01-28 16:24:16 +0000687 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
subrata_modakbc833d32007-07-25 10:12:02 +0000691 fi
subrata_modak2f6c9812009-08-14 17:07:48 +0000692
693 # Blacklist or skip tests if a SKIPFILE was specified with -S
yaberauneya6d41cc32010-01-28 16:24:16 +0000694 if [ -n "$SKIPFILE" ]
695 then
subrata_modak2f6c9812009-08-14 17:07:48 +0000696 for file in $( cat $SKIPFILE ); do
Andrew Chen410c6952011-06-30 14:19:45 +0800697 sed -i "/^$file[ \t]/d" ${TMP}/alltests
subrata_modak2f6c9812009-08-14 17:07:48 +0000698 done
699 fi
Chris Dearman37550cf2012-10-17 19:54:01 -0700700
plars4a120e82004-09-02 18:56:06 +0000701 # check for required users and groups
Cyril Hrubisb88fa5b2013-06-25 15:50:08 +0200702 ${LTPROOT}/IDcheck.sh || \
yaberauneya6d41cc32010-01-28 16:24:16 +0000703 {
704 echo "WARNING: required users and groups not present"
705 echo "WARNING: some test cases may fail"
706 }
Chris Dearman37550cf2012-10-17 19:54:01 -0700707
plars4a120e82004-09-02 18:56:06 +0000708 # display versions of installed software
yaberauneya6d41cc32010-01-28 16:24:16 +0000709 [ -z "$QUIET_MODE" ] && \
Chris Dearman37550cf2012-10-17 19:54:01 -0700710 {
yaberauneya6d41cc32010-01-28 16:24:16 +0000711 ${LTPROOT}/ver_linux || \
712 {
713 echo "WARNING: unable to display versions of software installed"
714 exit 1
715 }
716 }
717
Harald Weppner8bdf0a02014-03-03 14:10:07 -0800718 set_block_device
subrata_modakd9fb3862008-12-29 11:25:36 +0000719
Xiaoguang Wang5b42a1e2013-12-12 19:10:58 +0800720 # 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
Xiaoguang Wangcb1a4ae2014-04-15 19:33:21 +0800727 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
subrata_modakd9fb3862008-12-29 11:25:36 +0000733 fi
734
subrata_modak8c138332008-01-28 11:19:32 +0000735 if [ $RUN_REPEATED -gt 1 ]; then # You need to specify at least more than 1 sequential run, else it runs default
yaberauneya6d41cc32010-01-28 16:24:16 +0000736 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
subrata_modak8c138332008-01-28 11:19:32 +0000745 fi
746
Zorro Lang8aa21022016-09-26 21:19:49 +0800747 if [ "$RANDOMRUN" != "0" ]; then
748 sort -R ${TMP}/alltests -o ${TMP}/alltests
749 fi
750
yaberauneya6d41cc32010-01-28 16:24:16 +0000751 [ ! -z "$QUIET_MODE" ] && { echo "INFO: Test start time: $(date)" ; }
752 PAN_COMMAND="${LTPROOT}/bin/ltp-pan $QUIET_MODE -e -S $INSTANCES $DURATION -a $$ \
Xiaoguang Wang5f71cf92014-09-23 15:59:43 +0800753 -n $$ $PRETTY_PRT -f ${TMP}/alltests $LOGFILE $OUTPUTFILE $FAILCMDFILE $TCONFCMDFILE"
yaberauneya6d41cc32010-01-28 16:24:16 +0000754 echo "COMMAND: $PAN_COMMAND"
755 if [ ! -z "$TAG_RESTRICT_STRING" ] ; then
756 echo "INFO: Restricted to $TAG_RESTRICT_STRING"
robbiew7d43d772005-02-07 20:07:30 +0000757 fi
yaberauneya6d41cc32010-01-28 16:24:16 +0000758 #$PAN_COMMAND #Duplicated code here, because otherwise if we fail, only "PAN_COMMAND" gets output
Chris Dearman37550cf2012-10-17 19:54:01 -0700759
subrata_modak43938212008-05-19 08:48:46 +0000760 ## Display the Output/Log/Failed/HTML file names here
Anders Roxell4691f012013-09-03 09:42:35 +0200761 printf "LOG File: "
yaberauneya6d41cc32010-01-28 16:24:16 +0000762 echo $LOGFILE | cut -b4-
subrata_modak43938212008-05-19 08:48:46 +0000763
yaberauneya6d41cc32010-01-28 16:24:16 +0000764 if [ "$OUTPUTFILE" ]; then
Anders Roxell4691f012013-09-03 09:42:35 +0200765 printf "OUTPUT File: "
yaberauneya6d41cc32010-01-28 16:24:16 +0000766 echo $OUTPUTFILE | cut -b4-
subrata_modak43938212008-05-19 08:48:46 +0000767 fi
768
Anders Roxell4691f012013-09-03 09:42:35 +0200769 printf "FAILED COMMAND File: "
yaberauneya6d41cc32010-01-28 16:24:16 +0000770 echo $FAILCMDFILE | cut -b4-
771
Xiaoguang Wang5f71cf92014-09-23 15:59:43 +0800772 printf "TCONF COMMAND File: "
773 echo $TCONFCMDFILE | cut -b4-
774
yaberauneya6d41cc32010-01-28 16:24:16 +0000775 if [ "$HTMLFILE" ]; then
776 echo "HTML File: $HTMLFILE"
777 fi
778
779 echo "Running tests......."
subrata_modake47fb352007-11-25 17:03:49 +0000780 test_start_time=$(date)
subrata_modak724098e2009-03-19 08:49:18 +0000781
yaberauneya6d41cc32010-01-28 16:24:16 +0000782 # 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
Garrett Coopercb66da52012-04-03 22:09:42 -0700786 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
yaberauneya6d41cc32010-01-28 16:24:16 +0000800 #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...
Garrett Coopercb66da52012-04-03 22:09:42 -0700804 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
yaberauneya6d41cc32010-01-28 16:24:16 +0000808 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
Garrett Cooper3920fd12012-04-03 19:47:16 -0700822 [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
yaberauneya6d41cc32010-01-28 16:24:16 +0000827 cp ${TMP}/alltests.tmp ${TMP}/alltests
Garrett Cooper3920fd12012-04-03 19:47:16 -0700828 rm -rf ${TMP}/alltests.tmp
829 ;;
830 *)
831 echo "Invalid Memory Check Type, or, Valgrind is not available"
832 ;;
yaberauneya6d41cc32010-01-28 16:24:16 +0000833 esac
834 fi
835 fi
836
Subrata Modakbd9d4402010-05-12 22:03:21 +0530837 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...
Garrett Cooper66030122012-04-03 20:22:14 -0700840 awk -v DMESG_DIR=$DMESG_DIR \
841 -f ${LTPROOT}/bin/create_dmesg_entries_for_each_test.awk \
842 ${TMP}/alltests > ${TMP}/alltests.tmp
Subrata Modakbd9d4402010-05-12 22:03:21 +0530843 cp ${TMP}/alltests.tmp ${TMP}/alltests
844 rm -rf ${TMP}/alltests.tmp
845 fi
subrata_modak724098e2009-03-19 08:49:18 +0000846 # Some tests need to run inside the "bin" directory.
847 cd "${LTPROOT}/testcases/bin"
Xiaoguang Wang5f71cf92014-09-23 15:59:43 +0800848 "${LTPROOT}/bin/ltp-pan" $QUIET_MODE -e -S $INSTANCES $DURATION -a $$ -n $$ $PRETTY_PRT -f ${TMP}/alltests $LOGFILE $OUTPUTFILE $FAILCMDFILE $TCONFCMDFILE
Chris Dearman37550cf2012-10-17 19:54:01 -0700849
plars4a120e82004-09-02 18:56:06 +0000850 if [ $? -eq 0 ]; then
yaberauneya6d41cc32010-01-28 16:24:16 +0000851 echo "INFO: ltp-pan reported all tests PASS"
852 VALUE=0
853 export LTP_EXIT_VALUE=0;
plars4a120e82004-09-02 18:56:06 +0000854 else
yaberauneya6d41cc32010-01-28 16:24:16 +0000855 echo "INFO: ltp-pan reported some tests FAIL"
856 VALUE=1
857 export LTP_EXIT_VALUE=1;
plars4a120e82004-09-02 18:56:06 +0000858 fi
subrata_modak724098e2009-03-19 08:49:18 +0000859 cd ..
yaberauneya6d41cc32010-01-28 16:24:16 +0000860 echo "LTP Version: $version_date"
mreed1091696422006-05-03 19:07:22 +0000861
Subrata Modake3bc3752010-07-03 23:32:27 +0530862 # $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
subrata_modake47fb352007-11-25 17:03:49 +0000877 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
Jungsu Sohn0b08cf12016-10-26 15:29:41 -0700879 export TEST_START_TIME="$test_start_time"
880 export TEST_END_TIME="$(date)"
yaberauneya6d41cc32010-01-28 16:24:16 +0000881 OUTPUT_DIRECTORY=`echo $OUTPUTFILE | cut -c4-`
subrata_modake47fb352007-11-25 17:03:49 +0000882 LOGS_DIRECTORY="$LTPROOT/results"
883 export TEST_OUTPUT_DIRECTORY="$LTPROOT/output"
884 export TEST_LOGS_DIRECTORY=$LOGS_DIRECTORY
yaberauneya6d41cc32010-01-28 16:24:16 +0000885 echo "Generating HTML Output.....!!"
Chris Dearman37550cf2012-10-17 19:54:01 -0700886 ( perl $LTPROOT/bin/genhtml.pl $LTPROOT/bin/html_report_header.txt test_start test_end test_output execution_status $OUTPUT_DIRECTORY > $HTMLFILE; )
yaberauneya6d41cc32010-01-28 16:24:16 +0000887 echo "Generated HTML Output.....!!"
888 echo "Location: $HTMLFILE";
889
subrata_modake47fb352007-11-25 17:03:49 +0000890 fi
Chris Dearman37550cf2012-10-17 19:54:01 -0700891
yaberauneya6d41cc32010-01-28 16:24:16 +0000892 if [ "$ALT_EMAIL_OUT" -eq 1 ] ; then ## User wants reports to be e-mailed
Chris Dearman37550cf2012-10-17 19:54:01 -0700893 if [ [ ! "$HTMLFILE_NAME" ] -o [ ! "$OUTPUTFILE_NAME" ] -o [ ! "$LOGFILE_NAME" ] ] ; then
yaberauneya6d41cc32010-01-28 16:24:16 +0000894 ##User does not have output/logs/html-output, nothing to be mailed in this situation
895 echo "Nothing to be mailed here...."
subrata_modak08dde6f2007-11-28 11:02:51 +0000896 else
subrata_modak43938212008-05-19 08:48:46 +0000897 TAR_FILE_NAME=LTP_RUN_$version_date$DEFAULT_FILE_NAME_GENERATION_TIME.tar
yaberauneya6d41cc32010-01-28 16:24:16 +0000898 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
subrata_modak08dde6f2007-11-28 11:02:51 +0000903 fi
yaberauneya6d41cc32010-01-28 16:24:16 +0000904 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
subrata_modak08dde6f2007-11-28 11:02:51 +0000909 fi
yaberauneya6d41cc32010-01-28 16:24:16 +0000910 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"
subrata_modak08dde6f2007-11-28 11:02:51 +0000943 else
yaberauneya6d41cc32010-01-28 16:24:16 +0000944 echo "Cannot Gunzip TAR File: ./$TAR_FILE_NAME"
subrata_modak08dde6f2007-11-28 11:02:51 +0000945 fi
yaberauneya6d41cc32010-01-28 16:24:16 +0000946 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
Chris Dearman37550cf2012-10-17 19:54:01 -0700962 fi
subrata_modak08dde6f2007-11-28 11:02:51 +0000963 fi
yaberauneya6d41cc32010-01-28 16:24:16 +0000964 fi
Chris Dearman37550cf2012-10-17 19:54:01 -0700965
yaberauneya6d41cc32010-01-28 16:24:16 +0000966 [ ! -z "$QUIET_MODE" ] && { echo "INFO: Test end time: $(date)" ; }
Chris Dearman37550cf2012-10-17 19:54:01 -0700967
yaberauneya6d41cc32010-01-28 16:24:16 +0000968 [ "$GENLOAD" -eq 1 ] && { killall -9 genload >/dev/null 2>&1; }
969 [ "$NETPIPE" -eq 1 ] && { killall -9 NPtcp >/dev/null 2>&1; }
Chris Dearman37550cf2012-10-17 19:54:01 -0700970
yaberauneya6d41cc32010-01-28 16:24:16 +0000971 [ "$ALT_DIR_OUT" -eq 1 ] || [ "$ALT_DIR_RES" -eq 1 ] && \
972 {
973 cat <<-EOF >&1
Chris Dearman37550cf2012-10-17 19:54:01 -0700974
Markos Chandras11328662012-03-06 10:28:59 +0000975 ###############################################################
Chris Dearman37550cf2012-10-17 19:54:01 -0700976
Markos Chandras11328662012-03-06 10:28:59 +0000977 Done executing testcases.
mreed1091696422006-05-03 19:07:22 +0000978 LTP Version: $version_date
Markos Chandras11328662012-03-06 10:28:59 +0000979 ###############################################################
Chris Dearman37550cf2012-10-17 19:54:01 -0700980
yaberauneya6d41cc32010-01-28 16:24:16 +0000981 EOF
982 }
983 exit $VALUE
plars4a120e82004-09-02 18:56:06 +0000984}
985
Ramesh YR0a78f232013-04-16 09:31:28 +0800986create_block()
987{
DAN LI189c4412013-09-10 10:53:34 +0800988 #create a block device
Li Wang0a1dc752016-08-18 21:09:23 +0800989 dd if=/dev/zero of=${TMP}/test.img bs=1024 count=153600 >/dev/null 2>&1
Ramesh YR0a78f232013-04-16 09:31:28 +0800990 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.
Cyril Hrubisb88fa5b2013-06-25 15:50:08 +02001001 losetup $LOOP_DEV ${TMP}/test.img
Ramesh YR0a78f232013-04-16 09:31:28 +08001002 if [ $? -ne 0 ]; then
1003 echo "losetup failed to create block device"
1004 return 1
Ramesh YR0a78f232013-04-16 09:31:28 +08001005 fi
Cyril Hrubisc381f582013-08-08 18:19:35 +02001006 DEVICE=$LOOP_DEV
1007 return 0
Ramesh YR0a78f232013-04-16 09:31:28 +08001008 fi
1009 fi
1010}
1011
Harald Weppner8bdf0a02014-03-03 14:10:07 -08001012set_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
Jan Stancek977bdf22015-01-20 14:35:49 +01001022 export LTP_DEV=$DEVICE
Harald Weppner8bdf0a02014-03-03 14:10:07 -08001023 fi
1024 else
Jan Stancek977bdf22015-01-20 14:35:49 +01001025 export LTP_DEV=$DEVICE
Harald Weppner8bdf0a02014-03-03 14:10:07 -08001026 fi
1027}
1028
plars4a120e82004-09-02 18:56:06 +00001029cleanup()
1030{
Ramesh YR0a78f232013-04-16 09:31:28 +08001031 [ "$LOOP_DEV" ] && losetup -d $LOOP_DEV
yaberauneya6d41cc32010-01-28 16:24:16 +00001032 rm -rf ${TMP}
plars4a120e82004-09-02 18:56:06 +00001033}
1034
Harald Weppner8bdf0a02014-03-03 14:10:07 -08001035
1036LTP_SCRIPT="$(basename $0)"
1037
Cyril Hrubise8776ea2014-03-24 13:32:01 +01001038if [ "$LTP_SCRIPT" = "runltp" ]; then
Harald Weppner8bdf0a02014-03-03 14:10:07 -08001039 trap "cleanup" 0
1040 setup
1041 main "$@"
1042fi