#!/usr/bin/env bash
# group: rw quick
#
# 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 fuse
_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
