[CRIU] [PATCH] zdtm: check that a command completes successfully after a fault (v2)
Andrey Vagin
avagin at openvz.org
Mon Feb 29 16:04:14 PST 2016
From: Andrew Vagin <avagin at virtuozzo.com>
I suggest to inject a fault and than try to execute the same command
again without a fault to check that it will complete successfully.
v2: skip a parasite blob when we are checking vma-s
Signed-off-by: Andrew Vagin <avagin at virtuozzo.com>
---
test/zdtm.py | 40 +++++++++++++++++++++++++++++-----------
1 file changed, 29 insertions(+), 11 deletions(-)
diff --git a/test/zdtm.py b/test/zdtm.py
index 1ace919..27fa8d4 100755
--- a/test/zdtm.py
+++ b/test/zdtm.py
@@ -656,13 +656,31 @@ class criu_cli:
preexec = self.__user and self.set_user_id or None
- ret = self.__criu(action, s_args, self.__fault, strace, preexec)
- grep_errors(os.path.join(self.__ddir(), log))
- if ret != 0:
- if self.__fault or self.__test.blocking() or (self.__sat and action == 'restore'):
- raise test_fail_expected_exc(action)
- else:
- raise test_fail_exc("CRIU %s" % action)
+ faults = [ self.__fault ]
+ # try again after the first failed case
+ if self.__fault:
+ faults.append(None)
+ for fault in faults:
+ __ddir = self.__ddir()
+
+ ret = self.__criu(action, s_args, fault, strace, preexec)
+ grep_errors(os.path.join(__ddir, log))
+ if ret != 0:
+ if fault:
+ try_run_hook(self.__test, ["--fault", action])
+ if action == "dump":
+ __ddir_fail = __ddir + ".fail"
+ os.rename(__ddir, __ddir + ".fail")
+ os.mkdir(__ddir)
+ os.chmod(__ddir, 0777)
+ else:
+ os.rename(os.path.join(__ddir, log), os.path.join(__ddir, log + ".fail"))
+ continue
+ if self.__test.blocking() or (self.__sat and action == 'restore'):
+ raise test_fail_expected_exc(action)
+ else:
+ raise test_fail_exc("CRIU %s" % action)
+ break
def dump(self, action, opts = []):
self.__iter += 1
@@ -819,7 +837,7 @@ def get_visible_state(test):
mounts[pid] = set(cmounts)
return files, maps, mounts
-def check_visible_state(test, state):
+def check_visible_state(test, state, opts):
new = get_visible_state(test)
for pid in state[0].keys():
@@ -835,8 +853,8 @@ def check_visible_state(test, state):
if old_maps != new_maps:
print "%s: Old maps lost: %s" % (pid, old_maps - new_maps)
print "%s: New maps appeared: %s" % (pid, new_maps - old_maps)
-
- raise test_fail_exc("maps compare")
+ if not opts['fault']: # skip parasite blob
+ raise test_fail_exc("maps compare")
old_mounts = state[2][pid]
new_mounts = new[2][pid]
@@ -937,7 +955,7 @@ def do_run_test(tname, tdesc, flavs, opts):
t.stop()
try_run_hook(t, ["--fault", e.cr_action])
else:
- check_visible_state(t, s)
+ check_visible_state(t, s, opts)
t.stop()
try_run_hook(t, ["--clean"])
except test_fail_exc as e:
--
2.5.0
More information about the CRIU
mailing list