#!/usr/bin/env bash
# group: auto quick
#
# Test case for connecting to a non-existing NBD export name
#
# 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=hreitz@redhat.com

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

status=1	# failure is the default!

_cleanup()
{
    _cleanup_qemu
    rm -f "$SOCK_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 generic

keep_stderr=y \
_launch_qemu 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': '$SOCK_DIR/nbd' }}}}" \
    'return'

# This should just result in a client error, not in the server crashing
$QEMU_IO_PROG -f raw -c quit \
    "nbd+unix:///no_such_export?socket=$SOCK_DIR/nbd" 2>&1 \
    | _filter_qemu_io | _filter_nbd
# Likewise, with longest possible name permitted in NBD protocol
$QEMU_IO_PROG -f raw -c quit \
    "nbd+unix:///$(printf %4096d 1 | tr ' ' a)?socket=$SOCK_DIR/nbd" 2>&1 \
    | _filter_qemu_io | _filter_nbd | sed 's/aaaa*aa/aa--aa/'

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

wait=1 _cleanup_qemu

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