[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 09/20] iotests: change qmp_log filters to expect QMP
From: |
Eric Blake |
Subject: |
[Qemu-devel] [PULL 09/20] iotests: change qmp_log filters to expect QMP objects only |
Date: |
Mon, 14 Jan 2019 10:25:54 -0600 |
From: John Snow <address@hidden>
As laid out in the previous commit's message:
```
Several places in iotests deal with serializing objects into JSON
strings, but to add pretty-printing it seems desirable to localize
all of those cases.
log() seems like a good candidate for that centralized behavior.
log() can already serialize json objects, but when it does so,
it assumes filters=[] operates on QMP objects, not strings.
qmp_log currently operates by dumping outgoing and incoming QMP
objects into strings and filtering them assuming that filters=[]
are string filters.
```
Therefore:
Change qmp_log to treat filters as if they're always qmp object filters,
then change the logging call to rely on log()'s ability to serialize QMP
objects, so we're not duplicating that effort.
Add a qmp version of filter_testfiles and adjust the only caller using
it for qmp_log to use the qmp version.
Signed-off-by: John Snow <address@hidden>
Message-Id: <address@hidden>
Reviewed-by: Vladimir Sementsov-Ogievskiy <address@hidden>
Signed-off-by: Eric Blake <address@hidden>
---
tests/qemu-iotests/206 | 4 ++--
tests/qemu-iotests/iotests.py | 28 +++++++++++++++++++++++++---
2 files changed, 27 insertions(+), 5 deletions(-)
diff --git a/tests/qemu-iotests/206 b/tests/qemu-iotests/206
index e92550fa59f..5bb738bf23c 100755
--- a/tests/qemu-iotests/206
+++ b/tests/qemu-iotests/206
@@ -27,7 +27,7 @@ iotests.verify_image_format(supported_fmts=['qcow2'])
def blockdev_create(vm, options):
result = vm.qmp_log('blockdev-create',
- filters=[iotests.filter_testfiles],
+ filters=[iotests.filter_qmp_testfiles],
job_id='job0', options=options)
if 'return' in result:
@@ -55,7 +55,7 @@ with iotests.FilePath('t.qcow2') as disk_path, \
'size': 0 })
vm.qmp_log('blockdev-add',
- filters=[iotests.filter_testfiles],
+ filters=[iotests.filter_qmp_testfiles],
driver='file', filename=disk_path,
node_name='imgfile')
diff --git a/tests/qemu-iotests/iotests.py b/tests/qemu-iotests/iotests.py
index 57fe20db45a..a96a7010d49 100644
--- a/tests/qemu-iotests/iotests.py
+++ b/tests/qemu-iotests/iotests.py
@@ -246,10 +246,33 @@ def filter_qmp_event(event):
event['timestamp']['microseconds'] = 'USECS'
return event
+def filter_qmp(qmsg, filter_fn):
+ '''Given a string filter, filter a QMP object's values.
+ filter_fn takes a (key, value) pair.'''
+ # Iterate through either lists or dicts;
+ if isinstance(qmsg, list):
+ items = enumerate(qmsg)
+ else:
+ items = qmsg.items()
+
+ for k, v in items:
+ if isinstance(v, list) or isinstance(v, dict):
+ qmsg[k] = filter_qmp(v, filter_fn)
+ else:
+ qmsg[k] = filter_fn(k, v)
+ return qmsg
+
def filter_testfiles(msg):
prefix = os.path.join(test_dir, "%s-" % (os.getpid()))
return msg.replace(prefix, 'TEST_DIR/PID-')
+def filter_qmp_testfiles(qmsg):
+ def _filter(key, value):
+ if key == 'filename' or key == 'backing-file':
+ return filter_testfiles(value)
+ return value
+ return filter_qmp(qmsg, _filter)
+
def filter_generated_node_ids(msg):
return re.sub("#block[0-9]+", "NODE_NAME", msg)
@@ -465,10 +488,9 @@ class VM(qtest.QEMUQtestMachine):
("execute", cmd),
("arguments", ordered_kwargs(kwargs))
))
- logmsg = json.dumps(full_cmd)
- log(logmsg, filters)
+ log(full_cmd, filters)
result = self.qmp(cmd, **kwargs)
- log(json.dumps(result, sort_keys=True), filters)
+ log(result, filters)
return result
def run_job(self, job, auto_finalize=True, auto_dismiss=False):
--
2.20.1
- [Qemu-devel] [PULL 00/20] NBD patches through 2019-01-14, Eric Blake, 2019/01/14
- [Qemu-devel] [PULL 01/20] blockdev: abort transactions in reverse order, Eric Blake, 2019/01/14
- [Qemu-devel] [PULL 02/20] block/dirty-bitmap: remove assertion from restore, Eric Blake, 2019/01/14
- [Qemu-devel] [PULL 06/20] iotests: add filter_generated_node_ids, Eric Blake, 2019/01/14
- [Qemu-devel] [PULL 05/20] iotests.py: don't abort if IMGKEYSECRET is undefined, Eric Blake, 2019/01/14
- [Qemu-devel] [PULL 04/20] block: remove 'x' prefix from experimental bitmap APIs, Eric Blake, 2019/01/14
- [Qemu-devel] [PULL 03/20] blockdev: n-ary bitmap merge, Eric Blake, 2019/01/14
- [Qemu-devel] [PULL 10/20] iotests: implement pretty-print for log and qmp_log, Eric Blake, 2019/01/14
- [Qemu-devel] [PULL 09/20] iotests: change qmp_log filters to expect QMP objects only,
Eric Blake <=
- [Qemu-devel] [PULL 08/20] iotests: remove default filters from qmp_log, Eric Blake, 2019/01/14
- [Qemu-devel] [PULL 07/20] iotests: add qmp recursive sorting function, Eric Blake, 2019/01/14
- [Qemu-devel] [PULL 12/20] qemu-nbd: Rename 'exp' variable clashing with math::exp() symbol, Eric Blake, 2019/01/14
- [Qemu-devel] [PULL 11/20] iotests: add iotest 236 for testing bitmap merge, Eric Blake, 2019/01/14
- [Qemu-devel] [PULL 13/20] nbd: Add some error case testing to iotests 223, Eric Blake, 2019/01/14
- [Qemu-devel] [PULL 14/20] nbd: Forbid nbd-server-stop when server is not running, Eric Blake, 2019/01/14