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