#!/usr/bin/env bash
#
# Test legacy and modern option parsing for rbd/ceph.  This will not
# actually connect to a ceph server, but rather looks for the appropriate
# error message that indicates we parsed the options correctly.
#
# Copyright (C) 2018 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=jcody@redhat.com

seq=`basename $0`
echo "QA output created by $seq"

status=1	# failure is the default!

_cleanup()
{
    rm "${BOGUS_CONF}"
}
trap "_cleanup; exit \$status" 0 1 2 3 15

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

_supported_fmt generic
_supported_proto rbd
_supported_os Linux

BOGUS_CONF=${TEST_DIR}/ceph-$$.conf
touch "${BOGUS_CONF}"

_filter_conf()
{
    sed -e "s#$BOGUS_CONF#BOGUS_CONF#g"
}

# We expect this to fail, with no monitor ip provided and a null conf file.  Just want it
# to fail in the right way.
$QEMU_IMG info "json:{'file.driver':'rbd','file.filename':'rbd:rbd/bogus:conf=${BOGUS_CONF}'}" 2>&1 | _filter_conf
$QEMU_IMG info "json:{'file.driver':'rbd','file.pool':'rbd','file.image':'bogus','file.conf':'${BOGUS_CONF}'}" 2>&1 | _filter_conf

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