From 165d0633f66d93394465ddc4f44f74e6767a5af5 Mon Sep 17 00:00:00 2001 From: Joachim Wiberg Date: Sun, 25 Sep 2022 04:38:24 +0200 Subject: [PATCH] test: add support for `make -j17 check` massive parallel testing This was a tough nut to crack. Spent 3-4 calendar weeks (getting blurry now) to try and figure it all out. In the end, the following changes were necessary: - Ensure setup-root.sh is guaranteed to run before any of the tests - Give all tests their unique /etc, /tmp, and /run inside the chroot. Turns out tmpfs+overlayfs can be used unprivileged inside an unshare - A static BusyBox binary with support for mount helpers so we can do the mkdir magic in skel/etc/fstab for the /etc overlay The last item turned out to be a bit of a roller coaster ride of its own. First of all, the original binary we used was from the upstream BusyBox project[1]. I was sure it couldn't be that hard to enable the CONFIG_FEATURE_MOUNT_HELPERS ... oh boy was I wrong. To make long and tedious story short; two new projects on GitHub were created for this task: 1) troglobit/misc[2] to house a mirror of https://musl.cc toolchains and 2) troglobit/busybox-builder[3] to download, patch, and build the thing using a .config from the myLinux[4] project. Patching this .config was necessary, however, since musl libc is strict POSIX and does not have any of the BSD extensions, e.g. REG_STARTEND that is in GLIBC regex(3). [1]: https://busybox.net/downloads/binaries/1.31.0-defconfig-multiarch-musl/ [2]: https://github.com/troglobit/misc/releases/tag/11-20211120 [3]: https://github.com/troglobit/busybox-builder/releases/tag/1_35_0 [4]: https://github.com/troglobit/myLinux Signed-off-by: Joachim Wiberg --- test/Makefile.am | 7 ++++++- test/skel/etc/fstab | 7 +++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/test/Makefile.am b/test/Makefile.am index caa59f21..321fb386 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -47,7 +47,6 @@ checkself.sh: TEST_EXTENSIONS = .sh TESTS = checkself.sh -TESTS += setup-root.sh TESTS += add-remove-dynamic-service.sh TESTS += add-remove-dynamic-service-sub-config.sh TESTS += cond-start-task.sh @@ -64,6 +63,12 @@ TESTS += start-stop-sysv.sh TESTS += start-stop-serv.sh TESTS += signal-service.sh +check-recursive: setup-chroot + +.PHONY: setup-chroot +setup-chroot: + @TENV_ROOT='$(abs_builddir)/tenv-root/' srcdir=$(srcdir) top_builddir=$(top_builddir) ./setup-root.sh + clean-local: -rm -rf $(builddir)/tenv-root/ -rm -f checkself.sh diff --git a/test/skel/etc/fstab b/test/skel/etc/fstab index e69de29b..d98aee34 100644 --- a/test/skel/etc/fstab +++ b/test/skel/etc/fstab @@ -0,0 +1,7 @@ +# +tmpfs /tmp tmpfs mode=1777 0 0 +mkdir#-p#-m0755 /tmp/etc.u helper none 0 0 +mkdir#-p#-m0755 /tmp/etc.w helper none 0 0 + +# Each test needs a dedicated /etc for finit.conf etc. +etc /etc overlay lowerdir=/etc,upperdir=/tmp/etc.u,workdir=/tmp/etc.w 0 0