diff --git a/qemu/tests/cfg/drive_mirror.cfg b/qemu/tests/cfg/drive_mirror.cfg index 7660fb096944587f21be90cbfbd65633a56ebec7..508af40f6690c7063d65c8108f8eaf7e437af58a 100644 --- a/qemu/tests/cfg/drive_mirror.cfg +++ b/qemu/tests/cfg/drive_mirror.cfg @@ -87,6 +87,13 @@ dd_cmd = "dd if=/dev/zero bs=1024 count=1024 of=tmp%s.file" Windows: clean_cmd = "del /F tmp*.file" + - negative_test: + negative_test = yes + variants: + - readonly_target: + create_mode = existing + before_start = readonly_target + before_cleanup = clear_readonly_bit - with_stress: type = drive_mirror_stress reopen_timeout = 600 diff --git a/qemu/tests/drive_mirror_simple.py b/qemu/tests/drive_mirror_simple.py index 0585bd792ed8b83f62647d3cd08b047110d68301..524cee0a51b59d0a71decfb3b3367c4f92ca94e5 100644 --- a/qemu/tests/drive_mirror_simple.py +++ b/qemu/tests/drive_mirror_simple.py @@ -1,7 +1,9 @@ +import re import logging import time import random from autotest.client.shared import error +from autotest.client.shared import utils from qemu.tests import drive_mirror @@ -19,6 +21,18 @@ class DriveMirrorSimple(drive_mirror.DriveMirror): if not self.get_status(): raise error.TestFail("No active job") + @error.context_aware + def readonly_target(self): + error.context("Set readonly bit on target image", logging.info) + cmd = "chattr +i %s" % self.target_image + return utils.system(cmd) + + @error.context_aware + def clear_readonly_bit(self): + error.context("Clear readonly bit on target image", logging.info) + cmd = "chattr -i %s" % self.target_image + return utils.system(cmd) + def run(test, params, env): """ @@ -39,9 +53,19 @@ def run(test, params, env): for i in range(repeats): v_max, v_min = int(params.get("login_timeout", 360)) / 4, 0 time.sleep(random.randint(v_min, v_max)) - simple_test.start() + simple_test.action_before_start() + try: + simple_test.start() + except error.TestFail, detail: + if params.get("negative_test") == "yes": + if not re.search(r"No active.*job", str(detail), re.I): + raise error.TestFail("Block job not cancelled in" + "negative testing") + break + raise simple_test.action_before_steady() if simple_test.get_status(): simple_test.cancel() finally: + simple_test.action_before_cleanup() simple_test.clean()