#!/usr/bin/env bash
#
# Test that backing files can be smaller than the image
#
# Copyright (C) 2010 IBM, Corp.
#
# Based on 017:
# Copyright (C) 2009 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=stefanha@linux.vnet.ibm.com

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

status=1	# failure is the default!

_cleanup()
{
    _cleanup_qemu
    _rm_test_img "${TEST_IMG}.copy"
    _cleanup_test_img
}
trap "_cleanup; exit \$status" 0 1 2 3 15

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

# Any format supporting backing files except vmdk and qcow which do not support
# smaller backing files.
_supported_fmt qcow2 qed
_supported_proto file
_supported_os Linux

# Choose a size that is not necessarily a cluster size multiple for image
# formats that use clusters.  This will ensure that the base image doesn't end
# precisely on a cluster boundary (the easy case).
image_size=$(( 4 * 1024 * 1024 * 1024 + 3 * 512 ))

# The base image is smaller than the image file
base_size=$(( image_size - 1024 * 1024 * 1024 ))

offset=$(( base_size - 32 * 1024 ))

TEST_IMG_SAVE="$TEST_IMG"
TEST_IMG="$TEST_IMG.base"

_make_test_img $base_size

echo "Filling base image"
echo

# Fill end of base image with a pattern, skipping every other sector
io writev $offset 512 1024 32

_check_test_img

echo "Creating test image with backing file"
echo

TEST_IMG="$TEST_IMG_SAVE"
_make_test_img -b "$TEST_IMG.base" $image_size

echo "Filling test image"
echo

# Write every other sector around where the base image ends
io writev $(( offset + 512 )) 512 1024 64

_check_test_img

echo "Reading"
echo

# Base image sectors
io readv $(( offset )) 512 1024 32

# Image sectors
io readv $(( offset + 512 )) 512 1024 64

# Zero sectors beyond end of base image
io_zero readv $(( offset + 32 * 1024 )) 512 1024 32

_check_test_img

# Rebase it on top of its base image
$QEMU_IMG rebase -b "$TEST_IMG.base" "$TEST_IMG"

echo
echo block-backup
echo

qemu_comm_method="monitor"
_launch_qemu -drive file="${TEST_IMG}",cache=${CACHEMODE},aio=${AIOMODE},id=disk
h=$QEMU_HANDLE
if [ "${VALGRIND_QEMU}" == "y" ]; then
    QEMU_COMM_TIMEOUT=7
else
    QEMU_COMM_TIMEOUT=1
fi

# Silence output since it contains the disk image path and QEMU's readline
# character echoing makes it very hard to filter the output. Plus, there
# is no telling how many times the command will repeat before succeeding.
# (Note that creating the image results in a "Formatting..." message over
# stdout, which is the same channel the monitor uses.  We cannot reliably
# wait for it because the monitor output may interact with it in such a
# way that _timed_wait_for cannot read it.  However, once the block job is
# done, we know that the "Formatting..." message must have appeared
# already, so the output is still deterministic.)
silent=y _send_qemu_cmd $h "drive_backup disk ${TEST_IMG}.copy" "(qemu)"
silent=y qemu_cmd_repeat=20 _send_qemu_cmd $h "info block-jobs" "No active jobs"
_send_qemu_cmd $h "info block-jobs" "No active jobs"
_send_qemu_cmd $h 'quit' ""

# Base image sectors
TEST_IMG="${TEST_IMG}.copy" io readv $(( offset )) 512 1024 32

# Image sectors
TEST_IMG="${TEST_IMG}.copy" io readv $(( offset + 512 )) 512 1024 64

# Zero sectors beyond end of base image
TEST_IMG="${TEST_IMG}.copy" io_zero readv $(( offset + 32 * 1024 )) 512 1024 32


_check_test_img

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