qemu

FORK: QEMU emulator
git clone https://git.neptards.moe/neptards/qemu.git
Log | Files | Refs | Submodules | LICENSE

036 (3917B)


      1 #!/usr/bin/env bash
      2 # group: rw auto quick
      3 #
      4 # Test qcow2 feature bits
      5 #
      6 # Copyright (C) 2011 Red Hat, Inc.
      7 # Copyright IBM, Corp. 2010
      8 #
      9 # Based on test 031.
     10 #
     11 # This program is free software; you can redistribute it and/or modify
     12 # it under the terms of the GNU General Public License as published by
     13 # the Free Software Foundation; either version 2 of the License, or
     14 # (at your option) any later version.
     15 #
     16 # This program is distributed in the hope that it will be useful,
     17 # but WITHOUT ANY WARRANTY; without even the implied warranty of
     18 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     19 # GNU General Public License for more details.
     20 #
     21 # You should have received a copy of the GNU General Public License
     22 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
     23 #
     24 
     25 # creator
     26 owner=stefanha@redhat.com
     27 
     28 seq=`basename $0`
     29 echo "QA output created by $seq"
     30 
     31 status=1	# failure is the default!
     32 
     33 _cleanup()
     34 {
     35 	_cleanup_test_img
     36 }
     37 trap "_cleanup; exit \$status" 0 1 2 3 15
     38 
     39 # get standard environment, filters and checks
     40 . ./common.rc
     41 . ./common.filter
     42 . ./common.pattern
     43 
     44 # This tests qcow2-specific low-level functionality
     45 _supported_fmt qcow2
     46 _supported_proto file fuse
     47 # Only qcow2v3 and later supports feature bits;
     48 # qcow2.py does not support external data files;
     49 # this test requires a cluster size large enough for the feature table
     50 _unsupported_imgopts 'compat=0.10' data_file \
     51 		     'cluster_size=\(512\|1024\|2048\|4096\)'
     52 
     53 echo
     54 echo === Image with unknown incompatible feature bit ===
     55 echo
     56 _make_test_img 64M
     57 $PYTHON qcow2.py "$TEST_IMG" set-feature-bit incompatible 63
     58 
     59 # Without feature table
     60 $PYTHON qcow2.py "$TEST_IMG" del-header-ext 0x6803f857
     61 _qcow2_dump_header | grep features
     62 $PYTHON qcow2.py "$TEST_IMG" dump-header-exts
     63 _img_info
     64 
     65 # With feature table containing bit 63
     66 printf "\x00\x3f%s" "Test feature" | $PYTHON qcow2.py "$TEST_IMG" add-header-ext-stdio 0x6803f857
     67 _img_info
     68 
     69 echo
     70 echo === Image with multiple incompatible feature bits ===
     71 echo
     72 _make_test_img 64M
     73 $PYTHON qcow2.py "$TEST_IMG" set-feature-bit incompatible 61
     74 $PYTHON qcow2.py "$TEST_IMG" set-feature-bit incompatible 62
     75 $PYTHON qcow2.py "$TEST_IMG" set-feature-bit incompatible 63
     76 
     77 # Without feature table
     78 $PYTHON qcow2.py "$TEST_IMG" del-header-ext 0x6803f857
     79 _img_info
     80 
     81 # With feature table containing bit 63
     82 printf "\x00\x3f%s" "Test feature" | $PYTHON qcow2.py "$TEST_IMG" add-header-ext-stdio 0x6803f857
     83 _img_info
     84 
     85 # With feature table containing bit 61
     86 $PYTHON qcow2.py "$TEST_IMG" del-header-ext 0x6803f857
     87 printf "\x00\x3d%s" "Test feature" | $PYTHON qcow2.py "$TEST_IMG" add-header-ext-stdio 0x6803f857
     88 _img_info
     89 
     90 # With feature table containing bits 61 and 62
     91 $PYTHON qcow2.py "$TEST_IMG" del-header-ext 0x6803f857
     92 printf "\x00\x3d%s\x00%40s\x00\x3e%s\x00%40s" "test1" "" "test2" "" | $PYTHON qcow2.py "$TEST_IMG" add-header-ext-stdio 0x6803f857
     93 _img_info
     94 
     95 # With feature table containing all bits
     96 $PYTHON qcow2.py "$TEST_IMG" del-header-ext 0x6803f857
     97 printf "\x00\x3d%s\x00%40s\x00\x3e%s\x00%40s\x00\x3f%s\x00%40s" "test1" "" "test2" "" "test3" "" | $PYTHON qcow2.py "$TEST_IMG" add-header-ext-stdio 0x6803f857
     98 _img_info
     99 
    100 # With feature table containing unrelated bits, including compatible/autoclear
    101 $PYTHON qcow2.py "$TEST_IMG" del-header-ext 0x6803f857
    102 printf "\x01\x3d%s\x00%40s\x00\x3e%s\x00%40s\x02\x3f%s\x00%40s\x00\x3c%s\x00%40s" "test1" "" "test2" "" "test3" "" "test4" "" | $PYTHON qcow2.py "$TEST_IMG" add-header-ext-stdio 0x6803f857
    103 _img_info
    104 
    105 
    106 echo === Create image with unknown autoclear feature bit ===
    107 echo
    108 _make_test_img 64M
    109 $PYTHON qcow2.py "$TEST_IMG" set-feature-bit autoclear 63
    110 _qcow2_dump_header | grep features
    111 $PYTHON qcow2.py "$TEST_IMG" dump-header-exts
    112 
    113 echo
    114 echo === Repair image ===
    115 echo
    116 _check_test_img -r all
    117 
    118 _qcow2_dump_header | grep features
    119 $PYTHON qcow2.py "$TEST_IMG" dump-header-exts
    120 
    121 # success, all done
    122 echo "*** done"
    123 rm -f $seq.full
    124 status=0