#!/usr/bin/env bash
#
# 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=mreitz@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
# 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

$QEMU_IMG convert -f raw -O $IMGFMT "$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" $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
