#!/usr/bin/env bash
# group: auto
#
# Test floppy configuration
#
# Copyright (C) 2016 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
    _rm_test_img "$TEST_IMG.2"
    _rm_test_img "$TEST_IMG.3"
}
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

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

do_run_qemu()
{
    (
        if ! test -t 0; then
            while read cmd; do
                echo $cmd
            done
        fi
        echo quit
    ) | $QEMU -accel qtest -nographic -monitor stdio -serial none -vga none -nic none "$@"
    echo
}

check_floppy_qtree()
{
    echo
    echo Testing: "$@" | _filter_testdir

    # QEMU_OPTIONS contains -nodefaults, we don't want that here because the
    # defaults are part of what should be checked here.
    #
    # Apply the sed filter to stdout only, but keep the stderr output and
    # filter the qemu program name in it.
    printf "info qtree\ninfo block\n" |
    (QEMU_OPTIONS="" do_run_qemu "$@" |
	_filter_testdir |_filter_generated_node_ids | _filter_hmp |
        sed -ne '/^          dev: isa-fdc/,/^          dev:/{x;p};/^[a-z][^ ]* (NODE_NAME):* /,/^(qemu)$/{p}') 2>&1 |
    _filter_win32 | _filter_qemu | _filter_qom_path
}

check_cache_mode()
{
    echo "info block none0" |
    QEMU_OPTIONS="" do_run_qemu -drive if=none,file="$TEST_IMG" "$@" |
    _filter_win32 | _filter_qemu | grep "Cache mode"
}


size=720k

_make_test_img $size

TEST_IMG="$TEST_IMG.2" _make_test_img $size
TEST_IMG="$TEST_IMG.3" _make_test_img $size

# Default drive semantics:
#
# By default you get a single empty floppy drive. You can override it with
# -drive and using the same index, but if you use -drive to add a floppy to a
# different index, you get both of them. However, as soon as you use any
# '-device floppy', even to a different slot, the default drive is disabled.

echo
echo
echo === Default ===

check_floppy_qtree

echo
echo
echo === Using -fda/-fdb options ===

check_floppy_qtree -fda "$TEST_IMG"
check_floppy_qtree -fdb "$TEST_IMG"
check_floppy_qtree -fda "$TEST_IMG" -fdb "$TEST_IMG.2"
check_floppy_qtree -fdb ""


echo
echo
echo === Using -drive options ===

check_floppy_qtree -drive if=floppy,file="$TEST_IMG"
check_floppy_qtree -drive if=floppy,file="$TEST_IMG",index=1
check_floppy_qtree -drive if=floppy,file="$TEST_IMG" -drive if=floppy,file="$TEST_IMG.2",index=1

echo
echo
echo === Using -drive if=none and -device ===

check_floppy_qtree -drive if=none,file="$TEST_IMG" -device floppy,drive=none0
check_floppy_qtree -drive if=none,file="$TEST_IMG" -device floppy,drive=none0,unit=1
check_floppy_qtree -drive if=none,file="$TEST_IMG" -drive if=none,file="$TEST_IMG.2" \
                   -device floppy,drive=none0 -device floppy,drive=none1,unit=1

echo
echo
echo === Mixing -fdX and -global ===

# Conflicting, -fdX wins
check_floppy_qtree -fda "$TEST_IMG" -drive if=none,file="$TEST_IMG.2" -global floppy.drive=none0

echo
echo
echo === Mixing -fdX and -device ===

# Working
check_floppy_qtree -fda "$TEST_IMG" -drive if=none,file="$TEST_IMG.2" -device floppy,drive=none0
check_floppy_qtree -fda "$TEST_IMG" -drive if=none,file="$TEST_IMG.2" -device floppy,drive=none0,unit=1

check_floppy_qtree -fdb "$TEST_IMG" -drive if=none,file="$TEST_IMG.2" -device floppy,drive=none0
check_floppy_qtree -fdb "$TEST_IMG" -drive if=none,file="$TEST_IMG.2" -device floppy,drive=none0,unit=0

# Conflicting
check_floppy_qtree -fda "$TEST_IMG" -drive if=none,file="$TEST_IMG.2" -device floppy,drive=none0,unit=0
check_floppy_qtree -fdb "$TEST_IMG" -drive if=none,file="$TEST_IMG.2" -device floppy,drive=none0,unit=1

echo
echo
echo === Mixing -drive and -device ===

# Working
check_floppy_qtree -drive if=floppy,file="$TEST_IMG" -drive if=none,file="$TEST_IMG.2" -device floppy,drive=none0
check_floppy_qtree -drive if=floppy,file="$TEST_IMG" -drive if=none,file="$TEST_IMG.2" -device floppy,drive=none0,unit=1

# Conflicting
check_floppy_qtree -drive if=floppy,file="$TEST_IMG" -drive if=none,file="$TEST_IMG.2" -device floppy,drive=none0,unit=0

echo
echo
echo === Mixing -global and -device ===

# Working
check_floppy_qtree -drive if=none,file="$TEST_IMG" \
                   -global floppy.drive=none0 -device floppy,unit=0

# Conflicting
check_floppy_qtree -drive if=none,file="$TEST_IMG" -drive if=none,file="$TEST_IMG.2" \
                   -global floppy.drive=none0 -device floppy,drive=none1,unit=0

echo
echo
echo === Attempt to use drive twice ===

# if=none
check_floppy_qtree -drive if=none -device floppy,drive=none0 -device floppy -device floppy,drive=none0
check_floppy_qtree -drive if=none -global floppy.drive=none0 -device floppy -device floppy
# if=floppy
check_floppy_qtree -fda "" -device floppy,drive=floppy0
check_floppy_qtree -fda "" -global floppy.drive=floppy0
# default if=floppy (not found, because it's created later)
check_floppy_qtree -device floppy,drive=floppy0

echo
echo
echo === Too many floppy drives ===

# Working
check_floppy_qtree -drive if=floppy,file="$TEST_IMG" \
                   -drive if=none,file="$TEST_IMG.2" \
                   -drive if=none,file="$TEST_IMG.3" \
                   -device floppy,drive=none0 \
                   -device floppy,drive=none1

echo
echo
echo === Creating an empty drive with anonymous BB ===

check_floppy_qtree -device floppy
check_floppy_qtree -device floppy,drive-type=120
check_floppy_qtree -device floppy,drive-type=144
check_floppy_qtree -device floppy,drive-type=288

echo
echo
echo === Try passing different drive size with image ===

check_floppy_qtree -drive if=none,file="$TEST_IMG" -device floppy,drive=none0,drive-type=120
check_floppy_qtree -drive if=none,file="$TEST_IMG" -device floppy,drive=none0,drive-type=288

echo
echo
echo === Try passing different block sizes ===

# Explicitly setting the default is okay
check_floppy_qtree -drive if=none,file="$TEST_IMG" -device floppy,drive=none0,logical_block_size=512
check_floppy_qtree -drive if=none,file="$TEST_IMG" -device floppy,drive=none0,physical_block_size=512

# Changing it is not
check_floppy_qtree -drive if=none,file="$TEST_IMG" -device floppy,drive=none0,logical_block_size=4096
check_floppy_qtree -drive if=none,file="$TEST_IMG" -device floppy,drive=none0,physical_block_size=1024

echo
echo
echo === Writethrough caching ===

check_cache_mode -device floppy,drive=none0
check_cache_mode -device floppy,drive=none0,write-cache=on
check_cache_mode -device floppy,drive=none0,write-cache=off

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