 6ee7c82d0d
			
		
	
	
		6ee7c82d0d
		
	
	
	
	
		
			
			Clean up monitor_event to just use monitor_suspend/monitor_resume, using mon->mux_out to protect against incorrect nesting (especially on startup). The only remaining case of reading suspend_cnt is in the can_read callback, which is just advisory and can use qatomic_read. As an extra benefit, mux_out is now simply protected by mon_lock. Also, moving the prompt to the beginning of the main loop removes it from the output in some error cases where QEMU does not actually start successfully. It is not a full fix and it would be nice to also remove the monitor heading, but this is already a small (though unintentional) improvement. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
		
			
				
	
	
		
			474 lines
		
	
	
		
			22 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			474 lines
		
	
	
		
			22 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| QA output created by 051
 | |
| Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728
 | |
| Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 backing_file=TEST_DIR/t.IMGFMT.base backing_fmt=IMGFMT
 | |
| 
 | |
| === Unknown option ===
 | |
| 
 | |
| Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=,if=none,id=drive0
 | |
| QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=,if=none,id=drive0: Block format 'qcow2' does not support the option 'unknown_opt'
 | |
| 
 | |
| Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=on,if=none,id=drive0
 | |
| QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=on,if=none,id=drive0: Block format 'qcow2' does not support the option 'unknown_opt'
 | |
| 
 | |
| Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=1234,if=none,id=drive0
 | |
| QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=1234,if=none,id=drive0: Block format 'qcow2' does not support the option 'unknown_opt'
 | |
| 
 | |
| Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=foo,if=none,id=drive0
 | |
| QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=foo,if=none,id=drive0: Block format 'qcow2' does not support the option 'unknown_opt'
 | |
| 
 | |
| 
 | |
| === Unknown protocol option ===
 | |
| 
 | |
| Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,file.unknown_opt=
 | |
| QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,file.unknown_opt=: Block protocol 'file' doesn't support the option 'unknown_opt'
 | |
| 
 | |
| Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,file.unknown_opt=on
 | |
| QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,file.unknown_opt=on: Block protocol 'file' doesn't support the option 'unknown_opt'
 | |
| 
 | |
| Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,file.unknown_opt=1234
 | |
| QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,file.unknown_opt=1234: Block protocol 'file' doesn't support the option 'unknown_opt'
 | |
| 
 | |
| Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,file.unknown_opt=foo
 | |
| QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,file.unknown_opt=foo: Block protocol 'file' doesn't support the option 'unknown_opt'
 | |
| 
 | |
| 
 | |
| === Invalid format ===
 | |
| 
 | |
| Testing: -drive file=TEST_DIR/t.qcow2,format=foo
 | |
| QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=foo: Unknown driver 'foo'
 | |
| 
 | |
| Testing: -drive file=TEST_DIR/t.qcow2,driver=foo
 | |
| QEMU_PROG: -drive file=TEST_DIR/t.qcow2,driver=foo: Unknown driver 'foo'
 | |
| 
 | |
| Testing: -drive file=TEST_DIR/t.qcow2,driver=raw,format=qcow2
 | |
| QEMU_PROG: -drive file=TEST_DIR/t.qcow2,driver=raw,format=qcow2: Cannot specify both 'driver' and 'format'
 | |
| 
 | |
| Testing: -drive file=TEST_DIR/t.qcow2,driver=qcow2,format=qcow2
 | |
| QEMU_PROG: -drive file=TEST_DIR/t.qcow2,driver=qcow2,format=qcow2: Cannot specify both 'driver' and 'format'
 | |
| 
 | |
| 
 | |
| === Node names ===
 | |
| 
 | |
| Testing: -drive file=TEST_DIR/t.qcow2,node-name=x123456789012345678901234567890
 | |
| QEMU X.Y.Z monitor - type 'help' for more information
 | |
| (qemu) quit
 | |
| 
 | |
| Testing: -drive file=TEST_DIR/t.qcow2,node-name=x1234567890123456789012345678901
 | |
