#!/usr/bin/env bash
# group: rw auto quick
#
# Test case for support of JSON filenames
#
# Copyright (C) 2014 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=hreitz@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 qcow2
_supported_proto file fuse
# Because anything other than 16 would change the output of qemu_io -c info
_unsupported_imgopts 'refcount_bits=\([^1]\|.\([^6]\|$\)\)'

# Using an image filename containing quotation marks will render the JSON data
# below invalid. In that case, we have little choice but simply not to run this
# test.
case $TEST_IMG in
    *'"'*)
        _notrun "image filename may not contain quotation marks"
        ;;
esac

IMG_SIZE=64M

# Taken from test 072
echo
echo "=== Testing nested image formats ==="
echo

TEST_IMG="$TEST_IMG.base" _make_test_img $IMG_SIZE

$QEMU_IO -c 'write -P 42 0 512' -c 'write -P 23 512 512' \
         -c 'write -P 66 1024 512' "$TEST_IMG.base" | _filter_qemu_io

_make_test_img $IMG_SIZE
$QEMU_IMG convert -f raw -O $IMGFMT -n "$TEST_IMG.base" "$TEST_IMG"

$QEMU_IO_PROG --cache $CACHEMODE --aio $AIOMODE \
         -c 'read -P 42 0 512' -c 'read -P 23 512 512' \
         -c 'read -P 66 1024 512' "json:{
    \"driver\": \"$IMGFMT\",
    \"file\": {
        \"driver\": \"$IMGFMT\",
        \"file\": {
            \"filename\": \"$TEST_IMG\"
        }
    }
}" | _filter_qemu_io

# This should fail (see test 072)
$QEMU_IO -c 'read -P 42 0 512' "$TEST_IMG" | _filter_qemu_io


echo
echo "=== Testing correct handling of 'backing':null ==="
echo

_make_test_img -b "$TEST_IMG.base" -F $IMGFMT $IMG_SIZE

# This should read 42
$QEMU_IO -c 'read -P 42 0 512' "$TEST_IMG" | _filter_qemu_io

# This should read 0
$QEMU_IO -c 'read -P 0 0 512' "json:{\
    'driver': '$IMGFMT',
    'file': {
        'driver': 'file',
        'filename': '$TEST_IMG'
    },
    'backing': null
}" | _filter_qemu_io


# Taken from test 071
echo
echo "=== Testing blkdebug ==="
echo

_make_test_img $IMG_SIZE

$QEMU_IO -c 'write -P 42 0x38000 512' "$TEST_IMG" | _filter_qemu_io

# The "image.filename" part tests whether "a": { "b": "c" } and "a.b": "c" do
# the same (which they should).
$QEMU_IO_PROG --cache $CACHEMODE --aio $AIOMODE  \
     -c 'read -P 42 0x38000 512' "json:{
    \"driver\": \"$IMGFMT\",
    \"file\": {
        \"driver\": \"blkdebug\",
        \"inject-error\": [{
            \"event\": \"l2_load\"
        }],
        \"image.filename\": \"$TEST_IMG\"
    }
}" | _filter_qemu_io


echo
echo "=== Testing qemu-img info output ==="
echo

TEST_IMG="json:{\"driver\":\"qcow2\",\"file.filename\":\"$TEST_IMG\"}" _img_info


echo
echo "=== Testing option merging ==="
echo

# Both options given directly and those given in the filename should be used
$QEMU_IO -c "open -o driver=qcow2 json:{\"file.filename\":\"$TEST_IMG\"}" \
         -c "info" 2>&1 | _filter_img_info

# Options given directly should be prioritized over those given in the filename
$QEMU_IO -c "open -o driver=qcow2 json:{\"driver\":\"raw\",\"file.filename\":\"$TEST_IMG\"}" \
         -c "info" 2>&1 | _filter_img_info


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