Blame SOURCES/kvm-iotests-Unify-log-outputs-between-Python-2-and-3.patch

7711c0
From 8d1e45a4b4c46bae4c2b453ef575407bfd8b3539 Mon Sep 17 00:00:00 2001
7711c0
From: John Snow <jsnow@redhat.com>
7711c0
Date: Wed, 20 Mar 2019 16:16:15 +0100
7711c0
Subject: [PATCH 017/163] iotests: Unify log outputs between Python 2 and 3
7711c0
7711c0
RH-Author: John Snow <jsnow@redhat.com>
7711c0
Message-id: <20190320161631.14841-4-jsnow@redhat.com>
7711c0
Patchwork-id: 84940
7711c0
O-Subject: [RHEL-7.7 qemu-kvm-rhev PATCH 03/19] iotests: Unify log outputs between Python 2 and 3
7711c0
Bugzilla: 1668956
7711c0
RH-Acked-by: Eduardo Habkost <ehabkost@redhat.com>
7711c0
RH-Acked-by: Max Reitz <mreitz@redhat.com>
7711c0
RH-Acked-by: Stefan Hajnoczi <stefanha@redhat.com>
7711c0
RH-Acked-by: Miroslav Rezanina <mrezanin@redhat.com>
7711c0
7711c0
From: Max Reitz <mreitz@redhat.com>
7711c0
7711c0
When dumping an object into the log, there are differences between
7711c0
Python 2 and 3.  First, unicode strings are prefixed by 'u' in Python 2
7711c0
(they are no longer in 3, because unicode strings are the default
7711c0
there).  Second, the order of keys in dicts may differ.  Third,
7711c0
especially long numbers are longs in Python 2 and thus get an 'L'
7711c0
suffix, which does not happen in Python 3.
7711c0
7711c0
We can get around all of these differences by dumping objects (lists and
7711c0
dicts) in a language-independent format, namely JSON.  The JSON
7711c0
generator even allows emitting dicts with their keys sorted
7711c0
alphabetically.
7711c0
7711c0
This changes the output of all tests that use these logging functions
7711c0
(dict keys are ordered now, strings in dicts are now enclosed in double
7711c0
quotes instead of single quotes, the 'L' suffix of large integers is
7711c0
dropped, and "true" and "false" are now in lower case).
7711c0
The quote change necessitates a small change to a filter used in test
7711c0
207.
7711c0
7711c0
Suggested-by: Eduardo Habkost <ehabkost@redhat.com>
7711c0
Signed-off-by: Max Reitz <mreitz@redhat.com>
7711c0
Reviewed-by: Cleber Rosa <crosa@redhat.com>
7711c0
Message-Id: <20181022135307.14398-10-mreitz@redhat.com>
7711c0
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
7711c0
(cherry picked from commit e21b5f34d669b82087597273f3783626947291a0)
7711c0
Signed-off-by: John Snow <jsnow@redhat.com>
7711c0
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
7711c0
---
7711c0
 tests/qemu-iotests/194.out    |  22 +-
7711c0
 tests/qemu-iotests/202.out    |  12 +-
7711c0
 tests/qemu-iotests/203.out    |  14 +-
7711c0
 tests/qemu-iotests/206.out    | 218 ++++++++---------
7711c0
 tests/qemu-iotests/207        |   2 +-
7711c0
 tests/qemu-iotests/207.out    |  72 +++---
7711c0
 tests/qemu-iotests/208.out    |   8 +-
7711c0
 tests/qemu-iotests/210.out    |  94 ++++----
7711c0
 tests/qemu-iotests/211.out    | 102 ++++----
7711c0
 tests/qemu-iotests/212.out    | 174 +++++++-------
7711c0
 tests/qemu-iotests/213.out    | 182 +++++++--------
7711c0
 tests/qemu-iotests/216.out    |   4 +-
7711c0
 tests/qemu-iotests/218.out    |  20 +-
7711c0
 tests/qemu-iotests/219.out    | 526 +++++++++++++++++++++---------------------
7711c0
 tests/qemu-iotests/222.out    |  24 +-
7711c0
 tests/qemu-iotests/234.out    |  36 +--
7711c0
 tests/qemu-iotests/iotests.py |  10 +-
7711c0
 17 files changed, 762 insertions(+), 758 deletions(-)
7711c0
7711c0
diff --git a/tests/qemu-iotests/194.out b/tests/qemu-iotests/194.out
7711c0
index 50ac50d..7185785 100644
7711c0
--- a/tests/qemu-iotests/194.out
7711c0
+++ b/tests/qemu-iotests/194.out
7711c0
@@ -1,18 +1,18 @@
7711c0
 Launching VMs...
7711c0
 Launching NBD server on destination...
7711c0
-{u'return': {}}
7711c0
-{u'return': {}}
7711c0
+{"return": {}}
7711c0
+{"return": {}}
7711c0
 Starting `drive-mirror` on source...
7711c0
-{u'return': {}}
7711c0
+{"return": {}}
7711c0
 Waiting for `drive-mirror` to complete...
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'device': u'mirror-job0', u'type': u'mirror', u'speed': 0, u'len': 1073741824, u'offset': 1073741824}, u'event': u'BLOCK_JOB_READY'}
7711c0
+{"data": {"device": "mirror-job0", "len": 1073741824, "offset": 1073741824, "speed": 0, "type": "mirror"}, "event": "BLOCK_JOB_READY", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
 Starting migration...
7711c0
-{u'return': {}}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'setup'}, u'event': u'MIGRATION'}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'active'}, u'event': u'MIGRATION'}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'completed'}, u'event': u'MIGRATION'}
7711c0
+{"return": {}}
7711c0
+{"data": {"status": "setup"}, "event": "MIGRATION", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"data": {"status": "active"}, "event": "MIGRATION", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"data": {"status": "completed"}, "event": "MIGRATION", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
 Gracefully ending the `drive-mirror` job on source...
7711c0
-{u'return': {}}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'device': u'mirror-job0', u'type': u'mirror', u'speed': 0, u'len': 1073741824, u'offset': 1073741824}, u'event': u'BLOCK_JOB_COMPLETED'}
7711c0
+{"return": {}}
7711c0
+{"data": {"device": "mirror-job0", "len": 1073741824, "offset": 1073741824, "speed": 0, "type": "mirror"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
 Stopping the NBD server on destination...
7711c0
-{u'return': {}}
7711c0
+{"return": {}}
7711c0
diff --git a/tests/qemu-iotests/202.out b/tests/qemu-iotests/202.out
7711c0
index d5ea374..9a8619e 100644
7711c0
--- a/tests/qemu-iotests/202.out
7711c0
+++ b/tests/qemu-iotests/202.out
7711c0
@@ -1,11 +1,11 @@
7711c0
 Launching VM...
7711c0
 Adding IOThread...
7711c0
-{u'return': {}}
7711c0
+{"return": {}}
7711c0
 Adding blockdevs...
7711c0
-{u'return': {}}
7711c0
-{u'return': {}}
7711c0
+{"return": {}}
7711c0
+{"return": {}}
7711c0
 Setting iothread...
7711c0
-{u'return': {}}
7711c0
-{u'return': {}}
7711c0
+{"return": {}}
7711c0
+{"return": {}}
7711c0
 Creating external snapshots...
7711c0
-{u'return': {}}
7711c0
+{"return": {}}
7711c0
diff --git a/tests/qemu-iotests/203.out b/tests/qemu-iotests/203.out
7711c0
index 1a11f09..9d4abba 100644
7711c0
--- a/tests/qemu-iotests/203.out
7711c0
+++ b/tests/qemu-iotests/203.out
7711c0
@@ -1,11 +1,11 @@
7711c0
 Launching VM...
7711c0
 Setting IOThreads...
7711c0
-{u'return': {}}
7711c0
-{u'return': {}}
7711c0
+{"return": {}}
7711c0
+{"return": {}}
7711c0
 Enabling migration QMP events...
7711c0
-{u'return': {}}
7711c0
+{"return": {}}
7711c0
 Starting migration...
7711c0
-{u'return': {}}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'setup'}, u'event': u'MIGRATION'}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'active'}, u'event': u'MIGRATION'}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'completed'}, u'event': u'MIGRATION'}
7711c0
+{"return": {}}
7711c0
+{"data": {"status": "setup"}, "event": "MIGRATION", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"data": {"status": "active"}, "event": "MIGRATION", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"data": {"status": "completed"}, "event": "MIGRATION", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
diff --git a/tests/qemu-iotests/206.out b/tests/qemu-iotests/206.out
7711c0
index 789eebe..91f4db5 100644
7711c0
--- a/tests/qemu-iotests/206.out
7711c0
+++ b/tests/qemu-iotests/206.out
7711c0
@@ -1,16 +1,16 @@
7711c0
 === Successful image creation (defaults) ===
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'size': 0, 'driver': 'file', 'filename': 'TEST_DIR/PID-t.qcow2'}}}
7711c0
-{u'return': {}}
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
-
7711c0
-{'execute': 'blockdev-add', 'arguments': {'node_name': 'imgfile', 'driver': 'file', 'filename': 'TEST_DIR/PID-t.qcow2'}}
7711c0
-{u'return': {}}
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'qcow2', 'file': 'imgfile', 'size': 134217728}}}
7711c0
-{u'return': {}}
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "file", "filename": "TEST_DIR/PID-t.qcow2", "size": 0}}}
7711c0
+{"return": {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
+
7711c0
+{"execute": "blockdev-add", "arguments": {"driver": "file", "filename": "TEST_DIR/PID-t.qcow2", "node_name": "imgfile"}}
7711c0
+{"return": {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "qcow2", "file": "imgfile", "size": 134217728}}}
7711c0
+{"return": {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
 image: TEST_IMG
7711c0
 file format: IMGFMT
7711c0
@@ -24,15 +24,15 @@ Format specific information:
7711c0
 
7711c0
 === Successful image creation (inline blockdev-add, explicit defaults) ===
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'nocow': False, 'preallocation': 'off', 'size': 0, 'driver': 'file', 'filename': 'TEST_DIR/PID-t.qcow2'}}}
7711c0
-{u'return': {}}
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "file", "filename": "TEST_DIR/PID-t.qcow2", "nocow": false, "preallocation": "off", "size": 0}}}
7711c0
+{"return": {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'cluster-size': 65536, 'refcount-bits': 16, 'version': 'v3', 'preallocation': 'off', 'file': {'driver': 'file', 'filename': 'TEST_DIR/PID-t.qcow2'}, 'lazy-refcounts': False, 'driver': 'qcow2', 'size': 67108864}}}
7711c0
-{u'return': {}}
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"cluster-size": 65536, "driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/PID-t.qcow2"}, "lazy-refcounts": false, "preallocation": "off", "refcount-bits": 16, "size": 67108864, "version": "v3"}}}
7711c0
+{"return": {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
 image: TEST_IMG
7711c0
 file format: IMGFMT
7711c0
@@ -46,15 +46,15 @@ Format specific information:
7711c0
 
7711c0
 === Successful image creation (v3 non-default options) ===
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'nocow': True, 'preallocation': 'falloc', 'size': 0, 'driver': 'file', 'filename': 'TEST_DIR/PID-t.qcow2'}}}
7711c0
-{u'return': {}}
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "file", "filename": "TEST_DIR/PID-t.qcow2", "nocow": true, "preallocation": "falloc", "size": 0}}}
7711c0
+{"return": {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'cluster-size': 2097152, 'refcount-bits': 1, 'version': 'v3', 'preallocation': 'metadata', 'file': {'driver': 'file', 'filename': 'TEST_DIR/PID-t.qcow2'}, 'lazy-refcounts': True, 'driver': 'qcow2', 'size': 33554432}}}
7711c0
-{u'return': {}}
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"cluster-size": 2097152, "driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/PID-t.qcow2"}, "lazy-refcounts": true, "preallocation": "metadata", "refcount-bits": 1, "size": 33554432, "version": "v3"}}}
7711c0
+{"return": {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
 image: TEST_IMG
7711c0
 file format: IMGFMT
7711c0
@@ -68,15 +68,15 @@ Format specific information:
7711c0
 
7711c0
 === Successful image creation (v2 non-default options) ===
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'size': 0, 'driver': 'file', 'filename': 'TEST_DIR/PID-t.qcow2'}}}
7711c0
-{u'return': {}}
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "file", "filename": "TEST_DIR/PID-t.qcow2", "size": 0}}}
7711c0
+{"return": {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'cluster-size': 512, 'backing-fmt': 'qcow2', 'driver': 'qcow2', 'version': 'v2', 'file': {'driver': 'file', 'filename': 'TEST_DIR/PID-t.qcow2'}, 'backing-file': 'TEST_DIR/PID-t.qcow2.base', 'size': 33554432}}}
7711c0
-{u'return': {}}
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"backing-file": "TEST_DIR/PID-t.qcow2.base", "backing-fmt": "qcow2", "cluster-size": 512, "driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/PID-t.qcow2"}, "size": 33554432, "version": "v2"}}}
7711c0
+{"return": {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
 image: TEST_IMG
7711c0
 file format: IMGFMT
7711c0
@@ -90,10 +90,10 @@ Format specific information:
7711c0
 
7711c0
 === Successful image creation (encrypted) ===
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'encrypt': {'key-secret': 'keysec0', 'iter-time': 10, 'cipher-mode': 'ctr', 'ivgen-hash-alg': 'md5', 'cipher-alg': 'twofish-128', 'format': 'luks', 'ivgen-alg': 'plain64', 'hash-alg': 'sha1'}, 'driver': 'qcow2', 'file': {'driver': 'file', 'filename': 'TEST_DIR/PID-t.qcow2'}, 'size': 33554432}}}
7711c0
-{u'return': {}}
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "qcow2", "encrypt": {"cipher-alg": "twofish-128", "cipher-mode": "ctr", "format": "luks", "hash-alg": "sha1", "iter-time": 10, "ivgen-alg": "plain64", "ivgen-hash-alg": "md5", "key-secret": "keysec0"}, "file": {"driver": "file", "filename": "TEST_DIR/PID-t.qcow2"}, "size": 33554432}}}
7711c0
+{"return": {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
 image: TEST_IMG
7711c0
 file format: IMGFMT
7711c0
@@ -144,113 +144,113 @@ Format specific information:
7711c0
 
7711c0
 === Invalid BlockdevRef ===
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'qcow2', 'file': "this doesn't exist", 'size': 33554432}}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "qcow2", "file": "this doesn't exist", "size": 33554432}}}
7711c0
+{"return": {}}
7711c0
 Job failed: Cannot find device=this doesn't exist nor node_name=this doesn't exist
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
 === Invalid sizes ===
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'qcow2', 'file': 'node0', 'size': 1234}}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "qcow2", "file": "node0", "size": 1234}}}
7711c0
+{"return": {}}
7711c0
 Job failed: Image size must be a multiple of 512 bytes
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'qcow2', 'file': 'node0', 'size': 18446744073709551104L}}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "qcow2", "file": "node0", "size": 18446744073709551104}}}
7711c0
+{"return": {}}
7711c0
 Job failed: Could not resize image: Image size cannot be negative
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'qcow2', 'file': 'node0', 'size': 9223372036854775808L}}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "qcow2", "file": "node0", "size": 9223372036854775808}}}
7711c0
+{"return": {}}
7711c0
 Job failed: Could not resize image: Image size cannot be negative
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'qcow2', 'file': 'node0', 'size': 9223372036854775296}}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "qcow2", "file": "node0", "size": 9223372036854775296}}}
7711c0
+{"return": {}}
7711c0
 Job failed: Could not resize image: Failed to grow the L1 table: File too large
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
 === Invalid version ===
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'version': 'v1', 'driver': 'qcow2', 'file': 'node0', 'size': 67108864}}}
7711c0
-{u'error': {u'class': u'GenericError', u'desc': u"Invalid parameter 'v1'"}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "qcow2", "file": "node0", "size": 67108864, "version": "v1"}}}
7711c0
+{"error": {"class": "GenericError", "desc": "Invalid parameter 'v1'"}}
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'lazy-refcounts': True, 'version': 'v2', 'driver': 'qcow2', 'file': 'node0', 'size': 67108864}}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "qcow2", "file": "node0", "lazy-refcounts": true, "size": 67108864, "version": "v2"}}}
7711c0
+{"return": {}}
7711c0
 Job failed: Lazy refcounts only supported with compatibility level 1.1 and above (use version=v3 or greater)
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'refcount-bits': 8, 'version': 'v2', 'driver': 'qcow2', 'file': 'node0', 'size': 67108864}}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "qcow2", "file": "node0", "refcount-bits": 8, "size": 67108864, "version": "v2"}}}
7711c0
+{"return": {}}
7711c0
 Job failed: Different refcount widths than 16 bits require compatibility level 1.1 or above (use version=v3 or greater)
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
 === Invalid backing file options ===
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'preallocation': 'full', 'driver': 'qcow2', 'backing-file': '/dev/null', 'file': 'node0', 'size': 67108864}}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"backing-file": "/dev/null", "driver": "qcow2", "file": "node0", "preallocation": "full", "size": 67108864}}}
7711c0
+{"return": {}}
7711c0
 Job failed: Backing file and preallocation cannot be used at the same time
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'backing-fmt': 'qcow2', 'driver': 'qcow2', 'file': 'node0', 'size': 67108864}}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"backing-fmt": "qcow2", "driver": "qcow2", "file": "node0", "size": 67108864}}}
7711c0
+{"return": {}}
7711c0
 Job failed: Backing format cannot be used without backing file
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
 === Invalid cluster size ===
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'cluster-size': 1234, 'driver': 'qcow2', 'file': 'node0', 'size': 67108864}}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"cluster-size": 1234, "driver": "qcow2", "file": "node0", "size": 67108864}}}
7711c0
+{"return": {}}
7711c0
 Job failed: Cluster size must be a power of two between 512 and 2048k
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'cluster-size': 128, 'driver': 'qcow2', 'file': 'node0', 'size': 67108864}}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"cluster-size": 128, "driver": "qcow2", "file": "node0", "size": 67108864}}}
7711c0
+{"return": {}}
7711c0
 Job failed: Cluster size must be a power of two between 512 and 2048k
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'cluster-size': 4194304, 'driver': 'qcow2', 'file': 'node0', 'size': 67108864}}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"cluster-size": 4194304, "driver": "qcow2", "file": "node0", "size": 67108864}}}
7711c0
+{"return": {}}
7711c0
 Job failed: Cluster size must be a power of two between 512 and 2048k
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'cluster-size': 0, 'driver': 'qcow2', 'file': 'node0', 'size': 67108864}}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"cluster-size": 0, "driver": "qcow2", "file": "node0", "size": 67108864}}}
7711c0
+{"return": {}}
7711c0
 Job failed: Cluster size must be a power of two between 512 and 2048k
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'cluster-size': 512, 'driver': 'qcow2', 'file': 'node0', 'size': 281474976710656}}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"cluster-size": 512, "driver": "qcow2", "file": "node0", "size": 281474976710656}}}
7711c0
+{"return": {}}
7711c0
 Job failed: Could not resize image: Failed to grow the L1 table: File too large
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
 === Invalid refcount width ===
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'refcount-bits': 128, 'driver': 'qcow2', 'file': 'node0', 'size': 67108864}}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "qcow2", "file": "node0", "refcount-bits": 128, "size": 67108864}}}
7711c0
+{"return": {}}
7711c0
 Job failed: Refcount width must be a power of two and may not exceed 64 bits
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'refcount-bits': 0, 'driver': 'qcow2', 'file': 'node0', 'size': 67108864}}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "qcow2", "file": "node0", "refcount-bits": 0, "size": 67108864}}}
7711c0
+{"return": {}}
7711c0
 Job failed: Refcount width must be a power of two and may not exceed 64 bits
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'refcount-bits': 7, 'driver': 'qcow2', 'file': 'node0', 'size': 67108864}}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "qcow2", "file": "node0", "refcount-bits": 7, "size": 67108864}}}
7711c0
+{"return": {}}
7711c0
 Job failed: Refcount width must be a power of two and may not exceed 64 bits
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
diff --git a/tests/qemu-iotests/207 b/tests/qemu-iotests/207
7711c0
index 444ae23..687b2ca 100755
7711c0
--- a/tests/qemu-iotests/207
7711c0
+++ b/tests/qemu-iotests/207
7711c0
@@ -28,7 +28,7 @@ iotests.verify_image_format(supported_fmts=['raw'])
7711c0
 iotests.verify_protocol(supported=['ssh'])
