#!/usr/bin/env bash
# group: rw auto
#
# 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 fuse
_require_drivers null-co

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,read-zeroes=on,node-name=null -device $dev,drive=null
    check_info_block -blockdev driver=null-co,read-zeroes=on,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,read-zeroes=on,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,read-zeroes=on,node-name=null -device $dev,drive=none0
    check_info_block -drive if=none,driver=null-co,read-zeroes=on,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,read-zeroes=on

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

check_info_block -drive if=virtio,driver=null-co,read-zeroes=on

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

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