| QEMU_PROG: -drive file=TEST_DIR/t.qcow2,node-name=x1234567890123456789012345678901: Node name too long
 | |
| 
 | |
| Testing: -drive file=TEST_DIR/t.qcow2,node-name=All-Types.of_all0wed_chars
 | |
| QEMU X.Y.Z monitor - type 'help' for more information
 | |
| (qemu) quit
 | |
| 
 | |
| Testing: -drive file=TEST_DIR/t.qcow2,node-name=123foo
 | |
| QEMU_PROG: -drive file=TEST_DIR/t.qcow2,node-name=123foo: Invalid node-name: '123foo'
 | |
| 
 | |
| Testing: -drive file=TEST_DIR/t.qcow2,node-name=_foo
 | |
| QEMU_PROG: -drive file=TEST_DIR/t.qcow2,node-name=_foo: Invalid node-name: '_foo'
 | |
| 
 | |
| Testing: -drive file=TEST_DIR/t.qcow2,node-name=foo#12
 | |
| QEMU_PROG: -drive file=TEST_DIR/t.qcow2,node-name=foo#12: Invalid node-name: 'foo#12'
 | |
| 
 | |
| 
 | |
| === Device without drive ===
 | |
| 
 | |
| Testing: -device virtio-scsi -device scsi-hd
 | |
| QEMU X.Y.Z monitor - type 'help' for more information
 | |
| QEMU_PROG: -device scsi-hd: drive property not set
 | |
| 
 | |
| 
 | |
| === Overriding backing file ===
 | |
| 
 | |
| Testing: -drive file=TEST_DIR/t.qcow2,driver=qcow2,backing.file.filename=TEST_DIR/t.qcow2.orig,if=none,id=drive0 -nodefaults
 | |
| QEMU X.Y.Z monitor - type 'help' for more information
 | |
| (qemu) info block
 | |
| drive0 (NODE_NAME): json:{"backing": {"driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/t.qcow2.orig"}}, "driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/t.qcow2"}} (qcow2)
 | |
|     Removable device: not locked, tray closed
 | |
|     Cache mode:       writeback
 | |
|     Backing file:     TEST_DIR/t.qcow2.orig (chain depth: 1)
 | |
| (qemu) quit
 | |
| 
 | |
| Testing: -drive file=TEST_DIR/t.qcow2,driver=raw,backing.file.filename=TEST_DIR/t.qcow2.orig
 | |
| QEMU_PROG: -drive file=TEST_DIR/t.qcow2,driver=raw,backing.file.filename=TEST_DIR/t.qcow2.orig: Driver doesn't support backing files
 | |
| 
 | |
| Testing: -drive file=TEST_DIR/t.qcow2,file.backing.driver=file,file.backing.filename=TEST_DIR/t.qcow2.orig
 | |
| QEMU_PROG: -drive file=TEST_DIR/t.qcow2,file.backing.driver=file,file.backing.filename=TEST_DIR/t.qcow2.orig: Driver doesn't support backing files
 | |
| 
 | |
| Testing: -drive file=TEST_DIR/t.qcow2,file.backing.driver=qcow2,file.backing.file.filename=TEST_DIR/t.qcow2.orig
 | |
| QEMU_PROG: -drive file=TEST_DIR/t.qcow2,file.backing.driver=qcow2,file.backing.file.filename=TEST_DIR/t.qcow2.orig: Driver doesn't support backing files
 | |
| 
 | |
| 
 | |
| === Enable and disable lazy refcounting on the command line, plus some invalid values ===
 | |
| 
 | |
| Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728
 | |
| Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts=on
 | |
| QEMU X.Y.Z monitor - type 'help' for more information
 | |
| (qemu) quit
 | |
| 
 | |
| Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts=off
 | |
| QEMU X.Y.Z monitor - type 'help' for more information
 | |
| (qemu) quit
 | |
| 
 | |
| Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts=
 | |
| QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts=: Parameter 'lazy-refcounts' expects 'on' or 'off'
 | |
