| Index: util/do_tests.sh
|
| diff --git a/util/do_tests.sh b/util/do_tests.sh
|
| new file mode 100755
|
| index 0000000000000000000000000000000000000000..1b70a841ef5808692e03a03c8c1dc30ab4af0ae5
|
| --- /dev/null
|
| +++ b/util/do_tests.sh
|
| @@ -0,0 +1,175 @@
|
| +#!/bin/sh
|
| +#
|
| +# Copyright (C) 2010 Google Inc.
|
| +# Written by David Hendricks for Google Inc.
|
| +#
|
| +# This program is free software; you can redistribute it and/or modify
|
| +# it under the terms of the GNU General Public License as published by
|
| +# the Free Software Foundation; either version 2 of the License, or
|
| +# (at your option) any later version.
|
| +#
|
| +# This program is distributed in the hope that it will be useful,
|
| +# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
| +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
| +# GNU General Public License for more details.
|
| +#
|
| +# You should have received a copy of the GNU General Public License
|
| +# along with this program; if not, write to the Free Software
|
| +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
| +#
|
| +# This is a simple test harness which contains setup and cleanup code common to
|
| +# all tests. The syntax for this script is:
|
| +# do_tests.sh --options <test1> <test2> ... <testN>
|
| +#
|
| +# Arguments which are files are assumed to be tests which are run after common
|
| +# setup routines and before common cleanup routines.
|
| +#
|
| +# This script exports some global variables intended for use by individual unit
|
| +# tests. The important ones are:
|
| +# EXIT_SUCCESS & EXIT_FAILURE: Exit codes
|
| +# DEBUG: Indicates that extra verbosity should be used.
|
| +# BACKUP: The backup firmware image obtained during setup.
|
| +
|
| +export EXIT_SUCCESS=0
|
| +export EXIT_FAILURE=1
|
| +export DEBUG=1
|
| +
|
| +show_help()
|
| +{
|
| + echo " \
|
| + Usage:
|
| + do_test.sh [OPTION] test1.sh test2.sh ... testN.sh
|
| +
|
| + Environment variables:
|
| + FLASHROM: Path to the Flashrom binary to test
|
| + FLASHROM_PARAM: Parameters to pass in
|
| +
|
| + OPTIONS
|
| + -h or --help
|
| + Display this message.
|
| +
|
| + Arguments with one or two leading dashes are processed as options.
|
| + Arguments which are filenames are processed as test cases. Names of test
|
| + cases may not contain spaces.
|
| + "
|
| +
|
| + exit $EXIT_SUCCESS
|
| +}
|
| +
|
| +msg_dbg() {
|
| + if [ ${DEBUG} -eq 1 ]; then
|
| + echo "$@"
|
| + fi
|
| +}
|
| +
|
| +# Parse command-line
|
| +OPTIONS=""
|
| +TESTS=""
|
| +for ARG in $@; do
|
| + if echo "${ARG}" | grep "^-.*$" >/dev/null
|
| + then
|
| + OPTIONS=${OPTIONS}" "${ARG}
|
| + elif [ -f ${ARG} ]; then
|
| + TESTS=${TESTS}" "${ARG}
|
| + fi
|
| +done
|
| +
|
| +for ARG in ${OPTIONS}; do
|
| + case ${ARG} in
|
| + -h|--help)
|
| + show_help;
|
| + shift;;
|
| + esac;
|
| +done
|
| +
|
| +#
|
| +# Setup Routine
|
| +#
|
| +
|
| +# The copy of flashrom to test. If unset, we'll assume the user wants to test
|
| +# a newly built flashrom binary in the parent directory (this script should
|
| +# reside in flashrom/util).
|
| +if [ -z "${FLASHROM}" ] ; then
|
| + FLASHROM="./flashrom"
|
| +fi
|
| +echo "testing flashrom binary: ${FLASHROM}"
|
| +
|
| +OLDDIR=$(pwd)
|
| +
|
| +# test data location
|
| +TMPDIR=$(mktemp -d -t flashrom_test.XXXXXXXXXX)
|
| +if [ "$?" != "0" ] ; then
|
| + echo "Could not create temporary directory"
|
| + exit ${EXIT_FAILURE}
|
| +fi
|
| +
|
| +which flashrom > /dev/null
|
| +#if [ "$?" != "0" ] ; then
|
| +if [ ${?} -ne 0 ] ; then
|
| + echo "Please install a stable version of flashrom in your path."
|
| + echo "This will be used to compare the test flashrom binary and "
|
| + echo "restore your firmware image at the end of the test."
|
| + exit ${EXIT_FAILURE}
|
| +fi
|
| +
|
| +# Copy the test case files and flashrom to temporary directory.
|
| +cp "${FLASHROM}" "${TMPDIR}/"
|
| +for TEST in ${TESTS}; do
|
| + cp ${TEST} "${TMPDIR}/"
|
| +done
|
| +
|
| +cd "${TMPDIR}"
|
| +echo "Running test in ${TMPDIR}"
|
| +
|
| +# Make a backup
|
| +echo "Reading firmware image"
|
| +BACKUP="backup.bin"
|
| +flashrom ${FLASHROM_PARAM} -r "$BACKUP" > /dev/null
|
| +if [ $? -ne 0 ]; then
|
| + echo "Failed to create backup image"
|
| + exit ${EXIT_FAILURE}
|
| +else
|
| + echo "Original image saved as ${BACKUP}"
|
| +fi
|
| +
|
| +
|
| +# Attempt to write the backup image to ensure the system's flashrom is
|
| +# at least somewhat capable of restoring the image.
|
| +# FIXME: this requires a modification to flashrom to force blocks to be
|
| +# re-written, even if the content is the same.
|
| +#flashrom ${FLASHROM_PARAM} --force -r "$BACKUP" > /dev/null
|
| +#if [ $? -ne 0 ]; then
|
| +# echo "The installed flashrom binary is not usable for testing"
|
| +# exit ${EXIT_FAILURE}
|
| +#fi
|
| +
|
| +export BACKUP=${BACKUP}
|
| +
|
| +#
|
| +# Execute test cases
|
| +#
|
| +rc=${EXIT_SUCCESS}
|
| +msg_dbg "Test cases: ${TESTS}"
|
| +for TEST in ${TESTS}; do
|
| + msg_dbg "Running test: \"${TEST}\""
|
| + ./${TEST}
|
| + if [ ${?} -ne ${EXIT_SUCCESS} ]; then
|
| + rc=${EXIT_FAILURE}
|
| + break
|
| + fi
|
| +done
|
| +
|
| +#
|
| +# Cleanup Routine
|
| +#
|
| +if [ ${rc} -ne ${EXIT_SUCCESS} ] ; then
|
| + echo "Result: FAILED"
|
| +else
|
| + echo "Result: PASSED"
|
| +fi
|
| +
|
| +echo "restoring original image using system's flashrom"
|
| +flashrom ${FLASHROM_PARAM} -w "$BACKUP"
|
| +echo "test files remain in ${TMPDIR}"
|
| +cd "${OLDDIR}"
|
| +exit ${rc}
|
|
|