#!/usr/bin/env bash
# group: rw auto quick
#
# Test valid filenames for blkdebug and blkverify representatively for
# other protocols (such as NBD) when queried
#
# 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
    _rm_test_img "$TEST_IMG.compare"
    rm -f "$TEST_DIR/blkdebug.conf"

}
trap "_cleanup; exit \$status" 0 1 2 3 15

# get standard environment, filters and checks
. ./common.rc
. ./common.filter

# Basically all formats, but "raw" has issues with _filter_imgfmt regarding the
# raw comparison image for blkverify; also, all images have to support creation
_supported_fmt qcow qcow2 qed vdi vhdx vmdk vpc
_supported_proto file
_supported_os Linux
_require_drivers blkdebug blkverify
# data_file would change the json:{} filenames
_unsupported_imgopts "subformat=monolithicFlat" "subformat=twoGbMaxExtentFlat" \
    "subformat=twoGbMaxExtentSparse" data_file

do_run_qemu()
{
    $QEMU -nographic -qmp stdio -serial none "$@"
}

run_qemu()
{
    # Get the "file": "foo" entry ($foo may only contain escaped double quotes,
    # which is how we can extract it)
    do_run_qemu "$@" 2>&1 | _filter_testdir | _filter_imgfmt | _filter_qmp \
        | _filter_qemu | grep "drv0" \
        | sed -e 's/^.*"file": "\(\(\\"\|[^"]\)*\)".*$/\1/' -e 's/\\"/"/g'
}

test_qemu()
{
    run_qemu -drive "if=none,id=drv0,$1" <<EOF
        { 'execute': 'qmp_capabilities' }
        { 'execute': 'query-block' }
        { 'execute': 'quit' }
EOF
}



IMG_SIZE=128K

_make_test_img $IMG_SIZE
$QEMU_IMG create -f raw "$TEST_IMG.compare" $IMG_SIZE \
    | _filter_testdir | _filter_imgfmt

echo
echo '=== Testing simple filename for blkverify ==='
echo

# This should return simply the filename itself
test_qemu "file=blkverify:$TEST_IMG.compare:$TEST_IMG"

echo
echo '=== Testing filename reconstruction for blkverify ==='
echo

# This should return the same filename as above
test_qemu "file.driver=blkverify,file.raw.filename=$TEST_IMG.compare,file.test.file.filename=$TEST_IMG"

echo
echo '=== Testing JSON filename for blkdebug ==='
echo

# blkdebug cannot create a configuration file, therefore it is unable to
# generate a plain filename here; thus this should return a JSON filename
test_qemu "file.driver=blkdebug,file.image.filename=$TEST_IMG,file.inject-error.0.event=l1_update"

echo
echo '=== Testing indirectly enforced JSON filename ==='
echo

# Because blkdebug cannot return a plain filename, blkverify is forced to
# generate a JSON object here as well
test_qemu "file.driver=blkverify,file.raw.filename=$TEST_IMG.compare,file.test.file.driver=blkdebug,file.test.file.image.filename=$TEST_IMG,file.test.file.inject-error.0.event=l1_update"

echo
echo '=== Testing plain filename for blkdebug ==='
echo

touch "$TEST_DIR/blkdebug.conf"
test_qemu "file.driver=blkdebug,file.config=$TEST_DIR/blkdebug.conf,file.image.filename=$TEST_IMG"

echo
echo '=== Testing plain filename for blkdebug without configuration file ==='
echo

test_qemu "file.driver=blkdebug,file.image.filename=$TEST_IMG"


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