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