Replace pipe-based HMP savevm/loadvm, nbd_server_start/add, and
info snapshots with QMP equivalents.

Signed-off-by: Marc-André Lureau <[email protected]>
---
 tests/qemu-iotests/267     | 139 +++++++++-----
 tests/qemu-iotests/267.out | 447 ++++++++++++++++++++++++++++++++++-----------
 2 files changed, 435 insertions(+), 151 deletions(-)

diff --git a/tests/qemu-iotests/267 b/tests/qemu-iotests/267
index e14aeb1f18d0..68c2f2cbebb1 100755
--- a/tests/qemu-iotests/267
+++ b/tests/qemu-iotests/267
@@ -29,6 +29,7 @@ status=1      # failure is the default!
 
 _cleanup()
 {
+    _cleanup_qemu
     _cleanup_test_img
     rm -f "$SOCK_DIR/nbd"
 }
@@ -37,6 +38,7 @@ trap "_cleanup; exit \$status" 0 1 2 3 15
 # get standard environment, filters and checks
 . ./common.rc
 . ./common.filter
+. ./common.qemu
 
 _supported_fmt qcow2
 _supported_proto file
@@ -48,38 +50,53 @@ _require_drivers copy-on-read
 _unsupported_imgopts 'refcount_bits=1[^0-9]' data_file
 
 _require_devices virtio-blk
-_require_hmp
-
-do_run_qemu()
-{
-    echo Testing: "$@"
-    (
-        if ! test -t 0; then
-            while read cmd; do
-                echo $cmd
-            done
-        fi
-        echo quit
-    ) | $QEMU -nographic -monitor stdio -nodefaults "$@"
-    echo
-}
-
-run_qemu()
-{
-    do_run_qemu "$@" 2>&1 | _filter_testdir | _filter_qemu | _filter_hmp |
-        _filter_generated_node_ids | _filter_imgfmt | _filter_vmstate_size
-}
 
 size=128M
 
