[CRIU] [RFC PATCHv2 00/32] zdtm: single-process group tests
Ivan Shapovalov
intelfx at intelfx.name
Thu Mar 17 10:06:35 PDT 2016
On 2016-03-12 at 11:41 +0300, Ivan Shapovalov wrote:
> This patch series adds the "multi-test launcher" and related
> infrastructure
> to start multiple tests in one process. There are (almost) no
> modifications
> to the tests themselves; the ability to run tests standalone is also
> preserved
> on binary level (except for tests which use TLS, which seem to break
> when built with -pie for reasons that I do not completely
> understand).
>
> Sorry for this taking too long -- the fork/wait management opened a
> can of
> worms...
>
> Significant changes since v1 (I've squashed new work into previous
> commits,
> so a changelog is needed), in order of `git diff` between patchsets:
>
> - zdtm.py: removed overengineered nsroot population logic, replacing
> it with
> setting $PATH to canonical string so that all our hardcoded pathes
> like
> /sbin/iptables will work
> - zdtm.py: integrated single-process group tests (the multi-test
> launcher)
> via its own Makefile
> - launcher: implemented interception of fork()/wait() in launcher to
> allow
> tests to wait() for their child processes only (per commentary of
> Andrey
> Vagin)
> NB: this is complicated, probably it would've been a lot easier to
> patch
> tests to use waitpid()... but we're going the road of not
> altering the
> tests :)
>
> Insignificant changes since v1, in no particular order:
> - zdtm.py: implemented writing checkskip and hook scripts for groups
> - zdtm.py: implemented crlib flag support for group tests
> - zdtm.py: split --keep-going and --list-failures into separate
> patches
> - zdtm.py: allowed generating groups of size 1
> - zdtm.py: implemented "exhaustive" group generation mode
> - launcher: assorted bugfixes for corner cases in tests
> - Makefile: fixed building of multi-process groups executable
> - Makefile, tests: made tests tolerant to pathes in --filename/
> --dirname
> (as opposed to simply file names without any slashes)
> - tests: made all argument variables static
> (my toolchain emits crap when it sees a non-static `dirname`...
> probably
> a clash with dirname(3))
> - tests: fixed some tests to accept filenames of temporary files via
> args
> rather than use hardcoded files in cwd
> - tests: fixed netns-nf to work on arch (added yet another path to
> libxt_standard.so)
> - tests: swept noauto tests and removed that flag from those tests
> which
> complete successfully
>
> Known problems:
> - no ability to express explicit incompatibilities in test
> descriptors
> (e. g. static/mntns_shared_bind02 vs static/tempfs_subns,
> static/cgroup00 vs static/cgroup03)
> - no ability to express ordering in test descriptors
> (e. g. static/sigpending must be last)
> - transition/ptrace fails because ptracer must stay in the same
> thread
> (need to implement a possibility to run whole test in a separate
> thread,
> rather than just the busy loop)
> - SIGCHLD hack in static/sigpending: test modified to ignore stray
> SIGCHLD
> coming from other tests
> Possible resolutions:
> - leave the hack as it is
> - add explicit incompatibilities to static/sigpending vs.
> everything else
> that uses SIGCHLD
> - no checking for signal handler conflicts (when two tests set their
> own
> handlers for the same signal)
> - no checking for cwd conflicts (when two tests change their cwds)
> - there was no testing in exhaustive mode
>
> Ivan Shapovalov (32):
> zdtm: zdtm.py: add --keep-going option
> zdtm: zdtm.py: reset $PATH to canonical in ns tests
> zdtm: zdtm.py: add --list-failures option
> zdtm: zdtm.py: implement exhaustive group generation (still subject
> to test compatibility screening)
> zdtm: zdtm.py: allow deliberately generating test groups of size 1
> zdtm: zdtm.py: write "meta" checkskip/hook scripts for group tests
> zdtm: zdtm.py: properly handle 'crlib' in group tests
> compiler.h: add basic attribute cleanup machinery
> zdtm: reuse criu's compiler.h
> zdtm: lib: make libzdtmtst a shared object
> zdtm: ignore helper binaries and when searching for all tests
> zdtm: Makefile: sanitize building of groups executable
> zdtm: Makefile: cleanup and deduplicate Makefiles
> zdtm: Makefile: separate test launch and cmdline generation phases
> zdtm: Makefile: use different launcher arguments for tests which do
> busy-loops
> zdtm: Makefile: support passing various path prefixes to test
> Makefiles
> zdtm: tests: make all command-line arguments variables static
> zdtm: tests: make tests tolerant to slashes in filename arguments
> zdtm: static/{bridge,netns}: support running from another cwd
> zdtm: static/file_locks00: report pass/fail in parent process
> zdtm: static/write_read02: support longer pathes passed as --
> filename
> zdtm: static/netns-nf: add yet another path for libxt_standard.so
> (as in Arch)
> zdtm: static/sigpending: ignore foreign SIGCHLD events (for single-
> process group tests)
> zdtm: tests: sweep noauto tests and remove noauto status from those
> which run correctly
> zdtm: lib: export some internals of libzdtmtst
> zdtm: lib: add pr_debug() macro in line with other pr_*
> zdtm: lib: include tid in debug messages
> zdtm: lib: write our own assert()
> zdtm: add the multi-test launcher
> zdtm: launcher: initial implementation of fork()+wait() management
> zdtm: Makefile: build TLS-using tests with -shared rather than -pie
> zdtm: zdtm.py: hook up the multi-test launcher to existing group
> tests infrastructure
>
> criu/include/compiler.h | 10 +
> test/zdtm.desc | 2 +-
> test/zdtm.py | 150 +++-
> test/zdtm/.gitignore | 4 +-
> test/zdtm/Makefile | 16 +-
> test/zdtm/Makefile.inc | 6 +-
> test/zdtm/Makefile.live | 124 +++
> test/zdtm/Makefile.multi | 54 ++
> test/zdtm/launcher/Makefile | 32 +
> test/zdtm/launcher/launcher.c | 1331
> ++++++++++++++++++++++++++++
> test/zdtm/lib/Makefile | 18 +-
> test/zdtm/lib/include/compiler.h | 1 +
> test/zdtm/lib/lock.h | 7 +-
> test/zdtm/lib/msg.c | 7 +
> test/zdtm/lib/parseargs.c | 6 +-
> test/zdtm/lib/test.c | 73 +-
> test/zdtm/lib/zdtmtst.h | 58 +-
> test/zdtm/lib/zdtmtst_internal.h | 41 +
> test/zdtm/static/Makefile | 148 +---
> test/zdtm/static/bind-mount.c | 2 +-
> test/zdtm/static/binfmt_misc.c | 2 +-
> test/zdtm/static/bridge.c | 14 +-
> test/zdtm/static/cgroup00.c | 2 +-
> test/zdtm/static/cgroup01.c | 2 +-
> test/zdtm/static/cgroup02.c | 2 +-
> test/zdtm/static/cgroup03.c | 2 +-
> test/zdtm/static/cgroup_stray.c | 2 +-
> test/zdtm/static/cgroupns.c | 2 +-
> test/zdtm/static/chroot-file.c | 4 +-
> test/zdtm/static/chroot.c | 4 +-
> test/zdtm/static/console.c | 2 +-
> test/zdtm/static/cow00.desc | 1 -
> test/zdtm/static/cow01.c | 2 +-
> test/zdtm/static/cwd00.c | 2 +-
> test/zdtm/static/cwd01.c | 2 +-
> test/zdtm/static/cwd02.c | 2 +-
> test/zdtm/static/deleted_dev.c | 2 +-
> test/zdtm/static/deleted_unix_sock.c | 2 +-
> test/zdtm/static/env00.c | 2 +-
> test/zdtm/static/fd.desc | 1 -
> test/zdtm/static/fdt_shared.c | 2 +-
> test/zdtm/static/fifo-ghost.c | 2 +-
> test/zdtm/static/fifo-rowo-pair.c | 4 +-
> test/zdtm/static/fifo.c | 2 +-
> test/zdtm/static/fifo_ro.c | 2 +-
> test/zdtm/static/fifo_wronly.c | 2 +-
> test/zdtm/static/file_append.c | 2 +-
> test/zdtm/static/file_attr.c | 6 +-
> test/zdtm/static/file_locks00.c | 13 +-
> test/zdtm/static/file_locks01.c | 2 +-
> test/zdtm/static/file_locks02.c | 2 +-
> test/zdtm/static/file_locks03.c | 2 +-
> test/zdtm/static/file_locks04.c | 2 +-
> test/zdtm/static/file_locks05.c | 2 +-
> test/zdtm/static/file_shared.c | 2 +-
> test/zdtm/static/fpu01.c | 10 +-
> test/zdtm/static/futex.c | 2 +-
> test/zdtm/static/inotify00.c | 2 +-
> test/zdtm/static/inotify02.c | 2 +-
> test/zdtm/static/inotify02.desc | 1 -
> test/zdtm/static/jobctl00.c | 4 +-
> test/zdtm/static/link10.c | 2 +-
> test/zdtm/static/maps00.c | 2 +-
> test/zdtm/static/maps03.desc | 1 -
> test/zdtm/static/maps_file_prot.c | 2 +-
> test/zdtm/static/mem-touch.desc | 1 -
> test/zdtm/static/mnt_ext_auto.c | 2 +-
> test/zdtm/static/mnt_ext_master.c | 2 +-
> test/zdtm/static/mnt_ro_bind.c | 2 +-
> test/zdtm/static/mntns_deleted.c | 2 +-
> test/zdtm/static/mntns_link_remap.c | 2 +-
> test/zdtm/static/mntns_open.c | 2 +-
> test/zdtm/static/mntns_root_bind.c | 2 +-
> test/zdtm/static/mntns_shared_bind.c | 2 +-
> test/zdtm/static/mntns_shared_vs_private.c | 2 +-
> test/zdtm/static/mount_paths.c | 2 +-
> test/zdtm/static/mtime_mmap.c | 2 +-
> test/zdtm/static/netns-nf.c | 8 +-
> test/zdtm/static/netns-nf.desc | 2 +-
> test/zdtm/static/netns.c | 15 +-
> test/zdtm/static/overmount_dev.c | 2 +-
> test/zdtm/static/overmount_fifo.c | 2 +-
> test/zdtm/static/overmount_file.c | 2 +-
> test/zdtm/static/overmount_sock.c | 2 +-
> test/zdtm/static/rmdir_open.c | 2 +-
> test/zdtm/static/session02.c | 2 +-
> test/zdtm/static/shm.c | 2 +-
> test/zdtm/static/sigpending.c | 2 +-
> test/zdtm/static/sk-unix-rel.c | 2 +-
> test/zdtm/static/socket_close_data01.c | 2 +-
> test/zdtm/static/sockets00.c | 2 +-
> test/zdtm/static/sockets_dgram.c | 2 +-
> test/zdtm/static/tempfs.c | 2 +-
> test/zdtm/static/tempfs_ro.c | 2 +-
> test/zdtm/static/tempfs_subns.c | 2 +-
> test/zdtm/static/tty00.desc | 1 -
> test/zdtm/static/umask00.c | 2 +-
> test/zdtm/static/unhashed_proc.c | 12 +-
> test/zdtm/static/unlink_fifo.c | 2 +-
> test/zdtm/static/unlink_fifo_wronly.c | 2 +-
> test/zdtm/static/unlink_fstat00.c | 2 +-
> test/zdtm/static/unlink_fstat01.c | 2 +-
> test/zdtm/static/unlink_fstat02.c | 2 +-
> test/zdtm/static/unlink_fstat03.c | 2 +-
> test/zdtm/static/unlink_largefile.c | 2 +-
> test/zdtm/static/unlink_mmap00.c | 2 +-
> test/zdtm/static/unlink_mmap01.c | 2 +-
> test/zdtm/static/unlink_mmap02.c | 2 +-
> test/zdtm/static/unlink_regular00.c | 2 +-
> test/zdtm/static/uptime_grow.desc | 1 -
> test/zdtm/static/vfork00.desc | 2 +-
> test/zdtm/static/vt.c | 2 +-
> test/zdtm/static/write_read00.c | 2 +-
> test/zdtm/static/write_read01.c | 2 +-
> test/zdtm/static/write_read02.c | 7 +-
> test/zdtm/static/write_read10.c | 2 +-
> test/zdtm/transition/Makefile | 90 +-
> test/zdtm/transition/epoll.c | 2 +-
> test/zdtm/transition/epoll.desc | 1 -
> test/zdtm/transition/fifo_dyn.c | 2 +-
> test/zdtm/transition/fifo_dyn.desc | 1 -
> test/zdtm/transition/fifo_loop.c | 4 +-
> test/zdtm/transition/fifo_loop.desc | 1 -
> test/zdtm/transition/file_aio.desc | 1 -
> test/zdtm/transition/file_read.c | 8 +-
> test/zdtm/transition/ipc.c | 2 +-
> test/zdtm/transition/pipe_loop00.c | 2 +-
> test/zdtm/transition/pipe_shared00.c | 2 +-
> test/zdtm/transition/ptrace.c | 2 +-
> test/zdtm/transition/ptrace.desc | 1 -
> test/zdtm/transition/socket_loop00.c | 2 +-
> test/zdtm/transition/socket_loop00.desc | 1 -
> test/zdtm/transition/unix_sock.c | 4 +-
> test/zdtm/transition/unix_sock.desc | 1 -
> 134 files changed, 2076 insertions(+), 403 deletions(-)
> create mode 100644 test/zdtm/Makefile.live
> create mode 100644 test/zdtm/Makefile.multi
> create mode 100644 test/zdtm/launcher/Makefile
> create mode 100644 test/zdtm/launcher/launcher.c
> create mode 120000 test/zdtm/lib/include/compiler.h
> create mode 100644 test/zdtm/lib/zdtmtst_internal.h
> delete mode 100644 test/zdtm/static/cow00.desc
> delete mode 100644 test/zdtm/static/fd.desc
> delete mode 100644 test/zdtm/static/inotify02.desc
> delete mode 100644 test/zdtm/static/maps03.desc
> delete mode 100644 test/zdtm/static/mem-touch.desc
> delete mode 100644 test/zdtm/static/tty00.desc
> delete mode 100644 test/zdtm/static/uptime_grow.desc
> delete mode 100644 test/zdtm/transition/epoll.desc
> delete mode 100644 test/zdtm/transition/fifo_dyn.desc
> delete mode 100644 test/zdtm/transition/fifo_loop.desc
> delete mode 100644 test/zdtm/transition/file_aio.desc
> delete mode 100644 test/zdtm/transition/ptrace.desc
> delete mode 100644 test/zdtm/transition/socket_loop00.desc
> delete mode 100644 test/zdtm/transition/unix_sock.desc
>
Anything? I wanted to know if the approach itself is OK before I finish
the remaining pieces...
--
Ivan Shapovalov / intelfx /
-------------- 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/20160317/78eff4bc/attachment-0001.sig>
More information about the CRIU
mailing list