111a82d14SPhilippe Mathieu-Daudé#!/usr/bin/env bash 2*9dd003a9SVladimir Sementsov-Ogievskiy# group: quick 336f808faSKevin Wolf# 436f808faSKevin Wolf# Test for auto-read-only 536f808faSKevin Wolf# 636f808faSKevin Wolf# Copyright (C) 2018 Red Hat, Inc. 736f808faSKevin Wolf# 836f808faSKevin Wolf# This program is free software; you can redistribute it and/or modify 936f808faSKevin Wolf# it under the terms of the GNU General Public License as published by 1036f808faSKevin Wolf# the Free Software Foundation; either version 2 of the License, or 1136f808faSKevin Wolf# (at your option) any later version. 1236f808faSKevin Wolf# 1336f808faSKevin Wolf# This program is distributed in the hope that it will be useful, 1436f808faSKevin Wolf# but WITHOUT ANY WARRANTY; without even the implied warranty of 1536f808faSKevin Wolf# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1636f808faSKevin Wolf# GNU General Public License for more details. 1736f808faSKevin Wolf# 1836f808faSKevin Wolf# You should have received a copy of the GNU General Public License 1936f808faSKevin Wolf# along with this program. If not, see <http://www.gnu.org/licenses/>. 2036f808faSKevin Wolf# 2136f808faSKevin Wolf 2236f808faSKevin Wolf# creator 2336f808faSKevin Wolfowner=kwolf@redhat.com 2436f808faSKevin Wolf 2536f808faSKevin Wolfseq=`basename $0` 2636f808faSKevin Wolfecho "QA output created by $seq" 2736f808faSKevin Wolf 2836f808faSKevin Wolfstatus=1 # failure is the default! 2936f808faSKevin Wolf 3036f808faSKevin Wolf_cleanup() 3136f808faSKevin Wolf{ 3236f808faSKevin Wolf _cleanup_test_img 33f91ecbd7SMax Reitz for img in "$TEST_IMG".[01234]; do 34f91ecbd7SMax Reitz _rm_test_img "$img" 35f91ecbd7SMax Reitz done 3636f808faSKevin Wolf} 3736f808faSKevin Wolftrap "_cleanup; exit \$status" 0 1 2 3 15 3836f808faSKevin Wolf 3936f808faSKevin Wolf# get standard environment, filters and checks 4036f808faSKevin Wolf. ./common.rc 4136f808faSKevin Wolf. ./common.filter 4236f808faSKevin Wolf 4336f808faSKevin Wolf_supported_fmt generic 4436f808faSKevin Wolf_supported_proto file 4536f808faSKevin Wolf_supported_os Linux 4636f808faSKevin Wolf 478cedcffdSEric Blakedo_run_qemu() 4836f808faSKevin Wolf{ 4936f808faSKevin Wolf echo Testing: "$@" 5036f808faSKevin Wolf ( 5136f808faSKevin Wolf if ! test -t 0; then 5236f808faSKevin Wolf while read cmd; do 5336f808faSKevin Wolf echo $cmd 5436f808faSKevin Wolf done 5536f808faSKevin Wolf fi 5636f808faSKevin Wolf echo quit 5736f808faSKevin Wolf ) | $QEMU -nographic -monitor stdio -nodefaults "$@" 5836f808faSKevin Wolf echo 5936f808faSKevin Wolf} 6036f808faSKevin Wolf 618cedcffdSEric Blakerun_qemu() 6236f808faSKevin Wolf{ 6336f808faSKevin Wolf do_run_qemu "$@" 2>&1 | _filter_testdir | _filter_qemu | _filter_hmp | 6436f808faSKevin Wolf _filter_generated_node_ids | _filter_imgfmt 6536f808faSKevin Wolf} 6636f808faSKevin Wolf 678cedcffdSEric Blakerun_qemu_info_block() 6836f808faSKevin Wolf{ 6936f808faSKevin Wolf echo "info block -n" | run_qemu "$@" | grep -e "(file" -e "QEMU_PROG" 7036f808faSKevin Wolf} 7136f808faSKevin Wolf 7236f808faSKevin Wolfsize=128M 7336f808faSKevin Wolf 7436f808faSKevin Wolf_make_test_img $size 7536f808faSKevin Wolf 76c48221aaSMax Reitzif [ -n "$TEST_IMG_FILE" ]; then 77c48221aaSMax Reitz TEST_IMG=$TEST_IMG_FILE 78c48221aaSMax Reitzfi 79c48221aaSMax Reitz 80d885ac33SVladimir Sementsov-Ogievskiychmod a-w $TEST_IMG 81d885ac33SVladimir Sementsov-Ogievskiy(echo test > $TEST_IMG) 2>/dev/null && \ 82d885ac33SVladimir Sementsov-Ogievskiy _notrun "Readonly attribute is ignored, probably you run this test as" \ 83d885ac33SVladimir Sementsov-Ogievskiy "root, which is unsupported." 84d885ac33SVladimir Sementsov-Ogievskiychmod a+w $TEST_IMG 85d885ac33SVladimir Sementsov-Ogievskiy 8636f808faSKevin Wolfecho 8736f808faSKevin Wolfecho "=== -drive with read-write image: read-only/auto-read-only combinations ===" 8836f808faSKevin Wolfecho 8936f808faSKevin Wolf 9036f808faSKevin Wolfrun_qemu_info_block -drive driver=file,file="$TEST_IMG",if=none,read-only=on,auto-read-only=off 9136f808faSKevin Wolfrun_qemu_info_block -drive driver=file,file="$TEST_IMG",if=none,read-only=on,auto-read-only=on 9236f808faSKevin Wolfrun_qemu_info_block -drive driver=file,file="$TEST_IMG",if=none,read-only=on 9336f808faSKevin Wolfecho 9436f808faSKevin Wolfrun_qemu_info_block -drive driver=file,file="$TEST_IMG",if=none,read-only=off,auto-read-only=off 9536f808faSKevin Wolfrun_qemu_info_block -drive driver=file,file="$TEST_IMG",if=none,read-only=off,auto-read-only=on 9636f808faSKevin Wolfrun_qemu_info_block -drive driver=file,file="$TEST_IMG",if=none,read-only=off 9736f808faSKevin Wolfecho 9836f808faSKevin Wolfrun_qemu_info_block -drive driver=file,file="$TEST_IMG",if=none,auto-read-only=off 9936f808faSKevin Wolfrun_qemu_info_block -drive driver=file,file="$TEST_IMG",if=none,auto-read-only=on 10036f808faSKevin Wolfrun_qemu_info_block -drive driver=file,file="$TEST_IMG",if=none 10136f808faSKevin Wolf 10236f808faSKevin Wolfecho 10336f808faSKevin Wolfecho "=== -drive with read-only image: read-only/auto-read-only combinations ===" 10436f808faSKevin Wolfecho 10536f808faSKevin Wolf 10636f808faSKevin Wolfchmod a-w $TEST_IMG 10736f808faSKevin Wolf 10836f808faSKevin Wolfrun_qemu_info_block -drive driver=file,file="$TEST_IMG",if=none,read-only=on,auto-read-only=off 10936f808faSKevin Wolfrun_qemu_info_block -drive driver=file,file="$TEST_IMG",if=none,read-only=on,auto-read-only=on 11036f808faSKevin Wolfrun_qemu_info_block -drive driver=file,file="$TEST_IMG",if=none,read-only=on 11136f808faSKevin Wolfecho 11236f808faSKevin Wolfrun_qemu_info_block -drive driver=file,file="$TEST_IMG",if=none,read-only=off,auto-read-only=off 11336f808faSKevin Wolfrun_qemu_info_block -drive driver=file,file="$TEST_IMG",if=none,read-only=off,auto-read-only=on 11436f808faSKevin Wolfrun_qemu_info_block -drive driver=file,file="$TEST_IMG",if=none,read-only=off 11536f808faSKevin Wolfecho 11636f808faSKevin Wolfrun_qemu_info_block -drive driver=file,file="$TEST_IMG",if=none,auto-read-only=off 11736f808faSKevin Wolfrun_qemu_info_block -drive driver=file,file="$TEST_IMG",if=none,auto-read-only=on 11836f808faSKevin Wolfrun_qemu_info_block -drive driver=file,file="$TEST_IMG",if=none 11936f808faSKevin Wolf 12036f808faSKevin Wolfecho 12136f808faSKevin Wolfecho "=== -blockdev with read-write image: read-only/auto-read-only combinations ===" 12236f808faSKevin Wolfecho 12336f808faSKevin Wolf 12436f808faSKevin Wolfchmod a+w $TEST_IMG 12536f808faSKevin Wolf 12636f808faSKevin Wolfrun_qemu_info_block -blockdev driver=file,filename="$TEST_IMG",node-name=node0,read-only=on,auto-read-only=off 12736f808faSKevin Wolfrun_qemu_info_block -blockdev driver=file,filename="$TEST_IMG",node-name=node0,read-only=on,auto-read-only=on 12836f808faSKevin Wolfrun_qemu_info_block -blockdev driver=file,filename="$TEST_IMG",node-name=node0,read-only=on 12936f808faSKevin Wolfecho 13036f808faSKevin Wolfrun_qemu_info_block -blockdev driver=file,filename="$TEST_IMG",node-name=node0,read-only=off,auto-read-only=off 13136f808faSKevin Wolfrun_qemu_info_block -blockdev driver=file,filename="$TEST_IMG",node-name=node0,read-only=off,auto-read-only=on 13236f808faSKevin Wolfrun_qemu_info_block -blockdev driver=file,filename="$TEST_IMG",node-name=node0,read-only=off 13336f808faSKevin Wolfecho 13436f808faSKevin Wolfrun_qemu_info_block -blockdev driver=file,filename="$TEST_IMG",node-name=node0,auto-read-only=off 13536f808faSKevin Wolfrun_qemu_info_block -blockdev driver=file,filename="$TEST_IMG",node-name=node0,auto-read-only=on 13636f808faSKevin Wolfrun_qemu_info_block -blockdev driver=file,filename="$TEST_IMG",node-name=node0 13736f808faSKevin Wolf 13836f808faSKevin Wolfecho 13936f808faSKevin Wolfecho "=== -blockdev with read-only image: read-only/auto-read-only combinations ===" 14036f808faSKevin Wolfecho 14136f808faSKevin Wolf 14236f808faSKevin Wolfchmod a-w $TEST_IMG 14336f808faSKevin Wolf 14436f808faSKevin Wolfrun_qemu_info_block -blockdev driver=file,filename="$TEST_IMG",node-name=node0,read-only=on,auto-read-only=off 14536f808faSKevin Wolfrun_qemu_info_block -blockdev driver=file,filename="$TEST_IMG",node-name=node0,read-only=on,auto-read-only=on 14636f808faSKevin Wolfrun_qemu_info_block -blockdev driver=file,filename="$TEST_IMG",node-name=node0,read-only=on 14736f808faSKevin Wolfecho 14836f808faSKevin Wolfrun_qemu_info_block -blockdev driver=file,filename="$TEST_IMG",node-name=node0,read-only=off,auto-read-only=off 14936f808faSKevin Wolfrun_qemu_info_block -blockdev driver=file,filename="$TEST_IMG",node-name=node0,read-only=off,auto-read-only=on 15036f808faSKevin Wolfrun_qemu_info_block -blockdev driver=file,filename="$TEST_IMG",node-name=node0,read-only=off 15136f808faSKevin Wolfecho 15236f808faSKevin Wolfrun_qemu_info_block -blockdev driver=file,filename="$TEST_IMG",node-name=node0,auto-read-only=off 15336f808faSKevin Wolfrun_qemu_info_block -blockdev driver=file,filename="$TEST_IMG",node-name=node0,auto-read-only=on 15436f808faSKevin Wolfrun_qemu_info_block -blockdev driver=file,filename="$TEST_IMG",node-name=node0 15536f808faSKevin Wolf 15636f808faSKevin Wolf# success, all done 15736f808faSKevin Wolfecho "*** done" 15836f808faSKevin Wolfrm -f $seq.full 15936f808faSKevin Wolfstatus=0 160