#!/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"

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 =="

_check_test_img -r all

# 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

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
./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
./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

