#!/bin/bash # 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. . "$(dirname "$0")/common.sh" # Where are the programs I'm testing against? [ -z "${1:-}" ] && error "Directory argument is required" BINDIR="$1" shift FUTILITY="$BINDIR/futility" OLDDIR="$BINDIR/old_bins" BUILD=$(dirname "${BINDIR}") # Here are the old programs to be wrapped # FIXME(chromium-os:37062): There are others besides these. # 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} # Get ready pass=0 progs=0 pwd OUTDIR="${BUILD}/tests/futility_test_dir" [ -d "$OUTDIR" ] || mkdir -p "$OUTDIR" # For now just compare results of invoking each program with no args. # FIXME(chromium-os:37062): Create true rigorous tests for every program. 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 # done if [ "$pass" -eq "$progs" ]; then green "Success: $pass / $progs passed" exit 0 fi red "FAIL: $pass / $progs passed" exit 1