#!/usr/bin/env bash
# group: rw backing quick
#
# Test large write to a qcow2 image
#
# 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
_supported_os Linux

# We use our own external data file and our own cluster size, and we
# require v3 images
_unsupported_imgopts data_file cluster_size 'compat=0.10'


# We need a backing file so that handle_alloc_space() will not do
# anything.  (If it were to do anything, it would simply fail its
# write-zeroes request because the request range is too large.)
TEST_IMG="$TEST_IMG.base" _make_test_img 4G
$QEMU_IO -c 'write 0 512' "$TEST_IMG.base" | _filter_qemu_io

# (Use .orig because _cleanup_test_img will remove that file)
# We need a large cluster size, see below for why (above the $QEMU_IO
# invocation)
_make_test_img -o cluster_size=2M,data_file="$TEST_IMG.orig" \
    -b "$TEST_IMG.base" -F $IMGFMT 4G

# We want a null-co as the data file, because it allows us to quickly
# "write" 2G of data without using any space.
# (qemu-img create does not like it, though, because null-co does not
# support image creation.)
test_img_with_null_data="json:{
    'driver': '$IMGFMT',
    'file': {
        'filename': '$TEST_IMG'
    },
    'data-file': {
        'driver': 'null-co',
        'size':'4294967296'
    }
}"

# This gives us a range of:
#   2^31 - 512 + 768 - 1 = 2^31 + 255 > 2^31
# until the beginning of the end COW block.  (The total allocation
# size depends on the cluster size, but all that is important is that
# it exceeds INT_MAX.)
#
# 2^31 - 512 is the maximum request size.  We want this to result in a
# single allocation, and because the qcow2 driver splits allocations
# on L2 boundaries, we need large L2 tables; hence the cluster size of
# 2 MB.  (Anything from 256 kB should work, though, because then one L2
# table covers 8 GB.)
$QEMU_IO -c "write 768 $((2 ** 31 - 512))" "$test_img_with_null_data" | _filter_qemu_io

_check_test_img

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