| #!/bin/bash |
| # |
| # Copyright (C) 2009 Red Hat, Inc. |
| # Copyright (c) 2000-2003,2006 Silicon Graphics, Inc. All Rights Reserved. |
| # |
| # 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. |
| # |
| # This program is distributed in the hope that it would 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, see <http://www.gnu.org/licenses/>. |
| # |
| # |
| # setup and check for config parameters, and in particular |
| # |
| # EMAIL - email of the script runner. |
| # TEST_DIR - scratch test directory |
| # |
| # - These can be added to $HOST_CONFIG_DIR (witch default to ./config) |
| # below or a separate local configuration file can be used (using |
| # the HOST_OPTIONS variable). |
| # - This script is shared by the stress test system and the auto-qa |
| # system (includes both regression test and benchmark components). |
| # - this script shouldn't make any assertions about filesystem |
| # validity or mountedness. |
| # |
| |
| # all tests should use a common language setting to prevent golden |
| # output mismatches. |
| export LANG=C |
| |
| PATH=".:$PATH" |
| |
| HOST=`hostname -s 2> /dev/null` |
| HOSTOS=`uname -s` |
| |
| EMAIL=root@localhost # where auto-qa will send its status messages |
| export HOST_OPTIONS=${HOST_OPTIONS:=local.config} |
| export CHECK_OPTIONS=${CHECK_OPTIONS:="-g auto"} |
| export PWD=`pwd` |
| |
| export _QEMU_HANDLE=0 |
| |
| # $1 = prog to look for, $2* = default pathnames if not found in $PATH |
| set_prog_path() |
| { |
| p=`command -v $1 2> /dev/null` |
| if [ -n "$p" -a -x "$p" ]; then |
| echo $p |
| return 0 |
| fi |
| p=$1 |
| |
| shift |
| for f; do |
| if [ -x $f ]; then |
| echo $f |
| return 0 |
| fi |
| done |
| |
| echo "" |
| return 1 |
| } |
| |
| _fatal() |
| { |
| echo "$*" |
| status=1 |
| exit 1 |
| } |
| |
| export PERL_PROG="`set_prog_path perl`" |
| [ "$PERL_PROG" = "" ] && _fatal "perl not found" |
| |
| export AWK_PROG="`set_prog_path awk`" |
| [ "$AWK_PROG" = "" ] && _fatal "awk not found" |
| |
| export SED_PROG="`set_prog_path sed`" |
| [ "$SED_PROG" = "" ] && _fatal "sed not found" |
| |
| export BC_PROG="`set_prog_path bc`" |
| [ "$BC_PROG" = "" ] && _fatal "bc not found" |
| |
| export PS_ALL_FLAGS="-ef" |
| |
| if [ -z "$QEMU_PROG" ]; then |
| export QEMU_PROG="`set_prog_path qemu`" |
| fi |
| |
| if [ -z "$QEMU_IMG_PROG" ]; then |
| export QEMU_IMG_PROG="`set_prog_path qemu-img`" |
| fi |
| |
| if [ -z "$QEMU_IO_PROG" ]; then |
| export QEMU_IO_PROG="`set_prog_path qemu-io`" |
| fi |
| |
| if [ -z "$QEMU_NBD_PROG" ]; then |
| export QEMU_NBD_PROG="`set_prog_path qemu-nbd`" |
| fi |
| |
| _qemu_wrapper() |
| { |
| ( |
| if [ -n "${QEMU_NEED_PID}" ]; then |
| echo $BASHPID > "${TEST_DIR}/qemu-${_QEMU_HANDLE}.pid" |
| fi |
| exec "$QEMU_PROG" $QEMU_OPTIONS "$@" |
| ) |
| } |
| |
| _qemu_img_wrapper() |
| { |
| (exec "$QEMU_IMG_PROG" $QEMU_IMG_OPTIONS "$@") |
| } |
| |
| _qemu_io_wrapper() |
| { |
| local VALGRIND_LOGFILE=/tmp/$$.valgrind |
| local RETVAL |
| ( |
| if [ "${VALGRIND_QEMU}" == "y" ]; then |
| exec valgrind --log-file="${VALGRIND_LOGFILE}" --error-exitcode=99 "$QEMU_IO_PROG" $QEMU_IO_OPTIONS "$@" |
| else |
| exec "$QEMU_IO_PROG" $QEMU_IO_OPTIONS "$@" |
| fi |
| ) |
| RETVAL=$? |
| if [ "${VALGRIND_QEMU}" == "y" ]; then |
| if [ $RETVAL == 99 ]; then |
| cat "${VALGRIND_LOGFILE}" |
| fi |
| rm -f "${VALGRIND_LOGFILE}" |
| fi |
| (exit $RETVAL) |
| } |
| |
| _qemu_nbd_wrapper() |
| { |
| ( |
| echo $BASHPID > "${TEST_DIR}/qemu-nbd.pid" |
| exec "$QEMU_NBD_PROG" $QEMU_NBD_OPTIONS "$@" |
| ) |
| } |
| |
| export QEMU=_qemu_wrapper |
| export QEMU_IMG=_qemu_img_wrapper |
| export QEMU_IO=_qemu_io_wrapper |
| export QEMU_NBD=_qemu_nbd_wrapper |
| |
| default_machine=$($QEMU -machine help | sed -n '/(default)/ s/ .*//p') |
| default_alias_machine=$($QEMU -machine help | \ |
| sed -n "/(alias of $default_machine)/ { s/ .*//p; q; }") |
| if [[ "$default_alias_machine" ]]; then |
| default_machine="$default_alias_machine" |
| fi |
| |
| export QEMU_DEFAULT_MACHINE="$default_machine" |
| |
| [ -f /etc/qemu-iotest.config ] && . /etc/qemu-iotest.config |
| |
| if [ -z "$TEST_DIR" ]; then |
| TEST_DIR=`pwd`/scratch |
| fi |
| |
| if [ ! -e "$TEST_DIR" ]; then |
| mkdir "$TEST_DIR" |
| fi |
| |
| if [ ! -d "$TEST_DIR" ]; then |
| echo "common.config: Error: \$TEST_DIR ($TEST_DIR) is not a directory" |
| exit 1 |
| fi |
| |
| export TEST_DIR |
| |
| if [ -z "$SAMPLE_IMG_DIR" ]; then |
| SAMPLE_IMG_DIR="$source_iotests/sample_images" |
| fi |
| |
| if [ ! -d "$SAMPLE_IMG_DIR" ]; then |
| echo "common.config: Error: \$SAMPLE_IMG_DIR ($SAMPLE_IMG_DIR) is not a directory" |
| exit 1 |
| fi |
| |
| export SAMPLE_IMG_DIR |
| |
| _readlink() |
| { |
| if [ $# -ne 1 ]; then |
| echo "Usage: _readlink filename" 1>&2 |
| exit 1 |
| fi |
| |
| perl -e "\$in=\"$1\";" -e ' |
| $lnk = readlink($in); |
| if ($lnk =~ m!^/.*!) { |
| print "$lnk\n"; |
| } |
| else { |
| chomp($dir = `dirname $in`); |
| print "$dir/$lnk\n"; |
| }' |
| } |
| |
| # make sure this script returns success |
| true |