243 lines
		
	
	
	
		
			7.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			243 lines
		
	
	
	
		
			7.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
| #!/usr/bin/env bash
 | |
| # group: auto
 | |
| #
 | |
| # Test floppy configuration
 | |
| #
 | |
| # Copyright (C) 2016 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_test_img "$TEST_IMG.2"
 | |
|     _rm_test_img "$TEST_IMG.3"
 | |
| }
 | |
| 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
 | |
| 
 | |
| if [ "$QEMU_DEFAULT_MACHINE" != "pc" ]; then
 | |
|     _notrun "Requires a PC machine"
 | |
| fi
 | |
| 
 | |
| do_run_qemu()
 | |
| {
 | |
|     (
 | |
|         if ! test -t 0; then
 | |
|             while read cmd; do
 | |
|                 echo $cmd
 | |
|             done
 | |
|         fi
 | |
|         echo quit
 | |
|     ) | $QEMU -accel qtest -nographic -monitor stdio -serial none "$@"
 | |
|     echo
 | |
| }
 | |
| 
 | |
| check_floppy_qtree()
 | |
| {
 | |
|     echo
 | |
|     echo Testing: "$@" | _filter_testdir
 | |
| 
 | |
|     # QEMU_OPTIONS contains -nodefaults, we don't want that here because the
 | |
|     # defaults are part of what should be checked here.
 | |
|     #
 | |
|     # Apply the sed filter to stdout only, but keep the stderr output and
 | |
|     # filter the qemu program name in it.
 | |
|     printf "info qtree\ninfo block\n" |
 | |
|     (QEMU_OPTIONS="" do_run_qemu "$@" |
 | |
| 	_filter_testdir |_filter_generated_node_ids | _filter_hmp |
 | |
|         sed -ne '/^          dev: isa-fdc/,/^          dev:/{x;p};/^[a-z][^ ]* (NODE_NAME):* /,/^(qemu)$/{p}') 2>&1 |
 | |
|     _filter_win32 | _filter_qemu | _filter_qom_path
 | |
| }
 | |
| 
 | |
| check_cache_mode()
 | |
| {
 | |
|     echo "info block none0" |
 | |
|     QEMU_OPTIONS="" do_run_qemu -drive if=none,file="$TEST_IMG" "$@" |
 | |
|     _filter_win32 | _filter_qemu | grep "Cache mode"
 | |
| }
 | |
| 
 | |
| 
 | |
| size=720k
 | |
| 
 | |
| _make_test_img $size
 | |
| 
 | |
| TEST_IMG="$TEST_IMG.2" _make_test_img $size
 | |
| TEST_IMG="$TEST_IMG.3" _make_test_img $size
 | |
| 
 | |
| # Default drive semantics:
 | |
| #
 | |
| # By default you get a single empty floppy drive. You can override it with
 | |
| # -drive and using the same index, but if you use -drive to add a floppy to a
 | |
| # different index, you get both of them. However, as soon as you use any
 | |
| # '-device floppy', even to a different slot, the default drive is disabled.
 | |
| 
 | |
| echo
 | |
| echo
 | |
| echo === Default ===
 | |
| 
 | |
| check_floppy_qtree
 | |
| 
 | |
| echo
 | |
| echo
 | |
| echo === Using -fda/-fdb options ===
 | |
| 
 | |
| check_floppy_qtree -fda "$TEST_IMG"
 | |
| check_floppy_qtree -fdb "$TEST_IMG"
 | |
| check_floppy_qtree -fda "$TEST_IMG" -fdb "$TEST_IMG.2"
 | |
| check_floppy_qtree -fdb ""
 | |
| 
 | |
| 
 | |
| echo
 | |
| echo
 | |
| echo === Using -drive options ===
 | |
| 
 | |
| check_floppy_qtree -drive if=floppy,file="$TEST_IMG"
 | |
| check_floppy_qtree -drive if=floppy,file="$TEST_IMG",index=1
 | |
| check_floppy_qtree -drive if=floppy,file="$TEST_IMG" -drive if=floppy,file="$TEST_IMG.2",index=1
 | |
| 
 | |
| echo
 | |
| echo
 | |
| echo === Using -drive if=none and -device ===
 | |
| 
 | |
| check_floppy_qtree -drive if=none,file="$TEST_IMG" -device floppy,drive=none0
 | |
| check_floppy_qtree -drive if=none,file="$TEST_IMG" -device floppy,drive=none0,unit=1
 | |
| check_floppy_qtree -drive if=none,file="$TEST_IMG" -drive if=none,file="$TEST_IMG.2" \
 | |
|                    -device floppy,drive=none0 -device floppy,drive=none1,unit=1
 | |
| 
 | |
| echo
 | |
| echo
 | |
| echo === Mixing -fdX and -global ===
 | |
| 
 | |
| # Conflicting, -fdX wins
 | |
| check_floppy_qtree -fda "$TEST_IMG" -drive if=none,file="$TEST_IMG.2" -global floppy.drive=none0
 | |
| 
 | |
| echo
 | |
| echo
 | |
| echo === Mixing -fdX and -device ===
 | |
| 
 | |
| # Working
 | |
| check_floppy_qtree -fda "$TEST_IMG" -drive if=none,file="$TEST_IMG.2" -device floppy,drive=none0
 | |
