diff --git a/test/Makefile.am b/test/Makefile.am index 29f9741c..992c68c3 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -1,6 +1,17 @@ -AM_TESTS_ENVIRONMENT = make -C test_root/; -TESTS = checkself.sh -TESTS += test_start_stop_service/test.sh +EXTRA_DIST = lib.sh testenv_exec.sh testenv_start.sh +EXTRA_DIST += test_root/Makefile test_root/busybox-x86_64.md5 +EXTRA_DIST += test_root/bin/chrootsetup.sh +EXTRA_DIST += checkself.sh +EXTRA_DIST += setup_root.sh +EXTRA_DIST += teardown_root.sh +EXTRA_DIST += test_start_stop_service/test.sh +EXTRA_DIST += test_start_stop_service/service.sh -clean-local: - make -C test_root/ clean +AM_TESTS_ENVIRONMENT = TESTS_ROOT='$(builddir)/test_root/'; +AM_TESTS_ENVIRONMENT += export TESTS_ROOT; +AM_TESTS_ENVIRONMENT += export LD_LIBRARY_PATH; + +TESTS = checkself.sh +TESTS += setup_root.sh +TESTS += test_start_stop_service/test.sh +TESTS += teardown_root.sh diff --git a/test/checkself.sh b/test/checkself.sh index 07405ced..b42091e9 100755 --- a/test/checkself.sh +++ b/test/checkself.sh @@ -1,6 +1,8 @@ #!/bin/sh -set -eux +set -eu + +testdir="${srcdir:-$(dirname "$0")}" # shellcheck disable=SC2046 -shellcheck $(find ./ -name '*.sh') +shellcheck $(find "$testdir" -name '*.sh') diff --git a/test/lib.sh b/test/lib.sh index afa2d6f1..7902bae1 100755 --- a/test/lib.sh +++ b/test/lib.sh @@ -2,7 +2,7 @@ texec() { # shellcheck disable=SC2154 - "$TEST_DIR/testenv_exec.sh" "$finit_pid" "$@" + TESTS_ROOT=. "$TEST_DIR/testenv_exec.sh" "$finit_pid" "$@" } pause() { @@ -75,14 +75,16 @@ teardown() { else log "$fg_red" 'TEST FAIL' '' fi - texec kill -SIGUSR2 1 + if [ -n "${finit_pid+x}" ]; then + texec kill -SIGUSR2 1 + fi wait } trap teardown EXIT -FINIT_CONF=$(grep FINIT_CONF "$TEST_DIR/../config.h" | cut -d' ' -f3 | cut -d'"' -f2) +FINIT_CONF=$(grep FINIT_CONF "$TESTS_ROOT/../config.h" | cut -d' ' -f3 | cut -d'"' -f2) export FINIT_CONF FINIT_CONF_DIR="$(dirname "$FINIT_CONF")"/finit.d export FINIT_CONF_DIR diff --git a/test/setup_root.sh b/test/setup_root.sh new file mode 100755 index 00000000..a00f1244 --- /dev/null +++ b/test/setup_root.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +set -eu + +# shellcheck disable=SC2154 +"$srcdir"/../configure --prefix=/ +make +make DESTDIR="$(pwd)/test_root/" install + +mkdir -p test_root/bin +cp "${srcdir}/test_root/bin/chrootsetup.sh" test_root/bin +cp "${srcdir}/test_root/busybox-x86_64.md5" test_root/ +cp "${srcdir}/test_root/Makefile" test_root/ + +make -C test_root/ diff --git a/test/teardown_root.sh b/test/teardown_root.sh new file mode 100755 index 00000000..5cf2eb1d --- /dev/null +++ b/test/teardown_root.sh @@ -0,0 +1,8 @@ +#!/bin/sh + +set -eu + +if [ -d test_root/var/lock ]; then + chmod +r test_root/var/lock +fi +make -C test_root/ clean diff --git a/test/test_root/Makefile b/test/test_root/Makefile index 29dd7d68..99b23c2e 100644 --- a/test/test_root/Makefile +++ b/test/test_root/Makefile @@ -2,8 +2,8 @@ ARCH ?= x86_64 -FINITBIN ?= ../../src/finit -INITCTLBIN ?= ../../src/initctl +FINITBIN ?= ./sbin/finit +INITCTLBIN ?= ./sbin/initctl BBVER ?= 1.31.0 BBBIN = busybox-$(ARCH) @@ -40,7 +40,7 @@ dirs = ./dev \ _libs_src = $(shell ldd $(FINITBIN) | grep -Eo '/[^ ]+') libs = $(foreach path,$(_libs_src),.$(path)) -all: $(binaries) $(dirs) ./sbin/finit ./bin/initctl +all: $(binaries) $(dirs) $(libs) $(dirs): mkdir -p $@ @@ -55,19 +55,12 @@ $(binaries): ./bin/$(BBBIN) rm -f $(notdir $@); \ ln -s $(BBBIN) $(notdir $@) -./sbin/finit: $(FINITBIN) $(libs) - cp $< $@ - -./bin/initctl: $(INITCTLBIN) $(libs) - cp $< $@ - $(libs): mkdir -p $(dir $@) cp /$@ $@ clean: rm -f ./bin/$(BBBIN) - rm -f ./bin/initctl rm -rf $(binaries) rm -rf ./dev rm -rf ./etc diff --git a/test/test_start_stop_service/test.sh b/test/test_start_stop_service/test.sh index d4146e4a..68eb7e1b 100755 --- a/test/test_start_stop_service/test.sh +++ b/test/test_start_stop_service/test.sh @@ -12,7 +12,7 @@ assert_num_children() { # Test say 'Set up a service' -cp "$TEST_DIR"/test_start_stop_service/service.sh "$TEST_DIR"/test_root/test_assets/ +cp "$TEST_DIR"/test_start_stop_service/service.sh "$TESTS_ROOT"/test_assets/ texec sh -c "echo 'service [2345] kill:20 log /test_assets/service.sh' > $FINIT_CONF" say 'Reload Finit' @@ -29,4 +29,4 @@ texec kill -SIGHUP 1 retry 'assert_num_children 0 service.sh' # Teardown -rm -f test_root/bin/service.sh +rm -f "$TESTS_ROOT"/bin/service.sh diff --git a/test/testenv_exec.sh b/test/testenv_exec.sh index 5243c142..cfb51053 100755 --- a/test/testenv_exec.sh +++ b/test/testenv_exec.sh @@ -11,7 +11,7 @@ target="$1" shift TEST_DIR=$(dirname "$0") -TESTS_ROOT="$(pwd)/${TEST_DIR}/test_root" +TESTS_ROOT="${TESTS_ROOT:-$(pwd)/${TEST_DIR}/test_root}" nsenter=$(command -v nsenter) chroot=$(command -v chroot) diff --git a/test/testenv_start.sh b/test/testenv_start.sh index 5c8cee8d..ebf7258c 100755 --- a/test/testenv_start.sh +++ b/test/testenv_start.sh @@ -3,7 +3,7 @@ set -eu TEST_DIR=$(dirname "$0") -TESTS_ROOT="$(pwd)/${TEST_DIR}/test_root" +TESTS_ROOT="${TESTS_ROOT:-$(pwd)/${TEST_DIR}/test_root}" >&2 echo "Hint: Execute '${TEST_DIR}/testenv_exec.sh \$(pgrep -P $$) /bin/sh; reset' to enter the test namespace"