#!/usr/bin/env 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 . # # creator owner=kwolf@redhat.com seq=`basename $0` echo "QA output created by $seq" status=1 # failure is the default! _cleanup() { _cleanup_test_img for img in "$TEST_IMG".[01234]; do _rm_test_img "$img" done } 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 if [ -n "$TEST_IMG_FILE" ]; then TEST_IMG=$TEST_IMG_FILE fi chmod a-w $TEST_IMG (echo test > $TEST_IMG) 2>/dev/null && \ _notrun "Readonly attribute is ignored, probably you run this test as" \ "root, which is unsupported." chmod a+w $TEST_IMG 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