+# snapshot-save/snapshot-load are job-based QMP commands; wait for
+# "concluded" (auto-dismiss to "null" only fires on the next command).
 run_test()
 {
+    local snapshot_node="$1"
+    shift
+
     if [ -n "$BACKING_FILE" ]; then
         _make_test_img -b "$BACKING_FILE" -F $IMGFMT $size
     else
         _make_test_img $size
     fi
-    printf "savevm snap0\ninfo snapshots\nloadvm snap0\n" | run_qemu "$@" | 
_filter_date
+
+    echo Testing: "$@" | _filter_testdir | _filter_imgfmt
+    _launch_qemu -nodefaults "$@"
+    _send_qemu_cmd $QEMU_HANDLE \
+        "{ 'execute': 'qmp_capabilities' }" \
+        'return'
+
+    # snapshot-save
+    _send_qemu_cmd $QEMU_HANDLE \
+        "{ 'execute': 'snapshot-save',
+           'arguments': { 'job-id': 'save0', 'tag': 'snap0',
+                          'vmstate': '$snapshot_node',
+                          'devices': [\"$snapshot_node\"] } }" \
+        'return'
+    silent=yes _send_qemu_cmd $QEMU_HANDLE '' '"concluded"'
+
+    # snapshot-load
+    _send_qemu_cmd $QEMU_HANDLE \
+        "{ 'execute': 'snapshot-load',
+           'arguments': { 'job-id': 'load0', 'tag': 'snap0',
+                          'vmstate': '$snapshot_node',
+                          'devices': [\"$snapshot_node\"] } }" \
+        'return'
+    silent=yes _send_qemu_cmd $QEMU_HANDLE '' '"concluded"'
+
+    _send_qemu_cmd $QEMU_HANDLE \
+        "{ 'execute': 'quit' }" \
+        'return'
+    wait=1 _cleanup_qemu
+
+    $QEMU_IMG snapshot -l "$TEST_IMG" | _filter_date | _filter_vmstate_size
+    echo
 }
 
 
@@ -87,31 +104,31 @@ echo
 echo "=== No block devices at all ==="
 echo
 
-run_test
+run_test nonexistent
 
 echo
 echo "=== -drive if=none ==="
 echo
 
-run_test -drive driver=file,file="$TEST_IMG",if=none
-run_test -drive driver=$IMGFMT,file="$TEST_IMG",if=none
-run_test -drive driver=$IMGFMT,file="$TEST_IMG",if=none -device 
virtio-blk,drive=none0
+run_test drv0 -drive driver=file,file="$TEST_IMG",if=none,node-name=drv0
+run_test drv0 -drive driver=$IMGFMT,file="$TEST_IMG",if=none,node-name=drv0
+run_test drv0 -drive driver=$IMGFMT,file="$TEST_IMG",if=none,node-name=drv0 
-device virtio-blk,drive=none0
 
 echo
 echo "=== -drive if=virtio ==="
 echo
 
-run_test -drive driver=file,file="$TEST_IMG",if=virtio
-run_test -drive driver=$IMGFMT,file="$TEST_IMG",if=virtio
+run_test drv0 -drive driver=file,file="$TEST_IMG",if=virtio,node-name=drv0
+run_test drv0 -drive driver=$IMGFMT,file="$TEST_IMG",if=virtio,node-name=drv0
 
 echo
 echo "=== Simple -blockdev ==="
 echo
 
-run_test -blockdev driver=file,filename="$TEST_IMG",node-name=file
-run_test -blockdev driver=file,filename="$TEST_IMG",node-name=file \
+run_test file -blockdev driver=file,filename="$TEST_IMG",node-name=file
+run_test fmt -blockdev driver=file,filename="$TEST_IMG",node-name=file \
          -blockdev driver=$IMGFMT,file=file,node-name=fmt
-run_test -blockdev driver=file,filename="$TEST_IMG",node-name=file \
+run_test fmt -blockdev driver=file,filename="$TEST_IMG",node-name=file \
          -blockdev driver=raw,file=file,node-name=raw \
          -blockdev driver=$IMGFMT,file=raw,node-name=fmt
 
@@ -119,7 +136,7 @@ echo
 echo "=== -blockdev with a filter on top ==="
 echo
 
-run_test -blockdev driver=file,filename="$TEST_IMG",node-name=file \
+run_test fmt -blockdev driver=file,filename="$TEST_IMG",node-name=file \
          -blockdev driver=$IMGFMT,file=file,node-name=fmt \
          -blockdev driver=copy-on-read,file=fmt,node-name=filter
 
@@ -130,12 +147,12 @@ echo
 TEST_IMG="$TEST_IMG.base" _make_test_img $size
 
 BACKING_FILE="$TEST_IMG.base" \
-run_test -blockdev 
driver=file,filename="$TEST_IMG.base",node-name=backing-file \
+run_test fmt -blockdev 
driver=file,filename="$TEST_IMG.base",node-name=backing-file \
          -blockdev driver=file,filename="$TEST_IMG",node-name=file \
          -blockdev driver=$IMGFMT,file=file,backing=backing-file,node-name=fmt
 
 BACKING_FILE="$TEST_IMG.base" \
-run_test -blockdev 
driver=file,filename="$TEST_IMG.base",node-name=backing-file \
+run_test fmt -blockdev 
driver=file,filename="$TEST_IMG.base",node-name=backing-file \
          -blockdev driver=$IMGFMT,file=backing-file,node-name=backing-fmt \
          -blockdev driver=file,filename="$TEST_IMG",node-name=file \
          -blockdev driver=$IMGFMT,file=file,backing=backing-fmt,node-name=fmt
@@ -152,18 +169,48 @@ echo "=== -blockdev with NBD server on the backing file 
==="
 echo
 
 _make_test_img -b "$TEST_IMG.base" -F $IMGFMT $size
-cat <<EOF |
-nbd_server_start unix:$SOCK_DIR/nbd
-nbd_server_add -w backing-fmt
-savevm snap0
-info snapshots
-loadvm snap0
-EOF
-run_qemu -blockdev 
driver=file,filename="$TEST_IMG.base",node-name=backing-file \
-         -blockdev driver=$IMGFMT,file=backing-file,node-name=backing-fmt \
-         -blockdev driver=file,filename="$TEST_IMG",node-name=file \
-         -blockdev driver=$IMGFMT,file=file,backing=backing-fmt,node-name=fmt |
-         _filter_date
+
+_launch_qemu -nodefaults \
+    -blockdev driver=file,filename="$TEST_IMG.base",node-name=backing-file \
+    -blockdev driver=$IMGFMT,file=backing-file,node-name=backing-fmt \
+    -blockdev driver=file,filename="$TEST_IMG",node-name=file \
+    -blockdev driver=$IMGFMT,file=file,backing=backing-fmt,node-name=fmt
+
+_send_qemu_cmd $QEMU_HANDLE \
+    "{ 'execute': 'qmp_capabilities' }" \
+    'return'
+
+_send_qemu_cmd $QEMU_HANDLE \
+    "{ 'execute': 'nbd-server-start',
+       'arguments': { 'addr': { 'type': 'unix',
+                                'data': { 'path': '$SOCK_DIR/nbd' } } } }" \
+    'return'
+
+_send_qemu_cmd $QEMU_HANDLE \
+    "{ 'execute': 'nbd-server-add',
+       'arguments': { 'device': 'backing-fmt', 'writable': true } }" \
+    'return'
+
+_send_qemu_cmd $QEMU_HANDLE \
+    "{ 'execute': 'snapshot-save',
+       'arguments': { 'job-id': 'save0', 'tag': 'snap0',
+                      'vmstate': 'fmt',
+                      'devices': [\"fmt\", \"backing-fmt\"] } }" \
+    'return'
+silent=yes _send_qemu_cmd $QEMU_HANDLE '' '"concluded"'
+
+_send_qemu_cmd $QEMU_HANDLE \
+    "{ 'execute': 'snapshot-load',
+       'arguments': { 'job-id': 'load0', 'tag': 'snap0',
+                      'vmstate': 'fmt',
+                      'devices': [\"fmt\", \"backing-fmt\"] } }" \
+    'return'
+silent=yes _send_qemu_cmd $QEMU_HANDLE '' '"concluded"'
+
+_send_qemu_cmd $QEMU_HANDLE \
+    "{ 'execute': 'quit' }" \
+    'return'
+wait=1 _cleanup_qemu
 
 # This time, a snapshot should be created on both files
 echo Internal snapshots on overlay:
diff --git a/tests/qemu-iotests/267.out b/tests/qemu-iotests/267.out
index 37b7ebd28049..30e094f8b98f 100644
--- a/tests/qemu-iotests/267.out
+++ b/tests/qemu-iotests/267.out
@@ -4,125 +4,301 @@ QA output created by 267
 
 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728
 Testing:
-QEMU X.Y.Z monitor - type 'help' for more information
-(qemu) savevm snap0
-Error: no block device can store vmstate for snapshot
-(qemu) info snapshots
-Error: no block device can store vmstate for snapshot
-(qemu) loadvm snap0
-Error: no block device can store vmstate for snapshot
-(qemu) quit
+{ 'execute': 'qmp_capabilities' }
+{"return": {}}
+{ 'execute': 'snapshot-save',
+           'arguments': { 'job-id': 'save0', 'tag': 'snap0',
+                          'vmstate': 'nonexistent',
+                          'devices': ["nonexistent"] } }
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "created", "id": "save0"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "running", "id": "save0"}}
+{"return": {}}
+{ 'execute': 'snapshot-load',
+           'arguments': { 'job-id': 'load0', 'tag': 'snap0',
+                          'vmstate': 'nonexistent',
+                          'devices': ["nonexistent"] } }
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "created", "id": "load0"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "running", "id": "load0"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"STOP"}
+{"return": {}}
+{ 'execute': 'quit' }
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"SHUTDOWN", "data": {"guest": false, "reason": "host-qmp-quit"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "null", "id": "load0"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "null", "id": "save0"}}
+{"return": {}}
 
 
 === -drive if=none ===
 
 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728
-Testing: -drive driver=file,file=TEST_DIR/t.IMGFMT,if=none
-QEMU X.Y.Z monitor - type 'help' for more information
-(qemu) savevm snap0
-Error: Device 'none0' is writable but does not support snapshots
-(qemu) info snapshots
-Error: no block device can store vmstate for snapshot
-(qemu) loadvm snap0
-Error: Device 'none0' is writable but does not support snapshots
-(qemu) quit
+Testing: -drive driver=file,file=TEST_DIR/t.IMGFMT,if=none,node-name=drv0
+{ 'execute': 'qmp_capabilities' }
+{"return": {}}
+{ 'execute': 'snapshot-save',
+           'arguments': { 'job-id': 'save0', 'tag': 'snap0',
+                          'vmstate': 'drv0',
+                          'devices': ["drv0"] } }
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "created", "id": "save0"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "running", "id": "save0"}}
+{"return": {}}
+{ 'execute': 'snapshot-load',
+           'arguments': { 'job-id': 'load0', 'tag': 'snap0',
+                          'vmstate': 'drv0',
+                          'devices': ["drv0"] } }
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "created", "id": "load0"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "running", "id": "load0"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"STOP"}
+{"return": {}}
+{ 'execute': 'quit' }
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"SHUTDOWN", "data": {"guest": false, "reason": "host-qmp-quit"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "null", "id": "load0"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "null", "id": "save0"}}
+{"return": {}}
 
 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728
