1103832e8SRadim Krčmář: "${RUNTIME_arch_run?}" 2fd149358SAndrew Jones: ${MAX_SMP:=$(getconf _NPROCESSORS_CONF)} 3fd149358SAndrew Jones: ${TIMEOUT:=90s} 46a53fc26SRadim Krčmář 59c51d8c9SRadim KrčmářPASS() { echo -ne "\e[32mPASS\e[0m"; } 69c51d8c9SRadim KrčmářSKIP() { echo -ne "\e[33mSKIP\e[0m"; } 79c51d8c9SRadim KrčmářFAIL() { echo -ne "\e[31mFAIL\e[0m"; } 89c51d8c9SRadim Krčmář 9e9ae9613SRadim Krčmářextract_summary() 10e9ae9613SRadim Krčmář{ 11e9ae9613SRadim Krčmář tail -1 | grep '^SUMMARY: ' | sed 's/^SUMMARY: /(/;s/$/)/' 12e9ae9613SRadim Krčmář} 13e9ae9613SRadim Krčmář 146a53fc26SRadim Krčmářfunction run() 156a53fc26SRadim Krčmář{ 166a53fc26SRadim Krčmář local testname="$1" 176a53fc26SRadim Krčmář local groups="$2" 186a53fc26SRadim Krčmář local smp="$3" 196a53fc26SRadim Krčmář local kernel="$4" 206a53fc26SRadim Krčmář local opts="$5" 216a53fc26SRadim Krčmář local arch="$6" 22e9bdb8b5SAndrew Jones local check="${CHECK:-$7}" 23e9bdb8b5SAndrew Jones local accel="${ACCEL:-$8}" 24fd149358SAndrew Jones local timeout="${9:-$TIMEOUT}" # unittests.cfg overrides the default 256a53fc26SRadim Krčmář 266a53fc26SRadim Krčmář if [ -z "$testname" ]; then 276a53fc26SRadim Krčmář return 286a53fc26SRadim Krčmář fi 296a53fc26SRadim Krčmář 306a53fc26SRadim Krčmář if [ -n "$only_group" ] && ! grep -q "$only_group" <<<$groups; then 316a53fc26SRadim Krčmář return 326a53fc26SRadim Krčmář fi 336a53fc26SRadim Krčmář 346a53fc26SRadim Krčmář if [ -n "$arch" ] && [ "$arch" != "$ARCH" ]; then 359c51d8c9SRadim Krčmář echo "`SKIP` $1 ($arch only)" 36a3831260SAndrew Jones return 2 376a53fc26SRadim Krčmář fi 386a53fc26SRadim Krčmář 396a53fc26SRadim Krčmář # check a file for a particular value before running a test 406a53fc26SRadim Krčmář # the check line can contain multiple files to check separated by a space 416a53fc26SRadim Krčmář # but each check parameter needs to be of the form <path>=<value> 426a53fc26SRadim Krčmář for check_param in ${check[@]}; do 436a53fc26SRadim Krčmář path=${check_param%%=*} 446a53fc26SRadim Krčmář value=${check_param#*=} 456a53fc26SRadim Krčmář if [ "$path" ] && [ "$(cat $path)" != "$value" ]; then 469c51d8c9SRadim Krčmář echo "`SKIP` $1 ($path not equal to $value)" 47a3831260SAndrew Jones return 2 486a53fc26SRadim Krčmář fi 496a53fc26SRadim Krčmář done 506a53fc26SRadim Krčmář 51fd149358SAndrew Jones cmdline="TESTNAME=$testname TIMEOUT=$timeout ACCEL=$accel $RUNTIME_arch_run $kernel -smp $smp $opts" 525b842da9SAndrew Jones if [ "$verbose" = "yes" ]; then 536a53fc26SRadim Krčmář echo $cmdline 546a53fc26SRadim Krčmář fi 556a53fc26SRadim Krčmář 566a53fc26SRadim Krčmář # extra_params in the config file may contain backticks that need to be 57e9ae9613SRadim Krčmář # expanded, so use eval to start qemu. Use "> >(foo)" instead of a pipe to 58e9ae9613SRadim Krčmář # preserve the exit status. 59*1abbc2ceSRadim Krčmář summary=$(eval $cmdline 2> >(RUNTIME_log_stderr) \ 60*1abbc2ceSRadim Krčmář > >(tee >(RUNTIME_log_stdout $kernel) | extract_summary)) 615af378ddSRadim Krčmář ret=$? 626a53fc26SRadim Krčmář 63b2a2aa5dSAndrew Jones if [ $ret -eq 0 ]; then 64e9ae9613SRadim Krčmář echo "`PASS` $1 $summary" 65a0833bfcSRadim Krčmář elif [ $ret -eq 77 ]; then 66e9ae9613SRadim Krčmář echo "`SKIP` $1 $summary" 67fd149358SAndrew Jones elif [ $ret -eq 124 ]; then 689c51d8c9SRadim Krčmář echo "`FAIL` $1 (timeout; duration=$timeout)" 696a53fc26SRadim Krčmář else 70e9ae9613SRadim Krčmář echo "`FAIL` $1 $summary" 716a53fc26SRadim Krčmář fi 725af378ddSRadim Krčmář 735af378ddSRadim Krčmář return $ret 746a53fc26SRadim Krčmář} 756a53fc26SRadim Krčmář 76bc52c0c8SAndrew Jones# 77bc52c0c8SAndrew Jones# Probe for MAX_SMP, in case it's less than the number of host cpus. 78bc52c0c8SAndrew Jones# 79bc52c0c8SAndrew Jones# This probing currently only works for ARM, as x86 bails on another 80bc52c0c8SAndrew Jones# error first. Also, this probing isn't necessary for any ARM hosts 81bc52c0c8SAndrew Jones# running kernels later than v4.3, i.e. those including ef748917b52 82bc52c0c8SAndrew Jones# "arm/arm64: KVM: Remove 'config KVM_ARM_MAX_VCPUS'". So, at some 83bc52c0c8SAndrew Jones# point when maintaining the while loop gets too tiresome, we can 84bc52c0c8SAndrew Jones# just remove it... 85bc52c0c8SAndrew Joneswhile $RUNTIME_arch_run _NO_FILE_4Uhere_ -smp $MAX_SMP \ 86bc52c0c8SAndrew Jones |& grep -qi 'exceeds max CPUs'; do 876a53fc26SRadim Krčmář ((--MAX_SMP)) 886a53fc26SRadim Krčmářdone 89