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

Submitted by Pavel Emelianov on April 28, 2016, 2:46 p.m.

Details

Message ID 57222263.5050306@virtuozzo.com
State Accepted
Series "Series without cover letter"
Commit 85d7286d98443216bfc8c863c7ee53af8f61305c
Headers show

Commit Message

Pavel Emelianov April 28, 2016, 2:46 p.m.
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@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

Patch hide | download patch | download mbox

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")

Comments

Andrey Vagin April 28, 2016, 8:34 p.m.
Acked-by: Andrew Vagin <avagin@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@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@openvz.org
> https://lists.openvz.org/mailman/listinfo/criu