提交 ccc47808 编写于 作者: T Tomáš Golembiovský 提交者: Kevin Wolf

qemu-iotests: test 'offset' and 'size' options in raw driver

Signed-off-by: NTomáš Golembiovský <tgolembi@redhat.com>
Signed-off-by: NKevin Wolf <kwolf@redhat.com>
上级 2fdc7045
#!/bin/bash
#
# Test 'offset' and 'size' options of the raw driver. Make sure we can't
# (or can) read and write outside of the image size.
#
# Copyright (C) 2016 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=tgolembi@redhat.com
seq=`basename $0`
echo "QA output created by $seq"
here=`pwd`
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 raw
_supported_proto file
_supported_os Linux
# Create JSON with options
img_json() {
echo -n 'json:{"driver":"raw", '
echo -n "\"offset\":\"$img_offset\", "
if [ "$img_size" -ne -1 ] ; then
echo -n "\"size\":\"$img_size\", "
fi
echo -n '"file": {'
echo -n '"driver":"file", '
echo -n "\"filename\":\"$TEST_IMG\" "
echo -n "} }"
}
do_general_test() {
if [ "$img_size" -ge 0 ] ; then
test_size=$img_size
else
test_size=$((size-img_offset))
fi
echo
echo "write to image"
$QEMU_IO -c "write -P 0x0a 0 $test_size" "$(img_json)" | _filter_qemu_io
echo
echo "read the image"
$QEMU_IO -c "read -P 0x0a 0 $test_size" "$(img_json)" | _filter_qemu_io
echo
echo "check that offset is respected"
$QEMU_IO -c "read -v $((img_offset-2)) 4" $TEST_IMG | _filter_qemu_io
echo
echo "write before image boundary"
$QEMU_IO -c "write $((test_size-1)) 1" "$(img_json)" | _filter_qemu_io
echo
echo "write across image boundary"
$QEMU_IO -c "write $((test_size-1)) 2" "$(img_json)" | _filter_qemu_io
echo
echo "write at image boundary"
$QEMU_IO -c "write $test_size 1" "$(img_json)" | _filter_qemu_io
echo
echo "write after image boundary"
$QEMU_IO -c "write $((test_size+512)) 1" "$(img_json)" | _filter_qemu_io
echo
echo "writev before/after image boundary"
$QEMU_IO -c "writev $((test_size-512)) 512 512" "$(img_json)" | _filter_qemu_io
echo
echo "read before image boundary"
$QEMU_IO -c "read $((test_size-1)) 1" "$(img_json)" | _filter_qemu_io
echo
echo "read across image boundary"
$QEMU_IO -c "read $((test_size-1)) 2" "$(img_json)" | _filter_qemu_io
echo
echo "read at image boundary"
$QEMU_IO -c "read $test_size 1" "$(img_json)" | _filter_qemu_io
echo
echo "read after image boundary"
$QEMU_IO -c "read $((test_size+512)) 1" "$(img_json)" | _filter_qemu_io
echo
echo "readv before/after image boundary"
$QEMU_IO -c "readv $((test_size-512)) 512 512" "$(img_json)" | _filter_qemu_io
echo
echo "fill image with pattern"
$QEMU_IO -c "write -P 0x0a 0 $size" $TEST_IMG | _filter_qemu_io
echo
echo "write zeroes and check"
$QEMU_IO -c "write -z 0 512" "$(img_json)" | _filter_qemu_io
$QEMU_IO -c "read -v $((img_offset-2)) 4" $TEST_IMG | _filter_qemu_io
echo
echo "write zeroes across image boundary"
$QEMU_IO -c "write -z $((test_size-1)) 2" "$(img_json)" | _filter_qemu_io
echo
echo "write zeroes at image boundary and check"
$QEMU_IO -c "write -z $((test_size-2)) 2" "$(img_json)" | _filter_qemu_io
$QEMU_IO -c "read -v $((img_offset+test_size-2)) 2" $TEST_IMG | _filter_qemu_io
$QEMU_IO -c "read -v $((img_offset+test_size)) 2" $TEST_IMG | _filter_qemu_io
echo
echo "fill image with pattern"
$QEMU_IO -c "write -P 0x0a 0 $size" $TEST_IMG | _filter_qemu_io
echo
echo "discard and check"
$QEMU_IO -c "discard 0 512" "$(img_json)" | _filter_qemu_io
$QEMU_IO -c "read -v $((img_offset-2)) 4" $TEST_IMG | _filter_qemu_io
echo
echo "discard across image boundary"
$QEMU_IO -c "discard $((test_size-1)) 2" "$(img_json)" | _filter_qemu_io
echo
echo "discard at image boundary and check"
$QEMU_IO -c "discard $((test_size-2)) 2" "$(img_json)" | _filter_qemu_io
$QEMU_IO -c "read -v $((img_offset+test_size-2)) 2" $TEST_IMG | _filter_qemu_io
$QEMU_IO -c "read -v $((img_offset+test_size)) 2" $TEST_IMG | _filter_qemu_io
}
echo
echo "== test 'offset' option =="
size=4096
img_offset=512
img_size=-1
_make_test_img $size
do_general_test
_cleanup_test_img
echo
echo "== test 'offset' and 'size' options =="
size=4096
img_offset=512
img_size=2048
_make_test_img $size
do_general_test
_cleanup_test_img
echo
echo "== test misaligned 'offset' =="
size=4096
img_offset=10
img_size=2048
_make_test_img $size
do_general_test
_cleanup_test_img
echo
echo "== test reopen =="
size=4096
img_offset=512
img_size=512
_make_test_img $size
(
$QEMU_IO "$(img_json)" <<EOT
write -P 0x0a 0 512
write -P 0x0a 511 1
write -P 0x0a 512 1
reopen -o driver=raw,offset=1536,size=1024
write -P 0x0a 0 1024
write -P 0x0a 1023 1
write -P 0x0a 1024 1
EOT
) | _filter_qemu_io
echo "checking boundaries"
$QEMU_IO -c "read -v 510 4" $TEST_IMG | _filter_qemu_io
$QEMU_IO -c "read -v 1022 4" $TEST_IMG | _filter_qemu_io
$QEMU_IO -c "read -v 1534 4" $TEST_IMG | _filter_qemu_io
$QEMU_IO -c "read -v 2558 4" $TEST_IMG | _filter_qemu_io
_cleanup_test_img
# success, all done
echo
echo "*** done"
rm -f $seq.full
status=0
QA output created by 171
== test 'offset' option ==
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=4096
write to image
wrote 3584/3584 bytes at offset 0
3.500 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
read the image
read 3584/3584 bytes at offset 0
3.500 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
check that offset is respected
000001fe: 00 00 0a 0a ....
read 4/4 bytes at offset 510
4 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
write before image boundary
wrote 1/1 bytes at offset 3583
1 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
write across image boundary
write failed: Input/output error
write at image boundary
write failed: Input/output error
write after image boundary
write failed: Input/output error
writev before/after image boundary
writev failed: Input/output error
read before image boundary
read 1/1 bytes at offset 3583
1 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
read across image boundary
read failed: Input/output error
read at image boundary
read failed: Input/output error
read after image boundary
read failed: Input/output error
readv before/after image boundary
readv failed: Input/output error
fill image with pattern
wrote 4096/4096 bytes at offset 0
4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
write zeroes and check
wrote 512/512 bytes at offset 0
512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
000001fe: 0a 0a 00 00 ....
read 4/4 bytes at offset 510
4 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
write zeroes across image boundary
write failed: Input/output error
write zeroes at image boundary and check
wrote 2/2 bytes at offset 3582
2 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
00000ffe: 00 00 ..
read 2/2 bytes at offset 4094
2 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
read failed: Input/output error
fill image with pattern
wrote 4096/4096 bytes at offset 0
4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
discard and check
discard 512/512 bytes at offset 0
512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
000001fe: 0a 0a 00 00 ....
read 4/4 bytes at offset 510
4 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
discard across image boundary
discard failed: Input/output error
discard at image boundary and check
discard 2/2 bytes at offset 3582
2 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
00000ffe: 00 00 ..
read 2/2 bytes at offset 4094
2 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
read failed: Input/output error
== test 'offset' and 'size' options ==
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=4096
write to image
wrote 2048/2048 bytes at offset 0
2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
read the image
read 2048/2048 bytes at offset 0
2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
check that offset is respected
000001fe: 00 00 0a 0a ....
read 4/4 bytes at offset 510
4 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
write before image boundary
wrote 1/1 bytes at offset 2047
1 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
write across image boundary
write failed: Input/output error
write at image boundary
write failed: Input/output error
write after image boundary
write failed: Input/output error
writev before/after image boundary
writev failed: Input/output error
read before image boundary
read 1/1 bytes at offset 2047
1 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
read across image boundary
read failed: Input/output error
read at image boundary
read failed: Input/output error
read after image boundary
read failed: Input/output error
readv before/after image boundary
readv failed: Input/output error
fill image with pattern
wrote 4096/4096 bytes at offset 0
4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
write zeroes and check
wrote 512/512 bytes at offset 0
512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
000001fe: 0a 0a 00 00 ....
read 4/4 bytes at offset 510
4 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
write zeroes across image boundary
write failed: Input/output error
write zeroes at image boundary and check
wrote 2/2 bytes at offset 2046
2 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
000009fe: 00 00 ..
read 2/2 bytes at offset 2558
2 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
00000a00: 0a 0a ..
read 2/2 bytes at offset 2560
2 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
fill image with pattern
wrote 4096/4096 bytes at offset 0
4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
discard and check
discard 512/512 bytes at offset 0
512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
000001fe: 0a 0a 00 00 ....
read 4/4 bytes at offset 510
4 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
discard across image boundary
discard failed: Input/output error
discard at image boundary and check
discard 2/2 bytes at offset 2046
2 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
000009fe: 00 00 ..
read 2/2 bytes at offset 2558
2 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
00000a00: 0a 0a ..
read 2/2 bytes at offset 2560
2 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
== test misaligned 'offset' ==
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=4096
write to image
wrote 2048/2048 bytes at offset 0
2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
read the image
read 2048/2048 bytes at offset 0
2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
check that offset is respected
00000008: 00 00 0a 0a ....
read 4/4 bytes at offset 8
4 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
write before image boundary
wrote 1/1 bytes at offset 2047
1 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
write across image boundary
write failed: Input/output error
write at image boundary
write failed: Input/output error
write after image boundary
write failed: Input/output error
writev before/after image boundary
writev failed: Input/output error
read before image boundary
read 1/1 bytes at offset 2047
1 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
read across image boundary
read failed: Input/output error
read at image boundary
read failed: Input/output error
read after image boundary
read failed: Input/output error
readv before/after image boundary
readv failed: Input/output error
fill image with pattern
wrote 4096/4096 bytes at offset 0
4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
write zeroes and check
wrote 512/512 bytes at offset 0
512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
00000008: 0a 0a 00 00 ....
read 4/4 bytes at offset 8
4 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
write zeroes across image boundary
write failed: Input/output error
write zeroes at image boundary and check
wrote 2/2 bytes at offset 2046
2 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
00000808: 00 00 ..
read 2/2 bytes at offset 2056
2 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
0000080a: 0a 0a ..
read 2/2 bytes at offset 2058
2 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
fill image with pattern
wrote 4096/4096 bytes at offset 0
4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
discard and check
discard 512/512 bytes at offset 0
512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
00000008: 0a 0a 00 00 ....
read 4/4 bytes at offset 8
4 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
discard across image boundary
discard failed: Input/output error
discard at image boundary and check
discard 2/2 bytes at offset 2046
2 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
00000808: 00 00 ..
read 2/2 bytes at offset 2056
2 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
0000080a: 0a 0a ..
read 2/2 bytes at offset 2058
2 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
== test reopen ==
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=4096
wrote 512/512 bytes at offset 0
512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
wrote 1/1 bytes at offset 511
1 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
write failed: Input/output error
wrote 1024/1024 bytes at offset 0
1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
wrote 1/1 bytes at offset 1023
1 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
write failed: Input/output error
checking boundaries
000001fe: 00 00 0a 0a ....
read 4/4 bytes at offset 510
4 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
000003fe: 0a 0a 00 00 ....
read 4/4 bytes at offset 1022
4 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
000005fe: 00 00 0a 0a ....
read 4/4 bytes at offset 1534
4 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
000009fe: 0a 0a 00 00 ....
read 4/4 bytes at offset 2558
4 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
*** done
...@@ -163,4 +163,5 @@ ...@@ -163,4 +163,5 @@
160 rw auto quick 160 rw auto quick
162 auto quick 162 auto quick
170 rw auto quick 170 rw auto quick
171 rw auto quick
172 auto 172 auto
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册