| 
 | |
| Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts=42
 | |
| QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts=42: Parameter 'lazy-refcounts' expects 'on' or 'off'
 | |
| 
 | |
| Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts=foo
 | |
| QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts=foo: Parameter 'lazy-refcounts' expects 'on' or 'off'
 | |
| 
 | |
| 
 | |
| === With version 2 images enabling lazy refcounts must fail ===
 | |
| 
 | |
| Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728
 | |
| Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts=on
 | |
| QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts=on: Lazy refcounts require a qcow2 image with at least qemu 1.1 compatibility level
 | |
| 
 | |
| Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,lazy-refcounts=off
 | |
| QEMU X.Y.Z monitor - type 'help' for more information
 | |
| (qemu) quit
 | |
| 
 | |
| 
 | |
| === No medium ===
 | |
| 
 | |
| Testing: -drive if=virtio
 | |
| QEMU X.Y.Z monitor - type 'help' for more information
 | |
| QEMU_PROG: -drive if=virtio: Device needs media, but drive is empty
 | |
| 
 | |
| 
 | |
| === Attach to node in non-default iothread ===
 | |
| 
 | |
| 
 | |
| === Read-only ===
 | |
| 
 | |
| Testing: -drive file=TEST_DIR/t.qcow2,if=virtio,readonly=on
 | |
| QEMU X.Y.Z monitor - type 'help' for more information
 | |
| (qemu) quit
 | |
| 
 | |
| 
 | |
| === Cache modes ===
 | |
| 
 | |
| Testing: -drive driver=null-co,read-zeroes=on,cache=none
 | |
| QEMU X.Y.Z monitor - type 'help' for more information
 | |
| (qemu) quit
 | |
| 
 | |
| Testing: -drive driver=null-co,read-zeroes=on,cache=directsync
 | |
| QEMU X.Y.Z monitor - type 'help' for more information
 | |
| (qemu) quit
 | |
| 
 | |
| Testing: -drive driver=null-co,read-zeroes=on,cache=writeback
 | |
| QEMU X.Y.Z monitor - type 'help' for more information
 | |
| (qemu) quit
 | |
| 
 | |
| Testing: -drive driver=null-co,read-zeroes=on,cache=writethrough
 | |
| QEMU X.Y.Z monitor - type 'help' for more information
 | |
| (qemu) quit
 | |
| 
 | |
| Testing: -drive driver=null-co,read-zeroes=on,cache=unsafe
 | |
| QEMU X.Y.Z monitor - type 'help' for more information
 | |
| (qemu) quit
 | |
| 
 | |
| Testing: -drive driver=null-co,cache=invalid_value
 | |
| QEMU_PROG: -drive driver=null-co,cache=invalid_value: invalid cache option
 | |
| 
 | |
| Testing: -drive file=TEST_DIR/t.qcow2,cache=writeback,backing.file.filename=TEST_DIR/t.qcow2.base,backing.cache.no-flush=on,backing.node-name=backing,backing.file.node-name=backing-file,file.node-name=file,if=none,id=drive0 -nodefaults
 | |
| QEMU X.Y.Z monitor - type 'help' for more information
 | |
| (qemu) info block
 | |
| drive0 (NODE_NAME): json:{"backing": {"driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/t.qcow2.base"}}, "driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/t.qcow2"}} (qcow2)
 | |
|     Removable device: not locked, tray closed
 | |
|     Cache mode:       writeback
 | |
|     Backing file:     TEST_DIR/t.qcow2.base (chain depth: 1)
 | |
| (qemu) info block file
 | |
| 
 | |
| file: TEST_DIR/t.qcow2 (file)
 | |
|     Cache mode:       writeback
 | |
| (qemu) info block backing
 | |
| backing: TEST_DIR/t.qcow2.base (qcow2, read-only)
 | |
|     Cache mode:       writeback, ignore flushes
 | |
| (qemu) info block backing-file
 | |
| 
 | |
| backing-file: TEST_DIR/t.qcow2.base (file, read-only)
 | |
