#!/bin/bash
#
# Test case for accessing creation options on image formats and
# protocols not supporting image creation
#
# Copyright (C) 2014 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"

here="$PWD"
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

# We can only test one format here because we need its sample file
_supported_fmt bochs
_supported_proto nbd
_supported_os Linux

echo
echo '=== Unsupported image creation in qemu-img create ==='
echo

$QEMU_IMG create -f $IMGFMT nbd://example.com 2>&1 64M | _filter_imgfmt

echo
echo '=== Unsupported image creation in qemu-img convert ==='
echo

# We could use any input image format here, but this is a bochs test, so just
# use the bochs image
_use_sample_img empty.bochs.bz2
$QEMU_IMG convert -f $IMGFMT -O $IMGFMT "$TEST_IMG" nbd://example.com 2>&1 \
    | _filter_imgfmt

echo
echo '=== Unsupported format in qemu-img amend ==='
echo

# The protocol does not matter here
_use_sample_img empty.bochs.bz2
$QEMU_IMG amend -f $IMGFMT -o foo=bar "$TEST_IMG" 2>&1 | _filter_imgfmt


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