#!/usr/bin/env bash
#
# Test qcow2 preallocation
#
# 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/>.
#

# creator
owner=kwolf@redhat.com

seq=$(basename $0)
echo "QA output created by $seq"

status=1	# failure is the default!

_cleanup()
{
    _cleanup_test_img
    rm -f $TEST_IMG.data
}
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

for mode in off metadata falloc full; do

    echo
    echo "=== preallocation=$mode ==="
    echo

    IMGOPTS="preallocation=$mode" _make_test_img 64M

    printf "File size: "
    du -b $TEST_IMG | cut -f1

    # Can't use precise numbers here because they differ between filesystems
    printf "Disk usage: "
    [ $(du -B1 $TEST_IMG | cut -f1) -lt 1048576 ] && echo "low" || echo "high"

done

for mode in off metadata falloc full; do

    echo
    echo "=== External data file: preallocation=$mode ==="
    echo

    IMGOPTS="data_file=$TEST_IMG.data,preallocation=$mode" _make_test_img 64M

    echo -n "qcow2 file size: "
    du -b $TEST_IMG | cut -f1
    echo -n "data file size:  "
    du -b $TEST_IMG.data | cut -f1

    # Can't use precise numbers here because they differ between filesystems
    echo -n "qcow2 disk usage: "
    [ $(du -B1 $TEST_IMG | cut -f1) -lt 1048576 ] && echo "low" || echo "high"
    echo -n "data disk usage:  "
    [ $(du -B1 $TEST_IMG.data | cut -f1) -lt 1048576 ] && echo "low" || echo "high"

done

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