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

here="$PWD"
tmp=/tmp/$$
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

# 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 -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


# 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 -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_testdir | _filter_imgfmt

# 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_testdir | _filter_imgfmt


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