#!/usr/bin/env bash
#
# Test 'offset' and 'size' options of the raw driver. Make sure we can't
# (or can) read and write outside of the image size.
#
# Copyright (C) 2016 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=tgolembi@redhat.com

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


# Create JSON with options
img_json() {
    printf %s 'json:{"driver":"raw", '
    printf %s "\"offset\":\"$img_offset\", "
    if [ "$img_size" -ne -1 ] ; then
        printf %s "\"size\":\"$img_size\", "
    fi
    printf %s '"file": {'
    printf %s   '"driver":"file", '
    printf %s   "\"filename\":\"$TEST_IMG\" "
    printf %s "} }"
}

do_general_test() {
    if [ "$img_size" -ge 0 ] ; then
        test_size=$img_size
    else
        test_size=$((size-img_offset))
    fi

    echo
    echo "write to image"
    $QEMU_IO -c "write -P 0x0a 0 $test_size" "$(img_json)" | _filter_qemu_io

    echo
    echo "read the image"
    $QEMU_IO -c "read -P 0x0a 0 $test_size" "$(img_json)" | _filter_qemu_io

    echo
    echo "check that offset is respected"
    $QEMU_IO -c "read -v $((img_offset-2)) 4" $TEST_IMG | _filter_qemu_io

    echo
    echo "write before image boundary"
    $QEMU_IO -c "write $((test_size-1)) 1" "$(img_json)" | _filter_qemu_io

    echo
    echo "write across image boundary"
    $QEMU_IO -c "write $((test_size-1)) 2" "$(img_json)" | _filter_qemu_io

    echo
    echo "write at image boundary"
    $QEMU_IO -c "write $test_size 1" "$(img_json)" | _filter_qemu_io

    echo
    echo "write after image boundary"
    $QEMU_IO -c "write $((test_size+512)) 1" "$(img_json)" | _filter_qemu_io

    echo
    echo "writev before/after image boundary"
    $QEMU_IO -c "writev $((test_size-512)) 512 512" "$(img_json)" | _filter_qemu_io

    echo
    echo "read before image boundary"
    $QEMU_IO -c "read $((test_size-1)) 1" "$(img_json)" | _filter_qemu_io

    echo
    echo "read across image boundary"
    $QEMU_IO -c "read $((test_size-1)) 2" "$(img_json)" | _filter_qemu_io

    echo
    echo "read at image boundary"
    $QEMU_IO -c "read $test_size 1" "$(img_json)" | _filter_qemu_io

    echo
    echo "read after image boundary"
    $QEMU_IO -c "read $((test_size+512)) 1" "$(img_json)" | _filter_qemu_io

    echo
    echo "readv before/after image boundary"
    $QEMU_IO -c "readv $((test_size-512)) 512 512" "$(img_json)" | _filter_qemu_io

    echo
    echo "fill image with pattern"
    $QEMU_IO -c "write -P 0x0a 0 $size" $TEST_IMG | _filter_qemu_io

    echo
    echo "write zeroes and check"
    $QEMU_IO -c "write -z 0 512" "$(img_json)" | _filter_qemu_io
    $QEMU_IO -c "read -v $((img_offset-2)) 4" $TEST_IMG | _filter_qemu_io

    echo
    echo "write zeroes across image boundary"
    $QEMU_IO -c "write -z $((test_size-1)) 2" "$(img_json)" | _filter_qemu_io

    echo
    echo "write zeroes at image boundary and check"
    $QEMU_IO -c "write -z $((test_size-2)) 2" "$(img_json)" | _filter_qemu_io
    $QEMU_IO -c "read -v $((img_offset+test_size-2)) 2" $TEST_IMG | _filter_qemu_io
    $QEMU_IO -c "read -v $((img_offset+test_size)) 2" $TEST_IMG | _filter_qemu_io

    echo
    echo "fill image with pattern"
    $QEMU_IO -c "write -P 0x0a 0 $size" $TEST_IMG | _filter_qemu_io

    echo
    echo "discard and check"
    $QEMU_IO -c "discard 0 512" "$(img_json)" | _filter_qemu_io
    $QEMU_IO -c "read -v $((img_offset-2)) 4" $TEST_IMG | _filter_qemu_io

    echo
    echo "discard across image boundary"
    $QEMU_IO -c "discard $((test_size-1)) 2" "$(img_json)" | _filter_qemu_io

    echo
    echo "discard at image boundary and check"
    $QEMU_IO -c "discard $((test_size-2)) 2" "$(img_json)" | _filter_qemu_io
    $QEMU_IO -c "read -v $((img_offset+test_size-2)) 2" $TEST_IMG | _filter_qemu_io
    $QEMU_IO -c "read -v $((img_offset+test_size)) 2" $TEST_IMG | _filter_qemu_io
}

echo
echo "== test 'offset' option =="
size=4096
img_offset=512
img_size=-1
_make_test_img $size
do_general_test
_cleanup_test_img

echo
echo "== test 'offset' and 'size' options =="
size=4096
img_offset=512
img_size=2048
_make_test_img $size
do_general_test
_cleanup_test_img

echo
echo "== test misaligned 'offset' =="
size=4096
img_offset=10
img_size=2048
_make_test_img $size
do_general_test
_cleanup_test_img

echo
echo "== test reopen =="
size=4096
img_offset=512
img_size=512
_make_test_img $size
(
$QEMU_IO "$(img_json)"  <<EOT
write -P 0x0a 0 512
write -P 0x0a 511 1
write -P 0x0a 512 1
reopen -o driver=raw,offset=1536,size=1024
write -P 0x0a 0 1024
write -P 0x0a 1023 1
write -P 0x0a 1024 1
EOT
) | _filter_qemu_io
echo "checking boundaries"
$QEMU_IO -c "read -v 510 4" $TEST_IMG | _filter_qemu_io
$QEMU_IO -c "read -v 1022 4" $TEST_IMG | _filter_qemu_io
$QEMU_IO -c "read -v 1534 4" $TEST_IMG | _filter_qemu_io
$QEMU_IO -c "read -v 2558 4" $TEST_IMG | _filter_qemu_io
_cleanup_test_img

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