#!/usr/bin/env bash
# group: rw auto quick
#
# Test that qemu-img convert -S 0 fully allocates the target image
#
# Copyright (C) 2016 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/>.
#

# creator
owner=hreitz@redhat.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 raw qcow2
_supported_proto file
_supported_os Linux


img_size=1048576


echo
echo '=== Mapping sparse conversion ==='
echo

$QEMU_IMG_PROG convert -O "$IMGFMT" -S 512 \
    "json:{ 'driver': 'null-co', 'size': $img_size, 'read-zeroes': true }" \
    "$TEST_IMG"

$QEMU_IMG map "$TEST_IMG" | _filter_qemu_img_map


echo
echo '=== Mapping non-sparse conversion ==='
echo

$QEMU_IMG convert -O "$IMGFMT" -S 0 \
    "json:{ 'driver': 'null-co', 'size': $img_size, 'read-zeroes': true }" \
    "$TEST_IMG"

$QEMU_IMG map "$TEST_IMG" | _filter_qemu_img_map


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