diff options
Diffstat (limited to 'tests/qemu-iotests/iotests.py')
-rw-r--r-- | tests/qemu-iotests/iotests.py | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/tests/qemu-iotests/iotests.py b/tests/qemu-iotests/iotests.py index abcf3c10e2..22439c43d3 100644 --- a/tests/qemu-iotests/iotests.py +++ b/tests/qemu-iotests/iotests.py @@ -27,6 +27,7 @@ sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', 'scripts')) import qtest import struct import json +import signal # This will not work if arguments contain spaces but is necessary if we @@ -137,6 +138,20 @@ def log(msg, filters=[]): msg = flt(msg) print msg +class Timeout: + def __init__(self, seconds, errmsg = "Timeout"): + self.seconds = seconds + self.errmsg = errmsg + def __enter__(self): + signal.signal(signal.SIGALRM, self.timeout) + signal.setitimer(signal.ITIMER_REAL, self.seconds) + return self + def __exit__(self, type, value, traceback): + signal.setitimer(signal.ITIMER_REAL, 0) + return False + def timeout(self, signum, frame): + raise Exception(self.errmsg) + class VM(qtest.QEMUQtestMachine): '''A QEMU VM''' @@ -346,6 +361,18 @@ class QMPTestCase(unittest.TestCase): event = self.wait_until_completed(drive=drive) self.assert_qmp(event, 'data/type', 'mirror') + def pause_job(self, job_id='job0'): + result = self.vm.qmp('block-job-pause', device=job_id) + self.assert_qmp(result, 'return', {}) + + with Timeout(1, "Timeout waiting for job to pause"): + while True: + result = self.vm.qmp('query-block-jobs') + for job in result['return']: + if job['device'] == job_id and job['paused'] == True and job['busy'] == False: + return job + + def notrun(reason): '''Skip this test suite''' # Each test in qemu-iotests has a number ("seq") |