#!/bin/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 -f "${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},id=disk
h=$QEMU_HANDLE
QEMU_COMM_TIMEOUT=1

# 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.
_send_qemu_cmd $h "drive_backup disk ${TEST_IMG}.copy" "(qemu)" >/dev/null
_send_qemu_cmd $h "" "Formatting" | _filter_img_create
qemu_cmd_repeat=20 _send_qemu_cmd $h "info block-jobs" "No active jobs" >/dev/null
_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
