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