#!/bin/bash
#
# Test for reopen
#
# Copyright (C) 2015 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
}
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

TEST_IMG="$TEST_IMG.base" _make_test_img 64M
_make_test_img -b "$TEST_IMG.base"

echo
echo "=== Check that node-name can't be changed ==="
echo

$QEMU_IO -c 'reopen -o node-name=foo' $TEST_IMG
$QEMU_IO -c 'reopen -o file.node-name=foo' $TEST_IMG
$QEMU_IO -c 'reopen -o backing.node-name=foo' $TEST_IMG

echo
echo "=== Check that unchanged node-name is okay ==="
echo

# Explicitly repeated
$QEMU_IO -c "open -o node-name=foo $TEST_IMG" -c 'reopen -o node-name=foo'
$QEMU_IO -c "open -o file.node-name=foo $TEST_IMG" -c 'reopen -o file.node-name=foo'
$QEMU_IO -c "open -o backing.node-name=foo $TEST_IMG" -c 'reopen -o backing.node-name=foo'

# Implicitly retained
$QEMU_IO -c "open -o node-name=foo $TEST_IMG" -c 'reopen'
$QEMU_IO -c "open -o file.node-name=foo $TEST_IMG" -c 'reopen'
$QEMU_IO -c "open -o backing.node-name=foo $TEST_IMG" -c 'reopen'

echo
echo "=== Check that driver can't be changed ==="
echo

$QEMU_IO -c 'reopen -o driver=raw' $TEST_IMG
$QEMU_IO -c 'reopen -o file.driver=qcow2' $TEST_IMG
$QEMU_IO -c 'reopen -o backing.driver=file' $TEST_IMG

echo
echo "=== Check that unchanged driver is okay ==="
echo

# Explicitly repeated (implicit case is covered in node-name test)
$QEMU_IO -c 'reopen -o driver=qcow2' $TEST_IMG
$QEMU_IO -c 'reopen -o file.driver=file' $TEST_IMG
$QEMU_IO -c 'reopen -o backing.driver=qcow2' $TEST_IMG

echo
echo "=== Check that reopening works with non-string options ==="
echo

# Using the json: pseudo-protocol we can create non-string options
# (Invoke 'info' just so we get some output afterwards)
IMGOPTSSYNTAX=false $QEMU_IO -f null-co -c 'reopen' -c 'info' \
    "json:{'driver': 'null-co', 'size': 65536}"

echo
echo "=== Check that mixing -c/-r/-w and their corresponding options is forbidden ==="
echo

$QEMU_IO -c 'reopen -r -o read-only=on' $TEST_IMG
$QEMU_IO -c 'reopen -w -o read-only=on' $TEST_IMG
$QEMU_IO -c 'reopen -c none -o cache.direct=on' $TEST_IMG
$QEMU_IO -c 'reopen -c writeback -o cache.direct=on' $TEST_IMG
$QEMU_IO -c 'reopen -c directsync -o cache.no-flush=on' $TEST_IMG

echo
echo "=== Check that invalid options are handled correctly ==="
echo

$QEMU_IO -c 'reopen -o read-only=foo' $TEST_IMG
$QEMU_IO -c 'reopen -o cache.no-flush=bar' $TEST_IMG
$QEMU_IO -c 'reopen -o cache.direct=baz' $TEST_IMG
$QEMU_IO -c 'reopen -o auto-read-only=qux' $TEST_IMG
# success, all done
echo "*** done"
rm -f $seq.full
status=0
