[CRIU] [PATCH 2/2] test: Check action scripts to work as we expect

Andrew Vagin avagin at virtuozzo.com
Thu Apr 28 13:34:59 PDT 2016


Acked-by: Andrew Vagin <avagin at virtuozzo.com>
On Thu, Apr 28, 2016 at 05:46:59PM +0300, Pavel Emelyanov wrote:
> We expect:
> 
> - all 9 scripts are called
> - there's always images dir variable
> - for 7 of those scripts there's root-pid variable
> 
> Signed-off-by: Pavel Emelyanov <xemul at virtuozzo.com>
> ---
>  test/check_actions.py   | 40 ++++++++++++++++++++++++++++++++++++++++
>  test/jenkins/actions.sh |  8 ++++++++
>  test/show_action.sh     |  3 +++
>  test/zdtm.py            |  8 ++++++--
>  4 files changed, 57 insertions(+), 2 deletions(-)
>  create mode 100755 test/check_actions.py
>  create mode 100755 test/jenkins/actions.sh
>  create mode 100755 test/show_action.sh
> 
> diff --git a/test/check_actions.py b/test/check_actions.py
> new file mode 100755
> index 0000000..70d257f
> --- /dev/null
> +++ b/test/check_actions.py
> @@ -0,0 +1,40 @@
> +#!/usr/bin/env python
> +
> +import sys
> +import os
> +
> +actions = set(['pre-dump', 'pre-restore', 'post-dump', 'setup-namespaces', \
> +		'post-setup-namespaces', 'post-restore', 'post-resume', \
> +		'network-lock', 'network-unlock' ])
> +errors = []
> +af = os.path.dirname(os.path.abspath(__file__)) + '/actions_called.txt'
> +
> +for act in open(af):
> +	act = act.strip().split()
> +	act.append('EMPTY')
> +	act.append('EMPTY')
> +
> +	if act[0] == 'EMPTY':
> +		raise Exception("Error in test, bogus actions line")
> +
> +	if act[1] == 'EMPTY':
> +		errors.append('Action %s misses CRTOOLS_IMAGE_DIR' % act[0])
> +
> +	if act[0] in ('post-dump', 'setup-namespaces', 'post-setup-namespaces', \
> +			'post-restore', 'post-resume', 'network-lock', 'network-unlock'):
> +		if act[2] == 'EMPTY':
> +			errors.append('Action %s misses CRTOOLS_INIT_PID' % act[0])
> +		elif not act[2].isdigit() or int(act[2]) == 0:
> +			errors.append('Action %s PID is not number (%s)' % (act[0], act[2]))
> +
> +	actions -= set([act[0]])
> +
> +if actions:
> +	errors.append('Not all actions called: %r' % actions)
> +
> +if errors:
> +	for x in errors:
> +		print x
> +	sys.exit(1)
> +
> +print 'PASS'
> diff --git a/test/jenkins/actions.sh b/test/jenkins/actions.sh
> new file mode 100755
> index 0000000..8019045
> --- /dev/null
> +++ b/test/jenkins/actions.sh
> @@ -0,0 +1,8 @@
> +# Check how crit de/encodes images
> +set -e
> +source `dirname $0`/criu-lib.sh
> +# prep
> +rm -f actions_called.txt
> +./test/zdtm.py run -t zdtm/static/env00 --script "$(pwd)/test/show_action.sh" || fail
> +./test/check_actions.py || fail
> +exit 0
> diff --git a/test/show_action.sh b/test/show_action.sh
> new file mode 100755
> index 0000000..86468b6
> --- /dev/null
> +++ b/test/show_action.sh
> @@ -0,0 +1,3 @@
> +#!/bin/bash
> +echo "${CRTOOLS_SCRIPT_ACTION} ${CRTOOLS_IMAGE_DIR} ${CRTOOLS_INIT_PID}" \
> +	     >> "$(dirname $0)/actions_called.txt"
> diff --git a/test/zdtm.py b/test/zdtm.py
> index 87904d7..081c46c 100755
> --- a/test/zdtm.py
> +++ b/test/zdtm.py
> @@ -613,6 +613,7 @@ class criu_cli:
>  		self.__restore_sibling = (opts['sibling'] and True or False)
>  		self.__join_ns = (opts['join_ns'] and True or False)
>  		self.__fault = (opts['fault'])
> +		self.__script = opts['script']
>  		self.__sat = (opts['sat'] and True or False)
>  		self.__dedup = (opts['dedup'] and True or False)
>  		self.__user = (opts['user'] and True or False)
> @@ -675,6 +676,9 @@ class criu_cli:
>  				strace += [ '-f' ]
>  				s_args += [ '--action-script', os.getcwd() + '/../scripts/fake-restore.sh' ]
>  
> +		if self.__script:
> +			s_args += ['--action-script', self.__script]
> +
>  		preexec = self.__user and self.set_user_id or None
>  
>  		__ddir = self.__ddir()
> @@ -1074,7 +1078,7 @@ class launcher:
>  		self.__show_progress()
>  
>  		nd = ('nocr', 'norst', 'pre', 'iters', 'page_server', 'sibling', 'join_ns', \
> -				'fault', 'keep_img', 'report', 'snaps', 'sat', \
> +				'fault', 'keep_img', 'report', 'snaps', 'sat', 'script', \
>  				'dedup', 'sbs', 'freezecg', 'user', 'dry_run')
>  		arg = repr((name, desc, flavor, { d: self.__opts[d] for d in nd }))
>  
> @@ -1514,7 +1518,7 @@ rp.add_argument("--user", help = "Run CRIU as regular user", action = 'store_tru
>  rp.add_argument("--page-server", help = "Use page server dump", action = 'store_true')
>  rp.add_argument("-p", "--parallel", help = "Run test in parallel")
>  rp.add_argument("--dry-run", help="Don't run tests, just pretend to", action='store_true')
> -
> +rp.add_argument("--script", help="Add script to get notified by criu")
>  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")
> -- 
> 2.5.0
> _______________________________________________
> CRIU mailing list
> CRIU at openvz.org
> https://lists.openvz.org/mailman/listinfo/criu


More information about the CRIU mailing list