#!/usr/bin/env bash
#
# Test creating raw image preallocation mode
#
# Copyright (C) 2017 Nir Soffer <nirsof@gmail.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=nirsof@gmail.com

seq=`basename $0`
echo "QA output created by $seq"

status=1	# failure is the default!

_cleanup()
{
    _cleanup_test_img
    rm -f "$TEST_DIR/empty"
}
trap "_cleanup; exit \$status" 0 1 2 3 15

# Some file systems sometimes allocate extra blocks independently of
# the file size.  This function hides the resulting difference in the
# stat -c '%b' output.
# Parameter 1: Number of blocks an empty file occupies
# Parameter 2: Minimal number of blocks in an image
# Parameter 3: Image size in bytes
_filter_blocks()
{
    extra_blocks=$1
    min_blocks=$2
    img_size=$3

    sed -e "s/blocks=$min_blocks\\(\$\\|[^0-9]\\)/min allocation/" \
        -e "s/blocks=$((extra_blocks + img_size / 512))\\(\$\\|[^0-9]\\)/max allocation/"
}

# Resize image using block_resize.
# Parameter 1: image path
# Parameter 2: new size
_block_resize()
{
    local path=$1
    local size=$2

    $QEMU -qmp stdio -nographic -nodefaults \
        -blockdev file,node-name=file,filename=$path,cache.direct=on \
        <<EOF
{'execute': 'qmp_capabilities'}
{'execute': 'block_resize', 'arguments': {'node-name': 'file', 'size': $size}}
{'execute': 'quit'}
EOF
}

# get standard environment, filters and checks
. ./common.rc
. ./common.filter

_supported_fmt raw
_supported_proto file
_supported_os Linux

_default_cache_mode none
_supported_cache_modes none directsync

size=$((1 * 1024 * 1024))

touch "$TEST_DIR/empty"
extra_blocks=$(stat -c '%b' "$TEST_DIR/empty")

# We always write the first byte; check how many blocks this filesystem
# allocates to match empty image alloation.
printf "\0" > "$TEST_DIR/empty"
min_blocks=$(stat -c '%b' "$TEST_DIR/empty")

echo
echo "== creating image with default preallocation =="
_make_test_img $size | _filter_imgfmt
stat -c "size=%s, blocks=%b" $TEST_IMG | _filter_blocks $extra_blocks $min_blocks $size

for mode in off full falloc; do
    echo
    echo "== creating image with preallocation $mode =="
    _make_test_img -o preallocation=$mode $size | _filter_imgfmt
    stat -c "size=%s, blocks=%b" $TEST_IMG | _filter_blocks $extra_blocks $min_blocks $size
done

for new_size in 4096 1048576; do
    echo
    echo "== resize empty image with block_resize =="
    _make_test_img 0 | _filter_imgfmt
    _block_resize $TEST_IMG $new_size >/dev/null
    stat -c "size=%s, blocks=%b" $TEST_IMG | _filter_blocks $extra_blocks $min_blocks $new_size
done

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