diff --git a/qemu/tests/block_copy.py b/qemu/tests/block_copy.py index 1fb665fdd4a9d6ee55ef8eed150a85a9989c89c4..3aa77d4c6c0c9194d4c1e063cbbe7a989dd51d53 100644 --- a/qemu/tests/block_copy.py +++ b/qemu/tests/block_copy.py @@ -136,6 +136,40 @@ class BlockCopy(object): if self.vm.monitor.protocol == "qmp": self.vm.monitor.clear_event("BLOCK_JOB_CANCELLED") + def is_paused(self): + """ + Return block job paused status. + """ + paused = self.get_status().get("paused") + offset_p = self.get_status().get("offset") + time.sleep(random.uniform(1, 3)) + offset_l = self.get_status().get("offset") + paused &= offset_p == offset_l + return paused + + def pause_job(self): + """ + pause active job; + """ + if self.is_paused(): + raise error.TestError("Job has been already paused.") + logging.info("Pause block job.") + self.vm.pause_block_job(self.device) + time.sleep(random.uniform(1, 3)) + if not self.is_paused(): + raise error.TestFail("Pause block job failed.") + + def resume_job(self): + """ + resume a paused job. + """ + if not self.is_paused(): + raise error.TestError("Job is not paused, can't be resume.") + logging.info("Resume block job.") + self.vm.resume_block_job(self.device) + if self.is_paused(): + raise error.TestFail("Resume block job failed.") + @error.context_aware def set_speed(self): """ diff --git a/qemu/tests/cfg/drive_mirror.cfg b/qemu/tests/cfg/drive_mirror.cfg index d94463c551dde47378ab5d60ce2cf1d82f9afbb4..b66f9f0424118f09ec9d2f0e92cae7d777ea6441 100644 --- a/qemu/tests/cfg/drive_mirror.cfg +++ b/qemu/tests/cfg/drive_mirror.cfg @@ -80,6 +80,8 @@ before_steady = "query_status" default_speed_image1 = 3M max_speed_image1 = 10M + - pause_resume_job: + before_steady = "pause_job resume_job" - job_complete: type = drive_mirror_complete boot_target_image = no