#!/usr/bin/env bash
# group: rw auto quick
#
# 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 <http://www.gnu.org/licenses/>.
#

# creator
owner=stefanha@redhat.com

seq=`basename $0`
echo "QA output created by $seq"

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 fuse
# Only qcow2v3 and later supports feature bits;
# qcow2.py does not support external data files;
# this test requires a cluster size large enough for the feature table
_unsupported_imgopts 'compat=0.10' data_file \
		     'cluster_size=\(512\|1024\|2048\|4096\)'

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
_qcow2_dump_header | grep features
$PYTHON qcow2.py "$TEST_IMG" dump-header-exts
_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
_qcow2_dump_header | grep features
$PYTHON qcow2.py "$TEST_IMG" dump-header-exts

echo
echo === Repair image ===
echo
_check_test_img -r all

_qcow2_dump_header | grep features
$PYTHON qcow2.py "$TEST_IMG" dump-header-exts

# success, all done
echo "*** done"
rm -f $seq.full
status=0
