2010-04-26 13:44:05 +04:00
|
|
|
#!/bin/bash
|
2009-06-22 20:29:05 +04:00
|
|
|
#
|
|
|
|
# Copyright (C) 2009 Red Hat, Inc.
|
|
|
|
# Copyright (c) 2000-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; 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
|
2009-07-16 21:26:54 +04:00
|
|
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
2009-06-22 20:29:05 +04:00
|
|
|
#
|
|
|
|
|
|
|
|
dd()
|
|
|
|
{
|
|
|
|
if [ "$HOSTOS" == "Linux" ]
|
2013-09-04 15:16:04 +04:00
|
|
|
then
|
|
|
|
command dd --help | grep noxfer > /dev/null 2>&1
|
|
|
|
|
|
|
|
if [ "$?" -eq 0 ]
|
|
|
|
then
|
|
|
|
command dd status=noxfer $@
|
|
|
|
else
|
|
|
|
command dd $@
|
|
|
|
fi
|
2009-06-22 20:29:05 +04:00
|
|
|
else
|
2013-09-04 15:16:04 +04:00
|
|
|
command dd $@
|
2009-06-22 20:29:05 +04:00
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
2013-08-06 11:44:49 +04:00
|
|
|
# poke_file 'test.img' 512 '\xff\xfe'
|
|
|
|
poke_file()
|
|
|
|
{
|
|
|
|
printf "$3" | dd "of=$1" bs=1 "seek=$2" conv=notrunc &>/dev/null
|
|
|
|
}
|
|
|
|
|
2009-06-22 20:29:05 +04:00
|
|
|
# we need common.config
|
|
|
|
if [ "$iam" != "check" ]
|
|
|
|
then
|
|
|
|
if ! . ./common.config
|
|
|
|
then
|
|
|
|
echo "$iam: failed to source common.config"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
|
|
|
# make sure we have a standard umask
|
|
|
|
umask 022
|
|
|
|
|
2011-01-17 20:01:17 +03:00
|
|
|
if [ "$IMGPROTO" = "file" ]; then
|
|
|
|
TEST_IMG=$TEST_DIR/t.$IMGFMT
|
2012-11-02 17:01:23 +04:00
|
|
|
elif [ "$IMGPROTO" = "nbd" ]; then
|
|
|
|
TEST_IMG_FILE=$TEST_DIR/t.$IMGFMT
|
|
|
|
TEST_IMG="nbd:127.0.0.1:10810"
|
2013-04-09 18:30:55 +04:00
|
|
|
elif [ "$IMGPROTO" = "ssh" ]; then
|
|
|
|
TEST_IMG_FILE=$TEST_DIR/t.$IMGFMT
|
|
|
|
TEST_IMG="ssh://127.0.0.1$TEST_IMG_FILE"
|
2014-02-03 13:26:17 +04:00
|
|
|
elif [ "$IMGPROTO" = "nfs" ]; then
|
|
|
|
TEST_DIR="nfs://127.0.0.1/$TEST_DIR"
|
|
|
|
TEST_IMG=$TEST_DIR/t.$IMGFMT
|
2014-07-23 18:07:33 +04:00
|
|
|
elif [ "$IMGPROTO" = "archipelago" ]; then
|
|
|
|
TEST_IMG="archipelago:at.$IMGFMT"
|
2011-01-17 20:01:17 +03:00
|
|
|
else
|
|
|
|
TEST_IMG=$IMGPROTO:$TEST_DIR/t.$IMGFMT
|
|
|
|
fi
|
2009-06-22 20:29:05 +04:00
|
|
|
|
2012-06-28 18:55:54 +04:00
|
|
|
function valgrind_qemu_io()
|
|
|
|
{
|
|
|
|
valgrind --log-file=/tmp/$$.valgrind --error-exitcode=99 $REAL_QEMU_IO "$@"
|
|
|
|
if [ $? != 0 ]; then
|
|
|
|
cat /tmp/$$.valgrind
|
|
|
|
fi
|
|
|
|
rm -f /tmp/$$.valgrind
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2012-03-27 15:45:14 +04:00
|
|
|
_optstr_add()
|
|
|
|
{
|
|
|
|
if [ -n "$1" ]; then
|
|
|
|
echo "$1,$2"
|
|
|
|
else
|
|
|
|
echo "$2"
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
_set_default_imgopts()
|
|
|
|
{
|
|
|
|
if [ "$IMGFMT" == "qcow2" ] && ! (echo "$IMGOPTS" | grep "compat=" > /dev/null); then
|
|
|
|
IMGOPTS=$(_optstr_add "$IMGOPTS" "compat=1.1")
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
2013-09-25 16:12:20 +04:00
|
|
|
_use_sample_img()
|
|
|
|
{
|
|
|
|
SAMPLE_IMG_FILE="${1%\.bz2}"
|
|
|
|
TEST_IMG="$TEST_DIR/$SAMPLE_IMG_FILE"
|
|
|
|
bzcat "$SAMPLE_IMG_DIR/$1" > "$TEST_IMG"
|
|
|
|
if [ $? -ne 0 ]
|
|
|
|
then
|
|
|
|
echo "_use_sample_img error, cannot extract '$SAMPLE_IMG_DIR/$1'"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
2009-06-22 20:29:05 +04:00
|
|
|
_make_test_img()
|
|
|
|
{
|
|
|
|
# extra qemu-img options can be added by tests
|
|
|
|
# at least one argument (the image size) needs to be added
|
2012-03-14 22:57:23 +04:00
|
|
|
local extra_img_options=""
|
|
|
|
local image_size=$*
|
2012-03-27 15:45:14 +04:00
|
|
|
local optstr=""
|
2012-11-02 17:01:23 +04:00
|
|
|
local img_name=""
|
2013-10-31 19:57:37 +04:00
|
|
|
local use_backing=0
|
|
|
|
local backing_file=""
|
2012-11-02 17:01:23 +04:00
|
|
|
|
|
|
|
if [ -n "$TEST_IMG_FILE" ]; then
|
|
|
|
img_name=$TEST_IMG_FILE
|
|
|
|
else
|
|
|
|
img_name=$TEST_IMG
|
|
|
|
fi
|
2012-03-27 15:45:14 +04:00
|
|
|
|
|
|
|
if [ -n "$IMGOPTS" ]; then
|
|
|
|
optstr=$(_optstr_add "$optstr" "$IMGOPTS")
|
|
|
|
fi
|
2009-06-22 20:29:05 +04:00
|
|
|
|
2012-03-14 22:57:23 +04:00
|
|
|
if [ "$1" = "-b" ]; then
|
2013-10-31 19:57:37 +04:00
|
|
|
use_backing=1
|
|
|
|
backing_file=$2
|
2012-03-14 22:57:23 +04:00
|
|
|
image_size=$3
|
|
|
|
fi
|
2010-10-31 23:10:20 +03:00
|
|
|
if [ \( "$IMGFMT" = "qcow2" -o "$IMGFMT" = "qed" \) -a -n "$CLUSTER_SIZE" ]; then
|
2012-03-27 15:45:14 +04:00
|
|
|
optstr=$(_optstr_add "$optstr" "cluster_size=$CLUSTER_SIZE")
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [ -n "$optstr" ]; then
|
|
|
|
extra_img_options="-o $optstr $extra_img_options"
|
2009-10-01 21:29:59 +04:00
|
|
|
fi
|
|
|
|
|
2009-06-22 20:29:05 +04:00
|
|
|
# XXX(hch): have global image options?
|
2013-10-31 19:57:37 +04:00
|
|
|
(
|
|
|
|
if [ $use_backing = 1 ]; then
|
|
|
|
$QEMU_IMG create -f $IMGFMT $extra_img_options -b "$backing_file" "$img_name" $image_size 2>&1
|
|
|
|
else
|
|
|
|
$QEMU_IMG create -f $IMGFMT $extra_img_options "$img_name" $image_size 2>&1
|
|
|
|
fi
|
2014-08-19 21:28:58 +04:00
|
|
|
) | _filter_img_create
|
2012-11-02 17:01:23 +04:00
|
|
|
|
|
|
|
# Start an NBD server on the image file, which is what we'll be talking to
|
|
|
|
if [ $IMGPROTO = "nbd" ]; then
|
|
|
|
eval "$QEMU_NBD -v -t -b 127.0.0.1 -p 10810 $TEST_IMG_FILE &"
|
|
|
|
QEMU_NBD_PID=$!
|
|
|
|
sleep 1 # FIXME: qemu-nbd needs to be listening before we continue
|
|
|
|
fi
|
2009-06-22 20:29:05 +04:00
|
|
|
}
|
|
|
|
|
2013-11-26 10:40:34 +04:00
|
|
|
_rm_test_img()
|
|
|
|
{
|
|
|
|
local img=$1
|
|
|
|
if [ "$IMGFMT" = "vmdk" ]; then
|
|
|
|
# Remove all the extents for vmdk
|
2014-04-11 00:47:39 +04:00
|
|
|
"$QEMU_IMG" info "$img" 2>/dev/null | grep 'filename:' | cut -f 2 -d: \
|
2013-11-26 10:40:34 +04:00
|
|
|
| xargs -I {} rm -f "{}"
|
|
|
|
fi
|
2014-04-11 00:47:39 +04:00
|
|
|
rm -f "$img"
|
2013-11-26 10:40:34 +04:00
|
|
|
}
|
|
|
|
|
2009-06-22 20:29:05 +04:00
|
|
|
_cleanup_test_img()
|
|
|
|
{
|
2011-01-17 20:01:17 +03:00
|
|
|
case "$IMGPROTO" in
|
|
|
|
|
2012-11-02 17:01:23 +04:00
|
|
|
nbd)
|
2014-12-02 20:32:48 +03:00
|
|
|
if [ -n "$QEMU_NBD_PID" ]; then
|
|
|
|
kill $QEMU_NBD_PID
|
|
|
|
fi
|
2013-09-25 16:12:22 +04:00
|
|
|
rm -f "$TEST_IMG_FILE"
|
2012-11-02 17:01:23 +04:00
|
|
|
;;
|
2011-01-17 20:01:17 +03:00
|
|
|
file)
|
2013-11-26 10:40:34 +04:00
|
|
|
_rm_test_img "$TEST_DIR/t.$IMGFMT"
|
|
|
|
_rm_test_img "$TEST_DIR/t.$IMGFMT.orig"
|
|
|
|
_rm_test_img "$TEST_DIR/t.$IMGFMT.base"
|
2013-09-25 16:12:20 +04:00
|
|
|
if [ -n "$SAMPLE_IMG_FILE" ]
|
|
|
|
then
|
|
|
|
rm -f "$TEST_DIR/$SAMPLE_IMG_FILE"
|
|
|
|
fi
|
2011-01-17 20:01:17 +03:00
|
|
|
;;
|
|
|
|
|
|
|
|
rbd)
|
2014-01-09 00:05:38 +04:00
|
|
|
rbd --no-progress rm "$TEST_DIR/t.$IMGFMT" > /dev/null
|
2011-01-17 20:01:17 +03:00
|
|
|
;;
|
|
|
|
|
2014-07-23 18:07:33 +04:00
|
|
|
archipelago)
|
|
|
|
vlmc remove "at.$IMGFMT" > /dev/null
|
|
|
|
;;
|
|
|
|
|
2011-01-17 20:01:17 +03:00
|
|
|
sheepdog)
|
2013-09-25 16:12:22 +04:00
|
|
|
collie vdi delete "$TEST_DIR/t.$IMGFMT"
|
2011-01-17 20:01:17 +03:00
|
|
|
;;
|
|
|
|
|
|
|
|
esac
|
2009-06-22 20:29:05 +04:00
|
|
|
}
|
|
|
|
|
|
|
|
_check_test_img()
|
|
|
|
{
|
2013-09-25 16:12:22 +04:00
|
|
|
$QEMU_IMG check "$@" -f $IMGFMT "$TEST_IMG" 2>&1 | _filter_testdir | \
|
2013-02-07 20:15:04 +04:00
|
|
|
sed -e '/allocated.*fragmented.*compressed clusters/d' \
|
2013-01-28 15:59:46 +04:00
|
|
|
-e 's/qemu-img: This image format does not support checks/No errors were found on the image./' \
|
|
|
|
-e '/Image end offset: [0-9]\+/d'
|
2009-06-22 20:29:05 +04:00
|
|
|
}
|
|
|
|
|
2012-10-17 16:02:32 +04:00
|
|
|
_img_info()
|
|
|
|
{
|
2014-11-27 17:03:53 +03:00
|
|
|
if [[ "$1" == "--format-specific" ]]; then
|
|
|
|
local format_specific=1
|
|
|
|
shift
|
|
|
|
else
|
|
|
|
local format_specific=0
|
|
|
|
fi
|
|
|
|
|
qemu-iotests: Discard specific info in _img_info
In _img_info, filter out additional information specific to the image
format provided by qemu-img info, since tests designed for multiple
image formats would produce different outputs for every image format
otherwise.
In a human-readable dump, that new information will always be last for
each "image information block" (multiple blocks are emitted when
inspecting the backing file chain). Every block is separated by an empty
line. Therefore, in this case, everything starting with the line "Format
specific information:" up to that empty line (or EOF, if it is the last
block) has to be stripped.
The JSON dump will always emit pretty JSON data. Therefore, the opening
and closing braces of every object will be on lines which are indented
by exactly the same amount, and all lines in between will have more
indentation. Thus, in this case, everything starting with a line
matching the regular expression /^ *"format-specific": {/ until /^ *},?/
has to be stripped, where the number of spaces at the beginning of the
respective lines is equal.
Signed-off-by: Max Reitz <mreitz@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
2013-10-09 12:46:19 +04:00
|
|
|
discard=0
|
|
|
|
regex_json_spec_start='^ *"format-specific": \{'
|
2013-09-25 16:12:22 +04:00
|
|
|
$QEMU_IMG info "$@" "$TEST_IMG" 2>&1 | \
|
2012-10-17 16:02:32 +04:00
|
|
|
sed -e "s#$IMGPROTO:$TEST_DIR#TEST_DIR#g" \
|
|
|
|
-e "s#$TEST_DIR#TEST_DIR#g" \
|
|
|
|
-e "s#$IMGFMT#IMGFMT#g" \
|
|
|
|
-e "/^disk size:/ D" \
|
qemu-iotests: Discard specific info in _img_info
In _img_info, filter out additional information specific to the image
format provided by qemu-img info, since tests designed for multiple
image formats would produce different outputs for every image format
otherwise.
In a human-readable dump, that new information will always be last for
each "image information block" (multiple blocks are emitted when
inspecting the backing file chain). Every block is separated by an empty
line. Therefore, in this case, everything starting with the line "Format
specific information:" up to that empty line (or EOF, if it is the last
block) has to be stripped.
The JSON dump will always emit pretty JSON data. Therefore, the opening
and closing braces of every object will be on lines which are indented
by exactly the same amount, and all lines in between will have more
indentation. Thus, in this case, everything starting with a line
matching the regular expression /^ *"format-specific": {/ until /^ *},?/
has to be stripped, where the number of spaces at the beginning of the
respective lines is equal.
Signed-off-by: Max Reitz <mreitz@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
2013-10-09 12:46:19 +04:00
|
|
|
-e "/actual-size/ D" | \
|
|
|
|
while IFS='' read line; do
|
2014-11-27 17:03:53 +03:00
|
|
|
if [[ $format_specific == 1 ]]; then
|
|
|
|
discard=0
|
|
|
|
elif [[ $line == "Format specific information:" ]]; then
|
qemu-iotests: Discard specific info in _img_info
In _img_info, filter out additional information specific to the image
format provided by qemu-img info, since tests designed for multiple
image formats would produce different outputs for every image format
otherwise.
In a human-readable dump, that new information will always be last for
each "image information block" (multiple blocks are emitted when
inspecting the backing file chain). Every block is separated by an empty
line. Therefore, in this case, everything starting with the line "Format
specific information:" up to that empty line (or EOF, if it is the last
block) has to be stripped.
The JSON dump will always emit pretty JSON data. Therefore, the opening
and closing braces of every object will be on lines which are indented
by exactly the same amount, and all lines in between will have more
indentation. Thus, in this case, everything starting with a line
matching the regular expression /^ *"format-specific": {/ until /^ *},?/
has to be stripped, where the number of spaces at the beginning of the
respective lines is equal.
Signed-off-by: Max Reitz <mreitz@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
2013-10-09 12:46:19 +04:00
|
|
|
discard=1
|
|
|
|
elif [[ $line =~ $regex_json_spec_start ]]; then
|
|
|
|
discard=2
|
|
|
|
regex_json_spec_end="^${line%%[^ ]*}\\},? *$"
|
|
|
|
fi
|
|
|
|
if [[ $discard == 0 ]]; then
|
|
|
|
echo "$line"
|
|
|
|
elif [[ $discard == 1 && ! $line ]]; then
|
|
|
|
echo
|
|
|
|
discard=0
|
|
|
|
elif [[ $discard == 2 && $line =~ $regex_json_spec_end ]]; then
|
|
|
|
discard=0
|
|
|
|
fi
|
|
|
|
done
|
2012-10-17 16:02:32 +04:00
|
|
|
}
|
|
|
|
|
2009-06-22 20:29:05 +04:00
|
|
|
_get_pids_by_name()
|
|
|
|
{
|
|
|
|
if [ $# -ne 1 ]
|
|
|
|
then
|
2013-09-04 15:16:04 +04:00
|
|
|
echo "Usage: _get_pids_by_name process-name" 1>&2
|
|
|
|
exit 1
|
2009-06-22 20:29:05 +04:00
|
|
|
fi
|
|
|
|
|
|
|
|
# Algorithm ... all ps(1) variants have a time of the form MM:SS or
|
|
|
|
# HH:MM:SS before the psargs field, use this as the search anchor.
|
|
|
|
#
|
|
|
|
# Matches with $1 (process-name) occur if the first psarg is $1
|
|
|
|
# or ends in /$1 ... the matching uses sed's regular expressions,
|
|
|
|
# so passing a regex into $1 will work.
|
|
|
|
|
|
|
|
ps $PS_ALL_FLAGS \
|
|
|
|
| sed -n \
|
2013-09-04 15:16:04 +04:00
|
|
|
-e 's/$/ /' \
|
|
|
|
-e 's/[ ][ ]*/ /g' \
|
|
|
|
-e 's/^ //' \
|
|
|
|
-e 's/^[^ ]* //' \
|
|
|
|
-e "/[0-9]:[0-9][0-9] *[^ ]*\/$1 /s/ .*//p" \
|
|
|
|
-e "/[0-9]:[0-9][0-9] *$1 /s/ .*//p"
|
2009-06-22 20:29:05 +04:00
|
|
|
}
|
|
|
|
|
|
|
|
# fqdn for localhost
|
|
|
|
#
|
|
|
|
_get_fqdn()
|
|
|
|
{
|
|
|
|
host=`hostname`
|
|
|
|
$NSLOOKUP_PROG $host | $AWK_PROG '{ if ($1 == "Name:") print $2 }'
|
|
|
|
}
|
|
|
|
|
|
|
|
# check if run as root
|
|
|
|
#
|
|
|
|
_need_to_be_root()
|
|
|
|
{
|
|
|
|
id=`id | $SED_PROG -e 's/(.*//' -e 's/.*=//'`
|
|
|
|
if [ "$id" -ne 0 ]
|
|
|
|
then
|
2013-09-04 15:16:04 +04:00
|
|
|
echo "Arrgh ... you need to be root (not uid=$id) to run this test"
|
|
|
|
exit 1
|
2009-06-22 20:29:05 +04:00
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
# Do a command, log it to $seq.full, optionally test return status
|
|
|
|
# and die if command fails. If called with one argument _do executes the
|
|
|
|
# command, logs it, and returns its exit status. With two arguments _do
|
|
|
|
# first prints the message passed in the first argument, and then "done"
|
|
|
|
# or "fail" depending on the return status of the command passed in the
|
|
|
|
# second argument. If the command fails and the variable _do_die_on_error
|
|
|
|
# is set to "always" or the two argument form is used and _do_die_on_error
|
|
|
|
# is set to "message_only" _do will print an error message to
|
|
|
|
# $seq.out and exit.
|
|
|
|
|
|
|
|
_do()
|
|
|
|
{
|
|
|
|
if [ $# -eq 1 ]; then
|
2013-09-04 15:16:04 +04:00
|
|
|
_cmd=$1
|
2009-06-22 20:29:05 +04:00
|
|
|
elif [ $# -eq 2 ]; then
|
2013-09-04 15:16:04 +04:00
|
|
|
_note=$1
|
|
|
|
_cmd=$2
|
|
|
|
echo -n "$_note... "
|
2009-06-22 20:29:05 +04:00
|
|
|
else
|
2013-09-04 15:16:04 +04:00
|
|
|
echo "Usage: _do [note] cmd" 1>&2
|
|
|
|
status=1; exit
|
2009-06-22 20:29:05 +04:00
|
|
|
fi
|
|
|
|
|
2014-05-25 01:24:55 +04:00
|
|
|
(eval "echo '---' \"$_cmd\"") >>"$OUTPUT_DIR/$seq.full"
|
2009-06-22 20:29:05 +04:00
|
|
|
(eval "$_cmd") >$tmp._out 2>&1; ret=$?
|
2014-05-25 01:24:55 +04:00
|
|
|
cat $tmp._out >>"$OUTPUT_DIR/$seq.full"
|
2009-06-22 20:29:05 +04:00
|
|
|
if [ $# -eq 2 ]; then
|
2013-09-04 15:16:04 +04:00
|
|
|
if [ $ret -eq 0 ]; then
|
|
|
|
echo "done"
|
|
|
|
else
|
|
|
|
echo "fail"
|
|
|
|
fi
|
2009-06-22 20:29:05 +04:00
|
|
|
fi
|
|
|
|
if [ $ret -ne 0 ] \
|
2013-09-04 15:16:04 +04:00
|
|
|
&& [ "$_do_die_on_error" = "always" \
|
|
|
|
-o \( $# -eq 2 -a "$_do_die_on_error" = "message_only" \) ]
|
2009-06-22 20:29:05 +04:00
|
|
|
then
|
2013-09-04 15:16:04 +04:00
|
|
|
[ $# -ne 2 ] && echo
|
|
|
|
eval "echo \"$_cmd\" failed \(returned $ret\): see $seq.full"
|
|
|
|
status=1; exit
|
2009-06-22 20:29:05 +04:00
|
|
|
fi
|
|
|
|
|
|
|
|
return $ret
|
|
|
|
}
|
|
|
|
|
|
|
|
# bail out, setting up .notrun file
|
|
|
|
#
|
|
|
|
_notrun()
|
|
|
|
{
|
2014-05-25 01:24:55 +04:00
|
|
|
echo "$*" >"$OUTPUT_DIR/$seq.notrun"
|
2009-06-22 20:29:05 +04:00
|
|
|
echo "$seq not run: $*"
|
|
|
|
status=0
|
|
|
|
exit
|
|
|
|
}
|
|
|
|
|
|
|
|
# just plain bail out
|
|
|
|
#
|
|
|
|
_fail()
|
|
|
|
{
|
2014-05-25 01:24:55 +04:00
|
|
|
echo "$*" | tee -a "$OUTPUT_DIR/$seq.full"
|
2009-06-22 20:29:05 +04:00
|
|
|
echo "(see $seq.full for details)"
|
|
|
|
status=1
|
|
|
|
exit 1
|
|
|
|
}
|
|
|
|
|
|
|
|
# tests whether $IMGFMT is one of the supported image formats for a test
|
|
|
|
#
|
|
|
|
_supported_fmt()
|
|
|
|
{
|
2014-03-26 16:05:23 +04:00
|
|
|
# "generic" is suitable for most image formats. For some formats it doesn't
|
|
|
|
# work, however (most notably read-only formats), so they can opt out by
|
|
|
|
# setting IMGFMT_GENERIC to false.
|
2009-06-22 20:29:05 +04:00
|
|
|
for f; do
|
2013-09-27 16:48:15 +04:00
|
|
|
if [ "$f" = "$IMGFMT" -o "$f" = "generic" -a "$IMGFMT_GENERIC" = "true" ]; then
|
2013-09-04 15:16:04 +04:00
|
|
|
return
|
|
|
|
fi
|
2009-06-22 20:29:05 +04:00
|
|
|
done
|
|
|
|
|
|
|
|
_notrun "not suitable for this image format: $IMGFMT"
|
|
|
|
}
|
|
|
|
|
2011-01-17 20:01:17 +03:00
|
|
|
# tests whether $IMGPROTO is one of the supported image protocols for a test
|
|
|
|
#
|
|
|
|
_supported_proto()
|
|
|
|
{
|
|
|
|
for f; do
|
2013-09-04 15:16:04 +04:00
|
|
|
if [ "$f" = "$IMGPROTO" -o "$f" = "generic" ]; then
|
|
|
|
return
|
|
|
|
fi
|
2011-01-17 20:01:17 +03:00
|
|
|
done
|
|
|
|
|
|
|
|
_notrun "not suitable for this image protocol: $IMGPROTO"
|
|
|
|
}
|
|
|
|
|
2009-06-22 20:29:05 +04:00
|
|
|
# tests whether the host OS is one of the supported OSes for a test
|
|
|
|
#
|
|
|
|
_supported_os()
|
|
|
|
{
|
|
|
|
for h
|
|
|
|
do
|
2013-09-04 15:16:04 +04:00
|
|
|
if [ "$h" = "$HOSTOS" ]
|
|
|
|
then
|
|
|
|
return
|
|
|
|
fi
|
2009-06-22 20:29:05 +04:00
|
|
|
done
|
|
|
|
|
|
|
|
_notrun "not suitable for this OS: $HOSTOS"
|
|
|
|
}
|
|
|
|
|
2013-12-04 05:07:00 +04:00
|
|
|
_supported_cache_modes()
|
2012-08-09 16:05:57 +04:00
|
|
|
{
|
2013-12-04 05:07:00 +04:00
|
|
|
for mode; do
|
|
|
|
if [ "$mode" = "$CACHEMODE" ]; then
|
|
|
|
return
|
|
|
|
fi
|
2012-08-09 16:05:57 +04:00
|
|
|
done
|
2013-12-04 05:07:00 +04:00
|
|
|
_notrun "not suitable for cache mode: $CACHEMODE"
|
|
|
|
}
|
|
|
|
|
|
|
|
_default_cache_mode()
|
|
|
|
{
|
|
|
|
if $CACHEMODE_IS_DEFAULT; then
|
|
|
|
CACHEMODE="$1"
|
|
|
|
QEMU_IO="$QEMU_IO --cache $1"
|
|
|
|
return
|
|
|
|
fi
|
2012-08-09 16:05:57 +04:00
|
|
|
}
|
|
|
|
|
2013-11-26 10:40:32 +04:00
|
|
|
_unsupported_imgopts()
|
|
|
|
{
|
|
|
|
for bad_opt
|
|
|
|
do
|
|
|
|
if echo "$IMGOPTS" | grep -q 2>/dev/null "$bad_opt"
|
|
|
|
then
|
|
|
|
_notrun "not suitable for image option: $bad_opt"
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
2009-06-22 20:29:05 +04:00
|
|
|
# this test requires that a specified command (executable) exists
|
|
|
|
#
|
|
|
|
_require_command()
|
|
|
|
{
|
2013-12-04 13:10:56 +04:00
|
|
|
eval c=\$$1
|
|
|
|
[ -x "$c" ] || _notrun "$1 utility required, skipped this test"
|
2009-06-22 20:29:05 +04:00
|
|
|
}
|
|
|
|
|
|
|
|
_full_imgfmt_details()
|
|
|
|
{
|
2012-03-27 15:45:14 +04:00
|
|
|
if [ -n "$IMGOPTS" ]; then
|
|
|
|
echo "$IMGFMT ($IMGOPTS)"
|
|
|
|
else
|
|
|
|
echo "$IMGFMT"
|
|
|
|
fi
|
2009-06-22 20:29:05 +04:00
|
|
|
}
|
|
|
|
|
2011-01-17 20:01:17 +03:00
|
|
|
_full_imgproto_details()
|
|
|
|
{
|
|
|
|
echo "$IMGPROTO"
|
|
|
|
}
|
|
|
|
|
2009-06-22 20:29:05 +04:00
|
|
|
_full_platform_details()
|
|
|
|
{
|
|
|
|
os=`uname -s`
|
|
|
|
host=`hostname -s`
|
|
|
|
kernel=`uname -r`
|
|
|
|
platform=`uname -m`
|
|
|
|
echo "$os/$platform $host $kernel"
|
|
|
|
}
|
|
|
|
|
|
|
|
_link_out_file()
|
|
|
|
{
|
|
|
|
if [ -z "$1" ]; then
|
|
|
|
echo Error must pass \$seq.
|
|
|
|
exit
|
|
|
|
fi
|
|
|
|
rm -f $1
|
|
|
|
if [ "`uname`" == "IRIX64" ] || [ "`uname`" == "IRIX" ]; then
|
|
|
|
ln -s $1.irix $1
|
|
|
|
elif [ "`uname`" == "Linux" ]; then
|
|
|
|
ln -s $1.linux $1
|
|
|
|
else
|
|
|
|
echo Error test $seq does not run on the operating system: `uname`
|
|
|
|
exit
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
_die()
|
|
|
|
{
|
|
|
|
echo $@
|
|
|
|
exit 1
|
|
|
|
}
|
|
|
|
|
|
|
|
# make sure this script returns success
|
2015-01-04 04:53:48 +03:00
|
|
|
true
|