|     Cache mode:       writeback, ignore flushes
 | |
| (qemu) quit
 | |
| 
 | |
| Testing: -drive file=TEST_DIR/t.qcow2,cache=writethrough,backing.file.filename=TEST_DIR/t.qcow2.base,backing.cache.no-flush=on,backing.node-name=backing,backing.file.node-name=backing-file,file.node-name=file,if=none,id=drive0 -nodefaults
 | |
| QEMU X.Y.Z monitor - type 'help' for more information
 | |
| (qemu) info block
 | |
| drive0 (NODE_NAME): json:{"backing": {"driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/t.qcow2.base"}}, "driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/t.qcow2"}} (qcow2)
 | |
|     Removable device: not locked, tray closed
 | |
|     Cache mode:       writethrough
 | |
|     Backing file:     TEST_DIR/t.qcow2.base (chain depth: 1)
 | |
| (qemu) info block file
 | |
| 
 | |
| file: TEST_DIR/t.qcow2 (file)
 | |
|     Cache mode:       writeback
 | |
| (qemu) info block backing
 | |
| backing: TEST_DIR/t.qcow2.base (qcow2, read-only)
 | |
|     Cache mode:       writeback, ignore flushes
 | |
| (qemu) info block backing-file
 | |
| 
 | |
| backing-file: TEST_DIR/t.qcow2.base (file, read-only)
 | |
|     Cache mode:       writeback, ignore flushes
 | |
| (qemu) quit
 | |
| 
 | |
| Testing: -drive file=TEST_DIR/t.qcow2,cache=unsafe,backing.file.filename=TEST_DIR/t.qcow2.base,backing.cache.no-flush=on,backing.node-name=backing,backing.file.node-name=backing-file,file.node-name=file,if=none,id=drive0 -nodefaults
 | |
| QEMU X.Y.Z monitor - type 'help' for more information
 | |
| (qemu) info block
 | |
| drive0 (NODE_NAME): json:{"backing": {"driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/t.qcow2.base"}}, "driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/t.qcow2"}} (qcow2)
 | |
|     Removable device: not locked, tray closed
 | |
|     Cache mode:       writeback, ignore flushes
 | |
|     Backing file:     TEST_DIR/t.qcow2.base (chain depth: 1)
 | |
| (qemu) info block file
 | |
| 
 | |
| file: TEST_DIR/t.qcow2 (file)
 | |
|     Cache mode:       writeback, ignore flushes
 | |
| (qemu) info block backing
 | |
| backing: TEST_DIR/t.qcow2.base (qcow2, read-only)
 | |
|     Cache mode:       writeback, ignore flushes
 | |
| (qemu) info block backing-file
 | |
| 
 | |
| backing-file: TEST_DIR/t.qcow2.base (file, read-only)
 | |
|     Cache mode:       writeback, ignore flushes
 | |
| (qemu) quit
 | |
| 
 | |
| Testing: -drive file=TEST_DIR/t.qcow2,cache=invalid_value,backing.file.filename=TEST_DIR/t.qcow2.base,backing.cache.no-flush=on,backing.node-name=backing,backing.file.node-name=backing-file,file.node-name=file,if=none,id=drive0 -nodefaults
 | |
| QEMU_PROG: -drive file=TEST_DIR/t.qcow2,cache=invalid_value,backing.file.filename=TEST_DIR/t.qcow2.base,backing.cache.no-flush=on,backing.node-name=backing,backing.file.node-name=backing-file,file.node-name=file,if=none,id=drive0: invalid cache option
 | |
| 
 | |
| 
 | |
| === Specifying the protocol layer ===
 | |
| 
 | |
| Testing: -drive file=TEST_DIR/t.qcow2,file.driver=file
 | |
| QEMU X.Y.Z monitor - type 'help' for more information
 | |
| (qemu) quit
 | |
| 
 | |
| 
 | |
| === Leaving out required options ===
 | |
| 
 | |
| Testing: -drive driver=file
 | |
