#!/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 generic
_supported_os Linux
_unsupported_qemu_io_options --nocache

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
./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

old_ulimit=$(ulimit -c)
ulimit -c 0 # do not produce a core dump on abort(3)
$QEMU_IO -c "write -P 0x5a 0 512" -c "abort" $TEST_IMG | _filter_qemu_io
ulimit -c "$old_ulimit"

# The dirty bit must be set
./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
./qcow2.py $TEST_IMG dump-header | grep incompatible_features

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

$QEMU_IMG check -r all $TEST_IMG

# The dirty bit must not be set
./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

old_ulimit=$(ulimit -c)
ulimit -c 0 # do not produce a core dump on abort(3)
$QEMU_IO -c "write -P 0x5a 0 512" -c "abort" $TEST_IMG | _filter_qemu_io
ulimit -c "$old_ulimit"

# The dirty bit must be set
./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
./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

old_ulimit=$(ulimit -c)
ulimit -c 0 # do not produce a core dump on abort(3)
$QEMU_IO -c "write -P 0x5a 0 512" -c "abort" $TEST_IMG | _filter_qemu_io
ulimit -c "$old_ulimit"

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

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