-Testing: -drive driver=IMGFMT,file=TEST_DIR/t.IMGFMT,if=none
-QEMU X.Y.Z monitor - type 'help' for more information
-(qemu) savevm snap0
-(qemu) info snapshots
-List of snapshots present on all disks:
+Testing: -drive driver=IMGFMT,file=TEST_DIR/t.IMGFMT,if=none,node-name=drv0
+{ 'execute': 'qmp_capabilities' }
+{"return": {}}
+{ 'execute': 'snapshot-save',
+           'arguments': { 'job-id': 'save0', 'tag': 'snap0',
+                          'vmstate': 'drv0',
+                          'devices': ["drv0"] } }
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "created", "id": "save0"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "running", "id": "save0"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"STOP"}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"RESUME"}
+{"return": {}}
+{ 'execute': 'snapshot-load',
+           'arguments': { 'job-id': 'load0', 'tag': 'snap0',
+                          'vmstate': 'drv0',
+                          'devices': ["drv0"] } }
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "created", "id": "load0"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "running", "id": "load0"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"STOP"}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"RESUME"}
+{"return": {}}
+{ 'execute': 'quit' }
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"SHUTDOWN", "data": {"guest": false, "reason": "host-qmp-quit"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "null", "id": "load0"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "null", "id": "save0"}}
+{"return": {}}
+Snapshot list:
 ID      TAG               VM_SIZE                DATE        VM_CLOCK     
