| 
									
										
										
										
											2016-10-27 16:29:14 -04:00
										 |  |  | #!/bin/bash | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # 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" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | here=`pwd` | 
					
						
							|  |  |  | status=1	# failure is the default! | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | _cleanup() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	_cleanup_test_img | 
					
						
							| 
									
										
										
										
											2017-05-03 00:35:48 +08:00
										 |  |  |     rm -f "$TEST_IMG.2" | 
					
						
							|  |  |  |     rm -f "$TEST_IMG.3" | 
					
						
							| 
									
										
										
										
											2016-10-27 16:29:14 -04:00
										 |  |  | } | 
					
						
							|  |  |  | 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 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function do_run_qemu() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     ( | 
					
						
							|  |  |  |         if ! test -t 0; then | 
					
						
							|  |  |  |             while read cmd; do | 
					
						
							|  |  |  |                 echo $cmd | 
					
						
							|  |  |  |             done | 
					
						
							|  |  |  |         fi | 
					
						
							|  |  |  |         echo quit | 
					
						
							| 
									
										
										
										
											2017-09-07 10:50:00 +02:00
										 |  |  |     ) | $QEMU -machine accel=qtest -nographic -monitor stdio -serial none "$@" | 
					
						
							| 
									
										
										
										
											2016-10-27 16:29:14 -04:00
										 |  |  |     echo | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function 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. | 
					
						
							|  |  |  |     echo "info qtree" | | 
					
						
							|  |  |  |     (QEMU_OPTIONS="" do_run_qemu "$@" | | 
					
						
							|  |  |  |         sed -ne '/^          dev: isa-fdc/,/^          dev:/{x;p}' ) 2>&1 | | 
					
						
							|  |  |  |     _filter_win32 | _filter_qemu | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function 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 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-03 00:35:48 +08:00
										 |  |  | TEST_IMG="$TEST_IMG.2" _make_test_img $size | 
					
						
							|  |  |  | TEST_IMG="$TEST_IMG.3" _make_test_img $size | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-27 16:29:14 -04:00
										 |  |  | # 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" | 
					
						
							| 
									
										
										
										
											2017-05-03 00:35:48 +08:00
										 |  |  | check_floppy_qtree -fda "$TEST_IMG" -fdb "$TEST_IMG.2" | 
					
						
							| 
									
										
										
										
											2016-10-27 16:29:14 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 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 | 
					
						
							| 
									
										
										
										
											2017-05-03 00:35:48 +08:00
										 |  |  | check_floppy_qtree -drive if=floppy,file="$TEST_IMG" -drive if=floppy,file="$TEST_IMG.2",index=1 | 
					
						
							| 
									
										
										
										
											2016-10-27 16:29:14 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | echo | 
					
						
							|  |  |  | echo | 
					
						
							|  |  |  | echo === Using -drive if=none and -global === | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | check_floppy_qtree -drive if=none,file="$TEST_IMG" -global isa-fdc.driveA=none0 | 
					
						
							|  |  |  | check_floppy_qtree -drive if=none,file="$TEST_IMG" -global isa-fdc.driveB=none0 | 
					
						
							| 
									
										
										
										
											2017-05-03 00:35:48 +08:00
										 |  |  | check_floppy_qtree -drive if=none,file="$TEST_IMG" -drive if=none,file="$TEST_IMG.2" \ | 
					
						
							| 
									
										
										
										
											2016-10-27 16:29:14 -04:00
										 |  |  |                    -global isa-fdc.driveA=none0 -global isa-fdc.driveB=none1 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 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 | 
					
						
							| 
									
										
										
										
											2017-05-03 00:35:48 +08:00
										 |  |  | check_floppy_qtree -drive if=none,file="$TEST_IMG" -drive if=none,file="$TEST_IMG.2" \ | 
					
						
							| 
									
										
										
										
											2016-10-27 16:29:14 -04:00
										 |  |  |                    -device floppy,drive=none0 -device floppy,drive=none1,unit=1 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | echo | 
					
						
							|  |  |  | echo | 
					
						
							|  |  |  | echo === Mixing -fdX and -global === | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Working | 
					
						
							| 
									
										
										
										
											2017-05-03 00:35:48 +08:00
										 |  |  | check_floppy_qtree -fda "$TEST_IMG" -drive if=none,file="$TEST_IMG.2" -global isa-fdc.driveB=none0 | 
					
						
							|  |  |  | check_floppy_qtree -fdb "$TEST_IMG" -drive if=none,file="$TEST_IMG.2" -global isa-fdc.driveA=none0 | 
					
						
							| 
									
										
										
										
											2016-10-27 16:29:14 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | # Conflicting (-fdX wins) | 
					
						
							| 
									
										
										
										
											2017-05-03 00:35:48 +08:00
										 |  |  | check_floppy_qtree -fda "$TEST_IMG" -drive if=none,file="$TEST_IMG.2" -global isa-fdc.driveA=none0 | 
					
						
							|  |  |  | check_floppy_qtree -fdb "$TEST_IMG" -drive if=none,file="$TEST_IMG.2" -global isa-fdc.driveB=none0 | 
					
						
							| 
									
										
										
										
											2016-10-27 16:29:14 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | echo | 
					
						
							|  |  |  | echo | 
					
						
							|  |  |  | echo === Mixing -fdX and -device === | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Working | 
					
						
							| 
									
										
										
										
											2017-05-03 00:35:48 +08:00
										 |  |  | 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 | 
					
						
							| 
									
										
										
										
											2016-10-27 16:29:14 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-03 00:35:48 +08:00
										 |  |  | 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 | 
					
						
							| 
									
										
										
										
											2016-10-27 16:29:14 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | # Conflicting | 
					
						
							| 
									
										
										
										
											2017-05-03 00:35:48 +08:00
										 |  |  | 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 | 
					
						
							| 
									
										
										
										
											2016-10-27 16:29:14 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | echo | 
					
						
							|  |  |  | echo | 
					
						
							|  |  |  | echo === Mixing -drive and -device === | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Working | 
					
						
							| 
									
										
										
										
											2017-05-03 00:35:48 +08:00
										 |  |  | 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 | 
					
						
							| 
									
										
										
										
											2016-10-27 16:29:14 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | # Conflicting | 
					
						
							| 
									
										
										
										
											2017-05-03 00:35:48 +08:00
										 |  |  | check_floppy_qtree -drive if=floppy,file="$TEST_IMG" -drive if=none,file="$TEST_IMG.2" -device floppy,drive=none0,unit=0 | 
					
						
							| 
									
										
										
										
											2016-10-27 16:29:14 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | echo | 
					
						
							|  |  |  | echo | 
					
						
							|  |  |  | echo === Mixing -global and -device === | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Working | 
					
						
							| 
									
										
										
										
											2017-05-03 00:35:48 +08:00
										 |  |  | check_floppy_qtree -drive if=none,file="$TEST_IMG" -drive if=none,file="$TEST_IMG.2" \ | 
					
						
							| 
									
										
										
										
											2016-10-27 16:29:14 -04:00
										 |  |  |                    -global isa-fdc.driveA=none0 -device floppy,drive=none1 | 
					
						
							| 
									
										
										
										
											2017-05-03 00:35:48 +08:00
										 |  |  | check_floppy_qtree -drive if=none,file="$TEST_IMG" -drive if=none,file="$TEST_IMG.2" \ | 
					
						
							| 
									
										
										
										
											2016-10-27 16:29:14 -04:00
										 |  |  |                    -global isa-fdc.driveA=none0 -device floppy,drive=none1,unit=1 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-03 00:35:48 +08:00
										 |  |  | check_floppy_qtree -drive if=none,file="$TEST_IMG" -drive if=none,file="$TEST_IMG.2" \ | 
					
						
							| 
									
										
										
										
											2016-10-27 16:29:14 -04:00
										 |  |  |                    -global isa-fdc.driveB=none0 -device floppy,drive=none1 | 
					
						
							| 
									
										
										
										
											2017-05-03 00:35:48 +08:00
										 |  |  | check_floppy_qtree -drive if=none,file="$TEST_IMG" -drive if=none,file="$TEST_IMG.2" \ | 
					
						
							| 
									
										
										
										
											2016-10-27 16:29:14 -04:00
										 |  |  |                    -global isa-fdc.driveB=none0 -device floppy,drive=none1,unit=0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Conflicting | 
					
						
							| 
									
										
										
										
											2017-05-03 00:35:48 +08:00
										 |  |  | check_floppy_qtree -drive if=none,file="$TEST_IMG" -drive if=none,file="$TEST_IMG.2" \ | 
					
						
							| 
									
										
										
										
											2016-10-27 16:29:14 -04:00
										 |  |  |                    -global isa-fdc.driveA=none0 -device floppy,drive=none1,unit=0 | 
					
						
							| 
									
										
										
										
											2017-05-03 00:35:48 +08:00
										 |  |  | check_floppy_qtree -drive if=none,file="$TEST_IMG" -drive if=none,file="$TEST_IMG.2" \ | 
					
						
							| 
									
										
										
										
											2016-10-27 16:29:14 -04:00
										 |  |  |                    -global isa-fdc.driveB=none0 -device floppy,drive=none1,unit=1 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | echo | 
					
						
							|  |  |  | echo | 
					
						
							|  |  |  | echo === Too many floppy drives === | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Working | 
					
						
							|  |  |  | check_floppy_qtree -drive if=floppy,file="$TEST_IMG" \ | 
					
						
							| 
									
										
										
										
											2017-05-03 00:35:48 +08:00
										 |  |  |                    -drive if=none,file="$TEST_IMG.2" \ | 
					
						
							|  |  |  |                    -drive if=none,file="$TEST_IMG.3" \ | 
					
						
							| 
									
										
										
										
											2016-10-27 16:29:14 -04:00
										 |  |  |                    -global isa-fdc.driveB=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 |