#!/usr/bin/env bash
#
# Test 'info block' with all kinds of configurations
#
# Copyright (C) 2017 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=kwolf@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

if [ "$QEMU_DEFAULT_MACHINE" != "pc" ]; then
    _notrun "Requires a PC machine"
fi

do_run_qemu()
{
    echo Testing: "$@"

    (
        if ! test -t 0; then
            while read cmd; do
                echo $cmd
            done
        fi
        echo quit
    ) | $QEMU -S -display none -device virtio-scsi-pci -monitor stdio "$@" 2>&1
    echo
}

check_info_block()
{
    echo "info block" |
    do_run_qemu "$@" | _filter_win32 | _filter_hmp | _filter_qemu |
        _filter_generated_node_ids | _filter_qom_path
}


size=64M
_make_test_img $size

removable="floppy ide-cd scsi-cd"
fixed="ide-hd scsi-hd virtio-blk-pci"

echo
echo "=== Empty drives ==="
echo

for dev in $removable; do
    check_info_block -device $dev
    check_info_block -device $dev,id=qdev_id
done

echo
echo "=== -blockdev/-device=<node-name> ==="
echo

for dev in $fixed $removable; do
    check_info_block -blockdev driver=null-co,node-name=null -device $dev,drive=null
    check_info_block -blockdev driver=null-co,node-name=null -device $dev,drive=null,id=qdev_id
done

echo
echo "=== -drive if=none/-device=<node-name> ==="
echo

# This creates two BlockBackends that will show up in 'info block'!
# A monitor-owned one from -drive, and anonymous one from -device
for dev in $fixed $removable; do
    check_info_block -drive if=none,driver=null-co,node-name=null -device $dev,drive=null,id=qdev_id
done

echo
echo "=== -drive if=none/-device=<bb-name> (with medium) ==="
echo

for dev in $fixed $removable; do
    check_info_block -drive if=none,driver=null-co,node-name=null -device $dev,drive=none0
    check_info_block -drive if=none,driver=null-co,node-name=null -device $dev,drive=none0,id=qdev_id
done

echo
echo "=== -drive if=none/-device=<bb-name> (without medium) ==="
echo

check_info_block -drive if=none

for dev in $removable; do
    check_info_block -drive if=none -device $dev,drive=none0
    check_info_block -drive if=none -device $dev,drive=none0,id=qdev_id
done

echo
echo "=== -drive if=... ==="
echo

check_info_block -drive if=floppy
check_info_block -drive if=floppy,driver=null-co

check_info_block -drive if=ide,driver=null-co
check_info_block -drive if=ide,media=cdrom
check_info_block -drive if=ide,driver=null-co,media=cdrom

check_info_block -drive if=virtio,driver=null-co

check_info_block -drive if=pflash,driver=null-co,size=1M

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