#!/bin/bash
#
# Test qcow2 lazy refcounts
#
# Copyright (C) 2012 Red Hat, Inc.
# Copyright IBM, Corp. 2010
#
# Based on test 038.
#
# 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@linux.vnet.ibm.com

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

here=`pwd`
tmp=/tmp/$$
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

_supported_fmt qcow2
_supported_proto file
_supported_os Linux
_default_cache_mode "writethrough"
_supported_cache_modes "writethrough"

_subshell_exec()
{
    # Executing crashing commands in a subshell prevents information like the
    # "Killed" line from being lost
    (exec "$@")
}

size=128M

echo
echo "== Checking that image is clean on shutdown =="

IMGOPTS="compat=1.1,lazy_refcounts=on"
_make_test_img $size

$QEMU_IO -c "write -P 0x5a 0 512" "$TEST_IMG" | _filter_qemu_io

# The dirty bit must not be set
$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
_check_test_img

echo
echo "== Creating a dirty image file =="

IMGOPTS="compat=1.1,lazy_refcounts=on"
_make_test_img $size

_subshell_exec $QEMU_IO -c "write -P 0x5a 0 512" \
                        -c "sigraise $(kill -l KILL)" "$TEST_IMG" 2>&1 \
    | _filter_qemu_io

# The dirty bit must be set
$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
_check_test_img

echo
echo "== Read-only access must still work =="

$QEMU_IO -r -c "read -P 0x5a 0 512" "$TEST_IMG" | _filter_qemu_io

# The dirty bit must be set
$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features

echo
echo "== Repairing the image file must succeed =="

_check_test_img -r all

# The dirty bit must not be set
$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features

echo
echo "== Data should still be accessible after repair =="

$QEMU_IO -c "read -P 0x5a 0 512" "$TEST_IMG" | _filter_qemu_io

echo
echo "== Opening a dirty image read/write should repair it =="

IMGOPTS="compat=1.1,lazy_refcounts=on"
_make_test_img $size

_subshell_exec $QEMU_IO -c "write -P 0x5a 0 512" \
                        -c "sigraise $(kill -l KILL)" "$TEST_IMG" 2>&1 \
    | _filter_qemu_io

# The dirty bit must be set
$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features

$QEMU_IO -c "write 0 512" "$TEST_IMG" | _filter_qemu_io

# The dirty bit must not be set
$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features

echo
echo "== Creating an image file with lazy_refcounts=off =="

IMGOPTS="compat=1.1,lazy_refcounts=off"
_make_test_img $size

_subshell_exec $QEMU_IO -c "write -P 0x5a 0 512" \
                        -c "sigraise $(kill -l KILL)" "$TEST_IMG" 2>&1 \
    | _filter_qemu_io

# The dirty bit must not be set since lazy_refcounts=off
$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
_check_test_img

echo
echo "== Committing to a backing file with lazy_refcounts=on =="

IMGOPTS="compat=1.1,lazy_refcounts=on"
TEST_IMG="$TEST_IMG".base _make_test_img $size

IMGOPTS="compat=1.1,lazy_refcounts=on,backing_file=$TEST_IMG.base"
_make_test_img $size

$QEMU_IO -c "write 0 512" "$TEST_IMG" | _filter_qemu_io
$QEMU_IMG commit "$TEST_IMG"

# The dirty bit must not be set
$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
$PYTHON qcow2.py "$TEST_IMG".base dump-header | grep incompatible_features

_check_test_img
TEST_IMG="$TEST_IMG".base _check_test_img


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

