#!/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 . # # # 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="${TEST_DIR}"/$$.valgrind local QEMU_IO_ARGS="$QEMU_IO_OPTIONS" if [ "$IMGOPTSSYNTAX" = "true" ]; then QEMU_IO_ARGS="--image-opts $QEMU_IO_ARGS" if [ -n "$IMGKEYSECRET" ]; then QEMU_IO_ARGS="--object secret,id=keysec0,data=$IMGKEYSECRET $QEMU_IO_ARGS" fi fi local RETVAL ( if [ "${VALGRIND_QEMU}" == "y" ]; then exec valgrind --log-file="${VALGRIND_LOGFILE}" --error-exitcode=99 "$QEMU_IO_PROG" $QEMU_IO_ARGS "$@" else exec "$QEMU_IO_PROG" $QEMU_IO_ARGS "$@" 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 QEMU_IMG_EXTRA_ARGS= if [ "$IMGOPTSSYNTAX" = "true" ]; then QEMU_IMG_EXTRA_ARGS="--image-opts $QEMU_IMG_EXTRA_ARGS" if [ -n "$IMGKEYSECRET" ]; then QEMU_IMG_EXTRA_ARGS="--object secret,id=keysec0,data=$IMGKEYSECRET $QEMU_IMG_EXTRA_ARGS" fi fi export QEMU_IMG_EXTRA_ARGS 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