| QEMU_PROG: -drive driver=file: The 'file' block driver requires a file name
 | |
| 
 | |
| Testing: -drive driver=file,filename=
 | |
| QEMU_PROG: -drive driver=file,filename=: The 'file' block driver requires a file name
 | |
| 
 | |
| Testing: -drive driver=nbd
 | |
| QEMU_PROG: -drive driver=nbd: NBD server address missing
 | |
| 
 | |
| Testing: -drive driver=raw
 | |
| QEMU_PROG: -drive driver=raw: A block device must be specified for "file"
 | |
| 
 | |
| Testing: -drive file.driver=file
 | |
| QEMU_PROG: -drive file.driver=file: The 'file' block driver requires a file name
 | |
| 
 | |
| Testing: -drive file.driver=nbd
 | |
| QEMU_PROG: -drive file.driver=nbd: NBD server address missing
 | |
| 
 | |
| Testing: -drive file.driver=raw
 | |
| QEMU_PROG: -drive file.driver=raw: A block device must be specified for "file"
 | |
| 
 | |
| Testing: -drive foo=bar
 | |
| QEMU_PROG: -drive foo=bar: Must specify either driver or file
 | |
| 
 | |
| 
 | |
| === Specifying both an option and its legacy alias ===
 | |
| 
 | |
| Testing: -drive file=TEST_DIR/t.qcow2,iops=1234,throttling.iops-total=5678
 | |
| QEMU_PROG: -drive file=TEST_DIR/t.qcow2,iops=1234,throttling.iops-total=5678: 'throttling.iops-total' and its alias 'iops' can't be used at the same time
 | |
| 
 | |
| Testing: -drive file=TEST_DIR/t.qcow2,iops_rd=1234,throttling.iops-read=5678
 | |
| QEMU_PROG: -drive file=TEST_DIR/t.qcow2,iops_rd=1234,throttling.iops-read=5678: 'throttling.iops-read' and its alias 'iops_rd' can't be used at the same time
 | |
| 
 | |
| Testing: -drive file=TEST_DIR/t.qcow2,iops_wr=1234,throttling.iops-write=5678
 | |
| QEMU_PROG: -drive file=TEST_DIR/t.qcow2,iops_wr=1234,throttling.iops-write=5678: 'throttling.iops-write' and its alias 'iops_wr' can't be used at the same time
 | |
| 
 | |
| Testing: -drive file=TEST_DIR/t.qcow2,bps=1234,throttling.bps-total=5678
 | |
| QEMU_PROG: -drive file=TEST_DIR/t.qcow2,bps=1234,throttling.bps-total=5678: 'throttling.bps-total' and its alias 'bps' can't be used at the same time
 | |
| 
 | |
| Testing: -drive file=TEST_DIR/t.qcow2,bps_rd=1234,throttling.bps-read=5678
 | |
| QEMU_PROG: -drive file=TEST_DIR/t.qcow2,bps_rd=1234,throttling.bps-read=5678: 'throttling.bps-read' and its alias 'bps_rd' can't be used at the same time
 | |
| 
 | |
| Testing: -drive file=TEST_DIR/t.qcow2,bps_wr=1234,throttling.bps-write=5678
 | |
| QEMU_PROG: -drive file=TEST_DIR/t.qcow2,bps_wr=1234,throttling.bps-write=5678: 'throttling.bps-write' and its alias 'bps_wr' can't be used at the same time
 | |
| 
 | |
| Testing: -drive file=TEST_DIR/t.qcow2,iops_max=1234,throttling.iops-total-max=5678
 | |
| QEMU_PROG: -drive file=TEST_DIR/t.qcow2,iops_max=1234,throttling.iops-total-max=5678: 'throttling.iops-total-max' and its alias 'iops_max' can't be used at the same time
 | |
| 
 | |
| Testing: -drive file=TEST_DIR/t.qcow2,iops_rd_max=1234,throttling.iops-read-max=5678
 | |
