mirror of
				https://github.com/qemu/qemu.git
				synced 2025-10-31 04:06:46 +00:00 
			
		
		
		
	 5b2da7f7cc
			
		
	
	
		5b2da7f7cc
		
	
	
	
	
		
			
			Signed-off-by: Max Reitz <mreitz@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com> Message-id: 20191017133155.5327-22-mreitz@redhat.com Reviewed-by: Thomas Huth <thuth@redhat.com> Signed-off-by: Max Reitz <mreitz@redhat.com>
		
			
				
	
	
		
			150 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			150 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/env bash
 | |
| #
 | |
| # Test hot plugging and unplugging with iothreads
 | |
| #
 | |
| # Copyright (C) 2019 Igalia, S.L.
 | |
| # Author: Alberto Garcia <berto@igalia.com>
 | |
| #
 | |
| # 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=berto@igalia.com
 | |
| 
 | |
| seq=`basename $0`
 | |
| echo "QA output created by $seq"
 | |
| 
 | |
| status=1	# failure is the default!
 | |
| 
 | |
| _cleanup()
 | |
| {
 | |
|     rm -f "$SOCK_DIR/nbd"
 | |
| }
 | |
| trap "_cleanup; exit \$status" 0 1 2 3 15
 | |
| 
 | |
| # get standard environment, filters and checks
 | |
| . ./common.rc
 | |
| . ./common.filter
 | |
| 
 | |
| _supported_fmt generic
 | |
| _supported_proto generic
 | |
| 
 | |
| do_run_qemu()
 | |
| {
 | |
|     echo Testing: "$@"
 | |
|     $QEMU -nographic -qmp stdio -serial none "$@"
 | |
|     echo
 | |
| }
 | |
| 
 | |
| # Remove QMP events from (pretty-printed) output. Doesn't handle
 | |
| # nested dicts correctly, but we don't get any of those in this test.
 | |
| _filter_qmp_events()
 | |
| {
 | |
|     tr '\n' '\t' | sed -e \
 | |
| 	's/{\s*"timestamp":\s*{[^}]*},\s*"event":[^,}]*\(,\s*"data":\s*{[^}]*}\)\?\s*}\s*//g' \
 | |
| 	| tr '\t' '\n'
 | |
| }
 | |
| 
 | |
| run_qemu()
 | |
| {
 | |
|     do_run_qemu "$@" 2>&1 | _filter_qmp | _filter_qmp_events
 | |
| }
 | |
| 
 | |
| case "$QEMU_DEFAULT_MACHINE" in
 | |
|   s390-ccw-virtio)
 | |
|       virtio_scsi=virtio-scsi-ccw
 | |
|       ;;
 | |
|   *)
 | |
|       virtio_scsi=virtio-scsi-pci
 | |
|       ;;
 | |
| esac
 | |
| 
 | |
| echo
 | |
| echo === Unplug a SCSI disk and then plug it again ===
 | |
| echo
 | |
| 
 | |
| run_qemu <<EOF
 | |
| { "execute": "qmp_capabilities" }
 | |
| { "execute": "blockdev-add", "arguments": {"driver": "null-co", "read-zeroes": true, "node-name": "hd0"}}
 | |
| { "execute": "object-add", "arguments": {"qom-type": "iothread", "id": "iothread0"}}
 | |
| { "execute": "device_add", "arguments": {"id": "scsi0", "driver": "${virtio_scsi}", "iothread": "iothread0"}}
 | |
| { "execute": "device_add", "arguments": {"id": "scsi-hd0", "driver": "scsi-hd", "drive": "hd0"}}
 | |
| { "execute": "device_del", "arguments": {"id": "scsi-hd0"}}
 | |
| { "execute": "device_add", "arguments": {"id": "scsi-hd0", "driver": "scsi-hd", "drive": "hd0"}}
 | |
| { "execute": "device_del", "arguments": {"id": "scsi-hd0"}}
 | |
| { "execute": "device_del", "arguments": {"id": "scsi0"}}
 | |
| { "execute": "blockdev-del", "arguments": {"node-name": "hd0"}}
 | |
| { "execute": "quit"}
 | |
| EOF
 | |
| 
 | |
| echo
 | |
| echo === Attach two SCSI disks using the same block device and the same iothread ===
 | |
| echo
 | |
| 
 | |
| run_qemu <<EOF
 | |
| { "execute": "qmp_capabilities" }
 | |
