| #!/usr/bin/env sh |
| [ -z "$BASEDIR" ] && BASEDIR=$(realpath $(dirname "$0")) |
| [ -z "$TESTDIR" ] && TESTDIR=$(realpath $BASEDIR/../) |
| [ -z "$TEST_BASE_IMAGE" ] && TEST_BASE_IMAGE=$TESTDIR/output/test-base-image |
| |
| [[ ! -e $TEST_BASE_IMAGE ]] && echo "Test base image not found." && exit 1 |
| |
| DEFAULT_QEMU_CMD="-nodefaults \ |
| -nographic \ |
| -smp 2 \ |
| -m 768M \ |
| -monitor none" |
| |
| _YELLOW='\033[1;33m' |
| _GREEN='\033[0;32m' |
| _RED='\033[0;31m' |
| _NC='\033[0m' |
| |
| get_test_path() { |
| local script=$1 |
| local testname=$(basename $(dirname $script)) |
| local output=$TESTDIR/output/$testname |
| |
| echo $output |
| } |
| |
| get_test_entry_name() { |
| echo $(basename ${1%.*}) |
| } |
| |
| get_test_image() { |
| local script=$1 |
| local testout=$(get_test_path $script) |
| local entry=$(get_test_entry_name $script) |
| |
| echo $testout/$entry.img |
| } |
| |
| get_test_qemu_cmd_file() { |
| local script=$1 |
| local testout=$(get_test_path $script) |
| local entry=$(get_test_entry_name $script) |
| |
| echo $testout/$entry.qemu_cmd |
| } |
| |
| get_test_qemu_cmd() { |
| cat $(get_test_qemu_cmd_file $1) |
| } |
| |
| get_test_output_file() { |
| local script=$1 |
| local testout=$(get_test_path $script) |
| local entry=$(get_test_entry_name $script) |
| |
| echo $testout/$entry.output |
| } |
| |
| get_test_console_file() { |
| local script=$1 |
| local testout=$(get_test_path $script) |
| local entry=$(get_test_entry_name $script) |
| |
| echo $testout/$entry.console |
| } |
| |
| get_test_output() { |
| local output=$(get_test_output_file $1) |
| if [ -e "$output" ]; then |
| cat $(get_test_output_file $1) |
| else |
| echo "<No Output>" |
| fi |
| } |
| |
| build_test_image() { |
| local script=$1 |
| local test_image=$(get_test_image $script) |
| mkdir -p $(dirname $test_image) |
| |
| $BASEDIR/build-image.sh \ |
| $TEST_BASE_IMAGE \ |
| $test_image \ |
| $BASEDIR/build-scripts/test-image.sh \ |
| $script |
| } |
| |
| run_test_sync() { |
| local qemu_cmd=$(get_test_qemu_cmd $1) |
| |
| if [ -n "$qemu_cmd" ]; then |
| timeout --foreground 10m qemu-kvm $(get_test_qemu_cmd $1) |
| else |
| echo "error: test qemu command line is not configured" > /dev/stderr |
| return 1 |
| fi |
| } |
| |
| _check_test_result() { |
| grep "TEST PASSED" $1 2>/dev/null |
| [ $? -eq 0 ] && return 0 |
| |
| grep "TEST FAILED" $1 2>/dev/null |
| [ $? -eq 0 ] && return 1 |
| |
| grep "TEST ABORTED" $1 2>/dev/null |
| [ $? -eq 0 ] && return 2 |
| |
| return 255 |
| } |
| |
| |
| |
| |
| |
| |
| gather_test_result() { |
| local ret=255 |
| local res="" |
| |
| for i in $@; do |
| res=$(_check_test_result $i) |
| ret=$? |
| |
| if [ $ret -ne 255 ]; then |
| echo $res |
| return $ret |
| fi |
| done |
| |
| echo "${_RED}TEST RESULT NOT FOUND!${_NC}" |
| return 3 |
| } |
| |
| |
| watch_test_outputs() { |
| local ret=255 |
| local res="" |
| |
| |
| while true; do |
| if [ -n "$(jobs -r)" ]; then |
| |
| for i in $@; do |
| res=$(_check_test_result $i) |
| ret=$? |
| |
| if [ $ret -ne 255 ]; then |
| |
| kill $(jobs -p) |
| break 2 |
| fi |
| done |
| else |
| |
| ret=255 |
| |
| for i in $@; do |
| res=$(_check_test_result $i) |
| ret=$? |
| |
| if [ $ret -ne 255 ]; then |
| break 2 |
| fi |
| done |
| |
| if [ $ret -eq 255 ]; then |
| ret=3 |
| break |
| fi |
| fi |
| |
| sleep 1 |
| done |
| |
| return $ret |
| } |