diff options
author | Tomáš Golembiovský <tgolembi@redhat.com> | 2016-10-31 11:27:41 +0100 |
---|---|---|
committer | Kevin Wolf <kwolf@redhat.com> | 2016-10-31 16:52:39 +0100 |
commit | ccc47808fd1cf3984860c60e81a8496f27dbb8a1 (patch) | |
tree | 410e728b289f7a0151e06a044b939a8296402958 /tests | |
parent | 2fdc70452a59484c85359dc8d5a0650245288781 (diff) |
qemu-iotests: test 'offset' and 'size' options in raw driver
Signed-off-by: Tomáš Golembiovský <tgolembi@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Diffstat (limited to 'tests')
-rwxr-xr-x | tests/qemu-iotests/171 | 212 | ||||
-rw-r--r-- | tests/qemu-iotests/171.out | 313 | ||||
-rw-r--r-- | tests/qemu-iotests/group | 1 |
3 files changed, 526 insertions, 0 deletions
diff --git a/tests/qemu-iotests/171 b/tests/qemu-iotests/171 new file mode 100755 index 0000000000..257be10a0e --- /dev/null +++ b/tests/qemu-iotests/171 @@ -0,0 +1,212 @@ +#!/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 diff --git a/tests/qemu-iotests/171.out b/tests/qemu-iotests/171.out new file mode 100644 index 0000000000..ec3363b4f4 --- /dev/null +++ b/tests/qemu-iotests/171.out @@ -0,0 +1,313 @@ +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 diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group index 597fc2c952..866c1a032d 100644 --- a/tests/qemu-iotests/group +++ b/tests/qemu-iotests/group @@ -163,4 +163,5 @@ 160 rw auto quick 162 auto quick 170 rw auto quick +171 rw auto quick 172 auto |