#!/bin/bash -eux
# Copyright 2014 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.

me=${0##*/}
TMP="$me.tmp"

# Work in scratch directory
cd "$OUTDIR"

# No args returns nonzero exit code
"${FUTILITY}" && false

# It's weird but okay if the command is a full path.
"${FUTILITY}" /fake/path/to/help  > "$TMP"
grep Usage "$TMP"

# Make sure logging does something.
LOG="/tmp/futility.log"
[ -f "${LOG}" ] && mv "${LOG}" "${LOG}.backup"
touch "${LOG}"
"${FUTILITY}" help
grep "${FUTILITY}" "${LOG}"
rm -f "${LOG}"
[ -f "${LOG}.backup" ] && mv "${LOG}.backup" "${LOG}"

# Use some known digests to verify that things work...
DEVKEYS="${SRCDIR}/tests/devkeys"
SHA=e78ce746a037837155388a1096212ded04fb86eb

# all progs in the pipelines should work
set -o pipefail

# If it's invoked as the name of a command we know, it should do that command
ln -sf "${FUTILITY}" vbutil_key
./vbutil_key --unpack "${DEVKEYS}/installer_kernel_data_key.vbpubk" | \
  grep "${SHA}"
ln -sf "${FUTILITY}" vbutil_keyblock
./vbutil_keyblock --unpack "${DEVKEYS}/installer_kernel.keyblock" | \
  grep "${SHA}"
cp "${FUTILITY}" show
./show "${SCRIPT_DIR}/futility/data/rec_kernel_part.bin" | grep "${SHA}"

# If it's invoked by any other name, expect the command to be the first arg.
ln -sf "${FUTILITY}" muggle
./muggle vbutil_key --unpack "${DEVKEYS}/installer_kernel_data_key.vbpubk" \
  | grep "${SHA}"
ln -sf "${FUTILITY}" buggle
./buggle vbutil_keyblock --unpack "${DEVKEYS}/installer_kernel.keyblock" \
  | grep "${SHA}"
cp "${FUTILITY}" boo
./boo show "${SCRIPT_DIR}/futility/data/rec_kernel_part.bin" | grep "${SHA}"


# we expect the first command fail, but the output to match anyway
set +o pipefail

# If it can't figure out the command at all, it should complain.
"${FUTILITY}" muggle | grep Usage:
./buggle futility | grep Usage:
./boo | grep Usage:

# cleanup
rm -f "${TMP}"* vbutil_key vbutil_keyblock show muggle buggle boo
exit 0