ICOUNT
---      snap0                SIZE yyyy-mm-dd hh:mm:ss  0000:00:00.000         
--
-(qemu) loadvm snap0
-(qemu) quit
+1       snap0                SIZE yyyy-mm-dd hh:mm:ss  0000:00:00.000         
--
 
 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728
-Testing: -drive driver=IMGFMT,file=TEST_DIR/t.IMGFMT,if=none -device 
virtio-blk,drive=none0
-QEMU X.Y.Z monitor - type 'help' for more information
-(qemu) savevm snap0
-(qemu) info snapshots
-List of snapshots present on all disks:
+Testing: -drive driver=IMGFMT,file=TEST_DIR/t.IMGFMT,if=none,node-name=drv0 
-device virtio-blk,drive=none0
+{ 'execute': 'qmp_capabilities' }
+{"return": {}}
+{ 'execute': 'snapshot-save',
+           'arguments': { 'job-id': 'save0', 'tag': 'snap0',
+                          'vmstate': 'drv0',
+                          'devices': ["drv0"] } }
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "created", "id": "save0"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "running", "id": "save0"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"STOP"}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"RESUME"}
+{"return": {}}
+{ 'execute': 'snapshot-load',
+           'arguments': { 'job-id': 'load0', 'tag': 'snap0',
+                          'vmstate': 'drv0',
+                          'devices': ["drv0"] } }
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "created", "id": "load0"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "running", "id": "load0"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"STOP"}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"RESUME"}
+{"return": {}}
+{ 'execute': 'quit' }
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"SHUTDOWN", "data": {"guest": false, "reason": "host-qmp-quit"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "null", "id": "load0"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "null", "id": "save0"}}
+{"return": {}}
+Snapshot list:
 ID      TAG               VM_SIZE                DATE        VM_CLOCK     
ICOUNT
---      snap0                SIZE yyyy-mm-dd hh:mm:ss  0000:00:00.000         
--
-(qemu) loadvm snap0
-(qemu) quit
+1       snap0                SIZE yyyy-mm-dd hh:mm:ss  0000:00:00.000         
--
 
 
 === -drive if=virtio ===
 
 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728
