[CRIU] [PATCH v2] test/zdtm.py: add option to specify external criu for test suite
Andrei Vagin
avagin at virtuozzo.com
Wed Jun 13 20:14:35 MSK 2018
On Wed, Jun 13, 2018 at 01:09:54PM +0000, Adrian Reber wrote:
> From: Adrian Reber <areber at redhat.com>
>
> I am regularly running zdtm.py after updating the CRIU rpm to test if
> the new rpm still works. Until know I usually did:
>
> -criu_bin = "../criu/criu"
> -crit_bin = "../crit/crit"
> +criu_bin = "/usr/sbin/criu"
> +crit_bin = "/usr/bin/crit"
>
> This commit adds two arguments to zdtm.py:
>
> --criu-bin CRIU_BIN Path to criu binary
> --crit-bin CRIT_BIN Path to crit binary
>
> It still defaults to the old values from above, but can now easily be
> changed to the CRIU binary provided by the packaging system.
>
> This change was more complicated than expected which is probably related
> to the fact that zdtm restarts itself in namespaces.
>
> v2:
> - rebase
>
> Signed-off-by: Adrian Reber <areber at redhat.com>
> ---
> test/zdtm.py | 30 ++++++++++++++++--------------
> 1 file changed, 16 insertions(+), 14 deletions(-)
>
> diff --git a/test/zdtm.py b/test/zdtm.py
> index 1e193b2..6754851 100755
> --- a/test/zdtm.py
> +++ b/test/zdtm.py
> @@ -732,14 +732,11 @@ test_classes = {'zdtm': zdtm_test, 'inhfd': inhfd_test, 'groups': groups_test}
> # CRIU when launched using CLI
> #
>
> -criu_bin = "../criu/criu"
> -crit_bin = "../crit/crit"
> join_ns_file = '/run/netns/zdtm_netns'
>
> -
$ make lint
make[1]: Entering directory `/home/travis/build/criupatchwork/criu'
flake8 --config=scripts/flake8.cfg test/zdtm.py
test/zdtm.py:737:1: E302 expected 2 blank lines, found 1
> class criu_cli:
> @staticmethod
> - def run(action, args, fault = None, strace = [], preexec = None, nowait = False):
> + def run(action, args, criu_bin, fault = None, strace = [], preexec = None, nowait = False):
> env = dict(os.environ, ASAN_OPTIONS = "log_path=asan.log:disable_coredump=0:detect_leaks=0")
>
> if fault:
> @@ -820,7 +817,7 @@ class criu_rpc:
> raise test_fail_exc('RPC for %s required' % arg)
>
> @staticmethod
> - def run(action, args, fault = None, strace = [], preexec = None, nowait = False):
> + def run(action, args, criu_bin, fault = None, strace = [], preexec = None, nowait = False):
> if fault:
> raise test_fail_exc('RPC and FAULT not supported')
> if strace:
> @@ -898,6 +895,8 @@ class criu:
> self.__lazy_pages_p = None
> self.__page_server_p = None
> self.__dump_process = None
> + self.__criu_bin = opts['criu_bin']
> + self.__crit_bin = opts['crit_bin']
>
> def fini(self):
> if self.__lazy_migrate:
> @@ -1001,7 +1000,7 @@ class criu:
>
> ns_last_pid = open("/proc/sys/kernel/ns_last_pid").read()
>
> - ret = self.__criu.run(action, s_args, self.__fault, strace, preexec, nowait)
> + ret = self.__criu.run(action, s_args, self.__criu_bin, self.__fault, strace, preexec, nowait)
>
> if nowait:
> os.close(status_fds[1])
> @@ -1031,7 +1030,7 @@ class criu:
> open("/proc/sys/kernel/ns_last_pid", "w+").write(ns_last_pid)
> # try again without faults
> print("Run criu " + action)
> - ret = self.__criu.run(action, s_args, False, strace, preexec)
> + ret = self.__criu.run(action, s_args, self.__criu_bin, False, strace, preexec)
> grep_errors(os.path.join(__ddir, log))
> if ret == 0:
> return
> @@ -1045,7 +1044,7 @@ class criu:
> if not self.__show_stats:
> return
>
> - subprocess.Popen([crit_bin, "show",
> + subprocess.Popen([self.__crit_bin, "show",
> os.path.join(self.__dump_path,
> str(self.__iter), "stats-%s" % action)]).wait()
>
> @@ -1078,7 +1077,7 @@ class criu:
> logdir = os.getcwd() + "/" + self.__dump_path + "/" + str(self.__iter)
> print("Adding image cache")
>
> - cache_opts = [criu_bin, "image-cache", "--port", "12345", "-v4", "-o",
> + cache_opts = [self.__criu_bin, "image-cache", "--port", "12345", "-v4", "-o",
> logdir + "/image-cache.log", "-D", logdir]
>
> subprocess.Popen(cache_opts).pid
> @@ -1086,7 +1085,7 @@ class criu:
>
> print("Adding image proxy")
>
> - proxy_opts = [criu_bin, "image-proxy", "--port", "12345", "--address",
> + proxy_opts = [self.__criu_bin, "image-proxy", "--port", "12345", "--address",
> "localhost", "-v4", "-o", logdir + "/image-proxy.log",
> "-D", logdir]
>
> @@ -1183,12 +1182,12 @@ class criu:
> @staticmethod
> def check(feature):
> return criu_cli.run("check", ["--no-default-config", "-v0",
> - "--feature", feature]) == 0
> + "--feature", feature], opts['criu_bin']) == 0
>
> @staticmethod
> def available():
> - if not os.access(criu_bin, os.X_OK):
> - print("CRIU binary not built")
> + if not os.access(opts['criu_bin'], os.X_OK):
> + print("CRIU binary not found at %s" % opts['criu_bin'])
> sys.exit(1)
>
> def kill(self):
> @@ -1661,7 +1660,8 @@ class Launcher:
> nd = ('nocr', 'norst', 'pre', 'iters', 'page_server', 'sibling', 'stop', 'empty_ns',
> 'fault', 'keep_img', 'report', 'snaps', 'sat', 'script', 'rpc', 'lazy_pages',
> 'join_ns', 'dedup', 'sbs', 'freezecg', 'user', 'dry_run', 'noauto_dedup',
> - 'remote_lazy_pages', 'show_stats', 'remote', 'check_only', 'lazy_migrate')
> + 'remote_lazy_pages', 'show_stats', 'remote', 'check_only', 'lazy_migrate',
> + 'criu_bin', 'crit_bin')
> arg = repr((name, desc, flavor, {d: self.__opts[d] for d in nd}))
>
> if self.__use_log:
> @@ -2220,6 +2220,8 @@ rp.add_argument("--remote-lazy-pages", help = "simulate lazy migration", action
> rp.add_argument("--title", help = "A test suite title", default = "criu")
> rp.add_argument("--show-stats", help = "Show criu statistics", action = 'store_true')
> rp.add_argument("--check-only", help = "Additionally try to dump/restore in --check-only mode", action = 'store_true')
> +rp.add_argument("--criu-bin", help = "Path to criu binary", default = '../criu/criu')
> +rp.add_argument("--crit-bin", help = "Path to crit binary", default = '../crit/crit')
>
> lp = sp.add_parser("list", help = "List tests")
> lp.set_defaults(action = list_tests)
> --
> 1.8.3.1
>
More information about the CRIU
mailing list