#!/bin/bash
export STANDALONE=yes
export ENVIRON_DEFAULT=yes
export HOST=$(uname -m | sed -e 's/i.86/i386/;s/arm.*/arm/;s/ppc64.*/ppc64/')
export PRETTY_PRINT_STACKS=no
export ARCH=x86_64
export ARCH_NAME=x86_64
export PROCESSOR=x86_64
echo BUILD_HEAD=
trap 'rm -f $cleanup' EXIT
bin=`mktemp`
cleanup="$bin $cleanup"
base64 -d << 'BIN_EOF' | zcat > $bin || exit 2
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
kR17xyiOlycR6eVJVHp5rGx7eaxi2zeZSPsmU2lfumzbl67YXplCzK9MoeZXxsmOV8YpjlfHE9ur
4ykEGYJi2z+BOPZPoBBkCIrjtYkEAoUgQ1Acr08ittcnUQgyBMX2xmQCgUKQISi2A1OI48AUCkGG
oDgOTifmg9Op+eBdsuPgXYrjUCaRDmVS6dDdsu3Q3YrtzSwivZlFpTenyo43pyqOw9nEfDibmg/f
I9sO36PY3soh0ls5VHprmmx7a5pie9tFzG+7qPntDNnxdobieCeXmN/JpeZ3psuOd6YrjnfziPRu
HpXezZRt72YqtiP5RDqST6UjWbLtSJZiO+om5qNuaj6aLTuOZiuO93KI7b0cCkGGoNjedxHH+y4K
QYagOD7IJRAoBBmC4vgwj9g+zKMQZAiK7aN8AoFCkCEoto/dxPGxm0KQISiOY8VEOlZMpWMzZMex
GYrjk1nE/Mksav7kXtn2yb2K7dMSYv60hJo/LZAdnxYojuOlRDpeSqXjM2Xb8ZmK7bMyYv6sjJo/
K5RtnxUqts/LifR5OZU+L5IdnxcpjhOziXRiNpVOFMu2E8WK7eQcYj45h5pPzpIdJ2cpjlMVxHyq
gppPlciOUyWK44u5RPpiLpW+KJVtX5Qqti/LiOPLMgpBhqA4/lVObP8qpxBkCIrtq9kEAoUgQ1Bs
X88hjq/nUAgyBMXxTQWBQCHIEBTHv+cS27/nUggyBMV2ejHxnF5MPafnybbT8xTbt0uI99sl1Pvt
fNnx7XzFcaaSeM9UUu+ZBbLtzALF9p2HeL7zUM93C2XHdwsVx9mlxHt2KfWevU92nL1PcZxbRjzn
llHPuUWy7dwixXa+injOV1HP+cWy7/xixXfBS7wXvNR7YYnsv7BE8V9cTrwXl1PvxUrZf7FS8X+/
gni+X0E933tk3/cexffDUuL/YSmFIENQ/D8uI74fl1EIMgTF91MVgUAhyBAU389e4v/ZSyHIEBT/
L8sJBApBhqD4f11BfL+uoBBkCIrv0lrivbSWei/dL/su3a/4LlcTz+Vq6rm8UvZfXqn4r9QQz5Ua
6rmySvZdWaX4rvqI96qPeq+ulv1XVyv+a+uI59o66rn2gOy/9oDiv76eeK+vp97ra2Tf9TWK78YG
4r2xgXpvrJX9N9Yq/t/8xPObn3p+q5Z9v1UrvpsPEs/NB6nnZo3su1mj+P6zkXj/s5F6/+OT/f/x
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
hHxMavP+DyYzRaao9wAA
BIN_EOF
chmod +x $bin
RUNTIME_arch_run=`mktemp`
cleanup="$RUNTIME_arch_run $cleanup"
base64 -d << 'BIN_EOF' | zcat > $RUNTIME_arch_run || exit 2
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
oCEntPx3D5i3cvBB/LLpv8AMp482KQAA
BIN_EOF
chmod +x $RUNTIME_arch_run
exec {stdout}>&1
RUNTIME_log_stdout () { cat >&$stdout; }
RUNTIME_log_stderr () { cat >&2; }
: "${RUNTIME_arch_run?}"
: ${MAX_SMP:=$(getconf _NPROCESSORS_ONLN)}
: ${TIMEOUT:=90s}

PASS() { echo -ne "\e[32mPASS\e[0m"; }
SKIP() { echo -ne "\e[33mSKIP\e[0m"; }
FAIL() { echo -ne "\e[31mFAIL\e[0m"; }

extract_summary()
{
    local cr=$'\r'
    tail -3 | grep '^SUMMARY: ' | sed 's/^SUMMARY: /(/;s/'"$cr"'\{0,1\}$/)/'
}

# We assume that QEMU is going to work if it tried to load the kernel
premature_failure()
{
    local log="$(eval $(get_cmdline _NO_FILE_4Uhere_) 2>&1)"

    echo "$log" | grep "_NO_FILE_4Uhere_" |
        grep -q -e "could not \(load\|open\) kernel" -e "error loading" &&
        return 1

    RUNTIME_log_stderr <<< "$log"

    echo "$log"
    return 0
}