-Testing: -drive driver=file,file=TEST_DIR/t.IMGFMT,if=virtio
-QEMU X.Y.Z monitor - type 'help' for more information
-(qemu) savevm snap0
-Error: Device 'virtio0' is writable but does not support snapshots
-(qemu) info snapshots
-Error: no block device can store vmstate for snapshot
-(qemu) loadvm snap0
-Error: Device 'virtio0' is writable but does not support snapshots
-(qemu) quit
+Testing: -drive driver=file,file=TEST_DIR/t.IMGFMT,if=virtio,node-name=drv0
+{ 'execute': 'qmp_capabilities' }
+{"return": {}}
+{ 'execute': 'snapshot-save',
+           'arguments': { 'job-id': 'save0', 'tag': 'snap0',
+                          'vmstate': 'drv0',
+                          'devices': ["drv0"] } }
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "created", "id": "save0"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "running", "id": "save0"}}
+{"return": {}}
+{ 'execute': 'snapshot-load',
+           'arguments': { 'job-id': 'load0', 'tag': 'snap0',
+                          'vmstate': 'drv0',
+                          'devices': ["drv0"] } }
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "created", "id": "load0"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "running", "id": "load0"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"STOP"}
+{"return": {}}
+{ 'execute': 'quit' }
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"SHUTDOWN", "data": {"guest": false, "reason": "host-qmp-quit"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "null", "id": "load0"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "null", "id": "save0"}}
+{"return": {}}
 
 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728
-Testing: -drive driver=IMGFMT,file=TEST_DIR/t.IMGFMT,if=virtio
-QEMU X.Y.Z monitor - type 'help' for more information
-(qemu) savevm snap0
-(qemu) info snapshots
-List of snapshots present on all disks:
+Testing: -drive driver=IMGFMT,file=TEST_DIR/t.IMGFMT,if=virtio,node-name=drv0
+{ 'execute': 'qmp_capabilities' }
+{"return": {}}
+{ 'execute': 'snapshot-save',
+           'arguments': { 'job-id': 'save0', 'tag': 'snap0',
+                          'vmstate': 'drv0',
+                          'devices': ["drv0"] } }
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "created", "id": "save0"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "running", "id": "save0"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"STOP"}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"RESUME"}
+{"return": {}}
+{ 'execute': 'snapshot-load',
+           'arguments': { 'job-id': 'load0', 'tag': 'snap0',
+                          'vmstate': 'drv0',
+                          'devices': ["drv0"] } }
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "created", "id": "load0"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "running", "id": "load0"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"STOP"}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"RESUME"}
+{"return": {}}
+{ 'execute': 'quit' }
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"SHUTDOWN", "data": {"guest": false, "reason": "host-qmp-quit"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "null", "id": "load0"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "null", "id": "save0"}}
+{"return": {}}
+Snapshot list:
 ID      TAG               VM_SIZE                DATE        VM_CLOCK     
ICOUNT
---      snap0                SIZE yyyy-mm-dd hh:mm:ss  0000:00:00.000         
--
-(qemu) loadvm snap0
-(qemu) quit
+1       snap0                SIZE yyyy-mm-dd hh:mm:ss  0000:00:00.000         
--
 
 
 === Simple -blockdev ===
 
 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728
 Testing: -blockdev driver=file,filename=TEST_DIR/t.IMGFMT,node-name=file
-QEMU X.Y.Z monitor - type 'help' for more information
-(qemu) savevm snap0
-Error: Device 'file' is writable but does not support snapshots
-(qemu) info snapshots
-Error: no block device can store vmstate for snapshot
-(qemu) loadvm snap0
-Error: Device 'file' is writable but does not support snapshots
-(qemu) quit
+{ 'execute': 'qmp_capabilities' }
+{"return": {}}
+{ 'execute': 'snapshot-save',
+           'arguments': { 'job-id': 'save0', 'tag': 'snap0',
+                          'vmstate': 'file',
+                          'devices': ["file"] } }
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "created", "id": "save0"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "running", "id": "save0"}}
+{"return": {}}
+{ 'execute': 'snapshot-load',
+           'arguments': { 'job-id': 'load0', 'tag': 'snap0',
+                          'vmstate': 'file',
+                          'devices': ["file"] } }
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "created", "id": "load0"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "running", "id": "load0"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"STOP"}
+{"return": {}}
+{ 'execute': 'quit' }
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"SHUTDOWN", "data": {"guest": false, "reason": "host-qmp-quit"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "null", "id": "load0"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "null", "id": "save0"}}
+{"return": {}}
 
 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728
 Testing: -blockdev driver=file,filename=TEST_DIR/t.IMGFMT,node-name=file 