| QEMU_PROG: -drive file=TEST_DIR/t.qcow2,iops_rd_max=1234,throttling.iops-read-max=5678: 'throttling.iops-read-max' and its alias 'iops_rd_max' can't be used at the same time
 | |
| 
 | |
| Testing: -drive file=TEST_DIR/t.qcow2,iops_wr_max=1234,throttling.iops-write-max=5678
 | |
| QEMU_PROG: -drive file=TEST_DIR/t.qcow2,iops_wr_max=1234,throttling.iops-write-max=5678: 'throttling.iops-write-max' and its alias 'iops_wr_max' can't be used at the same time
 | |
| 
 | |
| Testing: -drive file=TEST_DIR/t.qcow2,bps_max=1234,throttling.bps-total-max=5678
 | |
| QEMU_PROG: -drive file=TEST_DIR/t.qcow2,bps_max=1234,throttling.bps-total-max=5678: 'throttling.bps-total-max' and its alias 'bps_max' can't be used at the same time
 | |
| 
 | |
| Testing: -drive file=TEST_DIR/t.qcow2,bps_rd_max=1234,throttling.bps-read-max=5678
 | |
| QEMU_PROG: -drive file=TEST_DIR/t.qcow2,bps_rd_max=1234,throttling.bps-read-max=5678: 'throttling.bps-read-max' and its alias 'bps_rd_max' can't be used at the same time
 | |
| 
 | |
| Testing: -drive file=TEST_DIR/t.qcow2,bps_wr_max=1234,throttling.bps-write-max=5678
 | |
| QEMU_PROG: -drive file=TEST_DIR/t.qcow2,bps_wr_max=1234,throttling.bps-write-max=5678: 'throttling.bps-write-max' and its alias 'bps_wr_max' can't be used at the same time
 | |
| 
 | |
| Testing: -drive file=TEST_DIR/t.qcow2,iops_size=1234,throttling.iops-size=5678
 | |
| QEMU_PROG: -drive file=TEST_DIR/t.qcow2,iops_size=1234,throttling.iops-size=5678: 'throttling.iops-size' and its alias 'iops_size' can't be used at the same time
 | |
| 
 | |
| Testing: -drive file=TEST_DIR/t.qcow2,readonly=on,read-only=off
 | |
| QEMU_PROG: -drive file=TEST_DIR/t.qcow2,readonly=on,read-only=off: 'read-only' and its alias 'readonly' can't be used at the same time
 | |
| 
 | |
| 
 | |
| === Catching negative/large throttling values ===
 | |
| 
 | |
| Testing: -drive file=TEST_DIR/t.qcow2,iops=-1
 | |
| QEMU_PROG: -drive file=TEST_DIR/t.qcow2,iops=-1: bps/iops/max values must be within [0, 1000000000000000]
 | |
| 
 | |
| Testing: -drive file=TEST_DIR/t.qcow2,bps=-2
 | |
| QEMU_PROG: -drive file=TEST_DIR/t.qcow2,bps=-2: bps/iops/max values must be within [0, 1000000000000000]
 | |
| 
 | |
| Testing: -drive file=TEST_DIR/t.qcow2,bps_rd=-3
 | |
| QEMU_PROG: -drive file=TEST_DIR/t.qcow2,bps_rd=-3: bps/iops/max values must be within [0, 1000000000000000]
 | |
| 
 | |
| Testing: -drive file=TEST_DIR/t.qcow2,bps_rd_max=-3
 | |
| QEMU_PROG: -drive file=TEST_DIR/t.qcow2,bps_rd_max=-3: bps/iops/max values must be within [0, 1000000000000000]
 | |
| 
 | |
| Testing: -drive file=TEST_DIR/t.qcow2,throttling.iops-total=-4
 | |
| QEMU_PROG: -drive file=TEST_DIR/t.qcow2,throttling.iops-total=-4: bps/iops/max values must be within [0, 1000000000000000]
 | |
| 
 | |
| Testing: -drive file=TEST_DIR/t.qcow2,throttling.bps-total=-5
 | |