get_cmdline()
{
    local kernel=$1
    echo "TESTNAME=$testname TIMEOUT=$timeout ACCEL=$accel $RUNTIME_arch_run $kernel -smp $smp $opts"
}

skip_nodefault()
{
    [ "$run_all_tests" = "yes" ] && return 1
    [ "$STANDALONE" != "yes" ] && return 0

    while true; do
        read -r -p "Test marked not to be run by default, are you sure (y/N)? " yn
        case $yn in
            "Y" | "y" | "Yes" | "yes")
                return 1
                ;;
            "" | "N" | "n" | "No" | "no" | "q" | "quit" | "exit")
                return 0
                ;;
        esac
    done
}

function print_result()
{
    local status="$1"
    local testname="$2"
    local summary="$3"
    local reason="$4"

    if [ -z "$reason" ]; then
        echo "`$status` $testname $summary"
    else
        echo "`$status` $testname ($reason)"
    fi
}

function find_word()
{
    grep -Fq " $1 " <<< " $2 "
}

function run()
{
    local testname="$1"
    local groups="$2"
    local smp="$3"
    local kernel="$4"
    local opts="$5"
    local arch="$6"
    local check="${CHECK:-$7}"
    local accel="$8"
    local timeout="${9:-$TIMEOUT}" # unittests.cfg overrides the default

    if [ -z "$testname" ]; then
        return
    fi

    if [ -n "$only_tests" ] && ! find_word "$testname" "$only_tests"; then
        return
    fi

    if [ -n "$only_group" ] && ! find_word "$only_group" "$groups"; then
        return
    fi

    if [ -z "$only_group" ] && find_word nodefault "$groups" &&
            skip_nodefault; then
        print_result "SKIP" $testname "" "test marked as manual run only"
        return;
    fi

    if [ -n "$arch" ] && [ "$arch" != "$ARCH" ]; then
        print_result "SKIP" $testname "" "$arch only"
        return 2
    fi

    if [ -n "$accel" ] && [ -n "$ACCEL" ] && [ "$accel" != "$ACCEL" ]; then
        print_result "SKIP" $testname "" "$accel only, but ACCEL=$ACCEL"
        return 2
    elif [ -n "$ACCEL" ]; then
        accel="$ACCEL"
    fi

    # check a file for a particular value before running a test
    # the check line can contain multiple files to check separated by a space
    # but each check parameter needs to be of the form <path>=<value>
    for check_param in "${check[@]}"; do
        path=${check_param%%=*}
        value=${check_param#*=}
        if [ -f "$path" ] && [ "$(cat $path)" != "$value" ]; then
            print_result "SKIP" $testname "" "$path not equal to $value"
            return 2
        fi
    done

    last_line=$(premature_failure > >(tail -1)) && {
        print_result "SKIP" $testname "" "$last_line"
        return 77
    }

    cmdline=$(get_cmdline $kernel)
    if grep -qw "migration" <<<$groups ; then
        cmdline="MIGRATION=yes $cmdline"
    fi
    if [ "$verbose" = "yes" ]; then
        echo $cmdline
    fi

    # extra_params in the config file may contain backticks that need to be
    # expanded, so use eval to start qemu.  Use "> >(foo)" instead of a pipe to
    # preserve the exit status.
    summary=$(eval $cmdline 2> >(RUNTIME_log_stderr $testname) \
                             > >(tee >(RUNTIME_log_stdout $testname $kernel) | extract_summary))
    ret=$?
    [ "$STANDALONE" != "yes" ] && echo > >(RUNTIME_log_stdout $testname $kernel)

    if [ $ret -eq 0 ]; then
        print_result "PASS" $testname "$summary"
    elif [ $ret -eq 77 ]; then
        print_result "SKIP" $testname "$summary"
    elif [ $ret -eq 124 ]; then
        print_result "FAIL" $testname "" "timeout; duration=$timeout"
    elif [ $ret -gt 127 ]; then
        print_result "FAIL" $testname "" "terminated on SIG$(kill -l $(($ret - 128)))"
    else
        print_result "FAIL" $testname "$summary"
    fi

    return $ret
}

#
# Probe for MAX_SMP, in case it's less than the number of host cpus.
#
# This probing currently only works for ARM, as x86 bails on another
# error first. Also, this probing isn't necessary for any ARM hosts
# running kernels later than v4.3, i.e. those including ef748917b52
# "arm/arm64: KVM: Remove 'config KVM_ARM_MAX_VCPUS'". So, at some
# point when maintaining the while loop gets too tiresome, we can
# just remove it...
while $RUNTIME_arch_run _NO_FILE_4Uhere_ -smp $MAX_SMP \
		|& grep -qi 'exceeds max CPUs'; do
	MAX_SMP=$((MAX_SMP >> 1))
done
run realmode '' 1 $bin '' '' '' '' ''
