[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v4 18/20] iotests: add QMP event waiting queue
From: |
John Snow |
Subject: |
[Qemu-devel] [PATCH v4 18/20] iotests: add QMP event waiting queue |
Date: |
Fri, 20 Mar 2015 15:17:01 -0400 |
A filter is added to allow callers to request very specific
events to be pulled from the event queue, while leaving undesired
events still in the stream.
This allows to poll for completion data for multiple asynchronous
events in any arbitrary order.
Signed-off-by: John Snow <address@hidden>
Reviewed-by: Max Reitz <address@hidden>
---
tests/qemu-iotests/iotests.py | 38 ++++++++++++++++++++++++++++++++++++++
1 file changed, 38 insertions(+)
diff --git a/tests/qemu-iotests/iotests.py b/tests/qemu-iotests/iotests.py
index 1402854..ac55813 100644
--- a/tests/qemu-iotests/iotests.py
+++ b/tests/qemu-iotests/iotests.py
@@ -78,6 +78,23 @@ def create_image(name, size):
i = i + 512
file.close()
+# Test if 'match' is a recursive subset of 'event'
+def event_match(event, match = None):
+ if match is None:
+ return True
+
+ for key in match:
+ if key in event:
+ if isinstance(event[key], dict):
+ if not event_match(event[key], match[key]):
+ return False
+ elif event[key] != match[key]:
+ return False
+ else:
+ return False
+
+ return True
+
class VM(object):
'''A QEMU VM'''
@@ -92,6 +109,7 @@ class VM(object):
'-machine', 'accel=qtest',
'-display', 'none', '-vga', 'none']
self._num_drives = 0
+ self._events = []
# This can be used to add an unused monitor instance.
def add_monitor_telnet(self, ip, port):
@@ -202,14 +220,34 @@ class VM(object):
def get_qmp_event(self, wait=False):
'''Poll for one queued QMP events and return it'''
+ if len(self._events) > 0:
+ return self._events.pop(0)
return self._qmp.pull_event(wait=wait)
def get_qmp_events(self, wait=False):
'''Poll for queued QMP events and return a list of dicts'''
events = self._qmp.get_events(wait=wait)
+ events.extend(self._events)
+ del self._events[:]
self._qmp.clear_events()
return events
+ def event_wait(self, name='BLOCK_JOB_COMPLETED', maxtries=3, match=None):
+ # Search cached events
+ for event in self._events:
+ if (event['event'] == name) and event_match(event, match):
+ self._events.remove(event)
+ return event
+
+ # Poll for new events
+ for _ in range(maxtries):
+ event = self._qmp.pull_event(wait=True)
+ if (event['event'] == name) and event_match(event, match):
+ return event
+ self._events.append(event)
+
+ return None
+
index_re = re.compile(r'([^\[]+)\[([^\]]+)\]')
class QMPTestCase(unittest.TestCase):
--
2.1.0
- [Qemu-devel] [PATCH v4 05/20] block: Introduce bdrv_dirty_bitmap_granularity(), (continued)
- [Qemu-devel] [PATCH v4 05/20] block: Introduce bdrv_dirty_bitmap_granularity(), John Snow, 2015/03/20
- [Qemu-devel] [PATCH v4 01/20] docs: incremental backup documentation, John Snow, 2015/03/20
- [Qemu-devel] [PATCH v4 04/20] qmp: Add block-dirty-bitmap-add and block-dirty-bitmap-remove, John Snow, 2015/03/20
- [Qemu-devel] [PATCH v4 07/20] hbitmap: add hbitmap_merge, John Snow, 2015/03/20
- [Qemu-devel] [PATCH v4 15/20] block: Resize bitmaps on bdrv_truncate, John Snow, 2015/03/20
- [Qemu-devel] [PATCH v4 02/20] qapi: Add optional field "name" to block dirty bitmap, John Snow, 2015/03/20
- [Qemu-devel] [PATCH v4 10/20] qmp: Add support of "dirty-bitmap" sync mode for drive-backup, John Snow, 2015/03/20
- [Qemu-devel] [PATCH v4 09/20] block: Add bitmap successors, John Snow, 2015/03/20
- [Qemu-devel] [PATCH v4 13/20] block: add BdrvDirtyBitmap documentation, John Snow, 2015/03/20
- [Qemu-devel] [PATCH v4 18/20] iotests: add QMP event waiting queue,
John Snow <=
- [Qemu-devel] [PATCH v4 17/20] iotests: add invalid input incremental backup tests, John Snow, 2015/03/20
- [Qemu-devel] [PATCH v4 11/20] qmp: add block-dirty-bitmap-clear, John Snow, 2015/03/20
- [Qemu-devel] [PATCH v4 19/20] iotests: add simple incremental backup case, John Snow, 2015/03/20
- [Qemu-devel] [PATCH v4 16/20] hbitmap: truncate tests, John Snow, 2015/03/20
- [Qemu-devel] [PATCH v4 14/20] block: Ensure consistent bitmap function prototypes, John Snow, 2015/03/20
- [Qemu-devel] [PATCH v4 20/20] iotests: add incremental backup failure recovery test, John Snow, 2015/03/20