9ee2dd4c22
The common.qemu bash functions allow tests to interact with the QMP monitor of a QEMU process. I spent two days trying to update 141 when the order of the test output changed, but found it would still fail occassionally because printf() and QMP events race with synchronous QMP communication. I gave up and ported 141 to the existing Python API for QMP tests. The Python API is less affected by the order in which QEMU prints output because it does not print all QMP traffic by default. The next commit changes the order in which QMP messages are received. Make 141 reliable first. Cc: Hanna Czenczek <hreitz@redhat.com> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> Message-ID: <20240118144823.1497953-3-stefanha@redhat.com> Reviewed-by: Kevin Wolf <kwolf@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
70 lines
4.5 KiB
Plaintext
70 lines
4.5 KiB
Plaintext
Creating bottom <- middle <- top backing file chain...
|
|
Starting VM...
|
|
=== Testing drive-backup ===
|
|
{"execute": "blockdev-add", "arguments": {"driver": "IMGFMT", "file": {"driver": "file", "filename": "TEST_DIR/PID-top"}, "node-name": "drv0"}}
|
|
{"return": {}}
|
|
{"execute": "drive-backup", "arguments": {"device": "drv0", "format": "IMGFMT", "job-id": "job0", "sync": "none", "target": "TEST_DIR/PID-target"}}
|
|
{"return": {}}
|
|
{"execute": "blockdev-del", "arguments": {"node-name": "drv0"}}
|
|
{"error": {"class": "GenericError", "desc": "Node 'drv0' is busy: node is used as backing hd of 'NODE_NAME'"}}
|
|
{"execute": "block-job-cancel", "arguments": {"device": "job0"}}
|
|
{"return": {}}
|
|
{"data": {"device": "job0", "len": 1048576, "offset": 0, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_CANCELLED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
|
|
{"execute": "blockdev-del", "arguments": {"node-name": "drv0"}}
|
|
{"return": {}}
|
|
|
|
=== Testing drive-mirror ===
|
|
{"execute": "blockdev-add", "arguments": {"driver": "IMGFMT", "file": {"driver": "file", "filename": "TEST_DIR/PID-top"}, "node-name": "drv0"}}
|
|
{"return": {}}
|
|
{"execute": "drive-mirror", "arguments": {"device": "drv0", "format": "IMGFMT", "job-id": "job0", "sync": "none", "target": "TEST_DIR/PID-target"}}
|
|
{"return": {}}
|
|
{"data": {"device": "job0", "len": 0, "offset": 0, "speed": 0, "type": "mirror"}, "event": "BLOCK_JOB_READY", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
|
|
{"execute": "blockdev-del", "arguments": {"node-name": "drv0"}}
|
|
{"error": {"class": "GenericError", "desc": "Node 'drv0' is busy: block device is in use by block job: mirror"}}
|
|
{"execute": "block-job-cancel", "arguments": {"device": "job0"}}
|
|
{"return": {}}
|
|
{"data": {"device": "job0", "len": 0, "offset": 0, "speed": 0, "type": "mirror"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
|
|
{"execute": "blockdev-del", "arguments": {"node-name": "drv0"}}
|
|
{"return": {}}
|
|
|
|
=== Testing active block-commit ===
|
|
{"execute": "blockdev-add", "arguments": {"driver": "IMGFMT", "file": {"driver": "file", "filename": "TEST_DIR/PID-top"}, "node-name": "drv0"}}
|
|
{"return": {}}
|
|
{"execute": "block-commit", "arguments": {"device": "drv0", "job-id": "job0"}}
|
|
{"return": {}}
|
|
{"data": {"device": "job0", "len": 0, "offset": 0, "speed": 0, "type": "commit"}, "event": "BLOCK_JOB_READY", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
|
|
{"execute": "blockdev-del", "arguments": {"node-name": "drv0"}}
|
|
{"error": {"class": "GenericError", "desc": "Node 'drv0' is busy: block device is in use by block job: commit"}}
|
|
{"execute": "block-job-cancel", "arguments": {"device": "job0"}}
|
|
{"return": {}}
|
|
{"data": {"device": "job0", "len": 0, "offset": 0, "speed": 0, "type": "commit"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
|
|
{"execute": "blockdev-del", "arguments": {"node-name": "drv0"}}
|
|
{"return": {}}
|
|
|
|
=== Testing non-active block-commit ===
|
|
{"execute": "blockdev-add", "arguments": {"driver": "IMGFMT", "file": {"driver": "file", "filename": "TEST_DIR/PID-top"}, "node-name": "drv0"}}
|
|
{"return": {}}
|
|
{"execute": "block-commit", "arguments": {"device": "drv0", "job-id": "job0", "speed": 1, "top": "TEST_DIR/PID-middle"}}
|
|
{"return": {}}
|
|
{"execute": "blockdev-del", "arguments": {"node-name": "drv0"}}
|
|
{"error": {"class": "GenericError", "desc": "Node 'drv0' is busy: block device is in use by block job: commit"}}
|
|
{"execute": "block-job-cancel", "arguments": {"device": "job0"}}
|
|
{"return": {}}
|
|
{"data": {"device": "job0", "len": 1048576, "offset": 524288, "speed": 1, "type": "commit"}, "event": "BLOCK_JOB_CANCELLED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
|
|
{"execute": "blockdev-del", "arguments": {"node-name": "drv0"}}
|
|
{"return": {}}
|
|
|
|
=== Testing block-stream ===
|
|
{"execute": "blockdev-add", "arguments": {"driver": "IMGFMT", "file": {"driver": "file", "filename": "TEST_DIR/PID-top"}, "node-name": "drv0"}}
|
|
{"return": {}}
|
|
{"execute": "block-stream", "arguments": {"device": "drv0", "job-id": "job0", "speed": 1}}
|
|
{"return": {}}
|
|
{"execute": "blockdev-del", "arguments": {"node-name": "drv0"}}
|
|
{"error": {"class": "GenericError", "desc": "Node 'drv0' is busy: block device is in use by block job: stream"}}
|
|
{"execute": "block-job-cancel", "arguments": {"device": "job0"}}
|
|
{"return": {}}
|
|
{"data": {"device": "job0", "len": 1048576, "offset": 524288, "speed": 1, "type": "stream"}, "event": "BLOCK_JOB_CANCELLED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
|
|
{"execute": "blockdev-del", "arguments": {"node-name": "drv0"}}
|
|
{"return": {}}
|
|
|