1e6c79647SMax ReitzQA output created by 308 2e6c79647SMax Reitz=== Set up === 3e6c79647SMax ReitzFormatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 4e6c79647SMax Reitzwrote 67108864/67108864 bytes at offset 0 5e6c79647SMax Reitz64 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 6e6c79647SMax Reitz{'execute': 'qmp_capabilities'} 7e6c79647SMax Reitz{"return": {}} 80e720781SMax Reitz{'execute': 'blockdev-add', 90e720781SMax Reitz 'arguments': { 100e720781SMax Reitz 'driver': 'file', 110e720781SMax Reitz 'node-name': 'node-protocol', 120e720781SMax Reitz 'filename': 'TEST_DIR/t.IMGFMT' 130e720781SMax Reitz } } 14e6c79647SMax Reitz{"return": {}} 150e720781SMax Reitz{'execute': 'blockdev-add', 160e720781SMax Reitz 'arguments': { 170e720781SMax Reitz 'driver': 'IMGFMT', 180e720781SMax Reitz 'node-name': 'node-format', 190e720781SMax Reitz 'file': 'node-protocol' 200e720781SMax Reitz } } 21e6c79647SMax Reitz{"return": {}} 22e6c79647SMax Reitz 23e6c79647SMax Reitz=== Mountpoint not present === 240e720781SMax Reitz{'execute': 'block-export-add', 250e720781SMax Reitz 'arguments': { 260e720781SMax Reitz 'type': 'fuse', 270e720781SMax Reitz 'id': 'export-err', 280e720781SMax Reitz 'node-name': 'node-format', 290e720781SMax Reitz 'mountpoint': 'TEST_DIR/t.IMGFMT.fuse' 300e720781SMax Reitz } } 31e6c79647SMax Reitz{"error": {"class": "GenericError", "desc": "Failed to stat 'TEST_DIR/t.IMGFMT.fuse': No such file or directory"}} 32e6c79647SMax Reitz 33e6c79647SMax Reitz=== Mountpoint is a directory === 340e720781SMax Reitz{'execute': 'block-export-add', 350e720781SMax Reitz 'arguments': { 360e720781SMax Reitz 'type': 'fuse', 370e720781SMax Reitz 'id': 'export-err', 380e720781SMax Reitz 'node-name': 'node-format', 390e720781SMax Reitz 'mountpoint': 'TEST_DIR/t.IMGFMT.fuse' 400e720781SMax Reitz } } 41e6c79647SMax Reitz{"error": {"class": "GenericError", "desc": "'TEST_DIR/t.IMGFMT.fuse' is not a regular file"}} 42e6c79647SMax Reitz 43e6c79647SMax Reitz=== Mountpoint is a regular file === 440e720781SMax Reitz{'execute': 'block-export-add', 450e720781SMax Reitz 'arguments': { 460e720781SMax Reitz 'type': 'fuse', 470e720781SMax Reitz 'id': 'export-mp', 480e720781SMax Reitz 'node-name': 'node-format', 490e720781SMax Reitz 'mountpoint': 'TEST_DIR/t.IMGFMT.fuse' 500e720781SMax Reitz } } 51e6c79647SMax Reitz{"return": {}} 52e6c79647SMax ReitzImages are identical. 53f29add26SMax ReitzPermissions pre-chmod: 400 54f29add26SMax Reitzchmod: changing permissions of 'TEST_DIR/t.IMGFMT.fuse': Read-only file system 55f29add26SMax ReitzPermissions post-+w: 400 56f29add26SMax ReitzPermissions post-+x: 500 57e6c79647SMax Reitz 58e6c79647SMax Reitz=== Mount over existing file === 590e720781SMax Reitz{'execute': 'block-export-add', 600e720781SMax Reitz 'arguments': { 610e720781SMax Reitz 'type': 'fuse', 620e720781SMax Reitz 'id': 'export-img', 630e720781SMax Reitz 'node-name': 'node-format', 640e720781SMax Reitz 'mountpoint': 'TEST_DIR/t.IMGFMT' 650e720781SMax Reitz } } 66e6c79647SMax Reitz{"return": {}} 67e6c79647SMax ReitzImages are identical. 68e6c79647SMax Reitz 69e6c79647SMax Reitz=== Double export === 700e720781SMax Reitz{'execute': 'block-export-add', 710e720781SMax Reitz 'arguments': { 720e720781SMax Reitz 'type': 'fuse', 730e720781SMax Reitz 'id': 'export-err', 740e720781SMax Reitz 'node-name': 'node-format', 750e720781SMax Reitz 'mountpoint': 'TEST_DIR/t.IMGFMT.fuse' 760e720781SMax Reitz } } 77e6c79647SMax Reitz{"error": {"class": "GenericError", "desc": "There already is a FUSE export on 'TEST_DIR/t.IMGFMT.fuse'"}} 78e6c79647SMax Reitz 79e6c79647SMax Reitz=== Remove export === 80e6c79647SMax Reitzvirtual size: 64 MiB (67108864 bytes) 810e720781SMax Reitz{'execute': 'block-export-del', 820e720781SMax Reitz 'arguments': { 830e720781SMax Reitz 'id': 'export-mp' 840e720781SMax Reitz } } 85e6c79647SMax Reitz{"return": {}} 86e6c79647SMax Reitz{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "BLOCK_EXPORT_DELETED", "data": {"id": "export-mp"}} 87e6c79647SMax Reitzvirtual size: 0 B (0 bytes) 88e6c79647SMax Reitz 89e6c79647SMax Reitz=== Writable export === 900e720781SMax Reitz{'execute': 'block-export-add', 910e720781SMax Reitz 'arguments': { 920e720781SMax Reitz 'type': 'fuse', 930e720781SMax Reitz 'id': 'export-mp', 940e720781SMax Reitz 'node-name': 'node-format', 950e720781SMax Reitz 'mountpoint': 'TEST_DIR/t.IMGFMT.fuse', 'writable': true 960e720781SMax Reitz } } 97e6c79647SMax Reitz{"return": {}} 98e2eec281SHanna ReitzWriting to read-only export failed: OK 99e6c79647SMax Reitzwrote 65536/65536 bytes at offset 1048576 100e6c79647SMax Reitz64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 101e6c79647SMax Reitzwrote 65536/65536 bytes at offset 1048576 102e6c79647SMax Reitz64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 103e6c79647SMax Reitz 104e6c79647SMax Reitz=== Resizing exports === 1050e720781SMax Reitz{'execute': 'block-export-del', 1060e720781SMax Reitz 'arguments': { 1070e720781SMax Reitz 'id': 'export-mp' 1080e720781SMax Reitz } } 109e6c79647SMax Reitz{"return": {}} 110e6c79647SMax Reitz{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "BLOCK_EXPORT_DELETED", "data": {"id": "export-mp"}} 1110e720781SMax Reitz{'execute': 'block-export-del', 1120e720781SMax Reitz 'arguments': { 1130e720781SMax Reitz 'id': 'export-img' 1140e720781SMax Reitz } } 115e6c79647SMax Reitz{"return": {}} 116e6c79647SMax Reitz{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "BLOCK_EXPORT_DELETED", "data": {"id": "export-img"}} 1170e720781SMax Reitz{'execute': 'blockdev-del', 1180e720781SMax Reitz 'arguments': { 1190e720781SMax Reitz 'node-name': 'node-format' 1200e720781SMax Reitz } } 121e6c79647SMax Reitz{"return": {}} 1220e720781SMax Reitz{'execute': 'block-export-add', 1230e720781SMax Reitz 'arguments': { 1240e720781SMax Reitz 'type': 'fuse', 1250e720781SMax Reitz 'id': 'export-mp', 1260e720781SMax Reitz 'node-name': 'node-protocol', 1270e720781SMax Reitz 'mountpoint': 'TEST_DIR/t.IMGFMT.fuse', 'writable': true 1280e720781SMax Reitz } } 129e6c79647SMax Reitz{"return": {}} 130e6c79647SMax Reitz 131e6c79647SMax Reitz--- Try growing non-growable export --- 132e6c79647SMax Reitz(OK: Lengths of export and original are the same) 133e6c79647SMax Reitzdd: error writing 'TEST_DIR/t.IMGFMT.fuse': Input/output error 134e6c79647SMax Reitz1+0 records in 135e6c79647SMax Reitz0+0 records out 136e6c79647SMax Reitz 137e6c79647SMax Reitz--- Resize export --- 138e6c79647SMax Reitz(OK: Lengths of export and original are the same) 139e6c79647SMax ReitzOK: Post-truncate image size is as expected 140e6c79647SMax ReitzOK: Disk usage grew with fallocate 141e6c79647SMax Reitz 142e6c79647SMax Reitz--- Try growing growable export --- 1430e720781SMax Reitz{'execute': 'block-export-del', 1440e720781SMax Reitz 'arguments': { 1450e720781SMax Reitz 'id': 'export-mp' 1460e720781SMax Reitz } } 147e6c79647SMax Reitz{"return": {}} 148e6c79647SMax Reitz{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "BLOCK_EXPORT_DELETED", "data": {"id": "export-mp"}} 1490e720781SMax Reitz{'execute': 'block-export-add', 1500e720781SMax Reitz 'arguments': { 1510e720781SMax Reitz 'type': 'fuse', 1520e720781SMax Reitz 'id': 'export-mp', 1530e720781SMax Reitz 'node-name': 'node-protocol', 1540e720781SMax Reitz 'mountpoint': 'TEST_DIR/t.IMGFMT.fuse', 'writable': true, 'growable': true 1550e720781SMax Reitz } } 156e6c79647SMax Reitz{"return": {}} 157e6c79647SMax Reitz65536+0 records in 158e6c79647SMax Reitz65536+0 records out 159e6c79647SMax Reitz(OK: Lengths of export and original are the same) 160e6c79647SMax ReitzOK: Post-grow image size is as expected 161e6c79647SMax Reitz 162e6c79647SMax Reitz--- Shrink export --- 163e6c79647SMax Reitz(OK: Lengths of export and original are the same) 164e6c79647SMax ReitzOK: Post-truncate image size is as expected 165e6c79647SMax Reitz 166e6c79647SMax Reitz=== Tear down === 167e6c79647SMax Reitz{'execute': 'quit'} 168e6c79647SMax Reitz{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false, "reason": "host-qmp-quit"}} 169e6c79647SMax Reitz{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "BLOCK_EXPORT_DELETED", "data": {"id": "export-mp"}} 170*effd60c8SStefan Hajnoczi{"return": {}} 171e6c79647SMax Reitz 172e6c79647SMax Reitz=== Compare copy with original === 173e6c79647SMax ReitzImages are identical. 17427e0d8b5SHanna Czenczek 17527e0d8b5SHanna Czenczek=== Writing zeroes while unmapping === 17627e0d8b5SHanna CzenczekFormatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 17727e0d8b5SHanna Czenczekwrote 67108864/67108864 bytes at offset 0 17827e0d8b5SHanna Czenczek64 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 17927e0d8b5SHanna Czenczek{'execute': 'qmp_capabilities'} 18027e0d8b5SHanna Czenczek{"return": {}} 18127e0d8b5SHanna Czenczek{'execute': 'blockdev-add', 18227e0d8b5SHanna Czenczek 'arguments': { 18327e0d8b5SHanna Czenczek 'driver': 'IMGFMT', 18427e0d8b5SHanna Czenczek 'node-name': 'node-format', 18527e0d8b5SHanna Czenczek 'file': { 18627e0d8b5SHanna Czenczek 'driver': 'file', 18727e0d8b5SHanna Czenczek 'filename': 'TEST_DIR/t.IMGFMT' 18827e0d8b5SHanna Czenczek } 18927e0d8b5SHanna Czenczek } } 19027e0d8b5SHanna Czenczek{"return": {}} 19127e0d8b5SHanna Czenczek{'execute': 'block-export-add', 19227e0d8b5SHanna Czenczek 'arguments': { 19327e0d8b5SHanna Czenczek 'type': 'fuse', 19427e0d8b5SHanna Czenczek 'id': 'export', 19527e0d8b5SHanna Czenczek 'node-name': 'node-format', 19627e0d8b5SHanna Czenczek 'mountpoint': 'TEST_DIR/t.IMGFMT.fuse', 'writable': true 19727e0d8b5SHanna Czenczek } } 19827e0d8b5SHanna Czenczek{"return": {}} 19927e0d8b5SHanna Czenczekwrote 67108864/67108864 bytes at offset 0 20027e0d8b5SHanna Czenczek64 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 20127e0d8b5SHanna Czenczekread 67108864/67108864 bytes at offset 0 20227e0d8b5SHanna Czenczek64 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 20327e0d8b5SHanna Czenczek{'execute': 'quit'} 20427e0d8b5SHanna Czenczek{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false, "reason": "host-qmp-quit"}} 20527e0d8b5SHanna Czenczek{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "BLOCK_EXPORT_DELETED", "data": {"id": "export"}} 206*effd60c8SStefan Hajnoczi{"return": {}} 20727e0d8b5SHanna Czenczekread 67108864/67108864 bytes at offset 0 20827e0d8b5SHanna Czenczek64 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 209e6c79647SMax Reitz*** done 210