#!/usr/bin/env bash
# group: rw quick
#
# parallels format validation tests (created by QEMU)
#
# Copyright (C) 2014 Denis V. Lunev <den@openvz.org>
#
# 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=den@openvz.org

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 parallels
_supported_proto file
_supported_os Linux

inuse_offset=$((0x2c))

size=$((64 * 1024 * 1024))
CLUSTER_SIZE=64k
IMGFMT=parallels
_make_test_img $size

echo == read empty image ==
{ $QEMU_IO -c "read -P 0 32k 64k" "$TEST_IMG"; } 2>&1 | _filter_qemu_io | _filter_testdir
echo == write more than 1 block in a row ==
{ $QEMU_IO -c "write -P 0x11 32k 128k" "$TEST_IMG"; } 2>&1 | _filter_qemu_io | _filter_testdir
echo == read less than block ==
{ $QEMU_IO -c "read -P 0x11 32k 32k" "$TEST_IMG"; } 2>&1 | _filter_qemu_io | _filter_testdir
echo == read exactly 1 block ==
{ $QEMU_IO -c "read -P 0x11 64k 64k" "$TEST_IMG"; } 2>&1 | _filter_qemu_io | _filter_testdir
echo == read more than 1 block ==
{ $QEMU_IO -c "read -P 0x11 32k 128k" "$TEST_IMG"; } 2>&1 | _filter_qemu_io | _filter_testdir
echo == check that there is no trash after written ==
{ $QEMU_IO -c "read -P 0 160k 32k" "$TEST_IMG"; } 2>&1 | _filter_qemu_io | _filter_testdir
echo == check that there is no trash before written ==
{ $QEMU_IO -c "read -P 0 0 32k" "$TEST_IMG"; } 2>&1 | _filter_qemu_io | _filter_testdir

echo "== Corrupt image =="
poke_file "$TEST_IMG" "$inuse_offset" "\x59\x6e\x6f\x74"
{ $QEMU_IO -c "read -P 0x11 64k 64k" "$TEST_IMG"; } 2>&1 | _filter_qemu_io | _filter_testdir
_check_test_img
_check_test_img -r all
{ $QEMU_IO -c "read -P 0x11 64k 64k" "$TEST_IMG"; } 2>&1 | _filter_qemu_io | _filter_testdir

echo "== allocate with backing =="
# Verify that allocating clusters works fine even when there is a backing image.
# Regression test for a bug where we would pass a buffer read from the backing
# node as a QEMUIOVector object, which could cause anything from I/O errors over
# assertion failures to invalid reads from memory.

# Clear image
_make_test_img $size
# Create base image
TEST_IMG="$TEST_IMG.base" _make_test_img $size

# Write some data to the base image (which would trigger an assertion failure if
# interpreted as a QEMUIOVector)
$QEMU_IO -c 'write -P 42 0 64k' "$TEST_IMG.base" | _filter_qemu_io

# Parallels does not seem to support storing a backing filename in the image
# itself, so we need to build our backing chain on the command line
imgopts="driver=$IMGFMT,file.driver=$IMGPROTO,file.filename=$TEST_IMG"
imgopts+=",backing.driver=$IMGFMT"
imgopts+=",backing.file.driver=$IMGPROTO,backing.file.filename=$TEST_IMG.base"

# Cause allocation in the top image
QEMU_IO_OPTIONS=$QEMU_IO_OPTIONS_NO_FMT \
    $QEMU_IO --image-opts "$imgopts" -c 'write -P 1 0 64' | _filter_qemu_io

# Verify
QEMU_IO_OPTIONS=$QEMU_IO_OPTIONS_NO_FMT \
    $QEMU_IO --image-opts "$imgopts" \
    -c 'read -P 1 0 64' \
    -c "read -P 42 64 $((64 * 1024 - 64))" \
    -c "read -P 0 64k $((size - 64 * 1024))" \
    | _filter_qemu_io

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