-blockdev driver=IMGFMT,file=file,node-name=fmt
-QEMU X.Y.Z monitor - type 'help' for more information
-(qemu) savevm snap0
-(qemu) info snapshots
-List of snapshots present on all disks:
+{ 'execute': 'qmp_capabilities' }
+{"return": {}}
+{ 'execute': 'snapshot-save',
+           'arguments': { 'job-id': 'save0', 'tag': 'snap0',
+                          'vmstate': 'fmt',
+                          'devices': ["fmt"] } }
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "created", "id": "save0"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "running", "id": "save0"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"STOP"}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"RESUME"}
+{"return": {}}
+{ 'execute': 'snapshot-load',
+           'arguments': { 'job-id': 'load0', 'tag': 'snap0',
+                          'vmstate': 'fmt',
+                          'devices': ["fmt"] } }
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "created", "id": "load0"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "running", "id": "load0"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"STOP"}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"RESUME"}
+{"return": {}}
+{ 'execute': 'quit' }
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"SHUTDOWN", "data": {"guest": false, "reason": "host-qmp-quit"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "null", "id": "load0"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "null", "id": "save0"}}
+{"return": {}}
+Snapshot list:
 ID      TAG               VM_SIZE                DATE        VM_CLOCK     
ICOUNT
---      snap0                SIZE yyyy-mm-dd hh:mm:ss  0000:00:00.000         
--
-(qemu) loadvm snap0
-(qemu) quit
+1       snap0                SIZE yyyy-mm-dd hh:mm:ss  0000:00:00.000         
--
 
 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728
 Testing: -blockdev driver=file,filename=TEST_DIR/t.IMGFMT,node-name=file 
-blockdev driver=raw,file=file,node-name=raw -blockdev 
driver=IMGFMT,file=raw,node-name=fmt
-QEMU X.Y.Z monitor - type 'help' for more information
-(qemu) savevm snap0
-(qemu) info snapshots
-List of snapshots present on all disks:
+{ 'execute': 'qmp_capabilities' }
+{"return": {}}
+{ 'execute': 'snapshot-save',
+           'arguments': { 'job-id': 'save0', 'tag': 'snap0',
+                          'vmstate': 'fmt',
+                          'devices': ["fmt"] } }
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "created", "id": "save0"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "running", "id": "save0"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"STOP"}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"RESUME"}
+{"return": {}}
+{ 'execute': 'snapshot-load',
+           'arguments': { 'job-id': 'load0', 'tag': 'snap0',
+                          'vmstate': 'fmt',
+                          'devices': ["fmt"] } }
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "created", "id": "load0"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "running", "id": "load0"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"STOP"}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"RESUME"}
+{"return": {}}
+{ 'execute': 'quit' }
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"SHUTDOWN", "data": {"guest": false, "reason": "host-qmp-quit"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "null", "id": "load0"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "null", "id": "save0"}}
+{"return": {}}
+Snapshot list:
 ID      TAG               VM_SIZE                DATE        VM_CLOCK     
ICOUNT
---      snap0                SIZE yyyy-mm-dd hh:mm:ss  0000:00:00.000         
--
-(qemu) loadvm snap0
-(qemu) quit
+1       snap0                SIZE yyyy-mm-dd hh:mm:ss  0000:00:00.000         
--
 
 
 === -blockdev with a filter on top ===
 
 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728
 Testing: -blockdev driver=file,filename=TEST_DIR/t.IMGFMT,node-name=file 
