[CRIU] [PATCH] zdtm: added option to run tests in check-only mode

Pavel Emelyanov xemul at virtuozzo.com
Thu Oct 27 13:52:53 PDT 2016


On 10/27/2016 07:05 PM, Adrian Reber wrote:
> From: Adrian Reber <areber at redhat.com>
> 
> This adds an additional option to zdtm.py: --check-only
> Using this option '--check-only' is added to the 'criu dump'
> command-line. During restore criu auto-detects that the
> checkpoint was a 'check-only' checkpoint.
> 
> Running zdtm.py with '--check-only' reveals that the check-only
> code path is not implemented everywhere as some tests are starting
> to fail when using '--check-only' with zdtm.
> 
> Some tests cannot work as the process is not really restored and if
> the process should create or delete something this will not happen.
> These tests need to be excluded from zdtm in check-only mode.
> 
> Most of the other failures are related to restoring shmem which fails
> in check-only mode. This needs to be fixed in the check-only mode
> code paths in criu. Patch will follow.
> 
> Following tests are currently failing in check-only mode:

Do you know why they fail?

>  zdtm/static/futex-rl
>  zdtm/static/pthread00
>  zdtm/static/pthread01
>  zdtm/static/socket-tcpbuf
>  zdtm/static/maps01
>  zdtm/static/file_fown
>  zdtm/static/aio00
>  zdtm/static/aio01
>  zdtm/static/fd
>  zdtm/static/maps00
>  zdtm/static/unlink_fstat03
>  zdtm/static/fanotify-del-after-cr
>  zdtm/transition/fork2
>  zdtm/transition/maps007
>  zdtm/transition/maps008
>  zdtm/transition/shmem
>  zdtm/transition/file_read
>  zdtm/transition/fifo_loop
> 
> Signed-off-by: Adrian Reber <areber at redhat.com>
> ---
>  test/zdtm.py | 12 +++++++++++-
>  1 file changed, 11 insertions(+), 1 deletion(-)
> 
> diff --git a/test/zdtm.py b/test/zdtm.py
> index e032716..9cba7cb 100755
> --- a/test/zdtm.py
> +++ b/test/zdtm.py
> @@ -769,6 +769,7 @@ class criu:
>  		self.__user = (opts['user'] and True or False)
>  		self.__leave_stopped = (opts['stop'] and True or False)
>  		self.__criu = (opts['rpc'] and criu_rpc or criu_cli)
> +		self.__check_only = (opts['check_only'] and True or False)
>  
>  	def logs(self):
>  		return self.__dump_path
> @@ -891,10 +892,16 @@ class criu:
>  		if self.__leave_stopped:
>  			a_opts += ['--leave-stopped']
>  
> +		if self.__check_only:
> +			a_opts += ['--check-only']
> +
>  		self.__criu_act(action, opts = a_opts + opts)
>  		if self.__mdedup and self.__iter > 1:
>  			self.__criu_act("dedup", opts = [])
>  
> +		if self.__check_only:
> +			pstree_signal(self.__test.getpid(), signal.SIGKILL)
> +
>  		if self.__leave_stopped:
>  			pstree_check_stopped(self.__test.getpid())
>  			pstree_signal(self.__test.getpid(), signal.SIGKILL)
> @@ -1274,7 +1281,8 @@ def do_run_test(tname, tdesc, flavs, opts):
>  				check_visible_state(t, s, opts)
>  				if opts['join_ns']:
>  					check_joinns_state(t)
> -				t.stop()
> +				if not opts['check_only']:
> +					t.stop()
>  				try_run_hook(t, ["--clean"])
>  		except test_fail_exc as e:
>  			print_sep("Test %s FAIL at %s" % (tname, e.step), '#')
> @@ -1351,6 +1359,7 @@ class launcher:
>  
>  		nd = ('nocr', 'norst', 'pre', 'iters', 'page_server', 'sibling', 'stop', 'lazy_pages',
>  				'fault', 'keep_img', 'report', 'snaps', 'sat', 'script', 'rpc',
> +				'check_only',
>  				'join_ns', 'dedup', 'sbs', 'freezecg', 'user', 'dry_run', 'noauto_dedup')
>  		arg = repr((name, desc, flavor, {d: self.__opts[d] for d in nd}))
>  
> @@ -1810,6 +1819,7 @@ rp.add_argument("-k", "--keep-img", help = "Whether or not to keep images after
>  rp.add_argument("--report", help = "Generate summary report in directory")
>  rp.add_argument("--keep-going", help = "Keep running tests in spite of failures", action = 'store_true')
>  rp.add_argument("--lazy-pages", help = "restore pages on demand", action = 'store_true')
> +rp.add_argument("--check-only", help = "Run criu in check-only mode (memory pages are not dumped)", action = 'store_true')
>  
>  lp = sp.add_parser("list", help = "List tests")
>  lp.set_defaults(action = list_tests)
> 



More information about the CRIU mailing list