blob: 29f43a02702c6e6a86873a08a575ac6ce4b28662 [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.
subrata_modaka1fd64b2007-04-11 11:24:49 +0000156 -s PATTERN Only run test cases which match PATTERN.
subrata_modak2f6c9812009-08-14 17:07:48 +0000157 -S SKIPFILE Skip tests specified in SKIPFILE
plars4a120e82004-09-02 18:56:06 +0000158 -t DURATION Execute the testsuite for given duration. Examples:
159 -t 60s = 60 seconds
160 -t 45m = 45 minutes
161 -t 24h = 24 hours
162 -t 2d = 2 days
Cyril Hrubis5f795702016-04-26 14:45:57 +0200163 -I ITERATIONS Execute the testsuite ITERATIONS times.
subrata_modakbc833d32007-07-25 10:12:02 +0000164 -w CMDFILEADDR Uses wget to get the user's list of testcases.
plars4a120e82004-09-02 18:56:06 +0000165 -x INSTANCES Run multiple instances of this testsuite.
subrata_modakd9fb3862008-12-29 11:25:36 +0000166 -b DEVICE Some tests require an unmounted block device
167 to run correctly.
Xiaoguang Wang5b42a1e2013-12-12 19:10:58 +0800168 -B LTP_DEV_FS_TYPE The file system of test block devices.
169 -z BIG_DEVICE Some tests require a big unmounted block device
170 to run correctly.
171 -Z LTP_BIG_DEV_FS_TYPE The file system of the big device
172
subrata_modakd9fb3862008-12-29 11:25:36 +0000173
plars4a120e82004-09-02 18:56:06 +0000174
Garrett Cooperf95875a2010-03-05 02:44:39 -0800175 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 +0000176
plars4a120e82004-09-02 18:56:06 +0000177
yaberauneya6d41cc32010-01-28 16:24:16 +0000178 EOF
179exit 0
plars4a120e82004-09-02 18:56:06 +0000180}
181
plars4a120e82004-09-02 18:56:06 +0000182main()
183{
subrata_modakbc833d32007-07-25 10:12:02 +0000184 local CMDFILES=""
plars4a120e82004-09-02 18:56:06 +0000185 local PRETTY_PRT=""
subrata_modak5d7deea2007-09-15 13:51:36 +0000186 local ALT_DIR_OUT=0
187 local ALT_DIR_RES=0
subrata_modake47fb352007-11-25 17:03:49 +0000188 local ALT_HTML_OUT=0
subrata_modak08dde6f2007-11-28 11:02:51 +0000189 local ALT_EMAIL_OUT=0
Subrata Modakbd9d4402010-05-12 22:03:21 +0530190 local ALT_DMESG_OUT=0
plars4a120e82004-09-02 18:56:06 +0000191 local RUN_NETEST=0
subrata_modak8c138332008-01-28 11:19:32 +0000192 local RUN_REPEATED=0
yaberauneya6d41cc32010-01-28 16:24:16 +0000193 local QUIET_MODE=""
plars4a120e82004-09-02 18:56:06 +0000194 local NETPIPE=0
195 local GENLOAD=0
196 local MEMSIZE=0
197 local DURATION=""
subrata_modakbc833d32007-07-25 10:12:02 +0000198 local CMDFILEADDR=""
subrata_modak43938212008-05-19 08:48:46 +0000199 local FAILCMDFILE=""
Xiaoguang Wang5f71cf92014-09-23 15:59:43 +0800200 local TCONFCMDFILE=""
yaberauneyaef772532009-10-09 17:55:43 +0000201 local INJECT_KERNEL_FAULT=""
202 local INJECT_KERNEL_FAULT_PERCENTAGE=""
203 local INJECT_FAULT_LOOPS_PER_TEST=""
204 local VALGRIND_CHECK=""
205 local VALGRIND_CHECK_TYPE=""
subrata_modake47fb352007-11-25 17:03:49 +0000206 local LOGFILE_NAME=""
plars4a120e82004-09-02 18:56:06 +0000207 local LOGFILE=""
subrata_modake47fb352007-11-25 17:03:49 +0000208 local OUTPUTFILE_NAME=""
209 local OUTPUTFILE=""
210 local HTMLFILE_NAME=""
211 local HTMLFILE=""
Subrata Modakbd9d4402010-05-12 22:03:21 +0530212 local DMESG_DIR=""
subrata_modak08dde6f2007-11-28 11:02:51 +0000213 local EMAIL_TO=""
robbiew7d43d772005-02-07 20:07:30 +0000214 local TAG_RESTRICT_STRING=""
215 local PAN_COMMAND=""
look69f39f52014-04-30 09:55:44 +0800216 local DEFAULT_FILE_NAME_GENERATION_TIME=`date +"%Y_%m_%d-%Hh_%Mm_%Ss"`
Garrett Coopercf86b8b2010-11-16 21:46:41 -0800217 local scenfile=
218
yaberauneyaef772532009-10-09 17:55:43 +0000219 version_date=$(cat "$LTPROOT/Version")
plars4a120e82004-09-02 18:56:06 +0000220
Cyril Hrubis5f795702016-04-26 14:45:57 +0200221 while getopts a:c:C:T:d:D:f:F:ehi:I:K:g:l:m:M:Nno:pqr:s:S:t:T:w:x:b:B:z:Z: arg
yaberauneya6d41cc32010-01-28 16:24:16 +0000222 do case $arg in
subrata_modak08dde6f2007-11-28 11:02:51 +0000223 a) EMAIL_TO=$OPTARG
224 ALT_EMAIL_OUT=1;;
Chris Dearman37550cf2012-10-17 19:54:01 -0700225 c)
subrata_modake099b2a2007-10-29 12:22:01 +0000226 NUM_PROCS=$(($OPTARG))
227 if [ "$NUM_PROCS" -eq 0 ]; then
228 # User Did not Define the Value ,or, User Defined Zero,
229 # hence, prevent from creating infinite processes
230 NUM_PROCS=1
231 fi
yaberauneya6d41cc32010-01-28 16:24:16 +0000232 $LTPROOT/testcases/bin/genload --cpu $NUM_PROCS >/dev/null 2>&1 &
plars4a120e82004-09-02 18:56:06 +0000233 GENLOAD=1 ;;
subrata_modakbc833d32007-07-25 10:12:02 +0000234
Chris Dearman37550cf2012-10-17 19:54:01 -0700235 C)
subrata_modak6838ec32007-09-14 10:10:12 +0000236 case $OPTARG in
237 /*)
238 FAILCMDFILE="-C $OPTARG" ;;
Chris Dearman37550cf2012-10-17 19:54:01 -0700239 *)
subrata_modak6838ec32007-09-14 10:10:12 +0000240 FAILCMDFILE="-C $LTPROOT/output/$OPTARG"
subrata_modak5d7deea2007-09-15 13:51:36 +0000241 ALT_DIR_OUT=1 ;;
subrata_modak6838ec32007-09-14 10:10:12 +0000242 esac ;;
Chris Dearman37550cf2012-10-17 19:54:01 -0700243
Xiaoguang Wang5f71cf92014-09-23 15:59:43 +0800244 T)
245 case $OPTARG in
246 /*)
247 TCONFCMDFILE="-T $OPTARG" ;;
248 *)
249 TCONFCMDFILE="-T $LTPROOT/output/$OPTARG"
250 ALT_DIR_OUT=1 ;;
251 esac ;;
252
subrata_modak5ee3e892008-10-21 13:17:56 +0000253 d) # convert the user path to absolute path.
Garrett Cooper5d520f42012-08-07 08:57:31 -0700254 export TMPBASE=$(readlink -f ${OPTARG}) ;;
subrata_modake099b2a2007-10-29 12:22:01 +0000255
256 D) NUM_PROCS=1; NUM_FILES=1; NUM_BYTES=$((1024 * 1024 * 1024)); CLEAN_FLAG=0
subrata_modak548379d2008-08-20 09:15:49 +0000257 ARGUMENT_LIST=$OPTARG
Garrett Coopercf86b8b2010-11-16 21:46:41 -0800258 TOTAL_ARGUMENTS=1
259 for ARGUMENT in `echo "$ARGUMENT_LIST" | tr ',' ' '`
subrata_modake099b2a2007-10-29 12:22:01 +0000260 do
261 case $TOTAL_ARGUMENTS in
yaberauneya6d41cc32010-01-28 16:24:16 +0000262 1) NUM_PROCS="$ARGUMENT" ;;
263 2) NUM_FILES="$ARGUMENT" ;;
264 3) NUM_BYTES="$ARGUMENT" ;;
265 4) CLEAN_FLAG="$ARGUMENT" ;;
subrata_modake099b2a2007-10-29 12:22:01 +0000266 esac
yaberauneya6d41cc32010-01-28 16:24:16 +0000267 TOTAL_ARGUMENTS=`expr $TOTAL_ARGUMENTS + 1`
subrata_modake099b2a2007-10-29 12:22:01 +0000268 done
269 # just to get the default values if the user passed 0
270 if [ "$NUM_PROCS" -eq 0 ]; then
271 NUM_PROCS=1
272 fi
273 if [ "$NUM_FILES" -eq 0 ]; then
274 NUM_FILES=1
275 fi
276 if [ "$NUM_BYTES" -eq 0 ]; then
277 NUM_BYTES=$((1024 * 1024 * 1024))
278 fi
279 if [ "$CLEAN_FLAG" -ne 1 ]; then
280 CLEAN_FLAG=0
281 fi
282 if [ "$CLEAN_FLAG" -eq 1 ]; then
283 # Do not unlink file in this case
yaberauneya6d41cc32010-01-28 16:24:16 +0000284 $LTPROOT/testcases/bin/genload --hdd $NUM_PROCS --hdd-files \
subrata_modake099b2a2007-10-29 12:22:01 +0000285 $NUM_FILES --hdd-bytes $NUM_BYTES >/dev/null 2>&1 &
286 else
287 # Cleanup otherwise
yaberauneya6d41cc32010-01-28 16:24:16 +0000288 $LTPROOT/testcases/bin/genload --hdd $NUM_PROCS --hdd-files \
subrata_modake099b2a2007-10-29 12:22:01 +0000289 $NUM_FILES --hdd-bytes $NUM_BYTES --hdd-noclean >/dev/null 2>&1 &
290 fi
291 GENLOAD=1;;
292
mreed1091696422006-05-03 19:07:22 +0000293 e) # Print out the version of LTP
294 version_of_ltp
yaberauneya6d41cc32010-01-28 16:24:16 +0000295 ;;
plars4a120e82004-09-02 18:56:06 +0000296 f) # Execute user defined set of testcases.
subrata_modakbc833d32007-07-25 10:12:02 +0000297 # Can be more then one file, just separate it with ',', like:
298 # -f nfs,commands,/tmp/testfile
299 CMDFILES=$OPTARG;;
yaberauneya6d41cc32010-01-28 16:24:16 +0000300 F) INJECT_KERNEL_FAULT=1
301 #Seperate out the NO_OF_LOOPS & FAULT_PERCENTAGE
302 INJECT_FAULT_LOOPS_PER_TEST=`echo $OPTARG |cut -d',' -f1 | tr -d '\n' | tr -d ' '`
303 INJECT_KERNEL_FAULT_PERCENTAGE=`echo $OPTARG |cut -d',' -f2 | tr -d '\n' | tr -d ' '`
304 if [ ! $INJECT_FAULT_LOOPS_PER_TEST ]; then
305 echo "Loops not properly defined. Resorting to default 5..."
306 export INJECT_FAULT_LOOPS_PER_TEST=5
307 fi
308 if [ ! $INJECT_KERNEL_FAULT_PERCENTAGE ]; then
309 echo "Fault Persentage not properly defined. Resorting to default 10..."
310 export INJECT_KERNEL_FAULT_PERCENTAGE=10
311 fi;;
subrata_modake47fb352007-11-25 17:03:49 +0000312 g) HTMLFILE_NAME="$OPTARG"
313 case $OPTARG in
314 /*)
315 HTMLFILE="$OPTARG";;
316 *)
subrata_modakd48c4d02008-01-23 12:59:40 +0000317 HTMLFILE="$LTPROOT/output/$OPTARG";;
318 esac
Chris Dearman37550cf2012-10-17 19:54:01 -0700319 ALT_DIR_OUT=1
subrata_modakd48c4d02008-01-23 12:59:40 +0000320 ALT_HTML_OUT=1;;
plars4a120e82004-09-02 18:56:06 +0000321 h) usage;;
Chris Dearman37550cf2012-10-17 19:54:01 -0700322
subrata_modake099b2a2007-10-29 12:22:01 +0000323 i)
324 NUM_PROCS=$(($OPTARG))
325 if [ "$NUM_PROCS" -eq 0 ]; then
326 # User Did not Define the Value ,or, User Defined Zero,
327 # hence, prevent from creating infinite processes
328 NUM_PROCS=1
329 fi
yaberauneya6d41cc32010-01-28 16:24:16 +0000330 $LTPROOT/testcases/bin/genload --io $NUM_PROCS >/dev/null 2>&1 &
plars4a120e82004-09-02 18:56:06 +0000331 GENLOAD=1 ;;
Chris Dearman37550cf2012-10-17 19:54:01 -0700332
333 K)
Subrata Modakbd9d4402010-05-12 22:03:21 +0530334 case $OPTARG in
335 /*)
Cyril Hrubisc381f582013-08-08 18:19:35 +0200336 DMESG_DIR="$OPTARG-dmesg-output-`echo $$-``date +%X | tr -d ' '`";;
Subrata Modakbd9d4402010-05-12 22:03:21 +0530337 *)
Cyril Hrubisc381f582013-08-08 18:19:35 +0200338 DMESG_DIR="$LTPROOT/output/$OPTARG-dmesg-output-`echo $$-``date +%X | tr -d ' '`";;
Subrata Modakbd9d4402010-05-12 22:03:21 +0530339 esac
340 mkdir -p $DMESG_DIR
341 ALT_DMESG_OUT=1;;
Chris Dearman37550cf2012-10-17 19:54:01 -0700342 l)
subrata_modak6838ec32007-09-14 10:10:12 +0000343 LOGFILE_NAME="$OPTARG"
plars4a120e82004-09-02 18:56:06 +0000344 case $OPTARG in
subrata_modak5d7deea2007-09-15 13:51:36 +0000345 /*)
plars4a120e82004-09-02 18:56:06 +0000346 LOGFILE="-l $OPTARG" ;;
Chris Dearman37550cf2012-10-17 19:54:01 -0700347 *)
plars4a120e82004-09-02 18:56:06 +0000348 LOGFILE="-l $LTPROOT/results/$OPTARG"
subrata_modak5d7deea2007-09-15 13:51:36 +0000349 ALT_DIR_RES=1 ;;
plars4a120e82004-09-02 18:56:06 +0000350 esac ;;
Chris Dearman37550cf2012-10-17 19:54:01 -0700351
subrata_modake099b2a2007-10-29 12:22:01 +0000352 m) NUM_PROCS=1; CHUNKS=1; BYTES=$((256 * 1024 * 1024)); HANGUP_FLAG=0
subrata_modak29a96d82008-08-27 13:34:46 +0000353 ARGUMENT_LIST=$OPTARG
Garrett Coopercf86b8b2010-11-16 21:46:41 -0800354 TOTAL_ARGUMENTS=1
355 for ARGUMENT in `echo "$ARGUMENT_LIST" | tr ',' ' '`
subrata_modake099b2a2007-10-29 12:22:01 +0000356 do
357 case $TOTAL_ARGUMENTS in
yaberauneya6d41cc32010-01-28 16:24:16 +0000358 1) NUM_PROCS="$ARGUMENT" ;;
359 2) CHUNKS="$ARGUMENT" ;;
360 3) BYTES="$ARGUMENT" ;;
361 4) HANGUP_FLAG="$ARGUMENT" ;;
subrata_modake099b2a2007-10-29 12:22:01 +0000362 esac
yaberauneya6d41cc32010-01-28 16:24:16 +0000363 TOTAL_ARGUMENTS=`expr $TOTAL_ARGUMENTS + 1`
subrata_modake099b2a2007-10-29 12:22:01 +0000364 done
365 # just to get the default values if the user passed 0
yaberauneya6d41cc32010-01-28 16:24:16 +0000366 if [ "$NUM_PROCS" -eq 0 ]; then
367 NUM_PROCS=1
368 fi
369 if [ "$CHUNKS" -eq 0 ]; then
370 CHUNKS=1
371 fi
372 if [ "$BYTES" -eq 0 ]; then
373 BYTES=$((256 * 1024 * 1024))
374 fi
375 if [ "$HANGUP_FLAG" -ne 1 ]; then
376 HANGUP_FLAG=0
377 fi
subrata_modake099b2a2007-10-29 12:22:01 +0000378 if [ "$HANGUP_FLAG" -eq 1 ]; then
379 # Hang in a Sleep loop after memory allocated
yaberauneya6d41cc32010-01-28 16:24:16 +0000380 $LTPROOT/testcases/bin/genload --vm $NUM_PROCS --vm-chunks \
subrata_modake099b2a2007-10-29 12:22:01 +0000381 $CHUNKS --vm-bytes $BYTES --vm-hang >/dev/null 2>&1 &
382 else
383 # Otherwise Do not Hangup
yaberauneya6d41cc32010-01-28 16:24:16 +0000384 $LTPROOT/testcases/bin/genload --vm $NUM_PROCS --vm-chunks \
subrata_modake099b2a2007-10-29 12:22:01 +0000385 $CHUNKS --vm-bytes $BYTES >/dev/null 2>&1 &
386 fi
plars4a120e82004-09-02 18:56:06 +0000387 GENLOAD=1;;
yaberauneya6d41cc32010-01-28 16:24:16 +0000388 M)
389 VALGRIND_CHECK=1
390 VALGRIND_CHECK_TYPE="$OPTARG";;
subrata_modak9c7072a2009-08-26 07:00:25 +0000391
plars4a120e82004-09-02 18:56:06 +0000392 N) RUN_NETEST=1;;
Chris Dearman37550cf2012-10-17 19:54:01 -0700393
394 n)
yaberauneya6d41cc32010-01-28 16:24:16 +0000395 $LTPROOT/testcases/bin/netpipe.sh
plars4a120e82004-09-02 18:56:06 +0000396 NETPIPE=1;;
Chris Dearman37550cf2012-10-17 19:54:01 -0700397
subrata_modak6838ec32007-09-14 10:10:12 +0000398 o) OUTPUTFILE_NAME="$OPTARG"
subrata_modak6838ec32007-09-14 10:10:12 +0000399 case $OPTARG in
400 /*)
401 OUTPUTFILE="-o $OPTARG";;
402 *)
403 OUTPUTFILE="-o $LTPROOT/output/$OPTARG"
subrata_modak5d7deea2007-09-15 13:51:36 +0000404 ALT_DIR_OUT=1 ;;
yaberauneya6d41cc32010-01-28 16:24:16 +0000405 esac ;;
Chris Dearman37550cf2012-10-17 19:54:01 -0700406
plars4a120e82004-09-02 18:56:06 +0000407 p) PRETTY_PRT=" -p ";;
Chris Dearman37550cf2012-10-17 19:54:01 -0700408
yaberauneya6d41cc32010-01-28 16:24:16 +0000409 q) QUIET_MODE=" -q ";;
Chris Dearman37550cf2012-10-17 19:54:01 -0700410
plars4a120e82004-09-02 18:56:06 +0000411 r) LTPROOT=$OPTARG;;
Chris Dearman37550cf2012-10-17 19:54:01 -0700412
robbiew7d43d772005-02-07 20:07:30 +0000413 s) TAG_RESTRICT_STRING=$OPTARG;;
subrata_modak2f6c9812009-08-14 17:07:48 +0000414
yaberauneya6d41cc32010-01-28 16:24:16 +0000415 S) case $OPTARG in
subrata_modak2f6c9812009-08-14 17:07:48 +0000416 /*)
417 SKIPFILE=$OPTARG;;
418 *)
419 SKIPFILE="$LTPROOT/$OPTARG";;
yaberauneya6d41cc32010-01-28 16:24:16 +0000420 esac ;;
Chris Dearman37550cf2012-10-17 19:54:01 -0700421
422 t) # In case you want to specify the time
423 # to run from the command line
plars4a120e82004-09-02 18:56:06 +0000424 # (2m = two minutes, 2h = two hours, etc)
425 DURATION="-t $OPTARG" ;;
subrata_modak8c138332008-01-28 11:19:32 +0000426
Cyril Hrubis5f795702016-04-26 14:45:57 +0200427 I) # In case you want the testcases to runsequentially RUN_REPEATED times
subrata_modak8c138332008-01-28 11:19:32 +0000428 RUN_REPEATED=$OPTARG;;
429
subrata_modakbc833d32007-07-25 10:12:02 +0000430 w) CMDFILEADDR=$OPTARG;;
Chris Dearman37550cf2012-10-17 19:54:01 -0700431
plars4a120e82004-09-02 18:56:06 +0000432 x) # number of ltp's to run
yaberauneya6d41cc32010-01-28 16:24:16 +0000433 cat <<-EOF >&1
434 WARNING: The use of -x can cause unpredictable failures, as a
435 result of concurrently running multiple tests designed
436 to be ran exclusively.
437 Pausing for 10 seconds..."
438 EOF
Chris Dearman37550cf2012-10-17 19:54:01 -0700439 sleep 10
yaberauneya6d41cc32010-01-28 16:24:16 +0000440 INSTANCES="-x $OPTARG";;
subrata_modakd9fb3862008-12-29 11:25:36 +0000441 b) DEVICE=$OPTARG;;
Xiaoguang Wang5b42a1e2013-12-12 19:10:58 +0800442 B) LTP_DEV_FS_TYPE=$OPTARG;;
443 z) BIG_DEVICE=$OPTARG;;
Xiaoguang Wangcb1a4ae2014-04-15 19:33:21 +0800444 Z) BIG_DEVICE_FS_TYPE=$OPTARG;;
plars4a120e82004-09-02 18:56:06 +0000445 \?) usage;;
446 esac
447 done
subrata_modak43938212008-05-19 08:48:46 +0000448
449 ## It would be nice to create a default log file even if the user has not mentioned
450 if [ ! "$LOGFILE" ]; then ## User has not mentioned about Log File name
look69f39f52014-04-30 09:55:44 +0800451 LOGFILE_NAME="$DEFAULT_FILE_NAME_GENERATION_TIME"
subrata_modak43938212008-05-19 08:48:46 +0000452 LOGFILE="-l $LTPROOT/results/LTP_RUN_ON-$LOGFILE_NAME.log"
453 ALT_DIR_RES=1
454 PRETTY_PRT=" -p "
455 fi
Chris Dearman37550cf2012-10-17 19:54:01 -0700456
457 ## 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 +0000458
yaberauneya6d41cc32010-01-28 16:24:16 +0000459 if [ ! "$FAILCMDFILE" ]; then ## User has not mentioned about Failed File name
subrata_modak5d7deea2007-09-15 13:51:36 +0000460 ALT_DIR_OUT=1
yaberauneya6d41cc32010-01-28 16:24:16 +0000461 if [ ! "$OUTPUTFILE" ]; then ## User has not mentioned about Output File name either
462 if [ ! "$LOGFILE" ]; then ## User has not mentioned about Log File name either
look69f39f52014-04-30 09:55:44 +0800463 FAILED_FILE_NAME="$DEFAULT_FILE_NAME_GENERATION_TIME"
yaberauneya6d41cc32010-01-28 16:24:16 +0000464 FAILCMDFILE="-C $LTPROOT/output/LTP_RUN_ON-$FAILED_FILE_NAME.failed"
465 else ## User Fortunately wanted a log file,
466 FAILED_FILE_NAME=`basename $LOGFILE_NAME` ## Extract log file name and use it to construct Failed file name
467 FAILCMDFILE="-C $LTPROOT/output/LTP_RUN_ON-$FAILED_FILE_NAME.failed"
subrata_modak6838ec32007-09-14 10:10:12 +0000468 fi
yaberauneya6d41cc32010-01-28 16:24:16 +0000469 else ## User Fortunately wanted a Output file
470 FAILED_FILE_NAME=`basename $OUTPUTFILE_NAME` ## Extract output 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
473 fi
subrata_modaka1fd64b2007-04-11 11:24:49 +0000474
Xiaoguang Wang5f71cf92014-09-23 15:59:43 +0800475 if [ ! "$TCONFCMDFILE" ]; then
476 ALT_DIR_OUT=1
477 if [ ! "$OUTPUTFILE" ]; then
478 if [ ! "$LOGFILE" ]; then
479 TCONF_FILE_NAME="$DEFAULT_FILE_NAME_GENERATION_TIME"
480 TCONFCMDFILE="-T $LTPROOT/output/LTP_RUN_ON-${TCONF_FILE_NAME}.tconf"
481 else
482 TCONF_FILE_NAME=`basename $LOGFILE_NAME`
483 TCONFCMDFILE="-T $LTPROOT/output/LTP_RUN_ON-${TCONF_FILE_NAME}.tconf"
484 fi
485 else
486 TCONF_FILE_NAME=`basename $OUTPUTFILE_NAME`
487 TCONFCMDFILE="-T $LTPROOT/output/LTP_RUN_ON-${TCONF_FILE_NAME}.tconf"
488 fi
489 fi
490
subrata_modakd48c4d02008-01-23 12:59:40 +0000491 if [ "$ALT_HTML_OUT" -eq 1 ] ; then ## User wants the HTML version of the output
yaberauneya6d41cc32010-01-28 16:24:16 +0000492 QUIET_MODE="" ## Suppressing this guy as it will prevent generation of proper output
subrata_modakd48c4d02008-01-23 12:59:40 +0000493 ## which the HTML parser will require
yaberauneya6d41cc32010-01-28 16:24:16 +0000494 if [ ! "$OUTPUTFILE" ]; then ## User has not mentioned about the Outputfile name, then we need to definitely generate one
look69f39f52014-04-30 09:55:44 +0800495 OUTPUTFILE_NAME="$DEFAULT_FILE_NAME_GENERATION_TIME"
subrata_modake47fb352007-11-25 17:03:49 +0000496 OUTPUTFILE="-o $LTPROOT/output/LTP_RUN_ON-$OUTPUTFILE_NAME.output"
subrata_modak08dde6f2007-11-28 11:02:51 +0000497 ALT_DIR_OUT=1
yaberauneya6d41cc32010-01-28 16:24:16 +0000498 if [ ! "$HTMLFILE" ] ; then ## User has not mentioned HTML File name, We need to create one
499 HTMLFILE_NAME=`basename $OUTPUTFILE_NAME`
subrata_modake47fb352007-11-25 17:03:49 +0000500 HTMLFILE="$LTPROOT/output/$HTMLFILE_NAME.html"
501 fi
502 fi
503 fi
504
subrata_modak5d7deea2007-09-15 13:51:36 +0000505 # If we need, create the output directory
yaberauneya6d41cc32010-01-28 16:24:16 +0000506 [ "$ALT_DIR_OUT" -eq 1 ] && \
507 {
508 [ ! -d $LTPROOT/output ] && \
509 {
510 echo "INFO: creating $LTPROOT/output directory"
511 mkdir -p $LTPROOT/output || \
512 {
513 echo "ERROR: failed to create $LTPROOT/output"
514 exit 1
515 }
516 }
517 }
subrata_modak5d7deea2007-09-15 13:51:36 +0000518 # If we need, create the results directory
yaberauneya6d41cc32010-01-28 16:24:16 +0000519 [ "$ALT_DIR_RES" -eq 1 ] && \
520 {
521 echo "INFO: creating $LTPROOT/results directory"
522 [ ! -d $LTPROOT/results ] && \
523 {
524 mkdir -p $LTPROOT/results || \
525 {
526 echo "ERROR: failed to create $LTPROOT/results"
527 exit 1
528 }
529 }
530 }
subrata_modak5d7deea2007-09-15 13:51:36 +0000531
Chris Dearman37550cf2012-10-17 19:54:01 -0700532 # Added -m 777 for tests that call tst_tmpdir() and try to
subrata_modaka1fd64b2007-04-11 11:24:49 +0000533 # write to it as user nobody
yaberauneya6d41cc32010-01-28 16:24:16 +0000534 mkdir -m 777 -p $TMPBASE || \
535 {
536 echo "FATAL: Unable to make temporary directory $TMPBASE"
537 exit 1
538 }
subrata_modak5ee3e892008-10-21 13:17:56 +0000539 # use mktemp to create "safe" temporary directories
540 export TMPTEMPLATE="${TMPBASE}/ltp-XXXXXXXXXX"
yaberauneya6d41cc32010-01-28 16:24:16 +0000541 TMP=`mktemp -d $TMPTEMPLATE` || \
542 {
543 echo "FATAL: Unable to make temporary directory: $TMP"
544 exit 1
545 }
546 export TMP
subrata_modak225cfbe2009-06-23 14:01:26 +0000547 # To be invoked by tst_tmpdir()
548 # write to it as user nobody
549 export TMPDIR=$TMP
subrata_modak6edfbda2008-10-17 12:25:48 +0000550
yaberauneya6d41cc32010-01-28 16:24:16 +0000551 chmod 777 $TMP || \
552 {
553 echo "unable to chmod 777 $TMP ... aborting"
Garrett Coopercf86b8b2010-11-16 21:46:41 -0800554 exit 1
yaberauneya6d41cc32010-01-28 16:24:16 +0000555 }
Chris Dearman37550cf2012-10-17 19:54:01 -0700556
yaberauneya6d41cc32010-01-28 16:24:16 +0000557 cd $TMP || \
558 {
559 echo "could not cd ${TMP} ... exiting"
560 exit 1
561 }
Chris Dearman37550cf2012-10-17 19:54:01 -0700562
Garrett Coopercf86b8b2010-11-16 21:46:41 -0800563 [ -n "$INSTANCES" ] && \
yaberauneya6d41cc32010-01-28 16:24:16 +0000564 {
Garrett Coopercf86b8b2010-11-16 21:46:41 -0800565 INSTANCES="$INSTANCES -O ${TMP}"
yaberauneya6d41cc32010-01-28 16:24:16 +0000566 }
Chris Dearman37550cf2012-10-17 19:54:01 -0700567
yaberauneya6d41cc32010-01-28 16:24:16 +0000568 [ "$RUN_NETEST" -eq 1 ] && \
569 {
570 [ -z "$RHOST" ] || [ -z "$PASSWD" ] && \
571 {
572 [ -z "$RHOST" ] && \
573 {
Anders Roxell4691f012013-09-03 09:42:35 +0200574 printf "INFO: Enter RHOST = 'name of the remote host machine'"
575 printf "\n-> "
plars4a120e82004-09-02 18:56:06 +0000576 read RHOST
yaberauneya6d41cc32010-01-28 16:24:16 +0000577 }
plars4a120e82004-09-02 18:56:06 +0000578
yaberauneya6d41cc32010-01-28 16:24:16 +0000579 [ -z "$PASSWD" ] && \
580 {
Anders Roxell4691f012013-09-03 09:42:35 +0200581 printf "\nINFO: "
582 printf "Enter PASSWD = 'root passwd of the remote host machine'"
583 printf "\n-> "
plars4a120e82004-09-02 18:56:06 +0000584 read PASSWD
yaberauneya6d41cc32010-01-28 16:24:16 +0000585 }
plars4a120e82004-09-02 18:56:06 +0000586 export RHOST=$RHOST
587 export PASSWD=$PASSWD
yaberauneya6d41cc32010-01-28 16:24:16 +0000588 echo "WARNING: security of $RHOST may be compromised"
589 }
590 }
Chris Dearman37550cf2012-10-17 19:54:01 -0700591
plars4a120e82004-09-02 18:56:06 +0000592 # If user does not provide a command file select a default set of testcases
593 # to execute.
yaberauneya6d41cc32010-01-28 16:24:16 +0000594 if [ -z "$CMDFILES" ] && [ -z "$CMDFILEADDR" ]
595 then
596 cat <<-EOF >&1
plars4a120e82004-09-02 18:56:06 +0000597
Garrett Coopercf86b8b2010-11-16 21:46:41 -0800598 INFO: no command files were provided. Will execute the following
599 runtest scenario files:
Garrett Cooper66d67b52010-11-16 22:42:48 -0800600
601`cat $LTPROOT/scenario_groups/default | tr '\012' ' '`
Chris Dearman37550cf2012-10-17 19:54:01 -0700602
yaberauneya6d41cc32010-01-28 16:24:16 +0000603 EOF
plars4a120e82004-09-02 18:56:06 +0000604
Garrett Cooper89fde872010-11-16 22:38:08 -0800605 SCENARIO_LISTS="$LTPROOT/scenario_groups/default"
Garrett Coopercf86b8b2010-11-16 21:46:41 -0800606 if [ "$RUN_NETEST" -eq 1 ]; then
Garrett Cooper89fde872010-11-16 22:38:08 -0800607 SCENARIO_LISTS="$SCENARIO_LISTS $LTPROOT/scenario_groups/network"
Garrett Coopercf86b8b2010-11-16 21:46:41 -0800608 fi
plars4a120e82004-09-02 18:56:06 +0000609
Garrett Coopercf86b8b2010-11-16 21:46:41 -0800610 # DO NOT INDENT/DEDENT!
611 if [ -n "$SCENARIO_LISTS" ]; then
612 # Insurance to make sure that the first element in the pipe
613 # completed successfully.
614 cat_ok_sentinel=$TMP/cat_ok.$$
Garrett Cooper66d67b52010-11-16 22:42:48 -0800615 (cat $SCENARIO_LISTS && touch "$cat_ok_sentinel") | \
Garrett Coopercf86b8b2010-11-16 21:46:41 -0800616 while read scenfile; do
617
618 scenfile=${LTPROOT}/runtest/$scenfile
619
620 # Skip over non-existent scenario files; things are
621 # robust enough now that the build will fail if these
622 # files don't exist.
623 [ -f "$scenfile" ] || continue
624
625 cat $scenfile >> "$TMP/alltests" || {
626 echo "FATAL: unable to append to command file"
627 rm -Rf "$TMP"
628 rm -f "$cat_ok_sentinel"
629 exit 1
630 }
631
632 done
633
634 rm -f "$cat_ok_sentinel"
635
636 fi
637 # ^^DO NOT INDENT/DEDENT!^^
638
subrata_modakbc833d32007-07-25 10:12:02 +0000639 fi
640
yaberauneya6d41cc32010-01-28 16:24:16 +0000641 [ -n "$CMDFILES" ] && \
642 {
Garrett Coopercf86b8b2010-11-16 21:46:41 -0800643 for scenfile in `echo "$CMDFILES" | tr ',' ' '`
yaberauneya6d41cc32010-01-28 16:24:16 +0000644 do
Garrett Coopercf86b8b2010-11-16 21:46:41 -0800645 [ -f "$scenfile" ] || scenfile="$LTPROOT/runtest/$scenfile"
646 cat "$scenfile" >> ${TMP}/alltests || \
yaberauneya6d41cc32010-01-28 16:24:16 +0000647 {
648 echo "FATAL: unable to create command file"
Garrett Coopercf86b8b2010-11-16 21:46:41 -0800649 rm -Rf "$TMP"
yaberauneya6d41cc32010-01-28 16:24:16 +0000650 exit 1
651 }
plars4a120e82004-09-02 18:56:06 +0000652 done
yaberauneya6d41cc32010-01-28 16:24:16 +0000653 }
Chris Dearman37550cf2012-10-17 19:54:01 -0700654
yaberauneya6d41cc32010-01-28 16:24:16 +0000655 [ -n "$CMDFILEADDR" ] && \
656 {
657 wget -q "${CMDFILEADDR}" -O ${TMP}/wgetcmdfile
658 if [ $? -ne 0 ]; then
659 echo "FATAL: error while getting the command file with wget (address $CMDFILEADDR)"
660 exit 1
yaberauneyad8f1f5d2010-01-28 15:46:58 +0000661 fi
yaberauneya6d41cc32010-01-28 16:24:16 +0000662 cat "${TMP}/wgetcmdfile" >> ${TMP}/alltests || \
663 {
664 echo "FATAL: unable to create command file"
665 exit 1
666 }
667 }
yaberauneyad8f1f5d2010-01-28 15:46:58 +0000668
plars4a120e82004-09-02 18:56:06 +0000669 # The fsx-linux tests use the SCRATCHDEV environment variable as a location
Chris Dearman37550cf2012-10-17 19:54:01 -0700670 # that can be reformatted and run on. Set SCRATCHDEV if you want to run
plars4a120e82004-09-02 18:56:06 +0000671 # these tests. As a safeguard, this is disabled.
672 unset SCRATCHDEV
yaberauneya6d41cc32010-01-28 16:24:16 +0000673 [ -n "$SCRATCHDEV" ] && \
674 {
675 cat ${LTPROOT}/runtest/fsx >> ${TMP}/alltests ||
676 {
677 echo "FATAL: unable to create fsx-linux tests command file"
678 exit 1
679 }
680 }
subrata_modakbc833d32007-07-25 10:12:02 +0000681
682 # If enabled, execute only test cases that match the PATTERN
yaberauneya6d41cc32010-01-28 16:24:16 +0000683 if [ -n "$TAG_RESTRICT_STRING" ]
684 then
685 mv -f ${TMP}/alltests ${TMP}/alltests.orig
686 grep $TAG_RESTRICT_STRING ${TMP}/alltests.orig > ${TMP}/alltests #Not worth checking return codes for this case
subrata_modakbc833d32007-07-25 10:12:02 +0000687 fi
subrata_modak2f6c9812009-08-14 17:07:48 +0000688
689 # Blacklist or skip tests if a SKIPFILE was specified with -S
yaberauneya6d41cc32010-01-28 16:24:16 +0000690 if [ -n "$SKIPFILE" ]
691 then
subrata_modak2f6c9812009-08-14 17:07:48 +0000692 for file in $( cat $SKIPFILE ); do
Andrew Chen410c6952011-06-30 14:19:45 +0800693 sed -i "/^$file[ \t]/d" ${TMP}/alltests
subrata_modak2f6c9812009-08-14 17:07:48 +0000694 done
695 fi
Chris Dearman37550cf2012-10-17 19:54:01 -0700696
plars4a120e82004-09-02 18:56:06 +0000697 # check for required users and groups
Cyril Hrubisb88fa5b2013-06-25 15:50:08 +0200698 ${LTPROOT}/IDcheck.sh || \
yaberauneya6d41cc32010-01-28 16:24:16 +0000699 {
700 echo "WARNING: required users and groups not present"
701 echo "WARNING: some test cases may fail"
702 }
Chris Dearman37550cf2012-10-17 19:54:01 -0700703
plars4a120e82004-09-02 18:56:06 +0000704 # display versions of installed software
yaberauneya6d41cc32010-01-28 16:24:16 +0000705 [ -z "$QUIET_MODE" ] && \
Chris Dearman37550cf2012-10-17 19:54:01 -0700706 {
yaberauneya6d41cc32010-01-28 16:24:16 +0000707 ${LTPROOT}/ver_linux || \
708 {
709 echo "WARNING: unable to display versions of software installed"
710 exit 1
711 }
712 }
713
Harald Weppner8bdf0a02014-03-03 14:10:07 -0800714 set_block_device
subrata_modakd9fb3862008-12-29 11:25:36 +0000715
Xiaoguang Wang5b42a1e2013-12-12 19:10:58 +0800716 # here even if the user don't specify a big block device, we
717 # also don't create the big block device.
718 if [ -z "$BIG_DEVICE" ]; then
719 echo "no big block device was specified on commandline."
720 echo "Tests which require a big block device are disabled."
721 echo "You can specify it with option -z"
722 else
Xiaoguang Wangcb1a4ae2014-04-15 19:33:21 +0800723 export LTP_BIG_DEV=$BIG_DEVICE
724 if [ -z "$BIG_DEVICE_FS_TYPE" ]; then
725 export LTP_BIG_DEV_FS_TYPE="ext2"
726 else
727 export LTP_BIG_DEV_FS_TYPE=$BIG_DEVICE_FS_TYPE
728 fi
subrata_modakd9fb3862008-12-29 11:25:36 +0000729 fi
730
subrata_modak8c138332008-01-28 11:19:32 +0000731 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 +0000732 echo "PAN will run these test cases $RUN_REPEATED times....."
733 echo "Test Tags will be Prepended with ITERATION NO.s....."
734 inc=1
735 sed -e '/^$/ d' -e 's/^[ ,\t]*//' -e '/^#/ d' < ${TMP}/alltests > ${TMP}/alltests.temp ##This removes all newlines, leading spaces, tabs, #
736 sed 's/^[0-9,a-z,A-Z]*/'"$inc"'_ITERATION_&/' < ${TMP}/alltests.temp > ${TMP}/alltests ## .temp is kept as Base file
737 while [ $inc -lt $RUN_REPEATED ] ; do
738 inc=`expr $inc + 1`
739 sed 's/^[0-9,a-z,A-Z]*/'"$inc"'_ITERATION_&/' < ${TMP}/alltests.temp >> ${TMP}/alltests #Keep appending with Iteration No.s
740 done
subrata_modak8c138332008-01-28 11:19:32 +0000741 fi
742
yaberauneya6d41cc32010-01-28 16:24:16 +0000743 [ ! -z "$QUIET_MODE" ] && { echo "INFO: Test start time: $(date)" ; }
744 PAN_COMMAND="${LTPROOT}/bin/ltp-pan $QUIET_MODE -e -S $INSTANCES $DURATION -a $$ \
Xiaoguang Wang5f71cf92014-09-23 15:59:43 +0800745 -n $$ $PRETTY_PRT -f ${TMP}/alltests $LOGFILE $OUTPUTFILE $FAILCMDFILE $TCONFCMDFILE"
yaberauneya6d41cc32010-01-28 16:24:16 +0000746 echo "COMMAND: $PAN_COMMAND"
747 if [ ! -z "$TAG_RESTRICT_STRING" ] ; then
748 echo "INFO: Restricted to $TAG_RESTRICT_STRING"
robbiew7d43d772005-02-07 20:07:30 +0000749 fi
yaberauneya6d41cc32010-01-28 16:24:16 +0000750 #$PAN_COMMAND #Duplicated code here, because otherwise if we fail, only "PAN_COMMAND" gets output
Chris Dearman37550cf2012-10-17 19:54:01 -0700751
subrata_modak43938212008-05-19 08:48:46 +0000752 ## Display the Output/Log/Failed/HTML file names here
Anders Roxell4691f012013-09-03 09:42:35 +0200753 printf "LOG File: "
yaberauneya6d41cc32010-01-28 16:24:16 +0000754 echo $LOGFILE | cut -b4-
subrata_modak43938212008-05-19 08:48:46 +0000755
yaberauneya6d41cc32010-01-28 16:24:16 +0000756 if [ "$OUTPUTFILE" ]; then
Anders Roxell4691f012013-09-03 09:42:35 +0200757 printf "OUTPUT File: "
yaberauneya6d41cc32010-01-28 16:24:16 +0000758 echo $OUTPUTFILE | cut -b4-
subrata_modak43938212008-05-19 08:48:46 +0000759 fi
760
Anders Roxell4691f012013-09-03 09:42:35 +0200761 printf "FAILED COMMAND File: "
yaberauneya6d41cc32010-01-28 16:24:16 +0000762 echo $FAILCMDFILE | cut -b4-
763
Xiaoguang Wang5f71cf92014-09-23 15:59:43 +0800764 printf "TCONF COMMAND File: "
765 echo $TCONFCMDFILE | cut -b4-
766
yaberauneya6d41cc32010-01-28 16:24:16 +0000767 if [ "$HTMLFILE" ]; then
768 echo "HTML File: $HTMLFILE"
769 fi
770
771 echo "Running tests......."
subrata_modake47fb352007-11-25 17:03:49 +0000772 test_start_time=$(date)
subrata_modak724098e2009-03-19 08:49:18 +0000773
yaberauneya6d41cc32010-01-28 16:24:16 +0000774 # User wants testing with Kernel Fault Injection
775 if [ $INJECT_KERNEL_FAULT ] ; then
776 #See if Debugfs is mounted, and
777 #Fault Injection Framework available through Debugfs
Garrett Coopercb66da52012-04-03 22:09:42 -0700778 use_faultinjection=true
779 for debug_subdir in \
780 fail_io_timeout \
781 fail_make_request \
782 fail_page_alloc \
783 failslab \
784 ; do
785 if [ -d "/sys/kernel/debug/$debug_subdir" ]
786 then
787 use_faultinjection=true
788 break
789 fi
790 done
791 if $use_faultinjection; then
yaberauneya6d41cc32010-01-28 16:24:16 +0000792 #If atleast one of the Framework is available
793 #Go ahead to Inject Fault & Create required
794 #Command Files for LTP run
795 echo Running tests with Fault Injection Enabled in the Kernel...
Garrett Coopercb66da52012-04-03 22:09:42 -0700796 awk -v LOOPS=$INJECT_FAULT_LOOPS_PER_TEST \
797 -v PERCENTAGE=$INJECT_KERNEL_FAULT_PERCENTAGE \
798 -f ${LTPROOT}/bin/create_kernel_faults_in_loops_and_probability.awk \
799 ${TMP}/alltests > ${TMP}/alltests.tmp
yaberauneya6d41cc32010-01-28 16:24:16 +0000800 cp ${TMP}/alltests.tmp ${TMP}/alltests
801 rm -rf ${TMP}/alltests.tmp
802 else
803 echo Fault Injection not enabled in the Kernel..
804 echo Running tests normally...
805 fi
806 fi
807
808 ## Valgrind Check will work only when Kernel Fault Injection is not expected,
809 ## We do not want to test Faults when valgrind is running
810 if [ $VALGRIND_CHECK ]; then
811 if [ ! $INJECT_KERNEL_FAULT ]; then
812 which valgrind || VALGRIND_CHECK_TYPE=XYZ
813 case $VALGRIND_CHECK_TYPE in
Garrett Cooper3920fd12012-04-03 19:47:16 -0700814 [1-3])
815 awk -v CHECK_LEVEL=$VALGRIND_CHECK_TYPE \
816 -f ${LTPROOT}/bin/create_valgrind_check.awk \
817 ${TMP}/alltests $VALGRIND_CHECK_TYPE > \
818 ${TMP}/alltests.tmp
yaberauneya6d41cc32010-01-28 16:24:16 +0000819 cp ${TMP}/alltests.tmp ${TMP}/alltests
Garrett Cooper3920fd12012-04-03 19:47:16 -0700820 rm -rf ${TMP}/alltests.tmp
821 ;;
822 *)
823 echo "Invalid Memory Check Type, or, Valgrind is not available"
824 ;;
yaberauneya6d41cc32010-01-28 16:24:16 +0000825 esac
826 fi
827 fi
828
Subrata Modakbd9d4402010-05-12 22:03:21 +0530829 if [ $ALT_DMESG_OUT -eq 1 ] ; then
830 #We want to print dmesg output for each test,lets do the trick inside the script
831 echo Enabling dmesg output logging for each test...
Garrett Cooper66030122012-04-03 20:22:14 -0700832 awk -v DMESG_DIR=$DMESG_DIR \
833 -f ${LTPROOT}/bin/create_dmesg_entries_for_each_test.awk \
834 ${TMP}/alltests > ${TMP}/alltests.tmp
Subrata Modakbd9d4402010-05-12 22:03:21 +0530835 cp ${TMP}/alltests.tmp ${TMP}/alltests
836 rm -rf ${TMP}/alltests.tmp
837 fi
subrata_modak724098e2009-03-19 08:49:18 +0000838 # Some tests need to run inside the "bin" directory.
839 cd "${LTPROOT}/testcases/bin"
Xiaoguang Wang5f71cf92014-09-23 15:59:43 +0800840 "${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 -0700841
plars4a120e82004-09-02 18:56:06 +0000842 if [ $? -eq 0 ]; then
yaberauneya6d41cc32010-01-28 16:24:16 +0000843 echo "INFO: ltp-pan reported all tests PASS"
844 VALUE=0
845 export LTP_EXIT_VALUE=0;
plars4a120e82004-09-02 18:56:06 +0000846 else
yaberauneya6d41cc32010-01-28 16:24:16 +0000847 echo "INFO: ltp-pan reported some tests FAIL"
848 VALUE=1
849 export LTP_EXIT_VALUE=1;
plars4a120e82004-09-02 18:56:06 +0000850 fi
subrata_modak724098e2009-03-19 08:49:18 +0000851 cd ..
yaberauneya6d41cc32010-01-28 16:24:16 +0000852 echo "LTP Version: $version_date"
mreed1091696422006-05-03 19:07:22 +0000853
Subrata Modake3bc3752010-07-03 23:32:27 +0530854 # $DMESG_DIR is used to cache messages obtained from dmesg after a test run.
855 # Proactively reap all of the 0-byte files in $DMESG_DIR as they have zero value
856 # and only clutter up the filesystem.
857
858 if [ $ALT_DMESG_OUT -eq 1 ] ; then
859 if ! find "$DMESG_DIR" -size 0 -exec rm {} + ; then
860 echo "cd to $DMESG_DIR failed: $?"
861 fi
862 if [ -n "$(ls "$DMESG_DIR")" ] ; then
863 echo "Kernel messages were generated for LTP tests $version_date"
864 else
865 echo "No Kernel messages were generated for LTP tests $version_date"
866 fi
867 fi
868
subrata_modake47fb352007-11-25 17:03:49 +0000869 if [ "$ALT_HTML_OUT" -eq 1 ] ; then #User wants the HTML output to be created, it then needs to be generated
870 export LTP_VERSION=$version_date
871 export TEST_START_TIME=$test_start_time
872 export TEST_END_TIME=$(date)
yaberauneya6d41cc32010-01-28 16:24:16 +0000873 OUTPUT_DIRECTORY=`echo $OUTPUTFILE | cut -c4-`
subrata_modake47fb352007-11-25 17:03:49 +0000874 LOGS_DIRECTORY="$LTPROOT/results"
875 export TEST_OUTPUT_DIRECTORY="$LTPROOT/output"
876 export TEST_LOGS_DIRECTORY=$LOGS_DIRECTORY
yaberauneya6d41cc32010-01-28 16:24:16 +0000877 echo "Generating HTML Output.....!!"
Chris Dearman37550cf2012-10-17 19:54:01 -0700878 ( 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 +0000879 echo "Generated HTML Output.....!!"
880 echo "Location: $HTMLFILE";
881
subrata_modake47fb352007-11-25 17:03:49 +0000882 fi
Chris Dearman37550cf2012-10-17 19:54:01 -0700883
yaberauneya6d41cc32010-01-28 16:24:16 +0000884 if [ "$ALT_EMAIL_OUT" -eq 1 ] ; then ## User wants reports to be e-mailed
Chris Dearman37550cf2012-10-17 19:54:01 -0700885 if [ [ ! "$HTMLFILE_NAME" ] -o [ ! "$OUTPUTFILE_NAME" ] -o [ ! "$LOGFILE_NAME" ] ] ; then
yaberauneya6d41cc32010-01-28 16:24:16 +0000886 ##User does not have output/logs/html-output, nothing to be mailed in this situation
887 echo "Nothing to be mailed here...."
subrata_modak08dde6f2007-11-28 11:02:51 +0000888 else
subrata_modak43938212008-05-19 08:48:46 +0000889 TAR_FILE_NAME=LTP_RUN_$version_date$DEFAULT_FILE_NAME_GENERATION_TIME.tar
yaberauneya6d41cc32010-01-28 16:24:16 +0000890 if [ "$HTMLFILE_NAME" ] ; then ## HTML file Exists
891 if [ "$ALT_HTML_OUT" -ne 1 ] ; then ## The HTML file path is absolute and not $LTPROOT/output
892 mkdir -p $LTPROOT/output ## We need to create this Directory
893 cp $HTMLFILE_NAME $LTPROOT/output/
894 fi
subrata_modak08dde6f2007-11-28 11:02:51 +0000895 fi
yaberauneya6d41cc32010-01-28 16:24:16 +0000896 if [ "$OUTPUTFILE_NAME" ] ; then ## Output file exists
897 if [ "$ALT_DIR_OUT" -ne 1 ] ; then ## The Output file path is absolute and not $LTPROOT/output
898 mkdir -p $LTPROOT/output ## We need to create this Directory
899 cp $OUTPUTFILE_NAME $LTPROOT/output/
900 fi
subrata_modak08dde6f2007-11-28 11:02:51 +0000901 fi
yaberauneya6d41cc32010-01-28 16:24:16 +0000902 if [ "$LOGFILE_NAME" ] ; then ## Log file exists
903 if [ "$ALT_DIR_RES" -ne 1 ] ; then ## The Log file path is absolute and not $LTPROOT/results
904 mkdir -p $LTPROOT/results ## We need to create this Directory
905 cp $LOGFILE_NAME $LTPROOT/results/
906 fi
907 fi
908 if [ -d $LTPROOT/output ] ; then
909 tar -cf ./$TAR_FILE_NAME $LTPROOT/output
910 if [ $? -eq 0 ]; then
911 echo "Created TAR File: ./$TAR_FILE_NAME successfully, added $LTPROOT/output"
912 else
913 echo "Cannot Create TAR File: ./$TAR_FILE_NAME for adding $LTPROOT/output"
914 fi
915 fi
916 if [ -d $LTPROOT/results ] ; then
917 tar -uf ./$TAR_FILE_NAME $LTPROOT/results
918 if [ $? -eq 0 ]; then
919 echo "Updated TAR File: ./$TAR_FILE_NAME successfully, added $LTPROOT/results"
920 else
921 echo "Cannot Update TAR File: ./$TAR_FILE_NAME for adding $LTPROOT/results"
922 fi
923 fi
924 if [ -e $LTPROOT/nohup.out ] ; then ## If User would have Chosen nohup to do ltprun
925 tar -uf ./$TAR_FILE_NAME $LTPROOT/nohup.out
926 if [ $? -eq 0 ]; then
927 echo "Updated TAR File: ./$TAR_FILE_NAME successfully, added $LTPROOT/nohup.out"
928 else
929 echo "Cannot Update TAR File: ./$TAR_FILE_NAME for adding $LTPROOT/nohup.out"
930 fi
931 fi
932 gzip ./$TAR_FILE_NAME ## gzip this guy
933 if [ $? -eq 0 ]; then
934 echo "Gunzipped TAR File: ./$TAR_FILE_NAME"
subrata_modak08dde6f2007-11-28 11:02:51 +0000935 else
yaberauneya6d41cc32010-01-28 16:24:16 +0000936 echo "Cannot Gunzip TAR File: ./$TAR_FILE_NAME"
subrata_modak08dde6f2007-11-28 11:02:51 +0000937 fi
yaberauneya6d41cc32010-01-28 16:24:16 +0000938 if [ -e /usr/bin/mutt ] ; then ## This is a better mail client than others
939 echo "Starting mailing reports to: $EMAIL_TO, file: ./$TAR_FILE_NAME.gz"
940 mutt -a ./$TAR_FILE_NAME.gz -s "LTP Reports on $test_start_time" $EMAIL_TO < /dev/null
941 if [ $? -eq 0 ]; then
942 echo "Reports Successfully mailed to: $EMAIL_TO"
943 else
944 echo "Reports cannot be mailed to: $EMAIL_TO"
945 fi
946 else ## Use our Ageold mail program
947 echo "Starting mailing reports to: $EMAIL_TO, file: ./$TAR_FILE_NAME.gz"
948 uuencode ./$TAR_FILE_NAME.gz $TAR_FILE_NAME.gz | mail $EMAIL_TO -s "LTP Reports on $test_start_time"
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
Chris Dearman37550cf2012-10-17 19:54:01 -0700954 fi
subrata_modak08dde6f2007-11-28 11:02:51 +0000955 fi
yaberauneya6d41cc32010-01-28 16:24:16 +0000956 fi
Chris Dearman37550cf2012-10-17 19:54:01 -0700957
yaberauneya6d41cc32010-01-28 16:24:16 +0000958 [ ! -z "$QUIET_MODE" ] && { echo "INFO: Test end time: $(date)" ; }
Chris Dearman37550cf2012-10-17 19:54:01 -0700959
yaberauneya6d41cc32010-01-28 16:24:16 +0000960 [ "$GENLOAD" -eq 1 ] && { killall -9 genload >/dev/null 2>&1; }
961 [ "$NETPIPE" -eq 1 ] && { killall -9 NPtcp >/dev/null 2>&1; }
Chris Dearman37550cf2012-10-17 19:54:01 -0700962
yaberauneya6d41cc32010-01-28 16:24:16 +0000963 [ "$ALT_DIR_OUT" -eq 1 ] || [ "$ALT_DIR_RES" -eq 1 ] && \
964 {
965 cat <<-EOF >&1
Chris Dearman37550cf2012-10-17 19:54:01 -0700966
Markos Chandras11328662012-03-06 10:28:59 +0000967 ###############################################################
Chris Dearman37550cf2012-10-17 19:54:01 -0700968
Markos Chandras11328662012-03-06 10:28:59 +0000969 Done executing testcases.
mreed1091696422006-05-03 19:07:22 +0000970 LTP Version: $version_date
Markos Chandras11328662012-03-06 10:28:59 +0000971 ###############################################################
Chris Dearman37550cf2012-10-17 19:54:01 -0700972
yaberauneya6d41cc32010-01-28 16:24:16 +0000973 EOF
974 }
975 exit $VALUE
plars4a120e82004-09-02 18:56:06 +0000976}
977
Ramesh YR0a78f232013-04-16 09:31:28 +0800978create_block()
979{
DAN LI189c4412013-09-10 10:53:34 +0800980 #create a block device
Cyril Hrubise170b9f2016-03-10 15:08:42 +0100981 dd if=/dev/zero of=${TMP}/test.img bs=1kB count=102400 >/dev/null 2>&1
Ramesh YR0a78f232013-04-16 09:31:28 +0800982 if [ $? -ne 0 ]; then
983 echo "Failed to create loopback device image, please check disk space and re-run"
984 return 1
985 else
986 ##search for an unused loop dev
987 LOOP_DEV=$(losetup -f)
988 if [ $? -ne 0 ]; then
989 echo "no unused loop device is found"
990 return 1
991 else
992 ##attach the created file to loop dev.
Cyril Hrubisb88fa5b2013-06-25 15:50:08 +0200993 losetup $LOOP_DEV ${TMP}/test.img
Ramesh YR0a78f232013-04-16 09:31:28 +0800994 if [ $? -ne 0 ]; then
995 echo "losetup failed to create block device"
996 return 1
Ramesh YR0a78f232013-04-16 09:31:28 +0800997 fi
Cyril Hrubisc381f582013-08-08 18:19:35 +0200998 DEVICE=$LOOP_DEV
999 return 0
Ramesh YR0a78f232013-04-16 09:31:28 +08001000 fi
1001 fi
1002}
1003
Harald Weppner8bdf0a02014-03-03 14:10:07 -08001004set_block_device()
1005{
1006 if [ -z "$DEVICE" ]; then
1007 create_block
1008 if [ $? -ne 0 ]; then
1009 echo "no block device was specified on commandline."
1010 echo "Block device could not be created using loopback device"
1011 echo "Tests which require block device are disabled."
1012 echo "You can specify it with option -b"
1013 else
Jan Stancek977bdf22015-01-20 14:35:49 +01001014 export LTP_DEV=$DEVICE
Harald Weppner8bdf0a02014-03-03 14:10:07 -08001015 fi
1016 else
Jan Stancek977bdf22015-01-20 14:35:49 +01001017 export LTP_DEV=$DEVICE
Harald Weppner8bdf0a02014-03-03 14:10:07 -08001018 fi
1019}
1020
plars4a120e82004-09-02 18:56:06 +00001021cleanup()
1022{
Ramesh YR0a78f232013-04-16 09:31:28 +08001023 [ "$LOOP_DEV" ] && losetup -d $LOOP_DEV
yaberauneya6d41cc32010-01-28 16:24:16 +00001024 rm -rf ${TMP}
plars4a120e82004-09-02 18:56:06 +00001025}
1026
Harald Weppner8bdf0a02014-03-03 14:10:07 -08001027
1028LTP_SCRIPT="$(basename $0)"
1029
Cyril Hrubise8776ea2014-03-24 13:32:01 +01001030if [ "$LTP_SCRIPT" = "runltp" ]; then
Harald Weppner8bdf0a02014-03-03 14:10:07 -08001031 trap "cleanup" 0
1032 setup
1033 main "$@"
1034fi