[CRIU] [PATCH] zdtm: check that a command completes successfully after a fault (v2)

Andrey Vagin avagin at openvz.org
Tue Mar 1 06:23:41 PST 2016


2016-03-01 2:01 GMT-08:00 Pavel Emelyanov <xemul at virtuozzo.com>:
> On 03/01/2016 03:04 AM, Andrey Vagin wrote:
>> 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"))
>
> What does this dir manipulation do?

On dump this directory will contain a part of images, so we move the
whole directory.
On restore we move only a log file.

>
>> +                                     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:
>>
>


More information about the CRIU mailing list