On 26.02.20 01:44, John Snow wrote: > Instead of having somewhat reproduced it for itself. > > Signed-off-by: John Snow <[email protected]> > --- > tests/qemu-iotests/040 | 51 +++++++++++++++++++++--------------------- > 1 file changed, 25 insertions(+), 26 deletions(-) > > diff --git a/tests/qemu-iotests/040 b/tests/qemu-iotests/040 > index 90b59081ff..579dafc797 100755 > --- a/tests/qemu-iotests/040 > +++ b/tests/qemu-iotests/040 > @@ -483,34 +483,33 @@ class TestErrorHandling(iotests.QMPTestCase): > file=('top-dbg' if top_debug else 'top-file'), > backing='mid-fmt') > > + > + class TestJobRunner(iotests.JobRunner): > + expected_events = ('BLOCK_JOB_COMPLETED', > + 'BLOCK_JOB_ERROR', > + 'BLOCK_JOB_READY') > + > + def __init__(self, *args, test, **kwargs): > + super().__init__(*args, **kwargs) > + self.log = [] > + self.test = test > + > + def on_pause(self, event): > + result = self._vm.qmp('block-job-resume', device=self._id) > + self.test.assert_qmp(result, 'return', {}) > + super().on_pause(event)
Not that it functionally matters, but I suppose I’d call
super().on_pause() before resuming (because the job isn’t exactly paused
afterwards).
> +
> + def on_block_job_event(self, event):
> + if event['event'] not in self.expected_events:
> + self.test.fail("Unexpected event: %s" % event)
> + super().on_block_job_event(event)
> + self.log.append(iotests.filter_qmp_event(event))
Hasn’t the event been through filter_qmp_event() already?
Max
> +
> def run_job(self, expected_events, error_pauses_job=False):
> - match_device = {'data': {'device': 'job0'}}
> - events = {
> - 'BLOCK_JOB_COMPLETED': match_device,
> - 'BLOCK_JOB_CANCELLED': match_device,
> - 'BLOCK_JOB_ERROR': match_device,
> - 'BLOCK_JOB_READY': match_device,
> - }
> -
> - completed = False
> - log = []
> - while not completed:
> - ev = self.vm.events_wait(events, timeout=5.0)
> - if ev['event'] == 'BLOCK_JOB_COMPLETED':
> - completed = True
> - elif ev['event'] == 'BLOCK_JOB_ERROR':
> - if error_pauses_job:
> - result = self.vm.qmp('block-job-resume', device='job0')
> - self.assert_qmp(result, 'return', {})
> - elif ev['event'] == 'BLOCK_JOB_READY':
> - result = self.vm.qmp('block-job-complete', device='job0')
> - self.assert_qmp(result, 'return', {})
> - else:
> - self.fail("Unexpected event: %s" % ev)
> - log.append(iotests.filter_qmp_event(ev))
> -
> + job = self.TestJobRunner(self.vm, 'job0', use_log=False, test=self)
> + job.run()
> self.maxDiff = None
> - self.assertEqual(expected_events, log)
> + self.assertEqual(expected_events, job.log)
>
> def event_error(self, op, action):
> return {
>
signature.asc
Description: OpenPGP digital signature
