#!/bin/bash # # Test qcow2 feature bits # # Copyright (C) 2011 Red Hat, Inc. # Copyright IBM, Corp. 2010 # # Based on test 031. # # 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 . # # creator owner=stefanha@linux.vnet.ibm.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 . ./common.pattern # This tests qcow2-specific low-level functionality _supported_fmt qcow2 _supported_proto file _supported_os Linux # Only qcow2v3 and later supports feature bits IMGOPTS="compat=1.1" echo echo === Image with unknown incompatible feature bit === echo _make_test_img 64M $PYTHON qcow2.py "$TEST_IMG" set-feature-bit incompatible 63 # Without feature table $PYTHON qcow2.py "$TEST_IMG" del-header-ext 0x6803f857 $PYTHON qcow2.py "$TEST_IMG" dump-header _img_info # With feature table containing bit 63 printf "\x00\x3f%s" "Test feature" | $PYTHON qcow2.py "$TEST_IMG" add-header-ext-stdio 0x6803f857 _img_info echo echo === Image with multiple incompatible feature bits === echo _make_test_img 64M $PYTHON qcow2.py "$TEST_IMG" set-feature-bit incompatible 61 $PYTHON qcow2.py "$TEST_IMG" set-feature-bit incompatible 62 $PYTHON qcow2.py "$TEST_IMG" set-feature-bit incompatible 63 # Without feature table $PYTHON qcow2.py "$TEST_IMG" del-header-ext 0x6803f857 _img_info # With feature table containing bit 63 printf "\x00\x3f%s" "Test feature" | $PYTHON qcow2.py "$TEST_IMG" add-header-ext-stdio 0x6803f857 _img_info # With feature table containing bit 61 $PYTHON qcow2.py "$TEST_IMG" del-header-ext 0x6803f857 printf "\x00\x3d%s" "Test feature" | $PYTHON qcow2.py "$TEST_IMG" add-header-ext-stdio 0x6803f857 _img_info # With feature table containing bits 61 and 62 $PYTHON qcow2.py "$TEST_IMG" del-header-ext 0x6803f857 printf "\x00\x3d%s\x00%40s\x00\x3e%s\x00%40s" "test1" "" "test2" "" | $PYTHON qcow2.py "$TEST_IMG" add-header-ext-stdio 0x6803f857 _img_info # With feature table containing all bits $PYTHON qcow2.py "$TEST_IMG" del-header-ext 0x6803f857 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 _img_info # With feature table containing unrelated bits, including compatible/autoclear $PYTHON qcow2.py "$TEST_IMG" del-header-ext 0x6803f857 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 _img_info echo === Create image with unknown autoclear feature bit === echo _make_test_img 64M $PYTHON qcow2.py "$TEST_IMG" set-feature-bit autoclear 63 $PYTHON qcow2.py "$TEST_IMG" dump-header echo echo === Repair image === echo _check_test_img -r all $PYTHON qcow2.py "$TEST_IMG" dump-header # success, all done echo "*** done" rm -f $seq.full status=0