diff options
Diffstat (limited to 'tests/futility/run_test_scripts.sh')
-rwxr-xr-x | tests/futility/run_test_scripts.sh | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/tests/futility/run_test_scripts.sh b/tests/futility/run_test_scripts.sh new file mode 100755 index 00000000..d886ea95 --- /dev/null +++ b/tests/futility/run_test_scripts.sh @@ -0,0 +1,125 @@ +#!/bin/bash -eu +# Copyright (c) 2013 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# Load common constants and variables. +SCRIPTDIR=$(dirname $(readlink -f "$0")) +. "$SCRIPTDIR/common.sh" + +# Mandatory arg is the path to the futility executable to test. +[ -z "${1:-}" ] && error "Directory argument is required" +BINDIR="$1" +shift + +FUTILITY="$BINDIR/futility" +OLDDIR="$BINDIR/old_bins" + + +# The Makefile should export the $BUILD directory, but if it's not just warn +# and guess (mostly so we can run the script manually). +if [ -z "${BUILD:-}" ]; then + BUILD=$(dirname "${BINDIR}") + yellow "Assuming \$BUILD=$BUILD" +fi +OUTDIR="${BUILD}/tests/futility_test_results" +[ -d "$OUTDIR" ] || mkdir -p "$OUTDIR" + + +# Let each test know where to find things... +export FUTILITY +export SCRIPTDIR +export OUTDIR + +# These are the scripts to run. Binaries are invoked directly by the Makefile. +TESTS="${SCRIPTDIR}/test_not_really.sh" + + +# Get ready... +pass=0 +progs=0 + +############################################################################## +# But first, we'll just test the wrapped functions. This will go away when +# everything is built in (chromium:196079). + +# Here are the old programs to be wrapped +# FIXME: dev_debug_vboot isn't tested right now. +PROGS=${*:-cgpt crossystem dev_sign_file dumpRSAPublicKey + dump_fmap dump_kernel_config enable_dev_usb_boot gbb_utility + tpm_init_temp_fix tpmc vbutil_firmware vbutil_kernel vbutil_key + vbutil_keyblock vbutil_what_keys} + +# For now just compare results of invoking each program with no args. +# FIXME(chromium-os:37062): Create true rigorous tests for every program. +echo "-- old_bins --" +for i in $PROGS; do + : $(( progs++ )) + + # Try the real thing first + echo -n "$i ... " + rc=$("${OLDDIR}/$i" \ + 1>"${OUTDIR}/$i.stdout.orig" 2>"${OUTDIR}/$i.stderr.orig" \ + || echo "$?") + echo "${rc:-0}" > "${OUTDIR}/$i.return.orig" + + # Then try the symlink + rc=$("$BINDIR/$i" 1>"${OUTDIR}/$i.stdout.link" \ + 2>"${OUTDIR}/$i.stderr.link" || echo "$?") + echo "${rc:-0}" > "${OUTDIR}/$i.return.link" + + # And finally try the explicit wrapper + rc=$("$FUTILITY" "$i" 1>"${OUTDIR}/$i.stdout.futil" \ + 2>"${OUTDIR}/$i.stderr.futil" || echo "$?") + echo "${rc:-0}" > "${OUTDIR}/$i.return.futil" + + # Different? + if cmp -s "${OUTDIR}/$i.return.orig" "${OUTDIR}/$i.return.link" && + cmp -s "${OUTDIR}/$i.stdout.orig" "${OUTDIR}/$i.stdout.link" && + cmp -s "${OUTDIR}/$i.stderr.orig" "${OUTDIR}/$i.stderr.link" && + cmp -s "${OUTDIR}/$i.return.orig" "${OUTDIR}/$i.return.futil" && + cmp -s "${OUTDIR}/$i.stdout.orig" "${OUTDIR}/$i.stdout.futil" && + cmp -s "${OUTDIR}/$i.stderr.orig" "${OUTDIR}/$i.stderr.futil" ; then + green "passed" + : $(( pass++ )) + rm -f ${OUTDIR}/$i.{stdout,stderr,return}.{orig,link,futil} + else + red "failed" + fi +done + + +############################################################################## +# Invoke the scripts that test the builtin functions. + +echo "-- builtin --" +for i in $TESTS; do + j=${i##*/} + + : $(( progs++ )) + + echo -n "$j ... " + rm -f "${OUTDIR}/$j."* + rc=$("$i" "$FUTILITY" 1>"${OUTDIR}/$j.stdout" \ + 2>"${OUTDIR}/$j.stderr" || echo "$?") + echo "${rc:-0}" > "${OUTDIR}/$j.return" + if [ ! "$rc" ]; then + green "passed" + : $(( pass++ )) + rm -f ${OUTDIR}/$i.{stdout,stderr,return} + else + red "failed" + fi + +done + +############################################################################## +# How'd we do? + +if [ "$pass" -eq "$progs" ]; then + green "Success: $pass / $progs passed" + exit 0 +fi + +red "FAIL: $pass / $progs passed" +exit 1 |