| QEMU_PROG: -drive file=TEST_DIR/t.qcow2,throttling.bps-total=-5: bps/iops/max values must be within [0, 1000000000000000]
 | |
| 
 | |
| Testing: -drive file=TEST_DIR/t.qcow2,bps=0
 | |
| QEMU X.Y.Z monitor - type 'help' for more information
 | |
| (qemu) quit
 | |
| 
 | |
| Testing: -drive file=TEST_DIR/t.qcow2,bps=1
 | |
| QEMU X.Y.Z monitor - type 'help' for more information
 | |
| (qemu) quit
 | |
| 
 | |
| Testing: -drive file=TEST_DIR/t.qcow2,bps=1000000000000000
 | |
| QEMU X.Y.Z monitor - type 'help' for more information
 | |
| (qemu) quit
 | |
| 
 | |
| Testing: -drive file=TEST_DIR/t.qcow2,bps=1000000000000001
 | |
| QEMU_PROG: -drive file=TEST_DIR/t.qcow2,bps=1000000000000001: bps/iops/max values must be within [0, 1000000000000000]
 | |
| 
 | |
| Testing: -drive file=TEST_DIR/t.qcow2,bps=9999999999999999
 | |
| QEMU_PROG: -drive file=TEST_DIR/t.qcow2,bps=9999999999999999: bps/iops/max values must be within [0, 1000000000000000]
 | |
| 
 | |
| 
 | |
| === Parsing protocol from file name ===
 | |
| 
 | |
| Testing: -hda foo:bar
 | |
| QEMU_PROG: -hda foo:bar: Unknown protocol 'foo'
 | |
| 
 | |
| Testing: -drive file=foo:bar
 | |
| QEMU_PROG: -drive file=foo:bar: Unknown protocol 'foo'
 | |
| 
 | |
| Testing: -drive file.filename=foo:bar
 | |
| QEMU_PROG: -drive file.filename=foo:bar: Could not open 'foo:bar': No such file or directory
 | |
| 
 | |
| Testing: -hda file:TEST_DIR/t.qcow2
 | |
| QEMU X.Y.Z monitor - type 'help' for more information
 | |
| (qemu) quit
 | |
| 
 | |
| Testing: -drive file=file:TEST_DIR/t.qcow2
 | |
| QEMU X.Y.Z monitor - type 'help' for more information
 | |
| (qemu) quit
 | |
| 
 | |
| Testing: -drive file.filename=file:TEST_DIR/t.qcow2
 | |
| QEMU_PROG: -drive file.filename=file:TEST_DIR/t.qcow2: Could not open 'file:TEST_DIR/t.qcow2': No such file or directory
 | |
| 
 | |
| 
 | |
| === Snapshot mode ===
 | |
| 
 | |
| wrote 4096/4096 bytes at offset 0
 | |
| 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| Testing: -drive file=TEST_DIR/t.qcow2,if=none,id=drive0 -snapshot
 | |
| QEMU X.Y.Z monitor - type 'help' for more information
 | |
| (qemu) qemu-io drive0 "write -P 0x22 0 4k"
 | |
| wrote 4096/4096 bytes at offset 0
 | |
| 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| (qemu) quit
 | |
| 
 | |
| Testing: -drive file=TEST_DIR/t.qcow2,snapshot=on,if=none,id=drive0
 | |
| QEMU X.Y.Z monitor - type 'help' for more information
 | |
| (qemu) qemu-io drive0 "write -P 0x22 0 4k"
 | |
| wrote 4096/4096 bytes at offset 0
 | |
| 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| (qemu) quit
 | |
| 
 | |
| Testing: -drive file.filename=TEST_DIR/t.qcow2,driver=qcow2,snapshot=on,if=none,id=drive0
 | |
| QEMU X.Y.Z monitor - type 'help' for more information
 | |
| (qemu) qemu-io drive0 "write -P 0x22 0 4k"
 | |
| wrote 4096/4096 bytes at offset 0
 | |
| 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| (qemu) quit
 | |
| 
 | |
