#!/usr/bin/env bash
# group: rw auto quick
#
# Test for the regression fixed in commit c8bf9a9169
#
# Copyright (C) 2020 Igalia, S.L.
# Author: Alberto Garcia <berto@igalia.com>
# Based on a test case by Maxim Levitsky <mlevitsk@redhat.com>
#
# 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=berto@igalia.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

_supported_fmt qcow2
_supported_proto file
_supported_os Linux
_unsupported_imgopts cluster_size refcount_bits extended_l2 compat=0.10 data_file

# The cluster size must be at least the granularity of the mirror job (4KB)
# Note that larger cluster sizes will produce very large images (several GBs)
cluster_size=4096
refcount_bits=64 # Make it equal to the L2 entry size for convenience
options="cluster_size=${cluster_size},refcount_bits=${refcount_bits}"

# Number of refcount entries per refcount blocks
ref_entries=$(( ${cluster_size} * 8 / ${refcount_bits} ))

# Number of data clusters needed to fill a refcount block
# Equals ${ref_entries} minus two (one L2 table and one refcount block)
data_clusters_per_refblock=$(( ${ref_entries} - 2 ))

# Number of entries in the refcount cache
ref_blocks=4

# Write enough data clusters to fill the refcount cache and allocate
# one more refcount block.
# Subtract 3 clusters from the total: qcow2 header, refcount table, L1 table
total_data_clusters=$(( ${data_clusters_per_refblock} * ${ref_blocks} + 1 - 3 ))

# Total size to write in bytes
total_size=$(( ${total_data_clusters} * ${cluster_size} ))

echo
echo '### Create the image'
echo
TEST_IMG_FILE=$TEST_IMG.base _make_test_img -o $options $total_size | _filter_img_create_size

echo
echo '### Write data to allocate more refcount blocks than the cache can hold'
echo
$QEMU_IO -c "write -P 1 0 $total_size" $TEST_IMG.base | _filter_qemu_io

echo
echo '### Create an overlay'
echo
_make_test_img -F $IMGFMT -b $TEST_IMG.base -o $options | _filter_img_create_size

echo
echo '### Fill the overlay with zeroes'
echo
$QEMU_IO -c "write -z 0 $total_size" $TEST_IMG | _filter_qemu_io

echo
echo '### Commit changes to the base image'
echo
$QEMU_IMG commit $TEST_IMG

echo
echo '### Check the base image'
echo
$QEMU_IMG check $TEST_IMG.base

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