diff --git a/test/Makefile.am b/test/Makefile.am index a74116d3..50380d2a 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -1,6 +1,21 @@ SUBDIRS = common tenv -EXTRA_DIST = setup-root.sh +EXTRA_DIST = skel/bin/busybox-x86_64.md5 skel/bin/service.sh skel/bin/slay \ + skel/cdrom/.empty skel/dev/shm/.empty skel/dev/pts/.empty \ + skel/etc/inittab skel/etc/hostname skel/etc/fstab \ + skel/etc/init.d/rcS skel/etc/init.d/rcK skel/tmp/.empty \ + skel/etc/init.d/S01-service.sh skel/home/.empty \ + skel/proc/.empty skel/root/.empty skel/run/.empty \ + skel/sbin/chrootsetup.sh skel/srv/.empty skel/sys/.empty \ + skel/usr/bin/.empty skel/usr/lib/.empty skel/usr/sbin/.empty \ + skel/usr/games/.empty skel/usr/src/.empty \ + skel/usr/share/.empty skel/usr/include/.empty \ + skel/usr/local/games/.empty skel/usr/local/sbin/.empty \ + skel/usr/local/share/.empty skel/usr/local/src/.empty \ + skel/usr/local/lib/.empty skel/usr/local/bin/.empty \ + skel/usr/local/etc/.empty skel/var/run + +EXTRA_DIST += setup-root.sh EXTRA_DIST += add-remove-dynamic-service.sh EXTRA_DIST += add-remove-dynamic-service-sub-config.sh EXTRA_DIST += start-stop-service.sh diff --git a/test/add-remove-dynamic-service-sub-config.sh b/test/add-remove-dynamic-service-sub-config.sh index 1aa7b41f..a1f4387f 100755 --- a/test/add-remove-dynamic-service-sub-config.sh +++ b/test/add-remove-dynamic-service-sub-config.sh @@ -13,15 +13,12 @@ test_teardown() say "Running test teardown." texec rm -f "$FINIT_RCSD/service.conf" - texec rm -f /test_assets/service.sh } say "Test start $(date)" -cp "$TEST_DIR"/common/service.sh "$TENV_ROOT"/test_assets/ - say "Add a dynamic service in $FINIT_RCSD/service.conf" -texec sh -c "echo 'service [2345] kill:20 log /test_assets/service.sh -- Dyn serv' > $FINIT_RCSD/service.conf" +texec sh -c "echo 'service [2345] kill:20 log service.sh -- Dyn serv' > $FINIT_RCSD/service.conf" say 'Reload Finit' texec sh -c "initctl reload" diff --git a/test/add-remove-dynamic-service.sh b/test/add-remove-dynamic-service.sh index 9f6174fe..0adef719 100755 --- a/test/add-remove-dynamic-service.sh +++ b/test/add-remove-dynamic-service.sh @@ -13,15 +13,12 @@ test_teardown() say "Running test teardown." texec rm -f "$FINIT_CONF" - texec rm -f /test_assets/service.sh } say "Test start $(date)" -cp "$TEST_DIR"/common/service.sh "$TENV_ROOT"/test_assets/ - say "Add a dynamic service in $FINIT_CONF" -texec sh -c "echo 'service [2345] kill:20 log /test_assets/service.sh -- Dyn service' > $FINIT_CONF" +texec sh -c "echo 'service [2345] kill:20 log service.sh -- Dyn service' > $FINIT_CONF" say 'Reload Finit' texec sh -c "initctl reload" diff --git a/test/common/Makefile.am b/test/common/Makefile.am index cf4ab487..63637a62 100644 --- a/test/common/Makefile.am +++ b/test/common/Makefile.am @@ -1,4 +1,2 @@ -EXTRA_DIST = service.conf service.sh S01-service.sh slay.sh - noinst_PROGRAMS = serv serv_SOURCES = serv.c diff --git a/test/common/service.conf b/test/common/service.conf deleted file mode 100644 index 3fd97586..00000000 --- a/test/common/service.conf +++ /dev/null @@ -1 +0,0 @@ -service [2345] kill:20 log /test_assets/service.sh diff --git a/test/setup-root.sh b/test/setup-root.sh index 4662ecb2..b9a63984 100755 --- a/test/setup-root.sh +++ b/test/setup-root.sh @@ -4,6 +4,7 @@ set -eu # shellcheck disable=SC2154 make -C "$top_builddir" DESTDIR="$TENV_ROOT" install +cp "$top_builddir/test/common/serv" "$TENV_ROOT/sbin/" # shellcheck disable=SC2154 FINITBIN="$(pwd)/$top_builddir/src/finit" DEST="$TENV_ROOT" make -f "$srcdir/tenv/root.mk" diff --git a/test/signal-service.sh b/test/signal-service.sh index 85495d21..1c151cad 100755 --- a/test/signal-service.sh +++ b/test/signal-service.sh @@ -14,18 +14,15 @@ test_teardown() say "Running test teardown." texec rm -f "$FINIT_CONF" - texec rm -f /test_assets/service.sh } say "Test start $(date)" -cp "$TEST_DIR"/common/service.sh "$TENV_ROOT"/test_assets/ - say 'Ensure file system is cleared' texec rm -f /tmp/usr1.log say "Add service stanza in $FINIT_CONF" -texec sh -c "echo 'service [2345] kill:20 log /test_assets/service.sh -- Test service' > $FINIT_CONF" +texec sh -c "echo 'service [2345] kill:20 log service.sh -- Test service' > $FINIT_CONF" say 'Reload Finit' texec sh -c "initctl reload" diff --git a/test/tenv/busybox-x86_64.md5 b/test/skel/bin/busybox-x86_64.md5 similarity index 100% rename from test/tenv/busybox-x86_64.md5 rename to test/skel/bin/busybox-x86_64.md5 diff --git a/test/common/slay.sh b/test/skel/bin/slay similarity index 100% rename from test/common/slay.sh rename to test/skel/bin/slay diff --git a/test/skel/cdrom/.empty b/test/skel/cdrom/.empty new file mode 100644 index 00000000..e69de29b diff --git a/test/skel/dev/pts/.empty b/test/skel/dev/pts/.empty new file mode 100644 index 00000000..e69de29b diff --git a/test/skel/dev/shm/.empty b/test/skel/dev/shm/.empty new file mode 100644 index 00000000..e69de29b diff --git a/test/skel/etc/fstab b/test/skel/etc/fstab new file mode 100644 index 00000000..e69de29b diff --git a/test/skel/etc/hostname b/test/skel/etc/hostname new file mode 100644 index 00000000..9daeafb9 --- /dev/null +++ b/test/skel/etc/hostname @@ -0,0 +1 @@ +test diff --git a/test/common/S01-service.sh b/test/skel/etc/init.d/S01-service.sh similarity index 94% rename from test/common/S01-service.sh rename to test/skel/etc/init.d/S01-service.sh index 2a7597c8..23b0dde7 100755 --- a/test/common/S01-service.sh +++ b/test/skel/etc/init.d/S01-service.sh @@ -1,7 +1,7 @@ #!/bin/sh # SysV style start script for service.sh -DAEMON="/test_assets/service.sh" +DAEMON="/sbin/service.sh" PIDFILE="/var/run/service.pid" start() diff --git a/test/skel/etc/init.d/rcK b/test/skel/etc/init.d/rcK new file mode 100755 index 00000000..20eccdaf --- /dev/null +++ b/test/skel/etc/init.d/rcK @@ -0,0 +1,4 @@ +#!/bin/sh + +echo "Shutting down ..." +exit 0 diff --git a/test/skel/etc/init.d/rcS b/test/skel/etc/init.d/rcS new file mode 100755 index 00000000..e54910f5 --- /dev/null +++ b/test/skel/etc/init.d/rcS @@ -0,0 +1,5 @@ +#!/bin/sh + +echo "Starting up ..." +poweroff -d 2 + diff --git a/test/skel/etc/inittab b/test/skel/etc/inittab new file mode 100644 index 00000000..dbe1342d --- /dev/null +++ b/test/skel/etc/inittab @@ -0,0 +1,40 @@ +# /etc/inittab +# +# Copyright (C) 2001 Erik Andersen +# +# Note: BusyBox init doesn't support runlevels. The runlevels field is +# completely ignored by BusyBox init. If you want runlevels, use +# sysvinit. +# +# Format for each entry: ::: +# +# id == tty to run on, or empty for /dev/console +# runlevels == ignored +# action == one of sysinit, respawn, askfirst, wait, and once +# process == program to run + +# Startup the system +#::sysinit:/bin/mount -t proc proc /proc +#::sysinit:/bin/mount -o remount,rw / +#::sysinit:/bin/mkdir -p /dev/pts /dev/shm +#::sysinit:/bin/mount -a +#::sysinit:/bin/mkdir -p /run/lock/subsys +#::sysinit:/sbin/swapon -a +null::sysinit:/bin/ln -sf /proc/self/fd /dev/fd +null::sysinit:/bin/ln -sf /proc/self/fd/0 /dev/stdin +null::sysinit:/bin/ln -sf /proc/self/fd/1 /dev/stdout +null::sysinit:/bin/ln -sf /proc/self/fd/2 /dev/stderr +::sysinit:/bin/hostname -F /etc/hostname +# now run any rc scripts +::sysinit:/etc/init.d/rcS + +# Put a getty on the serial port +#ttyS0::respawn:/sbin/getty -L ttyS0 115200 vt100 # GENERIC_SERIAL + +# Stuff to do for the 3-finger salute +#::ctrlaltdel:/sbin/reboot + +# Stuff to do before rebooting +::shutdown:/etc/init.d/rcK +#::shutdown:/sbin/swapoff -a +#::shutdown:/bin/umount -a -r diff --git a/test/skel/home/.empty b/test/skel/home/.empty new file mode 100644 index 00000000..e69de29b diff --git a/test/skel/proc/.empty b/test/skel/proc/.empty new file mode 100644 index 00000000..e69de29b diff --git a/test/skel/root/.empty b/test/skel/root/.empty new file mode 100644 index 00000000..e69de29b diff --git a/test/skel/run/.empty b/test/skel/run/.empty new file mode 100644 index 00000000..e69de29b diff --git a/test/tenv/chrootsetup.sh b/test/skel/sbin/chrootsetup.sh similarity index 94% rename from test/tenv/chrootsetup.sh rename to test/skel/sbin/chrootsetup.sh index 404f5721..fee405f6 100755 --- a/test/tenv/chrootsetup.sh +++ b/test/skel/sbin/chrootsetup.sh @@ -12,7 +12,7 @@ # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. +# all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, @@ -29,6 +29,8 @@ export PATH=$PATH:/usr/bin:/usr/sbin # that's not possible if you're not privileged. For now tmpfs will # have to do. mount -n -t tmpfs none /dev +# Silence BusyBox init +touch /dev/null mount -t proc none /proc mount -t sysfs none /sys diff --git a/test/common/service.sh b/test/skel/sbin/service.sh similarity index 100% rename from test/common/service.sh rename to test/skel/sbin/service.sh diff --git a/test/skel/srv/.empty b/test/skel/srv/.empty new file mode 100644 index 00000000..e69de29b diff --git a/test/skel/sys/.empty b/test/skel/sys/.empty new file mode 100644 index 00000000..e69de29b diff --git a/test/skel/tmp/.empty b/test/skel/tmp/.empty new file mode 100644 index 00000000..e69de29b diff --git a/test/skel/usr/bin/.empty b/test/skel/usr/bin/.empty new file mode 100644 index 00000000..e69de29b diff --git a/test/skel/usr/games/.empty b/test/skel/usr/games/.empty new file mode 100644 index 00000000..e69de29b diff --git a/test/skel/usr/include/.empty b/test/skel/usr/include/.empty new file mode 100644 index 00000000..e69de29b diff --git a/test/skel/usr/lib/.empty b/test/skel/usr/lib/.empty new file mode 100644 index 00000000..e69de29b diff --git a/test/skel/usr/local/bin/.empty b/test/skel/usr/local/bin/.empty new file mode 100644 index 00000000..e69de29b diff --git a/test/skel/usr/local/etc/.empty b/test/skel/usr/local/etc/.empty new file mode 100644 index 00000000..e69de29b diff --git a/test/skel/usr/local/games/.empty b/test/skel/usr/local/games/.empty new file mode 100644 index 00000000..e69de29b diff --git a/test/skel/usr/local/lib/.empty b/test/skel/usr/local/lib/.empty new file mode 100644 index 00000000..e69de29b diff --git a/test/skel/usr/local/sbin/.empty b/test/skel/usr/local/sbin/.empty new file mode 100644 index 00000000..e69de29b diff --git a/test/skel/usr/local/share/.empty b/test/skel/usr/local/share/.empty new file mode 100644 index 00000000..e69de29b diff --git a/test/skel/usr/local/src/.empty b/test/skel/usr/local/src/.empty new file mode 100644 index 00000000..e69de29b diff --git a/test/skel/usr/sbin/.empty b/test/skel/usr/sbin/.empty new file mode 100644 index 00000000..e69de29b diff --git a/test/skel/usr/share/.empty b/test/skel/usr/share/.empty new file mode 100644 index 00000000..e69de29b diff --git a/test/skel/usr/src/.empty b/test/skel/usr/src/.empty new file mode 100644 index 00000000..e69de29b diff --git a/test/skel/var/run b/test/skel/var/run new file mode 120000 index 00000000..84ba55b9 --- /dev/null +++ b/test/skel/var/run @@ -0,0 +1 @@ +../run \ No newline at end of file diff --git a/test/start-kill-service.sh b/test/start-kill-service.sh index 4bc22e1d..e9202c85 100755 --- a/test/start-kill-service.sh +++ b/test/start-kill-service.sh @@ -15,17 +15,13 @@ test_teardown() say "Running test teardown." texec rm -f "$FINIT_CONF" - texec rm -f /test_assets/service.sh } say "Test start $(date)" - -cp "$TEST_DIR"/common/slay.sh "$TENV_ROOT"/test_assets/ -cp "$TEST_DIR"/common/service.sh "$TENV_ROOT"/test_assets/ rm -f "$TENV_ROOT"/oldpid say "Add service stanza in $FINIT_CONF" -texec sh -c "echo 'service [2345] respawn log /test_assets/service.sh -- Test service' > $FINIT_CONF" +texec sh -c "echo 'service [2345] respawn log service.sh -- Test service' > $FINIT_CONF" say 'Reload Finit' texec sh -c "initctl reload" @@ -40,7 +36,7 @@ laps=1000 while [ $i -lt $laps ]; do i=$((i + 1)) say "Lap $i/$laps, killing service ..." # we have this, no sleep needed - texec sh -c "/test_assets/slay.sh service.sh" + texec sh -c "slay service.sh" done retry 'assert_new_pid service.sh /run/service.pid' diff --git a/test/start-stop-serv.sh b/test/start-stop-serv.sh index 302b5053..83fcb685 100755 --- a/test/start-stop-serv.sh +++ b/test/start-stop-serv.sh @@ -6,7 +6,6 @@ TEST_DIR=$(dirname "$0") test_setup() { say "Test start $(date)" - cp "$TENV_ROOT"/../common/serv "$TENV_ROOT"/test_assets/ } test_teardown() @@ -15,7 +14,6 @@ test_teardown() say "Running test teardown." texec rm -f "$FINIT_CONF" - texec rm -f /test_assets/serv } test_one() @@ -57,12 +55,12 @@ test_one() # shellcheck source=/dev/null . "$TEST_DIR/tenv/lib.sh" -test_one "/run/serv.pid" "service pid:!/run/serv.pid /test_assets/serv -- Forking service, type 1" -test_one "/run/serv.pid" "service type:forking /test_assets/serv -- Forking service, type 2" +test_one "/run/serv.pid" "service pid:!/run/serv.pid serv -- Forking service, type 1" +test_one "/run/serv.pid" "service type:forking serv -- Forking service, type 2" # This one could never be started by and monitored by Finit: it forks to # background and does not create a PID file. Essentially it's lost to # Finit, and any other sane process monitor. -#test_one "/run/serv.pid" "service pid:/run/serv.pid /test_assets/serv -p -- Forking service w/o PID file" -test_one "/run/serv.pid" "service pid:/run/serv.pid /test_assets/serv -n -- Foreground service w/o PID file" -test_one "/run/serv.pid" "service /test_assets/serv -n -p -- Foreground service w/ PID file" -test_one "/run/servy.pid" "service pid:/run/servy.pid /test_assets/serv -n -p -P /run/servy.pid -- Foreground service w/ custom PID file" +#test_one "/run/serv.pid" "service pid:/run/serv.pid serv -p -- Forking service w/o PID file" +test_one "/run/serv.pid" "service pid:/run/serv.pid serv -n -- Foreground service w/o PID file" +test_one "/run/serv.pid" "service serv -n -p -- Foreground service w/ PID file" +test_one "/run/servy.pid" "service pid:/run/servy.pid serv -n -p -P /run/servy.pid -- Foreground service w/ custom PID file" diff --git a/test/start-stop-service-sub-config.sh b/test/start-stop-service-sub-config.sh index 8f8fc079..937c05e6 100755 --- a/test/start-stop-service-sub-config.sh +++ b/test/start-stop-service-sub-config.sh @@ -13,19 +13,19 @@ test_teardown() say "Running test teardown." texec rm -f "$FINIT_RCSD/service.conf" - texec rm -f /test_assets/service.sh } say "Test start $(date)" -cp "$TEST_DIR"/common/service.sh "$TENV_ROOT"/test_assets/ - say "Add service stanza in $FINIT_RCSD/service.conf" -texec sh -c "echo 'service [2345] kill:20 log /test_assets/service.sh -- Subserv' > $FINIT_RCSD/service.conf" +texec sh -c "echo 'service [2345] kill:20 log service.sh -- Subserv' > $FINIT_RCSD/service.conf" say 'Reload Finit' texec sh -c "initctl reload" +sleep 2 +texec sh -c "ps" + retry 'assert_num_children 1 service.sh' say 'Stop the service' diff --git a/test/start-stop-service.sh b/test/start-stop-service.sh index a4396b42..40a53479 100755 --- a/test/start-stop-service.sh +++ b/test/start-stop-service.sh @@ -13,15 +13,12 @@ test_teardown() say "Running test teardown." texec rm -f "$FINIT_CONF" - texec rm -f /test_assets/service.sh } say "Test start $(date)" -cp "$TEST_DIR"/common/service.sh "$TENV_ROOT"/test_assets/ - say "Add service stanza in $FINIT_CONF" -texec sh -c "echo 'service [2345] kill:20 log /test_assets/service.sh -- Test service' > $FINIT_CONF" +texec sh -c "echo 'service [2345] kill:20 log service.sh -- Test service' > $FINIT_CONF" say 'Reload Finit' texec sh -c "initctl reload" diff --git a/test/start-stop-sysv.sh b/test/start-stop-sysv.sh index 659bb069..43181354 100755 --- a/test/start-stop-sysv.sh +++ b/test/start-stop-sysv.sh @@ -12,17 +12,12 @@ test_teardown() { say "Running test teardown." texec rm -f "$FINIT_CONF" - texec rm -f /test_assets/service.sh } say "Test start $(date)" -cp "$TEST_DIR"/common/service.sh "$TENV_ROOT"/test_assets/ -cp "$TEST_DIR"/common/S01-service.sh "$TENV_ROOT"/test_assets/ -chmod +x "$TENV_ROOT"/test_assets/*.sh - say "Add sysv stanza in $FINIT_CONF" -texec sh -c "echo 'sysv [2345] pid:!/run/service.pid name:service.sh /test_assets/S01-service.sh -- SysV test service' > $FINIT_CONF" +texec sh -c "echo 'sysv [2345] pid:!/run/service.pid name:service.sh /etc/init.d/S01-service.sh -- SysV test service' > $FINIT_CONF" say 'Reload Finit' texec sh -c "initctl reload" diff --git a/test/tenv/root.mk b/test/tenv/root.mk index 7712a60c..596689eb 100644 --- a/test/tenv/root.mk +++ b/test/tenv/root.mk @@ -20,8 +20,9 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -DEST ?= ../tenv-root srcdir ?= ../ +SKEL ?= $(srcdir)/skel +DEST ?= ../tenv-root CACHE ?= ~/.cache ARCH ?= x86_64 @@ -33,34 +34,19 @@ BBBIN = busybox-$(ARCH) BBHOME ?= https://www.busybox.net/downloads/binaries BBURL ?= $(BBHOME)/$(BBVER)-defconfig-multiarch-musl/$(BBBIN) -dirs = $(DEST)/bin \ - $(DEST)/dev \ - $(DEST)/etc \ - $(DEST)/proc \ - $(DEST)/sbin \ - $(DEST)/usr/bin \ - $(DEST)/usr/sbin \ - $(DEST)/var \ - $(DEST)/run \ - $(DEST)/sys \ - $(DEST)/test_assets \ - $(DEST)/tmp - _libs_src = $(shell ldd $(FINITBIN) | grep -Eo '/[^ ]+') libs = $(foreach path,$(_libs_src),$(abspath $(DEST))$(path)) -all: $(dirs) $(libs) $(DEST)/bin/chrootsetup.sh $(DEST)/bin/$(BBBIN) - touch $(DEST)/etc/fstab +all: $(libs) $(DEST)/bin/$(BBBIN) @(cd $(DEST); \ for prg in `./bin/$(BBBIN) --list-full`; do \ ln -sf /bin/$(BBBIN) $$prg; \ done) -$(dirs): - mkdir -p $@ - $(DEST)/bin/$(BBBIN).md5: - cp $(srcdir)/tenv/$(notdir $@) $@ + @mkdir -p $(DEST) + @cp -a $(SKEL)/* $(DEST)/ + @find $(DEST) -name .empty -delete $(DEST)/bin/$(BBBIN): $(DEST)/bin/$(BBBIN).md5 @(cd $(dir $@); \ @@ -85,9 +71,6 @@ $(DEST)/bin/$(BBBIN): $(DEST)/bin/$(BBBIN).md5 fi) @chmod +x $@ -$(DEST)/bin/chrootsetup.sh: - cp $(srcdir)/tenv/$(notdir $@) $@ - $(libs): mkdir -p $(dir $@) cp $(patsubst $(abspath $(DEST))%,%,$@) $@ diff --git a/test/tenv/start.sh b/test/tenv/start.sh index 3af5411d..3b128b8d 100755 --- a/test/tenv/start.sh +++ b/test/tenv/start.sh @@ -46,4 +46,4 @@ exec "$unshare" \ --mount \ --mount-proc \ --uts --ipc --net \ - "$chroot" "$TENV_ROOT" /bin/chrootsetup.sh "$@" + "$chroot" "$TENV_ROOT" /sbin/chrootsetup.sh "$@"