#!/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=arm
export ARCH_NAME=arm
export PROCESSOR=cortex-a15
echo BUILD_HEAD=
trap 'rm -f $cleanup' EXIT
ERRATATXT=`mktemp`
cleanup="$ERRATATXT $cleanup"
base64 -d << 'BIN_EOF' | zcat > $ERRATATXT || exit 2
H4sICIvjOl4AA2VycmF0YS50eHQAvZE/b8IwEMX3fIqTMtPWTnAabwywtF27Ro45iEXOifwnIt++
VoFKRS1VF9769O737i5ffJdc3NZf/k/KctADkQlwlgQy1lAkOKCz2MOVJPhIpNyckoxDh0fYmr0J
PjkTOm8Gex25JLP8HgvVWOwqxWtRl0+nwuVD/Uulk68ciVLCy/ubhJGihI05wmrldFdw0LPuMd0o
2oAOlNbofVa1oi1FwZh6Xl4YjN1ifA5PoMczbE2xVwEhdAjrVwZjN3sIhhLD4d74BPOZ0JVabjVy
3hZfGP4fzC5t4lTqDMbCYaJm9No0kx5jM9j7/OMDNZHCJsYCAAA=
BIN_EOF
chmod +x $ERRATATXT
export ERRATATXT
bin=`mktemp`
cleanup="$bin $cleanup"
base64 -d << 'BIN_EOF' | zcat > $bin || exit 2
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
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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
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()
{
    # output test results in a TAP format
    # https://testanything.org/tap-version-13-specification.html

    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 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="${ACCEL:-$8}"
    local timeout="${9:-$TIMEOUT}" # unittests.cfg overrides the default

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

    if [ -n "$only_tests" ] && ! grep -qw "$testname" <<<$only_tests; then
        return
    fi

    if [ -n "$only_group" ] && ! grep -qw "$only_group" <<<$groups; then
        return
    fi

    if [ -z "$only_group" ] && grep -qw "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

    # 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 [ "$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) \
                             > >(tee >(RUNTIME_log_stdout $kernel) | extract_summary))
    ret=$?
    [ "$STANDALONE" != "yes" ] && echo > >(RUNTIME_log_stdout $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 selftest-smp selftest \$MAX_SMP $bin -append\ \'smp\' '' '' '' ''
