xref: /aosp_15_r20/external/igt-gpu-tools/scripts/run-tests.sh (revision d83cc019efdc2edc6c4b16e9034a3ceb8d35d77c)
1*d83cc019SAndroid Build Coastguard Worker#!/bin/bash
2*d83cc019SAndroid Build Coastguard Worker#
3*d83cc019SAndroid Build Coastguard Worker# Copyright © 2014 Intel Corporation
4*d83cc019SAndroid Build Coastguard Worker#
5*d83cc019SAndroid Build Coastguard Worker# Permission is hereby granted, free of charge, to any person obtaining a
6*d83cc019SAndroid Build Coastguard Worker# copy of this software and associated documentation files (the "Software"),
7*d83cc019SAndroid Build Coastguard Worker# to deal in the Software without restriction, including without limitation
8*d83cc019SAndroid Build Coastguard Worker# the rights to use, copy, modify, merge, publish, distribute, sublicense,
9*d83cc019SAndroid Build Coastguard Worker# and/or sell copies of the Software, and to permit persons to whom the
10*d83cc019SAndroid Build Coastguard Worker# Software is furnished to do so, subject to the following conditions:
11*d83cc019SAndroid Build Coastguard Worker#
12*d83cc019SAndroid Build Coastguard Worker# The above copyright notice and this permission notice (including the next
13*d83cc019SAndroid Build Coastguard Worker# paragraph) shall be included in all copies or substantial portions of the
14*d83cc019SAndroid Build Coastguard Worker# Software.
15*d83cc019SAndroid Build Coastguard Worker#
16*d83cc019SAndroid Build Coastguard Worker# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17*d83cc019SAndroid Build Coastguard Worker# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18*d83cc019SAndroid Build Coastguard Worker# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
19*d83cc019SAndroid Build Coastguard Worker# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20*d83cc019SAndroid Build Coastguard Worker# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21*d83cc019SAndroid Build Coastguard Worker# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
22*d83cc019SAndroid Build Coastguard Worker# IN THE SOFTWARE.
23*d83cc019SAndroid Build Coastguard Worker
24*d83cc019SAndroid Build Coastguard Worker
25*d83cc019SAndroid Build Coastguard WorkerROOT="`dirname $0`"
26*d83cc019SAndroid Build Coastguard WorkerROOT="`readlink -f $ROOT/..`"
27*d83cc019SAndroid Build Coastguard WorkerIGT_CONFIG_PATH="`readlink -f ${IGT_CONFIG_PATH:-$HOME/.igtrc}`"
28*d83cc019SAndroid Build Coastguard WorkerRESULTS="$ROOT/results"
29*d83cc019SAndroid Build Coastguard WorkerPIGLIT=`which piglit 2> /dev/null`
30*d83cc019SAndroid Build Coastguard Worker
31*d83cc019SAndroid Build Coastguard Workerif [ -z "$IGT_TEST_ROOT" ]; then
32*d83cc019SAndroid Build Coastguard Worker	paths=("$ROOT/build/tests/test-list.txt"
33*d83cc019SAndroid Build Coastguard Worker	       "$ROOT/tests/test-list.txt")
34*d83cc019SAndroid Build Coastguard Worker	for p in "${paths[@]}"; do
35*d83cc019SAndroid Build Coastguard Worker		if [ -f "$p" ]; then
36*d83cc019SAndroid Build Coastguard Worker			echo "Found test list: \"$p\""
37*d83cc019SAndroid Build Coastguard Worker			IGT_TEST_ROOT=$(dirname "$p")
38*d83cc019SAndroid Build Coastguard Worker			break
39*d83cc019SAndroid Build Coastguard Worker		fi
40*d83cc019SAndroid Build Coastguard Worker	done
41*d83cc019SAndroid Build Coastguard Workerfi
42*d83cc019SAndroid Build Coastguard Worker
43*d83cc019SAndroid Build Coastguard Workerif [ -z "$IGT_TEST_ROOT" ]; then
44*d83cc019SAndroid Build Coastguard Worker	echo "Error: test list not found."
45*d83cc019SAndroid Build Coastguard Worker	echo "Please build tests to generate the test list or use IGT_TEST_ROOT env var."
46*d83cc019SAndroid Build Coastguard Worker	exit 1
47*d83cc019SAndroid Build Coastguard Workerfi
48*d83cc019SAndroid Build Coastguard Worker
49*d83cc019SAndroid Build Coastguard WorkerIGT_TEST_ROOT="`readlink -f ${IGT_TEST_ROOT}`"
50*d83cc019SAndroid Build Coastguard Worker
51*d83cc019SAndroid Build Coastguard Workerfunction download_piglit {
52*d83cc019SAndroid Build Coastguard Worker	git clone https://anongit.freedesktop.org/git/piglit.git "$ROOT/piglit"
53*d83cc019SAndroid Build Coastguard Worker}
54*d83cc019SAndroid Build Coastguard Worker
55*d83cc019SAndroid Build Coastguard Workerfunction run_piglit # as-root <args>
56*d83cc019SAndroid Build Coastguard Worker{
57*d83cc019SAndroid Build Coastguard Worker	local need_root=$1
58*d83cc019SAndroid Build Coastguard Worker	shift
59*d83cc019SAndroid Build Coastguard Worker	local sudo
60*d83cc019SAndroid Build Coastguard Worker
61*d83cc019SAndroid Build Coastguard Worker	export IGT_TEST_ROOT IGT_CONFIG_PATH
62*d83cc019SAndroid Build Coastguard Worker
63*d83cc019SAndroid Build Coastguard Worker	if [ "$need_root" -ne 0 -a "$EUID" -ne 0 ]; then
64*d83cc019SAndroid Build Coastguard Worker		sudo="sudo --preserve-env=IGT_TEST_ROOT,IGT_CONFIG_PATH"
65*d83cc019SAndroid Build Coastguard Worker	fi
66*d83cc019SAndroid Build Coastguard Worker
67*d83cc019SAndroid Build Coastguard Worker	$sudo $PIGLIT "$@"
68*d83cc019SAndroid Build Coastguard Worker}
69*d83cc019SAndroid Build Coastguard Worker
70*d83cc019SAndroid Build Coastguard Workerfunction print_help {
71*d83cc019SAndroid Build Coastguard Worker	echo "Usage: run-tests.sh [options]"
72*d83cc019SAndroid Build Coastguard Worker	echo "Available options:"
73*d83cc019SAndroid Build Coastguard Worker	echo "  -d              download Piglit to $ROOT/piglit"
74*d83cc019SAndroid Build Coastguard Worker	echo "  -h              display this help message"
75*d83cc019SAndroid Build Coastguard Worker	echo "  -l              list all available tests"
76*d83cc019SAndroid Build Coastguard Worker	echo "  -r <directory>  store the results in directory"
77*d83cc019SAndroid Build Coastguard Worker	echo "                  (default: $RESULTS)"
78*d83cc019SAndroid Build Coastguard Worker	echo "  -s              create html summary"
79*d83cc019SAndroid Build Coastguard Worker	echo "  -t <regex>      only include tests that match the regular expression"
80*d83cc019SAndroid Build Coastguard Worker	echo "                  (can be used more than once)"
81*d83cc019SAndroid Build Coastguard Worker	echo "  -T <filename>   run tests listed in testlist"
82*d83cc019SAndroid Build Coastguard Worker	echo "                  (overrides -t and -x)"
83*d83cc019SAndroid Build Coastguard Worker	echo "  -v              enable verbose mode"
84*d83cc019SAndroid Build Coastguard Worker	echo "  -x <regex>      exclude tests that match the regular expression"
85*d83cc019SAndroid Build Coastguard Worker	echo "                  (can be used more than once)"
86*d83cc019SAndroid Build Coastguard Worker	echo "  -R              resume interrupted test where the partial results"
87*d83cc019SAndroid Build Coastguard Worker	echo "                  are in the directory given by -r"
88*d83cc019SAndroid Build Coastguard Worker	echo "  -n              do not retry incomplete tests when resuming a"
89*d83cc019SAndroid Build Coastguard Worker	echo "                  test run with -R"
90*d83cc019SAndroid Build Coastguard Worker	echo ""
91*d83cc019SAndroid Build Coastguard Worker	echo "Useful patterns for test filtering are described in the API documentation."
92*d83cc019SAndroid Build Coastguard Worker}
93*d83cc019SAndroid Build Coastguard Worker
94*d83cc019SAndroid Build Coastguard Workerwhile getopts ":dhlr:st:T:vx:Rn" opt; do
95*d83cc019SAndroid Build Coastguard Worker	case $opt in
96*d83cc019SAndroid Build Coastguard Worker		d) download_piglit; exit ;;
97*d83cc019SAndroid Build Coastguard Worker		h) print_help; exit ;;
98*d83cc019SAndroid Build Coastguard Worker		l) LIST_TESTS="true" ;;
99*d83cc019SAndroid Build Coastguard Worker		r) RESULTS="$OPTARG" ;;
100*d83cc019SAndroid Build Coastguard Worker		s) SUMMARY="html" ;;
101*d83cc019SAndroid Build Coastguard Worker		t) FILTER="$FILTER -t $OPTARG" ;;
102*d83cc019SAndroid Build Coastguard Worker		T) FILTER="$FILTER --test-list $OPTARG" ;;
103*d83cc019SAndroid Build Coastguard Worker		v) VERBOSE="-v" ;;
104*d83cc019SAndroid Build Coastguard Worker		x) EXCLUDE="$EXCLUDE -x $OPTARG" ;;
105*d83cc019SAndroid Build Coastguard Worker		R) RESUME="true" ;;
106*d83cc019SAndroid Build Coastguard Worker		n) NORETRY="--no-retry" ;;
107*d83cc019SAndroid Build Coastguard Worker		:)
108*d83cc019SAndroid Build Coastguard Worker			echo "Option -$OPTARG requires an argument."
109*d83cc019SAndroid Build Coastguard Worker			exit 1
110*d83cc019SAndroid Build Coastguard Worker			;;
111*d83cc019SAndroid Build Coastguard Worker		\?)
112*d83cc019SAndroid Build Coastguard Worker			echo "Unknown option: -$OPTARG"
113*d83cc019SAndroid Build Coastguard Worker			print_help
114*d83cc019SAndroid Build Coastguard Worker			exit 1
115*d83cc019SAndroid Build Coastguard Worker			;;
116*d83cc019SAndroid Build Coastguard Worker	esac
117*d83cc019SAndroid Build Coastguard Workerdone
118*d83cc019SAndroid Build Coastguard Workershift $(($OPTIND-1))
119*d83cc019SAndroid Build Coastguard Worker
120*d83cc019SAndroid Build Coastguard Workerif [ "x$1" != "x" ]; then
121*d83cc019SAndroid Build Coastguard Worker	echo "Unknown option: $1"
122*d83cc019SAndroid Build Coastguard Worker	print_help
123*d83cc019SAndroid Build Coastguard Worker	exit 1
124*d83cc019SAndroid Build Coastguard Workerfi
125*d83cc019SAndroid Build Coastguard Worker
126*d83cc019SAndroid Build Coastguard Workerif [ "x$PIGLIT" == "x" ]; then
127*d83cc019SAndroid Build Coastguard Worker	PIGLIT="$ROOT/piglit/piglit"
128*d83cc019SAndroid Build Coastguard Workerfi
129*d83cc019SAndroid Build Coastguard Worker
130*d83cc019SAndroid Build Coastguard Workerif [ ! -x "$PIGLIT" ]; then
131*d83cc019SAndroid Build Coastguard Worker	echo "Could not find Piglit."
132*d83cc019SAndroid Build Coastguard Worker	echo "Please install Piglit or use -d to download Piglit locally."
133*d83cc019SAndroid Build Coastguard Worker	exit 1
134*d83cc019SAndroid Build Coastguard Workerfi
135*d83cc019SAndroid Build Coastguard Worker
136*d83cc019SAndroid Build Coastguard Workerif [ "x$LIST_TESTS" != "x" ]; then
137*d83cc019SAndroid Build Coastguard Worker	run_piglit 0 print-cmd --format "{name}" igt
138*d83cc019SAndroid Build Coastguard Worker	exit
139*d83cc019SAndroid Build Coastguard Workerfi
140*d83cc019SAndroid Build Coastguard Worker
141*d83cc019SAndroid Build Coastguard Workerif [ "x$RESUME" != "x" ]; then
142*d83cc019SAndroid Build Coastguard Worker	run_piglit 1 resume "$RESULTS" $NORETRY
143*d83cc019SAndroid Build Coastguard Workerelse
144*d83cc019SAndroid Build Coastguard Worker	mkdir -p "$RESULTS"
145*d83cc019SAndroid Build Coastguard Worker	run_piglit 1 run igt --ignore-missing -o "$RESULTS" -s $VERBOSE $EXCLUDE $FILTER
146*d83cc019SAndroid Build Coastguard Workerfi
147*d83cc019SAndroid Build Coastguard Worker
148*d83cc019SAndroid Build Coastguard Workerif [ "$SUMMARY" == "html" ]; then
149*d83cc019SAndroid Build Coastguard Worker	run_piglit 0 summary html --overwrite "$RESULTS/html" "$RESULTS"
150*d83cc019SAndroid Build Coastguard Worker	echo "HTML summary has been written to $RESULTS/html/index.html"
151*d83cc019SAndroid Build Coastguard Workerfi
152