3 # Copyright (C) 2009 Red Hat, Inc.
4 # Copyright (c) 2000-2003,2006 Silicon Graphics, Inc. All Rights Reserved.
6 # This program is free software; you can redistribute it and/or
7 # modify it under the terms of the GNU General Public License as
8 # published by the Free Software Foundation.
10 # This program is distributed in the hope that it would be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 # GNU General Public License for more details.
15 # You should have received a copy of the GNU General Public License
16 # along with this program. If not, see <http://www.gnu.org/licenses/>.
19 # setup and check for config parameters, and in particular
21 # EMAIL - email of the script runner.
22 # TEST_DIR - scratch test directory
24 # - These can be added to $HOST_CONFIG_DIR (witch default to ./config)
25 # below or a separate local configuration file can be used (using
26 # the HOST_OPTIONS variable).
27 # - This script is shared by the stress test system and the auto-qa
28 # system (includes both regression test and benchmark components).
29 # - this script shouldn't make any assertions about filesystem
30 # validity or mountedness.
33 # all tests should use a common language setting to prevent golden
39 HOST
=`hostname -s 2> /dev/null`
42 EMAIL
=root@localhost
# where auto-qa will send its status messages
43 export HOST_OPTIONS
=${HOST_OPTIONS:=local.config}
44 export CHECK_OPTIONS
=${CHECK_OPTIONS:="-g auto"}
49 # $1 = prog to look for, $2* = default pathnames if not found in $PATH
52 p
=`command -v $1 2> /dev/null`
53 if [ -n "$p" -a -x "$p" ]; then
78 export PERL_PROG
="`set_prog_path perl`"
79 [ "$PERL_PROG" = "" ] && _fatal
"perl not found"
81 export AWK_PROG
="`set_prog_path awk`"
82 [ "$AWK_PROG" = "" ] && _fatal
"awk not found"
84 export SED_PROG
="`set_prog_path sed`"
85 [ "$SED_PROG" = "" ] && _fatal
"sed not found"
87 export BC_PROG
="`set_prog_path bc`"
88 [ "$BC_PROG" = "" ] && _fatal
"bc not found"
90 export PS_ALL_FLAGS
="-ef"
92 if [ -z "$QEMU_PROG" ]; then
93 export QEMU_PROG
="`set_prog_path qemu`"
96 if [ -z "$QEMU_IMG_PROG" ]; then
97 export QEMU_IMG_PROG
="`set_prog_path qemu-img`"
100 if [ -z "$QEMU_IO_PROG" ]; then
101 export QEMU_IO_PROG
="`set_prog_path qemu-io`"
104 if [ -z "$QEMU_NBD_PROG" ]; then
105 export QEMU_NBD_PROG
="`set_prog_path qemu-nbd`"
108 if [ -z "$QEMU_VXHS_PROG" ]; then
109 export QEMU_VXHS_PROG
="`set_prog_path qnio_server`"
115 if [ -n "${QEMU_NEED_PID}" ]; then
116 echo $BASHPID > "${QEMU_TEST_DIR}/qemu-${_QEMU_HANDLE}.pid"
118 exec "$QEMU_PROG" $QEMU_OPTIONS "$@"
124 (exec "$QEMU_IMG_PROG" $QEMU_IMG_OPTIONS "$@")
129 local VALGRIND_LOGFILE
="${TEST_DIR}"/$$.valgrind
130 local QEMU_IO_ARGS
="$QEMU_IO_OPTIONS"
131 if [ "$IMGOPTSSYNTAX" = "true" ]; then
132 QEMU_IO_ARGS
="--image-opts $QEMU_IO_ARGS"
133 if [ -n "$IMGKEYSECRET" ]; then
134 QEMU_IO_ARGS
="--object secret,id=keysec0,data=$IMGKEYSECRET $QEMU_IO_ARGS"
139 if [ "${VALGRIND_QEMU}" == "y" ]; then
140 exec valgrind
--log-file="${VALGRIND_LOGFILE}" --error-exitcode=99 "$QEMU_IO_PROG" $QEMU_IO_ARGS "$@"
142 exec "$QEMU_IO_PROG" $QEMU_IO_ARGS "$@"
146 if [ "${VALGRIND_QEMU}" == "y" ]; then
147 if [ $RETVAL == 99 ]; then
148 cat "${VALGRIND_LOGFILE}"
150 rm -f "${VALGRIND_LOGFILE}"
158 echo $BASHPID > "${QEMU_TEST_DIR}/qemu-nbd.pid"
159 exec "$QEMU_NBD_PROG" $QEMU_NBD_OPTIONS "$@"
166 echo $BASHPID > "${TEST_DIR}/qemu-vxhs.pid"
167 exec "$QEMU_VXHS_PROG" $QEMU_VXHS_OPTIONS "$@"
171 export QEMU
=_qemu_wrapper
172 export QEMU_IMG
=_qemu_img_wrapper
173 export QEMU_IO
=_qemu_io_wrapper
174 export QEMU_NBD
=_qemu_nbd_wrapper
175 export QEMU_VXHS
=_qemu_vxhs_wrapper
178 if [ "$IMGOPTSSYNTAX" = "true" ]; then
179 QEMU_IMG_EXTRA_ARGS
="--image-opts $QEMU_IMG_EXTRA_ARGS"
180 if [ -n "$IMGKEYSECRET" ]; then
181 QEMU_IMG_EXTRA_ARGS
="--object secret,id=keysec0,data=$IMGKEYSECRET $QEMU_IMG_EXTRA_ARGS"
184 export QEMU_IMG_EXTRA_ARGS
187 default_machine
=$
($QEMU -machine help |
sed -n '/(default)/ s/ .*//p')
188 default_alias_machine
=$
($QEMU -machine help | \
189 sed -n "/(alias of $default_machine)/ { s/ .*//p; q; }")
190 if [[ "$default_alias_machine" ]]; then
191 default_machine
="$default_alias_machine"
194 export QEMU_DEFAULT_MACHINE
="$default_machine"
196 [ -f /etc
/qemu-iotest.config
] && .
/etc
/qemu-iotest.config
198 if [ -z "$TEST_DIR" ]; then
199 TEST_DIR
=`pwd`/scratch
202 QEMU_TEST_DIR
="${TEST_DIR}"
204 if [ ! -e "$TEST_DIR" ]; then
208 if [ ! -d "$TEST_DIR" ]; then
209 echo "common.config: Error: \$TEST_DIR ($TEST_DIR) is not a directory"
215 if [ -z "$SAMPLE_IMG_DIR" ]; then
216 SAMPLE_IMG_DIR
="$source_iotests/sample_images"
219 if [ ! -d "$SAMPLE_IMG_DIR" ]; then
220 echo "common.config: Error: \$SAMPLE_IMG_DIR ($SAMPLE_IMG_DIR) is not a directory"
224 export SAMPLE_IMG_DIR
228 if [ $# -ne 1 ]; then
229 echo "Usage: _readlink filename" 1>&2
233 perl
-e "\$in=\"$1\";" -e '
234 $lnk = readlink($in);
235 if ($lnk =~ m!^/.*!) {
239 chomp($dir = `dirname $in`);
244 # make sure this script returns success