7711c0
 
7711c0
 def filter_hash(msg):
7711c0
-    return re.sub("'hash': '[0-9a-f]+'", "'hash': HASH", msg)
7711c0
+    return re.sub('"hash": "[0-9a-f]+"', '"hash": HASH', msg)
7711c0
 
7711c0
 def blockdev_create(vm, options):
7711c0
     result = vm.qmp_log('blockdev-create', job_id='job0', options=options,
7711c0
diff --git a/tests/qemu-iotests/207.out b/tests/qemu-iotests/207.out
7711c0
index 078b7e6..45ac7c2 100644
7711c0
--- a/tests/qemu-iotests/207.out
7711c0
+++ b/tests/qemu-iotests/207.out
7711c0
@@ -1,9 +1,9 @@
7711c0
 === Successful image creation (defaults) ===
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'ssh', 'location': {'path': 'TEST_DIR/PID-t.img', 'server': {'host': '127.0.0.1', 'port': '22'}}, 'size': 4194304}}}
7711c0
-{u'return': {}}
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "ssh", "location": {"path": "TEST_DIR/PID-t.img", "server": {"host": "127.0.0.1", "port": "22"}}, "size": 4194304}}}
7711c0
+{"return": {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
 image: json:{"driver": "IMGFMT", "file": {"server.host": "127.0.0.1", "server.port": "22", "driver": "ssh", "path": "TEST_IMG"}}
7711c0
 file format: IMGFMT
7711c0
@@ -16,49 +16,49 @@ virtual size: 4.0M (4194304 bytes)
7711c0
 
7711c0
 === Test host-key-check options ===
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'ssh', 'location': {'path': 'TEST_DIR/PID-t.img', 'host-key-check': {'mode': 'none'}, 'server': {'host': '127.0.0.1', 'port': '22'}}, 'size': 8388608}}}
7711c0
-{u'return': {}}
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "ssh", "location": {"host-key-check": {"mode": "none"}, "path": "TEST_DIR/PID-t.img", "server": {"host": "127.0.0.1", "port": "22"}}, "size": 8388608}}}
7711c0
+{"return": {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
 image: json:{"driver": "IMGFMT", "file": {"server.host": "127.0.0.1", "server.port": "22", "driver": "ssh", "path": "TEST_IMG"}}
7711c0
 file format: IMGFMT
7711c0
 virtual size: 8.0M (8388608 bytes)
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'ssh', 'location': {'path': 'TEST_DIR/PID-t.img', 'host-key-check': {'mode': 'known_hosts'}, 'server': {'host': '127.0.0.1', 'port': '22'}}, 'size': 4194304}}}
7711c0
-{u'return': {}}
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "ssh", "location": {"host-key-check": {"mode": "known_hosts"}, "path": "TEST_DIR/PID-t.img", "server": {"host": "127.0.0.1", "port": "22"}}, "size": 4194304}}}
7711c0
+{"return": {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
 image: json:{"driver": "IMGFMT", "file": {"server.host": "127.0.0.1", "server.port": "22", "driver": "ssh", "path": "TEST_IMG"}}
7711c0
 file format: IMGFMT
7711c0
 virtual size: 4.0M (4194304 bytes)
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'ssh', 'location': {'path': 'TEST_DIR/PID-t.img', 'host-key-check': {'hash': 'wrong', 'type': 'md5', 'mode': 'hash'}, 'server': {'host': '127.0.0.1', 'port': '22'}}, 'size': 2097152}}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "ssh", "location": {"host-key-check": {"hash": "wrong", "mode": "hash", "type": "md5"}, "path": "TEST_DIR/PID-t.img", "server": {"host": "127.0.0.1", "port": "22"}}, "size": 2097152}}}
7711c0
+{"return": {}}
7711c0
 Job failed: remote host key does not match host_key_check 'wrong'
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'ssh', 'location': {'path': 'TEST_DIR/PID-t.img', 'host-key-check': {'hash': HASH, 'type': 'md5', 'mode': 'hash'}, 'server': {'host': '127.0.0.1', 'port': '22'}}, 'size': 8388608}}}
7711c0
-{u'return': {}}
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "ssh", "location": {"host-key-check": {"hash": HASH, "mode": "hash", "type": "md5"}, "path": "TEST_DIR/PID-t.img", "server": {"host": "127.0.0.1", "port": "22"}}, "size": 8388608}}}
7711c0
+{"return": {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
 image: json:{"driver": "IMGFMT", "file": {"server.host": "127.0.0.1", "server.port": "22", "driver": "ssh", "path": "TEST_IMG"}}
7711c0
 file format: IMGFMT
7711c0
 virtual size: 8.0M (8388608 bytes)
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'ssh', 'location': {'path': 'TEST_DIR/PID-t.img', 'host-key-check': {'hash': 'wrong', 'type': 'sha1', 'mode': 'hash'}, 'server': {'host': '127.0.0.1', 'port': '22'}}, 'size': 2097152}}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "ssh", "location": {"host-key-check": {"hash": "wrong", "mode": "hash", "type": "sha1"}, "path": "TEST_DIR/PID-t.img", "server": {"host": "127.0.0.1", "port": "22"}}, "size": 2097152}}}
7711c0
+{"return": {}}
7711c0
 Job failed: remote host key does not match host_key_check 'wrong'
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'ssh', 'location': {'path': 'TEST_DIR/PID-t.img', 'host-key-check': {'hash': HASH, 'type': 'sha1', 'mode': 'hash'}, 'server': {'host': '127.0.0.1', 'port': '22'}}, 'size': 4194304}}}
7711c0
-{u'return': {}}
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "ssh", "location": {"host-key-check": {"hash": HASH, "mode": "hash", "type": "sha1"}, "path": "TEST_DIR/PID-t.img", "server": {"host": "127.0.0.1", "port": "22"}}, "size": 4194304}}}
7711c0
+{"return": {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
 image: json:{"driver": "IMGFMT", "file": {"server.host": "127.0.0.1", "server.port": "22", "driver": "ssh", "path": "TEST_IMG"}}
7711c0
 file format: IMGFMT
7711c0
@@ -66,15 +66,15 @@ virtual size: 4.0M (4194304 bytes)
7711c0
 
7711c0
 === Invalid path and user ===
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'ssh', 'location': {'path': '/this/is/not/an/existing/path', 'host-key-check': {'mode': 'none'}, 'server': {'host': '127.0.0.1', 'port': '22'}}, 'size': 4194304}}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "ssh", "location": {"host-key-check": {"mode": "none"}, "path": "/this/is/not/an/existing/path", "server": {"host": "127.0.0.1", "port": "22"}}, "size": 4194304}}}
7711c0
+{"return": {}}
7711c0
 Job failed: failed to open remote file '/this/is/not/an/existing/path': Failed opening remote file (libssh2 error code: -31)
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'ssh', 'location': {'path': 'TEST_DIR/PID-t.img', 'host-key-check': {'mode': 'none'}, 'user': 'invalid user', 'server': {'host': '127.0.0.1', 'port': '22'}}, 'size': 4194304}}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "ssh", "location": {"host-key-check": {"mode": "none"}, "path": "TEST_DIR/PID-t.img", "server": {"host": "127.0.0.1", "port": "22"}, "user": "invalid user"}, "size": 4194304}}}
7711c0
+{"return": {}}
7711c0
 Job failed: failed to authenticate using publickey authentication and the identities held by your ssh-agent
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
diff --git a/tests/qemu-iotests/208.out b/tests/qemu-iotests/208.out
7711c0
index 3687e9d..9ff2582 100644
7711c0
--- a/tests/qemu-iotests/208.out
7711c0
+++ b/tests/qemu-iotests/208.out
7711c0
@@ -1,9 +1,9 @@
7711c0
 Launching VM...
7711c0
 Starting NBD server...
7711c0
-{u'return': {}}
7711c0
+{"return": {}}
7711c0
 Adding NBD export...
7711c0
-{u'return': {}}
7711c0
+{"return": {}}
7711c0
 Creating external snapshot...