-blockdev driver=IMGFMT,file=file,node-name=fmt -blockdev 
driver=copy-on-read,file=fmt,node-name=filter
-QEMU X.Y.Z monitor - type 'help' for more information
-(qemu) savevm snap0
-(qemu) info snapshots
-List of snapshots present on all disks:
+{ 'execute': 'qmp_capabilities' }
+{"return": {}}
+{ 'execute': 'snapshot-save',
+           'arguments': { 'job-id': 'save0', 'tag': 'snap0',
+                          'vmstate': 'fmt',
+                          'devices': ["fmt"] } }
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "created", "id": "save0"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "running", "id": "save0"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"STOP"}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"RESUME"}
+{"return": {}}
+{ 'execute': 'snapshot-load',
+           'arguments': { 'job-id': 'load0', 'tag': 'snap0',
+                          'vmstate': 'fmt',
+                          'devices': ["fmt"] } }
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "created", "id": "load0"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "running", "id": "load0"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"STOP"}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"RESUME"}
+{"return": {}}
+{ 'execute': 'quit' }
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"SHUTDOWN", "data": {"guest": false, "reason": "host-qmp-quit"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "null", "id": "load0"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "null", "id": "save0"}}
+{"return": {}}
+Snapshot list:
 ID      TAG               VM_SIZE                DATE        VM_CLOCK     
ICOUNT
---      snap0                SIZE yyyy-mm-dd hh:mm:ss  0000:00:00.000         
--
-(qemu) loadvm snap0
-(qemu) quit
+1       snap0                SIZE yyyy-mm-dd hh:mm:ss  0000:00:00.000         
--
 
 
 === -blockdev with a backing file ===
@@ -130,25 +306,65 @@ ID      TAG               VM_SIZE                DATE     
   VM_CLOCK     ICOUNT
 Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=134217728
 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 
backing_file=TEST_DIR/t.IMGFMT.base backing_fmt=IMGFMT
 Testing: -blockdev 
driver=file,filename=TEST_DIR/t.IMGFMT.base,node-name=backing-file -blockdev 
driver=file,filename=TEST_DIR/t.IMGFMT,node-name=file -blockdev 
driver=IMGFMT,file=file,backing=backing-file,node-name=fmt
-QEMU X.Y.Z monitor - type 'help' for more information
-(qemu) savevm snap0
-(qemu) info snapshots
-List of snapshots present on all disks:
+{ 'execute': 'qmp_capabilities' }
+{"return": {}}
+{ 'execute': 'snapshot-save',
+           'arguments': { 'job-id': 'save0', 'tag': 'snap0',
+                          'vmstate': 'fmt',
+                          'devices': ["fmt"] } }
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "created", "id": "save0"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "running", "id": "save0"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"STOP"}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"RESUME"}
+{"return": {}}
+{ 'execute': 'snapshot-load',
+           'arguments': { 'job-id': 'load0', 'tag': 'snap0',
+                          'vmstate': 'fmt',
+                          'devices': ["fmt"] } }
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "created", "id": "load0"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "running", "id": "load0"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"STOP"}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"RESUME"}
+{"return": {}}
+{ 'execute': 'quit' }
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"SHUTDOWN", "data": {"guest": false, "reason": "host-qmp-quit"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "null", "id": "load0"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "null", "id": "save0"}}
+{"return": {}}
+Snapshot list:
 ID      TAG               VM_SIZE                DATE        VM_CLOCK     
ICOUNT
---      snap0                SIZE yyyy-mm-dd hh:mm:ss  0000:00:00.000         
--
-(qemu) loadvm snap0
-(qemu) quit
+1       snap0                SIZE yyyy-mm-dd hh:mm:ss  0000:00:00.000         
--
 
 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 
backing_file=TEST_DIR/t.IMGFMT.base backing_fmt=IMGFMT
 Testing: -blockdev 
