[CRIU] [PATCH 1/2] zdtm.py: add option --keep-going

Ivan Shapovalov intelfx at intelfx.name
Fri Mar 18 20:34:49 PDT 2016


On 2016-03-15 at 17:40 +0300, Sergey Bronnikov wrote:
> Introduce an option --keep-going to make ability to run all planned
> tests and
> ignore failed tests. Also with this option zdtm.py will keep image
> files and
> output log for each failed test:
> 
> [vagrant at fedora test]$ find sergeyb-xxx -maxdepth 3
> sergeyb-xxx
> sergeyb-xxx/zdtm_static_bridge_ns
> sergeyb-xxx/zdtm_static_bridge_ns/images
> sergeyb-xxx/zdtm_static_bridge_ns/images/1
> sergeyb-xxx/zdtm_static_bridge_ns/output
> sergeyb-xxx/zdtm_static_bridge_ns/images.0
> sergeyb-xxx/zdtm_static_bridge_ns/images.0/1
> sergeyb-xxx/zdtm_static_bridge_ns/output.0
> sergeyb-xxx/zdtm_static_deleted_unix_sock_h
> sergeyb-xxx/zdtm_static_deleted_unix_sock_h/output
> sergeyb-xxx/zdtm_static_deleted_unix_sock_h/output.0
> sergeyb-xxx/zdtm_static_deleted_unix_sock_h/output.1
> 
> Signed-off-by: Sergey Bronnikov <sergeyb at openvz.org>
> ---
>  test/zdtm.py | 31 +++++++++++++++++++++++--------
>  1 file changed, 23 insertions(+), 8 deletions(-)
> 
> diff --git a/test/zdtm.py b/test/zdtm.py
> index b523c62..1b238b0 100755
> --- a/test/zdtm.py
> +++ b/test/zdtm.py
> @@ -76,6 +76,8 @@ def add_to_report(path, tgt_name):
>  		if os.path.isdir(path):
>  			shutil.copytree(path, tgt_path)
>  		else:
> +			if not
> os.path.exists(os.path.dirname(tgt_path)):
> +				os.mkdir(os.path.dirname(tgt_path))
>  			shutil.copy2(path, tgt_path)
>  
>  
> @@ -237,6 +239,12 @@ flavors = { 'h': host_flavor, 'ns': ns_flavor,
> 'uns': userns_flavor }
>  # Helpers
>  #
>  
> +def encode_flav(f):
> +	return (flavors.keys().index(f) + 128)
> +
> +def decode_flav(i):
> +	return flavors.keys()[i - 128]
> +
>  def tail(path):
>  	p = subprocess.Popen(['tail', '-n1', path],
>  			stdout = subprocess.PIPE)
> @@ -973,12 +981,14 @@ def do_run_test(tname, tdesc, flavs, opts):
>  			print_sep("Test %s FAIL at %s" % (tname,
> e.step), '#')
>  			t.print_output()
>  			t.kill()
> -			add_to_report(cr_api.logs(), "cr_logs")
> +			if cr_api.logs():
> +				add_to_report(cr_api.logs(),
> tname.replace('/', '_') + "_" + f + "/images")
>  			if opts['keep_img'] == 'never':
>  				cr_api.cleanup()
> -			# This exit does two things -- exits from
> subprocess and
> -			# aborts the main script execution on the
> 1st error met
> -			sys.exit(1)
> +			# When option --keep-going not specified
> this exit
> +			# does two things: exits from subprocess and
> aborts the
> +			# main script execution on the 1st error met
> +			sys.exit(encode_flav(f))

So this will still abort _this_ test on failure, i. e. further flavors
of _this_ test will not be run?

--
Ivan Shapovalov / intelfx /

>  		else:
>  			if opts['keep_img'] != 'always':
>  				cr_api.cleanup()
> @@ -1033,7 +1043,7 @@ class launcher:
>  		sub = subprocess.Popen(["./zdtm_ct", "zdtm.py"], \
>  				env = dict(os.environ,
> CR_CT_TEST_INFO = arg ), \
>  				stdout = log, stderr =
> subprocess.STDOUT)
> -		self.__subs[sub.pid] = { 'sub': sub, 'log': logf }
> +		self.__subs[sub.pid] = { 'sub': sub, 'log': logf,
> 'name': name }
>  
>  		if test_flag(desc, 'excl'):
>  			self.wait()
> @@ -1043,9 +1053,11 @@ class launcher:
>  		if pid != 0:
>  			sub = self.__subs.pop(pid)
>  			if status != 0:
> -				self.__fail = True
> +				if not opts['keep_going']:
> +					self.__fail = True
>  				if sub['log']:
> -					add_to_report(sub['log'],
> "output")
> +					failed_flavor =
> decode_flav(os.WEXITSTATUS(status))
> +					add_to_report(sub['log'],
> sub['name'].replace('/', '_') + "_" + failed_flavor + "/output")
>  
>  			if sub['log']:
>  				print open(sub['log']).read()
> @@ -1387,7 +1399,9 @@ if os.environ.has_key('CR_CT_TEST_INFO'):
>  		while True:
>  			wpid, status = os.wait()
>  			if wpid == pid:
> -				if not os.WIFEXITED(status) or
> os.WEXITSTATUS(status) != 0:
> +				if os.WIFEXITED(status):
> +					status =
> os.WEXITSTATUS(status)
> +				else:
>  					status = 1
>  				break;
>  
> @@ -1427,6 +1441,7 @@ rp.add_argument("--dry-run", help="Don't run
> tests, just pretend to", action='st
>  rp.add_argument("-k", "--keep-img", help = "Whether or not to keep
> images after test",
>  		choices = [ 'always', 'never', 'failed' ], default =
> 'failed')
>  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')
>  
>  lp = sp.add_parser("list", help = "List tests")
>  lp.set_defaults(action = list_tests)
> -- 
> 2.5.0
> 
> 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: This is a digitally signed message part
URL: <http://lists.openvz.org/pipermail/criu/attachments/20160319/308f7b27/attachment.sig>


More information about the CRIU mailing list