7711c0
-{u'return': {}}
7711c0
+{"return": {}}
7711c0
 Stopping NBD server...
7711c0
-{u'return': {}}
7711c0
+{"return": {}}
7711c0
diff --git a/tests/qemu-iotests/210.out b/tests/qemu-iotests/210.out
7711c0
index 078ba54..923cb05 100644
7711c0
--- a/tests/qemu-iotests/210.out
7711c0
+++ b/tests/qemu-iotests/210.out
7711c0
@@ -1,16 +1,16 @@
7711c0
 === Successful image creation (defaults) ===
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'size': 0, 'driver': 'file', 'filename': 'TEST_DIR/PID-t.luks'}}}
7711c0
-{u'return': {}}
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
-
7711c0
-{'execute': 'blockdev-add', 'arguments': {'node_name': 'imgfile', 'driver': 'file', 'filename': 'TEST_DIR/PID-t.luks'}}
7711c0
-{u'return': {}}
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'key-secret': 'keysec0', 'iter-time': 10, 'driver': 'luks', 'file': 'imgfile', 'size': 134217728}}}
7711c0
-{u'return': {}}
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "file", "filename": "TEST_DIR/PID-t.luks", "size": 0}}}
7711c0
+{"return": {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
+
7711c0
+{"execute": "blockdev-add", "arguments": {"driver": "file", "filename": "TEST_DIR/PID-t.luks", "node_name": "imgfile"}}
7711c0
+{"return": {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "luks", "file": "imgfile", "iter-time": 10, "key-secret": "keysec0", "size": 134217728}}}
7711c0
+{"return": {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
 image: json:{"driver": "IMGFMT", "file": {"driver": "file", "filename": "TEST_IMG"}, "key-secret": "keysec0"}
7711c0
 file format: IMGFMT
7711c0
@@ -54,15 +54,15 @@ Format specific information:
7711c0
 
7711c0
 === Successful image creation (with non-default options) ===
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'size': 0, 'driver': 'file', 'filename': 'TEST_DIR/PID-t.luks'}}}
7711c0
-{u'return': {}}
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "file", "filename": "TEST_DIR/PID-t.luks", "size": 0}}}
7711c0
+{"return": {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'key-secret': 'keysec0', 'hash-alg': 'sha1', 'cipher-mode': 'ctr', 'cipher-alg': 'twofish-128', 'file': {'driver': 'file', 'filename': 'TEST_DIR/PID-t.luks'}, 'iter-time': 10, 'ivgen-alg': 'plain64', 'ivgen-hash-alg': 'md5', 'driver': 'luks', 'size': 67108864}}}
7711c0
-{u'return': {}}
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"cipher-alg": "twofish-128", "cipher-mode": "ctr", "driver": "luks", "file": {"driver": "file", "filename": "TEST_DIR/PID-t.luks"}, "hash-alg": "sha1", "iter-time": 10, "ivgen-alg": "plain64", "ivgen-hash-alg": "md5", "key-secret": "keysec0", "size": 67108864}}}
7711c0
+{"return": {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
 image: json:{"driver": "IMGFMT", "file": {"driver": "file", "filename": "TEST_IMG"}, "key-secret": "keysec0"}
7711c0
 file format: IMGFMT
7711c0
@@ -106,18 +106,18 @@ Format specific information:
7711c0
 
7711c0
 === Invalid BlockdevRef ===
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'luks', 'file': "this doesn't exist", 'size': 67108864}}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "luks", "file": "this doesn't exist", "size": 67108864}}}
7711c0
+{"return": {}}
7711c0
 Job failed: Cannot find device=this doesn't exist nor node_name=this doesn't exist
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
 === Zero size ===
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'key-secret': 'keysec0', 'iter-time': 10, 'driver': 'luks', 'file': 'node0', 'size': 0}}}
7711c0
-{u'return': {}}
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "luks", "file": "node0", "iter-time": 10, "key-secret": "keysec0", "size": 0}}}
7711c0
+{"return": {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
 image: json:{"driver": "IMGFMT", "file": {"driver": "file", "filename": "TEST_IMG"}, "key-secret": "keysec0"}
7711c0
 file format: IMGFMT
7711c0
@@ -161,34 +161,34 @@ Format specific information:
7711c0
 
7711c0
 === Invalid sizes ===
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'key-secret': 'keysec0', 'driver': 'luks', 'file': 'node0', 'size': 18446744073709551104L}}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "luks", "file": "node0", "key-secret": "keysec0", "size": 18446744073709551104}}}
7711c0
+{"return": {}}
7711c0
 Job failed: The requested file size is too large
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'key-secret': 'keysec0', 'driver': 'luks', 'file': 'node0', 'size': 9223372036854775808L}}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "luks", "file": "node0", "key-secret": "keysec0", "size": 9223372036854775808}}}
7711c0
+{"return": {}}
7711c0
 Job failed: The requested file size is too large
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'key-secret': 'keysec0', 'driver': 'luks', 'file': 'node0', 'size': 9223372036854775296}}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "luks", "file": "node0", "key-secret": "keysec0", "size": 9223372036854775296}}}
7711c0
+{"return": {}}
7711c0
 Job failed: The requested file size is too large
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
 === Resize image with invalid sizes ===
7711c0
 
7711c0
-{'execute': 'block_resize', 'arguments': {'size': 9223372036854775296, 'node_name': 'node1'}}
7711c0
-{u'error': {u'class': u'GenericError', u'desc': u'The requested file size is too large'}}
7711c0
-{'execute': 'block_resize', 'arguments': {'size': 9223372036854775808L, 'node_name': 'node1'}}
7711c0
-{u'error': {u'class': u'GenericError', u'desc': u"Invalid parameter type for 'size', expected: integer"}}
7711c0
-{'execute': 'block_resize', 'arguments': {'size': 18446744073709551104L, 'node_name': 'node1'}}
7711c0
-{u'error': {u'class': u'GenericError', u'desc': u"Invalid parameter type for 'size', expected: integer"}}
7711c0
-{'execute': 'block_resize', 'arguments': {'size': -9223372036854775808, 'node_name': 'node1'}}
7711c0
-{u'error': {u'class': u'GenericError', u'desc': u"Parameter 'size' expects a >0 size"}}
7711c0
+{"execute": "block_resize", "arguments": {"node_name": "node1", "size": 9223372036854775296}}
7711c0
+{"error": {"class": "GenericError", "desc": "The requested file size is too large"}}
7711c0
+{"execute": "block_resize", "arguments": {"node_name": "node1", "size": 9223372036854775808}}
7711c0
+{"error": {"class": "GenericError", "desc": "Invalid parameter type for 'size', expected: integer"}}
7711c0
+{"execute": "block_resize", "arguments": {"node_name": "node1", "size": 18446744073709551104}}
7711c0
+{"error": {"class": "GenericError", "desc": "Invalid parameter type for 'size', expected: integer"}}
7711c0
+{"execute": "block_resize", "arguments": {"node_name": "node1", "size": -9223372036854775808}}
7711c0
+{"error": {"class": "GenericError", "desc": "Parameter 'size' expects a >0 size"}}
7711c0
 image: json:{"driver": "IMGFMT", "file": {"driver": "file", "filename": "TEST_IMG"}, "key-secret": "keysec0"}
7711c0
 file format: IMGFMT
7711c0
 virtual size: 0 (0 bytes)