driver=file,filename=TEST_DIR/t.IMGFMT.base,node-name=backing-file -blockdev 
driver=IMGFMT,file=backing-file,node-name=backing-fmt -blockdev 
driver=file,filename=TEST_DIR/t.IMGFMT,node-name=file -blockdev 
driver=IMGFMT,file=file,backing=backing-fmt,node-name=fmt
-QEMU X.Y.Z monitor - type 'help' for more information
-(qemu) savevm snap0
-(qemu) info snapshots
-List of snapshots present on all disks:
+{ 'execute': 'qmp_capabilities' }
+{"return": {}}
+{ 'execute': 'snapshot-save',
+           'arguments': { 'job-id': 'save0', 'tag': 'snap0',
+                          'vmstate': 'fmt',
+                          'devices': ["fmt"] } }
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "created", "id": "save0"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "running", "id": "save0"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"STOP"}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"RESUME"}
+{"return": {}}
+{ 'execute': 'snapshot-load',
+           'arguments': { 'job-id': 'load0', 'tag': 'snap0',
+                          'vmstate': 'fmt',
+                          'devices': ["fmt"] } }
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "created", "id": "load0"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "running", "id": "load0"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"STOP"}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"RESUME"}
+{"return": {}}
+{ 'execute': 'quit' }
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"SHUTDOWN", "data": {"guest": false, "reason": "host-qmp-quit"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "null", "id": "load0"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "null", "id": "save0"}}
+{"return": {}}
+Snapshot list:
 ID      TAG               VM_SIZE                DATE        VM_CLOCK     
ICOUNT
---      snap0                SIZE yyyy-mm-dd hh:mm:ss  0000:00:00.000         
--
-(qemu) loadvm snap0
-(qemu) quit
+1       snap0                SIZE yyyy-mm-dd hh:mm:ss  0000:00:00.000         
--
 
 Internal snapshots on overlay:
 Snapshot list:
@@ -159,18 +375,39 @@ Internal snapshots on backing file:
 === -blockdev with NBD server on the backing file ===
 
 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 
backing_file=TEST_DIR/t.IMGFMT.base backing_fmt=IMGFMT
-Testing: -blockdev 
driver=file,filename=TEST_DIR/t.IMGFMT.base,node-name=backing-file -blockdev 
driver=IMGFMT,file=backing-file,node-name=backing-fmt -blockdev 
driver=file,filename=TEST_DIR/t.IMGFMT,node-name=file -blockdev 
driver=IMGFMT,file=file,backing=backing-fmt,node-name=fmt
-QEMU X.Y.Z monitor - type 'help' for more information
-(qemu) nbd_server_start unix:SOCK_DIR/nbd
-(qemu) nbd_server_add -w backing-fmt
-(qemu) savevm snap0
-(qemu) info snapshots
-List of snapshots present on all disks:
-ID      TAG               VM_SIZE                DATE        VM_CLOCK     
ICOUNT
---      snap0                SIZE yyyy-mm-dd hh:mm:ss  0000:00:00.000         
--
-(qemu) loadvm snap0
-(qemu) quit
-
+{ 'execute': 'qmp_capabilities' }
+{"return": {}}
+{ 'execute': 'nbd-server-start',
+       'arguments': { 'addr': { 'type': 'unix',
+                                'data': { 'path': 'SOCK_DIR/nbd' } } } }
+{"return": {}}
+{ 'execute': 'nbd-server-add',
+       'arguments': { 'device': 'backing-fmt', 'writable': true } }
+{"return": {}}
+{ 'execute': 'snapshot-save',
+       'arguments': { 'job-id': 'save0', 'tag': 'snap0',
+                      'vmstate': 'fmt',
+                      'devices': ["fmt", "backing-fmt"] } }
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "created", "id": "save0"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "running", "id": "save0"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"STOP"}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"RESUME"}
+{"return": {}}
+{ 'execute': 'snapshot-load',
+       'arguments': { 'job-id': 'load0', 'tag': 'snap0',
+                      'vmstate': 'fmt',
+                      'devices': ["fmt", "backing-fmt"] } }
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "created", "id": "load0"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "running", "id": "load0"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"STOP"}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"RESUME"}
+{"return": {}}
+{ 'execute': 'quit' }
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"SHUTDOWN", "data": {"guest": false, "reason": "host-qmp-quit"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"BLOCK_EXPORT_DELETED", "data": {"id": "backing-fmt"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "null", "id": "load0"}}
+{"timestamp": {"seconds":  TIMESTAMP, "microseconds":  TIMESTAMP}, "event": 
"JOB_STATUS_CHANGE", "data": {"status": "null", "id": "save0"}}
+{"return": {}}
 Internal snapshots on overlay:
 Snapshot list:
 ID      TAG               VM_SIZE                DATE        VM_CLOCK     
ICOUNT

-- 
2.56.0.rc0.29.g47ce80527c56


Reply via email to