| Testing: -drive file.filename=TEST_DIR/t.qcow2,driver=qcow2,if=none,id=drive0 -snapshot
 | |
| QEMU X.Y.Z monitor - type 'help' for more information
 | |
| (qemu) qemu-io drive0 "write -P 0x22 0 4k"
 | |
| wrote 4096/4096 bytes at offset 0
 | |
| 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| (qemu) quit
 | |
| 
 | |
| Testing: -drive file=file:TEST_DIR/t.qcow2,if=none,id=drive0 -snapshot
 | |
| QEMU X.Y.Z monitor - type 'help' for more information
 | |
| (qemu) qemu-io drive0 "write -P 0x22 0 4k"
 | |
| wrote 4096/4096 bytes at offset 0
 | |
| 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| (qemu) quit
 | |
| 
 | |
| Testing: -drive file=file:TEST_DIR/t.qcow2,snapshot=on,if=none,id=drive0
 | |
| QEMU X.Y.Z monitor - type 'help' for more information
 | |
| (qemu) qemu-io drive0 "write -P 0x22 0 4k"
 | |
| wrote 4096/4096 bytes at offset 0
 | |
| 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| (qemu) quit
 | |
| 
 | |
| Testing: -drive file=TEST_DIR/t.qcow2,if=none,id=drive0 -snapshot
 | |
| QEMU X.Y.Z monitor - type 'help' for more information
 | |
| (qemu) qemu-io drive0 "write -P 0x22 0 4k"
 | |
| wrote 4096/4096 bytes at offset 0
 | |
| 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| (qemu) quit
 | |
| 
 | |
| Testing: -drive file=TEST_DIR/t.qcow2,snapshot=on,if=none,id=drive0
 | |
| QEMU X.Y.Z monitor - type 'help' for more information
 | |
| (qemu) qemu-io drive0 "write -P 0x22 0 4k"
 | |
| wrote 4096/4096 bytes at offset 0
 | |
| 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| (qemu) quit
 | |
| 
 | |
| read 4096/4096 bytes at offset 0
 | |
| 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| Testing: -drive file=TEST_DIR/t.qcow2,snapshot=off,if=none,id=drive0
 | |
| QEMU X.Y.Z monitor - type 'help' for more information
 | |
| (qemu) qemu-io drive0 "write -P 0x22 0 4k"
 | |
| wrote 4096/4096 bytes at offset 0
 | |
| 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| (qemu) quit
 | |
| 
 | |
| read 4096/4096 bytes at offset 0
 | |
| 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| Testing: -drive file=TEST_DIR/t.qcow2,snapshot=on,if=none,id=drive0
 | |
| QEMU X.Y.Z monitor - type 'help' for more information
 | |
| (qemu) qemu-io drive0 "write -P 0x33 0 4k"
 | |
| wrote 4096/4096 bytes at offset 0
 | |
| 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| (qemu) commit drive0
 | |
| (qemu) quit
 | |
| 
 | |
| read 4096/4096 bytes at offset 0
 | |
| 4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 | |
| Testing: -drive driver=null-co,snapshot=on
 | |
| QEMU_PROG: -drive driver=null-co,snapshot=on: Could not open temporary file SNAPSHOT_PATH: No such file or directory
 | |
| 
 | |
| Testing: -drive file=TEST_DIR/t.qcow2,snapshot=on,read-only=on,if=none,id=drive0
 | |
| QEMU X.Y.Z monitor - type 'help' for more information
 | |
| (qemu) info block
 | |
| drive0 (NODE_NAME): json:{"backing": {"driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/t.qcow2"}}, "driver": "qcow2", "file": {"driver": "file", "filename": SNAPSHOT_PATH}} (qcow2, read-only)
 | |
|     Removable device: not locked, tray closed
 | |
|     Cache mode:       writeback, ignore flushes
 | |
|     Backing file:     TEST_DIR/t.qcow2 (chain depth: 1)
 | |
| (qemu) quit
 | |
| 
 | |
| *** done
 |