123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 |
- #!/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.
- . "$(pwd)/common.sh"
- if [ -z "$DEBUG" ]; then
- DEBUG=0
- fi
- 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 [ $? -ne 0 ] ; then
- echo "Could not create temporary directory"
- exit ${EXIT_FAILURE}
- fi
- which flashrom > /dev/null
- 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 scripts and flashrom to temporary directory.
- cp common.sh "${tmpdir}/"
- 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"
- export BACKUP="backup.bin"
- system_flashrom -r "$BACKUP"
- 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}\""
- if [ $DEBUG -eq 1 ]; then
- sh -x ${TEST}
- else
- sh ${TEST}
- fi
- 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"
- system_flashrom -w "$BACKUP"
- echo "test files remain in ${tmpdir}"
- cd "${olddir}"
- exit ${rc}
|