#!/usr/bin/env bash
# group: rw
#
# Test compressed write to a qcow2 image at an offset above 4 GB
#
# Copyright (C) 2019 Red Hat, Inc.
#
# 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/>.
#

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

# This is a qcow2 regression test
_supported_fmt qcow2
_supported_proto file fuse

# External data files do not support compression;
# We need an exact cluster size (2M) and refcount width (2) so we can
# get this test quickly over with; and this in turn require
# compat=1.1
_unsupported_imgopts data_file cluster_size refcount_bits 'compat=0.10'

# The idea is: Create an empty file, mark the first 4 GB as used, then
# do a compressed write that thus must be put beyond 4 GB.
# (This used to fail because the compressed sector mask was just a
# 32 bit mask, so qemu-img check will count a cluster before 4 GB as
# referenced twice.)

# We would like to use refcount_bits=1 here, but then qemu-img check
# will throw an error when trying to count a cluster as referenced
# twice.
_make_test_img -o cluster_size=2M,refcount_bits=2 64M

reft_offs=$(peek_file_be "$TEST_IMG" 48 8)
refb_offs=$(peek_file_be "$TEST_IMG" $reft_offs 8)

# We want to cover 4 GB, those are 2048 clusters, equivalent to
# 4096 bit = 512 B.
truncate -s 4G "$TEST_IMG"
for ((in_refb_offs = 0; in_refb_offs < 512; in_refb_offs += 8)); do
    poke_file "$TEST_IMG" $((refb_offs + in_refb_offs)) \
        '\x55\x55\x55\x55\x55\x55\x55\x55'
done

$QEMU_IO -c 'write -c -P 42 0 2M' "$TEST_IMG" | _filter_qemu_io

echo
echo '--- Check ---'

# This should only print the leaked clusters in the first 4 GB
_check_test_img | grep -v '^Leaked cluster '

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