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@linux.vnet.ibm.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