 1670ae7af6
			
		
	
	
		1670ae7af6
		
	
	
	
	
		
			
			Add a qemu_img_map() function by analogy with qemu_img_measure(),
qemu_img_check(), and qemu_img_info() that all return JSON information.
Replace calls to qemu_img_pipe('map', '--output=json', ...) with this
new function, which provides better diagnostic information on failure.
Note: The output for iotest 211 changes, because logging JSON after it
was deserialized by Python behaves a little differently than logging the
raw JSON document string itself.
(iotests.log() sorts the keys for Python 3.6 support.)
Signed-off-by: John Snow <jsnow@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Message-Id: <20220321201618.903471-11-jsnow@redhat.com>
Signed-off-by: Hanna Reitz <hreitz@redhat.com>
		
	
			
		
			
				
	
	
		
			109 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			109 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| === Successful image creation (defaults) ===
 | |
| 
 | |
| {"execute": "blockdev-create", "arguments": {"job-id": "job0", "options": {"driver": "file", "filename": "TEST_DIR/PID-t.vdi", "size": 0}}}
 | |
| {"return": {}}
 | |
| {"execute": "job-dismiss", "arguments": {"id": "job0"}}
 | |
| {"return": {}}
 | |
| 
 | |
| {"execute": "blockdev-add", "arguments": {"driver": "file", "filename": "TEST_DIR/PID-t.vdi", "node-name": "imgfile"}}
 | |
| {"return": {}}
 | |
| {"execute": "blockdev-create", "arguments": {"job-id": "job0", "options": {"driver": "vdi", "file": "imgfile", "size": 134217728}}}
 | |
| {"return": {}}
 | |
| {"execute": "job-dismiss", "arguments": {"id": "job0"}}
 | |
| {"return": {}}
 | |
| 
 | |
| image: TEST_IMG
 | |
| file format: IMGFMT
 | |
| virtual size: 128 MiB (134217728 bytes)
 | |
| cluster_size: 1048576
 | |
| 
 | |
| [{"data": false, "depth": 0, "length": 134217728, "present": true, "start": 0, "zero": true}]
 | |
| === Successful image creation (explicit defaults) ===
 | |
| 
 | |
| {"execute": "blockdev-create", "arguments": {"job-id": "job0", "options": {"driver": "file", "filename": "TEST_DIR/PID-t.vdi", "size": 0}}}
 | |
| {"return": {}}
 | |
| {"execute": "job-dismiss", "arguments": {"id": "job0"}}
 | |
| {"return": {}}
 | |
| 
 | |
| {"execute": "blockdev-create", "arguments": {"job-id": "job0", "options": {"driver": "vdi", "file": {"driver": "file", "filename": "TEST_DIR/PID-t.vdi"}, "preallocation": "off", "size": 67108864}}}
 | |
| {"return": {}}
 | |
| {"execute": "job-dismiss", "arguments": {"id": "job0"}}
 | |
| {"return": {}}
 | |
| 
 | |
| image: TEST_IMG
 | |
| file format: IMGFMT
 | |
| virtual size: 64 MiB (67108864 bytes)
 | |
| cluster_size: 1048576
 | |
| 
 | |
| [{"data": false, "depth": 0, "length": 67108864, "present": true, "start": 0, "zero": true}]
 | |
| === Successful image creation (with non-default options) ===
 | |
| 
 | |
| {"execute": "blockdev-create", "arguments": {"job-id": "job0", "options": {"driver": "file", "filename": "TEST_DIR/PID-t.vdi", "size": 0}}}
 | |
| {"return": {}}
 | |
| {"execute": "job-dismiss", "arguments": {"id": "job0"}}
 | |
| {"return": {}}
 | |
| 
 | |
| {"execute": "blockdev-create", "arguments": {"job-id": "job0", "options": {"driver": "vdi", "file": {"driver": "file", "filename": "TEST_DIR/PID-t.vdi"}, "preallocation": "metadata", "size": 33554432}}}
 | |
| {"return": {}}
 | |
| {"execute": "job-dismiss", "arguments": {"id": "job0"}}
 | |
| {"return": {}}
 | |
| 
 | |
| image: TEST_IMG
 | |
| file format: IMGFMT
 | |
| virtual size: 32 MiB (33554432 bytes)
 | |
| cluster_size: 1048576
 | |
| 
 | |
| [{"data": true, "depth": 0, "length": 3072, "offset": 1024, "present": true, "start": 0, "zero": false}, {"data": true, "depth": 0, "length": 33551360, "offset": 4096, "present": true, "start": 3072, "zero": true}]
 | |
| === Invalid BlockdevRef ===
 | |
| 
 | |
| {"execute": "blockdev-create", "arguments": {"job-id": "job0", "options": {"driver": "vdi", "file": "this doesn't exist", "size": 33554432}}}
 | |
| {"return": {}}
 | |
| Job failed: Cannot find device='this doesn't exist' nor node-name='this doesn't exist'
 | |
| {"execute": "job-dismiss", "arguments": {"id": "job0"}}
 | |
| {"return": {}}
 | |
| 
 | |
| === Zero size ===
 | |
| 
 | |
| {"execute": "blockdev-create", "arguments": {"job-id": "job0", "options": {"driver": "vdi", "file": "node0", "size": 0}}}
 | |
| {"return": {}}
 | |
| {"execute": "job-dismiss", "arguments": {"id": "job0"}}
 | |
| {"return": {}}
 | |
| 
 | |
| image: TEST_IMG
 | |
| file format: IMGFMT
 | |
| virtual size: 0 B (0 bytes)
 | |
| cluster_size: 1048576
 | |
| 
 | |
| === Maximum size ===
 | |
| 
 | |
| {"execute": "blockdev-create", "arguments": {"job-id": "job0", "options": {"driver": "vdi", "file": "node0", "size": 562949819203584}}}
 | |
| {"return": {}}
 | |
| {"execute": "job-dismiss", "arguments": {"id": "job0"}}
 | |
| {"return": {}}
 | |
| 
 | |
| image: TEST_IMG
 | |
| file format: IMGFMT
 | |
| virtual size: 512 TiB (562949819203584 bytes)
 | |
| cluster_size: 1048576
 | |
| 
 | |
| === Invalid sizes ===
 | |
| 
 | |
| {"execute": "blockdev-create", "arguments": {"job-id": "job0", "options": {"driver": "vdi", "file": "node0", "size": 18446744073709551104}}}
 | |
| {"return": {}}
 | |
| Job failed: Unsupported VDI image size (size is 0xfffffffffffffe00, max supported is 0x1fffff8000000)
 | |
| {"execute": "job-dismiss", "arguments": {"id": "job0"}}
 | |
| {"return": {}}
 | |
| 
 | |
| {"execute": "blockdev-create", "arguments": {"job-id": "job0", "options": {"driver": "vdi", "file": "node0", "size": 9223372036854775808}}}
 | |
| {"return": {}}
 | |
| Job failed: Unsupported VDI image size (size is 0x8000000000000000, max supported is 0x1fffff8000000)
 | |
| {"execute": "job-dismiss", "arguments": {"id": "job0"}}
 | |
| {"return": {}}
 | |
| 
 | |
| {"execute": "blockdev-create", "arguments": {"job-id": "job0", "options": {"driver": "vdi", "file": "node0", "size": 562949819203585}}}
 | |
| {"return": {}}
 | |
| Job failed: Unsupported VDI image size (size is 0x1fffff8000001, max supported is 0x1fffff8000000)
 | |
| {"execute": "job-dismiss", "arguments": {"id": "job0"}}
 | |
| {"return": {}}
 | |
| 
 |