#!/usr/bin/env bash
#
# Test case for ejecting a BlockBackend with an NBD server attached to it
#
# Verify that the NBD server stops offering the drive when ejecting a
# BlockDriverState tree from a BlockBackend (that is, a medium from a
# drive) exposed via an NBD server.
#
# 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=mreitz@redhat.com

seq="$(basename $0)"
echo "QA output created by $seq"

status=1	# failure is the default!

_cleanup()
{
    _cleanup_qemu
    _cleanup_test_img
    rm -f "$TEST_DIR/nbd"
}
trap "_cleanup; exit \$status" 0 1 2 3 15

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

_supported_fmt generic
_supported_proto file
_supported_os Linux

_make_test_img 64k

$QEMU_IO -c 'write -P 42 0 64k' "$TEST_IMG" | _filter_qemu_io

if test "$IMGOPTSSYNTAX" = "true"
then
    SYSEMU_DRIVE_ARG=if=none,media=cdrom,id=drv,"$TEST_IMG"
else
    SYSEMU_DRIVE_ARG=if=none,media=cdrom,id=drv,file="$TEST_IMG",driver=$IMGFMT
fi

keep_stderr=y \
_launch_qemu -drive $SYSEMU_DRIVE_ARG \
    2> >(_filter_nbd)

_send_qemu_cmd $QEMU_HANDLE \
    "{ 'execute': 'qmp_capabilities' }" \
    'return'

_send_qemu_cmd $QEMU_HANDLE \
    "{ 'execute': 'nbd-server-start',
       'arguments': { 'addr': { 'type': 'unix',
                                'data': { 'path': '$TEST_DIR/nbd' }}}}" \
    'return'

_send_qemu_cmd $QEMU_HANDLE \
    "{ 'execute': 'nbd-server-add',
       'arguments': { 'device': 'drv' }}" \
    'return'

$QEMU_IO_PROG -f raw -r -c 'read -P 42 0 64k' \
    "nbd+unix:///drv?socket=$TEST_DIR/nbd" 2>&1 \
    | _filter_qemu_io | _filter_nbd

_send_qemu_cmd $QEMU_HANDLE \
    "{ 'execute': 'eject',
       'arguments': { 'device': 'drv' }}" \
    'return'

$QEMU_IO_PROG -f raw -r -c close \
    "nbd+unix:///drv?socket=$TEST_DIR/nbd" 2>&1 \
    | _filter_qemu_io | _filter_nbd

_send_qemu_cmd $QEMU_HANDLE \
    "{ 'execute': 'quit' }" \
    'return'

wait=1 _cleanup_qemu

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