| check_floppy_qtree -fda "$TEST_IMG" -drive if=none,file="$TEST_IMG.2" -device floppy,drive=none0,unit=1
 | |
| 
 | |
| check_floppy_qtree -fdb "$TEST_IMG" -drive if=none,file="$TEST_IMG.2" -device floppy,drive=none0
 | |
| check_floppy_qtree -fdb "$TEST_IMG" -drive if=none,file="$TEST_IMG.2" -device floppy,drive=none0,unit=0
 | |
| 
 | |
| # Conflicting
 | |
| check_floppy_qtree -fda "$TEST_IMG" -drive if=none,file="$TEST_IMG.2" -device floppy,drive=none0,unit=0
 | |
| check_floppy_qtree -fdb "$TEST_IMG" -drive if=none,file="$TEST_IMG.2" -device floppy,drive=none0,unit=1
 | |
| 
 | |
| echo
 | |
| echo
 | |
| echo === Mixing -drive and -device ===
 | |
| 
 | |
| # Working
 | |
| check_floppy_qtree -drive if=floppy,file="$TEST_IMG" -drive if=none,file="$TEST_IMG.2" -device floppy,drive=none0
 | |
| check_floppy_qtree -drive if=floppy,file="$TEST_IMG" -drive if=none,file="$TEST_IMG.2" -device floppy,drive=none0,unit=1
 | |
| 
 | |
| # Conflicting
 | |
| check_floppy_qtree -drive if=floppy,file="$TEST_IMG" -drive if=none,file="$TEST_IMG.2" -device floppy,drive=none0,unit=0
 | |
| 
 | |
| echo
 | |
| echo
 | |
| echo === Mixing -global and -device ===
 | |
| 
 | |
| # Working
 | |
| check_floppy_qtree -drive if=none,file="$TEST_IMG" \
 | |
|                    -global floppy.drive=none0 -device floppy,unit=0
 | |
| 
 | |
| # Conflicting
 | |
| check_floppy_qtree -drive if=none,file="$TEST_IMG" -drive if=none,file="$TEST_IMG.2" \
 | |
|                    -global floppy.drive=none0 -device floppy,drive=none1,unit=0
 | |
| 
 | |
| echo
 | |
| echo
 | |
| echo === Attempt to use drive twice ===
 | |
| 
 | |
| # if=none
 | |
| check_floppy_qtree -drive if=none -device floppy,drive=none0 -device floppy -device floppy,drive=none0
 | |
| check_floppy_qtree -drive if=none -global floppy.drive=none0 -device floppy -device floppy
 | |
| # if=floppy
 | |
| check_floppy_qtree -fda "" -device floppy,drive=floppy0
 | |
| check_floppy_qtree -fda "" -global floppy.drive=floppy0
 | |
| # default if=floppy (not found, because it's created later)
 | |
| check_floppy_qtree -device floppy,drive=floppy0
 | |
| 
 | |
| echo
 | |
| echo
 | |
| echo === Too many floppy drives ===
 | |
| 
 | |
| # Working
 | |
| check_floppy_qtree -drive if=floppy,file="$TEST_IMG" \
 | |
|                    -drive if=none,file="$TEST_IMG.2" \
 | |
|                    -drive if=none,file="$TEST_IMG.3" \
 | |
|                    -device floppy,drive=none0 \
 | |
|                    -device floppy,drive=none1
 | |
| 
 | |
| echo
 | |
| echo
 | |
| echo === Creating an empty drive with anonymous BB ===
 | |
| 
 | |
| check_floppy_qtree -device floppy
 | |
| check_floppy_qtree -device floppy,drive-type=120
 | |
| check_floppy_qtree -device floppy,drive-type=144
 | |
| check_floppy_qtree -device floppy,drive-type=288
 | |
| 
 | |
| echo
 | |
| echo
 | |
| echo === Try passing different drive size with image ===
 | |
| 
 | |
| check_floppy_qtree -drive if=none,file="$TEST_IMG" -device floppy,drive=none0,drive-type=120
 | |
| check_floppy_qtree -drive if=none,file="$TEST_IMG" -device floppy,drive=none0,drive-type=288
 | |
| 
 | |
| echo
 | |
| echo
 | |
| echo === Try passing different block sizes ===
 | |
| 
 | |
| # Explicitly setting the default is okay
 | |
| check_floppy_qtree -drive if=none,file="$TEST_IMG" -device floppy,drive=none0,logical_block_size=512
 | |
| check_floppy_qtree -drive if=none,file="$TEST_IMG" -device floppy,drive=none0,physical_block_size=512
 | |
| 
 | |
| # Changing it is not
 | |
| check_floppy_qtree -drive if=none,file="$TEST_IMG" -device floppy,drive=none0,logical_block_size=4096
 | |
| check_floppy_qtree -drive if=none,file="$TEST_IMG" -device floppy,drive=none0,physical_block_size=1024
 | |
| 
 | |
| echo
 | |
| echo
 | |
| echo === Writethrough caching ===
 | |
| 
 | |
| check_cache_mode -device floppy,drive=none0
 | |
| check_cache_mode -device floppy,drive=none0,write-cache=on
 | |
| check_cache_mode -device floppy,drive=none0,write-cache=off
 | |
| 
 | |
| # success, all done
 | |
| echo "*** done"
 | |
| rm -f $seq.full
 | |
| status=0
 |