| { "execute": "blockdev-add", "arguments": {"driver": "null-co", "read-zeroes": true, "node-name": "hd0", "read-only": true}}
 | |
| { "execute": "object-add", "arguments": {"qom-type": "iothread", "id": "iothread0"}}
 | |
| { "execute": "device_add", "arguments": {"id": "scsi0", "driver": "${virtio_scsi}", "iothread": "iothread0"}}
 | |
| { "execute": "device_add", "arguments": {"id": "scsi-hd0", "driver": "scsi-hd", "drive": "hd0"}}
 | |
| { "execute": "device_add", "arguments": {"id": "scsi-hd1", "driver": "scsi-hd", "drive": "hd0"}}
 | |
| { "execute": "device_del", "arguments": {"id": "scsi-hd0"}}
 | |
| { "execute": "device_del", "arguments": {"id": "scsi-hd1"}}
 | |
| { "execute": "device_del", "arguments": {"id": "scsi0"}}
 | |
| { "execute": "blockdev-del", "arguments": {"node-name": "hd0"}}
 | |
| { "execute": "quit"}
 | |
| EOF
 | |
| 
 | |
| echo
 | |
| echo === Attach two SCSI disks using the same block device but different iothreads ===
 | |
| echo
 | |
| 
 | |
| run_qemu <<EOF
 | |
| { "execute": "qmp_capabilities" }
 | |
| { "execute": "blockdev-add", "arguments": {"driver": "null-co", "read-zeroes": true, "node-name": "hd0", "read-only": true}}
 | |
| { "execute": "object-add", "arguments": {"qom-type": "iothread", "id": "iothread0"}}
 | |
| { "execute": "object-add", "arguments": {"qom-type": "iothread", "id": "iothread1"}}
 | |
| { "execute": "device_add", "arguments": {"id": "scsi0", "driver": "${virtio_scsi}", "iothread": "iothread0"}}
 | |
| { "execute": "device_add", "arguments": {"id": "scsi1", "driver": "${virtio_scsi}", "iothread": "iothread1"}}
 | |
| { "execute": "device_add", "arguments": {"id": "scsi-hd0", "driver": "scsi-hd", "drive": "hd0", "bus": "scsi0.0"}}
 | |
| { "execute": "device_add", "arguments": {"id": "scsi-hd1", "driver": "scsi-hd", "drive": "hd0", "bus": "scsi1.0"}}
 | |
| { "execute": "device_del", "arguments": {"id": "scsi-hd0"}}
 | |
| { "execute": "device_add", "arguments": {"id": "scsi-hd1", "driver": "scsi-hd", "drive": "hd0", "bus": "scsi1.0"}}
 | |
| { "execute": "device_del", "arguments": {"id": "scsi-hd1"}}
 | |
| { "execute": "device_del", "arguments": {"id": "scsi0"}}
 | |
| { "execute": "device_del", "arguments": {"id": "scsi1"}}
 | |
| { "execute": "blockdev-del", "arguments": {"node-name": "hd0"}}
 | |
| { "execute": "quit"}
 | |
| EOF
 | |
| 
 | |
| echo
 | |
| echo === Attach a SCSI disks using the same block device as a NBD server ===
 | |
| echo
 | |
| 
 | |
| run_qemu <<EOF
 | |
| { "execute": "qmp_capabilities" }
 | |
| { "execute": "blockdev-add", "arguments": {"driver": "null-co", "read-zeroes": true, "node-name": "hd0", "read-only": true}}
 | |
| { "execute": "nbd-server-start", "arguments": {"addr":{"type":"unix","data":{"path":"$SOCK_DIR/nbd"}}}}
 | |
| { "execute": "nbd-server-add", "arguments": {"device":"hd0"}}
 | |
| { "execute": "object-add", "arguments": {"qom-type": "iothread", "id": "iothread0"}}
 | |
| { "execute": "device_add", "arguments": {"id": "scsi0", "driver": "${virtio_scsi}", "iothread": "iothread0"}}
 | |
| { "execute": "device_add", "arguments": {"id": "scsi-hd0", "driver": "scsi-hd", "drive": "hd0", "bus": "scsi0.0"}}
 | |
| { "execute": "quit"}
 | |
| EOF
 | |
| 
 | |
| # success, all done
 | |
| echo "*** done"
 | |
| rm -f $seq.full
 | |
| status=0
 |