#!/bin/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
_supported_os Linux
# 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 \
         -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 \
     -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
