1QA output created by 308 2=== Set up === 3Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 4wrote 67108864/67108864 bytes at offset 0 564 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 6{'execute': 'qmp_capabilities'} 7{"return": {}} 8{'execute': 'blockdev-add', 9 'arguments': { 10 'driver': 'file', 11 'node-name': 'node-protocol', 12 'filename': 'TEST_DIR/t.IMGFMT' 13 } } 14{"return": {}} 15{'execute': 'blockdev-add', 16 'arguments': { 17 'driver': 'IMGFMT', 18 'node-name': 'node-format', 19 'file': 'node-protocol' 20 } } 21{"return": {}} 22 23=== Mountpoint not present === 24{'execute': 'block-export-add', 25 'arguments': { 26 'type': 'fuse', 27 'id': 'export-err', 28 'node-name': 'node-format', 29 'mountpoint': 'TEST_DIR/t.IMGFMT.fuse' 30 } } 31{"error": {"class": "GenericError", "desc": "Failed to stat 'TEST_DIR/t.IMGFMT.fuse': No such file or directory"}} 32 33=== Mountpoint is a directory === 34{'execute': 'block-export-add', 35 'arguments': { 36 'type': 'fuse', 37 'id': 'export-err', 38 'node-name': 'node-format', 39 'mountpoint': 'TEST_DIR/t.IMGFMT.fuse' 40 } } 41{"error": {"class": "GenericError", "desc": "'TEST_DIR/t.IMGFMT.fuse' is not a regular file"}} 42 43=== Mountpoint is a regular file === 44{'execute': 'block-export-add', 45 'arguments': { 46 'type': 'fuse', 47 'id': 'export-mp', 48 'node-name': 'node-format', 49 'mountpoint': 'TEST_DIR/t.IMGFMT.fuse' 50 } } 51{"return": {}} 52Images are identical. 53 54=== Mount over existing file === 55{'execute': 'block-export-add', 56 'arguments': { 57 'type': 'fuse', 58 'id': 'export-img', 59 'node-name': 'node-format', 60 'mountpoint': 'TEST_DIR/t.IMGFMT' 61 } } 62{"return": {}} 63Images are identical. 64 65=== Double export === 66{'execute': 'block-export-add', 67 'arguments': { 68 'type': 'fuse', 69 'id': 'export-err', 70 'node-name': 'node-format', 71 'mountpoint': 'TEST_DIR/t.IMGFMT.fuse' 72 } } 73{"error": {"class": "GenericError", "desc": "There already is a FUSE export on 'TEST_DIR/t.IMGFMT.fuse'"}} 74 75=== Remove export === 76virtual size: 64 MiB (67108864 bytes) 77{'execute': 'block-export-del', 78 'arguments': { 79 'id': 'export-mp' 80 } } 81{"return": {}} 82{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "BLOCK_EXPORT_DELETED", "data": {"id": "export-mp"}} 83virtual size: 0 B (0 bytes) 84 85=== Writable export === 86{'execute': 'block-export-add', 87 'arguments': { 88 'type': 'fuse', 89 'id': 'export-mp', 90 'node-name': 'node-format', 91 'mountpoint': 'TEST_DIR/t.IMGFMT.fuse', 'writable': true 92 } } 93{"return": {}} 94write failed: Permission denied 95wrote 65536/65536 bytes at offset 1048576 9664 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 97wrote 65536/65536 bytes at offset 1048576 9864 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 99 100=== Resizing exports === 101{'execute': 'block-export-del', 102 'arguments': { 103 'id': 'export-mp' 104 } } 105{"return": {}} 106{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "BLOCK_EXPORT_DELETED", "data": {"id": "export-mp"}} 107{'execute': 'block-export-del', 108 'arguments': { 109 'id': 'export-img' 110 } } 111{"return": {}} 112{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "BLOCK_EXPORT_DELETED", "data": {"id": "export-img"}} 113{'execute': 'blockdev-del', 114 'arguments': { 115 'node-name': 'node-format' 116 } } 117{"return": {}} 118{'execute': 'block-export-add', 119 'arguments': { 120 'type': 'fuse', 121 'id': 'export-mp', 122 'node-name': 'node-protocol', 123 'mountpoint': 'TEST_DIR/t.IMGFMT.fuse', 'writable': true 124 } } 125{"return": {}} 126 127--- Try growing non-growable export --- 128(OK: Lengths of export and original are the same) 129dd: error writing 'TEST_DIR/t.IMGFMT.fuse': Input/output error 1301+0 records in 1310+0 records out 132 133--- Resize export --- 134(OK: Lengths of export and original are the same) 135OK: Post-truncate image size is as expected 136OK: Disk usage grew with fallocate 137 138--- Try growing growable export --- 139{'execute': 'block-export-del', 140 'arguments': { 141 'id': 'export-mp' 142 } } 143{"return": {}} 144{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "BLOCK_EXPORT_DELETED", "data": {"id": "export-mp"}} 145{'execute': 'block-export-add', 146 'arguments': { 147 'type': 'fuse', 148 'id': 'export-mp', 149 'node-name': 'node-protocol', 150 'mountpoint': 'TEST_DIR/t.IMGFMT.fuse', 'writable': true, 'growable': true 151 } } 152{"return": {}} 15365536+0 records in 15465536+0 records out 155(OK: Lengths of export and original are the same) 156OK: Post-grow image size is as expected 157 158--- Shrink export --- 159(OK: Lengths of export and original are the same) 160OK: Post-truncate image size is as expected 161 162=== Tear down === 163{'execute': 'quit'} 164{"return": {}} 165{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false, "reason": "host-qmp-quit"}} 166{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "BLOCK_EXPORT_DELETED", "data": {"id": "export-mp"}} 167 168=== Compare copy with original === 169Images are identical. 170*** done 171