This converts the qcow2 driver to make use of the QCryptoBlock APIs for encrypting image content, using the legacy QCow2 AES scheme. With this change it is now required to use the QCryptoSecret object for providing passwords, instead of the current block password APIs / interactive prompting. $QEMU \ -object secret,id=sec0,file=/home/berrange/encrypted.pw \ -drive file=/home/berrange/encrypted.qcow2,encrypt.key-secret=sec0 The test 087 could be simplified since there is no longer a difference in behaviour when using blockdev_add with encrypted images for the running vs stopped CPU state. Signed-off-by: Daniel P. Berrange <berrange@redhat.com> Message-id: 20170623162419.26068-12-berrange@redhat.com Reviewed-by: Alberto Garcia <berto@igalia.com> Signed-off-by: Max Reitz <mreitz@redhat.com>
460 lines
11 KiB
Bash
460 lines
11 KiB
Bash
#!/bin/bash
|
|
#
|
|
# Copyright (C) 2009 Red Hat, Inc.
|
|
# Copyright (c) 2000-2005 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/>.
|
|
#
|
|
#
|
|
# common procedures for QA scripts
|
|
#
|
|
|
|
_setenvironment()
|
|
{
|
|
MSGVERB="text:action"
|
|
export MSGVERB
|
|
}
|
|
|
|
rm -f "$OUTPUT_DIR/$iam.out"
|
|
_setenvironment
|
|
|
|
check=${check-true}
|
|
|
|
diff="diff -u"
|
|
verbose=false
|
|
debug=false
|
|
group=false
|
|
xgroup=false
|
|
imgopts=false
|
|
showme=false
|
|
sortme=false
|
|
expunge=true
|
|
have_test_arg=false
|
|
randomize=false
|
|
cachemode=false
|
|
rm -f $tmp.list $tmp.tmp $tmp.sed
|
|
|
|
export IMGFMT=raw
|
|
export IMGFMT_GENERIC=true
|
|
export IMGPROTO=file
|
|
export IMGOPTS=""
|
|
export CACHEMODE="writeback"
|
|
export QEMU_IO_OPTIONS=""
|
|
export QEMU_IO_OPTIONS_NO_FMT=""
|
|
export CACHEMODE_IS_DEFAULT=true
|
|
export QEMU_OPTIONS="-nodefaults -machine accel=qtest"
|
|
export VALGRIND_QEMU=
|
|
export IMGKEYSECRET=
|
|
export IMGOPTSSYNTAX=false
|
|
|
|
for r
|
|
do
|
|
|
|
if $group
|
|
then
|
|
# arg after -g
|
|
group_list=`sed -n <"$source_iotests/group" -e 's/$/ /' -e "/^[0-9][0-9][0-9].* $r /"'{
|
|
s/ .*//p
|
|
}'`
|
|
if [ -z "$group_list" ]
|
|
then
|
|
echo "Group \"$r\" is empty or not defined?"
|
|
exit 1
|
|
fi
|
|
[ ! -s $tmp.list ] && touch $tmp.list
|
|
for t in $group_list
|
|
do
|
|
if grep -s "^$t\$" $tmp.list >/dev/null
|
|
then
|
|
:
|
|
else
|
|
echo "$t" >>$tmp.list
|
|
fi
|
|
done
|
|
group=false
|
|
continue
|
|
|
|
elif $xgroup
|
|
then
|
|
# arg after -x
|
|
# Populate $tmp.list with all tests
|
|
awk '/^[0-9]{3,}/ {print $1}' "${source_iotests}/group" > $tmp.list 2>/dev/null
|
|
group_list=`sed -n <"$source_iotests/group" -e 's/$/ /' -e "/^[0-9][0-9][0-9].* $r /"'{
|
|
s/ .*//p
|
|
}'`
|
|
if [ -z "$group_list" ]
|
|
then
|
|
echo "Group \"$r\" is empty or not defined?"
|
|
exit 1
|
|
fi
|
|
numsed=0
|
|
rm -f $tmp.sed
|
|
for t in $group_list
|
|
do
|
|
if [ $numsed -gt 100 ]
|
|
then
|
|
sed -f $tmp.sed <$tmp.list >$tmp.tmp
|
|
mv $tmp.tmp $tmp.list
|
|
numsed=0
|
|
rm -f $tmp.sed
|
|
fi
|
|
echo "/^$t\$/d" >>$tmp.sed
|
|
numsed=`expr $numsed + 1`
|
|
done
|
|
sed -f $tmp.sed <$tmp.list >$tmp.tmp
|
|
mv $tmp.tmp $tmp.list
|
|
xgroup=false
|
|
continue
|
|
|
|
elif $imgopts
|
|
then
|
|
IMGOPTS="$r"
|
|
imgopts=false
|
|
continue
|
|
elif $cachemode
|
|
then
|
|
CACHEMODE="$r"
|
|
CACHEMODE_IS_DEFAULT=false
|
|
cachemode=false
|
|
continue
|
|
fi
|
|
|
|
xpand=true
|
|
case "$r"
|
|
in
|
|
|
|
-\? | -h | --help) # usage
|
|
echo "Usage: $0 [options] [testlist]"'
|
|
|
|
common options
|
|
-v verbose
|
|
-d debug
|
|
|
|
image format options
|
|
-raw test raw (default)
|
|
-bochs test bochs
|
|
-cloop test cloop
|
|
-parallels test parallels
|
|
-qcow test qcow
|
|
-qcow2 test qcow2
|
|
-qed test qed
|
|
-vdi test vdi
|
|
-vpc test vpc
|
|
-vhdx test vhdx
|
|
-vmdk test vmdk
|
|
-luks test luks
|
|
|
|
image protocol options
|
|
-file test file (default)
|
|
-rbd test rbd
|
|
-sheepdog test sheepdog
|
|
-nbd test nbd
|
|
-ssh test ssh
|
|
-nfs test nfs
|
|
-vxhs test vxhs
|
|
|
|
other options
|
|
-xdiff graphical mode diff
|
|
-nocache use O_DIRECT on backing file
|
|
-misalign misalign memory allocations
|
|
-n show me, do not run tests
|
|
-o options -o options to pass to qemu-img create/convert
|
|
-T output timestamps
|
|
-r randomize test order
|
|
-c mode cache mode
|
|
|
|
testlist options
|
|
-g group[,group...] include tests from these groups
|
|
-x group[,group...] exclude tests from these groups
|
|
NNN include test NNN
|
|
NNN-NNN include test range (eg. 012-021)
|
|
'
|
|
exit 0
|
|
;;
|
|
|
|
-raw)
|
|
IMGFMT=raw
|
|
xpand=false
|
|
;;
|
|
|
|
-bochs)
|
|
IMGFMT=bochs
|
|
IMGFMT_GENERIC=false
|
|
xpand=false
|
|
;;
|
|
|
|
-cloop)
|
|
IMGFMT=cloop
|
|
IMGFMT_GENERIC=false
|
|
xpand=false
|
|
;;
|
|
|
|
-parallels)
|
|
IMGFMT=parallels
|
|
IMGFMT_GENERIC=false
|
|
xpand=false
|
|
;;
|
|
|
|
-qcow)
|
|
IMGFMT=qcow
|
|
xpand=false
|
|
;;
|
|
|
|
-qcow2)
|
|
IMGFMT=qcow2
|
|
xpand=false
|
|
;;
|
|
|
|
-luks)
|
|
IMGOPTSSYNTAX=true
|
|
IMGFMT=luks
|
|
IMGKEYSECRET=123456
|
|
xpand=false
|
|
;;
|
|
|
|
-qed)
|
|
IMGFMT=qed
|
|
xpand=false
|
|
;;
|
|
|
|
-vdi)
|
|
IMGFMT=vdi
|
|
xpand=false
|
|
;;
|
|
|
|
-vmdk)
|
|
IMGFMT=vmdk
|
|
xpand=false
|
|
;;
|
|
|
|
-vpc)
|
|
IMGFMT=vpc
|
|
xpand=false
|
|
;;
|
|
|
|
-vhdx)
|
|
IMGFMT=vhdx
|
|
xpand=false
|
|
;;
|
|
|
|
-file)
|
|
IMGPROTO=file
|
|
xpand=false
|
|
;;
|
|
|
|
-rbd)
|
|
IMGPROTO=rbd
|
|
xpand=false
|
|
;;
|
|
|
|
-sheepdog)
|
|
IMGPROTO=sheepdog
|
|
xpand=false
|
|
;;
|
|
|
|
-nbd)
|
|
IMGPROTO=nbd
|
|
xpand=false
|
|
;;
|
|
|
|
-vxhs)
|
|
IMGPROTO=vxhs
|
|
xpand=false
|
|
;;
|
|
|
|
-ssh)
|
|
IMGPROTO=ssh
|
|
xpand=false
|
|
;;
|
|
|
|
-nfs)
|
|
IMGPROTO=nfs
|
|
xpand=false
|
|
;;
|
|
|
|
-nocache)
|
|
CACHEMODE="none"
|
|
CACHEMODE_IS_DEFAULT=false
|
|
xpand=false
|
|
;;
|
|
|
|
-misalign)
|
|
QEMU_IO_OPTIONS="$QEMU_IO_OPTIONS --misalign"
|
|
xpand=false
|
|
;;
|
|
|
|
-valgrind)
|
|
VALGRIND_QEMU='y'
|
|
xpand=false
|
|
;;
|
|
|
|
-g) # -g group ... pick from group file
|
|
group=true
|
|
xpand=false
|
|
;;
|
|
|
|
-xdiff) # graphical diff mode
|
|
xpand=false
|
|
|
|
if [ ! -z "$DISPLAY" ]
|
|
then
|
|
command -v xdiff >/dev/null 2>&1 && diff=xdiff
|
|
command -v gdiff >/dev/null 2>&1 && diff=gdiff
|
|
command -v tkdiff >/dev/null 2>&1 && diff=tkdiff
|
|
command -v xxdiff >/dev/null 2>&1 && diff=xxdiff
|
|
fi
|
|
;;
|
|
|
|
-n) # show me, don't do it
|
|
showme=true
|
|
xpand=false
|
|
;;
|
|
-o)
|
|
imgopts=true
|
|
xpand=false
|
|
;;
|
|
-c)
|
|
cachemode=true
|
|
xpand=false
|
|
;;
|
|
-r) # randomize test order
|
|
randomize=true
|
|
xpand=false
|
|
;;
|
|
|
|
-T) # turn on timestamp output
|
|
timestamp=true
|
|
xpand=false
|
|
;;
|
|
|
|
-v)
|
|
verbose=true
|
|
xpand=false
|
|
;;
|
|
-d)
|
|
debug=true
|
|
xpand=false
|
|
;;
|
|
-x) # -x group ... exclude from group file
|
|
xgroup=true
|
|
xpand=false
|
|
;;
|
|
'[0-9][0-9][0-9] [0-9][0-9][0-9][0-9]')
|
|
echo "No tests?"
|
|
status=1
|
|
exit $status
|
|
;;
|
|
|
|
[0-9]*-[0-9]*)
|
|
eval `echo $r | sed -e 's/^/start=/' -e 's/-/ end=/'`
|
|
;;
|
|
|
|
[0-9]*-)
|
|
eval `echo $r | sed -e 's/^/start=/' -e 's/-//'`
|
|
end=`echo [0-9][0-9][0-9] [0-9][0-9][0-9][0-9] | sed -e 's/\[0-9]//g' -e 's/ *$//' -e 's/.* //'`
|
|
if [ -z "$end" ]
|
|
then
|
|
echo "No tests in range \"$r\"?"
|
|
status=1
|
|
exit $status
|
|
fi
|
|
;;
|
|
|
|
*)
|
|
start=$r
|
|
end=$r
|
|
;;
|
|
|
|
esac
|
|
|
|
# get rid of leading 0s as can be interpreted as octal
|
|
start=`echo $start | sed 's/^0*//'`
|
|
end=`echo $end | sed 's/^0*//'`
|
|
|
|
if $xpand
|
|
then
|
|
have_test_arg=true
|
|
$AWK_PROG </dev/null '
|
|
BEGIN { for (t='$start'; t<='$end'; t++) printf "%03d\n",t }' \
|
|
| while read id
|
|
do
|
|
if grep -s "^$id " "$source_iotests/group" >/dev/null
|
|
then
|
|
# in group file ... OK
|
|
echo $id >>$tmp.list
|
|
else
|
|
if [ -f expunged ] && $expunge && egrep "^$id([ ]|\$)" expunged >/dev/null
|
|
then
|
|
# expunged ... will be reported, but not run, later
|
|
echo $id >>$tmp.list
|
|
else
|
|
# oops
|
|
if [ "$start" == "$end" -a "$id" == "$end" ]
|
|
then
|
|
echo "$id - unknown test"
|
|
exit 1
|
|
else
|
|
echo "$id - unknown test, ignored"
|
|
fi
|
|
fi
|
|
fi
|
|
done || exit 1
|
|
fi
|
|
|
|
done
|
|
|
|
# Set qemu-io cache mode with $CACHEMODE we have
|
|
QEMU_IO_OPTIONS="$QEMU_IO_OPTIONS --cache $CACHEMODE"
|
|
|
|
QEMU_IO_OPTIONS_NO_FMT="$QEMU_IO_OPTIONS"
|
|
if [ "$IMGOPTSSYNTAX" != "true" ]; then
|
|
QEMU_IO_OPTIONS="$QEMU_IO_OPTIONS -f $IMGFMT"
|
|
fi
|
|
|
|
# Set default options for qemu-img create -o if they were not specified
|
|
_set_default_imgopts
|
|
|
|
if [ -s $tmp.list ]
|
|
then
|
|
# found some valid test numbers ... this is good
|
|
:
|
|
else
|
|
if $have_test_arg
|
|
then
|
|
# had test numbers, but none in group file ... do nothing
|
|
touch $tmp.list
|
|
else
|
|
# no test numbers, do everything from group file
|
|
sed -n -e '/^[0-9][0-9][0-9]*/s/[ ].*//p' <"$source_iotests/group" >$tmp.list
|
|
fi
|
|
fi
|
|
|
|
# should be sort -n, but this did not work for Linux when this
|
|
# was ported from IRIX
|
|
#
|
|
list=`sort $tmp.list`
|
|
rm -f $tmp.list $tmp.tmp $tmp.sed
|
|
|
|
if $randomize
|
|
then
|
|
list=`echo $list | awk -f randomize.awk`
|
|
fi
|
|
|
|
[ "$QEMU" = "" ] && _fatal "qemu not found"
|
|
[ "$QEMU_IMG" = "" ] && _fatal "qemu-img not found"
|
|
[ "$QEMU_IO" = "" ] && _fatal "qemu-io not found"
|
|
|
|
if [ "$IMGPROTO" = "nbd" ] ; then
|
|
[ "$QEMU_NBD" = "" ] && _fatal "qemu-nbd not found"
|
|
fi
|