#!/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" -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
