diff --git a/src/resolve/test-dns-packet.c b/src/resolve/test-dns-packet.c index 7c6346cb66..bdd96aa9a2 100644 --- a/src/resolve/test-dns-packet.c +++ b/src/resolve/test-dns-packet.c @@ -92,7 +92,6 @@ static void test_packet_from_file(const char* filename, bool canonical) { int main(int argc, char **argv) { int i, N; - _cleanup_free_ char *pkts_glob = NULL; _cleanup_globfree_ glob_t g = {}; char **fnames; @@ -102,7 +101,8 @@ int main(int argc, char **argv) { N = argc - 1; fnames = argv + 1; } else { - pkts_glob = path_join(get_testdata_dir(), "test-resolve/*.pkts"); + _cleanup_free_ char *pkts_glob = NULL; + assert_se(get_testdata_dir("test-resolve/*.pkts", &pkts_glob) >= 0); assert_se(glob(pkts_glob, GLOB_NOSORT, NULL, &g) == 0); N = g.gl_pathc; fnames = g.gl_pathv; diff --git a/src/shared/tests.c b/src/shared/tests.c index 96b5b805a9..764e4656bb 100644 --- a/src/shared/tests.c +++ b/src/shared/tests.c @@ -58,21 +58,25 @@ static void load_testdata_env(void) { setenv(*k, *v, 0); } -const char* get_testdata_dir(void) { - const char *env; +int get_testdata_dir(const char *suffix, char **ret) { + const char *dir; + char *p; load_testdata_env(); /* if the env var is set, use that */ - env = getenv("SYSTEMD_TEST_DATA"); - if (!env) - env = SYSTEMD_TEST_DATA; - if (access(env, F_OK) < 0) { - fprintf(stderr, "ERROR: $SYSTEMD_TEST_DATA directory [%s] does not exist\n", env); - exit(EXIT_FAILURE); - } + dir = getenv("SYSTEMD_TEST_DATA"); + if (!dir) + dir = SYSTEMD_TEST_DATA; + if (access(dir, F_OK) < 0) + return log_error_errno(errno, "ERROR: $SYSTEMD_TEST_DATA directory [%s] not accesible: %m", dir); - return env; + p = path_join(dir, suffix); + if (!p) + return log_oom(); + + *ret = p; + return 0; } const char* get_catalog_dir(void) { diff --git a/src/shared/tests.h b/src/shared/tests.h index 5a6fd53f36..6817ef4860 100644 --- a/src/shared/tests.h +++ b/src/shared/tests.h @@ -20,7 +20,7 @@ static inline bool manager_errno_skip_test(int r) { char* setup_fake_runtime_dir(void); int enter_cgroup_subroot(char **ret_cgroup); -const char* get_testdata_dir(void); +int get_testdata_dir(const char *suffix, char **ret); const char* get_catalog_dir(void); bool slow_tests_enabled(void); void test_setup_logging(int level); diff --git a/src/test/test-bpf-firewall.c b/src/test/test-bpf-firewall.c index fbaa349b45..71aed12558 100644 --- a/src/test/test-bpf-firewall.c +++ b/src/test/test-bpf-firewall.c @@ -48,7 +48,9 @@ int main(int argc, char *argv[]) { if (r == -ENOMEDIUM) return log_tests_skipped("cgroupfs not available"); - assert_se(set_unit_path(get_testdata_dir()) >= 0); + _cleanup_free_ char *unit_dir = NULL; + assert_se(get_testdata_dir("units", &unit_dir) >= 0); + assert_se(set_unit_path(unit_dir) >= 0); assert_se(runtime_dir = setup_fake_runtime_dir()); r = bpf_program_new(BPF_PROG_TYPE_CGROUP_SKB, &p); diff --git a/src/test/test-cgroup-mask.c b/src/test/test-cgroup-mask.c index 02c8549b4b..daafba4ef6 100644 --- a/src/test/test-cgroup-mask.c +++ b/src/test/test-cgroup-mask.c @@ -38,7 +38,9 @@ static int test_cgroup_mask(void) { return log_tests_skipped("cgroupfs not available"); /* Prepare the manager. */ - assert_se(set_unit_path(get_testdata_dir()) >= 0); + _cleanup_free_ char *unit_dir = NULL; + assert_se(get_testdata_dir("units", &unit_dir) >= 0); + assert_se(set_unit_path(unit_dir) >= 0); assert_se(runtime_dir = setup_fake_runtime_dir()); r = manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_BASIC, &m); if (IN_SET(r, -EPERM, -EACCES)) { diff --git a/src/test/test-cgroup-unit-default.c b/src/test/test-cgroup-unit-default.c index 1286f11e4e..372667041c 100644 --- a/src/test/test-cgroup-unit-default.c +++ b/src/test/test-cgroup-unit-default.c @@ -22,7 +22,9 @@ static int test_default_memory_low(void) { if (r == -ENOMEDIUM) return log_tests_skipped("cgroupfs not available"); - assert_se(set_unit_path(get_testdata_dir()) >= 0); + _cleanup_free_ char *unit_dir = NULL; + assert_se(get_testdata_dir("units", &unit_dir) >= 0); + assert_se(set_unit_path(unit_dir) >= 0); assert_se(runtime_dir = setup_fake_runtime_dir()); r = manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_BASIC, &m); if (IN_SET(r, -EPERM, -EACCES)) { diff --git a/src/test/test-engine.c b/src/test/test-engine.c index b8351141fe..6465151b27 100644 --- a/src/test/test-engine.c +++ b/src/test/test-engine.c @@ -26,8 +26,11 @@ int main(int argc, char *argv[]) { return log_tests_skipped("cgroupfs not available"); /* prepare the test */ - assert_se(set_unit_path(get_testdata_dir()) >= 0); + _cleanup_free_ char *unit_dir = NULL; + assert_se(get_testdata_dir("units", &unit_dir) >= 0); + assert_se(set_unit_path(unit_dir) >= 0); assert_se(runtime_dir = setup_fake_runtime_dir()); + r = manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_BASIC, &m); if (manager_errno_skip_test(r)) return log_tests_skipped_errno(r, "manager_new"); diff --git a/src/test/test-execute.c b/src/test/test-execute.c index 4e0fd7d5b4..5a96b46a77 100644 --- a/src/test/test-execute.c +++ b/src/test/test-execute.c @@ -806,7 +806,6 @@ static int run_tests(UnitFileScope scope, const test_entry tests[], char **patte int main(int argc, char *argv[]) { _cleanup_(rm_rf_physical_and_freep) char *runtime_dir = NULL; - _cleanup_free_ char *test_execute_path = NULL; static const test_entry user_tests[] = { entry(test_exec_basic), @@ -878,9 +877,10 @@ int main(int argc, char *argv[]) { if (r == -ENOMEDIUM) return log_tests_skipped("cgroupfs not available"); + _cleanup_free_ char *unit_dir = NULL; + assert_se(get_testdata_dir("test-execute/", &unit_dir) >= 0); + assert_se(set_unit_path(unit_dir) >= 0); assert_se(runtime_dir = setup_fake_runtime_dir()); - test_execute_path = path_join(get_testdata_dir(), "test-execute"); - assert_se(set_unit_path(test_execute_path) >= 0); /* Unset VAR1, VAR2 and VAR3 which are used in the PassEnvironment test * cases, otherwise (and if they are present in the environment), diff --git a/src/test/test-journal-importer.c b/src/test/test-journal-importer.c index 7e898735c9..4883356956 100644 --- a/src/test/test-journal-importer.c +++ b/src/test/test-journal-importer.c @@ -25,7 +25,7 @@ static void test_basic_parsing(void) { _cleanup_free_ char *journal_data_path = NULL; int r; - journal_data_path = path_join(get_testdata_dir(), "journal-data/journal-1.txt"); + assert_se(get_testdata_dir("journal-data/journal-1.txt", &journal_data_path) >= 0); imp.fd = open(journal_data_path, O_RDONLY|O_CLOEXEC); assert_se(imp.fd >= 0); @@ -56,7 +56,7 @@ static void test_bad_input(void) { _cleanup_free_ char *journal_data_path = NULL; int r; - journal_data_path = path_join(get_testdata_dir(), "journal-data/journal-2.txt"); + assert_se(get_testdata_dir("journal-data/journal-1.txt", &journal_data_path) >= 0); imp.fd = open(journal_data_path, O_RDONLY|O_CLOEXEC); assert_se(imp.fd >= 0); diff --git a/src/test/test-path.c b/src/test/test-path.c index 6ad222b5f9..830d5f261b 100644 --- a/src/test/test-path.c +++ b/src/test/test-path.c @@ -251,7 +251,7 @@ int main(int argc, char *argv[]) { test_setup_logging(LOG_INFO); - test_path = path_join(get_testdata_dir(), "test-path"); + assert_se(get_testdata_dir("test-path", &test_path) >= 0); assert_se(set_unit_path(test_path) >= 0); assert_se(runtime_dir = setup_fake_runtime_dir()); diff --git a/src/test/test-sched-prio.c b/src/test/test-sched-prio.c index cd45537847..da6d2a21e6 100644 --- a/src/test/test-sched-prio.c +++ b/src/test/test-sched-prio.c @@ -25,8 +25,11 @@ int main(int argc, char *argv[]) { return log_tests_skipped("cgroupfs not available"); /* prepare the test */ - assert_se(set_unit_path(get_testdata_dir()) >= 0); + _cleanup_free_ char *unit_dir = NULL; + assert_se(get_testdata_dir("units", &unit_dir) >= 0); + assert_se(set_unit_path(unit_dir) >= 0); assert_se(runtime_dir = setup_fake_runtime_dir()); + r = manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_BASIC, &m); if (manager_errno_skip_test(r)) return log_tests_skipped_errno(r, "manager_new"); diff --git a/src/test/test-umount.c b/src/test/test-umount.c index 6ab5758ede..b27b75b352 100644 --- a/src/test/test-umount.c +++ b/src/test/test-umount.c @@ -15,8 +15,10 @@ static void test_mount_points_list(const char *fname) { log_info("/* %s(\"%s\") */", __func__, fname ?: "/proc/self/mountinfo"); - if (fname) - fname = testdata_fname = path_join(get_testdata_dir(), fname); + if (fname) { + assert_se(get_testdata_dir(fname, &testdata_fname) >= 0); + fname = testdata_fname; + } LIST_HEAD_INIT(mp_list_head); assert_se(mount_points_list_get(fname, &mp_list_head) >= 0); @@ -37,8 +39,10 @@ static void test_swap_list(const char *fname) { log_info("/* %s(\"%s\") */", __func__, fname ?: "/proc/swaps"); - if (fname) - fname = testdata_fname = path_join(get_testdata_dir(), fname); + if (fname) { + assert_se(get_testdata_dir(fname, &testdata_fname) >= 0); + fname = testdata_fname; + } LIST_HEAD_INIT(mp_list_head); assert_se(swap_list_get(fname, &mp_list_head) >= 0); diff --git a/src/test/test-watch-pid.c b/src/test/test-watch-pid.c index bad289767d..28ecffb0c0 100644 --- a/src/test/test-watch-pid.c +++ b/src/test/test-watch-pid.c @@ -20,7 +20,10 @@ int main(int argc, char *argv[]) { if (r == -ENOMEDIUM) return log_tests_skipped("cgroupfs not available"); - assert_se(set_unit_path(get_testdata_dir()) >= 0); + _cleanup_free_ char *unit_dir = NULL; + assert_se(get_testdata_dir("units/", &unit_dir) >= 0); + assert_se(set_unit_path(unit_dir) >= 0); + assert_se(runtime_dir = setup_fake_runtime_dir()); assert_se(manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_BASIC, &m) >= 0); diff --git a/test/basic.target b/test/basic.target deleted file mode 120000 index 0612934682..0000000000 --- a/test/basic.target +++ /dev/null @@ -1 +0,0 @@ -../units/basic.target \ No newline at end of file diff --git a/test/meson.build b/test/meson.build index 2fbea31ccd..59639d0b81 100644 --- a/test/meson.build +++ b/test/meson.build @@ -1,49 +1,8 @@ # SPDX-License-Identifier: LGPL-2.1+ test_data_files = ''' - a.service - a-conj.service - b.service - basic.target - c.service - d.service - daughter.service - dml.slice - dml-passthrough.slice - dml-passthrough-empty.service - dml-passthrough-set-dml.service - dml-passthrough-set-ml.service - dml-override.slice - dml-override-empty.service - dml-discard.slice - dml-discard-empty.service - dml-discard-set-ml.service - e.service - end.service - f.service - g.service - grandchild.service - h.service - hello-after-sleep.target - hello.service - hwdb.d/10-bad.hwdb - i.service journal-data/journal-1.txt journal-data/journal-2.txt - nomem.slice - nomemleaf.service - parent-deep.slice - parent.slice - sched_idle_bad.service - sched_idle_ok.service - sched_rr_bad.service - sched_rr_change.service - sched_rr_ok.service - shutdown.target - sleep.service - sockets.target - son.service - sysinit.target test-execute/exec-basic.service test-execute/exec-ambientcapabilities-merge-nfsnobody.service test-execute/exec-ambientcapabilities-merge-nobody.service @@ -194,14 +153,6 @@ test_data_files = ''' test-umount/example.swaps test-umount/garbled.mountinfo test-umount/rhbug-1554943.mountinfo - testsuite.target - timers.target - unit-with-.service.d/20-override.conf - unit-with-multiple-.service.d/20-override.conf - unit-with-multiple-.service.d/30-override.conf - unit-with-multiple-dashes.service - unit-with-multiple-dashes.service.d/10-override.conf - unstoppable.service '''.split() if conf.get('ENABLE_RESOLVE') == 1 @@ -232,6 +183,10 @@ if install_tests endforeach endif +install_subdir( + 'units', + install_dir : testsdir + '/testdata/') + ############################################################ rule_syntax_check_py = find_program('rule-syntax-check.py') diff --git a/test/shutdown.target b/test/shutdown.target deleted file mode 120000 index 1a3c2eec84..0000000000 --- a/test/shutdown.target +++ /dev/null @@ -1 +0,0 @@ -../units/shutdown.target \ No newline at end of file diff --git a/test/sockets.target b/test/sockets.target deleted file mode 120000 index 8ff86a0775..0000000000 --- a/test/sockets.target +++ /dev/null @@ -1 +0,0 @@ -../units/sockets.target \ No newline at end of file diff --git a/test/sysinit.target b/test/sysinit.target deleted file mode 120000 index 3301338185..0000000000 --- a/test/sysinit.target +++ /dev/null @@ -1 +0,0 @@ -../units/sysinit.target \ No newline at end of file diff --git a/test/timers.target b/test/timers.target deleted file mode 120000 index 576d47fed7..0000000000 --- a/test/timers.target +++ /dev/null @@ -1 +0,0 @@ -../units/timers.target \ No newline at end of file diff --git a/test/a-conj.service b/test/units/a-conj.service similarity index 100% rename from test/a-conj.service rename to test/units/a-conj.service diff --git a/test/a.service b/test/units/a.service similarity index 100% rename from test/a.service rename to test/units/a.service diff --git a/test/b.service b/test/units/b.service similarity index 100% rename from test/b.service rename to test/units/b.service diff --git a/test/units/basic.target b/test/units/basic.target new file mode 120000 index 0000000000..a882b72cc9 --- /dev/null +++ b/test/units/basic.target @@ -0,0 +1 @@ +../../units/basic.target \ No newline at end of file diff --git a/test/c.service b/test/units/c.service similarity index 100% rename from test/c.service rename to test/units/c.service diff --git a/test/d.service b/test/units/d.service similarity index 100% rename from test/d.service rename to test/units/d.service diff --git a/test/daughter.service b/test/units/daughter.service similarity index 100% rename from test/daughter.service rename to test/units/daughter.service diff --git a/test/dml-discard-empty.service b/test/units/dml-discard-empty.service similarity index 100% rename from test/dml-discard-empty.service rename to test/units/dml-discard-empty.service diff --git a/test/dml-discard-set-ml.service b/test/units/dml-discard-set-ml.service similarity index 100% rename from test/dml-discard-set-ml.service rename to test/units/dml-discard-set-ml.service diff --git a/test/dml-discard.slice b/test/units/dml-discard.slice similarity index 100% rename from test/dml-discard.slice rename to test/units/dml-discard.slice diff --git a/test/dml-override-empty.service b/test/units/dml-override-empty.service similarity index 100% rename from test/dml-override-empty.service rename to test/units/dml-override-empty.service diff --git a/test/dml-override.slice b/test/units/dml-override.slice similarity index 100% rename from test/dml-override.slice rename to test/units/dml-override.slice diff --git a/test/dml-passthrough-empty.service b/test/units/dml-passthrough-empty.service similarity index 100% rename from test/dml-passthrough-empty.service rename to test/units/dml-passthrough-empty.service diff --git a/test/dml-passthrough-set-dml.service b/test/units/dml-passthrough-set-dml.service similarity index 100% rename from test/dml-passthrough-set-dml.service rename to test/units/dml-passthrough-set-dml.service diff --git a/test/dml-passthrough-set-ml.service b/test/units/dml-passthrough-set-ml.service similarity index 100% rename from test/dml-passthrough-set-ml.service rename to test/units/dml-passthrough-set-ml.service diff --git a/test/dml-passthrough.slice b/test/units/dml-passthrough.slice similarity index 100% rename from test/dml-passthrough.slice rename to test/units/dml-passthrough.slice diff --git a/test/dml.slice b/test/units/dml.slice similarity index 100% rename from test/dml.slice rename to test/units/dml.slice diff --git a/test/e.service b/test/units/e.service similarity index 100% rename from test/e.service rename to test/units/e.service diff --git a/test/end.service b/test/units/end.service similarity index 100% rename from test/end.service rename to test/units/end.service diff --git a/test/f.service b/test/units/f.service similarity index 100% rename from test/f.service rename to test/units/f.service diff --git a/test/g.service b/test/units/g.service similarity index 100% rename from test/g.service rename to test/units/g.service diff --git a/test/grandchild.service b/test/units/grandchild.service similarity index 100% rename from test/grandchild.service rename to test/units/grandchild.service diff --git a/test/h.service b/test/units/h.service similarity index 100% rename from test/h.service rename to test/units/h.service diff --git a/test/hello-after-sleep.target b/test/units/hello-after-sleep.target similarity index 100% rename from test/hello-after-sleep.target rename to test/units/hello-after-sleep.target diff --git a/test/hello.service b/test/units/hello.service similarity index 100% rename from test/hello.service rename to test/units/hello.service diff --git a/test/i.service b/test/units/i.service similarity index 100% rename from test/i.service rename to test/units/i.service diff --git a/test/loopy.service b/test/units/loopy.service similarity index 100% rename from test/loopy.service rename to test/units/loopy.service diff --git a/test/loopy.service.d/compat.conf b/test/units/loopy.service.d/compat.conf similarity index 100% rename from test/loopy.service.d/compat.conf rename to test/units/loopy.service.d/compat.conf diff --git a/test/loopy2.service b/test/units/loopy2.service similarity index 100% rename from test/loopy2.service rename to test/units/loopy2.service diff --git a/test/loopy3.service b/test/units/loopy3.service similarity index 100% rename from test/loopy3.service rename to test/units/loopy3.service diff --git a/test/loopy4.service b/test/units/loopy4.service similarity index 100% rename from test/loopy4.service rename to test/units/loopy4.service diff --git a/test/nomem.slice b/test/units/nomem.slice similarity index 100% rename from test/nomem.slice rename to test/units/nomem.slice diff --git a/test/nomemleaf.service b/test/units/nomemleaf.service similarity index 100% rename from test/nomemleaf.service rename to test/units/nomemleaf.service diff --git a/test/parent-deep.slice b/test/units/parent-deep.slice similarity index 100% rename from test/parent-deep.slice rename to test/units/parent-deep.slice diff --git a/test/parent.slice b/test/units/parent.slice similarity index 100% rename from test/parent.slice rename to test/units/parent.slice diff --git a/test/sched_idle_bad.service b/test/units/sched_idle_bad.service similarity index 100% rename from test/sched_idle_bad.service rename to test/units/sched_idle_bad.service diff --git a/test/sched_idle_ok.service b/test/units/sched_idle_ok.service similarity index 100% rename from test/sched_idle_ok.service rename to test/units/sched_idle_ok.service diff --git a/test/sched_rr_bad.service b/test/units/sched_rr_bad.service similarity index 100% rename from test/sched_rr_bad.service rename to test/units/sched_rr_bad.service diff --git a/test/sched_rr_change.service b/test/units/sched_rr_change.service similarity index 100% rename from test/sched_rr_change.service rename to test/units/sched_rr_change.service diff --git a/test/sched_rr_ok.service b/test/units/sched_rr_ok.service similarity index 100% rename from test/sched_rr_ok.service rename to test/units/sched_rr_ok.service diff --git a/test/units/shutdown.target b/test/units/shutdown.target new file mode 120000 index 0000000000..8e58943bc4 --- /dev/null +++ b/test/units/shutdown.target @@ -0,0 +1 @@ +../../units/shutdown.target \ No newline at end of file diff --git a/test/sleep.service b/test/units/sleep.service similarity index 100% rename from test/sleep.service rename to test/units/sleep.service diff --git a/test/units/sockets.target b/test/units/sockets.target new file mode 120000 index 0000000000..745480af56 --- /dev/null +++ b/test/units/sockets.target @@ -0,0 +1 @@ +../../units/sockets.target \ No newline at end of file diff --git a/test/son.service b/test/units/son.service similarity index 100% rename from test/son.service rename to test/units/son.service diff --git a/test/units/sysinit.target b/test/units/sysinit.target new file mode 120000 index 0000000000..9d10e5b2e2 --- /dev/null +++ b/test/units/sysinit.target @@ -0,0 +1 @@ +../../units/sysinit.target \ No newline at end of file diff --git a/test/testsuite.target b/test/units/testsuite.target similarity index 100% rename from test/testsuite.target rename to test/units/testsuite.target diff --git a/test/units/timers.target b/test/units/timers.target new file mode 120000 index 0000000000..7718a12683 --- /dev/null +++ b/test/units/timers.target @@ -0,0 +1 @@ +../../units/timers.target \ No newline at end of file diff --git a/test/unit-.service.d/10-override.conf b/test/units/unit-.service.d/10-override.conf similarity index 100% rename from test/unit-.service.d/10-override.conf rename to test/units/unit-.service.d/10-override.conf diff --git a/test/unit-with-.service.d/20-override.conf b/test/units/unit-with-.service.d/20-override.conf similarity index 100% rename from test/unit-with-.service.d/20-override.conf rename to test/units/unit-with-.service.d/20-override.conf diff --git a/test/unit-with-multiple-.service.d/20-override.conf b/test/units/unit-with-multiple-.service.d/20-override.conf similarity index 100% rename from test/unit-with-multiple-.service.d/20-override.conf rename to test/units/unit-with-multiple-.service.d/20-override.conf diff --git a/test/unit-with-multiple-.service.d/30-override.conf b/test/units/unit-with-multiple-.service.d/30-override.conf similarity index 100% rename from test/unit-with-multiple-.service.d/30-override.conf rename to test/units/unit-with-multiple-.service.d/30-override.conf diff --git a/test/unit-with-multiple-dashes.service b/test/units/unit-with-multiple-dashes.service similarity index 100% rename from test/unit-with-multiple-dashes.service rename to test/units/unit-with-multiple-dashes.service diff --git a/test/unit-with-multiple-dashes.service.d/10-override.conf b/test/units/unit-with-multiple-dashes.service.d/10-override.conf similarity index 100% rename from test/unit-with-multiple-dashes.service.d/10-override.conf rename to test/units/unit-with-multiple-dashes.service.d/10-override.conf diff --git a/test/unstoppable.service b/test/units/unstoppable.service similarity index 100% rename from test/unstoppable.service rename to test/units/unstoppable.service