qemu/tests/qemu-iotests/036
<<
>>
Prefs
   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
  26owner=stefanha@redhat.com
  27
  28seq=`basename $0`
  29echo "QA output created by $seq"
  30
  31status=1        # failure is the default!
  32
  33_cleanup()
  34{
  35        _cleanup_test_img
  36}
  37trap "_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
  53echo
  54echo === Image with unknown incompatible feature bit ===
  55echo
  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
  66printf "\x00\x3f%s" "Test feature" | $PYTHON qcow2.py "$TEST_IMG" add-header-ext-stdio 0x6803f857
  67_img_info
  68
  69echo
  70echo === Image with multiple incompatible feature bits ===
  71echo
  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
  82printf "\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
  87printf "\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
  92printf "\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
  97printf "\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
 102printf "\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
 106echo === Create image with unknown autoclear feature bit ===
 107echo
 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
 113echo
 114echo === Repair image ===
 115echo
 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
 122echo "*** done"
 123rm -f $seq.full
 124status=0
 125