7711c0
diff --git a/tests/qemu-iotests/211.out b/tests/qemu-iotests/211.out
7711c0
index 6feaea3..eebb0ea 100644
7711c0
--- a/tests/qemu-iotests/211.out
7711c0
+++ b/tests/qemu-iotests/211.out
7711c0
@@ -1,16 +1,16 @@
7711c0
 === Successful image creation (defaults) ===
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'size': 0, 'driver': 'file', 'filename': 'TEST_DIR/PID-t.vdi'}}}
7711c0
-{u'return': {}}
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
-
7711c0
-{'execute': 'blockdev-add', 'arguments': {'node_name': 'imgfile', 'driver': 'file', 'filename': 'TEST_DIR/PID-t.vdi'}}
7711c0
-{u'return': {}}
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'vdi', 'file': 'imgfile', 'size': 134217728}}}
7711c0
-{u'return': {}}
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "file", "filename": "TEST_DIR/PID-t.vdi", "size": 0}}}
7711c0
+{"return": {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
+
7711c0
+{"execute": "blockdev-add", "arguments": {"driver": "file", "filename": "TEST_DIR/PID-t.vdi", "node_name": "imgfile"}}
7711c0
+{"return": {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "vdi", "file": "imgfile", "size": 134217728}}}
7711c0
+{"return": {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
 image: TEST_IMG
7711c0
 file format: IMGFMT
7711c0
@@ -21,15 +21,15 @@ cluster_size: 1048576
7711c0
 
7711c0
 === Successful image creation (explicit defaults) ===
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'size': 0, 'driver': 'file', 'filename': 'TEST_DIR/PID-t.vdi'}}}
7711c0
-{u'return': {}}
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "file", "filename": "TEST_DIR/PID-t.vdi", "size": 0}}}
7711c0
+{"return": {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'preallocation': 'off', 'driver': 'vdi', 'file': {'driver': 'file', 'filename': 'TEST_DIR/PID-t.vdi'}, 'size': 67108864}}}
7711c0
-{u'return': {}}
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "vdi", "file": {"driver": "file", "filename": "TEST_DIR/PID-t.vdi"}, "preallocation": "off", "size": 67108864}}}
7711c0
+{"return": {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
 image: TEST_IMG
7711c0
 file format: IMGFMT
7711c0
@@ -40,15 +40,15 @@ cluster_size: 1048576
7711c0
 
7711c0
 === Successful image creation (with non-default options) ===
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'size': 0, 'driver': 'file', 'filename': 'TEST_DIR/PID-t.vdi'}}}
7711c0
-{u'return': {}}
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "file", "filename": "TEST_DIR/PID-t.vdi", "size": 0}}}
7711c0
+{"return": {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'preallocation': 'metadata', 'driver': 'vdi', 'file': {'driver': 'file', 'filename': 'TEST_DIR/PID-t.vdi'}, 'size': 33554432}}}
7711c0
-{u'return': {}}
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "vdi", "file": {"driver": "file", "filename": "TEST_DIR/PID-t.vdi"}, "preallocation": "metadata", "size": 33554432}}}
7711c0
+{"return": {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
 image: TEST_IMG
7711c0
 file format: IMGFMT
7711c0
@@ -60,18 +60,18 @@ cluster_size: 1048576
7711c0
 
7711c0
 === Invalid BlockdevRef ===
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'vdi', 'file': "this doesn't exist", 'size': 33554432}}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "vdi", "file": "this doesn't exist", "size": 33554432}}}
7711c0
+{"return": {}}
7711c0
 Job failed: Cannot find device=this doesn't exist nor node_name=this doesn't exist
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
 === Zero size ===
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'vdi', 'file': 'node0', 'size': 0}}}
7711c0
-{u'return': {}}
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "vdi", "file": "node0", "size": 0}}}
7711c0
+{"return": {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
 image: TEST_IMG
7711c0
 file format: IMGFMT
7711c0
@@ -80,10 +80,10 @@ cluster_size: 1048576
7711c0
 
7711c0
 === Maximum size ===
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'vdi', 'file': 'node0', 'size': 562949819203584}}}
7711c0
-{u'return': {}}
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "vdi", "file": "node0", "size": 562949819203584}}}
7711c0
+{"return": {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
 image: TEST_IMG
7711c0
 file format: IMGFMT
7711c0
@@ -92,21 +92,21 @@ cluster_size: 1048576
7711c0
 
7711c0
 === Invalid sizes ===
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'vdi', 'file': 'node0', 'size': 18446744073709551104L}}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "vdi", "file": "node0", "size": 18446744073709551104}}}
7711c0
+{"return": {}}
7711c0
 Job failed: Unsupported VDI image size (size is 0xfffffffffffffe00, max supported is 0x1fffff8000000)
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'vdi', 'file': 'node0', 'size': 9223372036854775808L}}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "vdi", "file": "node0", "size": 9223372036854775808}}}
7711c0
+{"return": {}}
7711c0
 Job failed: Unsupported VDI image size (size is 0x8000000000000000, max supported is 0x1fffff8000000)
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'vdi', 'file': 'node0', 'size': 562949819203585}}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "vdi", "file": "node0", "size": 562949819203585}}}
7711c0
+{"return": {}}
7711c0
 Job failed: Unsupported VDI image size (size is 0x1fffff8000001, max supported is 0x1fffff8000000)
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
diff --git a/tests/qemu-iotests/212.out b/tests/qemu-iotests/212.out
7711c0
index 9150da7..01da467 100644
7711c0
--- a/tests/qemu-iotests/212.out
7711c0
+++ b/tests/qemu-iotests/212.out
7711c0
@@ -1,16 +1,16 @@
7711c0
 === Successful image creation (defaults) ===
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'size': 0, 'driver': 'file', 'filename': 'TEST_DIR/PID-t.parallels'}}}
7711c0
-{u'return': {}}
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
-
7711c0
-{'execute': 'blockdev-add', 'arguments': {'node_name': 'imgfile', 'driver': 'file', 'filename': 'TEST_DIR/PID-t.parallels'}}
7711c0
-{u'return': {}}
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'parallels', 'file': 'imgfile', 'size': 134217728}}}
7711c0
-{u'return': {}}
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "file", "filename": "TEST_DIR/PID-t.parallels", "size": 0}}}
7711c0
+{"return": {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
+
7711c0
+{"execute": "blockdev-add", "arguments": {"driver": "file", "filename": "TEST_DIR/PID-t.parallels", "node_name": "imgfile"}}
7711c0
+{"return": {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "parallels", "file": "imgfile", "size": 134217728}}}
7711c0
+{"return": {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
 image: TEST_IMG
7711c0
 file format: IMGFMT
7711c0
@@ -18,15 +18,15 @@ virtual size: 128M (134217728 bytes)
7711c0
 
7711c0
 === Successful image creation (explicit defaults) ===
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'size': 0, 'driver': 'file', 'filename': 'TEST_DIR/PID-t.parallels'}}}
7711c0
-{u'return': {}}
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "file", "filename": "TEST_DIR/PID-t.parallels", "size": 0}}}
7711c0
+{"return": {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'cluster-size': 1048576, 'driver': 'parallels', 'file': {'driver': 'file', 'filename': 'TEST_DIR/PID-t.parallels'}, 'size': 67108864}}}
7711c0
-{u'return': {}}
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"cluster-size": 1048576, "driver": "parallels", "file": {"driver": "file", "filename": "TEST_DIR/PID-t.parallels"}, "size": 67108864}}}
7711c0
+{"return": {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
 image: TEST_IMG
7711c0
 file format: IMGFMT
7711c0
@@ -34,15 +34,15 @@ virtual size: 64M (67108864 bytes)
7711c0
 
7711c0
 === Successful image creation (with non-default options) ===
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'size': 0, 'driver': 'file', 'filename': 'TEST_DIR/PID-t.parallels'}}}
7711c0
-{u'return': {}}
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "file", "filename": "TEST_DIR/PID-t.parallels", "size": 0}}}
7711c0
+{"return": {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'cluster-size': 65536, 'driver': 'parallels', 'file': {'driver': 'file', 'filename': 'TEST_DIR/PID-t.parallels'}, 'size': 33554432}}}
7711c0
-{u'return': {}}
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"cluster-size": 65536, "driver": "parallels", "file": {"driver": "file", "filename": "TEST_DIR/PID-t.parallels"}, "size": 33554432}}}
7711c0
+{"return": {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
 image: TEST_IMG
7711c0
 file format: IMGFMT
7711c0
@@ -50,18 +50,18 @@ virtual size: 32M (33554432 bytes)
7711c0
 
7711c0
 === Invalid BlockdevRef ===
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'parallels', 'file': "this doesn't exist", 'size': 33554432}}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "parallels", "file": "this doesn't exist", "size": 33554432}}}
7711c0
+{"return": {}}
7711c0
 Job failed: Cannot find device=this doesn't exist nor node_name=this doesn't exist
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
 === Zero size ===
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'parallels', 'file': 'node0', 'size': 0}}}
7711c0
-{u'return': {}}
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "parallels", "file": "node0", "size": 0}}}
7711c0
+{"return": {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
 image: TEST_IMG
7711c0
 file format: IMGFMT
7711c0
@@ -69,10 +69,10 @@ virtual size: 0 (0 bytes)
7711c0
 
7711c0
 === Maximum size ===
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'parallels', 'file': 'node0', 'size': 4503599627369984}}}
7711c0
-{u'return': {}}
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "parallels", "file": "node0", "size": 4503599627369984}}}
7711c0
+{"return": {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
 image: TEST_IMG
7711c0
 file format: IMGFMT
7711c0
@@ -80,77 +80,77 @@ virtual size: 4096T (4503599627369984 bytes)
7711c0
 
7711c0
 === Invalid sizes ===
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'parallels', 'file': 'node0', 'size': 1234}}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "parallels", "file": "node0", "size": 1234}}}
7711c0
+{"return": {}}
7711c0
 Job failed: Image size must be a multiple of 512 bytes
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'parallels', 'file': 'node0', 'size': 18446744073709551104L}}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "parallels", "file": "node0", "size": 18446744073709551104}}}
7711c0
+{"return": {}}
7711c0
 Job failed: Image size is too large for this cluster size
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'parallels', 'file': 'node0', 'size': 9223372036854775808L}}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "parallels", "file": "node0", "size": 9223372036854775808}}}
7711c0
+{"return": {}}
7711c0
 Job failed: Image size is too large for this cluster size
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'parallels', 'file': 'node0', 'size': 9223372036854775296}}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "parallels", "file": "node0", "size": 9223372036854775296}}}
7711c0
+{"return": {}}
7711c0
 Job failed: Image size is too large for this cluster size
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'parallels', 'file': 'node0', 'size': 4503599627370497}}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "parallels", "file": "node0", "size": 4503599627370497}}}
7711c0
+{"return": {}}
7711c0
 Job failed: Image size is too large for this cluster size
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
 === Invalid cluster size ===
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'cluster-size': 1234, 'driver': 'parallels', 'file': 'node0', 'size': 67108864}}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"cluster-size": 1234, "driver": "parallels", "file": "node0", "size": 67108864}}}
7711c0
+{"return": {}}
7711c0
 Job failed: Cluster size must be a multiple of 512 bytes
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'cluster-size': 128, 'driver': 'parallels', 'file': 'node0', 'size': 67108864}}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"cluster-size": 128, "driver": "parallels", "file": "node0", "size": 67108864}}}
7711c0
+{"return": {}}
7711c0
 Job failed: Cluster size must be a multiple of 512 bytes
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'cluster-size': 4294967296, 'driver': 'parallels', 'file': 'node0', 'size': 67108864}}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"cluster-size": 4294967296, "driver": "parallels", "file": "node0", "size": 67108864}}}
7711c0
+{"return": {}}
7711c0
 Job failed: Cluster size is too large
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'cluster-size': 9223372036854775808L, 'driver': 'parallels', 'file': 'node0', 'size': 67108864}}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"cluster-size": 9223372036854775808, "driver": "parallels", "file": "node0", "size": 67108864}}}
7711c0
+{"return": {}}
7711c0
 Job failed: Cluster size is too large
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'cluster-size': 18446744073709551104L, 'driver': 'parallels', 'file': 'node0', 'size': 67108864}}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"cluster-size": 18446744073709551104, "driver": "parallels", "file": "node0", "size": 67108864}}}
7711c0
+{"return": {}}
7711c0
 Job failed: Cluster size is too large
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'cluster-size': 0, 'driver': 'parallels', 'file': 'node0', 'size': 67108864}}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"cluster-size": 0, "driver": "parallels", "file": "node0", "size": 67108864}}}
7711c0
+{"return": {}}
7711c0
 Job failed: Image size is too large for this cluster size
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'cluster-size': 512, 'driver': 'parallels', 'file': 'node0', 'size': 281474976710656}}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"cluster-size": 512, "driver": "parallels", "file": "node0", "size": 281474976710656}}}
7711c0
+{"return": {}}
7711c0
 Job failed: Image size is too large for this cluster size
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
diff --git a/tests/qemu-iotests/213.out b/tests/qemu-iotests/213.out
7711c0
index e1dcd47..0c9d65b 100644
7711c0
--- a/tests/qemu-iotests/213.out
7711c0
+++ b/tests/qemu-iotests/213.out
7711c0
@@ -1,16 +1,16 @@
7711c0
 === Successful image creation (defaults) ===
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'size': 0, 'driver': 'file', 'filename': 'TEST_DIR/PID-t.vhdx'}}}
7711c0
-{u'return': {}}
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
-
7711c0
-{'execute': 'blockdev-add', 'arguments': {'node_name': 'imgfile', 'driver': 'file', 'filename': 'TEST_DIR/PID-t.vhdx'}}
7711c0
-{u'return': {}}
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'vhdx', 'file': 'imgfile', 'size': 134217728}}}
7711c0
-{u'return': {}}
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "file", "filename": "TEST_DIR/PID-t.vhdx", "size": 0}}}
7711c0
+{"return": {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
+
7711c0
+{"execute": "blockdev-add", "arguments": {"driver": "file", "filename": "TEST_DIR/PID-t.vhdx", "node_name": "imgfile"}}
7711c0
+{"return": {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "vhdx", "file": "imgfile", "size": 134217728}}}
7711c0
+{"return": {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
 image: TEST_IMG
7711c0
 file format: IMGFMT
7711c0
@@ -19,15 +19,15 @@ cluster_size: 8388608
7711c0
 
7711c0
 === Successful image creation (explicit defaults) ===
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'size': 0, 'driver': 'file', 'filename': 'TEST_DIR/PID-t.vhdx'}}}
7711c0
-{u'return': {}}
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "file", "filename": "TEST_DIR/PID-t.vhdx", "size": 0}}}
7711c0
+{"return": {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'block-size': 8388608, 'driver': 'vhdx', 'subformat': 'dynamic', 'log-size': 1048576, 'file': {'driver': 'file', 'filename': 'TEST_DIR/PID-t.vhdx'}, 'block-state-zero': True, 'size': 67108864}}}
7711c0
-{u'return': {}}
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"block-size": 8388608, "block-state-zero": true, "driver": "vhdx", "file": {"driver": "file", "filename": "TEST_DIR/PID-t.vhdx"}, "log-size": 1048576, "size": 67108864, "subformat": "dynamic"}}}
7711c0
+{"return": {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
 image: TEST_IMG
7711c0
 file format: IMGFMT
7711c0
@@ -36,15 +36,15 @@ cluster_size: 8388608
7711c0
 
7711c0
 === Successful image creation (with non-default options) ===
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'size': 0, 'driver': 'file', 'filename': 'TEST_DIR/PID-t.vhdx'}}}
7711c0
-{u'return': {}}
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "file", "filename": "TEST_DIR/PID-t.vhdx", "size": 0}}}
7711c0
+{"return": {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'block-size': 268435456, 'driver': 'vhdx', 'subformat': 'fixed', 'log-size': 8388608, 'file': {'driver': 'file', 'filename': 'TEST_DIR/PID-t.vhdx'}, 'block-state-zero': False, 'size': 33554432}}}
7711c0
-{u'return': {}}
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"block-size": 268435456, "block-state-zero": false, "driver": "vhdx", "file": {"driver": "file", "filename": "TEST_DIR/PID-t.vhdx"}, "log-size": 8388608, "size": 33554432, "subformat": "fixed"}}}
7711c0
+{"return": {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
 image: TEST_IMG
7711c0
 file format: IMGFMT
7711c0
@@ -53,18 +53,18 @@ cluster_size: 268435456
7711c0
 
7711c0
 === Invalid BlockdevRef ===
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'vhdx', 'file': "this doesn't exist", 'size': 33554432}}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "vhdx", "file": "this doesn't exist", "size": 33554432}}}
7711c0
+{"return": {}}
7711c0
 Job failed: Cannot find device=this doesn't exist nor node_name=this doesn't exist
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
 === Zero size ===
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'vhdx', 'file': 'node0', 'size': 0}}}
7711c0
-{u'return': {}}
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "vhdx", "file": "node0", "size": 0}}}
7711c0
+{"return": {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
 image: TEST_IMG
7711c0
 file format: IMGFMT
7711c0
@@ -73,10 +73,10 @@ cluster_size: 8388608
7711c0
 
7711c0
 === Maximum size ===
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'vhdx', 'file': 'node0', 'size': 70368744177664}}}
7711c0
-{u'return': {}}
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "vhdx", "file": "node0", "size": 70368744177664}}}
7711c0
+{"return": {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
 image: TEST_IMG
7711c0
 file format: IMGFMT
7711c0
@@ -85,85 +85,85 @@ cluster_size: 67108864
7711c0
 
7711c0
 === Invalid sizes ===
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'vhdx', 'file': 'node0', 'size': 18446744073709551104L}}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "vhdx", "file": "node0", "size": 18446744073709551104}}}
7711c0
+{"return": {}}
7711c0
 Job failed: Image size too large; max of 64TB
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'vhdx', 'file': 'node0', 'size': 9223372036854775808L}}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "vhdx", "file": "node0", "size": 9223372036854775808}}}
7711c0
+{"return": {}}
7711c0
 Job failed: Image size too large; max of 64TB
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'vhdx', 'file': 'node0', 'size': 9223372036854775296}}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "vhdx", "file": "node0", "size": 9223372036854775296}}}
7711c0
+{"return": {}}
7711c0
 Job failed: Image size too large; max of 64TB
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'vhdx', 'file': 'node0', 'size': 70368744177665}}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "vhdx", "file": "node0", "size": 70368744177665}}}
7711c0
+{"return": {}}
7711c0
 Job failed: Image size too large; max of 64TB
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
 === Invalid block size ===
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'vhdx', 'block-size': 1234567, 'file': 'node0', 'size': 67108864}}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"block-size": 1234567, "driver": "vhdx", "file": "node0", "size": 67108864}}}
7711c0
+{"return": {}}
7711c0
 Job failed: Block size must be a multiple of 1 MB
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'vhdx', 'block-size': 128, 'file': 'node0', 'size': 67108864}}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"block-size": 128, "driver": "vhdx", "file": "node0", "size": 67108864}}}
7711c0
+{"return": {}}
7711c0
 Job failed: Block size must be a multiple of 1 MB
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'vhdx', 'block-size': 3145728, 'file': 'node0', 'size': 67108864}}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"block-size": 3145728, "driver": "vhdx", "file": "node0", "size": 67108864}}}
7711c0
+{"return": {}}
7711c0
 Job failed: Block size must be a power of two
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'vhdx', 'block-size': 536870912, 'file': 'node0', 'size': 67108864}}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"block-size": 536870912, "driver": "vhdx", "file": "node0", "size": 67108864}}}
7711c0
+{"return": {}}
7711c0
 Job failed: Block size must not exceed 268435456
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'driver': 'vhdx', 'block-size': 0, 'file': 'node0', 'size': 67108864}}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"block-size": 0, "driver": "vhdx", "file": "node0", "size": 67108864}}}
7711c0
+{"return": {}}
7711c0
 Job failed: Block size must be a multiple of 1 MB
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
 === Invalid log size ===
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'log-size': 1234567, 'driver': 'vhdx', 'file': 'node0', 'size': 67108864}}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "vhdx", "file": "node0", "log-size": 1234567, "size": 67108864}}}
7711c0
+{"return": {}}
7711c0
 Job failed: Log size must be a multiple of 1 MB
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'log-size': 128, 'driver': 'vhdx', 'file': 'node0', 'size': 67108864}}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "vhdx", "file": "node0", "log-size": 128, "size": 67108864}}}
7711c0
+{"return": {}}
7711c0
 Job failed: Log size must be a multiple of 1 MB
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'log-size': 4294967296, 'driver': 'vhdx', 'file': 'node0', 'size': 67108864}}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "vhdx", "file": "node0", "log-size": 4294967296, "size": 67108864}}}
7711c0
+{"return": {}}
7711c0
 Job failed: Log size must be smaller than 4 GB
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
-{'execute': 'blockdev-create', 'arguments': {'job_id': 'job0', 'options': {'log-size': 0, 'driver': 'vhdx', 'file': 'node0', 'size': 67108864}}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "blockdev-create", "arguments": {"job_id": "job0", "options": {"driver": "vhdx", "file": "node0", "log-size": 0, "size": 67108864}}}
7711c0
+{"return": {}}
7711c0
 Job failed: Log size must be a multiple of 1 MB
