#!/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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
ImPOEOK21o5PCeG9dJWQD0lt3v8Br3vEiaj4AAA=
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 '' '' '' '' ''
