#!/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 OLDDIR
export SCRIPTDIR
export OUTDIR

# These are the scripts to run. Binaries are invoked directly by the Makefile.
TESTS="${SCRIPTDIR}/test_dump_fmap.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_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
