qemu/tests/qemu-iotests/059
Kevin Wolf 046e07ca55 iotests/059: Filter out disk size with more standard filter
The actual disk space used by an image can vary between filesystems and
depending on other settings like an extent size hint. Replace the one
call of "$QEMU_IMG info" and the associated one-off sed filter with the
more standard "_img_info" and the standard filter from common.filter.

Apart from turning "vmdk" into "IMGFMT" and changing the placeholder for
cid fields, this only removes the "disk size" line.

Signed-off-by: Kevin Wolf <kwolf@redhat.com>
2020-07-14 15:18:59 +02:00

192 lines
5.6 KiB
Bash
Executable File

#!/usr/bin/env bash
#
# Test case for vmdk
#
# 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=famz@redhat.com
seq=`basename $0`
echo "QA output created by $seq"
status=1 # failure is the default!
_cleanup()
{
_cleanup_test_img
IMGFMT=qcow2 _rm_test_img "$TEST_IMG.qcow2"
}
trap "_cleanup; exit \$status" 0 1 2 3 15
# get standard environment, filters and checks
. ./common.rc
. ./common.filter
# This tests vmdk-specific low-level functionality
_supported_fmt vmdk
_supported_proto file
_supported_os Linux
# We test all kinds of VMDK options here, so ignore user-specified options
IMGOPTS=""
capacity_offset=16
granularity_offset=20
grain_table_size_offset=44
echo
echo "=== Testing invalid granularity ==="
_make_test_img 64M
poke_file "$TEST_IMG" "$granularity_offset" "\xff\xff\xff\xff\xff\xff\xff\xff"
{ $QEMU_IO -c "read 0 512" "$TEST_IMG"; } 2>&1 | _filter_qemu_io | _filter_testdir
echo
echo "=== Testing too big L2 table size ==="
_make_test_img 64M
poke_file "$TEST_IMG" "$grain_table_size_offset" "\xff\xff\xff\xff"
{ $QEMU_IO -c "read 0 512" "$TEST_IMG"; } 2>&1 | _filter_qemu_io | _filter_testdir
echo
echo "=== Testing too big L1 table size ==="
_make_test_img 64M
poke_file "$TEST_IMG" "$capacity_offset" "\xff\xff\xff\xff"
poke_file "$TEST_IMG" "$grain_table_size_offset" "\x01\x00\x00\x00"
{ $QEMU_IO -c "read 0 512" "$TEST_IMG"; } 2>&1 | _filter_qemu_io | _filter_testdir
echo
echo "=== Testing monolithicFlat creation and opening ==="
_make_test_img -o "subformat=monolithicFlat" 2G
_img_info
_cleanup_test_img
echo
echo "=== Testing monolithicFlat with zeroed_grain ==="
_make_test_img -o "subformat=monolithicFlat,zeroed_grain=on" 2G
_cleanup_test_img
echo
echo "=== Testing big twoGbMaxExtentFlat ==="
_make_test_img -o "subformat=twoGbMaxExtentFlat" 1000G
_img_info --format-specific | _filter_img_info --format-specific
_cleanup_test_img
echo
echo "=== Testing malformed VMFS extent description line ==="
cat >"$TEST_IMG" <<EOF
# Disk DescriptorFile
version=1
CID=58ab4847
parentCID=ffffffff
createType="vmfs"
# Extent description
RW 12582912 VMFS "dummy.vmdk" 1
EOF
_img_info
echo
echo "=== Testing truncated sparse ==="
_make_test_img -o "subformat=monolithicSparse" 100G
truncate -s 10M $TEST_IMG
_img_info
echo
echo "=== Converting to streamOptimized from image with small cluster size==="
TEST_IMG="$TEST_IMG.qcow2" IMGFMT=qcow2 _make_test_img -o "cluster_size=4096" 1G
$QEMU_IO -f qcow2 -c "write -P 0xa 0 512" "$TEST_IMG.qcow2" | _filter_qemu_io
$QEMU_IO -f qcow2 -c "write -P 0xb 10240 512" "$TEST_IMG.qcow2" | _filter_qemu_io
$QEMU_IMG convert -f qcow2 -O vmdk -o subformat=streamOptimized "$TEST_IMG.qcow2" "$TEST_IMG" 2>&1
echo
echo "=== Testing monolithicFlat with internally generated JSON file name ==="
echo '--- blkdebug ---'
# Should work, because bdrv_dirname() works fine with blkdebug
_make_test_img -o "subformat=monolithicFlat" 64M
$QEMU_IO -c "open -o driver=$IMGFMT,file.driver=blkdebug,file.image.filename=$TEST_IMG,file.inject-error.0.event=read_aio" \
-c info \
2>&1 \
| _filter_testdir | _filter_imgfmt | _filter_img_info
_cleanup_test_img
echo '--- quorum ---'
# Should not work, because bdrv_dirname() does not work with quorum
_make_test_img -o "subformat=monolithicFlat" 64M
cp "$TEST_IMG" "$TEST_IMG.orig"
filename="json:{
\"driver\": \"$IMGFMT\",
\"file\": {
\"driver\": \"quorum\",
\"children\": [ {
\"driver\": \"file\",
\"filename\": \"$TEST_IMG\"
}, {
\"driver\": \"file\",
\"filename\": \"$TEST_IMG.orig\"
} ],
\"vote-threshold\": 1
} }"
filename=$(echo "$filename" | tr '\n' ' ' | sed -e 's/\s\+/ /g')
$QEMU_IMG info "$filename" 2>&1 \
| sed -e "s/'json:[^']*'/\$QUORUM_FILE/g" \
| _filter_testdir | _filter_imgfmt | _filter_img_info
echo
echo "=== Testing version 3 ==="
_use_sample_img iotest-version3.vmdk.bz2
_img_info
for i in {0..99}; do
$QEMU_IO -r -c "read -P $(( i % 10 + 0x30 )) $(( i * 64 * 1024 * 10 + i * 512 )) 512" $TEST_IMG \
| _filter_qemu_io
done
_cleanup_test_img
echo
echo "=== Testing 4TB monolithicFlat creation and IO ==="
_make_test_img -o "subformat=monolithicFlat" 4T
_img_info
$QEMU_IO -c "write -P 0xa 900G 512" "$TEST_IMG" | _filter_qemu_io
$QEMU_IO -c "read -v 900G 1024" "$TEST_IMG" | _filter_qemu_io
_cleanup_test_img
echo
echo "=== Testing qemu-img map on extents ==="
for fmt in monolithicSparse twoGbMaxExtentSparse; do
_make_test_img -o "subformat=$fmt" 31G
$QEMU_IO -c "write 65024 1k" "$TEST_IMG" | _filter_qemu_io
$QEMU_IO -c "write 2147483136 1k" "$TEST_IMG" | _filter_qemu_io
$QEMU_IO -c "write 5G 1k" "$TEST_IMG" | _filter_qemu_io
$QEMU_IMG map "$TEST_IMG" | _filter_testdir
_cleanup_test_img
done
echo
echo "=== Testing afl image with a very large capacity ==="
_use_sample_img afl9.vmdk.bz2
_img_info | grep -q 'Cannot allocate memory' && _notrun "Insufficent memory, skipped test"
_img_info
_cleanup_test_img
# success, all done
echo "*** done"
rm -f $seq.full
status=0