diff --git a/meson.build b/meson.build index b624c6d8f0..6e3728c286 100644 --- a/meson.build +++ b/meson.build @@ -201,6 +201,8 @@ kernelinstalldir = kerneldir / 'install.d' factorydir = datadir / 'factory' bootlibdir = prefixdir / 'lib/systemd/boot/efi' testsdir = prefixdir / 'lib/systemd/tests' +unittestsdir = testsdir / 'unit-tests' +testdata_dir = testsdir / 'testdata' systemdstatedir = localstatedir / 'lib/systemd' catalogstatedir = systemdstatedir / 'catalog' randomseeddir = localstatedir / 'lib/systemd' @@ -274,7 +276,7 @@ conf.set_quoted('SYSTEMD_LANGUAGE_FALLBACK_MAP', pkgdatadir / 'lang conf.set_quoted('SYSTEMD_MAKEFS_PATH', rootlibexecdir / 'systemd-makefs') conf.set_quoted('SYSTEMD_PULL_PATH', rootlibexecdir / 'systemd-pull') conf.set_quoted('SYSTEMD_SHUTDOWN_BINARY_PATH', rootlibexecdir / 'systemd-shutdown') -conf.set_quoted('SYSTEMD_TEST_DATA', testsdir / 'testdata') +conf.set_quoted('SYSTEMD_TEST_DATA', testdata_dir) conf.set_quoted('SYSTEMD_TTY_ASK_PASSWORD_AGENT_BINARY_PATH', rootbindir / 'systemd-tty-ask-password-agent') conf.set_quoted('SYSTEMD_UPDATE_HELPER_PATH', rootlibexecdir / 'systemd-update-helper') conf.set_quoted('SYSTEMD_USERWORK_PATH', rootlibexecdir / 'systemd-userwork') @@ -4320,7 +4322,7 @@ foreach test : tests build_by_default : want_tests != 'false', install_rpath : rootpkglibdir, install : install_tests, - install_dir : testsdir / type, + install_dir : unittestsdir / type, link_depends : runtest_env) if type == 'manual' @@ -4344,7 +4346,7 @@ exe = executable( dependencies : userspace, build_by_default : want_tests != 'false', install : install_tests, - install_dir : testsdir) + install_dir : unittestsdir) if want_tests != 'false' test('test-libsystemd-sym', exe) endif @@ -4362,7 +4364,7 @@ exe = executable( ], build_by_default : want_tests != 'false' and static_libsystemd_pic, install : install_tests and static_libsystemd_pic, - install_dir : testsdir) + install_dir : unittestsdir) if want_tests != 'false' and static_libsystemd_pic test('test-libsystemd-static-sym', exe) endif @@ -4376,7 +4378,7 @@ exe = executable( dependencies : userspace, build_by_default : want_tests != 'false', install : install_tests, - install_dir : testsdir) + install_dir : unittestsdir) if want_tests != 'false' test('test-libudev-sym', exe) endif @@ -4390,7 +4392,7 @@ exe = executable( dependencies : userspace, build_by_default : want_tests != 'false' and static_libudev_pic, install : install_tests and static_libudev_pic, - install_dir : testsdir) + install_dir : unittestsdir) if want_tests != 'false' and static_libudev_pic test('test-libudev-static-sym', exe) endif diff --git a/test/TEST-02-UNITTESTS/test.sh b/test/TEST-02-UNITTESTS/test.sh index 80cb82a50d..3d766db3e7 100755 --- a/test/TEST-02-UNITTESTS/test.sh +++ b/test/TEST-02-UNITTESTS/test.sh @@ -20,6 +20,13 @@ $KERNEL_APPEND # shellcheck source=test/test-functions . "${TEST_BASE_DIR:?}/test-functions" +test_append_files() { + if get_bool "$LOOKS_LIKE_SUSE"; then + dinfo "Install the unit test binaries needed by the TEST-02-UNITTESTS at runtime" + inst_recursive "${SOURCE_DIR}/unit-tests" + fi +} + check_result_nspawn() { check_result_nspawn_unittests "${1}" } diff --git a/test/meson.build b/test/meson.build index 1721cffcd5..80a83813cb 100644 --- a/test/meson.build +++ b/test/meson.build @@ -1,8 +1,6 @@ # SPDX-License-Identifier: LGPL-2.1-or-later if install_tests - testdata_dir = testsdir + '/testdata/' - foreach subdir : [ 'auxv', 'journal-data', @@ -59,6 +57,12 @@ if install_tests install_data('create-busybox-container', install_mode : 'rwxr-xr-x', install_dir : testdata_dir) + + # The unit tests implemented as shell scripts expect to find testdata/ + # in the directory where they are stored. + meson.add_install_script(meson_make_symlink, + testdata_dir, + unittestsdir / 'testdata') endif test_bootctl_json_sh = find_program('test-bootctl-json.sh') @@ -76,7 +80,7 @@ test_sysusers_sh = configure_file( configuration : conf) if install_tests and conf.get('ENABLE_SYSUSERS') == 1 install_data(test_sysusers_sh, - install_dir : testsdir) + install_dir : unittestsdir) install_subdir('test-sysusers', exclude_files : '.gitattributes', install_dir : testdata_dir) @@ -87,7 +91,7 @@ endif test_compare_versions_sh = files('test-compare-versions.sh') if install_tests install_data(test_compare_versions_sh, - install_dir : testsdir) + install_dir : unittestsdir) endif ############################################################ @@ -109,11 +113,11 @@ if install_tests install_data('test-fstab-generator.sh', install_mode : 'rwxr-xr-x', - install_dir : testsdir) + install_dir : unittestsdir) install_data('test-network-generator-conversion.sh', install_mode : 'rwxr-xr-x', - install_dir : testsdir) + install_dir : unittestsdir) endif ############################################################ diff --git a/test/run-unit-tests.py b/test/run-unit-tests.py index 4b180cc8df..2d6709b703 100755 --- a/test/run-unit-tests.py +++ b/test/run-unit-tests.py @@ -32,7 +32,7 @@ def argument_parser(): opts = argument_parser().parse_args() -unittestdir = pathlib.Path(__file__).parent.absolute() +unittestdir = pathlib.Path(__file__).parent.absolute() / 'unit-tests' tests = list(unittestdir.glob('test-*')) if opts.unsafe: diff --git a/test/test-functions b/test/test-functions index 644410d7bc..77894f8756 100644 --- a/test/test-functions +++ b/test/test-functions @@ -1144,7 +1144,7 @@ install_debian_systemd() { ddebug "Install debian files from package $deb" for file in $files; do [ -e "$file" ] || continue - [ -d "$file" ] && continue + [ ! -L "$file" ] && [ -d "$file" ] && continue inst "$file" done done < <(grep -E '^Package:' "${SOURCE_DIR}/debian/control" | cut -d ':' -f 2) @@ -1174,23 +1174,13 @@ install_suse_systemd() { ddebug "Install files from package $p" while read -r f; do [ -e "$f" ] || continue - [ -d "$f" ] && continue + [ ! -L "$file" ] && [ -d "$file" ] && continue inst "$f" done < <(rpm -ql "$p") done - # Embed the files needed by the extended testsuite at runtime. Also include - # the unit tests needed by TEST-02-UNITTESTS. This is mostly equivalent to - # what `ninja install` does for the tests when '-Dinstall-tests=true'. - # - # Why? openSUSE ships a package named 'systemd-testsuite' which contains - # the minimal set of files that allows to run the testsuite on the host (as - # long as it runs an equivalent version of systemd) getting rid of the - # hassles of fetching, configuring, building the source code. - dinfo "Install the files needed by the tests at runtime" - image_install "${SOURCE_DIR}"/test-* + dinfo "Install the data needed by the tests at runtime" inst_recursive "${SOURCE_DIR}/testdata" - inst_recursive "${SOURCE_DIR}/manual" # On openSUSE, this directory is not created at package install, at least # for now. @@ -1272,7 +1262,7 @@ get_ldpath() { install_missing_libraries() { dinfo "Install missing libraries" # install possible missing libraries - for i in "${initdir:?}"{,/usr}/{sbin,bin}/* "$initdir"{,/usr}/lib/systemd/{,tests/{,manual/,unsafe/}}*; do + for i in "${initdir:?}"{,/usr}/{sbin,bin}/* "$initdir"{,/usr}/lib/systemd/{,tests/unit-tests/{,manual/,unsafe/}}*; do LD_LIBRARY_PATH="${LD_LIBRARY_PATH:+$LD_LIBRARY_PATH:}$(get_ldpath "$i")" inst_libs "$i" done diff --git a/test/units/testsuite-02.sh b/test/units/testsuite-02.sh index 8ebcc575ee..61f6d06397 100755 --- a/test/units/testsuite-02.sh +++ b/test/units/testsuite-02.sh @@ -6,7 +6,7 @@ set -o pipefail NPROC=$(nproc) MAX_QUEUE_SIZE=${NPROC:-2} TESTS_GLOB=${TESTS_GLOB:-test-*} -mapfile -t TEST_LIST < <(find /usr/lib/systemd/tests/ -maxdepth 1 -type f -name "${TESTS_GLOB}") +mapfile -t TEST_LIST < <(find /usr/lib/systemd/tests/unit-tests/ -maxdepth 1 -type f -name "${TESTS_GLOB}") # reset state rm -fv /failed-tests /skipped-tests /skipped diff --git a/test/units/testsuite-35.sh b/test/units/testsuite-35.sh index 02f22cf2a2..8dcd7563bb 100755 --- a/test/units/testsuite-35.sh +++ b/test/units/testsuite-35.sh @@ -517,7 +517,7 @@ test_session_properties() { create_session s=$(loginctl list-sessions --no-legend | awk '$3 == "logind-test-user" { print $1 }') - /usr/lib/systemd/tests/manual/test-session-properties "/org/freedesktop/login1/session/_3${s?}" + /usr/lib/systemd/tests/unit-tests/manual/test-session-properties "/org/freedesktop/login1/session/_3${s?}" } test_list_users() {