diff options
Diffstat (limited to 'roms/skiboot/external/test')
-rwxr-xr-x | roms/skiboot/external/test/test.sh | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/roms/skiboot/external/test/test.sh b/roms/skiboot/external/test/test.sh new file mode 100755 index 000000000..2bf1e89a6 --- /dev/null +++ b/roms/skiboot/external/test/test.sh @@ -0,0 +1,101 @@ +#! /bin/sh +# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +# +# Copyright 2013-2017 IBM Corp. + +run_binary() { + if [ -x "$1" ] ; then + $VALGRIND "$1" $2 2>> $STDERR_OUT 1>> $STDOUT_OUT + else + echo "Fatal error, cannot execute binary '$1'. Did you make?"; + exit 1; + fi +} + +fail_test() { + echo "$0 ($CUR_TEST): test failed"; + echo "Test directory preserved:" + echo " DATA_DIR = $DATA_DIR" + echo " STDOUT = $STDOUT_OUT" + echo " STDERR = $STDERR_OUT" + exit ${1:-1}; +} + +pass_test() { + /bin/true; +} + +strip_version_from_result() { + VERSION=$(./make_version.sh $1) + sed -i "s/${VERSION}/VERSION/;s/^Open-Power \(.*\) tool .*/Open-Power \\1 tool VERSION/" $STDERR_OUT + sed -i "s/${VERSION}/VERSION/;s/^Open-Power \(.*\) tool .*/Open-Power \\1 tool VERSION/" $STDOUT_OUT +} + +diff_with_result() { + # Explicitly diff a file with an arbitrary result file + if [ "$#" -eq 1 ] ; then + if ! diff -u "$RESULT" "$1" ; then + fail_test; + fi + # Otherwise just diff result.out with stdout and result.err with stderr + else + #Strip carriage returns, useful for pflash which does fancy + #'progress bars'. The main reason for this is is that email + #doesn't barf at really really long lines + if ! cat "$STDOUT_OUT" | tr '\r' '\n' | \ + diff -u "${RESULT}.out" - ; then + fail_test; + fi + if ! cat "$STDERR_OUT" | tr '\r' '\n' | \ + diff -u "${RESULT}.err" - ; then + fail_test; + fi + fi +} + +run_tests() { + if [ $# -lt 2 ] ; then + echo "Usage run_tests test_dir result_dir [data_dir]"; + exit 1; + fi + + all_tests="$1"; + res_path="$2"; + + if [ ! -d "$res_path" ] ; then + echo "Result path isn't a valid directory"; + exit 1; + fi + + export DATA_DIR=$(mktemp --tmpdir -d external-test-datadir.XXXXXX); + export STDERR_OUT="$DATA_DIR/stderr" + export STDOUT_OUT="$DATA_DIR/stdout" + if [ $# -eq 3 ] ; then + cp -r $3/* "$DATA_DIR" + fi + + + for the_test in $all_tests; do + export CUR_TEST=$(basename $the_test) + export RESULT="$res_path/$CUR_TEST" + echo "running $the_test" + + . "$the_test"; + R="$?" + if [ "$R" -ne 0 ] ; then + fail_test "$R"; + fi + #reset for next test + > "$STDERR_OUT"; + > "$STDOUT_OUT"; + done + + rm -rf $STDERR_OUT; + rm -rf $STDOUT_OUT; + rm -rf $DATA_DIR; + + echo "$0 tests passed" + + exit 0; +} + |