2019-03-07 17:58:38 +03:00
|
|
|
#!/usr/bin/env bash
|
2021-01-16 16:44:19 +03:00
|
|
|
# group: rw
|
2013-04-09 17:56:13 +04:00
|
|
|
#
|
|
|
|
# Test command line configuration of block devices and driver-specific options
|
|
|
|
#
|
|
|
|
# Copyright (C) 2013 Red Hat, Inc.
|
|
|
|
#
|
|
|
|
# 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
|
|
|
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
#
|
|
|
|
|
|
|
|
# creator
|
|
|
|
owner=kwolf@redhat.com
|
|
|
|
|
|
|
|
seq=`basename $0`
|
|
|
|
echo "QA output created by $seq"
|
|
|
|
|
|
|
|
status=1 # failure is the default!
|
|
|
|
|
|
|
|
_cleanup()
|
|
|
|
{
|
|
|
|
_cleanup_test_img
|
|
|
|
}
|
|
|
|
trap "_cleanup; exit \$status" 0 1 2 3 15
|
|
|
|
|
|
|
|
# get standard environment, filters and checks
|
|
|
|
. ./common.rc
|
|
|
|
. ./common.filter
|
|
|
|
|
|
|
|
_supported_fmt qcow2
|
|
|
|
_supported_proto file
|
2015-02-19 01:40:48 +03:00
|
|
|
# A compat=0.10 image is created in this test which does not support anything
|
2019-11-07 19:37:07 +03:00
|
|
|
# other than refcount_bits=16;
|
|
|
|
# it also will not support an external data file
|
|
|
|
_unsupported_imgopts 'refcount_bits=\([^1]\|.\([^6]\|$\)\)' data_file
|
2019-12-18 19:15:41 +03:00
|
|
|
_require_drivers nbd
|
2013-04-09 17:56:13 +04:00
|
|
|
|
2018-11-17 00:50:02 +03:00
|
|
|
do_run_qemu()
|
2013-04-09 17:56:13 +04:00
|
|
|
{
|
|
|
|
echo Testing: "$@"
|
2013-09-22 16:05:07 +04:00
|
|
|
(
|
|
|
|
if ! test -t 0; then
|
|
|
|
while read cmd; do
|
|
|
|
echo $cmd
|
|
|
|
done
|
|
|
|
fi
|
|
|
|
echo quit
|
|
|
|
) | $QEMU -nographic -monitor stdio -serial none "$@"
|
2013-04-09 17:56:13 +04:00
|
|
|
echo
|
|
|
|
}
|
|
|
|
|
2018-11-17 00:50:02 +03:00
|
|
|
run_qemu()
|
2013-04-09 17:56:13 +04:00
|
|
|
{
|
2017-04-13 20:19:51 +03:00
|
|
|
do_run_qemu "$@" 2>&1 | _filter_testdir | _filter_qemu |
|
|
|
|
_filter_generated_node_ids | _filter_hmp
|
2013-04-09 17:56:13 +04:00
|
|
|
}
|
|
|
|
|
|
|
|
size=128M
|
2016-01-04 08:29:20 +03:00
|
|
|
device_id="drive0"
|
2013-04-09 17:56:13 +04:00
|
|
|
|
|
|
|
_make_test_img $size
|
2013-10-31 19:57:41 +04:00
|
|
|
cp "$TEST_IMG" "$TEST_IMG.orig"
|
|
|
|
mv "$TEST_IMG" "$TEST_IMG.base"
|
iotests: Specify explicit backing format where sensible
There are many existing qcow2 images that specify a backing file but
no format. This has been the source of CVEs in the past, but has
become more prominent of a problem now that libvirt has switched to
-blockdev. With older -drive, at least the probing was always done by
qemu (so the only risk of a changed format between successive boots of
a guest was if qemu was upgraded and probed differently). But with
newer -blockdev, libvirt must specify a format; if libvirt guesses raw
where the image was formatted, this results in data corruption visible
to the guest; conversely, if libvirt guesses qcow2 where qemu was
using raw, this can result in potential security holes, so modern
libvirt instead refuses to use images without explicit backing format.
The change in libvirt to reject images without explicit backing format
has pointed out that a number of tools have been far too reliant on
probing in the past. It's time to set a better example in our own
iotests of properly setting this parameter.
iotest calls to create, rebase, and convert are all impacted to some
degree. It's a bit annoying that we are inconsistent on command line
- while all of those accept -o backing_file=...,backing_fmt=..., the
shortcuts are different: create and rebase have -b and -F, while
convert has -B but no -F. (amend has no shortcuts, but the previous
patch just deprecated the use of amend to change backing chains).
Signed-off-by: Eric Blake <eblake@redhat.com>
Message-Id: <20200706203954.341758-9-eblake@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
2020-07-06 23:39:52 +03:00
|
|
|
_make_test_img -b "$TEST_IMG.base" -F $IMGFMT $size
|
2013-04-09 17:56:13 +04:00
|
|
|
|
|
|
|
echo
|
|
|
|
echo === Unknown option ===
|
|
|
|
echo
|
|
|
|
|
2016-01-04 08:29:20 +03:00
|
|
|
run_qemu -drive file="$TEST_IMG",format=qcow2,unknown_opt=,if=none,id=$device_id
|
|
|
|
run_qemu -drive file="$TEST_IMG",format=qcow2,unknown_opt=on,if=none,id=$device_id
|
|
|
|
run_qemu -drive file="$TEST_IMG",format=qcow2,unknown_opt=1234,if=none,id=$device_id
|
|
|
|
run_qemu -drive file="$TEST_IMG",format=qcow2,unknown_opt=foo,if=none,id=$device_id
|
2013-04-09 17:56:13 +04:00
|
|
|
|
2014-03-06 19:34:46 +04:00
|
|
|
echo
|
|
|
|
echo === Unknown protocol option ===
|
|
|
|
echo
|
|
|
|
|
|
|
|
run_qemu -drive file="$TEST_IMG",format=qcow2,file.unknown_opt=
|
|
|
|
run_qemu -drive file="$TEST_IMG",format=qcow2,file.unknown_opt=on
|
|
|
|
run_qemu -drive file="$TEST_IMG",format=qcow2,file.unknown_opt=1234
|
|
|
|
run_qemu -drive file="$TEST_IMG",format=qcow2,file.unknown_opt=foo
|
|
|
|
|
2013-08-08 19:44:52 +04:00
|
|
|
echo
|
|
|
|
echo === Invalid format ===
|
|
|
|
echo
|
|
|
|
|
|
|
|
run_qemu -drive file="$TEST_IMG",format=foo
|
|
|
|
run_qemu -drive file="$TEST_IMG",driver=foo
|
2014-05-27 12:50:29 +04:00
|
|
|
run_qemu -drive file="$TEST_IMG",driver=raw,format=qcow2
|
2015-02-05 21:58:13 +03:00
|
|
|
run_qemu -drive file="$TEST_IMG",driver=qcow2,format=qcow2
|
2013-08-08 19:44:52 +04:00
|
|
|
|
2018-07-04 14:28:29 +03:00
|
|
|
echo
|
|
|
|
echo === Node names ===
|
|
|
|
echo
|
|
|
|
|
|
|
|
# Maximum length: 31 characters
|
|
|
|
run_qemu -drive file="$TEST_IMG",node-name=x123456789012345678901234567890
|
|
|
|
run_qemu -drive file="$TEST_IMG",node-name=x1234567890123456789012345678901
|
|
|
|
|
|
|
|
# First character must be alphabetic
|
|
|
|
# Following characters alphanumeric or -._
|
|
|
|
run_qemu -drive file="$TEST_IMG",node-name=All-Types.of_all0wed_chars
|
|
|
|
run_qemu -drive file="$TEST_IMG",node-name=123foo
|
|
|
|
run_qemu -drive file="$TEST_IMG",node-name=_foo
|
|
|
|
run_qemu -drive file="$TEST_IMG",node-name=foo#12
|
|
|
|
|
2015-03-03 17:59:26 +03:00
|
|
|
echo
|
|
|
|
echo === Device without drive ===
|
|
|
|
echo
|
|
|
|
|
2017-09-13 12:10:37 +03:00
|
|
|
case "$QEMU_DEFAULT_MACHINE" in
|
|
|
|
s390-ccw-virtio)
|
|
|
|
virtio_scsi=virtio-scsi-ccw
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
virtio_scsi=virtio-scsi-pci
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
|
|
|
run_qemu -device $virtio_scsi -device scsi-hd |
|
|
|
|
sed -e "s/$virtio_scsi/VIRTIO_SCSI/"
|
2015-03-03 17:59:26 +03:00
|
|
|
|
2013-09-22 16:05:07 +04:00
|
|
|
echo
|
|
|
|
echo === Overriding backing file ===
|
|
|
|
echo
|
|
|
|
|
2016-01-04 08:29:20 +03:00
|
|
|
echo "info block" | run_qemu -drive file="$TEST_IMG",driver=qcow2,backing.file.filename="$TEST_IMG.orig",if=none,id=$device_id -nodefaults\
|
2015-10-13 02:36:50 +03:00
|
|
|
| _filter_generated_node_ids
|
2013-04-09 17:56:13 +04:00
|
|
|
|
2014-06-04 17:09:35 +04:00
|
|
|
# Drivers that don't support backing files
|
|
|
|
run_qemu -drive file="$TEST_IMG",driver=raw,backing.file.filename="$TEST_IMG.orig"
|
|
|
|
run_qemu -drive file="$TEST_IMG",file.backing.driver=file,file.backing.filename="$TEST_IMG.orig"
|
|
|
|
run_qemu -drive file="$TEST_IMG",file.backing.driver=qcow2,file.backing.file.filename="$TEST_IMG.orig"
|
|
|
|
|
2013-04-09 17:56:13 +04:00
|
|
|
echo
|
|
|
|
echo === Enable and disable lazy refcounting on the command line, plus some invalid values ===
|
|
|
|
echo
|
|
|
|
|
2017-11-23 05:08:26 +03:00
|
|
|
_make_test_img -o compat=1.1 "$size"
|
|
|
|
|
2013-09-25 16:12:22 +04:00
|
|
|
run_qemu -drive file="$TEST_IMG",format=qcow2,lazy-refcounts=on
|
|
|
|
run_qemu -drive file="$TEST_IMG",format=qcow2,lazy-refcounts=off
|
|
|
|
run_qemu -drive file="$TEST_IMG",format=qcow2,lazy-refcounts=
|
|
|
|
run_qemu -drive file="$TEST_IMG",format=qcow2,lazy-refcounts=42
|
|
|
|
run_qemu -drive file="$TEST_IMG",format=qcow2,lazy-refcounts=foo
|
2013-04-09 17:56:13 +04:00
|
|
|
|
|
|
|
|
|
|
|
echo
|
|
|
|
echo === With version 2 images enabling lazy refcounts must fail ===
|
|
|
|
echo
|
|
|
|
|
2019-11-07 19:36:56 +03:00
|
|
|
_make_test_img -o compat=0.10 $size
|
2013-04-09 17:56:13 +04:00
|
|
|
|
2013-09-25 16:12:22 +04:00
|
|
|
run_qemu -drive file="$TEST_IMG",format=qcow2,lazy-refcounts=on
|
|
|
|
run_qemu -drive file="$TEST_IMG",format=qcow2,lazy-refcounts=off
|
2013-04-09 17:56:13 +04:00
|
|
|
|
|
|
|
echo
|
|
|
|
echo === No medium ===
|
|
|
|
echo
|
|
|
|
|
2016-01-04 08:29:20 +03:00
|
|
|
case "$QEMU_DEFAULT_MACHINE" in
|
|
|
|
pc)
|
|
|
|
run_qemu -drive if=floppy
|
|
|
|
run_qemu -drive if=ide,media=cdrom
|
|
|
|
run_qemu -drive if=ide
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
;;
|
|
|
|
esac
|
2013-04-09 17:56:13 +04:00
|
|
|
|
|
|
|
run_qemu -drive if=virtio
|
|
|
|
|
2015-12-03 13:01:30 +03:00
|
|
|
case "$QEMU_DEFAULT_MACHINE" in
|
|
|
|
pc)
|
|
|
|
run_qemu -drive if=none,id=disk -device ide-cd,drive=disk
|
|
|
|
run_qemu -drive if=none,id=disk -device lsi53c895a -device scsi-cd,drive=disk
|
|
|
|
run_qemu -drive if=none,id=disk -device ide-drive,drive=disk
|
|
|
|
run_qemu -drive if=none,id=disk -device ide-hd,drive=disk
|
|
|
|
run_qemu -drive if=none,id=disk -device lsi53c895a -device scsi-disk,drive=disk
|
|
|
|
run_qemu -drive if=none,id=disk -device lsi53c895a -device scsi-hd,drive=disk
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
;;
|
|
|
|
esac
|
2013-04-09 17:56:13 +04:00
|
|
|
|
2019-05-23 17:09:19 +03:00
|
|
|
echo
|
|
|
|
echo === Attach to node in non-default iothread ===
|
|
|
|
echo
|
|
|
|
|
|
|
|
case "$QEMU_DEFAULT_MACHINE" in
|
|
|
|
pc)
|
|
|
|
iothread="-drive file=$TEST_IMG,if=none,node-name=disk -object iothread,id=thread0 -device virtio-scsi,iothread=thread0,id=virtio-scsi0 -device scsi-hd,bus=virtio-scsi0.0,drive=disk,share-rw=on"
|
|
|
|
|
|
|
|
# Can't add a device in the main thread while virtio-scsi0 uses the node
|
|
|
|
run_qemu $iothread -device ide-hd,drive=disk,share-rw=on
|
|
|
|
run_qemu $iothread -device virtio-blk-pci,drive=disk,share-rw=on
|
|
|
|
run_qemu $iothread -device lsi53c895a,id=lsi0 -device scsi-hd,bus=lsi0.0,drive=disk,share-rw=on
|
|
|
|
run_qemu $iothread -device virtio-scsi,id=virtio-scsi1 -device scsi-hd,bus=virtio-scsi1.0,drive=disk,share-rw=on
|
|
|
|
|
|
|
|
# virtio-blk enables the iothread only when the driver initialises the
|
|
|
|
# device, so a second virtio-blk device can't be added even with the
|
|
|
|
# same iothread. virtio-scsi allows this.
|
|
|
|
run_qemu $iothread -device virtio-blk-pci,drive=disk,iohtread=iothread0,share-rw=on
|
|
|
|
run_qemu $iothread -device virtio-scsi,id=virtio-scsi1,iothread=thread0 -device scsi-hd,bus=virtio-scsi1.0,drive=disk,share-rw=on
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
2013-04-09 17:56:13 +04:00
|
|
|
echo
|
|
|
|
echo === Read-only ===
|
|
|
|
echo
|
|
|
|
|
2015-12-03 13:01:30 +03:00
|
|
|
case "$QEMU_DEFAULT_MACHINE" in
|
|
|
|
pc)
|
|
|
|
run_qemu -drive file="$TEST_IMG",if=floppy,readonly=on
|
|
|
|
run_qemu -drive file="$TEST_IMG",if=ide,media=cdrom,readonly=on
|
|
|
|
run_qemu -drive file="$TEST_IMG",if=ide,readonly=on
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
;;
|
|
|
|
esac
|
2013-04-09 17:56:13 +04:00
|
|
|
|
2013-09-25 16:12:22 +04:00
|
|
|
run_qemu -drive file="$TEST_IMG",if=virtio,readonly=on
|
2013-04-09 17:56:13 +04:00
|
|
|
|
2015-12-03 13:01:30 +03:00
|
|
|
case "$QEMU_DEFAULT_MACHINE" in
|
|
|
|
pc)
|
|
|
|
run_qemu -drive file="$TEST_IMG",if=none,id=disk,readonly=on -device ide-cd,drive=disk
|
|
|
|
run_qemu -drive file="$TEST_IMG",if=none,id=disk,readonly=on -device lsi53c895a -device scsi-cd,drive=disk
|
|
|
|
run_qemu -drive file="$TEST_IMG",if=none,id=disk,readonly=on -device ide-drive,drive=disk
|
|
|
|
run_qemu -drive file="$TEST_IMG",if=none,id=disk,readonly=on -device ide-hd,drive=disk
|
|
|
|
run_qemu -drive file="$TEST_IMG",if=none,id=disk,readonly=on -device lsi53c895a -device scsi-disk,drive=disk
|
|
|
|
run_qemu -drive file="$TEST_IMG",if=none,id=disk,readonly=on -device lsi53c895a -device scsi-hd,drive=disk
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
;;
|
|
|
|
esac
|
2013-04-09 17:56:13 +04:00
|
|
|
|
|
|
|
echo
|
|
|
|
echo === Cache modes ===
|
|
|
|
echo
|
|
|
|
|
|
|
|
# Cannot use the test image because cache=none might not work on the host FS
|
|
|
|
# Use cdrom so that we won't get errors about missing media
|
|
|
|
|
2019-07-15 19:07:59 +03:00
|
|
|
run_qemu -drive driver=null-co,read-zeroes=on,cache=none
|
|
|
|
run_qemu -drive driver=null-co,read-zeroes=on,cache=directsync
|
|
|
|
run_qemu -drive driver=null-co,read-zeroes=on,cache=writeback
|
|
|
|
run_qemu -drive driver=null-co,read-zeroes=on,cache=writethrough
|
|
|
|
run_qemu -drive driver=null-co,read-zeroes=on,cache=unsafe
|
2015-05-07 15:41:30 +03:00
|
|
|
run_qemu -drive driver=null-co,cache=invalid_value
|
2013-04-09 17:56:13 +04:00
|
|
|
|
2015-05-08 19:03:15 +03:00
|
|
|
# Can't test direct=on here because O_DIRECT might not be supported on this FS
|
|
|
|
# Test 142 checks the direct=on cases
|
|
|
|
|
|
|
|
for cache in writeback writethrough unsafe invalid_value; do
|
tests: Avoid non-portable 'echo -ARG'
POSIX says that backslashes in the arguments to 'echo', as well as
any use of 'echo -n' and 'echo -e', are non-portable; it recommends
people should favor 'printf' instead. This is definitely true where
we do not control which shell is running (such as in makefile snippets
or in documentation examples). But even for scripts where we
require bash (and therefore, where echo does what we want by default),
it is still possible to use 'shopt -s xpg_echo' to change bash's
behavior of echo. And setting a good example never hurts when we are
not sure if a snippet will be copied from a bash-only script to a
general shell script (although I don't change the use of non-portable
\e for ESC when we know the running shell is bash).
Replace 'echo -n "..."' with 'printf %s "..."', and 'echo -e "..."'
with 'printf %b "...\n"', with the optimization that the %s/%b
argument can be omitted if the string being printed is a strict
literal with no '%', '$', or '`' (we could technically also make
this optimization when there are $ or `` substitutions but where
we can prove their results will not be problematic, but proving
that such substitutions are safe makes the patch less trivial
compared to just being consistent).
In the qemu-iotests check script, fix unusual shell quoting
that would result in word-splitting if 'date' outputs a space.
In test 051, take an opportunity to shorten the line.
In test 068, get rid of a pointless second invocation of bash.
CC: qemu-trivial@nongnu.org
Signed-off-by: Eric Blake <eblake@redhat.com>
Message-id: 20170703180950.9895-1-eblake@redhat.com
Signed-off-by: Max Reitz <mreitz@redhat.com>
2017-07-03 21:09:50 +03:00
|
|
|
printf "info block %s\n" '' file backing backing-file | \
|
2016-03-18 19:46:45 +03:00
|
|
|
run_qemu -drive file="$TEST_IMG",cache=$cache,backing.file.filename="$TEST_IMG.base",backing.cache.no-flush=on,backing.node-name=backing,backing.file.node-name=backing-file,file.node-name=file,if=none,id=$device_id -nodefaults
|
2015-05-08 19:03:15 +03:00
|
|
|
done
|
|
|
|
|
2013-04-09 15:19:18 +04:00
|
|
|
echo
|
|
|
|
echo === Specifying the protocol layer ===
|
|
|
|
echo
|
|
|
|
|
2013-09-25 16:12:22 +04:00
|
|
|
run_qemu -drive file="$TEST_IMG",file.driver=file
|
2013-04-09 15:19:18 +04:00
|
|
|
|
2014-02-03 17:49:42 +04:00
|
|
|
echo
|
|
|
|
echo === Leaving out required options ===
|
|
|
|
echo
|
|
|
|
|
|
|
|
run_qemu -drive driver=file
|
2017-04-13 19:06:25 +03:00
|
|
|
run_qemu -drive driver=file,filename=
|
2014-02-03 17:49:42 +04:00
|
|
|
run_qemu -drive driver=nbd
|
|
|
|
run_qemu -drive driver=raw
|
|
|
|
run_qemu -drive file.driver=file
|
|
|
|
run_qemu -drive file.driver=nbd
|
|
|
|
run_qemu -drive file.driver=raw
|
|
|
|
run_qemu -drive foo=bar
|
|
|
|
|
2014-09-18 13:48:34 +04:00
|
|
|
echo
|
|
|
|
echo === Specifying both an option and its legacy alias ===
|
|
|
|
echo
|
|
|
|
|
|
|
|
run_qemu -drive file="$TEST_IMG",iops=1234,throttling.iops-total=5678
|
|
|
|
run_qemu -drive file="$TEST_IMG",iops_rd=1234,throttling.iops-read=5678
|
|
|
|
run_qemu -drive file="$TEST_IMG",iops_wr=1234,throttling.iops-write=5678
|
|
|
|
|
|
|
|
run_qemu -drive file="$TEST_IMG",bps=1234,throttling.bps-total=5678
|
|
|
|
run_qemu -drive file="$TEST_IMG",bps_rd=1234,throttling.bps-read=5678
|
|
|
|
run_qemu -drive file="$TEST_IMG",bps_wr=1234,throttling.bps-write=5678
|
|
|
|
|
|
|
|
run_qemu -drive file="$TEST_IMG",iops_max=1234,throttling.iops-total-max=5678
|
|
|
|
run_qemu -drive file="$TEST_IMG",iops_rd_max=1234,throttling.iops-read-max=5678
|
|
|
|
run_qemu -drive file="$TEST_IMG",iops_wr_max=1234,throttling.iops-write-max=5678
|
|
|
|
|
|
|
|
run_qemu -drive file="$TEST_IMG",bps_max=1234,throttling.bps-total-max=5678
|
|
|
|
run_qemu -drive file="$TEST_IMG",bps_rd_max=1234,throttling.bps-read-max=5678
|
|
|
|
run_qemu -drive file="$TEST_IMG",bps_wr_max=1234,throttling.bps-write-max=5678
|
|
|
|
|
|
|
|
run_qemu -drive file="$TEST_IMG",iops_size=1234,throttling.iops-size=5678
|
|
|
|
run_qemu -drive file="$TEST_IMG",readonly=on,read-only=off
|
|
|
|
|
2016-01-20 07:21:21 +03:00
|
|
|
echo
|
|
|
|
echo === Catching negative/large throttling values ===
|
|
|
|
echo
|
|
|
|
|
|
|
|
run_qemu -drive file="$TEST_IMG",iops=-1
|
|
|
|
run_qemu -drive file="$TEST_IMG",bps=-2
|
|
|
|
run_qemu -drive file="$TEST_IMG",bps_rd=-3
|
|
|
|
run_qemu -drive file="$TEST_IMG",bps_rd_max=-3
|
|
|
|
run_qemu -drive file="$TEST_IMG",throttling.iops-total=-4
|
|
|
|
run_qemu -drive file="$TEST_IMG",throttling.bps-total=-5
|
|
|
|
# These are accepted
|
|
|
|
run_qemu -drive file="$TEST_IMG",bps=0
|
|
|
|
run_qemu -drive file="$TEST_IMG",bps=1
|
|
|
|
run_qemu -drive file="$TEST_IMG",bps=1000000000000000
|
|
|
|
# While these are not
|
|
|
|
run_qemu -drive file="$TEST_IMG",bps=1000000000000001
|
|
|
|
run_qemu -drive file="$TEST_IMG",bps=9999999999999999
|
|
|
|
|
2013-07-10 17:47:39 +04:00
|
|
|
echo
|
|
|
|
echo === Parsing protocol from file name ===
|
|
|
|
echo
|
|
|
|
|
|
|
|
# Protocol strings are supposed to be parsed from traditional option strings,
|
|
|
|
# but not when using driver-specific options. We can distinguish them by the
|
|
|
|
# error message for non-existing files.
|
|
|
|
|
|
|
|
run_qemu -hda foo:bar
|
|
|
|
run_qemu -drive file=foo:bar
|
|
|
|
run_qemu -drive file.filename=foo:bar
|
|
|
|
|
2014-04-03 14:45:51 +04:00
|
|
|
run_qemu -hda "file:$TEST_IMG"
|
|
|
|
run_qemu -drive file="file:$TEST_IMG"
|
|
|
|
run_qemu -drive file.filename="file:$TEST_IMG"
|
|
|
|
|
2013-11-15 20:00:41 +04:00
|
|
|
echo
|
|
|
|
echo === Snapshot mode ===
|
|
|
|
echo
|
|
|
|
|
|
|
|
$QEMU_IO -c "write -P 0x11 0 4k" "$TEST_IMG" | _filter_qemu_io
|
|
|
|
|
2015-12-03 13:01:30 +03:00
|
|
|
|
|
|
|
echo "qemu-io $device_id \"write -P 0x22 0 4k\"" | run_qemu -drive file="$TEST_IMG",if=none,id=$device_id -snapshot | _filter_qemu_io
|
|
|
|
echo "qemu-io $device_id \"write -P 0x22 0 4k\"" | run_qemu -drive file="$TEST_IMG",snapshot=on,if=none,id=$device_id | _filter_qemu_io
|
|
|
|
echo "qemu-io $device_id \"write -P 0x22 0 4k\"" | run_qemu -drive file.filename="$TEST_IMG",driver=qcow2,snapshot=on,if=none,id=$device_id\
|
|
|
|
| _filter_qemu_io
|
|
|
|
echo "qemu-io $device_id \"write -P 0x22 0 4k\"" | run_qemu -drive file.filename="$TEST_IMG",driver=qcow2,if=none,id=$device_id -snapshot\
|
|
|
|
| _filter_qemu_io
|
|
|
|
echo "qemu-io $device_id \"write -P 0x22 0 4k\"" | run_qemu -drive file="file:$TEST_IMG",if=none,id=$device_id -snapshot | _filter_qemu_io
|
|
|
|
echo "qemu-io $device_id \"write -P 0x22 0 4k\"" | run_qemu -drive file="file:$TEST_IMG",snapshot=on,if=none,id=$device_id | _filter_qemu_io
|
2014-04-03 14:09:34 +04:00
|
|
|
|
|
|
|
# Opening a read-only file r/w with snapshot=on
|
|
|
|
chmod u-w "$TEST_IMG"
|
2015-12-03 13:01:30 +03:00
|
|
|
echo "qemu-io $device_id \"write -P 0x22 0 4k\"" | run_qemu -drive file="$TEST_IMG",if=none,id=$device_id -snapshot | _filter_qemu_io
|
|
|
|
echo "qemu-io $device_id \"write -P 0x22 0 4k\"" | run_qemu -drive file="$TEST_IMG",snapshot=on,if=none,id=$device_id | _filter_qemu_io
|
2014-04-03 14:09:34 +04:00
|
|
|
chmod u+w "$TEST_IMG"
|
2013-11-15 20:00:41 +04:00
|
|
|
|
|
|
|
$QEMU_IO -c "read -P 0x11 0 4k" "$TEST_IMG" | _filter_qemu_io
|
|
|
|
|
2015-12-03 13:01:30 +03:00
|
|
|
echo "qemu-io $device_id \"write -P 0x22 0 4k\"" | run_qemu -drive file="$TEST_IMG",snapshot=off,if=none,id=$device_id | _filter_qemu_io
|
2013-11-15 20:00:41 +04:00
|
|
|
|
|
|
|
$QEMU_IO -c "read -P 0x22 0 4k" "$TEST_IMG" | _filter_qemu_io
|
|
|
|
|
tests: Avoid non-portable 'echo -ARG'
POSIX says that backslashes in the arguments to 'echo', as well as
any use of 'echo -n' and 'echo -e', are non-portable; it recommends
people should favor 'printf' instead. This is definitely true where
we do not control which shell is running (such as in makefile snippets
or in documentation examples). But even for scripts where we
require bash (and therefore, where echo does what we want by default),
it is still possible to use 'shopt -s xpg_echo' to change bash's
behavior of echo. And setting a good example never hurts when we are
not sure if a snippet will be copied from a bash-only script to a
general shell script (although I don't change the use of non-portable
\e for ESC when we know the running shell is bash).
Replace 'echo -n "..."' with 'printf %s "..."', and 'echo -e "..."'
with 'printf %b "...\n"', with the optimization that the %s/%b
argument can be omitted if the string being printed is a strict
literal with no '%', '$', or '`' (we could technically also make
this optimization when there are $ or `` substitutions but where
we can prove their results will not be problematic, but proving
that such substitutions are safe makes the patch less trivial
compared to just being consistent).
In the qemu-iotests check script, fix unusual shell quoting
that would result in word-splitting if 'date' outputs a space.
In test 051, take an opportunity to shorten the line.
In test 068, get rid of a pointless second invocation of bash.
CC: qemu-trivial@nongnu.org
Signed-off-by: Eric Blake <eblake@redhat.com>
Message-id: 20170703180950.9895-1-eblake@redhat.com
Signed-off-by: Max Reitz <mreitz@redhat.com>
2017-07-03 21:09:50 +03:00
|
|
|
printf %b "qemu-io $device_id \"write -P 0x33 0 4k\"\ncommit $device_id\n" |
|
|
|
|
run_qemu -drive file="$TEST_IMG",snapshot=on,if=none,id=$device_id |
|
|
|
|
_filter_qemu_io
|
2014-05-06 14:11:42 +04:00
|
|
|
|
|
|
|
$QEMU_IO -c "read -P 0x33 0 4k" "$TEST_IMG" | _filter_qemu_io
|
|
|
|
|
2018-09-10 12:29:23 +03:00
|
|
|
# Using snapshot=on with a non-existent TMPDIR
|
2019-09-04 12:11:22 +03:00
|
|
|
if [ "${VALGRIND_QEMU_VM}" == "y" ]; then
|
|
|
|
_casenotrun "Valgrind needs a valid TMPDIR for itself"
|
|
|
|
fi
|
|
|
|
VALGRIND_QEMU_VM= \
|
2018-09-10 12:29:23 +03:00
|
|
|
TMPDIR=/nonexistent run_qemu -drive driver=null-co,snapshot=on
|
|
|
|
|
2019-03-11 18:13:16 +03:00
|
|
|
# Using snapshot=on together with read-only=on
|
|
|
|
echo "info block" |
|
|
|
|
run_qemu -drive file="$TEST_IMG",snapshot=on,read-only=on,if=none,id=$device_id |
|
|
|
|
_filter_qemu_io |
|
qemu-iotests: Treat custom TEST_DIR in 051
When custom TEST_DIR is specified the output includes it without leading
'/':
$ TEST_DIR=/var/tmp ./check -file -qcow2 051
....
-drive0 (NODE_NAME): json:{"backing": {"driver": "qcow2", "file":
{"driver": "file", "filename": "TEST_DIR/t.qcow2"}}, "driver": "qcow2",
"file": {"driver": "file", "filename": SNAPSHOT_PATH}} (qcow2,
read-only)
+drive0 (NODE_NAME): json:{"backing": {"driver": "qcow2", "file":
{"driver": "file", "filename": "TEST_DIR/t.qcow2"}}, "driver": "qcow2",
"file": {"driver": "file", "filename": "TEST_DIR/vl.ziHfeP"}} (qcow2,
read-only)
Let's remove it from the sed regexp.
Signed-off-by: Lukáš Doktor <ldoktor@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
2019-03-19 17:20:49 +03:00
|
|
|
sed -e 's#"[^"]*/vl\.[A-Za-z0-9]\{6\}"#SNAPSHOT_PATH#g'
|
2019-03-11 18:13:16 +03:00
|
|
|
|
|
|
|
|
2013-04-09 17:56:13 +04:00
|
|
|
# success, all done
|
|
|
|
echo "*** done"
|
|
|
|
rm -f $seq.full
|
|
|
|
status=0
|