#!/bin/bash
#
# Test for auto-read-only
#
# 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=kwolf@redhat.com

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

status=1	# failure is the default!

_cleanup()
{
    _cleanup_test_img
    rm -f $TEST_IMG.snap
}
trap "_cleanup; exit \$status" 0 1 2 3 15

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

_supported_fmt generic
_supported_proto file
_supported_os Linux

do_run_qemu()
{
    echo Testing: "$@"
    (
        if ! test -t 0; then
            while read cmd; do
                echo $cmd
            done
        fi
        echo quit
    ) | $QEMU -nographic -monitor stdio -nodefaults "$@"
    echo
}

run_qemu()
{
    do_run_qemu "$@" 2>&1 | _filter_testdir | _filter_qemu | _filter_hmp |
        _filter_generated_node_ids | _filter_imgfmt
}

run_qemu_info_block()
{
    echo "info block -n" | run_qemu "$@" | grep -e "(file" -e "QEMU_PROG"
}

size=128M

_make_test_img $size

echo
echo "=== -drive with read-write image: read-only/auto-read-only combinations ==="
echo

run_qemu_info_block -drive driver=file,file="$TEST_IMG",if=none,read-only=on,auto-read-only=off
run_qemu_info_block -drive driver=file,file="$TEST_IMG",if=none,read-only=on,auto-read-only=on
run_qemu_info_block -drive driver=file,file="$TEST_IMG",if=none,read-only=on
echo
run_qemu_info_block -drive driver=file,file="$TEST_IMG",if=none,read-only=off,auto-read-only=off
run_qemu_info_block -drive driver=file,file="$TEST_IMG",if=none,read-only=off,auto-read-only=on
run_qemu_info_block -drive driver=file,file="$TEST_IMG",if=none,read-only=off
echo
run_qemu_info_block -drive driver=file,file="$TEST_IMG",if=none,auto-read-only=off
run_qemu_info_block -drive driver=file,file="$TEST_IMG",if=none,auto-read-only=on
run_qemu_info_block -drive driver=file,file="$TEST_IMG",if=none

echo
echo "=== -drive with read-only image: read-only/auto-read-only combinations ==="
echo

chmod a-w $TEST_IMG

run_qemu_info_block -drive driver=file,file="$TEST_IMG",if=none,read-only=on,auto-read-only=off
run_qemu_info_block -drive driver=file,file="$TEST_IMG",if=none,read-only=on,auto-read-only=on
run_qemu_info_block -drive driver=file,file="$TEST_IMG",if=none,read-only=on
echo
run_qemu_info_block -drive driver=file,file="$TEST_IMG",if=none,read-only=off,auto-read-only=off
run_qemu_info_block -drive driver=file,file="$TEST_IMG",if=none,read-only=off,auto-read-only=on
run_qemu_info_block -drive driver=file,file="$TEST_IMG",if=none,read-only=off
echo
run_qemu_info_block -drive driver=file,file="$TEST_IMG",if=none,auto-read-only=off
run_qemu_info_block -drive driver=file,file="$TEST_IMG",if=none,auto-read-only=on
run_qemu_info_block -drive driver=file,file="$TEST_IMG",if=none

echo
echo "=== -blockdev with read-write image: read-only/auto-read-only combinations ==="
echo

chmod a+w $TEST_IMG

run_qemu_info_block -blockdev driver=file,filename="$TEST_IMG",node-name=node0,read-only=on,auto-read-only=off
run_qemu_info_block -blockdev driver=file,filename="$TEST_IMG",node-name=node0,read-only=on,auto-read-only=on
run_qemu_info_block -blockdev driver=file,filename="$TEST_IMG",node-name=node0,read-only=on
echo
run_qemu_info_block -blockdev driver=file,filename="$TEST_IMG",node-name=node0,read-only=off,auto-read-only=off
run_qemu_info_block -blockdev driver=file,filename="$TEST_IMG",node-name=node0,read-only=off,auto-read-only=on
run_qemu_info_block -blockdev driver=file,filename="$TEST_IMG",node-name=node0,read-only=off
echo
run_qemu_info_block -blockdev driver=file,filename="$TEST_IMG",node-name=node0,auto-read-only=off
run_qemu_info_block -blockdev driver=file,filename="$TEST_IMG",node-name=node0,auto-read-only=on
run_qemu_info_block -blockdev driver=file,filename="$TEST_IMG",node-name=node0

echo
echo "=== -blockdev with read-only image: read-only/auto-read-only combinations ==="
echo

chmod a-w $TEST_IMG

run_qemu_info_block -blockdev driver=file,filename="$TEST_IMG",node-name=node0,read-only=on,auto-read-only=off
run_qemu_info_block -blockdev driver=file,filename="$TEST_IMG",node-name=node0,read-only=on,auto-read-only=on
run_qemu_info_block -blockdev driver=file,filename="$TEST_IMG",node-name=node0,read-only=on
echo
run_qemu_info_block -blockdev driver=file,filename="$TEST_IMG",node-name=node0,read-only=off,auto-read-only=off
run_qemu_info_block -blockdev driver=file,filename="$TEST_IMG",node-name=node0,read-only=off,auto-read-only=on
run_qemu_info_block -blockdev driver=file,filename="$TEST_IMG",node-name=node0,read-only=off
echo
run_qemu_info_block -blockdev driver=file,filename="$TEST_IMG",node-name=node0,auto-read-only=off
run_qemu_info_block -blockdev driver=file,filename="$TEST_IMG",node-name=node0,auto-read-only=on
run_qemu_info_block -blockdev driver=file,filename="$TEST_IMG",node-name=node0

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