075 (3445B)
1 #!/usr/bin/env bash 2 # group: rw quick 3 # 4 # cloop format input validation tests 5 # 6 # Copyright (C) 2013 Red Hat, Inc. 7 # 8 # This program is free software; you can redistribute it and/or modify 9 # it under the terms of the GNU General Public License as published by 10 # the Free Software Foundation; either version 2 of the License, or 11 # (at your option) any later version. 12 # 13 # This program is distributed in the hope that it will be useful, 14 # but WITHOUT ANY WARRANTY; without even the implied warranty of 15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 # GNU General Public License for more details. 17 # 18 # You should have received a copy of the GNU General Public License 19 # along with this program. If not, see <http://www.gnu.org/licenses/>. 20 # 21 22 # creator 23 owner=stefanha@redhat.com 24 25 seq=`basename $0` 26 echo "QA output created by $seq" 27 28 status=1 # failure is the default! 29 30 _cleanup() 31 { 32 _cleanup_test_img 33 } 34 trap "_cleanup; exit \$status" 0 1 2 3 15 35 36 # get standard environment, filters and checks 37 . ./common.rc 38 . ./common.filter 39 40 _supported_fmt cloop 41 _supported_proto file 42 _supported_os Linux 43 44 block_size_offset=128 45 n_blocks_offset=132 46 offsets_offset=136 47 48 echo 49 echo "== check that the first sector can be read ==" 50 _use_sample_img simple-pattern.cloop.bz2 51 $QEMU_IO -r -c "read 0 512" $TEST_IMG 2>&1 | _filter_qemu_io | _filter_testdir 52 53 echo 54 echo "== check that the last sector can be read ==" 55 _use_sample_img simple-pattern.cloop.bz2 56 $QEMU_IO -r -c "read $((1024 * 1024 - 512)) 512" $TEST_IMG 2>&1 | _filter_qemu_io | _filter_testdir 57 58 echo 59 echo "== block_size must be a multiple of 512 ==" 60 _use_sample_img simple-pattern.cloop.bz2 61 poke_file "$TEST_IMG" "$block_size_offset" "\x00\x00\x02\x01" 62 $QEMU_IO -r -c "read 0 512" $TEST_IMG 2>&1 | _filter_qemu_io | _filter_testdir 63 64 echo 65 echo "== block_size cannot be zero ==" 66 _use_sample_img simple-pattern.cloop.bz2 67 poke_file "$TEST_IMG" "$block_size_offset" "\x00\x00\x00\x00" 68 $QEMU_IO -r -c "read 0 512" $TEST_IMG 2>&1 | _filter_qemu_io | _filter_testdir 69 70 echo 71 echo "== huge block_size ===" 72 _use_sample_img simple-pattern.cloop.bz2 73 poke_file "$TEST_IMG" "$block_size_offset" "\xff\xff\xfe\x00" 74 $QEMU_IO -r -c "read 0 512" $TEST_IMG 2>&1 | _filter_qemu_io | _filter_testdir 75 76 echo 77 echo "== offsets_size overflow ===" 78 _use_sample_img simple-pattern.cloop.bz2 79 poke_file "$TEST_IMG" "$n_blocks_offset" "\xff\xff\xff\xff" 80 $QEMU_IO -r -c "read 0 512" $TEST_IMG 2>&1 | _filter_qemu_io | _filter_testdir 81 82 echo 83 echo "== refuse images that require too many offsets ===" 84 _use_sample_img simple-pattern.cloop.bz2 85 poke_file "$TEST_IMG" "$n_blocks_offset" "\x04\x00\x00\x01" 86 $QEMU_IO -r -c "read 0 512" $TEST_IMG 2>&1 | _filter_qemu_io | _filter_testdir 87 88 echo 89 echo "== refuse images with non-monotonically increasing offsets ==" 90 _use_sample_img simple-pattern.cloop.bz2 91 poke_file "$TEST_IMG" "$offsets_offset" "\x00\x00\x00\x00\xff\xff\xff\xff" 92 poke_file "$TEST_IMG" $((offsets_offset + 8)) "\x00\x00\x00\x00\xff\xfe\x00\x00" 93 $QEMU_IO -r -c "read 0 512" $TEST_IMG 2>&1 | _filter_qemu_io | _filter_testdir 94 95 echo 96 echo "== refuse images with invalid compressed block size ==" 97 _use_sample_img simple-pattern.cloop.bz2 98 poke_file "$TEST_IMG" "$offsets_offset" "\x00\x00\x00\x00\x00\x00\x00\x00" 99 poke_file "$TEST_IMG" $((offsets_offset + 8)) "\xff\xff\xff\xff\xff\xff\xff\xff" 100 $QEMU_IO -r -c "read 0 512" $TEST_IMG 2>&1 | _filter_qemu_io | _filter_testdir 101 102 # success, all done 103 echo "*** done" 104 rm -f $seq.full 105 status=0