7711c0
-{'execute': 'job-dismiss', 'arguments': {'id': 'job0'}}
7711c0
-{u'return': {}}
7711c0
+{"execute": "job-dismiss", "arguments": {"id": "job0"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
diff --git a/tests/qemu-iotests/216.out b/tests/qemu-iotests/216.out
7711c0
index 45ea857..a70aa5c 100644
7711c0
--- a/tests/qemu-iotests/216.out
7711c0
+++ b/tests/qemu-iotests/216.out
7711c0
@@ -7,8 +7,8 @@ Done
7711c0
 
7711c0
 --- Doing COR ---
7711c0
 
7711c0
-{u'return': {}}
7711c0
-{u'return': u''}
7711c0
+{"return": {}}
7711c0
+{"return": ""}
7711c0
 
7711c0
 --- Checking COR result ---
7711c0
 
7711c0
diff --git a/tests/qemu-iotests/218.out b/tests/qemu-iotests/218.out
7711c0
index 7dbf78e..825a657 100644
7711c0
--- a/tests/qemu-iotests/218.out
7711c0
+++ b/tests/qemu-iotests/218.out
7711c0
@@ -4,27 +4,27 @@
7711c0
 --- force=false ---
7711c0
 
7711c0
 Cancelling job
7711c0
-{u'return': {}}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'device': u'mirror', u'type': u'mirror', u'speed': 65536, u'len': 1048576, u'offset': 65536}, u'event': u'BLOCK_JOB_CANCELLED'}
7711c0
+{"return": {}}
7711c0
+{"data": {"device": "mirror", "len": 1048576, "offset": 65536, "speed": 65536, "type": "mirror"}, "event": "BLOCK_JOB_CANCELLED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
 
7711c0
 --- force=true ---
7711c0
 
7711c0
 Cancelling job
7711c0
-{u'return': {}}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'device': u'mirror', u'type': u'mirror', u'speed': 65536, u'len': 1048576, u'offset': 65536}, u'event': u'BLOCK_JOB_CANCELLED'}
7711c0
+{"return": {}}
7711c0
+{"data": {"device": "mirror", "len": 1048576, "offset": 65536, "speed": 65536, "type": "mirror"}, "event": "BLOCK_JOB_CANCELLED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
 
7711c0
 === Cancel mirror job after convergence ===
7711c0
 
7711c0
 --- force=false ---
7711c0
 
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'device': u'mirror', u'type': u'mirror', u'speed': 0, u'len': 1048576, u'offset': 1048576}, u'event': u'BLOCK_JOB_READY'}
7711c0
+{"data": {"device": "mirror", "len": 1048576, "offset": 1048576, "speed": 0, "type": "mirror"}, "event": "BLOCK_JOB_READY", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
 Cancelling job
7711c0
-{u'return': {}}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'device': u'mirror', u'type': u'mirror', u'speed': 0, u'len': 1048576, u'offset': 1048576}, u'event': u'BLOCK_JOB_COMPLETED'}
7711c0
+{"return": {}}
7711c0
+{"data": {"device": "mirror", "len": 1048576, "offset": 1048576, "speed": 0, "type": "mirror"}, "event": "BLOCK_JOB_COMPLETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
 
7711c0
 --- force=true ---
7711c0
 
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'device': u'mirror', u'type': u'mirror', u'speed': 0, u'len': 1048576, u'offset': 1048576}, u'event': u'BLOCK_JOB_READY'}
7711c0
+{"data": {"device": "mirror", "len": 1048576, "offset": 1048576, "speed": 0, "type": "mirror"}, "event": "BLOCK_JOB_READY", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
 Cancelling job
7711c0
-{u'return': {}}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'device': u'mirror', u'type': u'mirror', u'speed': 0, u'len': 1048576, u'offset': 1048576}, u'event': u'BLOCK_JOB_CANCELLED'}
7711c0
+{"return": {}}
7711c0
+{"data": {"device": "mirror", "len": 1048576, "offset": 1048576, "speed": 0, "type": "mirror"}, "event": "BLOCK_JOB_CANCELLED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
diff --git a/tests/qemu-iotests/219.out b/tests/qemu-iotests/219.out
7711c0
index 6dc07bc..8ebd3fe 100644
7711c0
--- a/tests/qemu-iotests/219.out
7711c0
+++ b/tests/qemu-iotests/219.out
7711c0
@@ -2,326 +2,326 @@ Launching VM...
7711c0
 
7711c0
 
7711c0
 Starting block job: drive-mirror (auto-finalize: True; auto-dismiss: True)
7711c0
-{u'return': {}}
7711c0
-{u'return': [{u'status': u'running', u'current-progress': 'FILTERED', u'total-progress': 'FILTERED', u'id': u'job0', u'type': u'mirror'}]}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'created', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'running', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
+{"return": {}}
7711c0
+{"return": [{"current-progress": "FILTERED", "id": "job0", "status": "running", "total-progress": "FILTERED", "type": "mirror"}]}
7711c0
+{"data": {"id": "job0", "status": "created"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"data": {"id": "job0", "status": "running"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
 
7711c0
 Pause/resume in RUNNING
7711c0
 === Testing block-job-pause/block-job-resume ===
7711c0
-{u'return': {}}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'paused', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'return': [{u'status': u'paused', u'current-progress': 65536, u'total-progress': 4194304, u'id': u'job0', u'type': u'mirror'}]}
7711c0
-{u'return': {}}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'running', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'return': [{u'status': u'running', u'current-progress': 131072, u'total-progress': 4194304, u'id': u'job0', u'type': u'mirror'}]}
7711c0
+{"return": {}}
7711c0
+{"data": {"id": "job0", "status": "paused"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"return": [{"current-progress": 65536, "id": "job0", "status": "paused", "total-progress": 4194304, "type": "mirror"}]}
7711c0
+{"return": {}}
7711c0
+{"data": {"id": "job0", "status": "running"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"return": [{"current-progress": 131072, "id": "job0", "status": "running", "total-progress": 4194304, "type": "mirror"}]}
7711c0
 === Testing block-job-pause/job-resume ===
7711c0
-{u'return': {}}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'paused', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'return': [{u'status': u'paused', u'current-progress': 131072, u'total-progress': 4194304, u'id': u'job0', u'type': u'mirror'}]}
7711c0
-{u'return': {}}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'running', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'return': [{u'status': u'running', u'current-progress': 196608, u'total-progress': 4194304, u'id': u'job0', u'type': u'mirror'}]}
7711c0
+{"return": {}}
7711c0
+{"data": {"id": "job0", "status": "paused"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"return": [{"current-progress": 131072, "id": "job0", "status": "paused", "total-progress": 4194304, "type": "mirror"}]}
7711c0
+{"return": {}}
7711c0
+{"data": {"id": "job0", "status": "running"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"return": [{"current-progress": 196608, "id": "job0", "status": "running", "total-progress": 4194304, "type": "mirror"}]}
7711c0
 === Testing job-pause/block-job-resume ===
7711c0
-{u'return': {}}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'paused', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'return': [{u'status': u'paused', u'current-progress': 196608, u'total-progress': 4194304, u'id': u'job0', u'type': u'mirror'}]}
7711c0
-{u'return': {}}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'running', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'return': [{u'status': u'running', u'current-progress': 262144, u'total-progress': 4194304, u'id': u'job0', u'type': u'mirror'}]}
7711c0
+{"return": {}}
7711c0
+{"data": {"id": "job0", "status": "paused"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"return": [{"current-progress": 196608, "id": "job0", "status": "paused", "total-progress": 4194304, "type": "mirror"}]}
7711c0
+{"return": {}}
7711c0
+{"data": {"id": "job0", "status": "running"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"return": [{"current-progress": 262144, "id": "job0", "status": "running", "total-progress": 4194304, "type": "mirror"}]}
7711c0
 === Testing job-pause/job-resume ===
7711c0
-{u'return': {}}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'paused', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'return': [{u'status': u'paused', u'current-progress': 262144, u'total-progress': 4194304, u'id': u'job0', u'type': u'mirror'}]}
7711c0
-{u'return': {}}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'running', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'return': [{u'status': u'running', u'current-progress': 327680, u'total-progress': 4194304, u'id': u'job0', u'type': u'mirror'}]}
7711c0
-{u'error': {u'class': u'GenericError', u'desc': u"Job 'job0' in state 'running' cannot accept command verb 'complete'"}}
7711c0
-{u'error': {u'class': u'GenericError', u'desc': u"Job 'job0' in state 'running' cannot accept command verb 'finalize'"}}
7711c0
-{u'error': {u'class': u'GenericError', u'desc': u"Job 'job0' in state 'running' cannot accept command verb 'dismiss'"}}
7711c0
-{u'error': {u'class': u'GenericError', u'desc': u"Job 'job0' in state 'running' cannot accept command verb 'complete'"}}
7711c0
-{u'error': {u'class': u'GenericError', u'desc': u"Job 'job0' in state 'running' cannot accept command verb 'finalize'"}}
7711c0
-{u'error': {u'class': u'GenericError', u'desc': u"Job 'job0' in state 'running' cannot accept command verb 'dismiss'"}}
7711c0
-{u'return': {}}
7711c0
+{"return": {}}
7711c0
+{"data": {"id": "job0", "status": "paused"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"return": [{"current-progress": 262144, "id": "job0", "status": "paused", "total-progress": 4194304, "type": "mirror"}]}
7711c0
+{"return": {}}
7711c0
+{"data": {"id": "job0", "status": "running"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"return": [{"current-progress": 327680, "id": "job0", "status": "running", "total-progress": 4194304, "type": "mirror"}]}
7711c0
+{"error": {"class": "GenericError", "desc": "Job 'job0' in state 'running' cannot accept command verb 'complete'"}}
7711c0
+{"error": {"class": "GenericError", "desc": "Job 'job0' in state 'running' cannot accept command verb 'finalize'"}}
7711c0
+{"error": {"class": "GenericError", "desc": "Job 'job0' in state 'running' cannot accept command verb 'dismiss'"}}
7711c0
+{"error": {"class": "GenericError", "desc": "Job 'job0' in state 'running' cannot accept command verb 'complete'"}}
7711c0
+{"error": {"class": "GenericError", "desc": "Job 'job0' in state 'running' cannot accept command verb 'finalize'"}}
7711c0
+{"error": {"class": "GenericError", "desc": "Job 'job0' in state 'running' cannot accept command verb 'dismiss'"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
 Waiting for READY state...
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'ready', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'return': [{u'status': u'ready', u'current-progress': 4194304, u'total-progress': 4194304, u'id': u'job0', u'type': u'mirror'}]}
7711c0
+{"data": {"id": "job0", "status": "ready"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"return": [{"current-progress": 4194304, "id": "job0", "status": "ready", "total-progress": 4194304, "type": "mirror"}]}
7711c0
 
7711c0
 Pause/resume in READY
7711c0
 === Testing block-job-pause/block-job-resume ===
7711c0
-{u'return': {}}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'standby', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'return': [{u'status': u'standby', u'current-progress': 4194304, u'total-progress': 4194304, u'id': u'job0', u'type': u'mirror'}]}
7711c0
-{u'return': {}}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'ready', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'return': [{u'status': u'ready', u'current-progress': 4194304, u'total-progress': 4194304, u'id': u'job0', u'type': u'mirror'}]}
7711c0
+{"return": {}}
7711c0
+{"data": {"id": "job0", "status": "standby"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"return": [{"current-progress": 4194304, "id": "job0", "status": "standby", "total-progress": 4194304, "type": "mirror"}]}
7711c0
+{"return": {}}
7711c0
+{"data": {"id": "job0", "status": "ready"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"return": [{"current-progress": 4194304, "id": "job0", "status": "ready", "total-progress": 4194304, "type": "mirror"}]}
7711c0
 === Testing block-job-pause/job-resume ===
7711c0
-{u'return': {}}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'standby', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'return': [{u'status': u'standby', u'current-progress': 4194304, u'total-progress': 4194304, u'id': u'job0', u'type': u'mirror'}]}
7711c0
-{u'return': {}}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'ready', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'return': [{u'status': u'ready', u'current-progress': 4194304, u'total-progress': 4194304, u'id': u'job0', u'type': u'mirror'}]}
7711c0
+{"return": {}}
7711c0
+{"data": {"id": "job0", "status": "standby"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"return": [{"current-progress": 4194304, "id": "job0", "status": "standby", "total-progress": 4194304, "type": "mirror"}]}
7711c0
+{"return": {}}
7711c0
+{"data": {"id": "job0", "status": "ready"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"return": [{"current-progress": 4194304, "id": "job0", "status": "ready", "total-progress": 4194304, "type": "mirror"}]}
7711c0
 === Testing job-pause/block-job-resume ===
7711c0
-{u'return': {}}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'standby', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'return': [{u'status': u'standby', u'current-progress': 4194304, u'total-progress': 4194304, u'id': u'job0', u'type': u'mirror'}]}
7711c0
-{u'return': {}}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'ready', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'return': [{u'status': u'ready', u'current-progress': 4194304, u'total-progress': 4194304, u'id': u'job0', u'type': u'mirror'}]}
7711c0
+{"return": {}}
7711c0
+{"data": {"id": "job0", "status": "standby"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"return": [{"current-progress": 4194304, "id": "job0", "status": "standby", "total-progress": 4194304, "type": "mirror"}]}
7711c0
+{"return": {}}
7711c0
+{"data": {"id": "job0", "status": "ready"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"return": [{"current-progress": 4194304, "id": "job0", "status": "ready", "total-progress": 4194304, "type": "mirror"}]}
7711c0
 === Testing job-pause/job-resume ===
7711c0
-{u'return': {}}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'standby', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'return': [{u'status': u'standby', u'current-progress': 4194304, u'total-progress': 4194304, u'id': u'job0', u'type': u'mirror'}]}
7711c0
-{u'return': {}}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'ready', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'return': [{u'status': u'ready', u'current-progress': 4194304, u'total-progress': 4194304, u'id': u'job0', u'type': u'mirror'}]}
7711c0
-{u'error': {u'class': u'GenericError', u'desc': u"Job 'job0' in state 'ready' cannot accept command verb 'finalize'"}}
7711c0
-{u'error': {u'class': u'GenericError', u'desc': u"Job 'job0' in state 'ready' cannot accept command verb 'dismiss'"}}
7711c0
-{u'error': {u'class': u'GenericError', u'desc': u"Job 'job0' in state 'ready' cannot accept command verb 'finalize'"}}
7711c0
-{u'error': {u'class': u'GenericError', u'desc': u"Job 'job0' in state 'ready' cannot accept command verb 'dismiss'"}}
7711c0
-{u'return': {}}
7711c0
+{"return": {}}
7711c0
+{"data": {"id": "job0", "status": "standby"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"return": [{"current-progress": 4194304, "id": "job0", "status": "standby", "total-progress": 4194304, "type": "mirror"}]}
7711c0
+{"return": {}}
7711c0
+{"data": {"id": "job0", "status": "ready"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"return": [{"current-progress": 4194304, "id": "job0", "status": "ready", "total-progress": 4194304, "type": "mirror"}]}
7711c0
+{"error": {"class": "GenericError", "desc": "Job 'job0' in state 'ready' cannot accept command verb 'finalize'"}}
7711c0
+{"error": {"class": "GenericError", "desc": "Job 'job0' in state 'ready' cannot accept command verb 'dismiss'"}}
7711c0
+{"error": {"class": "GenericError", "desc": "Job 'job0' in state 'ready' cannot accept command verb 'finalize'"}}
7711c0
+{"error": {"class": "GenericError", "desc": "Job 'job0' in state 'ready' cannot accept command verb 'dismiss'"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
 Waiting for PENDING state...
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'waiting', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'pending', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'concluded', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'null', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'return': []}
7711c0
+{"data": {"id": "job0", "status": "waiting"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"data": {"id": "job0", "status": "pending"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"data": {"id": "job0", "status": "concluded"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"data": {"id": "job0", "status": "null"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"return": []}
7711c0
 
7711c0
 
7711c0
 Starting block job: drive-backup (auto-finalize: True; auto-dismiss: True)
7711c0
-{u'return': {}}
7711c0
-{u'return': [{u'status': u'running', u'current-progress': 'FILTERED', u'total-progress': 'FILTERED', u'id': u'job0', u'type': u'backup'}]}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'created', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'running', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
+{"return": {}}
7711c0
+{"return": [{"current-progress": "FILTERED", "id": "job0", "status": "running", "total-progress": "FILTERED", "type": "backup"}]}
7711c0
+{"data": {"id": "job0", "status": "created"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"data": {"id": "job0", "status": "running"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
 
7711c0
 Pause/resume in RUNNING
7711c0
 === Testing block-job-pause/block-job-resume ===
7711c0
-{u'return': {}}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'paused', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'return': [{u'status': u'paused', u'current-progress': 65536, u'total-progress': 4194304, u'id': u'job0', u'type': u'backup'}]}
7711c0
-{u'return': {}}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'running', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'return': [{u'status': u'running', u'current-progress': 131072, u'total-progress': 4194304, u'id': u'job0', u'type': u'backup'}]}
7711c0
+{"return": {}}
7711c0
+{"data": {"id": "job0", "status": "paused"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"return": [{"current-progress": 65536, "id": "job0", "status": "paused", "total-progress": 4194304, "type": "backup"}]}
7711c0
+{"return": {}}
7711c0
+{"data": {"id": "job0", "status": "running"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"return": [{"current-progress": 131072, "id": "job0", "status": "running", "total-progress": 4194304, "type": "backup"}]}
7711c0
 === Testing block-job-pause/job-resume ===
7711c0
-{u'return': {}}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'paused', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'return': [{u'status': u'paused', u'current-progress': 131072, u'total-progress': 4194304, u'id': u'job0', u'type': u'backup'}]}
7711c0
-{u'return': {}}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'running', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'return': [{u'status': u'running', u'current-progress': 196608, u'total-progress': 4194304, u'id': u'job0', u'type': u'backup'}]}
7711c0
+{"return": {}}
7711c0
+{"data": {"id": "job0", "status": "paused"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"return": [{"current-progress": 131072, "id": "job0", "status": "paused", "total-progress": 4194304, "type": "backup"}]}
7711c0
+{"return": {}}
7711c0
+{"data": {"id": "job0", "status": "running"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"return": [{"current-progress": 196608, "id": "job0", "status": "running", "total-progress": 4194304, "type": "backup"}]}
7711c0
 === Testing job-pause/block-job-resume ===
7711c0
-{u'return': {}}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'paused', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'return': [{u'status': u'paused', u'current-progress': 196608, u'total-progress': 4194304, u'id': u'job0', u'type': u'backup'}]}
7711c0
-{u'return': {}}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'running', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'return': [{u'status': u'running', u'current-progress': 262144, u'total-progress': 4194304, u'id': u'job0', u'type': u'backup'}]}
7711c0
+{"return": {}}
7711c0
+{"data": {"id": "job0", "status": "paused"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"return": [{"current-progress": 196608, "id": "job0", "status": "paused", "total-progress": 4194304, "type": "backup"}]}
7711c0
+{"return": {}}
7711c0
+{"data": {"id": "job0", "status": "running"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"return": [{"current-progress": 262144, "id": "job0", "status": "running", "total-progress": 4194304, "type": "backup"}]}
7711c0
 === Testing job-pause/job-resume ===
7711c0
-{u'return': {}}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'paused', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'return': [{u'status': u'paused', u'current-progress': 262144, u'total-progress': 4194304, u'id': u'job0', u'type': u'backup'}]}
7711c0
-{u'return': {}}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'running', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'return': [{u'status': u'running', u'current-progress': 327680, u'total-progress': 4194304, u'id': u'job0', u'type': u'backup'}]}
7711c0
-{u'error': {u'class': u'GenericError', u'desc': u"Job 'job0' in state 'running' cannot accept command verb 'complete'"}}
7711c0
-{u'error': {u'class': u'GenericError', u'desc': u"Job 'job0' in state 'running' cannot accept command verb 'finalize'"}}
7711c0
-{u'error': {u'class': u'GenericError', u'desc': u"Job 'job0' in state 'running' cannot accept command verb 'dismiss'"}}
7711c0
-{u'error': {u'class': u'GenericError', u'desc': u"Job 'job0' in state 'running' cannot accept command verb 'complete'"}}
7711c0
-{u'error': {u'class': u'GenericError', u'desc': u"Job 'job0' in state 'running' cannot accept command verb 'finalize'"}}
7711c0
-{u'error': {u'class': u'GenericError', u'desc': u"Job 'job0' in state 'running' cannot accept command verb 'dismiss'"}}
7711c0
-{u'return': {}}
7711c0
+{"return": {}}
7711c0
+{"data": {"id": "job0", "status": "paused"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"return": [{"current-progress": 262144, "id": "job0", "status": "paused", "total-progress": 4194304, "type": "backup"}]}
7711c0
+{"return": {}}
7711c0
+{"data": {"id": "job0", "status": "running"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"return": [{"current-progress": 327680, "id": "job0", "status": "running", "total-progress": 4194304, "type": "backup"}]}
7711c0
+{"error": {"class": "GenericError", "desc": "Job 'job0' in state 'running' cannot accept command verb 'complete'"}}
7711c0
+{"error": {"class": "GenericError", "desc": "Job 'job0' in state 'running' cannot accept command verb 'finalize'"}}
7711c0
+{"error": {"class": "GenericError", "desc": "Job 'job0' in state 'running' cannot accept command verb 'dismiss'"}}
7711c0
+{"error": {"class": "GenericError", "desc": "Job 'job0' in state 'running' cannot accept command verb 'complete'"}}
7711c0
+{"error": {"class": "GenericError", "desc": "Job 'job0' in state 'running' cannot accept command verb 'finalize'"}}
7711c0
+{"error": {"class": "GenericError", "desc": "Job 'job0' in state 'running' cannot accept command verb 'dismiss'"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
 Waiting for PENDING state...
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'waiting', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'pending', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'concluded', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'null', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'return': []}
7711c0
+{"data": {"id": "job0", "status": "waiting"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"data": {"id": "job0", "status": "pending"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"data": {"id": "job0", "status": "concluded"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"data": {"id": "job0", "status": "null"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"return": []}
7711c0
 
7711c0
 
7711c0
 Starting block job: drive-backup (auto-finalize: True; auto-dismiss: False)
7711c0
-{u'return': {}}
7711c0
-{u'return': [{u'status': u'running', u'current-progress': 'FILTERED', u'total-progress': 'FILTERED', u'id': u'job0', u'type': u'backup'}]}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'created', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'running', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
+{"return": {}}
7711c0
+{"return": [{"current-progress": "FILTERED", "id": "job0", "status": "running", "total-progress": "FILTERED", "type": "backup"}]}
7711c0
+{"data": {"id": "job0", "status": "created"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"data": {"id": "job0", "status": "running"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
 
7711c0
 Pause/resume in RUNNING
7711c0
 === Testing block-job-pause/block-job-resume ===
7711c0
-{u'return': {}}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'paused', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'return': [{u'status': u'paused', u'current-progress': 65536, u'total-progress': 4194304, u'id': u'job0', u'type': u'backup'}]}
7711c0
-{u'return': {}}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'running', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'return': [{u'status': u'running', u'current-progress': 131072, u'total-progress': 4194304, u'id': u'job0', u'type': u'backup'}]}
7711c0
+{"return": {}}
7711c0
+{"data": {"id": "job0", "status": "paused"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"return": [{"current-progress": 65536, "id": "job0", "status": "paused", "total-progress": 4194304, "type": "backup"}]}
7711c0
+{"return": {}}
7711c0
+{"data": {"id": "job0", "status": "running"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"return": [{"current-progress": 131072, "id": "job0", "status": "running", "total-progress": 4194304, "type": "backup"}]}
7711c0
 === Testing block-job-pause/job-resume ===
7711c0
-{u'return': {}}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'paused', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'return': [{u'status': u'paused', u'current-progress': 131072, u'total-progress': 4194304, u'id': u'job0', u'type': u'backup'}]}
7711c0
-{u'return': {}}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'running', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'return': [{u'status': u'running', u'current-progress': 196608, u'total-progress': 4194304, u'id': u'job0', u'type': u'backup'}]}
7711c0
+{"return": {}}
7711c0
+{"data": {"id": "job0", "status": "paused"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"return": [{"current-progress": 131072, "id": "job0", "status": "paused", "total-progress": 4194304, "type": "backup"}]}
7711c0
+{"return": {}}
7711c0
+{"data": {"id": "job0", "status": "running"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"return": [{"current-progress": 196608, "id": "job0", "status": "running", "total-progress": 4194304, "type": "backup"}]}
7711c0
 === Testing job-pause/block-job-resume ===
7711c0
-{u'return': {}}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'paused', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'return': [{u'status': u'paused', u'current-progress': 196608, u'total-progress': 4194304, u'id': u'job0', u'type': u'backup'}]}
7711c0
-{u'return': {}}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'running', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'return': [{u'status': u'running', u'current-progress': 262144, u'total-progress': 4194304, u'id': u'job0', u'type': u'backup'}]}
7711c0
+{"return": {}}
7711c0
+{"data": {"id": "job0", "status": "paused"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"return": [{"current-progress": 196608, "id": "job0", "status": "paused", "total-progress": 4194304, "type": "backup"}]}
7711c0
+{"return": {}}
7711c0
+{"data": {"id": "job0", "status": "running"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"return": [{"current-progress": 262144, "id": "job0", "status": "running", "total-progress": 4194304, "type": "backup"}]}
7711c0
 === Testing job-pause/job-resume ===
7711c0
-{u'return': {}}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'paused', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'return': [{u'status': u'paused', u'current-progress': 262144, u'total-progress': 4194304, u'id': u'job0', u'type': u'backup'}]}
7711c0
-{u'return': {}}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'running', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'return': [{u'status': u'running', u'current-progress': 327680, u'total-progress': 4194304, u'id': u'job0', u'type': u'backup'}]}
7711c0
-{u'error': {u'class': u'GenericError', u'desc': u"Job 'job0' in state 'running' cannot accept command verb 'complete'"}}
7711c0
-{u'error': {u'class': u'GenericError', u'desc': u"Job 'job0' in state 'running' cannot accept command verb 'finalize'"}}
7711c0
-{u'error': {u'class': u'GenericError', u'desc': u"Job 'job0' in state 'running' cannot accept command verb 'dismiss'"}}
7711c0
-{u'error': {u'class': u'GenericError', u'desc': u"Job 'job0' in state 'running' cannot accept command verb 'complete'"}}
7711c0
-{u'error': {u'class': u'GenericError', u'desc': u"Job 'job0' in state 'running' cannot accept command verb 'finalize'"}}
7711c0
-{u'error': {u'class': u'GenericError', u'desc': u"Job 'job0' in state 'running' cannot accept command verb 'dismiss'"}}
7711c0
-{u'return': {}}
7711c0
+{"return": {}}
7711c0
+{"data": {"id": "job0", "status": "paused"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"return": [{"current-progress": 262144, "id": "job0", "status": "paused", "total-progress": 4194304, "type": "backup"}]}
7711c0
+{"return": {}}
7711c0
+{"data": {"id": "job0", "status": "running"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"return": [{"current-progress": 327680, "id": "job0", "status": "running", "total-progress": 4194304, "type": "backup"}]}
7711c0
+{"error": {"class": "GenericError", "desc": "Job 'job0' in state 'running' cannot accept command verb 'complete'"}}
7711c0
+{"error": {"class": "GenericError", "desc": "Job 'job0' in state 'running' cannot accept command verb 'finalize'"}}
7711c0
+{"error": {"class": "GenericError", "desc": "Job 'job0' in state 'running' cannot accept command verb 'dismiss'"}}
7711c0
+{"error": {"class": "GenericError", "desc": "Job 'job0' in state 'running' cannot accept command verb 'complete'"}}
7711c0
+{"error": {"class": "GenericError", "desc": "Job 'job0' in state 'running' cannot accept command verb 'finalize'"}}
7711c0
+{"error": {"class": "GenericError", "desc": "Job 'job0' in state 'running' cannot accept command verb 'dismiss'"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
 Waiting for PENDING state...
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'waiting', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'pending', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'concluded', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'return': [{u'status': u'concluded', u'current-progress': 4194304, u'total-progress': 4194304, u'id': u'job0', u'type': u'backup'}]}
7711c0
-{u'error': {u'class': u'GenericError', u'desc': u"Job 'job0' in state 'concluded' cannot accept command verb 'pause'"}}
7711c0
-{u'error': {u'class': u'GenericError', u'desc': u"Job 'job0' in state 'concluded' cannot accept command verb 'complete'"}}
7711c0
-{u'error': {u'class': u'GenericError', u'desc': u"Job 'job0' in state 'concluded' cannot accept command verb 'finalize'"}}
7711c0
-{u'error': {u'class': u'GenericError', u'desc': u"Job 'job0' in state 'concluded' cannot accept command verb 'pause'"}}
7711c0
-{u'error': {u'class': u'GenericError', u'desc': u"Job 'job0' in state 'concluded' cannot accept command verb 'complete'"}}
7711c0
-{u'error': {u'class': u'GenericError', u'desc': u"Job 'job0' in state 'concluded' cannot accept command verb 'finalize'"}}
7711c0
-{u'return': {}}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'null', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'return': []}
7711c0
+{"data": {"id": "job0", "status": "waiting"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"data": {"id": "job0", "status": "pending"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"data": {"id": "job0", "status": "concluded"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"return": [{"current-progress": 4194304, "id": "job0", "status": "concluded", "total-progress": 4194304, "type": "backup"}]}
7711c0
+{"error": {"class": "GenericError", "desc": "Job 'job0' in state 'concluded' cannot accept command verb 'pause'"}}
7711c0
+{"error": {"class": "GenericError", "desc": "Job 'job0' in state 'concluded' cannot accept command verb 'complete'"}}
7711c0
+{"error": {"class": "GenericError", "desc": "Job 'job0' in state 'concluded' cannot accept command verb 'finalize'"}}
7711c0
+{"error": {"class": "GenericError", "desc": "Job 'job0' in state 'concluded' cannot accept command verb 'pause'"}}
7711c0
+{"error": {"class": "GenericError", "desc": "Job 'job0' in state 'concluded' cannot accept command verb 'complete'"}}
7711c0
+{"error": {"class": "GenericError", "desc": "Job 'job0' in state 'concluded' cannot accept command verb 'finalize'"}}
7711c0
+{"return": {}}
7711c0
+{"data": {"id": "job0", "status": "null"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"return": []}
7711c0
 
7711c0
 
7711c0
 Starting block job: drive-backup (auto-finalize: False; auto-dismiss: True)
7711c0
-{u'return': {}}
7711c0
-{u'return': [{u'status': u'running', u'current-progress': 'FILTERED', u'total-progress': 'FILTERED', u'id': u'job0', u'type': u'backup'}]}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'created', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'running', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
+{"return": {}}
7711c0
+{"return": [{"current-progress": "FILTERED", "id": "job0", "status": "running", "total-progress": "FILTERED", "type": "backup"}]}
7711c0
+{"data": {"id": "job0", "status": "created"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"data": {"id": "job0", "status": "running"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
 
7711c0
 Pause/resume in RUNNING
7711c0
 === Testing block-job-pause/block-job-resume ===
7711c0
-{u'return': {}}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'paused', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'return': [{u'status': u'paused', u'current-progress': 65536, u'total-progress': 4194304, u'id': u'job0', u'type': u'backup'}]}
7711c0
-{u'return': {}}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'running', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'return': [{u'status': u'running', u'current-progress': 131072, u'total-progress': 4194304, u'id': u'job0', u'type': u'backup'}]}
7711c0
+{"return": {}}
7711c0
+{"data": {"id": "job0", "status": "paused"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"return": [{"current-progress": 65536, "id": "job0", "status": "paused", "total-progress": 4194304, "type": "backup"}]}
7711c0
+{"return": {}}
7711c0
+{"data": {"id": "job0", "status": "running"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"return": [{"current-progress": 131072, "id": "job0", "status": "running", "total-progress": 4194304, "type": "backup"}]}
7711c0
 === Testing block-job-pause/job-resume ===
7711c0
-{u'return': {}}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'paused', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'return': [{u'status': u'paused', u'current-progress': 131072, u'total-progress': 4194304, u'id': u'job0', u'type': u'backup'}]}
7711c0
-{u'return': {}}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'running', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'return': [{u'status': u'running', u'current-progress': 196608, u'total-progress': 4194304, u'id': u'job0', u'type': u'backup'}]}
7711c0
+{"return": {}}
7711c0
+{"data": {"id": "job0", "status": "paused"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"return": [{"current-progress": 131072, "id": "job0", "status": "paused", "total-progress": 4194304, "type": "backup"}]}
7711c0
+{"return": {}}
7711c0
+{"data": {"id": "job0", "status": "running"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"return": [{"current-progress": 196608, "id": "job0", "status": "running", "total-progress": 4194304, "type": "backup"}]}
7711c0
 === Testing job-pause/block-job-resume ===
7711c0
-{u'return': {}}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'paused', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'return': [{u'status': u'paused', u'current-progress': 196608, u'total-progress': 4194304, u'id': u'job0', u'type': u'backup'}]}
7711c0
-{u'return': {}}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'running', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'return': [{u'status': u'running', u'current-progress': 262144, u'total-progress': 4194304, u'id': u'job0', u'type': u'backup'}]}
7711c0
+{"return": {}}
7711c0
+{"data": {"id": "job0", "status": "paused"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"return": [{"current-progress": 196608, "id": "job0", "status": "paused", "total-progress": 4194304, "type": "backup"}]}
7711c0
+{"return": {}}
7711c0
+{"data": {"id": "job0", "status": "running"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"return": [{"current-progress": 262144, "id": "job0", "status": "running", "total-progress": 4194304, "type": "backup"}]}
7711c0
 === Testing job-pause/job-resume ===
7711c0
-{u'return': {}}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'paused', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'return': [{u'status': u'paused', u'current-progress': 262144, u'total-progress': 4194304, u'id': u'job0', u'type': u'backup'}]}
7711c0
-{u'return': {}}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'running', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'return': [{u'status': u'running', u'current-progress': 327680, u'total-progress': 4194304, u'id': u'job0', u'type': u'backup'}]}
7711c0
-{u'error': {u'class': u'GenericError', u'desc': u"Job 'job0' in state 'running' cannot accept command verb 'complete'"}}
7711c0
-{u'error': {u'class': u'GenericError', u'desc': u"Job 'job0' in state 'running' cannot accept command verb 'finalize'"}}
7711c0
-{u'error': {u'class': u'GenericError', u'desc': u"Job 'job0' in state 'running' cannot accept command verb 'dismiss'"}}
7711c0
-{u'error': {u'class': u'GenericError', u'desc': u"Job 'job0' in state 'running' cannot accept command verb 'complete'"}}
7711c0
-{u'error': {u'class': u'GenericError', u'desc': u"Job 'job0' in state 'running' cannot accept command verb 'finalize'"}}
7711c0
-{u'error': {u'class': u'GenericError', u'desc': u"Job 'job0' in state 'running' cannot accept command verb 'dismiss'"}}
7711c0
-{u'return': {}}
7711c0
+{"return": {}}
7711c0
+{"data": {"id": "job0", "status": "paused"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"return": [{"current-progress": 262144, "id": "job0", "status": "paused", "total-progress": 4194304, "type": "backup"}]}
7711c0
+{"return": {}}
7711c0
+{"data": {"id": "job0", "status": "running"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"return": [{"current-progress": 327680, "id": "job0", "status": "running", "total-progress": 4194304, "type": "backup"}]}
7711c0
+{"error": {"class": "GenericError", "desc": "Job 'job0' in state 'running' cannot accept command verb 'complete'"}}
7711c0
+{"error": {"class": "GenericError", "desc": "Job 'job0' in state 'running' cannot accept command verb 'finalize'"}}
7711c0
+{"error": {"class": "GenericError", "desc": "Job 'job0' in state 'running' cannot accept command verb 'dismiss'"}}
7711c0
+{"error": {"class": "GenericError", "desc": "Job 'job0' in state 'running' cannot accept command verb 'complete'"}}
7711c0
+{"error": {"class": "GenericError", "desc": "Job 'job0' in state 'running' cannot accept command verb 'finalize'"}}
7711c0
+{"error": {"class": "GenericError", "desc": "Job 'job0' in state 'running' cannot accept command verb 'dismiss'"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
 Waiting for PENDING state...
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'waiting', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'pending', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'return': [{u'status': u'pending', u'current-progress': 4194304, u'total-progress': 4194304, u'id': u'job0', u'type': u'backup'}]}
7711c0
-{u'error': {u'class': u'GenericError', u'desc': u"Job 'job0' in state 'pending' cannot accept command verb 'pause'"}}
7711c0
-{u'error': {u'class': u'GenericError', u'desc': u"Job 'job0' in state 'pending' cannot accept command verb 'complete'"}}
7711c0
-{u'error': {u'class': u'GenericError', u'desc': u"Job 'job0' in state 'pending' cannot accept command verb 'dismiss'"}}
7711c0
-{u'error': {u'class': u'GenericError', u'desc': u"Job 'job0' in state 'pending' cannot accept command verb 'pause'"}}
7711c0
-{u'error': {u'class': u'GenericError', u'desc': u"Job 'job0' in state 'pending' cannot accept command verb 'complete'"}}
7711c0
-{u'error': {u'class': u'GenericError', u'desc': u"Job 'job0' in state 'pending' cannot accept command verb 'dismiss'"}}
7711c0
-{u'return': {}}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'concluded', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'null', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'return': []}
7711c0
+{"data": {"id": "job0", "status": "waiting"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"data": {"id": "job0", "status": "pending"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"return": [{"current-progress": 4194304, "id": "job0", "status": "pending", "total-progress": 4194304, "type": "backup"}]}
7711c0
+{"error": {"class": "GenericError", "desc": "Job 'job0' in state 'pending' cannot accept command verb 'pause'"}}
7711c0
+{"error": {"class": "GenericError", "desc": "Job 'job0' in state 'pending' cannot accept command verb 'complete'"}}
7711c0
+{"error": {"class": "GenericError", "desc": "Job 'job0' in state 'pending' cannot accept command verb 'dismiss'"}}
7711c0
+{"error": {"class": "GenericError", "desc": "Job 'job0' in state 'pending' cannot accept command verb 'pause'"}}
7711c0
+{"error": {"class": "GenericError", "desc": "Job 'job0' in state 'pending' cannot accept command verb 'complete'"}}
7711c0
+{"error": {"class": "GenericError", "desc": "Job 'job0' in state 'pending' cannot accept command verb 'dismiss'"}}
7711c0
+{"return": {}}
7711c0
+{"data": {"id": "job0", "status": "concluded"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"data": {"id": "job0", "status": "null"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"return": []}
7711c0
 
7711c0
 
7711c0
 Starting block job: drive-backup (auto-finalize: False; auto-dismiss: False)
7711c0
-{u'return': {}}
7711c0
-{u'return': [{u'status': u'running', u'current-progress': 'FILTERED', u'total-progress': 'FILTERED', u'id': u'job0', u'type': u'backup'}]}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'created', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'running', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
+{"return": {}}
7711c0
+{"return": [{"current-progress": "FILTERED", "id": "job0", "status": "running", "total-progress": "FILTERED", "type": "backup"}]}
7711c0
+{"data": {"id": "job0", "status": "created"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"data": {"id": "job0", "status": "running"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
 
7711c0
 Pause/resume in RUNNING
7711c0
 === Testing block-job-pause/block-job-resume ===
7711c0
-{u'return': {}}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'paused', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'return': [{u'status': u'paused', u'current-progress': 65536, u'total-progress': 4194304, u'id': u'job0', u'type': u'backup'}]}
7711c0
-{u'return': {}}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'running', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'return': [{u'status': u'running', u'current-progress': 131072, u'total-progress': 4194304, u'id': u'job0', u'type': u'backup'}]}
7711c0
+{"return": {}}
7711c0
+{"data": {"id": "job0", "status": "paused"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"return": [{"current-progress": 65536, "id": "job0", "status": "paused", "total-progress": 4194304, "type": "backup"}]}
7711c0
+{"return": {}}
7711c0
+{"data": {"id": "job0", "status": "running"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"return": [{"current-progress": 131072, "id": "job0", "status": "running", "total-progress": 4194304, "type": "backup"}]}
7711c0
 === Testing block-job-pause/job-resume ===
7711c0
-{u'return': {}}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'paused', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'return': [{u'status': u'paused', u'current-progress': 131072, u'total-progress': 4194304, u'id': u'job0', u'type': u'backup'}]}
7711c0
-{u'return': {}}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'running', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'return': [{u'status': u'running', u'current-progress': 196608, u'total-progress': 4194304, u'id': u'job0', u'type': u'backup'}]}
7711c0
+{"return": {}}
7711c0
+{"data": {"id": "job0", "status": "paused"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"return": [{"current-progress": 131072, "id": "job0", "status": "paused", "total-progress": 4194304, "type": "backup"}]}
7711c0
+{"return": {}}
7711c0
+{"data": {"id": "job0", "status": "running"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"return": [{"current-progress": 196608, "id": "job0", "status": "running", "total-progress": 4194304, "type": "backup"}]}
7711c0
 === Testing job-pause/block-job-resume ===
7711c0
-{u'return': {}}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'paused', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'return': [{u'status': u'paused', u'current-progress': 196608, u'total-progress': 4194304, u'id': u'job0', u'type': u'backup'}]}
7711c0
-{u'return': {}}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'running', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'return': [{u'status': u'running', u'current-progress': 262144, u'total-progress': 4194304, u'id': u'job0', u'type': u'backup'}]}
7711c0
+{"return": {}}
7711c0
+{"data": {"id": "job0", "status": "paused"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"return": [{"current-progress": 196608, "id": "job0", "status": "paused", "total-progress": 4194304, "type": "backup"}]}
7711c0
+{"return": {}}
7711c0
+{"data": {"id": "job0", "status": "running"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"return": [{"current-progress": 262144, "id": "job0", "status": "running", "total-progress": 4194304, "type": "backup"}]}
7711c0
 === Testing job-pause/job-resume ===
7711c0
-{u'return': {}}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'paused', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'return': [{u'status': u'paused', u'current-progress': 262144, u'total-progress': 4194304, u'id': u'job0', u'type': u'backup'}]}
7711c0
-{u'return': {}}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'running', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'return': [{u'status': u'running', u'current-progress': 327680, u'total-progress': 4194304, u'id': u'job0', u'type': u'backup'}]}
7711c0
-{u'error': {u'class': u'GenericError', u'desc': u"Job 'job0' in state 'running' cannot accept command verb 'complete'"}}
7711c0
-{u'error': {u'class': u'GenericError', u'desc': u"Job 'job0' in state 'running' cannot accept command verb 'finalize'"}}
7711c0
-{u'error': {u'class': u'GenericError', u'desc': u"Job 'job0' in state 'running' cannot accept command verb 'dismiss'"}}
7711c0
-{u'error': {u'class': u'GenericError', u'desc': u"Job 'job0' in state 'running' cannot accept command verb 'complete'"}}
7711c0
-{u'error': {u'class': u'GenericError', u'desc': u"Job 'job0' in state 'running' cannot accept command verb 'finalize'"}}
7711c0
-{u'error': {u'class': u'GenericError', u'desc': u"Job 'job0' in state 'running' cannot accept command verb 'dismiss'"}}
7711c0
-{u'return': {}}
7711c0
+{"return": {}}
7711c0
+{"data": {"id": "job0", "status": "paused"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"return": [{"current-progress": 262144, "id": "job0", "status": "paused", "total-progress": 4194304, "type": "backup"}]}
7711c0
+{"return": {}}
7711c0
+{"data": {"id": "job0", "status": "running"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"return": [{"current-progress": 327680, "id": "job0", "status": "running", "total-progress": 4194304, "type": "backup"}]}
7711c0
+{"error": {"class": "GenericError", "desc": "Job 'job0' in state 'running' cannot accept command verb 'complete'"}}
7711c0
+{"error": {"class": "GenericError", "desc": "Job 'job0' in state 'running' cannot accept command verb 'finalize'"}}
7711c0
+{"error": {"class": "GenericError", "desc": "Job 'job0' in state 'running' cannot accept command verb 'dismiss'"}}
7711c0
+{"error": {"class": "GenericError", "desc": "Job 'job0' in state 'running' cannot accept command verb 'complete'"}}
7711c0
+{"error": {"class": "GenericError", "desc": "Job 'job0' in state 'running' cannot accept command verb 'finalize'"}}
7711c0
+{"error": {"class": "GenericError", "desc": "Job 'job0' in state 'running' cannot accept command verb 'dismiss'"}}
7711c0
+{"return": {}}
7711c0
 
7711c0
 Waiting for PENDING state...
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'waiting', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'pending', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'return': [{u'status': u'pending', u'current-progress': 4194304, u'total-progress': 4194304, u'id': u'job0', u'type': u'backup'}]}
7711c0
-{u'error': {u'class': u'GenericError', u'desc': u"Job 'job0' in state 'pending' cannot accept command verb 'pause'"}}
7711c0
-{u'error': {u'class': u'GenericError', u'desc': u"Job 'job0' in state 'pending' cannot accept command verb 'complete'"}}
7711c0
-{u'error': {u'class': u'GenericError', u'desc': u"Job 'job0' in state 'pending' cannot accept command verb 'dismiss'"}}
7711c0
-{u'error': {u'class': u'GenericError', u'desc': u"Job 'job0' in state 'pending' cannot accept command verb 'pause'"}}
7711c0
-{u'error': {u'class': u'GenericError', u'desc': u"Job 'job0' in state 'pending' cannot accept command verb 'complete'"}}
7711c0
-{u'error': {u'class': u'GenericError', u'desc': u"Job 'job0' in state 'pending' cannot accept command verb 'dismiss'"}}
7711c0
-{u'return': {}}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'concluded', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'return': [{u'status': u'concluded', u'current-progress': 4194304, u'total-progress': 4194304, u'id': u'job0', u'type': u'backup'}]}
7711c0
-{u'error': {u'class': u'GenericError', u'desc': u"Job 'job0' in state 'concluded' cannot accept command verb 'pause'"}}
7711c0
-{u'error': {u'class': u'GenericError', u'desc': u"Job 'job0' in state 'concluded' cannot accept command verb 'complete'"}}
7711c0
-{u'error': {u'class': u'GenericError', u'desc': u"Job 'job0' in state 'concluded' cannot accept command verb 'finalize'"}}
7711c0
-{u'error': {u'class': u'GenericError', u'desc': u"Job 'job0' in state 'concluded' cannot accept command verb 'pause'"}}
7711c0
-{u'error': {u'class': u'GenericError', u'desc': u"Job 'job0' in state 'concluded' cannot accept command verb 'complete'"}}
7711c0
-{u'error': {u'class': u'GenericError', u'desc': u"Job 'job0' in state 'concluded' cannot accept command verb 'finalize'"}}
7711c0
-{u'return': {}}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'null', u'id': u'job0'}, u'event': u'JOB_STATUS_CHANGE'}
7711c0
-{u'return': []}
7711c0
+{"data": {"id": "job0", "status": "waiting"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"data": {"id": "job0", "status": "pending"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"return": [{"current-progress": 4194304, "id": "job0", "status": "pending", "total-progress": 4194304, "type": "backup"}]}
7711c0
+{"error": {"class": "GenericError", "desc": "Job 'job0' in state 'pending' cannot accept command verb 'pause'"}}
7711c0
+{"error": {"class": "GenericError", "desc": "Job 'job0' in state 'pending' cannot accept command verb 'complete'"}}
7711c0
+{"error": {"class": "GenericError", "desc": "Job 'job0' in state 'pending' cannot accept command verb 'dismiss'"}}
7711c0
+{"error": {"class": "GenericError", "desc": "Job 'job0' in state 'pending' cannot accept command verb 'pause'"}}
7711c0
+{"error": {"class": "GenericError", "desc": "Job 'job0' in state 'pending' cannot accept command verb 'complete'"}}
7711c0
+{"error": {"class": "GenericError", "desc": "Job 'job0' in state 'pending' cannot accept command verb 'dismiss'"}}
7711c0
+{"return": {}}
7711c0
+{"data": {"id": "job0", "status": "concluded"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"return": [{"current-progress": 4194304, "id": "job0", "status": "concluded", "total-progress": 4194304, "type": "backup"}]}
7711c0
+{"error": {"class": "GenericError", "desc": "Job 'job0' in state 'concluded' cannot accept command verb 'pause'"}}
7711c0
+{"error": {"class": "GenericError", "desc": "Job 'job0' in state 'concluded' cannot accept command verb 'complete'"}}
7711c0
+{"error": {"class": "GenericError", "desc": "Job 'job0' in state 'concluded' cannot accept command verb 'finalize'"}}
7711c0
+{"error": {"class": "GenericError", "desc": "Job 'job0' in state 'concluded' cannot accept command verb 'pause'"}}
7711c0
+{"error": {"class": "GenericError", "desc": "Job 'job0' in state 'concluded' cannot accept command verb 'complete'"}}
7711c0
+{"error": {"class": "GenericError", "desc": "Job 'job0' in state 'concluded' cannot accept command verb 'finalize'"}}
7711c0
+{"return": {}}
7711c0
+{"data": {"id": "job0", "status": "null"}, "event": "JOB_STATUS_CHANGE", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"return": []}
7711c0
diff --git a/tests/qemu-iotests/222.out b/tests/qemu-iotests/222.out
7711c0
index 48f336a..16643dd 100644
7711c0
--- a/tests/qemu-iotests/222.out
7711c0
+++ b/tests/qemu-iotests/222.out
7711c0
@@ -8,13 +8,13 @@ Done
7711c0
 
7711c0
 --- Setting up Fleecing Graph ---
7711c0
 
7711c0
-{u'return': {}}
7711c0
-{u'return': {}}
7711c0
+{"return": {}}
7711c0
+{"return": {}}
7711c0
 
7711c0
 --- Setting up NBD Export ---
7711c0
 
7711c0
-{u'return': {}}
7711c0
-{u'return': {}}
7711c0
+{"return": {}}
7711c0
+{"return": {}}
7711c0
 
7711c0
 --- Sanity Check ---
7711c0
 
7711c0
@@ -29,13 +29,13 @@ read -P0 0x3fe0000 64k
7711c0
 --- Testing COW ---
7711c0
 
7711c0
 write -P0xab 0 64k
7711c0
-{u'return': u''}
7711c0
+{"return": ""}
7711c0
 write -P0xad 0x00f8000 64k
7711c0
-{u'return': u''}
7711c0
+{"return": ""}
7711c0
 write -P0x1d 0x2008000 64k
7711c0
-{u'return': u''}
7711c0
+{"return": ""}
7711c0
 write -P0xea 0x3fe0000 64k
7711c0
-{u'return': u''}
7711c0
+{"return": ""}
7711c0
 
7711c0
 --- Verifying Data ---
7711c0
 
7711c0
@@ -49,10 +49,10 @@ read -P0 0x3fe0000 64k
7711c0
 
7711c0
 --- Cleanup ---
7711c0
 
7711c0
-{u'return': {}}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'device': u'drive0', u'type': u'backup', u'speed': 0, u'len': 67108864, u'offset': 393216}, u'event': u'BLOCK_JOB_CANCELLED'}
7711c0
-{u'return': {}}
7711c0
-{u'return': {}}
7711c0
+{"return": {}}
7711c0
+{"data": {"device": "drive0", "len": 67108864, "offset": 393216, "speed": 0, "type": "backup"}, "event": "BLOCK_JOB_CANCELLED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"return": {}}
7711c0
+{"return": {}}
7711c0
 
7711c0
 --- Confirming writes ---
7711c0
 
7711c0
diff --git a/tests/qemu-iotests/234.out b/tests/qemu-iotests/234.out
7711c0
index c7cd95f..592625b 100644
7711c0
--- a/tests/qemu-iotests/234.out
7711c0
+++ b/tests/qemu-iotests/234.out
7711c0
@@ -1,28 +1,28 @@
7711c0
 Launching source VM...
7711c0
 Launching destination VM...
7711c0
-{u'return': {}}
7711c0
-{u'return': {}}
7711c0
+{"return": {}}
7711c0
+{"return": {}}
7711c0
 Enabling migration QMP events on A...
7711c0
-{u'return': {}}
7711c0
+{"return": {}}
7711c0
 Starting migration to B...
7711c0
-{u'return': {}}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'setup'}, u'event': u'MIGRATION'}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'active'}, u'event': u'MIGRATION'}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'completed'}, u'event': u'MIGRATION'}
7711c0
+{"return": {}}
7711c0
+{"data": {"status": "setup"}, "event": "MIGRATION", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"data": {"status": "active"}, "event": "MIGRATION", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"data": {"status": "completed"}, "event": "MIGRATION", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
 completed
7711c0
-{u'return': {u'status': u'postmigrate', u'singlestep': False, u'running': False}}
7711c0
-{u'return': {u'status': u'running', u'singlestep': False, u'running': True}}
7711c0
+{"return": {"running": false, "singlestep": false, "status": "postmigrate"}}
7711c0
+{"return": {"running": true, "singlestep": false, "status": "running"}}
7711c0
 Add a second parent to drive0-file...
7711c0
-{u'return': {}}
7711c0
+{"return": {}}
7711c0
 Restart A with -incoming and second parent...
7711c0
-{u'return': {}}
7711c0
+{"return": {}}
7711c0
 Enabling migration QMP events on B...
7711c0
-{u'return': {}}
7711c0
+{"return": {}}
7711c0
 Starting migration back to A...
7711c0
-{u'return': {}}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'setup'}, u'event': u'MIGRATION'}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'active'}, u'event': u'MIGRATION'}
7711c0
-{u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'completed'}, u'event': u'MIGRATION'}
7711c0
+{"return": {}}
7711c0
+{"data": {"status": "setup"}, "event": "MIGRATION", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"data": {"status": "active"}, "event": "MIGRATION", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
+{"data": {"status": "completed"}, "event": "MIGRATION", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
7711c0
 completed
7711c0
-{u'return': {u'status': u'running', u'singlestep': False, u'running': True}}
7711c0
-{u'return': {u'status': u'postmigrate', u'singlestep': False, u'running': False}}
7711c0
+{"return": {"running": true, "singlestep": false, "status": "running"}}
7711c0
+{"return": {"running": false, "singlestep": false, "status": "postmigrate"}}
7711c0
diff --git a/tests/qemu-iotests/iotests.py b/tests/qemu-iotests/iotests.py
7711c0
index 2f22fab..1b9656a 100644
7711c0
--- a/tests/qemu-iotests/iotests.py
7711c0
+++ b/tests/qemu-iotests/iotests.py
7711c0
@@ -248,7 +248,10 @@ def filter_img_info(output, filename):
7711c0
 def log(msg, filters=[]):
7711c0
     for flt in filters:
7711c0
         msg = flt(msg)
7711c0
-    print msg
7711c0
+    if type(msg) is dict or type(msg) is list:
7711c0
+        print(json.dumps(msg, sort_keys=True))
7711c0
+    else:
7711c0
+        print(msg)
7711c0
 
7711c0
 class Timeout:
7711c0
     def __init__(self, seconds, errmsg = "Timeout"):
7711c0
@@ -436,10 +439,11 @@ class VM(qtest.QEMUQtestMachine):
7711c0
         return result
7711c0
 
7711c0
     def qmp_log(self, cmd, filters=[filter_testfiles], **kwargs):
7711c0
-        logmsg = "{'execute': '%s', 'arguments': %s}" % (cmd, kwargs)
7711c0
+        logmsg = '{"execute": "%s", "arguments": %s}' % \
7711c0
+            (cmd, json.dumps(kwargs, sort_keys=True))
7711c0
         log(logmsg, filters)
7711c0
         result = self.qmp(cmd, **kwargs)
7711c0
-        log(str(result), filters)
7711c0
+        log(json.dumps(result, sort_keys=True), filters)
7711c0
         return result
7711c0
 
7711c0
     def run_job(self, job, auto_finalize=True, auto_dismiss=False):
7711c0
-- 
7711c0
1.8.3.1
7711c0