xref: /aosp_15_r20/external/ltp/testcases/realtime/run.sh (revision 49cdfc7efb34551c7342be41a7384b9c40d7cab7)
1*49cdfc7eSAndroid Build Coastguard Worker#!/bin/bash
2*49cdfc7eSAndroid Build Coastguard Worker################################################################################
3*49cdfc7eSAndroid Build Coastguard Worker##                                                                            ##
4*49cdfc7eSAndroid Build Coastguard Worker## Copyright ©  International Business Machines  Corp., 2007, 2008            ##
5*49cdfc7eSAndroid Build Coastguard Worker##                                                                            ##
6*49cdfc7eSAndroid Build Coastguard Worker## This program is free software;  you can redistribute it and#or modify      ##
7*49cdfc7eSAndroid Build Coastguard Worker## it under the terms of the GNU General Public License as published by       ##
8*49cdfc7eSAndroid Build Coastguard Worker## the Free Software Foundation; either version 2 of the License, or          ##
9*49cdfc7eSAndroid Build Coastguard Worker## (at your option) any later version.                                        ##
10*49cdfc7eSAndroid Build Coastguard Worker##                                                                            ##
11*49cdfc7eSAndroid Build Coastguard Worker## This program is distributed in the hope that it will be useful, but        ##
12*49cdfc7eSAndroid Build Coastguard Worker## WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY ##
13*49cdfc7eSAndroid Build Coastguard Worker## or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License   ##
14*49cdfc7eSAndroid Build Coastguard Worker## for more details.                                                          ##
15*49cdfc7eSAndroid Build Coastguard Worker##                                                                            ##
16*49cdfc7eSAndroid Build Coastguard Worker## You should have received a copy of the GNU General Public License          ##
17*49cdfc7eSAndroid Build Coastguard Worker## along with this program;  if not, write to the Free Software               ##
18*49cdfc7eSAndroid Build Coastguard Worker## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA    ##
19*49cdfc7eSAndroid Build Coastguard Worker##                                                                            ##
20*49cdfc7eSAndroid Build Coastguard Worker################################################################################
21*49cdfc7eSAndroid Build Coastguard Worker
22*49cdfc7eSAndroid Build Coastguard Worker
23*49cdfc7eSAndroid Build Coastguard Worker#
24*49cdfc7eSAndroid Build Coastguard Worker# Script to run the tests in rt-test
25*49cdfc7eSAndroid Build Coastguard Worker#
26*49cdfc7eSAndroid Build Coastguard Worker# Usage: $0 test_argument
27*49cdfc7eSAndroid Build Coastguard Worker#
28*49cdfc7eSAndroid Build Coastguard Worker# where test-argument = func | stress | perf | all | list | clean | test_name
29*49cdfc7eSAndroid Build Coastguard Worker#
30*49cdfc7eSAndroid Build Coastguard Worker# test_name is the name of a subdirectory in func/, stress/ or perf/
31*49cdfc7eSAndroid Build Coastguard Worker#
32*49cdfc7eSAndroid Build Coastguard Worker
33*49cdfc7eSAndroid Build Coastguard Workerusage()
34*49cdfc7eSAndroid Build Coastguard Worker{
35*49cdfc7eSAndroid Build Coastguard Worker	cat <<EOF
36*49cdfc7eSAndroid Build Coastguard Workerusage: $(basename "$0") [-p profile] -t test-argument [-l num_of_loops]
37*49cdfc7eSAndroid Build Coastguard Worker
38*49cdfc7eSAndroid Build Coastguard Worker -h			help
39*49cdfc7eSAndroid Build Coastguard Worker -p profile		Use profile instead of default (see
40*49cdfc7eSAndroid Build Coastguard Worker			doc/AUTOMATED_RUN)
41*49cdfc7eSAndroid Build Coastguard Worker -t test-arguments	Where test-argument can be a space separated
42*49cdfc7eSAndroid Build Coastguard Worker			sequence of:
43*49cdfc7eSAndroid Build Coastguard Worker			func		all functional tests will be run
44*49cdfc7eSAndroid Build Coastguard Worker			stress		all stress tests will be run
45*49cdfc7eSAndroid Build Coastguard Worker			perf		all perf tests will be run
46*49cdfc7eSAndroid Build Coastguard Worker			all		all tests will be run
47*49cdfc7eSAndroid Build Coastguard Worker			list		all available tests will be listed
48*49cdfc7eSAndroid Build Coastguard Worker			clean		all logs deleted, make clean
49*49cdfc7eSAndroid Build Coastguard Worker					performed
50*49cdfc7eSAndroid Build Coastguard Worker			test_name	only test_name subdir will be run
51*49cdfc7eSAndroid Build Coastguard Worker					(e.g: func/pi-tests)
52*49cdfc7eSAndroid Build Coastguard Worker
53*49cdfc7eSAndroid Build Coastguard WorkerEOF
54*49cdfc7eSAndroid Build Coastguard Worker	exit 1
55*49cdfc7eSAndroid Build Coastguard Worker}
56*49cdfc7eSAndroid Build Coastguard Workercheck_error()
57*49cdfc7eSAndroid Build Coastguard Worker{
58*49cdfc7eSAndroid Build Coastguard Worker	if [ $? -gt 0 ]; then
59*49cdfc7eSAndroid Build Coastguard Worker		echo
60*49cdfc7eSAndroid Build Coastguard Worker		echo " $1 Failed"
61*49cdfc7eSAndroid Build Coastguard Worker		echo
62*49cdfc7eSAndroid Build Coastguard Worker		exit 1
63*49cdfc7eSAndroid Build Coastguard Worker	fi
64*49cdfc7eSAndroid Build Coastguard Worker}
65*49cdfc7eSAndroid Build Coastguard Workerlist_tests()
66*49cdfc7eSAndroid Build Coastguard Worker{
67*49cdfc7eSAndroid Build Coastguard Worker	echo
68*49cdfc7eSAndroid Build Coastguard Worker	echo " Available tests are:"
69*49cdfc7eSAndroid Build Coastguard Worker	echo
70*49cdfc7eSAndroid Build Coastguard Worker
71*49cdfc7eSAndroid Build Coastguard Worker	pushd $TESTS_DIR >/dev/null
72*49cdfc7eSAndroid Build Coastguard Worker	for file in `find -name run_auto.sh`
73*49cdfc7eSAndroid Build Coastguard Worker	do
74*49cdfc7eSAndroid Build Coastguard Worker		echo " `dirname  $file `"
75*49cdfc7eSAndroid Build Coastguard Worker	done
76*49cdfc7eSAndroid Build Coastguard Worker		printf " \n\n"
77*49cdfc7eSAndroid Build Coastguard Worker}
78*49cdfc7eSAndroid Build Coastguard Worker
79*49cdfc7eSAndroid Build Coastguard Workerrun_test()
80*49cdfc7eSAndroid Build Coastguard Worker{
81*49cdfc7eSAndroid Build Coastguard Worker	local profile
82*49cdfc7eSAndroid Build Coastguard Worker
83*49cdfc7eSAndroid Build Coastguard Worker	profile=$1
84*49cdfc7eSAndroid Build Coastguard Worker	shift
85*49cdfc7eSAndroid Build Coastguard Worker
86*49cdfc7eSAndroid Build Coastguard Worker	iter=0
87*49cdfc7eSAndroid Build Coastguard Worker	LOOPS=$(( 0 + $2 ))
88*49cdfc7eSAndroid Build Coastguard Worker	if [ $LOOPS -eq 0 ]; then
89*49cdfc7eSAndroid Build Coastguard Worker		LOOPS=1
90*49cdfc7eSAndroid Build Coastguard Worker	fi
91*49cdfc7eSAndroid Build Coastguard Worker	if [ -d "$test" ]; then
92*49cdfc7eSAndroid Build Coastguard Worker		pushd $test >/dev/null
93*49cdfc7eSAndroid Build Coastguard Worker		if [ -f "run_auto.sh" ]; then
94*49cdfc7eSAndroid Build Coastguard Worker		echo " Running $LOOPS runs of $subdir "
95*49cdfc7eSAndroid Build Coastguard Worker		iter=0
96*49cdfc7eSAndroid Build Coastguard Worker		while [ $iter -lt $LOOPS ]; do
97*49cdfc7eSAndroid Build Coastguard Worker			./run_auto.sh $profile
98*49cdfc7eSAndroid Build Coastguard Worker			: $(( iter += 1 ))
99*49cdfc7eSAndroid Build Coastguard Worker		done
100*49cdfc7eSAndroid Build Coastguard Worker	else
101*49cdfc7eSAndroid Build Coastguard Worker		echo
102*49cdfc7eSAndroid Build Coastguard Worker		echo " Failed to find run script in $test \n"
103*49cdfc7eSAndroid Build Coastguard Worker		fi
104*49cdfc7eSAndroid Build Coastguard Worker		pushd $TESTS_DIR >/dev/null
105*49cdfc7eSAndroid Build Coastguard Worker	else
106*49cdfc7eSAndroid Build Coastguard Worker		printf "\n $test is not a valid test subdirectory \n"
107*49cdfc7eSAndroid Build Coastguard Worker		usage
108*49cdfc7eSAndroid Build Coastguard Worker		exit 1
109*49cdfc7eSAndroid Build Coastguard Worker	fi
110*49cdfc7eSAndroid Build Coastguard Worker}
111*49cdfc7eSAndroid Build Coastguard Worker
112*49cdfc7eSAndroid Build Coastguard Workermake_clean()
113*49cdfc7eSAndroid Build Coastguard Worker{
114*49cdfc7eSAndroid Build Coastguard Worker	pushd $TESTS_DIR >/dev/null
115*49cdfc7eSAndroid Build Coastguard Worker	rm -rf logs/*
116*49cdfc7eSAndroid Build Coastguard Worker	for mfile in `find -name "Makefile"`;
117*49cdfc7eSAndroid Build Coastguard Worker	do
118*49cdfc7eSAndroid Build Coastguard Worker		target_dir=`dirname $mfile`
119*49cdfc7eSAndroid Build Coastguard Worker		pushd $target_dir >/dev/null
120*49cdfc7eSAndroid Build Coastguard Worker		make clean
121*49cdfc7eSAndroid Build Coastguard Worker		pushd $TESTS_DIR >/dev/null
122*49cdfc7eSAndroid Build Coastguard Worker	done
123*49cdfc7eSAndroid Build Coastguard Worker}
124*49cdfc7eSAndroid Build Coastguard Worker
125*49cdfc7eSAndroid Build Coastguard Workerfind_test()
126*49cdfc7eSAndroid Build Coastguard Worker{
127*49cdfc7eSAndroid Build Coastguard Worker	local profile
128*49cdfc7eSAndroid Build Coastguard Worker
129*49cdfc7eSAndroid Build Coastguard Worker	profile=$1
130*49cdfc7eSAndroid Build Coastguard Worker	shift
131*49cdfc7eSAndroid Build Coastguard Worker
132*49cdfc7eSAndroid Build Coastguard Worker	case $1 in
133*49cdfc7eSAndroid Build Coastguard Worker	func)
134*49cdfc7eSAndroid Build Coastguard Worker		TESTLIST="func"
135*49cdfc7eSAndroid Build Coastguard Worker		;;
136*49cdfc7eSAndroid Build Coastguard Worker	stress)
137*49cdfc7eSAndroid Build Coastguard Worker		TESTLIST="stress"
138*49cdfc7eSAndroid Build Coastguard Worker		;;
139*49cdfc7eSAndroid Build Coastguard Worker	perf)
140*49cdfc7eSAndroid Build Coastguard Worker		TESTLIST="perf"
141*49cdfc7eSAndroid Build Coastguard Worker		;;
142*49cdfc7eSAndroid Build Coastguard Worker	all)
143*49cdfc7eSAndroid Build Coastguard Worker		# Run all tests which have run_auto.sh
144*49cdfc7eSAndroid Build Coastguard Worker		TESTLIST="func stress perf"
145*49cdfc7eSAndroid Build Coastguard Worker		;;
146*49cdfc7eSAndroid Build Coastguard Worker	list)
147*49cdfc7eSAndroid Build Coastguard Worker		# This will only display subdirs which have run_auto.sh
148*49cdfc7eSAndroid Build Coastguard Worker		list_tests
149*49cdfc7eSAndroid Build Coastguard Worker		exit
150*49cdfc7eSAndroid Build Coastguard Worker		;;
151*49cdfc7eSAndroid Build Coastguard Worker	clean)
152*49cdfc7eSAndroid Build Coastguard Worker		# This will clobber logs, out files, .o's etc
153*49cdfc7eSAndroid Build Coastguard Worker		make_clean
154*49cdfc7eSAndroid Build Coastguard Worker		exit
155*49cdfc7eSAndroid Build Coastguard Worker		;;
156*49cdfc7eSAndroid Build Coastguard Worker
157*49cdfc7eSAndroid Build Coastguard Worker	*)
158*49cdfc7eSAndroid Build Coastguard Worker		# run the tests in the individual subdirectory if it exists
159*49cdfc7eSAndroid Build Coastguard Worker		TESTLIST="$1"
160*49cdfc7eSAndroid Build Coastguard Worker		;;
161*49cdfc7eSAndroid Build Coastguard Worker	esac
162*49cdfc7eSAndroid Build Coastguard Worker
163*49cdfc7eSAndroid Build Coastguard Worker	for subdir in $TESTLIST; do
164*49cdfc7eSAndroid Build Coastguard Worker		if [ -d $subdir ]; then
165*49cdfc7eSAndroid Build Coastguard Worker			pushd $subdir >/dev/null
166*49cdfc7eSAndroid Build Coastguard Worker			for name in `find -name "run_auto.sh"`; do
167*49cdfc7eSAndroid Build Coastguard Worker				test="`dirname $name`"
168*49cdfc7eSAndroid Build Coastguard Worker				run_test "$profile" "$test" "$2"
169*49cdfc7eSAndroid Build Coastguard Worker				pushd $subdir > /dev/null
170*49cdfc7eSAndroid Build Coastguard Worker			done
171*49cdfc7eSAndroid Build Coastguard Worker			pushd $TESTS_DIR >/dev/null
172*49cdfc7eSAndroid Build Coastguard Worker		else
173*49cdfc7eSAndroid Build Coastguard Worker			echo
174*49cdfc7eSAndroid Build Coastguard Worker			echo " $subdir not found; check name/path with $0 list "
175*49cdfc7eSAndroid Build Coastguard Worker		fi
176*49cdfc7eSAndroid Build Coastguard Worker	done
177*49cdfc7eSAndroid Build Coastguard Worker
178*49cdfc7eSAndroid Build Coastguard Worker}
179*49cdfc7eSAndroid Build Coastguard Worker
180*49cdfc7eSAndroid Build Coastguard WorkerSCRIPTS_DIR="$(readlink -f "$(dirname "$0")")/scripts"
181*49cdfc7eSAndroid Build Coastguard Workersource $SCRIPTS_DIR/setenv.sh
182*49cdfc7eSAndroid Build Coastguard Worker
183*49cdfc7eSAndroid Build Coastguard Workerif [ $# -lt 1 ]; then
184*49cdfc7eSAndroid Build Coastguard Worker	usage
185*49cdfc7eSAndroid Build Coastguard Workerfi
186*49cdfc7eSAndroid Build Coastguard Workerpushd $TESTS_DIR >/dev/null
187*49cdfc7eSAndroid Build Coastguard Worker
188*49cdfc7eSAndroid Build Coastguard Worker# if INSTALL_DIR != top_srcdir assume the individual tests are built and installed.
189*49cdfc7eSAndroid Build Coastguard Worker# So no need to build lib
190*49cdfc7eSAndroid Build Coastguard Workerif [[ -d lib ]]; then
191*49cdfc7eSAndroid Build Coastguard Worker    #Only build the library, most of the tests depend upon.
192*49cdfc7eSAndroid Build Coastguard Worker    #The Individual tests will be built, just before they run.
193*49cdfc7eSAndroid Build Coastguard Worker    pushd lib
194*49cdfc7eSAndroid Build Coastguard Worker    make
195*49cdfc7eSAndroid Build Coastguard Worker    check_error make
196*49cdfc7eSAndroid Build Coastguard Worker    popd
197*49cdfc7eSAndroid Build Coastguard Workerfi
198*49cdfc7eSAndroid Build Coastguard Worker
199*49cdfc7eSAndroid Build Coastguard WorkerISLOOP=0
200*49cdfc7eSAndroid Build Coastguard Workerindex=0
201*49cdfc7eSAndroid Build Coastguard Workerwhile getopts "hl:p:t:" option
202*49cdfc7eSAndroid Build Coastguard Workerdo
203*49cdfc7eSAndroid Build Coastguard Worker	case "$option" in
204*49cdfc7eSAndroid Build Coastguard Worker
205*49cdfc7eSAndroid Build Coastguard Worker	t )
206*49cdfc7eSAndroid Build Coastguard Worker		if [ $ISLOOP -eq 1 ]; then
207*49cdfc7eSAndroid Build Coastguard Worker			LOOP=1
208*49cdfc7eSAndroid Build Coastguard Worker			tests[$index]=$LOOP
209*49cdfc7eSAndroid Build Coastguard Worker			: $(( index += 1 ))
210*49cdfc7eSAndroid Build Coastguard Worker		fi
211*49cdfc7eSAndroid Build Coastguard Worker
212*49cdfc7eSAndroid Build Coastguard Worker		tests[$index]="$OPTARG"
213*49cdfc7eSAndroid Build Coastguard Worker		: $((index += 1 ))
214*49cdfc7eSAndroid Build Coastguard Worker		TESTCASE="$OPTARG"
215*49cdfc7eSAndroid Build Coastguard Worker		ISLOOP=1
216*49cdfc7eSAndroid Build Coastguard Worker		;;
217*49cdfc7eSAndroid Build Coastguard Worker
218*49cdfc7eSAndroid Build Coastguard Worker	l )
219*49cdfc7eSAndroid Build Coastguard Worker		ISLOOP=0
220*49cdfc7eSAndroid Build Coastguard Worker		tests[$index]="$OPTARG"
221*49cdfc7eSAndroid Build Coastguard Worker		LOOP="$OPTARG"
222*49cdfc7eSAndroid Build Coastguard Worker		index=$((index+1))
223*49cdfc7eSAndroid Build Coastguard Worker		;;
224*49cdfc7eSAndroid Build Coastguard Worker	p )
225*49cdfc7eSAndroid Build Coastguard Worker		profile=$OPTARG
226*49cdfc7eSAndroid Build Coastguard Worker		;;
227*49cdfc7eSAndroid Build Coastguard Worker	h )
228*49cdfc7eSAndroid Build Coastguard Worker		usage
229*49cdfc7eSAndroid Build Coastguard Worker		;;
230*49cdfc7eSAndroid Build Coastguard Worker	* ) echo "Unrecognized option specified"
231*49cdfc7eSAndroid Build Coastguard Worker		usage
232*49cdfc7eSAndroid Build Coastguard Worker		;;
233*49cdfc7eSAndroid Build Coastguard Worker	esac
234*49cdfc7eSAndroid Build Coastguard Workerdone
235*49cdfc7eSAndroid Build Coastguard Worker
236*49cdfc7eSAndroid Build Coastguard Workertests[$index]=1
237*49cdfc7eSAndroid Build Coastguard Worker
238*49cdfc7eSAndroid Build Coastguard Workeri=0
239*49cdfc7eSAndroid Build Coastguard Workerwhile [ $i -lt $index ]; do
240*49cdfc7eSAndroid Build Coastguard Worker	find_test "$profile" ${tests[$i]} ${tests[$((i+1))]}
241*49cdfc7eSAndroid Build Coastguard Worker	: $(( i += 2 ))
242*49cdfc7eSAndroid Build Coastguard Workerdone
243