From 7b4329534688612dce829afb5088298e734f5086 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Fri, 6 Dec 2019 21:51:59 +0100 Subject: [PATCH 01/78] tests: move unit files to units/ subdirectory We have a bazillion of those unit files, and keeping them all directly in tests/ has become rather unwieldy. --- src/resolve/test-dns-packet.c | 4 +- src/shared/tests.c | 24 +++++---- src/shared/tests.h | 2 +- src/test/test-bpf-firewall.c | 4 +- src/test/test-cgroup-mask.c | 4 +- src/test/test-cgroup-unit-default.c | 4 +- src/test/test-engine.c | 5 +- src/test/test-execute.c | 6 +-- src/test/test-journal-importer.c | 4 +- src/test/test-path.c | 2 +- src/test/test-sched-prio.c | 5 +- src/test/test-umount.c | 12 +++-- src/test/test-watch-pid.c | 5 +- test/basic.target | 1 - test/meson.build | 53 ++----------------- test/shutdown.target | 1 - test/sockets.target | 1 - test/sysinit.target | 1 - test/timers.target | 1 - test/{ => units}/a-conj.service | 0 test/{ => units}/a.service | 0 test/{ => units}/b.service | 0 test/units/basic.target | 1 + test/{ => units}/c.service | 0 test/{ => units}/d.service | 0 test/{ => units}/daughter.service | 0 test/{ => units}/dml-discard-empty.service | 0 test/{ => units}/dml-discard-set-ml.service | 0 test/{ => units}/dml-discard.slice | 0 test/{ => units}/dml-override-empty.service | 0 test/{ => units}/dml-override.slice | 0 .../{ => units}/dml-passthrough-empty.service | 0 .../dml-passthrough-set-dml.service | 0 .../dml-passthrough-set-ml.service | 0 test/{ => units}/dml-passthrough.slice | 0 test/{ => units}/dml.slice | 0 test/{ => units}/e.service | 0 test/{ => units}/end.service | 0 test/{ => units}/f.service | 0 test/{ => units}/g.service | 0 test/{ => units}/grandchild.service | 0 test/{ => units}/h.service | 0 test/{ => units}/hello-after-sleep.target | 0 test/{ => units}/hello.service | 0 test/{ => units}/i.service | 0 test/{ => units}/loopy.service | 0 test/{ => units}/loopy.service.d/compat.conf | 0 test/{ => units}/loopy2.service | 0 test/{ => units}/loopy3.service | 0 test/{ => units}/loopy4.service | 0 test/{ => units}/nomem.slice | 0 test/{ => units}/nomemleaf.service | 0 test/{ => units}/parent-deep.slice | 0 test/{ => units}/parent.slice | 0 test/{ => units}/sched_idle_bad.service | 0 test/{ => units}/sched_idle_ok.service | 0 test/{ => units}/sched_rr_bad.service | 0 test/{ => units}/sched_rr_change.service | 0 test/{ => units}/sched_rr_ok.service | 0 test/units/shutdown.target | 1 + test/{ => units}/sleep.service | 0 test/units/sockets.target | 1 + test/{ => units}/son.service | 0 test/units/sysinit.target | 1 + test/{ => units}/testsuite.target | 0 test/units/timers.target | 1 + .../unit-.service.d/10-override.conf | 0 .../unit-with-.service.d/20-override.conf | 0 .../20-override.conf | 0 .../30-override.conf | 0 .../unit-with-multiple-dashes.service | 0 .../10-override.conf | 0 test/{ => units}/unstoppable.service | 0 73 files changed, 61 insertions(+), 83 deletions(-) delete mode 120000 test/basic.target delete mode 120000 test/shutdown.target delete mode 120000 test/sockets.target delete mode 120000 test/sysinit.target delete mode 120000 test/timers.target rename test/{ => units}/a-conj.service (100%) rename test/{ => units}/a.service (100%) rename test/{ => units}/b.service (100%) create mode 120000 test/units/basic.target rename test/{ => units}/c.service (100%) rename test/{ => units}/d.service (100%) rename test/{ => units}/daughter.service (100%) rename test/{ => units}/dml-discard-empty.service (100%) rename test/{ => units}/dml-discard-set-ml.service (100%) rename test/{ => units}/dml-discard.slice (100%) rename test/{ => units}/dml-override-empty.service (100%) rename test/{ => units}/dml-override.slice (100%) rename test/{ => units}/dml-passthrough-empty.service (100%) rename test/{ => units}/dml-passthrough-set-dml.service (100%) rename test/{ => units}/dml-passthrough-set-ml.service (100%) rename test/{ => units}/dml-passthrough.slice (100%) rename test/{ => units}/dml.slice (100%) rename test/{ => units}/e.service (100%) rename test/{ => units}/end.service (100%) rename test/{ => units}/f.service (100%) rename test/{ => units}/g.service (100%) rename test/{ => units}/grandchild.service (100%) rename test/{ => units}/h.service (100%) rename test/{ => units}/hello-after-sleep.target (100%) rename test/{ => units}/hello.service (100%) rename test/{ => units}/i.service (100%) rename test/{ => units}/loopy.service (100%) rename test/{ => units}/loopy.service.d/compat.conf (100%) rename test/{ => units}/loopy2.service (100%) rename test/{ => units}/loopy3.service (100%) rename test/{ => units}/loopy4.service (100%) rename test/{ => units}/nomem.slice (100%) rename test/{ => units}/nomemleaf.service (100%) rename test/{ => units}/parent-deep.slice (100%) rename test/{ => units}/parent.slice (100%) rename test/{ => units}/sched_idle_bad.service (100%) rename test/{ => units}/sched_idle_ok.service (100%) rename test/{ => units}/sched_rr_bad.service (100%) rename test/{ => units}/sched_rr_change.service (100%) rename test/{ => units}/sched_rr_ok.service (100%) create mode 120000 test/units/shutdown.target rename test/{ => units}/sleep.service (100%) create mode 120000 test/units/sockets.target rename test/{ => units}/son.service (100%) create mode 120000 test/units/sysinit.target rename test/{ => units}/testsuite.target (100%) create mode 120000 test/units/timers.target rename test/{ => units}/unit-.service.d/10-override.conf (100%) rename test/{ => units}/unit-with-.service.d/20-override.conf (100%) rename test/{ => units}/unit-with-multiple-.service.d/20-override.conf (100%) rename test/{ => units}/unit-with-multiple-.service.d/30-override.conf (100%) rename test/{ => units}/unit-with-multiple-dashes.service (100%) rename test/{ => units}/unit-with-multiple-dashes.service.d/10-override.conf (100%) rename test/{ => units}/unstoppable.service (100%) 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 From f55198f03430318ab0e9162d8e2ce563c7ee7225 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Fri, 20 Mar 2020 16:12:12 +0100 Subject: [PATCH 02/78] test: replace symlinks with actual unit files During installation, meson complains: > Installing /home/zbyszek/src/systemd-work/test/units/sysinit.target to /var/tmp/systemd-test.Q1FSuj/root/usr/lib/systemd/tests/testdata/units > Warning: trying to copy a symlink that points to a file. This will copy the file, > but this will be changed in a future version of Meson to copy the symlink as is. Please update your > build definitions so that it will not break when the change happens. It *is* convenient to have those files as symlinks, but it is also confusing, because symlinks create aliases, and it seems that in those cases we actually don't want aliases (at least in the case of loopy*.service that'd make the test pointless). --- test/test-path/basic.target | 23 ++++++++++++++++++- test/test-path/path-changed.service | 7 +++++- test/test-path/path-directorynotempty.service | 7 +++++- test/test-path/path-exists.service | 7 +++++- test/test-path/path-existsglob.service | 7 +++++- test/test-path/path-makedirectory.service | 7 +++++- test/test-path/path-modified.service | 7 +++++- test/test-path/paths.target | 13 ++++++++++- test/test-path/sysinit.target | 16 ++++++++++++- test/units/basic.target | 23 ++++++++++++++++++- test/units/loopy2.service | 3 ++- test/units/loopy4.service | 6 ++++- test/units/shutdown.target | 15 +++++++++++- test/units/sockets.target | 13 ++++++++++- test/units/sysinit.target | 16 ++++++++++++- test/units/timers.target | 16 ++++++++++++- 16 files changed, 170 insertions(+), 16 deletions(-) mode change 120000 => 100644 test/test-path/basic.target mode change 120000 => 100644 test/test-path/path-changed.service mode change 120000 => 100644 test/test-path/path-directorynotempty.service mode change 120000 => 100644 test/test-path/path-exists.service mode change 120000 => 100644 test/test-path/path-existsglob.service mode change 120000 => 100644 test/test-path/path-makedirectory.service mode change 120000 => 100644 test/test-path/path-modified.service mode change 120000 => 100644 test/test-path/paths.target mode change 120000 => 100644 test/test-path/sysinit.target mode change 120000 => 100644 test/units/basic.target mode change 120000 => 100644 test/units/loopy2.service mode change 120000 => 100644 test/units/loopy4.service mode change 120000 => 100644 test/units/shutdown.target mode change 120000 => 100644 test/units/sockets.target mode change 120000 => 100644 test/units/sysinit.target mode change 120000 => 100644 test/units/timers.target diff --git a/test/test-path/basic.target b/test/test-path/basic.target deleted file mode 120000 index a882b72cc9..0000000000 --- a/test/test-path/basic.target +++ /dev/null @@ -1 +0,0 @@ -../../units/basic.target \ No newline at end of file diff --git a/test/test-path/basic.target b/test/test-path/basic.target new file mode 100644 index 0000000000..4f44292249 --- /dev/null +++ b/test/test-path/basic.target @@ -0,0 +1,22 @@ +# SPDX-License-Identifier: LGPL-2.1+ +# +# This file is part of systemd. +# +# systemd is free software; you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation; either version 2.1 of the License, or +# (at your option) any later version. + +[Unit] +Description=Basic System +Documentation=man:systemd.special(7) +Requires=sysinit.target +Wants=sockets.target timers.target paths.target slices.target +After=sysinit.target sockets.target paths.target slices.target tmp.mount + +# We support /var, /tmp, /var/tmp, being on NFS, but we don't pull in +# remote-fs.target by default, hence pull them in explicitly here. Note that we +# require /var and /var/tmp, but only add a Wants= type dependency on /tmp, as +# we support that unit being masked, and this should not be considered an error. +RequiresMountsFor=/var /var/tmp +Wants=tmp.mount diff --git a/test/test-path/path-changed.service b/test/test-path/path-changed.service deleted file mode 120000 index 8bdf178830..0000000000 --- a/test/test-path/path-changed.service +++ /dev/null @@ -1 +0,0 @@ -path-service.service \ No newline at end of file diff --git a/test/test-path/path-changed.service b/test/test-path/path-changed.service new file mode 100644 index 0000000000..f8499ec619 --- /dev/null +++ b/test/test-path/path-changed.service @@ -0,0 +1,6 @@ +[Unit] +Description=Service Test for Path units + +[Service] +ExecStart=/bin/true +Type=oneshot diff --git a/test/test-path/path-directorynotempty.service b/test/test-path/path-directorynotempty.service deleted file mode 120000 index 8bdf178830..0000000000 --- a/test/test-path/path-directorynotempty.service +++ /dev/null @@ -1 +0,0 @@ -path-service.service \ No newline at end of file diff --git a/test/test-path/path-directorynotempty.service b/test/test-path/path-directorynotempty.service new file mode 100644 index 0000000000..f8499ec619 --- /dev/null +++ b/test/test-path/path-directorynotempty.service @@ -0,0 +1,6 @@ +[Unit] +Description=Service Test for Path units + +[Service] +ExecStart=/bin/true +Type=oneshot diff --git a/test/test-path/path-exists.service b/test/test-path/path-exists.service deleted file mode 120000 index 8bdf178830..0000000000 --- a/test/test-path/path-exists.service +++ /dev/null @@ -1 +0,0 @@ -path-service.service \ No newline at end of file diff --git a/test/test-path/path-exists.service b/test/test-path/path-exists.service new file mode 100644 index 0000000000..f8499ec619 --- /dev/null +++ b/test/test-path/path-exists.service @@ -0,0 +1,6 @@ +[Unit] +Description=Service Test for Path units + +[Service] +ExecStart=/bin/true +Type=oneshot diff --git a/test/test-path/path-existsglob.service b/test/test-path/path-existsglob.service deleted file mode 120000 index 8bdf178830..0000000000 --- a/test/test-path/path-existsglob.service +++ /dev/null @@ -1 +0,0 @@ -path-service.service \ No newline at end of file diff --git a/test/test-path/path-existsglob.service b/test/test-path/path-existsglob.service new file mode 100644 index 0000000000..f8499ec619 --- /dev/null +++ b/test/test-path/path-existsglob.service @@ -0,0 +1,6 @@ +[Unit] +Description=Service Test for Path units + +[Service] +ExecStart=/bin/true +Type=oneshot diff --git a/test/test-path/path-makedirectory.service b/test/test-path/path-makedirectory.service deleted file mode 120000 index 8bdf178830..0000000000 --- a/test/test-path/path-makedirectory.service +++ /dev/null @@ -1 +0,0 @@ -path-service.service \ No newline at end of file diff --git a/test/test-path/path-makedirectory.service b/test/test-path/path-makedirectory.service new file mode 100644 index 0000000000..f8499ec619 --- /dev/null +++ b/test/test-path/path-makedirectory.service @@ -0,0 +1,6 @@ +[Unit] +Description=Service Test for Path units + +[Service] +ExecStart=/bin/true +Type=oneshot diff --git a/test/test-path/path-modified.service b/test/test-path/path-modified.service deleted file mode 120000 index 8bdf178830..0000000000 --- a/test/test-path/path-modified.service +++ /dev/null @@ -1 +0,0 @@ -path-service.service \ No newline at end of file diff --git a/test/test-path/path-modified.service b/test/test-path/path-modified.service new file mode 100644 index 0000000000..f8499ec619 --- /dev/null +++ b/test/test-path/path-modified.service @@ -0,0 +1,6 @@ +[Unit] +Description=Service Test for Path units + +[Service] +ExecStart=/bin/true +Type=oneshot diff --git a/test/test-path/paths.target b/test/test-path/paths.target deleted file mode 120000 index b402796cb9..0000000000 --- a/test/test-path/paths.target +++ /dev/null @@ -1 +0,0 @@ -../../units/paths.target \ No newline at end of file diff --git a/test/test-path/paths.target b/test/test-path/paths.target new file mode 100644 index 0000000000..9b6ed1c13f --- /dev/null +++ b/test/test-path/paths.target @@ -0,0 +1,12 @@ +# SPDX-License-Identifier: LGPL-2.1+ +# +# This file is part of systemd. +# +# systemd is free software; you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation; either version 2.1 of the License, or +# (at your option) any later version. + +[Unit] +Description=Paths +Documentation=man:systemd.special(7) diff --git a/test/test-path/sysinit.target b/test/test-path/sysinit.target deleted file mode 120000 index 9d10e5b2e2..0000000000 --- a/test/test-path/sysinit.target +++ /dev/null @@ -1 +0,0 @@ -../../units/sysinit.target \ No newline at end of file diff --git a/test/test-path/sysinit.target b/test/test-path/sysinit.target new file mode 100644 index 0000000000..b6c16a1412 --- /dev/null +++ b/test/test-path/sysinit.target @@ -0,0 +1,15 @@ +# SPDX-License-Identifier: LGPL-2.1+ +# +# This file is part of systemd. +# +# systemd is free software; you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation; either version 2.1 of the License, or +# (at your option) any later version. + +[Unit] +Description=System Initialization +Documentation=man:systemd.special(7) +Conflicts=emergency.service emergency.target +Wants=local-fs.target swap.target +After=local-fs.target swap.target emergency.service emergency.target diff --git a/test/units/basic.target b/test/units/basic.target deleted file mode 120000 index a882b72cc9..0000000000 --- a/test/units/basic.target +++ /dev/null @@ -1 +0,0 @@ -../../units/basic.target \ No newline at end of file diff --git a/test/units/basic.target b/test/units/basic.target new file mode 100644 index 0000000000..4f44292249 --- /dev/null +++ b/test/units/basic.target @@ -0,0 +1,22 @@ +# SPDX-License-Identifier: LGPL-2.1+ +# +# This file is part of systemd. +# +# systemd is free software; you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation; either version 2.1 of the License, or +# (at your option) any later version. + +[Unit] +Description=Basic System +Documentation=man:systemd.special(7) +Requires=sysinit.target +Wants=sockets.target timers.target paths.target slices.target +After=sysinit.target sockets.target paths.target slices.target tmp.mount + +# We support /var, /tmp, /var/tmp, being on NFS, but we don't pull in +# remote-fs.target by default, hence pull them in explicitly here. Note that we +# require /var and /var/tmp, but only add a Wants= type dependency on /tmp, as +# we support that unit being masked, and this should not be considered an error. +RequiresMountsFor=/var /var/tmp +Wants=tmp.mount diff --git a/test/units/loopy2.service b/test/units/loopy2.service deleted file mode 120000 index 961b1fe9bc..0000000000 --- a/test/units/loopy2.service +++ /dev/null @@ -1 +0,0 @@ -loopy.service \ No newline at end of file diff --git a/test/units/loopy2.service b/test/units/loopy2.service new file mode 100644 index 0000000000..9eb645748e --- /dev/null +++ b/test/units/loopy2.service @@ -0,0 +1,2 @@ +[Service] +ExecStart=/bin/true diff --git a/test/units/loopy4.service b/test/units/loopy4.service deleted file mode 120000 index 43e5658bcd..0000000000 --- a/test/units/loopy4.service +++ /dev/null @@ -1 +0,0 @@ -loopy3.service \ No newline at end of file diff --git a/test/units/loopy4.service b/test/units/loopy4.service new file mode 100644 index 0000000000..606e26b5da --- /dev/null +++ b/test/units/loopy4.service @@ -0,0 +1,5 @@ +[Service] +ExecStart=/bin/true + +[Unit] +Conflicts=loopy4.service diff --git a/test/units/shutdown.target b/test/units/shutdown.target deleted file mode 120000 index 8e58943bc4..0000000000 --- a/test/units/shutdown.target +++ /dev/null @@ -1 +0,0 @@ -../../units/shutdown.target \ No newline at end of file diff --git a/test/units/shutdown.target b/test/units/shutdown.target new file mode 100644 index 0000000000..d48e6d6494 --- /dev/null +++ b/test/units/shutdown.target @@ -0,0 +1,14 @@ +# SPDX-License-Identifier: LGPL-2.1+ +# +# This file is part of systemd. +# +# systemd is free software; you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation; either version 2.1 of the License, or +# (at your option) any later version. + +[Unit] +Description=Shutdown +Documentation=man:systemd.special(7) +DefaultDependencies=no +RefuseManualStart=yes diff --git a/test/units/sockets.target b/test/units/sockets.target deleted file mode 120000 index 745480af56..0000000000 --- a/test/units/sockets.target +++ /dev/null @@ -1 +0,0 @@ -../../units/sockets.target \ No newline at end of file diff --git a/test/units/sockets.target b/test/units/sockets.target new file mode 100644 index 0000000000..9af67fdb1f --- /dev/null +++ b/test/units/sockets.target @@ -0,0 +1,12 @@ +# SPDX-License-Identifier: LGPL-2.1+ +# +# This file is part of systemd. +# +# systemd is free software; you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation; either version 2.1 of the License, or +# (at your option) any later version. + +[Unit] +Description=Sockets +Documentation=man:systemd.special(7) diff --git a/test/units/sysinit.target b/test/units/sysinit.target deleted file mode 120000 index 9d10e5b2e2..0000000000 --- a/test/units/sysinit.target +++ /dev/null @@ -1 +0,0 @@ -../../units/sysinit.target \ No newline at end of file diff --git a/test/units/sysinit.target b/test/units/sysinit.target new file mode 100644 index 0000000000..b6c16a1412 --- /dev/null +++ b/test/units/sysinit.target @@ -0,0 +1,15 @@ +# SPDX-License-Identifier: LGPL-2.1+ +# +# This file is part of systemd. +# +# systemd is free software; you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation; either version 2.1 of the License, or +# (at your option) any later version. + +[Unit] +Description=System Initialization +Documentation=man:systemd.special(7) +Conflicts=emergency.service emergency.target +Wants=local-fs.target swap.target +After=local-fs.target swap.target emergency.service emergency.target diff --git a/test/units/timers.target b/test/units/timers.target deleted file mode 120000 index 7718a12683..0000000000 --- a/test/units/timers.target +++ /dev/null @@ -1 +0,0 @@ -../../units/timers.target \ No newline at end of file diff --git a/test/units/timers.target b/test/units/timers.target new file mode 100644 index 0000000000..b1aa8c797c --- /dev/null +++ b/test/units/timers.target @@ -0,0 +1,15 @@ +# SPDX-License-Identifier: LGPL-2.1+ +# +# This file is part of systemd. +# +# systemd is free software; you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation; either version 2.1 of the License, or +# (at your option) any later version. + +[Unit] +Description=Timers +Documentation=man:systemd.special(7) + +DefaultDependencies=no +Conflicts=shutdown.target From 80769cb66c2cc5d4e0f9b717f011cf8adbcd8a19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Sun, 8 Dec 2019 11:24:39 +0100 Subject: [PATCH 03/78] meson: use install_subdir() to install files This gives us slightly less control, but we don't need to update the file list... --- test/meson.build | 197 ++++------------------------------------------- 1 file changed, 14 insertions(+), 183 deletions(-) diff --git a/test/meson.build b/test/meson.build index 59639d0b81..2b2ac590c4 100644 --- a/test/meson.build +++ b/test/meson.build @@ -1,192 +1,23 @@ # SPDX-License-Identifier: LGPL-2.1+ -test_data_files = ''' - journal-data/journal-1.txt - journal-data/journal-2.txt - test-execute/exec-basic.service - test-execute/exec-ambientcapabilities-merge-nfsnobody.service - test-execute/exec-ambientcapabilities-merge-nobody.service - test-execute/exec-ambientcapabilities-merge.service - test-execute/exec-ambientcapabilities-nfsnobody.service - test-execute/exec-ambientcapabilities-nobody.service - test-execute/exec-ambientcapabilities.service - test-execute/exec-bindpaths.service - test-execute/exec-capabilityboundingset-invert.service - test-execute/exec-capabilityboundingset-merge.service - test-execute/exec-capabilityboundingset-reset.service - test-execute/exec-capabilityboundingset-simple.service - test-execute/exec-condition-failed.service - test-execute/exec-condition-skip.service - test-execute/exec-cpuaffinity1.service - test-execute/exec-cpuaffinity2.service - test-execute/exec-cpuaffinity3.service - test-execute/exec-dynamicuser-fixeduser-adm.service - test-execute/exec-dynamicuser-fixeduser-games.service - test-execute/exec-dynamicuser-fixeduser-one-supplementarygroup.service - test-execute/exec-dynamicuser-fixeduser.service - test-execute/exec-dynamicuser-statedir-migrate-step1.service - test-execute/exec-dynamicuser-statedir-migrate-step2.service - test-execute/exec-dynamicuser-statedir.service - test-execute/exec-dynamicuser-supplementarygroups.service - test-execute/exec-environment-no-substitute.service - test-execute/exec-environment-empty.service - test-execute/exec-environment-multiple.service - test-execute/exec-environment.service - test-execute/exec-environmentfile.service - test-execute/exec-group-nfsnobody.service - test-execute/exec-group-nobody.service - test-execute/exec-group-nogroup.service - test-execute/exec-group.service - test-execute/exec-ignoresigpipe-no.service - test-execute/exec-ignoresigpipe-yes.service - test-execute/exec-inaccessiblepaths-mount-propagation.service - test-execute/exec-inaccessiblepaths-sys.service - test-execute/exec-ioschedulingclass-best-effort.service - test-execute/exec-ioschedulingclass-idle.service - test-execute/exec-ioschedulingclass-none.service - test-execute/exec-ioschedulingclass-realtime.service - test-execute/exec-oomscoreadjust-negative.service - test-execute/exec-oomscoreadjust-positive.service - test-execute/exec-passenvironment-absent.service - test-execute/exec-passenvironment-empty.service - test-execute/exec-passenvironment-repeated.service - test-execute/exec-passenvironment.service - test-execute/exec-personality-aarch64.service - test-execute/exec-personality-ppc64.service - test-execute/exec-personality-ppc64le.service - test-execute/exec-personality-s390.service - test-execute/exec-personality-x86-64.service - test-execute/exec-personality-x86.service - test-execute/exec-privatedevices-disabled-by-prefix.service - test-execute/exec-privatedevices-no-capability-mknod.service - test-execute/exec-privatedevices-no-capability-sys-rawio.service - test-execute/exec-privatedevices-no.service - test-execute/exec-privatedevices-yes-with-group.service - test-execute/exec-privatedevices-yes-capability-mknod.service - test-execute/exec-privatedevices-yes-capability-sys-rawio.service - test-execute/exec-privatedevices-yes.service - test-execute/exec-privatenetwork-yes.service - test-execute/exec-privatetmp-no.service - test-execute/exec-privatetmp-yes.service - test-execute/exec-privatetmp-disabled-by-prefix.service - test-execute/exec-protecthome-tmpfs-vs-protectsystem-strict.service - test-execute/exec-protectkernellogs-yes-capabilities.service - test-execute/exec-protectkernellogs-no-capabilities.service - test-execute/exec-protectkernelmodules-no-capabilities.service - test-execute/exec-protectkernelmodules-yes-capabilities.service - test-execute/exec-protectkernelmodules-yes-mount-propagation.service - test-execute/exec-readonlypaths-mount-propagation.service - test-execute/exec-readonlypaths-simple.service - test-execute/exec-readonlypaths-with-bindpaths.service - test-execute/exec-readonlypaths.service - test-execute/exec-readwritepaths-mount-propagation.service - test-execute/exec-restrictnamespaces-merge-all.service - test-execute/exec-restrictnamespaces-merge-and.service - test-execute/exec-restrictnamespaces-merge-or.service - test-execute/exec-restrictnamespaces-mnt-blacklist.service - test-execute/exec-restrictnamespaces-mnt.service - test-execute/exec-restrictnamespaces-no.service - test-execute/exec-restrictnamespaces-yes.service - test-execute/exec-runtimedirectory-mode.service - test-execute/exec-runtimedirectory-owner-nfsnobody.service - test-execute/exec-runtimedirectory-owner-nobody.service - test-execute/exec-runtimedirectory-owner-nogroup.service - test-execute/exec-runtimedirectory-owner.service - test-execute/exec-runtimedirectory.service - test-execute/exec-specifier-interpolation.service - test-execute/exec-specifier.service - test-execute/exec-specifier@.service - test-execute/exec-standardinput-data.service - test-execute/exec-standardinput-file.service - test-execute/exec-standardinput-file-cat.service - test-execute/exec-standardoutput-file.service - test-execute/exec-standardoutput-append.service - test-execute/exec-supplementarygroups-multiple-groups-default-group-user.service - test-execute/exec-supplementarygroups-multiple-groups-withgid.service - test-execute/exec-supplementarygroups-multiple-groups-withuid.service - test-execute/exec-supplementarygroups-single-group-user.service - test-execute/exec-supplementarygroups-single-group.service - test-execute/exec-supplementarygroups.service - test-execute/exec-systemcallerrornumber-name.service - test-execute/exec-systemcallerrornumber-number.service - test-execute/exec-systemcallfilter-failing.service - test-execute/exec-systemcallfilter-failing2.service - test-execute/exec-systemcallfilter-not-failing.service - test-execute/exec-systemcallfilter-not-failing2.service - test-execute/exec-systemcallfilter-system-user-nfsnobody.service - test-execute/exec-systemcallfilter-system-user-nobody.service - test-execute/exec-systemcallfilter-system-user.service - test-execute/exec-systemcallfilter-with-errno-multi.service - test-execute/exec-systemcallfilter-with-errno-name.service - test-execute/exec-systemcallfilter-with-errno-number.service - test-execute/exec-temporaryfilesystem-options.service - test-execute/exec-temporaryfilesystem-ro.service - test-execute/exec-temporaryfilesystem-rw.service - test-execute/exec-temporaryfilesystem-usr.service - test-execute/exec-umask-0177.service - test-execute/exec-umask-default.service - test-execute/exec-unsetenvironment.service - test-execute/exec-user-nfsnobody.service - test-execute/exec-user-nobody.service - test-execute/exec-user.service - test-execute/exec-workingdirectory.service - test-execute/exec-workingdirectory-trailing-dot.service - test-path/basic.target - test-path/path-changed.path - test-path/path-changed.service - test-path/path-directorynotempty.path - test-path/path-directorynotempty.service - test-path/path-exists.path - test-path/path-exists.service - test-path/path-existsglob.path - test-path/path-existsglob.service - test-path/path-makedirectory.path - test-path/path-makedirectory.service - test-path/path-modified.path - test-path/path-modified.service - test-path/path-mycustomunit.service - test-path/path-service.service - test-path/path-unit.path - test-path/paths.target - test-path/sysinit.target - test-umount/empty.mountinfo - test-umount/example.swaps - test-umount/garbled.mountinfo - test-umount/rhbug-1554943.mountinfo -'''.split() +testdata_dir = testsdir + '/testdata/' + +install_subdir('journal-data', + install_dir : testdata_dir) +install_subdir('units', + install_dir : testdata_dir) +install_subdir('test-execute', + install_dir : testdata_dir) +install_subdir('test-path', + install_dir : testdata_dir) +install_subdir('test-umount', + install_dir : testdata_dir) if conf.get('ENABLE_RESOLVE') == 1 - test_data_files += ''' - test-resolve/_openpgpkey.fedoraproject.org.pkts - test-resolve/fedoraproject.org.pkts - test-resolve/gandi.net.pkts - test-resolve/google.com.pkts - test-resolve/root.pkts - test-resolve/sw1a1aa-sw1a2aa-sw1a2ab-sw1a2ac.find.me.uk.pkts - test-resolve/teamits.com.pkts - test-resolve/zbyszek@fedoraproject.org.pkts - test-resolve/_443._tcp.fedoraproject.org.pkts - test-resolve/kyhwana.org.pkts - test-resolve/fake-caa.pkts - '''.split() + install_subdir('test-resolve', + install_dir : testdata_dir) endif -if install_tests - foreach file : test_data_files - subdir = file.split('/')[0] - if subdir == file - subdir = '' - endif - - install_data(file, - install_dir : testsdir + '/testdata/' + subdir) - endforeach -endif - -install_subdir( - 'units', - install_dir : testsdir + '/testdata/') - ############################################################ rule_syntax_check_py = find_program('rule-syntax-check.py') From b6261be84dc45279b198f1b1b2c9dfc7813da5c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Mon, 16 Dec 2019 17:01:17 +0100 Subject: [PATCH 04/78] meson: report -Dinstall-tests in summary --- meson.build | 1 + 1 file changed, 1 insertion(+) diff --git a/meson.build b/meson.build index d6c09cb18a..d763e81342 100644 --- a/meson.build +++ b/meson.build @@ -3474,6 +3474,7 @@ foreach tuple : [ ['debug siphash'], ['valgrind', conf.get('VALGRIND') == 1], ['trace logging', conf.get('LOG_TRACE') == 1], + ['install tests', install_tests], ['link-udev-shared', get_option('link-udev-shared')], ['link-systemctl-shared', get_option('link-systemctl-shared')], ['link-networkd-shared', get_option('link-networkd-shared')], From 5f28f3ddaf0a021d0b051240f5052a7b1c4d5490 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Mon, 9 Dec 2019 18:52:35 +0100 Subject: [PATCH 05/78] test: allow overriding EFI_MOUNT like other variables --- test/test-functions | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test-functions b/test/test-functions index 66cd60b559..690a4a8236 100644 --- a/test/test-functions +++ b/test/test-functions @@ -14,7 +14,7 @@ NSPAWN_TIMEOUT="${NSPAWN_TIMEOUT:-infinity}" TIMED_OUT= # will be 1 after run_* if *_TIMEOUT is set and test timed out [[ "$LOOKS_LIKE_SUSE" ]] && FSTYPE="${FSTYPE:-btrfs}" || FSTYPE="${FSTYPE:-ext4}" UNIFIED_CGROUP_HIERARCHY="${UNIFIED_CGROUP_HIERARCHY:-default}" -EFI_MOUNT="$(bootctl -x 2>/dev/null || echo /boot)" +EFI_MOUNT="${EFI_MOUNT:-$(bootctl -x 2>/dev/null || echo /boot)}" QEMU_MEM="${QEMU_MEM:-512M}" # Decide if we can (and want to) run QEMU with KVM acceleration. From fe85f2bb9c11fd0c3787cc28caa7ea6420553db8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Mon, 9 Dec 2019 18:56:13 +0100 Subject: [PATCH 06/78] test: move TEST-01-BASIC setup to static files After this commit, only tests that were converted will work, because the interface to test_run() changed. --- test/TEST-01-BASIC/test.sh | 15 +------- test/test-functions | 62 ++++++++++++++++++++------------- test/units/end.service | 2 +- test/units/testsuite-01.service | 7 ++++ 4 files changed, 47 insertions(+), 39 deletions(-) create mode 100644 test/units/testsuite-01.service diff --git a/test/TEST-01-BASIC/test.sh b/test/TEST-01-BASIC/test.sh index 0eaa8f991a..e07e1f3771 100755 --- a/test/TEST-01-BASIC/test.sh +++ b/test/TEST-01-BASIC/test.sh @@ -14,21 +14,8 @@ test_setup() { eval $(udevadm info --export --query=env --name=${LOOPDEV}p2) setup_basic_environment - - # setup the testsuite service - cat >$initdir/etc/systemd/system/testsuite.service < /failed ; systemctl daemon-reload ; echo OK > /testok' -Type=oneshot -EOF - - setup_testsuite ) setup_nspawn_root } -do_test "$@" +do_test "$@" 01 diff --git a/test/test-functions b/test/test-functions index 690a4a8236..673685ea6b 100644 --- a/test/test-functions +++ b/test/test-functions @@ -204,6 +204,13 @@ run_qemu() { PARAMS+="ro" fi + local _end + if [[ ! "$INTERACTIVE_DEBUG" ]]; then + _end="systemd.wants=end.service" + else + _end="" + fi + KERNEL_APPEND="$PARAMS \ root=/dev/sda1 \ raid=noautodetect \ @@ -213,6 +220,9 @@ init=$PATH_TO_INIT \ console=$CONSOLE \ selinux=0 \ $_cgroup_args \ +SYSTEMD_UNIT_PATH=/usr/lib/systemd/tests/testdata/units: \ +systemd.unit=testsuite.target \ +systemd.wants=testsuite-$1.service ${_end} $KERNEL_APPEND \ " @@ -253,24 +263,41 @@ $QEMU_OPTIONS \ run_nspawn() { [[ -d /run/systemd/system ]] || return 1 - local _nspawn_cmd="$SYSTEMD_NSPAWN $NSPAWN_ARGUMENTS --register=no --kill-signal=SIGKILL --directory=$TESTDIR/$1 $PATH_TO_INIT $KERNEL_APPEND" + local _nspawn_cmd=( + --register=no + --kill-signal=SIGKILL + --directory=$TESTDIR/$1 + --setenv=SYSTEMD_UNIT_PATH=/usr/lib/systemd/tests/testdata/units: + $PATH_TO_INIT + $KERNEL_APPEND + systemd.unit=testsuite.target + systemd.wants=testsuite-$2.service + ) + + if [[ ! "$INTERACTIVE_DEBUG" ]]; then + _nspawn_cmd+=( systemd.wants=end.service ) + fi + + local _nspawn_pre if [[ "$NSPAWN_TIMEOUT" != "infinity" ]]; then - _nspawn_cmd="timeout --foreground $NSPAWN_TIMEOUT $_nspawn_cmd" + _nspawn_pre=(timeout --foreground $NSPAWN_TIMEOUT) + else + _nspawn_pre=() fi if [[ "$UNIFIED_CGROUP_HIERARCHY" = "hybrid" ]]; then dwarn "nspawn doesn't support SYSTEMD_NSPAWN_UNIFIED_HIERARCHY=hybrid, skipping" exit elif [[ "$UNIFIED_CGROUP_HIERARCHY" = "yes" || "$UNIFIED_CGROUP_HIERARCHY" = "no" ]]; then - _nspawn_cmd="env SYSTEMD_NSPAWN_UNIFIED_HIERARCHY=$UNIFIED_CGROUP_HIERARCHY $_nspawn_cmd" + _nspawn_pre=("${nspawn_pre[@]}" env SYSTEMD_NSPAWN_UNIFIED_HIERARCHY=$UNIFIED_CGROUP_HIERARCHY) elif [[ "$UNIFIED_CGROUP_HIERARCHY" = "default" ]]; then - _nspawn_cmd="env --unset=UNIFIED_CGROUP_HIERARCHY --unset=SYSTEMD_NSPAWN_UNIFIED_HIERARCHY $_nspawn_cmd" + _nspawn_pre=("${nspawn_pre[@]}" env --unset=UNIFIED_CGROUP_HIERARCHY --unset=SYSTEMD_NSPAWN_UNIFIED_HIERARCHY) else dfatal "Unknown UNIFIED_CGROUP_HIERARCHY. Got $UNIFIED_CGROUP_HIERARCHY, expected [yes|no|hybrid|default]" exit 1 fi - (set -x; $_nspawn_cmd) + (set -x; "${_nspawn_pre[@]}" "$SYSTEMD_NSPAWN" $NSPAWN_ARGUMENTS "${_nspawn_cmd[@]}") rc=$? if [ "$rc" = 124 ] && [ "$NSPAWN_TIMEOUT" != "infinity" ]; then derror "test timed out after $NSPAWN_TIMEOUT s" @@ -475,7 +502,7 @@ unset_ld_preload() { } unset_ld_preload systemd-remount-fs -unset_ld_preload testsuite +unset_ld_preload testsuite- export ASAN_OPTIONS=\$DEFAULT_ASAN_OPTIONS:log_path=/systemd.asan.log UBSAN_OPTIONS=\$DEFAULT_UBSAN_OPTIONS exec $ROOTLIBDIR/systemd "\$@" @@ -929,19 +956,6 @@ enable_user_manager() { install_user_dbus } -setup_testsuite() { - cp $TEST_BASE_DIR/testsuite.target $initdir/etc/systemd/system/ - cp $TEST_BASE_DIR/end.service $initdir/etc/systemd/system/ - - mkdir -p $initdir/etc/systemd/system/testsuite.target.wants - ln -fs $TEST_BASE_DIR/testsuite.service $initdir/etc/systemd/system/testsuite.target.wants/testsuite.service - # Don't shutdown the machine after running the test when INTERACTIVE_DEBUG is set - [[ -z $INTERACTIVE_DEBUG ]] && ln -fs $TEST_BASE_DIR/end.service $initdir/etc/systemd/system/testsuite.target.wants/end.service - - # make the testsuite the default target - ln -fs testsuite.target $initdir/etc/systemd/system/default.target -} - setup_nspawn_root() { rm -fr $TESTDIR/nspawn-root ddebug "cp -ar $initdir $TESTDIR/nspawn-root" @@ -1786,21 +1800,21 @@ test_cleanup() { test_run() { if [ -z "$TEST_NO_QEMU" ]; then - if run_qemu; then + if run_qemu "$1"; then check_result_qemu || return 1 else dwarn "can't run QEMU, skipping" fi fi if [ -z "$TEST_NO_NSPAWN" ]; then - if run_nspawn "nspawn-root"; then + if run_nspawn "nspawn-root" "$1"; then check_result_nspawn "nspawn-root" || return 1 else dwarn "can't run systemd-nspawn, skipping" fi if [[ "$RUN_IN_UNPRIVILEGED_CONTAINER" = "yes" ]]; then - if NSPAWN_ARGUMENTS="-U --private-network $NSPAWN_ARGUMENTS" run_nspawn "unprivileged-nspawn-root"; then + if NSPAWN_ARGUMENTS="-U --private-network $NSPAWN_ARGUMENTS" run_nspawn "unprivileged-nspawn-root" "$1"; then check_result_nspawn "unprivileged-nspawn-root" || return 1 else dwarn "can't run systemd-nspawn, skipping" @@ -1834,7 +1848,7 @@ do_test() { case $1 in --run) echo "TEST RUN: $TEST_DESCRIPTION" - test_run + test_run "$2" ret=$? if (( $ret == 0 )); then echo "TEST RUN: $TEST_DESCRIPTION [OK]" @@ -1857,7 +1871,7 @@ do_test() { ( test_setup test_setup_cleanup - test_run + test_run "$2" ) "$TESTLOG" 2>&1 || ret=$? test_cleanup if [ $ret -eq 0 ]; then diff --git a/test/units/end.service b/test/units/end.service index 6e1996fd02..e7ed75ef05 100644 --- a/test/units/end.service +++ b/test/units/end.service @@ -1,6 +1,6 @@ [Unit] Description=End the test -After=testsuite.service +After=testsuite.target OnFailure=poweroff.target OnFailureJobMode=replace-irreversibly diff --git a/test/units/testsuite-01.service b/test/units/testsuite-01.service new file mode 100644 index 0000000000..8112a85c18 --- /dev/null +++ b/test/units/testsuite-01.service @@ -0,0 +1,7 @@ +[Unit] +Description=TEST-01-BASIC +After=multi-user.target + +[Service] +ExecStart=sh -e -x -c 'systemctl --state=failed --no-legend --no-pager >/failed ; systemctl daemon-reload ; echo OK >/testok' +Type=oneshot From 5964e39a693f6295fa70c9c63038bc01a35f1cd1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Thu, 12 Dec 2019 09:59:53 +0100 Subject: [PATCH 07/78] test: move part of TEST-02-CRYPTSETUP setup to static files Since we create an encrypted partition for this test, let's create a separate image here. --- test/TEST-02-CRYPTSETUP/test.sh | 17 ++--------------- test/units/testsuite-02.service | 7 +++++++ 2 files changed, 9 insertions(+), 15 deletions(-) create mode 100644 test/units/testsuite-02.service diff --git a/test/TEST-02-CRYPTSETUP/test.sh b/test/TEST-02-CRYPTSETUP/test.sh index a859b345d0..2afc6f8ed4 100755 --- a/test/TEST-02-CRYPTSETUP/test.sh +++ b/test/TEST-02-CRYPTSETUP/test.sh @@ -42,25 +42,12 @@ test_setup() { setup_basic_environment mask_supporting_services - # setup the testsuite service - cat >$initdir/etc/systemd/system/testsuite.service < /failed ; echo OK > /testok' -Type=oneshot -EOF - - setup_testsuite - install_dmevent generate_module_dependencies cat >$initdir/etc/crypttab < $initdir/etc/varkey + echo -n test >$initdir/etc/varkey cat $initdir/etc/crypttab | ddebug cat >>$initdir/etc/fstab </failed ; echo OK > /testok' +Type=oneshot From 41b1b2a5632f33b59557947b4fe066de6ea576ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Mon, 9 Dec 2019 19:09:32 +0100 Subject: [PATCH 08/78] test: move TEST-03-JOBS setup to static files --- test/TEST-03-JOBS/test.sh | 20 +------------------ test/units/testsuite-03.service | 7 +++++++ .../test-jobs.sh => units/testsuite-03.sh} | 0 3 files changed, 8 insertions(+), 19 deletions(-) create mode 100644 test/units/testsuite-03.service rename test/{TEST-03-JOBS/test-jobs.sh => units/testsuite-03.sh} (100%) diff --git a/test/TEST-03-JOBS/test.sh b/test/TEST-03-JOBS/test.sh index 5299464b81..8b12e5ba9d 100755 --- a/test/TEST-03-JOBS/test.sh +++ b/test/TEST-03-JOBS/test.sh @@ -15,26 +15,8 @@ test_setup() { setup_basic_environment mask_supporting_services - - # setup the testsuite service - cat >$initdir/etc/systemd/system/testsuite.service < Date: Mon, 9 Dec 2019 19:19:05 +0100 Subject: [PATCH 09/78] test: convert TEST-04-JOURNAL to generic image --- test/TEST-04-JOURNAL/test.sh | 25 +------------------ test/meson.build | 2 ++ test/test-functions | 4 +-- .../forever-print-hola.service | 6 +++++ test/units/testsuite-04.service | 6 +++++ .../test-journal.sh => units/testsuite-04.sh} | 0 6 files changed, 17 insertions(+), 26 deletions(-) create mode 100644 test/testsuite-04.units/forever-print-hola.service create mode 100644 test/units/testsuite-04.service rename test/{TEST-04-JOURNAL/test-journal.sh => units/testsuite-04.sh} (100%) diff --git a/test/TEST-04-JOURNAL/test.sh b/test/TEST-04-JOURNAL/test.sh index af96dfd719..868ac28aa1 100755 --- a/test/TEST-04-JOURNAL/test.sh +++ b/test/TEST-04-JOURNAL/test.sh @@ -14,31 +14,8 @@ test_setup() { setup_basic_environment mask_supporting_services - - # setup the testsuite service - cat >$initdir/etc/systemd/system/testsuite.service <$initdir/etc/systemd/system/forever-print-hola.service < Date: Tue, 10 Dec 2019 14:09:59 +0100 Subject: [PATCH 10/78] test: move TEST-05-RLIMITS setup to static files The test currently fails in the check for LimitNOFILESoft/LimitNOFILE. I see default values there. This doesn't seem to be related to the changes in the test suite, but rather to the recent changes to pid1. --- test/TEST-05-RLIMITS/test-rlimits.sh | 15 --------------- test/TEST-05-RLIMITS/test.sh | 21 +-------------------- test/units/testsuite-05.service | 6 ++++++ test/units/testsuite-05.sh | 25 +++++++++++++++++++++++++ 4 files changed, 32 insertions(+), 35 deletions(-) delete mode 100755 test/TEST-05-RLIMITS/test-rlimits.sh create mode 100644 test/units/testsuite-05.service create mode 100755 test/units/testsuite-05.sh diff --git a/test/TEST-05-RLIMITS/test-rlimits.sh b/test/TEST-05-RLIMITS/test-rlimits.sh deleted file mode 100755 index 86b57601fe..0000000000 --- a/test/TEST-05-RLIMITS/test-rlimits.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/env bash -set -x -set -e -set -o pipefail - -[[ "$(systemctl show -p DefaultLimitNOFILESoft)" = "DefaultLimitNOFILESoft=10000" ]] -[[ "$(systemctl show -p DefaultLimitNOFILE)" = "DefaultLimitNOFILE=16384" ]] - -[[ "$(systemctl show -p LimitNOFILESoft testsuite.service)" = "LimitNOFILESoft=10000" ]] -[[ "$(systemctl show -p LimitNOFILE testsuite.service)" = "LimitNOFILE=16384" ]] - -[[ "$(ulimit -n -S)" = "10000" ]] -[[ "$(ulimit -n -H)" = "16384" ]] - -touch /testok diff --git a/test/TEST-05-RLIMITS/test.sh b/test/TEST-05-RLIMITS/test.sh index bda37ef212..6412188ef2 100755 --- a/test/TEST-05-RLIMITS/test.sh +++ b/test/TEST-05-RLIMITS/test.sh @@ -14,27 +14,8 @@ test_setup() { setup_basic_environment mask_supporting_services - - cat >$initdir/etc/systemd/system.conf <$initdir/etc/systemd/system/testsuite.service <$P/rlimits.conf < Date: Mon, 9 Dec 2019 19:42:57 +0100 Subject: [PATCH 11/78] test: move most of TEST-06-* setup to static files --- test/TEST-06-SELINUX/test.sh | 46 +------------------ test/meson.build | 2 + test/testsuite-06.units/hola.service | 6 +++ .../load-systemd-test-module.service | 14 ++++++ test/units/testsuite-06.service | 9 ++++ .../testsuite-06.sh} | 0 6 files changed, 32 insertions(+), 45 deletions(-) create mode 100644 test/testsuite-06.units/hola.service create mode 100644 test/testsuite-06.units/load-systemd-test-module.service create mode 100644 test/units/testsuite-06.service rename test/{TEST-06-SELINUX/test-selinux-checks.sh => units/testsuite-06.sh} (100%) diff --git a/test/TEST-06-SELINUX/test.sh b/test/TEST-06-SELINUX/test.sh index 46dc1cd805..5f22b3b74e 100755 --- a/test/TEST-06-SELINUX/test.sh +++ b/test/TEST-06-SELINUX/test.sh @@ -26,49 +26,6 @@ test_setup() { setup_basic_environment mask_supporting_services - # setup the testsuite service - cat <$initdir/etc/systemd/system/testsuite.service -[Unit] -Description=Testsuite service - -[Service] -ExecStart=/test-selinux-checks.sh -Type=oneshot -EOF - - cat <$initdir/etc/systemd/system/hola.service -[Service] -Type=oneshot -ExecStart=/bin/echo Start Hola -ExecReload=/bin/echo Reload Hola -ExecStop=/bin/echo Stop Hola -RemainAfterExit=yes -EOF - - setup_testsuite - - cat <$initdir/etc/systemd/system/load-systemd-test-module.service -[Unit] -Description=Load systemd-test module -DefaultDependencies=no -Requires=local-fs.target -Conflicts=shutdown.target -After=local-fs.target -Before=sysinit.target shutdown.target autorelabel.service -ConditionSecurity=selinux -ConditionPathExists=|/.load-systemd-test-module - -[Service] -ExecStart=/bin/sh -x -c 'echo 0 >/sys/fs/selinux/enforce && cd /systemd-test-module && make -f /usr/share/selinux/devel/Makefile load && rm /.load-systemd-test-module' -Type=oneshot -TimeoutSec=0 -RemainAfterExit=yes -EOF - - touch $initdir/.load-systemd-test-module - mkdir -p $initdir/etc/systemd/system/basic.target.wants - ln -fs load-systemd-test-module.service $initdir/etc/systemd/system/basic.target.wants/load-systemd-test-module.service - local _modules_dir=/var/lib/selinux rm -rf $initdir/$_modules_dir if ! cp -ar $_modules_dir $initdir/$_modules_dir; then @@ -87,11 +44,10 @@ EOF mkdir $initdir/systemd-test-module cp systemd_test.te $initdir/systemd-test-module cp systemd_test.if $initdir/systemd-test-module - cp test-selinux-checks.sh $initdir dracut_install -o sesearch dracut_install runcon dracut_install checkmodule semodule semodule_package m4 make /usr/libexec/selinux/hll/pp load_policy sefcontext_compile ) } -do_test "$@" +do_test "$@" 06 diff --git a/test/meson.build b/test/meson.build index 15b4c49ff9..e667076d4c 100644 --- a/test/meson.build +++ b/test/meson.build @@ -14,6 +14,8 @@ install_subdir('test-umount', install_dir : testdata_dir) install_subdir('testsuite-04.units', install_dir : testdata_dir) +install_subdir('testsuite-06.units', + install_dir : testdata_dir) if conf.get('ENABLE_RESOLVE') == 1 install_subdir('test-resolve', diff --git a/test/testsuite-06.units/hola.service b/test/testsuite-06.units/hola.service new file mode 100644 index 0000000000..5dc633206a --- /dev/null +++ b/test/testsuite-06.units/hola.service @@ -0,0 +1,6 @@ +[Service] +Type=oneshot +ExecStart=/bin/echo Start Hola +ExecReload=/bin/echo Reload Hola +ExecStop=/bin/echo Stop Hola +RemainAfterExit=yes diff --git a/test/testsuite-06.units/load-systemd-test-module.service b/test/testsuite-06.units/load-systemd-test-module.service new file mode 100644 index 0000000000..323a76c68d --- /dev/null +++ b/test/testsuite-06.units/load-systemd-test-module.service @@ -0,0 +1,14 @@ +[Unit] +Description=Load systemd-test module +DefaultDependencies=no +Requires=local-fs.target +Conflicts=shutdown.target +After=local-fs.target +Before=sysinit.target shutdown.target autorelabel.service +ConditionSecurity=selinux + +[Service] +ExecStart=sh -x -c 'echo 0 >/sys/fs/selinux/enforce && cd /systemd-test-module && make -f /usr/share/selinux/devel/Makefile load' +Type=oneshot +TimeoutSec=0 +RemainAfterExit=yes diff --git a/test/units/testsuite-06.service b/test/units/testsuite-06.service new file mode 100644 index 0000000000..72c0a2ca0d --- /dev/null +++ b/test/units/testsuite-06.service @@ -0,0 +1,9 @@ +[Unit] +Description=TEST-06-SELINUX + +Requires=load-systemd-test-module.service +After=load-systemd-test-module.service + +[Service] +ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh +Type=oneshot diff --git a/test/TEST-06-SELINUX/test-selinux-checks.sh b/test/units/testsuite-06.sh similarity index 100% rename from test/TEST-06-SELINUX/test-selinux-checks.sh rename to test/units/testsuite-06.sh From 1c76b5b5bbef7803916903ccc97a840245cce343 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Thu, 19 Mar 2020 16:57:50 +0100 Subject: [PATCH 12/78] test/TEST-06: skip test if no selinux I put SELINUX=disabled on my laptop, and the test fails with ENOENT when trying to write to /sys/fs/selinux/enforce. It's a bit of a special case, but let's avoid the failure. --- test/units/testsuite-06.sh | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/test/units/testsuite-06.sh b/test/units/testsuite-06.sh index 9e722e362e..f9b106da7b 100755 --- a/test/units/testsuite-06.sh +++ b/test/units/testsuite-06.sh @@ -3,7 +3,12 @@ set -x set -e set -o pipefail -echo 1 >/sys/fs/selinux/enforce +echo 1 >/sys/fs/selinux/enforce || { + echo "Can't make selinux enforcing, skipping test" + touch /testok + exit +} + runcon -t systemd_test_start_t systemctl start hola runcon -t systemd_test_reload_t systemctl reload hola runcon -t systemd_test_stop_t systemctl stop hola From 4caa1ac7941ced719c782f64dd7a22e4670f846c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Tue, 10 Dec 2019 20:46:48 +0100 Subject: [PATCH 13/78] test/TEST-06: make autorelabel.service a static file too --- test/test-functions | 22 ++-------------------- test/units/autorelabel.service | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+), 20 deletions(-) create mode 100644 test/units/autorelabel.service diff --git a/test/test-functions b/test/test-functions index b38c04c6b3..35c2d16404 100644 --- a/test/test-functions +++ b/test/test-functions @@ -353,27 +353,9 @@ setup_selinux() { exit 1 fi - cat <$initdir/etc/systemd/system/autorelabel.service -[Unit] -Description=Relabel all filesystems -DefaultDependencies=no -Requires=local-fs.target -Conflicts=shutdown.target -After=local-fs.target -Before=sysinit.target shutdown.target -ConditionSecurity=selinux -ConditionPathExists=|/.autorelabel - -[Service] -ExecStart=/bin/sh -x -c 'echo 0 >/sys/fs/selinux/enforce && fixfiles -f -F relabel && rm /.autorelabel && systemctl --force reboot' -Type=oneshot -TimeoutSec=0 -RemainAfterExit=yes -EOF - touch $initdir/.autorelabel - mkdir -p $initdir/etc/systemd/system/basic.target.wants - ln -fs autorelabel.service $initdir/etc/systemd/system/basic.target.wants/autorelabel.service + mkdir -p $initdir/usr/lib/systemd/tests/testdata/units/basic.target.wants + ln -sf ../autorelabel.service $initdir/usr/lib/systemd/tests/testdata/units/basic.target.wants/ dracut_install $_fixfiles_tools dracut_install fixfiles diff --git a/test/units/autorelabel.service b/test/units/autorelabel.service new file mode 100644 index 0000000000..cb38849373 --- /dev/null +++ b/test/units/autorelabel.service @@ -0,0 +1,18 @@ +[Unit] +Description=Relabel all filesystems +DefaultDependencies=no +Requires=local-fs.target +Conflicts=shutdown.target +After=local-fs.target +Before=sysinit.target shutdown.target +ConditionSecurity=selinux +ConditionPathExists=|/.autorelabel + +[Service] +ExecStart=sh -x -c 'echo 0 >/sys/fs/selinux/enforce && fixfiles -f -F relabel && rm /.autorelabel && systemctl --force reboot' +Type=oneshot +TimeoutSec=0 +RemainAfterExit=yes + +[Install] +WantedBy=basic.target From 58a1bdb46704ab32b19d375496dab5ebad6c631d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Mon, 9 Dec 2019 19:51:17 +0100 Subject: [PATCH 14/78] test: move TEST-07-ISSUE-1981 setup to static files --- test/TEST-07-ISSUE-1981/test.sh | 16 +--------------- test/units/testsuite-07.service | 6 ++++++ .../test-segfault.sh => units/testsuite-07.sh} | 0 3 files changed, 7 insertions(+), 15 deletions(-) create mode 100644 test/units/testsuite-07.service rename test/{TEST-07-ISSUE-1981/test-segfault.sh => units/testsuite-07.sh} (100%) diff --git a/test/TEST-07-ISSUE-1981/test.sh b/test/TEST-07-ISSUE-1981/test.sh index 7927294a8a..3495951bfa 100755 --- a/test/TEST-07-ISSUE-1981/test.sh +++ b/test/TEST-07-ISSUE-1981/test.sh @@ -17,22 +17,8 @@ test_setup() { setup_basic_environment mask_supporting_services - - # setup the testsuite service - cat >$initdir/etc/systemd/system/testsuite.service < Date: Tue, 10 Dec 2019 16:05:48 +0100 Subject: [PATCH 15/78] test: move TEST-08-ISSUE-2730 setup to static files and meson scripts Unfortunately meson does not install symlinks, but copies the symlink destination instead. So symlinks need to be created by a script. This commit adds both symlinks in test/testsuite-08.units/ and meson scriptlet calls. Strictly speaking, the first is not necessary, since nothing reads stuff directly from the source tree. --- test/TEST-08-ISSUE-2730/test.sh | 49 +------------------ test/meson.build | 12 +++++ test/testsuite-08.units/-.mount | 12 +++++ .../local-fs.target.wants/-.mount | 1 + test/testsuite-08.units/root.mount | 1 + .../systemd-remount-fs.service | 11 +++++ test/units/testsuite-08.service | 6 +++ tools/meson-make-symlink.sh | 6 +-- 8 files changed, 48 insertions(+), 50 deletions(-) create mode 100644 test/testsuite-08.units/-.mount create mode 120000 test/testsuite-08.units/local-fs.target.wants/-.mount create mode 120000 test/testsuite-08.units/root.mount create mode 100644 test/testsuite-08.units/systemd-remount-fs.service create mode 100644 test/units/testsuite-08.service diff --git a/test/TEST-08-ISSUE-2730/test.sh b/test/TEST-08-ISSUE-2730/test.sh index 2fedef7b58..7acca157d2 100755 --- a/test/TEST-08-ISSUE-2730/test.sh +++ b/test/TEST-08-ISSUE-2730/test.sh @@ -17,54 +17,9 @@ test_setup() { setup_basic_environment - # setup the testsuite service - cat >$initdir/etc/systemd/system/testsuite.service < /testok; systemctl poweroff' -Type=oneshot -EOF - - rm $initdir/etc/fstab - cat >$initdir/etc/systemd/system/-.mount <$initdir/etc/systemd/system/systemd-remount-fs.service </testok; systemctl poweroff' +Type=oneshot diff --git a/tools/meson-make-symlink.sh b/tools/meson-make-symlink.sh index da0d13a341..cdd5214125 100755 --- a/tools/meson-make-symlink.sh +++ b/tools/meson-make-symlink.sh @@ -5,8 +5,8 @@ set -eu # and we need to create the target directory... mkdir -vp "$(dirname "${DESTDIR:-}$2")" -if [ "$(dirname $1)" = . ]; then - ln -vfs -T "$1" "${DESTDIR:-}$2" +if [ "$(dirname $1)" = . -o "$(dirname $1)" = .. ]; then + ln -vfs -T -- "$1" "${DESTDIR:-}$2" else - ln -vfs -T --relative "${DESTDIR:-}$1" "${DESTDIR:-}$2" + ln -vfs -T --relative -- "${DESTDIR:-}$1" "${DESTDIR:-}$2" fi From e88302002fcea6cd8adc0fcac0d08e2daf8c6452 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Mon, 9 Dec 2019 20:27:40 +0100 Subject: [PATCH 16/78] test: move TEST-09-ISSUE-2691 setup to static files --- test/TEST-09-ISSUE-2691/test.sh | 17 +---------------- test/units/testsuite-09.service | 9 +++++++++ 2 files changed, 10 insertions(+), 16 deletions(-) create mode 100644 test/units/testsuite-09.service diff --git a/test/TEST-09-ISSUE-2691/test.sh b/test/TEST-09-ISSUE-2691/test.sh index efe75d140b..753a4a9868 100755 --- a/test/TEST-09-ISSUE-2691/test.sh +++ b/test/TEST-09-ISSUE-2691/test.sh @@ -16,22 +16,7 @@ test_setup() { setup_basic_environment mask_supporting_services - - # setup the testsuite service - cat >$initdir/etc/systemd/system/testsuite.service <<'EOF' -[Unit] -Description=Testsuite service - -[Service] -Type=oneshot -ExecStart=/bin/sh -c '>/testok' -RemainAfterExit=yes -ExecStop=/bin/sh -c 'kill -SEGV $$$$' -TimeoutStopSec=270s -EOF - - setup_testsuite ) } -do_test "$@" +do_test "$@" 09 diff --git a/test/units/testsuite-09.service b/test/units/testsuite-09.service new file mode 100644 index 0000000000..d551501335 --- /dev/null +++ b/test/units/testsuite-09.service @@ -0,0 +1,9 @@ +[Unit] +Description=TEST-09-ISSUE-2691 + +[Service] +ExecStart=sh -c '>/testok' +ExecStop=sh -c 'kill -SEGV $$$$' +Type=oneshot +RemainAfterExit=yes +TimeoutStopSec=270s From 4110a6deb94c1086cb6ee2113862da276b25dff4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Mon, 9 Dec 2019 20:35:51 +0100 Subject: [PATCH 17/78] test: use shell arrays and remove duplicates The tool lists are obviously not empty, so let's remove the test if they are. --- test/test-functions | 67 ++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 63 insertions(+), 4 deletions(-) diff --git a/test/test-functions b/test/test-functions index 35c2d16404..410d79d0bb 100644 --- a/test/test-functions +++ b/test/test-functions @@ -39,8 +39,67 @@ PATH_TO_INIT=$ROOTLIBDIR/systemd [ "$SYSTEMD_NSPAWN" ] || SYSTEMD_NSPAWN=$(which -a $BUILD_DIR/systemd-nspawn systemd-nspawn 2>/dev/null | grep '^/' -m1) [ "$JOURNALCTL" ] || JOURNALCTL=$(which -a $BUILD_DIR/journalctl journalctl 2>/dev/null | grep '^/' -m1) -BASICTOOLS="test env sh bash setsid loadkeys setfont login sulogin gzip sleep echo head tail cat mount umount cryptsetup date dmsetup modprobe sed cmp tee rm true false chmod chown ln xargs" -DEBUGTOOLS="df free ls stty ps ln ip route dmesg dhclient mkdir cp ping dhclient strace less grep id tty touch du sort hostname find vi mv" +BASICTOOLS=( + bash + cat + chmod + chown + cmp + cryptsetup + date + dmsetup + echo + env + false + gzip + head + ln + loadkeys + login + modprobe + mount + rm + sed + setfont + setsid + sh + sleep + sulogin + tail + tee + test + true + umount + xargs +) + +DEBUGTOOLS=( + cp + df + dhclient + dmesg + du + find + free + grep + hostname + id + ip + less + ln + ls + mkdir + mv + ping + ps + route + sort + strace + stty + touch + tty + vi +) STATEDIR="${BUILD_DIR:-.}/test/$(basename $(dirname $(realpath $0)))" STATEFILE="$STATEDIR/.testdir" @@ -765,14 +824,14 @@ EOF } install_basic_tools() { - [[ $BASICTOOLS ]] && dracut_install $BASICTOOLS + dracut_install "${BASICTOOLS[@]}" dracut_install -o sushell # in Debian ldconfig is just a shell script wrapper around ldconfig.real dracut_install -o ldconfig.real } install_debug_tools() { - [[ $DEBUGTOOLS ]] && dracut_install $DEBUGTOOLS + dracut_install "${DEBUGTOOLS[@]}" if [[ $INTERACTIVE_DEBUG ]]; then # Set default TERM from vt220 to linux, so at least basic key shortcuts work From 8c6d58f65d94f081a7e869383facaee4980400ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Mon, 9 Dec 2019 20:42:48 +0100 Subject: [PATCH 18/78] test: move TEST-10-ISSUE-2467 setup to static files --- test/TEST-10-ISSUE-2467/test.sh | 29 +------------------------- test/meson.build | 2 ++ test/test-functions | 1 + test/testsuite-10.units/test10.service | 6 ++++++ test/testsuite-10.units/test10.socket | 2 ++ test/units/testsuite-10.service | 6 ++++++ 6 files changed, 18 insertions(+), 28 deletions(-) create mode 100644 test/testsuite-10.units/test10.service create mode 100644 test/testsuite-10.units/test10.socket create mode 100644 test/units/testsuite-10.service diff --git a/test/TEST-10-ISSUE-2467/test.sh b/test/TEST-10-ISSUE-2467/test.sh index 1761ad1e43..4cd7adf6bb 100755 --- a/test/TEST-10-ISSUE-2467/test.sh +++ b/test/TEST-10-ISSUE-2467/test.sh @@ -14,35 +14,8 @@ test_setup() { setup_basic_environment mask_supporting_services - dracut_install true rm socat - - # setup the testsuite service - cat >$initdir/etc/systemd/system/testsuite.service <<'EOF' -[Unit] -Description=Testsuite service - -[Service] -Type=oneshot -ExecStart=/bin/sh -e -x -c 'rm -f /tmp/nonexistent; systemctl start test.socket; printf x > test.file; socat -t20 OPEN:test.file UNIX-CONNECT:/run/test.ctl; >/testok' -EOF - - cat >$initdir/etc/systemd/system/test.socket <<'EOF' -[Socket] -ListenStream=/run/test.ctl -EOF - - cat > $initdir/etc/systemd/system/test.service <<'EOF' -[Unit] -Requires=test.socket -ConditionPathExistsGlob=/tmp/nonexistent - -[Service] -ExecStart=/bin/true -EOF - - setup_testsuite ) setup_nspawn_root } -do_test "$@" +do_test "$@" 10 diff --git a/test/meson.build b/test/meson.build index 295b7092c8..f0444b8fa1 100644 --- a/test/meson.build +++ b/test/meson.build @@ -16,6 +16,8 @@ install_subdir('testsuite-04.units', install_dir : testdata_dir) install_subdir('testsuite-06.units', install_dir : testdata_dir) +install_subdir('testsuite-10.units', + install_dir : testdata_dir) testsuite08_dir = testdata_dir + '/testsuite-08.units' install_data('testsuite-08.units/-.mount', diff --git a/test/test-functions b/test/test-functions index 410d79d0bb..19402b3988 100644 --- a/test/test-functions +++ b/test/test-functions @@ -64,6 +64,7 @@ BASICTOOLS=( setsid sh sleep + socat sulogin tail tee diff --git a/test/testsuite-10.units/test10.service b/test/testsuite-10.units/test10.service new file mode 100644 index 0000000000..d0be786b01 --- /dev/null +++ b/test/testsuite-10.units/test10.service @@ -0,0 +1,6 @@ +[Unit] +Requires=test10.socket +ConditionPathExistsGlob=/tmp/nonexistent + +[Service] +ExecStart=true diff --git a/test/testsuite-10.units/test10.socket b/test/testsuite-10.units/test10.socket new file mode 100644 index 0000000000..9cceebbb8e --- /dev/null +++ b/test/testsuite-10.units/test10.socket @@ -0,0 +1,2 @@ +[Socket] +ListenStream=/run/test.ctl diff --git a/test/units/testsuite-10.service b/test/units/testsuite-10.service new file mode 100644 index 0000000000..13756cfa51 --- /dev/null +++ b/test/units/testsuite-10.service @@ -0,0 +1,6 @@ +[Unit] +Description=TEST-10-ISSUE-2467 + +[Service] +Type=oneshot +ExecStart=sh -e -x -c 'rm -f /tmp/nonexistent; systemctl start test10.socket; printf x >test.file; socat -t20 OPEN:test.file UNIX-CONNECT:/run/test.ctl; >/testok' From 3ac189d8aa3ca08e2ad76426f86e8135b2b45d95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Mon, 9 Dec 2019 20:53:38 +0100 Subject: [PATCH 19/78] test: move TEST-11-ISSUE-3166 setup to static files --- test/TEST-11-ISSUE-3166/test.sh | 43 +------------------ test/meson.build | 2 + test/test-functions | 2 +- .../fail-on-restart.service | 9 ++++ test/units/testsuite-11.service | 6 +++ test/units/testsuite-11.sh | 11 +++++ 6 files changed, 30 insertions(+), 43 deletions(-) create mode 100644 test/testsuite-11.units/fail-on-restart.service create mode 100644 test/units/testsuite-11.service create mode 100755 test/units/testsuite-11.sh diff --git a/test/TEST-11-ISSUE-3166/test.sh b/test/TEST-11-ISSUE-3166/test.sh index e444414a90..0fe0eaeed1 100755 --- a/test/TEST-11-ISSUE-3166/test.sh +++ b/test/TEST-11-ISSUE-3166/test.sh @@ -15,48 +15,7 @@ test_setup() { setup_basic_environment mask_supporting_services - dracut_install false touch - - # setup the testsuite service - cat >$initdir/etc/systemd/system/testsuite.service <$initdir/etc/systemd/system/fail-on-restart.service <$initdir/test-fail-on-restart.sh <<'EOF' -#!/usr/bin/env bash -set -x - -systemctl start fail-on-restart.service -active_state=$(systemctl show --property ActiveState fail-on-restart.service) -while [[ "$active_state" == "ActiveState=activating" || "$active_state" == "ActiveState=active" ]]; do - sleep 1 - active_state=$(systemctl show --property ActiveState fail-on-restart.service) -done -systemctl is-failed fail-on-restart.service || exit 1 -touch /testok -EOF - - chmod 0755 $initdir/test-fail-on-restart.sh - setup_testsuite ) } -do_test "$@" +do_test "$@" 11 diff --git a/test/meson.build b/test/meson.build index f0444b8fa1..f109d85650 100644 --- a/test/meson.build +++ b/test/meson.build @@ -18,6 +18,8 @@ install_subdir('testsuite-06.units', install_dir : testdata_dir) install_subdir('testsuite-10.units', install_dir : testdata_dir) +install_subdir('testsuite-11.units', + install_dir : testdata_dir) testsuite08_dir = testdata_dir + '/testsuite-08.units' install_data('testsuite-08.units/-.mount', diff --git a/test/test-functions b/test/test-functions index 19402b3988..1f4dc8ec6d 100644 --- a/test/test-functions +++ b/test/test-functions @@ -69,6 +69,7 @@ BASICTOOLS=( tail tee test + touch true umount xargs @@ -97,7 +98,6 @@ DEBUGTOOLS=( sort strace stty - touch tty vi ) diff --git a/test/testsuite-11.units/fail-on-restart.service b/test/testsuite-11.units/fail-on-restart.service new file mode 100644 index 0000000000..9264f151f3 --- /dev/null +++ b/test/testsuite-11.units/fail-on-restart.service @@ -0,0 +1,9 @@ +[Unit] +Description=Fail on restart +StartLimitIntervalSec=1m +StartLimitBurst=3 + +[Service] +Type=simple +ExecStart=false +Restart=always diff --git a/test/units/testsuite-11.service b/test/units/testsuite-11.service new file mode 100644 index 0000000000..9093ae8d43 --- /dev/null +++ b/test/units/testsuite-11.service @@ -0,0 +1,6 @@ +[Unit] +Description=TEST-11-ISSUE-3166 + +[Service] +ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh +Type=oneshot diff --git a/test/units/testsuite-11.sh b/test/units/testsuite-11.sh new file mode 100755 index 0000000000..708c7cebb7 --- /dev/null +++ b/test/units/testsuite-11.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash +set -x + +systemctl start fail-on-restart.service +active_state=$(systemctl show --value --property ActiveState fail-on-restart.service) +while [[ "$active_state" == "activating" || "$active_state" == "active" ]]; do + sleep 1 + active_state=$(systemctl show --value --property ActiveState fail-on-restart.service) +done +systemctl is-failed fail-on-restart.service || exit 1 +touch /testok From d10029bba4398d0b57cfa51ce052feda93c2c8e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Mon, 9 Dec 2019 21:26:59 +0100 Subject: [PATCH 20/78] test: move TEST-12-ISSUE-3171 setup to static files --- test/TEST-12-ISSUE-3171/test.sh | 68 +-------------------------------- test/test-functions | 4 +- test/units/testsuite-12.service | 7 ++++ test/units/testsuite-12.sh | 47 +++++++++++++++++++++++ 4 files changed, 58 insertions(+), 68 deletions(-) create mode 100644 test/units/testsuite-12.service create mode 100755 test/units/testsuite-12.sh diff --git a/test/TEST-12-ISSUE-3171/test.sh b/test/TEST-12-ISSUE-3171/test.sh index e30c36ed86..c78fe525c3 100755 --- a/test/TEST-12-ISSUE-3171/test.sh +++ b/test/TEST-12-ISSUE-3171/test.sh @@ -15,75 +15,9 @@ test_setup() { setup_basic_environment mask_supporting_services - dracut_install cat mv stat nc - - # setup the testsuite service - cat >$initdir/etc/systemd/system/testsuite.service <$initdir/test-socket-group.sh <<'EOF' -#!/usr/bin/env bash -set -x -set -e -set -o pipefail - -U=/run/systemd/system/test.socket -cat <<'EOL' >$U -[Unit] -Description=Test socket -[Socket] -Accept=yes -ListenStream=/run/test.socket -SocketGroup=adm -SocketMode=0660 -EOL - -cat <<'EOL' > /run/systemd/system/test@.service -[Unit] -Description=Test service -[Service] -StandardInput=socket -ExecStart=/bin/sh -x -c cat -EOL - -systemctl start test.socket -systemctl is-active test.socket -[[ "$(stat --format='%G' /run/test.socket)" == adm ]] -echo A | nc -w1 -U /run/test.socket - -mv $U ${U}.disabled -systemctl daemon-reload -systemctl is-active test.socket -[[ "$(stat --format='%G' /run/test.socket)" == adm ]] -echo B | nc -w1 -U /run/test.socket && exit 1 - -mv ${U}.disabled $U -systemctl daemon-reload -systemctl is-active test.socket -echo C | nc -w1 -U /run/test.socket && exit 1 -[[ "$(stat --format='%G' /run/test.socket)" == adm ]] - -systemctl restart test.socket -systemctl is-active test.socket -echo D | nc -w1 -U /run/test.socket -[[ "$(stat --format='%G' /run/test.socket)" == adm ]] - - -touch /testok -EOF - - chmod 0755 $initdir/test-socket-group.sh - setup_testsuite ) setup_nspawn_root } -do_test "$@" +do_test "$@" 12 diff --git a/test/test-functions b/test/test-functions index 1f4dc8ec6d..55703f5665 100644 --- a/test/test-functions +++ b/test/test-functions @@ -58,6 +58,8 @@ BASICTOOLS=( login modprobe mount + mv + nc rm sed setfont @@ -65,6 +67,7 @@ BASICTOOLS=( sh sleep socat + stat sulogin tail tee @@ -91,7 +94,6 @@ DEBUGTOOLS=( ln ls mkdir - mv ping ps route diff --git a/test/units/testsuite-12.service b/test/units/testsuite-12.service new file mode 100644 index 0000000000..77153ea2eb --- /dev/null +++ b/test/units/testsuite-12.service @@ -0,0 +1,7 @@ +[Unit] +Description=TEST-12-ISSUE-3171 +After=multi-user.target + +[Service] +ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh +Type=oneshot diff --git a/test/units/testsuite-12.sh b/test/units/testsuite-12.sh new file mode 100755 index 0000000000..b5888a255b --- /dev/null +++ b/test/units/testsuite-12.sh @@ -0,0 +1,47 @@ +#!/usr/bin/env bash +set -x +set -e +set -o pipefail + +U=/run/systemd/system/test12.socket +cat <<'EOF' >$U +[Unit] +Description=Test 12 socket +[Socket] +Accept=yes +ListenStream=/run/test12.socket +SocketGroup=adm +SocketMode=0660 +EOF + +cat <<'EOF' > /run/systemd/system/test12@.service +[Unit] +Description=Test service +[Service] +StandardInput=socket +ExecStart=/bin/sh -x -c cat +EOF + +systemctl start test12.socket +systemctl is-active test12.socket +[[ "$(stat --format='%G' /run/test12.socket)" == adm ]] +echo A | nc -w1 -U /run/test12.socket + +mv $U ${U}.disabled +systemctl daemon-reload +systemctl is-active test12.socket +[[ "$(stat --format='%G' /run/test12.socket)" == adm ]] +echo B | nc -w1 -U /run/test12.socket && exit 1 + +mv ${U}.disabled $U +systemctl daemon-reload +systemctl is-active test12.socket +echo C | nc -w1 -U /run/test12.socket && exit 1 +[[ "$(stat --format='%G' /run/test12.socket)" == adm ]] + +systemctl restart test12.socket +systemctl is-active test12.socket +echo D | nc -w1 -U /run/test12.socket +[[ "$(stat --format='%G' /run/test12.socket)" == adm ]] + +touch /testok From e5badaf3350efc4c8e4976b77c891f116fa911d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Mon, 9 Dec 2019 21:45:46 +0100 Subject: [PATCH 21/78] test: move most of TEST-13-NSPAWN-SMOKE setup to static files --- test/TEST-13-NSPAWN-SMOKE/test.sh | 173 +----------------- .../create-busybox-container | 0 test/meson.build | 4 + test/test-functions | 6 +- test/units/testsuite-13.service | 6 + test/units/testsuite-13.sh | 150 +++++++++++++++ 6 files changed, 167 insertions(+), 172 deletions(-) rename test/{TEST-13-NSPAWN-SMOKE => }/create-busybox-container (100%) create mode 100644 test/units/testsuite-13.service create mode 100755 test/units/testsuite-13.sh diff --git a/test/TEST-13-NSPAWN-SMOKE/test.sh b/test/TEST-13-NSPAWN-SMOKE/test.sh index 974b239d80..d81de0ebca 100755 --- a/test/TEST-13-NSPAWN-SMOKE/test.sh +++ b/test/TEST-13-NSPAWN-SMOKE/test.sh @@ -15,179 +15,10 @@ test_setup() { setup_basic_environment mask_supporting_services - dracut_install busybox chmod rmdir unshare ip sysctl - cp create-busybox-container $initdir/ - - ./create-busybox-container $initdir/nc-container + ../create-busybox-container $initdir/nc-container initdir="$initdir/nc-container" dracut_install nc ip - - # setup the testsuite service - cat >$initdir/etc/systemd/system/testsuite.service <$initdir/test-nspawn.sh <<'EOF' -#!/usr/bin/env bash -set -x -set -e -set -u -set -o pipefail - -export SYSTEMD_LOG_LEVEL=debug - -# check cgroup-v2 -is_v2_supported=no -mkdir -p /tmp/cgroup2 -if mount -t cgroup2 cgroup2 /tmp/cgroup2; then - is_v2_supported=yes - umount /tmp/cgroup2 -fi -rmdir /tmp/cgroup2 - -# check cgroup namespaces -is_cgns_supported=no -if [[ -f /proc/1/ns/cgroup ]]; then - is_cgns_supported=yes -fi - -is_user_ns_supported=no -# On some systems (e.g. CentOS 7) the default limit for user namespaces -# is set to 0, which causes the following unshare syscall to fail, even -# with enabled user namespaces support. By setting this value explicitly -# we can ensure the user namespaces support to be detected correctly. -sysctl -w user.max_user_namespaces=10000 -if unshare -U sh -c :; then - is_user_ns_supported=yes -fi - -function check_bind_tmp_path { - # https://github.com/systemd/systemd/issues/4789 - local _root="/var/lib/machines/bind-tmp-path" - /create-busybox-container "$_root" - >/tmp/bind - systemd-nspawn --register=no -D "$_root" --bind=/tmp/bind /bin/sh -c 'test -e /tmp/bind' -} - -function check_norbind { - # https://github.com/systemd/systemd/issues/13170 - local _root="/var/lib/machines/norbind-path" - mkdir -p /tmp/binddir/subdir - echo -n "outer" > /tmp/binddir/subdir/file - mount -t tmpfs tmpfs /tmp/binddir/subdir - echo -n "inner" > /tmp/binddir/subdir/file - /create-busybox-container "$_root" - systemd-nspawn --register=no -D "$_root" --bind=/tmp/binddir:/mnt:norbind /bin/sh -c 'CONTENT=$(cat /mnt/subdir/file); if [[ $CONTENT != "outer" ]]; then echo "*** unexpected content: $CONTENT"; return 1; fi' -} - -function check_notification_socket { - # https://github.com/systemd/systemd/issues/4944 - local _cmd='echo a | $(busybox which nc) -U -u -w 1 /run/systemd/nspawn/notify' - systemd-nspawn --register=no -D /nc-container /bin/sh -x -c "$_cmd" - systemd-nspawn --register=no -D /nc-container -U /bin/sh -x -c "$_cmd" -} - -function run { - if [[ "$1" = "yes" && "$is_v2_supported" = "no" ]]; then - printf "Unified cgroup hierarchy is not supported. Skipping.\n" >&2 - return 0 - fi - if [[ "$2" = "yes" && "$is_cgns_supported" = "no" ]]; then - printf "CGroup namespaces are not supported. Skipping.\n" >&2 - return 0 - fi - - local _root="/var/lib/machines/unified-$1-cgns-$2-api-vfs-writable-$3" - /create-busybox-container "$_root" - SYSTEMD_NSPAWN_UNIFIED_HIERARCHY="$1" SYSTEMD_NSPAWN_USE_CGNS="$2" SYSTEMD_NSPAWN_API_VFS_WRITABLE="$3" systemd-nspawn --register=no -D "$_root" -b - SYSTEMD_NSPAWN_UNIFIED_HIERARCHY="$1" SYSTEMD_NSPAWN_USE_CGNS="$2" SYSTEMD_NSPAWN_API_VFS_WRITABLE="$3" systemd-nspawn --register=no -D "$_root" --private-network -b - - if SYSTEMD_NSPAWN_UNIFIED_HIERARCHY="$1" SYSTEMD_NSPAWN_USE_CGNS="$2" SYSTEMD_NSPAWN_API_VFS_WRITABLE="$3" systemd-nspawn --register=no -D "$_root" -U -b; then - [[ "$is_user_ns_supported" = "yes" && "$3" = "network" ]] && return 1 - else - [[ "$is_user_ns_supported" = "no" && "$3" = "network" ]] && return 1 - fi - - if SYSTEMD_NSPAWN_UNIFIED_HIERARCHY="$1" SYSTEMD_NSPAWN_USE_CGNS="$2" SYSTEMD_NSPAWN_API_VFS_WRITABLE="$3" systemd-nspawn --register=no -D "$_root" --private-network -U -b; then - [[ "$is_user_ns_supported" = "yes" && "$3" = "yes" ]] && return 1 - else - [[ "$is_user_ns_supported" = "no" && "$3" = "yes" ]] && return 1 - fi - - local _netns_opt="--network-namespace-path=/proc/self/ns/net" - - # --network-namespace-path and network-related options cannot be used together - if SYSTEMD_NSPAWN_UNIFIED_HIERARCHY="$1" SYSTEMD_NSPAWN_USE_CGNS="$2" SYSTEMD_NSPAWN_API_VFS_WRITABLE="$3" systemd-nspawn --register=no -D "$_root" "$_netns_opt" --network-interface=lo -b; then - return 1 - fi - - if SYSTEMD_NSPAWN_UNIFIED_HIERARCHY="$1" SYSTEMD_NSPAWN_USE_CGNS="$2" SYSTEMD_NSPAWN_API_VFS_WRITABLE="$3" systemd-nspawn --register=no -D "$_root" "$_netns_opt" --network-macvlan=lo -b; then - return 1 - fi - - if SYSTEMD_NSPAWN_UNIFIED_HIERARCHY="$1" SYSTEMD_NSPAWN_USE_CGNS="$2" SYSTEMD_NSPAWN_API_VFS_WRITABLE="$3" systemd-nspawn --register=no -D "$_root" "$_netns_opt" --network-ipvlan=lo -b; then - return 1 - fi - - if SYSTEMD_NSPAWN_UNIFIED_HIERARCHY="$1" SYSTEMD_NSPAWN_USE_CGNS="$2" SYSTEMD_NSPAWN_API_VFS_WRITABLE="$3" systemd-nspawn --register=no -D "$_root" "$_netns_opt" --network-veth -b; then - return 1 - fi - - if SYSTEMD_NSPAWN_UNIFIED_HIERARCHY="$1" SYSTEMD_NSPAWN_USE_CGNS="$2" SYSTEMD_NSPAWN_API_VFS_WRITABLE="$3" systemd-nspawn --register=no -D "$_root" "$_netns_opt" --network-veth-extra=lo -b; then - return 1 - fi - - if SYSTEMD_NSPAWN_UNIFIED_HIERARCHY="$1" SYSTEMD_NSPAWN_USE_CGNS="$2" SYSTEMD_NSPAWN_API_VFS_WRITABLE="$3" systemd-nspawn --register=no -D "$_root" "$_netns_opt" --network-bridge=lo -b; then - return 1 - fi - - if SYSTEMD_NSPAWN_UNIFIED_HIERARCHY="$1" SYSTEMD_NSPAWN_USE_CGNS="$2" SYSTEMD_NSPAWN_API_VFS_WRITABLE="$3" systemd-nspawn --register=no -D "$_root" "$_netns_opt" --network-zone=zone -b; then - return 1 - fi - - # allow combination of --network-namespace-path and --private-network - if ! SYSTEMD_NSPAWN_UNIFIED_HIERARCHY="$1" SYSTEMD_NSPAWN_USE_CGNS="$2" SYSTEMD_NSPAWN_API_VFS_WRITABLE="$3" systemd-nspawn --register=no -D "$_root" "$_netns_opt" --private-network -b; then - return 1 - fi - - # test --network-namespace-path works with a network namespace created by "ip netns" - ip netns add nspawn_test - _netns_opt="--network-namespace-path=/run/netns/nspawn_test" - SYSTEMD_NSPAWN_UNIFIED_HIERARCHY="$1" SYSTEMD_NSPAWN_USE_CGNS="$2" SYSTEMD_NSPAWN_API_VFS_WRITABLE="$3" systemd-nspawn --register=no -D "$_root" "$_netns_opt" /bin/ip a | grep -v -E '^1: lo.*UP' - local r=$? - ip netns del nspawn_test - - if [ $r -ne 0 ]; then - return 1 - fi - - return 0 -} - -check_bind_tmp_path - -check_norbind - -check_notification_socket - -for api_vfs_writable in yes no network; do - run no no $api_vfs_writable - run yes no $api_vfs_writable - run no yes $api_vfs_writable - run yes yes $api_vfs_writable -done - -touch /testok -EOF - - chmod 0755 $initdir/test-nspawn.sh - setup_testsuite ) } -do_test "$@" +do_test "$@" 13 diff --git a/test/TEST-13-NSPAWN-SMOKE/create-busybox-container b/test/create-busybox-container similarity index 100% rename from test/TEST-13-NSPAWN-SMOKE/create-busybox-container rename to test/create-busybox-container diff --git a/test/meson.build b/test/meson.build index f109d85650..61e0aee13f 100644 --- a/test/meson.build +++ b/test/meson.build @@ -38,6 +38,10 @@ if conf.get('ENABLE_RESOLVE') == 1 install_dir : testdata_dir) endif +install_data('create-busybox-container', + install_mode : 'rwxr-xr-x', + install_dir : testdata_dir) + ############################################################ rule_syntax_check_py = find_program('rule-syntax-check.py') diff --git a/test/test-functions b/test/test-functions index 55703f5665..0a111771bf 100644 --- a/test/test-functions +++ b/test/test-functions @@ -41,6 +41,7 @@ PATH_TO_INIT=$ROOTLIBDIR/systemd BASICTOOLS=( bash + busybox cat chmod chown @@ -53,6 +54,7 @@ BASICTOOLS=( false gzip head + ip ln loadkeys login @@ -61,6 +63,7 @@ BASICTOOLS=( mv nc rm + rmdir sed setfont setsid @@ -69,12 +72,14 @@ BASICTOOLS=( socat stat sulogin + sysctl tail tee test touch true umount + unshare xargs ) @@ -89,7 +94,6 @@ DEBUGTOOLS=( grep hostname id - ip less ln ls diff --git a/test/units/testsuite-13.service b/test/units/testsuite-13.service new file mode 100644 index 0000000000..a7441d1279 --- /dev/null +++ b/test/units/testsuite-13.service @@ -0,0 +1,6 @@ +[Unit] +Description=TEST-13-NSPAWN-SMOKE + +[Service] +ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh +Type=oneshot diff --git a/test/units/testsuite-13.sh b/test/units/testsuite-13.sh new file mode 100755 index 0000000000..0ab684732c --- /dev/null +++ b/test/units/testsuite-13.sh @@ -0,0 +1,150 @@ +#!/usr/bin/env bash +set -x +set -e +set -u +set -o pipefail + +export SYSTEMD_LOG_LEVEL=debug + +# check cgroup-v2 +is_v2_supported=no +mkdir -p /tmp/cgroup2 +if mount -t cgroup2 cgroup2 /tmp/cgroup2; then + is_v2_supported=yes + umount /tmp/cgroup2 +fi +rmdir /tmp/cgroup2 + +# check cgroup namespaces +is_cgns_supported=no +if [[ -f /proc/1/ns/cgroup ]]; then + is_cgns_supported=yes +fi + +is_user_ns_supported=no +# On some systems (e.g. CentOS 7) the default limit for user namespaces +# is set to 0, which causes the following unshare syscall to fail, even +# with enabled user namespaces support. By setting this value explicitly +# we can ensure the user namespaces support to be detected correctly. +sysctl -w user.max_user_namespaces=10000 +if unshare -U sh -c :; then + is_user_ns_supported=yes +fi + +function check_bind_tmp_path { + # https://github.com/systemd/systemd/issues/4789 + local _root="/var/lib/machines/bind-tmp-path" + /usr/lib/systemd/tests/testdata/create-busybox-container "$_root" + >/tmp/bind + systemd-nspawn --register=no -D "$_root" --bind=/tmp/bind /bin/sh -c 'test -e /tmp/bind' +} + +function check_norbind { + # https://github.com/systemd/systemd/issues/13170 + local _root="/var/lib/machines/norbind-path" + mkdir -p /tmp/binddir/subdir + echo -n "outer" > /tmp/binddir/subdir/file + mount -t tmpfs tmpfs /tmp/binddir/subdir + echo -n "inner" > /tmp/binddir/subdir/file + /usr/lib/systemd/tests/testdata/create-busybox-container "$_root" + systemd-nspawn --register=no -D "$_root" --bind=/tmp/binddir:/mnt:norbind /bin/sh -c 'CONTENT=$(cat /mnt/subdir/file); if [[ $CONTENT != "outer" ]]; then echo "*** unexpected content: $CONTENT"; return 1; fi' +} + +function check_notification_socket { + # https://github.com/systemd/systemd/issues/4944 + local _cmd='echo a | $(busybox which nc) -U -u -w 1 /run/systemd/nspawn/notify' + systemd-nspawn --register=no -D /nc-container /bin/sh -x -c "$_cmd" + systemd-nspawn --register=no -D /nc-container -U /bin/sh -x -c "$_cmd" +} + +function run { + if [[ "$1" = "yes" && "$is_v2_supported" = "no" ]]; then + printf "Unified cgroup hierarchy is not supported. Skipping.\n" >&2 + return 0 + fi + if [[ "$2" = "yes" && "$is_cgns_supported" = "no" ]]; then + printf "CGroup namespaces are not supported. Skipping.\n" >&2 + return 0 + fi + + local _root="/var/lib/machines/unified-$1-cgns-$2-api-vfs-writable-$3" + /usr/lib/systemd/tests/testdata/create-busybox-container "$_root" + SYSTEMD_NSPAWN_UNIFIED_HIERARCHY="$1" SYSTEMD_NSPAWN_USE_CGNS="$2" SYSTEMD_NSPAWN_API_VFS_WRITABLE="$3" systemd-nspawn --register=no -D "$_root" -b + SYSTEMD_NSPAWN_UNIFIED_HIERARCHY="$1" SYSTEMD_NSPAWN_USE_CGNS="$2" SYSTEMD_NSPAWN_API_VFS_WRITABLE="$3" systemd-nspawn --register=no -D "$_root" --private-network -b + + if SYSTEMD_NSPAWN_UNIFIED_HIERARCHY="$1" SYSTEMD_NSPAWN_USE_CGNS="$2" SYSTEMD_NSPAWN_API_VFS_WRITABLE="$3" systemd-nspawn --register=no -D "$_root" -U -b; then + [[ "$is_user_ns_supported" = "yes" && "$3" = "network" ]] && return 1 + else + [[ "$is_user_ns_supported" = "no" && "$3" = "network" ]] && return 1 + fi + + if SYSTEMD_NSPAWN_UNIFIED_HIERARCHY="$1" SYSTEMD_NSPAWN_USE_CGNS="$2" SYSTEMD_NSPAWN_API_VFS_WRITABLE="$3" systemd-nspawn --register=no -D "$_root" --private-network -U -b; then + [[ "$is_user_ns_supported" = "yes" && "$3" = "yes" ]] && return 1 + else + [[ "$is_user_ns_supported" = "no" && "$3" = "yes" ]] && return 1 + fi + + local _netns_opt="--network-namespace-path=/proc/self/ns/net" + + # --network-namespace-path and network-related options cannot be used together + if SYSTEMD_NSPAWN_UNIFIED_HIERARCHY="$1" SYSTEMD_NSPAWN_USE_CGNS="$2" SYSTEMD_NSPAWN_API_VFS_WRITABLE="$3" systemd-nspawn --register=no -D "$_root" "$_netns_opt" --network-interface=lo -b; then + return 1 + fi + + if SYSTEMD_NSPAWN_UNIFIED_HIERARCHY="$1" SYSTEMD_NSPAWN_USE_CGNS="$2" SYSTEMD_NSPAWN_API_VFS_WRITABLE="$3" systemd-nspawn --register=no -D "$_root" "$_netns_opt" --network-macvlan=lo -b; then + return 1 + fi + + if SYSTEMD_NSPAWN_UNIFIED_HIERARCHY="$1" SYSTEMD_NSPAWN_USE_CGNS="$2" SYSTEMD_NSPAWN_API_VFS_WRITABLE="$3" systemd-nspawn --register=no -D "$_root" "$_netns_opt" --network-ipvlan=lo -b; then + return 1 + fi + + if SYSTEMD_NSPAWN_UNIFIED_HIERARCHY="$1" SYSTEMD_NSPAWN_USE_CGNS="$2" SYSTEMD_NSPAWN_API_VFS_WRITABLE="$3" systemd-nspawn --register=no -D "$_root" "$_netns_opt" --network-veth -b; then + return 1 + fi + + if SYSTEMD_NSPAWN_UNIFIED_HIERARCHY="$1" SYSTEMD_NSPAWN_USE_CGNS="$2" SYSTEMD_NSPAWN_API_VFS_WRITABLE="$3" systemd-nspawn --register=no -D "$_root" "$_netns_opt" --network-veth-extra=lo -b; then + return 1 + fi + + if SYSTEMD_NSPAWN_UNIFIED_HIERARCHY="$1" SYSTEMD_NSPAWN_USE_CGNS="$2" SYSTEMD_NSPAWN_API_VFS_WRITABLE="$3" systemd-nspawn --register=no -D "$_root" "$_netns_opt" --network-bridge=lo -b; then + return 1 + fi + + if SYSTEMD_NSPAWN_UNIFIED_HIERARCHY="$1" SYSTEMD_NSPAWN_USE_CGNS="$2" SYSTEMD_NSPAWN_API_VFS_WRITABLE="$3" systemd-nspawn --register=no -D "$_root" "$_netns_opt" --network-zone=zone -b; then + return 1 + fi + + # allow combination of --network-namespace-path and --private-network + if ! SYSTEMD_NSPAWN_UNIFIED_HIERARCHY="$1" SYSTEMD_NSPAWN_USE_CGNS="$2" SYSTEMD_NSPAWN_API_VFS_WRITABLE="$3" systemd-nspawn --register=no -D "$_root" "$_netns_opt" --private-network -b; then + return 1 + fi + + # test --network-namespace-path works with a network namespace created by "ip netns" + ip netns add nspawn_test + _netns_opt="--network-namespace-path=/run/netns/nspawn_test" + SYSTEMD_NSPAWN_UNIFIED_HIERARCHY="$1" SYSTEMD_NSPAWN_USE_CGNS="$2" SYSTEMD_NSPAWN_API_VFS_WRITABLE="$3" systemd-nspawn --register=no -D "$_root" "$_netns_opt" /bin/ip a | grep -v -E '^1: lo.*UP' + local r=$? + ip netns del nspawn_test + + if [ $r -ne 0 ]; then + return 1 + fi + + return 0 +} + +check_bind_tmp_path + +check_norbind + +check_notification_socket + +for api_vfs_writable in yes no network; do + run no no $api_vfs_writable + run yes no $api_vfs_writable + run no yes $api_vfs_writable + run yes yes $api_vfs_writable +done + +touch /testok From afd9c55dcc801a51a9ce687017f9b88e4f84bd1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Mon, 9 Dec 2019 22:02:06 +0100 Subject: [PATCH 22/78] test: move most of TEST-14-MACHINE-ID setup to static files --- test/TEST-14-MACHINE-ID/test.sh | 58 +-------------------------------- test/units/testsuite-14.service | 7 ++++ test/units/testsuite-14.sh | 38 +++++++++++++++++++++ 3 files changed, 46 insertions(+), 57 deletions(-) create mode 100644 test/units/testsuite-14.service create mode 100755 test/units/testsuite-14.sh diff --git a/test/TEST-14-MACHINE-ID/test.sh b/test/TEST-14-MACHINE-ID/test.sh index 74cabf86aa..caae487134 100755 --- a/test/TEST-14-MACHINE-ID/test.sh +++ b/test/TEST-14-MACHINE-ID/test.sh @@ -16,63 +16,7 @@ test_setup() { setup_basic_environment mask_supporting_services printf "556f48e837bc4424a710fa2e2c9d3e3c\ne3d\n" >$initdir/etc/machine-id - dracut_install mount cmp - - # setup the testsuite service - cat >$initdir/etc/systemd/system/testsuite.service < /failed ; echo OK > /testok' -Type=oneshot -EOF - -cat >$initdir/test-machine-id-setup.sh <<'EOF' -#!/usr/bin/env bash - -set -e -set -x - -function setup_root { - local _root="$1" - mkdir -p "$_root" - mount -t tmpfs tmpfs "$_root" - mkdir -p "$_root/etc" "$_root/run" -} - -function check { - printf "Expected\n" - cat "$1" - printf "\nGot\n" - cat "$2" - cmp "$1" "$2" -} - -r="$(pwd)/overwrite-broken-machine-id" -setup_root "$r" -systemd-machine-id-setup --print --root "$r" -echo abc >>"$r/etc/machine-id" -id=$(systemd-machine-id-setup --print --root "$r") -echo $id >expected -check expected "$r/etc/machine-id" - -r="$(pwd)/transient-machine-id" -setup_root "$r" -systemd-machine-id-setup --print --root "$r" -echo abc >>"$r/etc/machine-id" -mount -o remount,ro "$r" -mount -t tmpfs tmpfs "$r/run" -transient_id=$(systemd-machine-id-setup --print --root "$r") -mount -o remount,rw "$r" -commited_id=$(systemd-machine-id-setup --print --commit --root "$r") -[[ "$transient_id" = "$commited_id" ]] -check "$r/etc/machine-id" "$r/run/machine-id" -EOF -chmod +x $initdir/test-machine-id-setup.sh - - setup_testsuite ) } -do_test "$@" +do_test "$@" 14 diff --git a/test/units/testsuite-14.service b/test/units/testsuite-14.service new file mode 100644 index 0000000000..1fc0da6409 --- /dev/null +++ b/test/units/testsuite-14.service @@ -0,0 +1,7 @@ +[Unit] +Description=TEST-14-MACHINE-ID + +[Service] +ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh +ExecStart=/bin/sh -e -x -c 'systemctl --state=failed --no-legend --no-pager >/failed ; echo OK >/testok' +Type=oneshot diff --git a/test/units/testsuite-14.sh b/test/units/testsuite-14.sh new file mode 100755 index 0000000000..95ac9b65ae --- /dev/null +++ b/test/units/testsuite-14.sh @@ -0,0 +1,38 @@ +#!/usr/bin/env bash +set -e +set -x + +function setup_root { + local _root="$1" + mkdir -p "$_root" + mount -t tmpfs tmpfs "$_root" + mkdir -p "$_root/etc" "$_root/run" +} + +function check { + printf "Expected\n" + cat "$1" + printf "\nGot\n" + cat "$2" + cmp "$1" "$2" +} + +r="$(pwd)/overwrite-broken-machine-id" +setup_root "$r" +systemd-machine-id-setup --print --root "$r" +echo abc >>"$r/etc/machine-id" +id=$(systemd-machine-id-setup --print --root "$r") +echo $id >expected +check expected "$r/etc/machine-id" + +r="$(pwd)/transient-machine-id" +setup_root "$r" +systemd-machine-id-setup --print --root "$r" +echo abc >>"$r/etc/machine-id" +mount -o remount,ro "$r" +mount -t tmpfs tmpfs "$r/run" +transient_id=$(systemd-machine-id-setup --print --root "$r") +mount -o remount,rw "$r" +commited_id=$(systemd-machine-id-setup --print --commit --root "$r") +[[ "$transient_id" = "$commited_id" ]] +check "$r/etc/machine-id" "$r/run/machine-id" From 2c7519c0369a97138ee037aaefd07a993948f454 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Mon, 9 Dec 2019 23:29:18 +0100 Subject: [PATCH 23/78] test: move TEST-15-DROPIN setup to static files Unfortunately the services needed to be renamed because of conflicts with other services that exist in the shared dir. --- test/TEST-15-DROPIN/test.sh | 7 +- test/TEST-15-DROPIN/testsuite.service | 6 - test/units/testsuite-15.service | 6 + .../test-dropin.sh => units/testsuite-15.sh} | 262 +++++++++--------- 4 files changed, 138 insertions(+), 143 deletions(-) delete mode 100644 test/TEST-15-DROPIN/testsuite.service create mode 100644 test/units/testsuite-15.service rename test/{TEST-15-DROPIN/test-dropin.sh => units/testsuite-15.sh} (60%) diff --git a/test/TEST-15-DROPIN/test.sh b/test/TEST-15-DROPIN/test.sh index 63bbd35051..42d6c3dd79 100755 --- a/test/TEST-15-DROPIN/test.sh +++ b/test/TEST-15-DROPIN/test.sh @@ -10,13 +10,8 @@ test_setup() { setup_basic_environment mask_supporting_services - # import the test scripts in the rootfs and plug them in systemd - cp testsuite.service $initdir/etc/systemd/system/ - cp test-dropin.sh $initdir/ - setup_testsuite - # create dedicated rootfs for nspawn (located in $TESTDIR/nspawn-root) setup_nspawn_root } -do_test "$@" +do_test "$@" 15 diff --git a/test/TEST-15-DROPIN/testsuite.service b/test/TEST-15-DROPIN/testsuite.service deleted file mode 100644 index 4c9f65e2b1..0000000000 --- a/test/TEST-15-DROPIN/testsuite.service +++ /dev/null @@ -1,6 +0,0 @@ -[Unit] -Description=Testsuite service - -[Service] -ExecStart=/test-dropin.sh -Type=oneshot diff --git a/test/units/testsuite-15.service b/test/units/testsuite-15.service new file mode 100644 index 0000000000..2d07bd6943 --- /dev/null +++ b/test/units/testsuite-15.service @@ -0,0 +1,6 @@ +[Unit] +Description=TEST-15-DROPIN + +[Service] +ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh +Type=oneshot diff --git a/test/TEST-15-DROPIN/test-dropin.sh b/test/units/testsuite-15.sh similarity index 60% rename from test/TEST-15-DROPIN/test-dropin.sh rename to test/units/testsuite-15.sh index f80c9df107..c1d640a31c 100755 --- a/test/TEST-15-DROPIN/test-dropin.sh +++ b/test/units/testsuite-15.sh @@ -56,65 +56,65 @@ test_basic_dropins () { echo "Testing basic dropins..." echo "*** test a wants b wants c" - create_services a b c - ln -s ../b.service /etc/systemd/system/a.service.wants/ - ln -s ../c.service /etc/systemd/system/b.service.wants/ - check_ok a Wants b.service - check_ok b Wants c.service + create_services test15-a test15-b test15-c + ln -s ../test15-b.service /etc/systemd/system/test15-a.service.wants/ + ln -s ../test15-c.service /etc/systemd/system/test15-b.service.wants/ + check_ok test15-a Wants test15-b.service + check_ok test15-b Wants test15-c.service echo "*** test a wants,requires b" - create_services a b c - ln -s ../b.service /etc/systemd/system/a.service.wants/ - ln -s ../b.service /etc/systemd/system/a.service.requires/ - check_ok a Wants b.service - check_ok a Requires b.service + create_services test15-a test15-b test15-c + ln -s ../test15-b.service /etc/systemd/system/test15-a.service.wants/ + ln -s ../test15-b.service /etc/systemd/system/test15-a.service.requires/ + check_ok test15-a Wants test15-b.service + check_ok test15-a Requires test15-b.service echo "*** test a wants nonexistent" - create_service a - ln -s ../nonexistent.service /etc/systemd/system/a.service.wants/ - check_ok a Wants nonexistent.service - systemctl start a - systemctl stop a + create_service test15-a + ln -s ../nonexistent.service /etc/systemd/system/test15-a.service.wants/ + check_ok test15-a Wants nonexistent.service + systemctl start test15-a + systemctl stop test15-a echo "*** test a requires nonexistent" - ln -sf ../nonexistent.service /etc/systemd/system/a.service.requires/ + ln -sf ../nonexistent.service /etc/systemd/system/test15-a.service.requires/ systemctl daemon-reload - check_ok a Requires nonexistent.service + check_ok test15-a Requires nonexistent.service # 'b' is already loaded when 'c' pulls it in via a dropin. echo "*** test a,c require b" - create_services a b c - ln -sf ../b.service /etc/systemd/system/a.service.requires/ - ln -sf ../b.service /etc/systemd/system/c.service.requires/ - systemctl start a - check_ok c Requires b.service - systemctl stop a b + create_services test15-a test15-b test15-c + ln -sf ../test15-b.service /etc/systemd/system/test15-a.service.requires/ + ln -sf ../test15-b.service /etc/systemd/system/test15-c.service.requires/ + systemctl start test15-a + check_ok test15-c Requires test15-b.service + systemctl stop test15-a test15-b # 'b' is already loaded when 'c' pulls it in via an alias dropin. echo "*** test a wants alias" - create_services a b c - ln -sf c.service /etc/systemd/system/c1.service - ln -sf ../c.service /etc/systemd/system/a.service.wants/ - ln -sf ../c1.service /etc/systemd/system/b.service.wants/ - systemctl start a - check_ok a Wants c.service - check_ok b Wants c.service - systemctl stop a c + create_services test15-a test15-b test15-c + ln -sf test15-c.service /etc/systemd/system/test15-c1.service + ln -sf ../test15-c.service /etc/systemd/system/test15-a.service.wants/ + ln -sf ../test15-c1.service /etc/systemd/system/test15-b.service.wants/ + systemctl start test15-a + check_ok test15-a Wants test15-c.service + check_ok test15-b Wants test15-c.service + systemctl stop test15-a test15-c echo "*** test service.d/ top level drop-in" - create_services a b - check_ko a ExecCondition "/bin/echo a" - check_ko b ExecCondition "/bin/echo b" + create_services test15-a test15-b + check_ko test15-a ExecCondition "/bin/echo a" + check_ko test15-b ExecCondition "/bin/echo b" mkdir -p /usr/lib/systemd/system/service.d cat >/usr/lib/systemd/system/service.d/override.conf </usr/lib/systemd/system/a.service.d/override.conf </usr/lib/systemd/system/test15-a.service.d/override.conf </usr/lib/systemd/system/a.service.d/wants-b.conf</usr/lib/systemd/system/test15-a.service.d/wants-b.conf< Date: Sat, 21 Mar 2020 16:30:27 +0100 Subject: [PATCH 24/78] test/TEST-15: remove all created unit files We would miss anything created under a template instance. --- test/units/testsuite-15.sh | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/test/units/testsuite-15.sh b/test/units/testsuite-15.sh index c1d640a31c..b09b6a1283 100755 --- a/test/units/testsuite-15.sh +++ b/test/units/testsuite-15.sh @@ -7,6 +7,12 @@ _clear_service () { rm -f /{etc,run,usr/lib}/systemd/system/$1.service rm -fr /{etc,run,usr/lib}/systemd/system/$1.service.d rm -fr /{etc,run,usr/lib}/systemd/system/$1.service.{wants,requires} + if [[ $1 == *@ ]]; then + systemctl stop $1*.service 2>/dev/null || : + rm -f /{etc,run,usr/lib}/systemd/system/$1*.service + rm -fr /{etc,run,usr/lib}/systemd/system/$1*.service.d + rm -fr /{etc,run,usr/lib}/systemd/system/$1*.service.{wants,requires} + fi } clear_services () { From 1aa0f3849118e234dfbb546b7d656b6a136aa2b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Sat, 21 Mar 2020 17:01:09 +0100 Subject: [PATCH 25/78] test/TEST-15: call daemon-reload in two more places Sometimes the test would fail there, nondeterministically. I'm not sure why, but relying on PID1 not caching the file is clearly very brittle. Let's instead call daemon-reload. --- test/units/testsuite-15.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/units/testsuite-15.sh b/test/units/testsuite-15.sh index b09b6a1283..b872a24c20 100755 --- a/test/units/testsuite-15.sh +++ b/test/units/testsuite-15.sh @@ -116,6 +116,7 @@ test_basic_dropins () { [Service] ExecCondition=/bin/echo %n EOF + systemctl daemon-reload check_ok test15-a ExecCondition "/bin/echo test15-a" check_ok test15-b ExecCondition "/bin/echo test15-b" rm -rf /usr/lib/systemd/system/service.d @@ -138,6 +139,7 @@ test_hierarchical_dropins () { [Service] ExecCondition=/bin/echo $dropin " > /usr/lib/systemd/system/$dropin/override.conf + systemctl daemon-reload check_ok a-b-c ExecCondition "/bin/echo $dropin" done for dropin in service.d a-.service.d a-b-.service.d a-b-c.service.d; do From 2b5981b40a43c21a8b10ab87106e7af67b4f7175 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Tue, 10 Dec 2019 08:16:40 +0100 Subject: [PATCH 26/78] test: move TEST-16-EXTEND-TIMEOUT setup to static files --- test/TEST-16-EXTEND-TIMEOUT/test.sh | 14 +------------- test/TEST-16-EXTEND-TIMEOUT/testsuite.service | 18 ------------------ test/meson.build | 2 ++ .../extend-timeout.sh} | 0 .../fail-runtime.service} | 4 +--- .../fail-start.service} | 3 +-- .../fail-stop.service} | 4 +--- .../success-all.service} | 3 +-- .../success-runtime.service} | 3 +-- .../success-start.service} | 4 +--- .../success-stop.service} | 4 +--- test/units/testsuite-16.service | 18 ++++++++++++++++++ .../assess.sh => units/testsuite-16.sh} | 2 +- 13 files changed, 29 insertions(+), 50 deletions(-) delete mode 100644 test/TEST-16-EXTEND-TIMEOUT/testsuite.service rename test/{TEST-16-EXTEND-TIMEOUT/extend_timeout_test_service.sh => testsuite-16.units/extend-timeout.sh} (100%) rename test/{TEST-16-EXTEND-TIMEOUT/testsuite-fail-runtime.service => testsuite-16.units/fail-runtime.service} (68%) rename test/{TEST-16-EXTEND-TIMEOUT/testsuite-fail-start.service => testsuite-16.units/fail-start.service} (68%) rename test/{TEST-16-EXTEND-TIMEOUT/testsuite-fail-stop.service => testsuite-16.units/fail-stop.service} (79%) rename test/{TEST-16-EXTEND-TIMEOUT/testsuite-success-all.service => testsuite-16.units/success-all.service} (69%) rename test/{TEST-16-EXTEND-TIMEOUT/testsuite-success-runtime.service => testsuite-16.units/success-runtime.service} (62%) rename test/{TEST-16-EXTEND-TIMEOUT/testsuite-success-start.service => testsuite-16.units/success-start.service} (63%) rename test/{TEST-16-EXTEND-TIMEOUT/testsuite-success-stop.service => testsuite-16.units/success-stop.service} (63%) create mode 100644 test/units/testsuite-16.service rename test/{TEST-16-EXTEND-TIMEOUT/assess.sh => units/testsuite-16.sh} (94%) diff --git a/test/TEST-16-EXTEND-TIMEOUT/test.sh b/test/TEST-16-EXTEND-TIMEOUT/test.sh index 43d9f1278b..474b9db2fc 100755 --- a/test/TEST-16-EXTEND-TIMEOUT/test.sh +++ b/test/TEST-16-EXTEND-TIMEOUT/test.sh @@ -15,21 +15,9 @@ test_setup() { setup_basic_environment mask_supporting_services - - for s in success-all success-start success-stop success-runtime \ - fail-start fail-stop fail-runtime - do - cp testsuite-${s}.service ${initdir}/etc/systemd/system - done - cp testsuite.service ${initdir}/etc/systemd/system - - cp extend_timeout_test_service.sh ${initdir}/ - cp assess.sh ${initdir}/ - - setup_testsuite ) setup_nspawn_root } -do_test "$@" +do_test "$@" 16 diff --git a/test/TEST-16-EXTEND-TIMEOUT/testsuite.service b/test/TEST-16-EXTEND-TIMEOUT/testsuite.service deleted file mode 100644 index 7512ba9e12..0000000000 --- a/test/TEST-16-EXTEND-TIMEOUT/testsuite.service +++ /dev/null @@ -1,18 +0,0 @@ - -[Unit] -Description=Testsuite: Assess all other testsuite-*.services worked as expected - -Wants=testsuite-success-all.service -Wants=testsuite-success-start.service -Wants=testsuite-success-runtime.service -Wants=testsuite-success-stop.service -Wants=testsuite-fail-start.service -Wants=testsuite-fail-stop.service -Wants=testsuite-fail-runtime.service -StopWhenUnneeded=yes - -[Service] -Type=simple -TimeoutStartSec=infinity -ExecStartPre=/assess.sh -ExecStart=/bin/true diff --git a/test/meson.build b/test/meson.build index 61e0aee13f..6fea0fc93d 100644 --- a/test/meson.build +++ b/test/meson.build @@ -20,6 +20,8 @@ install_subdir('testsuite-10.units', install_dir : testdata_dir) install_subdir('testsuite-11.units', install_dir : testdata_dir) +install_subdir('testsuite-16.units', + install_dir : testdata_dir) testsuite08_dir = testdata_dir + '/testsuite-08.units' install_data('testsuite-08.units/-.mount', diff --git a/test/TEST-16-EXTEND-TIMEOUT/extend_timeout_test_service.sh b/test/testsuite-16.units/extend-timeout.sh similarity index 100% rename from test/TEST-16-EXTEND-TIMEOUT/extend_timeout_test_service.sh rename to test/testsuite-16.units/extend-timeout.sh diff --git a/test/TEST-16-EXTEND-TIMEOUT/testsuite-fail-runtime.service b/test/testsuite-16.units/fail-runtime.service similarity index 68% rename from test/TEST-16-EXTEND-TIMEOUT/testsuite-fail-runtime.service rename to test/testsuite-16.units/fail-runtime.service index e0b9f6a70b..06417f7133 100644 --- a/test/TEST-16-EXTEND-TIMEOUT/testsuite-fail-runtime.service +++ b/test/testsuite-16.units/fail-runtime.service @@ -1,13 +1,11 @@ - [Unit] Description=Testsuite: Fail Runtime (EXTEND_TIMEOUT_USEC Didn't occur in sufficient time after RuntimeSecMax.) [Service] - # EXTEND_TIMEOUT_USEC on runtime start (0) and 7 seconds after. Systemd will expect one at 7+5 (extend_timeout_interval) # seconds this won't happen until 7 + 7 (sleep interval) seconds. Therefore timeout at 12 seconds. Type=notify TimeoutStartSec=4 TimeoutStopSec=4 RuntimeMaxSec=10 -ExecStart=/extend_timeout_test_service.sh SERVICE=fail_runtime extend_timeout_interval=5 sleep_interval=7 start_intervals=0 run_intervals=2 stop_intervals=0 +ExecStart=/usr/lib/systemd/tests/testdata/testsuite-16.units/extend-timeout.sh SERVICE=fail_runtime extend_timeout_interval=5 sleep_interval=7 start_intervals=0 run_intervals=2 stop_intervals=0 diff --git a/test/TEST-16-EXTEND-TIMEOUT/testsuite-fail-start.service b/test/testsuite-16.units/fail-start.service similarity index 68% rename from test/TEST-16-EXTEND-TIMEOUT/testsuite-fail-start.service rename to test/testsuite-16.units/fail-start.service index c3fcf23dc0..95e9b01d12 100644 --- a/test/TEST-16-EXTEND-TIMEOUT/testsuite-fail-start.service +++ b/test/testsuite-16.units/fail-start.service @@ -1,4 +1,3 @@ - [Unit] Description=Testsuite: Fail Start (EXTEND_TIMEOUT_USEC Didn't occur in sufficient time after TimeoutStartSec.) @@ -10,4 +9,4 @@ Type=notify TimeoutStartSec=10 TimeoutStopSec=4 RuntimeMaxSec=4 -ExecStart=/extend_timeout_test_service.sh SERVICE=fail_start extend_timeout_interval=5 sleep_interval=7 start_intervals=2 run_intervals=0 stop_intervals=0 +ExecStart=/usr/lib/systemd/tests/testdata/testsuite-16.units/extend-timeout.sh SERVICE=fail_start extend_timeout_interval=5 sleep_interval=7 start_intervals=2 run_intervals=0 stop_intervals=0 diff --git a/test/TEST-16-EXTEND-TIMEOUT/testsuite-fail-stop.service b/test/testsuite-16.units/fail-stop.service similarity index 79% rename from test/TEST-16-EXTEND-TIMEOUT/testsuite-fail-stop.service rename to test/testsuite-16.units/fail-stop.service index ce76d10db7..7fc66003a4 100644 --- a/test/TEST-16-EXTEND-TIMEOUT/testsuite-fail-stop.service +++ b/test/testsuite-16.units/fail-stop.service @@ -1,16 +1,14 @@ - [Unit] Description=Testsuite: Fail Stop (EXTEND_TIMEOUT_USEC Didn't occur in sufficient time after TimeoutStopSec.) [Service] - # EXTEND_TIMEOUT_USEC on stop (0) and 7 seconds after. Systemd will expect one at 7+5 (extend_timeout_interval) # seconds this won't happen until 7 + 7 (sleep interval) seconds. Therefore timeout at 12 seconds. Type=notify TimeoutStartSec=4 TimeoutStopSec=10 RuntimeMaxSec=4 -ExecStart=/extend_timeout_test_service.sh SERVICE=fail_stop extend_timeout_interval=5 sleep_interval=7 start_intervals=0 run_intervals=0 stop_intervals=2 +ExecStart=/usr/lib/systemd/tests/testdata/testsuite-16.units/extend-timeout.sh SERVICE=fail_stop extend_timeout_interval=5 sleep_interval=7 start_intervals=0 run_intervals=0 stop_intervals=2 # Due to 6041a7ee2c1bbff6301082f192fc1b0882400d42 SIGTERM isn't sent as the service shuts down with STOPPING=1 # This file makes the test assess.sh quicker by notifing it that this test has finished. ExecStopPost=/bin/bash -c '[[ $SERVICE_RESULT == timeout && $EXIT_CODE == killed ]] && touch /fail_runtime.terminated' diff --git a/test/TEST-16-EXTEND-TIMEOUT/testsuite-success-all.service b/test/testsuite-16.units/success-all.service similarity index 69% rename from test/TEST-16-EXTEND-TIMEOUT/testsuite-success-all.service rename to test/testsuite-16.units/success-all.service index 666f4229bf..c30ee78dfa 100644 --- a/test/TEST-16-EXTEND-TIMEOUT/testsuite-success-all.service +++ b/test/testsuite-16.units/success-all.service @@ -1,4 +1,3 @@ - [Unit] Description=Testsuite: EXTEND_TIMEOUT_USEC Success - extend timeout on all services @@ -11,4 +10,4 @@ Type=notify TimeoutStartSec=4 TimeoutStopSec=4 RuntimeMaxSec=4 -ExecStart=/extend_timeout_test_service.sh SERVICE=success_all extend_timeout_interval=4 sleep_interval=2 start_intervals=3 run_intervals=3 stop_intervals=3 +ExecStart=/usr/lib/systemd/tests/testdata/testsuite-16.units/extend-timeout.sh SERVICE=success_all extend_timeout_interval=4 sleep_interval=2 start_intervals=3 run_intervals=3 stop_intervals=3 diff --git a/test/TEST-16-EXTEND-TIMEOUT/testsuite-success-runtime.service b/test/testsuite-16.units/success-runtime.service similarity index 62% rename from test/TEST-16-EXTEND-TIMEOUT/testsuite-success-runtime.service rename to test/testsuite-16.units/success-runtime.service index dc226f5054..8f83cdb4a1 100644 --- a/test/TEST-16-EXTEND-TIMEOUT/testsuite-success-runtime.service +++ b/test/testsuite-16.units/success-runtime.service @@ -1,4 +1,3 @@ - [Unit] Description=Testsuite: Success Runtime (EXTEND_TIMEOUT_USEC > WATCHDOG_USEC however < RuntimeMaxSec) @@ -10,4 +9,4 @@ Type=notify TimeoutStartSec=4 TimeoutStopSec=4 RuntimeMaxSec=8 -ExecStart=/extend_timeout_test_service.sh SERVICE=success_runtime extend_timeout_interval=4 sleep_interval=6 start_intervals=0 run_intervals=1 stop_intervals=0 +ExecStart=/usr/lib/systemd/tests/testdata/testsuite-16.units/extend-timeout.sh SERVICE=success_runtime extend_timeout_interval=4 sleep_interval=6 start_intervals=0 run_intervals=1 stop_intervals=0 diff --git a/test/TEST-16-EXTEND-TIMEOUT/testsuite-success-start.service b/test/testsuite-16.units/success-start.service similarity index 63% rename from test/TEST-16-EXTEND-TIMEOUT/testsuite-success-start.service rename to test/testsuite-16.units/success-start.service index 228eece73e..26c74390c0 100644 --- a/test/TEST-16-EXTEND-TIMEOUT/testsuite-success-start.service +++ b/test/testsuite-16.units/success-start.service @@ -1,13 +1,11 @@ - [Unit] Description=Testsuite: Success Start (EXTEND_TIMEOUT_USEC > WATCHDOG_USEC however < TimeoutStartSec) [Service] - # EXTEND_TIMEOUT_USEC=4 second interval once at startup, but sleep 6 seconds. # Therefore startup is 6 seconds and < TimeoutStartSec so still successful. Type=notify TimeoutStartSec=8 TimeoutStopSec=4 RuntimeMaxSec=4 -ExecStart=/extend_timeout_test_service.sh SERVICE=success_start extend_timeout_interval=4 sleep_interval=6 start_intervals=1 run_intervals=0 stop_intervals=0 +ExecStart=/usr/lib/systemd/tests/testdata/testsuite-16.units/extend-timeout.sh SERVICE=success_start extend_timeout_interval=4 sleep_interval=6 start_intervals=1 run_intervals=0 stop_intervals=0 diff --git a/test/TEST-16-EXTEND-TIMEOUT/testsuite-success-stop.service b/test/testsuite-16.units/success-stop.service similarity index 63% rename from test/TEST-16-EXTEND-TIMEOUT/testsuite-success-stop.service rename to test/testsuite-16.units/success-stop.service index b809397bf3..b20908ad75 100644 --- a/test/TEST-16-EXTEND-TIMEOUT/testsuite-success-stop.service +++ b/test/testsuite-16.units/success-stop.service @@ -1,13 +1,11 @@ - [Unit] Description=Testsuite: Success Stop (EXTEND_TIMEOUT_USEC > WATCHDOG_USEC however < TimeoutStopSec) [Service] - # EXTEND_TIMEOUT_USEC=4 seconds once during shutdown, but sleep for 6 seconds. # Therefore stop time is 6 seconds and < TimeoutStopSec so still successful. Type=notify TimeoutStartSec=4 TimeoutStopSec=8 RuntimeMaxSec=4 -ExecStart=/extend_timeout_test_service.sh SERVICE=success_stop extend_timeout_interval=4 sleep_interval=6 start_intervals=0 run_intervals=0 stop_intervals=1 +ExecStart=/usr/lib/systemd/tests/testdata/testsuite-16.units/extend-timeout.sh SERVICE=success_stop extend_timeout_interval=4 sleep_interval=6 start_intervals=0 run_intervals=0 stop_intervals=1 diff --git a/test/units/testsuite-16.service b/test/units/testsuite-16.service new file mode 100644 index 0000000000..1ebf3d3af6 --- /dev/null +++ b/test/units/testsuite-16.service @@ -0,0 +1,18 @@ +[Unit] +Description=TEST-16-EXTEND-TIMEOUT +# Testsuite: Assess all other testsuite-*.services worked as expected + +Wants=success-all.service +Wants=success-start.service +Wants=success-runtime.service +Wants=success-stop.service +Wants=fail-start.service +Wants=fail-stop.service +Wants=fail-runtime.service +StopWhenUnneeded=yes + +[Service] +Type=simple +TimeoutStartSec=infinity +ExecStartPre=/usr/lib/systemd/tests/testdata/units/%N.sh +ExecStart=true diff --git a/test/TEST-16-EXTEND-TIMEOUT/assess.sh b/test/units/testsuite-16.sh similarity index 94% rename from test/TEST-16-EXTEND-TIMEOUT/assess.sh rename to test/units/testsuite-16.sh index 6f98810b30..68e5561245 100755 --- a/test/TEST-16-EXTEND-TIMEOUT/assess.sh +++ b/test/units/testsuite-16.sh @@ -19,7 +19,7 @@ function wait_for() if [[ ! -f /${service}.${result} ]] then - journalctl -u testsuite-${service/_/-}.service >> "${TL}" + journalctl -u ${service/_/-}.service >> "${TL}" fi } From e5b0aaaf569e6f6c64b2ede7aff0a72a949a2b6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Thu, 12 Dec 2019 21:06:58 +0100 Subject: [PATCH 27/78] test/TEST-16: simplify how variables are set The amount of lines doesn't change much, but I think it's much more straightforward this way. --- test/testsuite-16.units/extend-timeout.sh | 18 +++++------------- test/testsuite-16.units/fail-runtime.service | 3 ++- test/testsuite-16.units/fail-start.service | 3 ++- test/testsuite-16.units/fail-stop.service | 3 ++- test/testsuite-16.units/success-all.service | 3 ++- .../testsuite-16.units/success-runtime.service | 3 ++- test/testsuite-16.units/success-start.service | 3 ++- test/testsuite-16.units/success-stop.service | 3 ++- 8 files changed, 19 insertions(+), 20 deletions(-) diff --git a/test/testsuite-16.units/extend-timeout.sh b/test/testsuite-16.units/extend-timeout.sh index 40bf046dcd..ed1af8afeb 100755 --- a/test/testsuite-16.units/extend-timeout.sh +++ b/test/testsuite-16.units/extend-timeout.sh @@ -4,23 +4,15 @@ set -e set -o pipefail # sleep interval (seconds) -sleep_interval=1 +: ${sleep_interval:=1} # extend_timeout_interval second(s) -extend_timeout_interval=1 +: ${extend_timeout_interval:=1} # number of sleep_intervals before READY=1 -start_intervals=10 +: ${start_intervals:=10} # number of sleep_intervals before exiting -stop_intervals=10 +: ${stop_intervals:=10} # run intervals, number of sleep_intervals to run -run_intervals=7 -# service name -SERVICE=unknown - -while [ $# -gt 0 ]; -do - eval ${1%=*}=${1#*=} - shift -done +: ${run_intervals:=7} # We convert to usec extend_timeout_interval=$(( $extend_timeout_interval * 1000000 )) diff --git a/test/testsuite-16.units/fail-runtime.service b/test/testsuite-16.units/fail-runtime.service index 06417f7133..baa655f2f1 100644 --- a/test/testsuite-16.units/fail-runtime.service +++ b/test/testsuite-16.units/fail-runtime.service @@ -8,4 +8,5 @@ Type=notify TimeoutStartSec=4 TimeoutStopSec=4 RuntimeMaxSec=10 -ExecStart=/usr/lib/systemd/tests/testdata/testsuite-16.units/extend-timeout.sh SERVICE=fail_runtime extend_timeout_interval=5 sleep_interval=7 start_intervals=0 run_intervals=2 stop_intervals=0 +Environment=SERVICE=fail_runtime extend_timeout_interval=5 sleep_interval=7 start_intervals=0 run_intervals=2 stop_intervals=0 +ExecStart=/usr/lib/systemd/tests/testdata/testsuite-16.units/extend-timeout.sh diff --git a/test/testsuite-16.units/fail-start.service b/test/testsuite-16.units/fail-start.service index 95e9b01d12..882900440f 100644 --- a/test/testsuite-16.units/fail-start.service +++ b/test/testsuite-16.units/fail-start.service @@ -9,4 +9,5 @@ Type=notify TimeoutStartSec=10 TimeoutStopSec=4 RuntimeMaxSec=4 -ExecStart=/usr/lib/systemd/tests/testdata/testsuite-16.units/extend-timeout.sh SERVICE=fail_start extend_timeout_interval=5 sleep_interval=7 start_intervals=2 run_intervals=0 stop_intervals=0 +Environment=SERVICE=fail_start extend_timeout_interval=5 sleep_interval=7 start_intervals=2 run_intervals=0 stop_intervals=0 +ExecStart=/usr/lib/systemd/tests/testdata/testsuite-16.units/extend-timeout.sh diff --git a/test/testsuite-16.units/fail-stop.service b/test/testsuite-16.units/fail-stop.service index 7fc66003a4..cdea2a9a2d 100644 --- a/test/testsuite-16.units/fail-stop.service +++ b/test/testsuite-16.units/fail-stop.service @@ -8,7 +8,8 @@ Type=notify TimeoutStartSec=4 TimeoutStopSec=10 RuntimeMaxSec=4 -ExecStart=/usr/lib/systemd/tests/testdata/testsuite-16.units/extend-timeout.sh SERVICE=fail_stop extend_timeout_interval=5 sleep_interval=7 start_intervals=0 run_intervals=0 stop_intervals=2 +Environment=SERVICE=fail_stop extend_timeout_interval=5 sleep_interval=7 start_intervals=0 run_intervals=0 stop_intervals=2 +ExecStart=/usr/lib/systemd/tests/testdata/testsuite-16.units/extend-timeout.sh # Due to 6041a7ee2c1bbff6301082f192fc1b0882400d42 SIGTERM isn't sent as the service shuts down with STOPPING=1 # This file makes the test assess.sh quicker by notifing it that this test has finished. ExecStopPost=/bin/bash -c '[[ $SERVICE_RESULT == timeout && $EXIT_CODE == killed ]] && touch /fail_runtime.terminated' diff --git a/test/testsuite-16.units/success-all.service b/test/testsuite-16.units/success-all.service index c30ee78dfa..e2d7e607ba 100644 --- a/test/testsuite-16.units/success-all.service +++ b/test/testsuite-16.units/success-all.service @@ -10,4 +10,5 @@ Type=notify TimeoutStartSec=4 TimeoutStopSec=4 RuntimeMaxSec=4 -ExecStart=/usr/lib/systemd/tests/testdata/testsuite-16.units/extend-timeout.sh SERVICE=success_all extend_timeout_interval=4 sleep_interval=2 start_intervals=3 run_intervals=3 stop_intervals=3 +Environment=SERVICE=success_all extend_timeout_interval=4 sleep_interval=2 start_intervals=3 run_intervals=3 stop_intervals=3 +ExecStart=/usr/lib/systemd/tests/testdata/testsuite-16.units/extend-timeout.sh diff --git a/test/testsuite-16.units/success-runtime.service b/test/testsuite-16.units/success-runtime.service index 8f83cdb4a1..15283b73a8 100644 --- a/test/testsuite-16.units/success-runtime.service +++ b/test/testsuite-16.units/success-runtime.service @@ -9,4 +9,5 @@ Type=notify TimeoutStartSec=4 TimeoutStopSec=4 RuntimeMaxSec=8 -ExecStart=/usr/lib/systemd/tests/testdata/testsuite-16.units/extend-timeout.sh SERVICE=success_runtime extend_timeout_interval=4 sleep_interval=6 start_intervals=0 run_intervals=1 stop_intervals=0 +Environment=SERVICE=success_runtime extend_timeout_interval=4 sleep_interval=6 start_intervals=0 run_intervals=1 stop_intervals=0 +ExecStart=/usr/lib/systemd/tests/testdata/testsuite-16.units/extend-timeout.sh diff --git a/test/testsuite-16.units/success-start.service b/test/testsuite-16.units/success-start.service index 26c74390c0..cfdcc33cc8 100644 --- a/test/testsuite-16.units/success-start.service +++ b/test/testsuite-16.units/success-start.service @@ -8,4 +8,5 @@ Type=notify TimeoutStartSec=8 TimeoutStopSec=4 RuntimeMaxSec=4 -ExecStart=/usr/lib/systemd/tests/testdata/testsuite-16.units/extend-timeout.sh SERVICE=success_start extend_timeout_interval=4 sleep_interval=6 start_intervals=1 run_intervals=0 stop_intervals=0 +Environment=SERVICE=success_start extend_timeout_interval=4 sleep_interval=6 start_intervals=1 run_intervals=0 stop_intervals=0 +ExecStart=/usr/lib/systemd/tests/testdata/testsuite-16.units/extend-timeout.sh diff --git a/test/testsuite-16.units/success-stop.service b/test/testsuite-16.units/success-stop.service index b20908ad75..c4600ace41 100644 --- a/test/testsuite-16.units/success-stop.service +++ b/test/testsuite-16.units/success-stop.service @@ -8,4 +8,5 @@ Type=notify TimeoutStartSec=4 TimeoutStopSec=8 RuntimeMaxSec=4 -ExecStart=/usr/lib/systemd/tests/testdata/testsuite-16.units/extend-timeout.sh SERVICE=success_stop extend_timeout_interval=4 sleep_interval=6 start_intervals=0 run_intervals=0 stop_intervals=1 +Environment=SERVICE=success_stop extend_timeout_interval=4 sleep_interval=6 start_intervals=0 run_intervals=0 stop_intervals=1 +ExecStart=/usr/lib/systemd/tests/testdata/testsuite-16.units/extend-timeout.sh From 9911131a606ebb19710b8fe5c18bb9bc939d02cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Tue, 10 Dec 2019 08:21:02 +0100 Subject: [PATCH 28/78] test: move TEST-17-WANTS setup to static files --- test/TEST-17-UDEV-WANTS/test.sh | 15 +-------------- test/units/testsuite-17.service | 6 ++++++ .../testsuite.sh => units/testsuite-17.sh} | 2 +- 3 files changed, 8 insertions(+), 15 deletions(-) create mode 100644 test/units/testsuite-17.service rename test/{TEST-17-UDEV-WANTS/testsuite.sh => units/testsuite-17.sh} (99%) diff --git a/test/TEST-17-UDEV-WANTS/test.sh b/test/TEST-17-UDEV-WANTS/test.sh index e196003e80..a5a2eb3d29 100755 --- a/test/TEST-17-UDEV-WANTS/test.sh +++ b/test/TEST-17-UDEV-WANTS/test.sh @@ -15,20 +15,7 @@ test_setup() { setup_basic_environment mask_supporting_services - - # setup the testsuite service - cat >$initdir/etc/systemd/system/testsuite.service < /testok +echo OK >/testok exit 0 From dce2b8ce48252b0f0f3351474ebd78e7d9419e2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Tue, 10 Dec 2019 08:27:33 +0100 Subject: [PATCH 29/78] test: move TEST-18-FAILUREACTION setup to static files --- test/TEST-18-FAILUREACTION/test.sh | 15 +-------------- test/units/testsuite-18.service | 6 ++++++ .../testsuite.sh => units/testsuite-18.sh} | 0 3 files changed, 7 insertions(+), 14 deletions(-) create mode 100644 test/units/testsuite-18.service rename test/{TEST-18-FAILUREACTION/testsuite.sh => units/testsuite-18.sh} (100%) diff --git a/test/TEST-18-FAILUREACTION/test.sh b/test/TEST-18-FAILUREACTION/test.sh index b6231e6f5a..a9315466f9 100755 --- a/test/TEST-18-FAILUREACTION/test.sh +++ b/test/TEST-18-FAILUREACTION/test.sh @@ -14,22 +14,9 @@ test_setup() { setup_basic_environment mask_supporting_services - - # setup the testsuite service - cat >$initdir/etc/systemd/system/testsuite.service < Date: Tue, 10 Dec 2019 08:29:43 +0100 Subject: [PATCH 30/78] test: move TEST-19-DELEGATE setup to static files --- test/TEST-19-DELEGATE/test.sh | 15 +-------------- test/units/testsuite-19.service | 6 ++++++ .../testsuite.sh => units/testsuite-19.sh} | 0 3 files changed, 7 insertions(+), 14 deletions(-) create mode 100644 test/units/testsuite-19.service rename test/{TEST-19-DELEGATE/testsuite.sh => units/testsuite-19.sh} (100%) diff --git a/test/TEST-19-DELEGATE/test.sh b/test/TEST-19-DELEGATE/test.sh index 2fbfef3062..872df15615 100755 --- a/test/TEST-19-DELEGATE/test.sh +++ b/test/TEST-19-DELEGATE/test.sh @@ -16,20 +16,7 @@ test_setup() { setup_basic_environment mask_supporting_services - - # setup the testsuite service - cat >$initdir/etc/systemd/system/testsuite.service < Date: Tue, 10 Dec 2019 08:32:28 +0100 Subject: [PATCH 31/78] test: move TEST-20-MAINPIDGAMES setup to static files --- test/TEST-20-MAINPIDGAMES/test.sh | 18 +------ test/units/testsuite-20.service | 9 ++++ .../testsuite.sh => units/testsuite-20.sh} | 48 +++++++++---------- 3 files changed, 34 insertions(+), 41 deletions(-) create mode 100644 test/units/testsuite-20.service rename test/{TEST-20-MAINPIDGAMES/testsuite.sh => units/testsuite-20.sh} (56%) diff --git a/test/TEST-20-MAINPIDGAMES/test.sh b/test/TEST-20-MAINPIDGAMES/test.sh index 4cf1b79f9a..d6abbadb2b 100755 --- a/test/TEST-20-MAINPIDGAMES/test.sh +++ b/test/TEST-20-MAINPIDGAMES/test.sh @@ -13,25 +13,9 @@ test_setup() { setup_basic_environment mask_supporting_services - - # setup the testsuite service - cat >$initdir/etc/systemd/system/testsuite.service </tmp/mainpid.sh </tmp/test20-mainpid.sh < /run/mainpidsh/pid EOF -chmod +x /tmp/mainpid.sh +chmod +x /tmp/test20-mainpid.sh -systemd-run --unit=mainpidsh.service -p StandardOutput=tty -p StandardError=tty -p Type=forking -p RuntimeDirectory=mainpidsh -p PIDFile=/run/mainpidsh/pid /tmp/mainpid.sh -test `systemctl show -p MainPID --value mainpidsh.service` -eq `cat /run/mainpidsh/pid` +systemd-run --unit=test20-mainpidsh.service -p StandardOutput=tty -p StandardError=tty -p Type=forking -p RuntimeDirectory=mainpidsh -p PIDFile=/run/mainpidsh/pid /tmp/test20-mainpid.sh +test `systemctl show -p MainPID --value test20-mainpidsh.service` -eq `cat /run/mainpidsh/pid` -cat >/tmp/mainpid2.sh </tmp/test20-mainpid2.sh < /run/mainpidsh2/pid chown 1001:1001 /run/mainpidsh2/pid EOF -chmod +x /tmp/mainpid2.sh +chmod +x /tmp/test20-mainpid2.sh -systemd-run --unit=mainpidsh2.service -p StandardOutput=tty -p StandardError=tty -p Type=forking -p RuntimeDirectory=mainpidsh2 -p PIDFile=/run/mainpidsh2/pid /tmp/mainpid2.sh -test `systemctl show -p MainPID --value mainpidsh2.service` -eq `cat /run/mainpidsh2/pid` +systemd-run --unit=test20-mainpidsh2.service -p StandardOutput=tty -p StandardError=tty -p Type=forking -p RuntimeDirectory=mainpidsh2 -p PIDFile=/run/mainpidsh2/pid /tmp/test20-mainpid2.sh +test `systemctl show -p MainPID --value test20-mainpidsh2.service` -eq `cat /run/mainpidsh2/pid` -cat >/dev/shm/mainpid3.sh </dev/shm/test20-mainpid3.sh < Date: Tue, 10 Dec 2019 13:32:20 +0100 Subject: [PATCH 32/78] test: move TEST-22-TMPFILES setup to static files --- test/TEST-22-TMPFILES/test.sh | 16 +--------------- test/test-functions | 4 ++++ .../test-01.sh => units/testsuite-22.01.sh} | 0 .../test-02.sh => units/testsuite-22.02.sh} | 0 .../test-03.sh => units/testsuite-22.03.sh} | 0 .../test-04.sh => units/testsuite-22.04.sh} | 0 .../test-05.sh => units/testsuite-22.05.sh} | 0 .../test-06.sh => units/testsuite-22.06.sh} | 0 .../test-07.sh => units/testsuite-22.07.sh} | 0 .../test-08.sh => units/testsuite-22.08.sh} | 0 .../test-09.sh => units/testsuite-22.09.sh} | 0 .../testsuite-22.service} | 5 ++--- .../testsuite-22.sh} | 4 ++-- 13 files changed, 9 insertions(+), 20 deletions(-) rename test/{TEST-22-TMPFILES/test-01.sh => units/testsuite-22.01.sh} (100%) rename test/{TEST-22-TMPFILES/test-02.sh => units/testsuite-22.02.sh} (100%) rename test/{TEST-22-TMPFILES/test-03.sh => units/testsuite-22.03.sh} (100%) rename test/{TEST-22-TMPFILES/test-04.sh => units/testsuite-22.04.sh} (100%) rename test/{TEST-22-TMPFILES/test-05.sh => units/testsuite-22.05.sh} (100%) rename test/{TEST-22-TMPFILES/test-06.sh => units/testsuite-22.06.sh} (100%) rename test/{TEST-22-TMPFILES/test-07.sh => units/testsuite-22.07.sh} (100%) rename test/{TEST-22-TMPFILES/test-08.sh => units/testsuite-22.08.sh} (100%) rename test/{TEST-22-TMPFILES/test-09.sh => units/testsuite-22.09.sh} (100%) rename test/{TEST-22-TMPFILES/testsuite.service => units/testsuite-22.service} (60%) rename test/{TEST-22-TMPFILES/run-tmpfiles-tests.sh => units/testsuite-22.sh} (58%) diff --git a/test/TEST-22-TMPFILES/test.sh b/test/TEST-22-TMPFILES/test.sh index aa6efcfb48..5ab688e4ac 100755 --- a/test/TEST-22-TMPFILES/test.sh +++ b/test/TEST-22-TMPFILES/test.sh @@ -9,23 +9,9 @@ test_setup() { # create the basic filesystem layout setup_basic_environment mask_supporting_services - inst_binary mv - inst_binary stat - inst_binary seq - inst_binary xargs - inst_binary mkfifo - inst_binary readlink - - # setup the testsuite service - cp testsuite.service $initdir/etc/systemd/system/ - setup_testsuite - - mkdir -p $initdir/testsuite - cp run-tmpfiles-tests.sh $initdir/testsuite/ - cp test-*.sh $initdir/testsuite/ # create dedicated rootfs for nspawn (located in $TESTDIR/nspawn-root) setup_nspawn_root } -do_test "$@" +do_test "$@" 22 diff --git a/test/test-functions b/test/test-functions index 0a111771bf..9eef9a63fb 100644 --- a/test/test-functions +++ b/test/test-functions @@ -58,15 +58,19 @@ BASICTOOLS=( ln loadkeys login + mkfifo + mktemp modprobe mount mv nc + readlink rm rmdir sed setfont setsid + seq sh sleep socat diff --git a/test/TEST-22-TMPFILES/test-01.sh b/test/units/testsuite-22.01.sh similarity index 100% rename from test/TEST-22-TMPFILES/test-01.sh rename to test/units/testsuite-22.01.sh diff --git a/test/TEST-22-TMPFILES/test-02.sh b/test/units/testsuite-22.02.sh similarity index 100% rename from test/TEST-22-TMPFILES/test-02.sh rename to test/units/testsuite-22.02.sh diff --git a/test/TEST-22-TMPFILES/test-03.sh b/test/units/testsuite-22.03.sh similarity index 100% rename from test/TEST-22-TMPFILES/test-03.sh rename to test/units/testsuite-22.03.sh diff --git a/test/TEST-22-TMPFILES/test-04.sh b/test/units/testsuite-22.04.sh similarity index 100% rename from test/TEST-22-TMPFILES/test-04.sh rename to test/units/testsuite-22.04.sh diff --git a/test/TEST-22-TMPFILES/test-05.sh b/test/units/testsuite-22.05.sh similarity index 100% rename from test/TEST-22-TMPFILES/test-05.sh rename to test/units/testsuite-22.05.sh diff --git a/test/TEST-22-TMPFILES/test-06.sh b/test/units/testsuite-22.06.sh similarity index 100% rename from test/TEST-22-TMPFILES/test-06.sh rename to test/units/testsuite-22.06.sh diff --git a/test/TEST-22-TMPFILES/test-07.sh b/test/units/testsuite-22.07.sh similarity index 100% rename from test/TEST-22-TMPFILES/test-07.sh rename to test/units/testsuite-22.07.sh diff --git a/test/TEST-22-TMPFILES/test-08.sh b/test/units/testsuite-22.08.sh similarity index 100% rename from test/TEST-22-TMPFILES/test-08.sh rename to test/units/testsuite-22.08.sh diff --git a/test/TEST-22-TMPFILES/test-09.sh b/test/units/testsuite-22.09.sh similarity index 100% rename from test/TEST-22-TMPFILES/test-09.sh rename to test/units/testsuite-22.09.sh diff --git a/test/TEST-22-TMPFILES/testsuite.service b/test/units/testsuite-22.service similarity index 60% rename from test/TEST-22-TMPFILES/testsuite.service rename to test/units/testsuite-22.service index 2f1b15c3ed..3d53cbf56c 100644 --- a/test/TEST-22-TMPFILES/testsuite.service +++ b/test/units/testsuite-22.service @@ -1,12 +1,11 @@ [Unit] -Description=Testsuite service +Description=TEST-22-TMPFILES After=systemd-tmpfiles-setup.service Before=getty-pre.target Wants=getty-pre.target [Service] -WorkingDirectory=/testsuite -ExecStart=/testsuite/run-tmpfiles-tests.sh +ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh Type=oneshot StandardOutput=tty StandardError=tty diff --git a/test/TEST-22-TMPFILES/run-tmpfiles-tests.sh b/test/units/testsuite-22.sh similarity index 58% rename from test/TEST-22-TMPFILES/run-tmpfiles-tests.sh rename to test/units/testsuite-22.sh index a0158f0421..afce85aceb 100755 --- a/test/TEST-22-TMPFILES/run-tmpfiles-tests.sh +++ b/test/units/testsuite-22.sh @@ -5,8 +5,8 @@ set -e >/failed -for t in test-*.sh; do - echo "Running $t"; ./$t +for t in ${0%.sh}.*.sh; do + echo "Running $t"; ./$t done touch /testok From b49325d028803bacefcf3817a84206b31197826c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Tue, 10 Dec 2019 08:59:09 +0100 Subject: [PATCH 33/78] test: move TEST-23-TYPE-EXEC setup to static files --- test/TEST-23-TYPE-EXEC/test.sh | 15 +-------------- test/units/testsuite-23.service | 6 ++++++ .../testsuite.sh => units/testsuite-23.sh} | 0 3 files changed, 7 insertions(+), 14 deletions(-) create mode 100644 test/units/testsuite-23.service rename test/{TEST-23-TYPE-EXEC/testsuite.sh => units/testsuite-23.sh} (100%) diff --git a/test/TEST-23-TYPE-EXEC/test.sh b/test/TEST-23-TYPE-EXEC/test.sh index ebc9fe4c85..bafbef0319 100755 --- a/test/TEST-23-TYPE-EXEC/test.sh +++ b/test/TEST-23-TYPE-EXEC/test.sh @@ -13,21 +13,8 @@ test_setup() { setup_basic_environment mask_supporting_services - - # setup the testsuite service - cat >$initdir/etc/systemd/system/testsuite.service < Date: Fri, 13 Dec 2019 12:21:11 +0100 Subject: [PATCH 34/78] test-fileio: fix bogus error when /proc/cmdline contains newlines The kernel does not sanitize /proc/cmdline. E.g. when running under qemu, it is easy to pass a string with newline by mistake. We use read_one_line_file(), so we would read only the first list of the file, and write_string_file(WRITE_STRING_FILE_VERIFY_ON_FAILURE) would fail because the target file is obviously different. Change to a kernel-generated file to avoid the issue. v2: - use /proc/version instead of /proc/uptime for attempted writes, so the test test passes even if test_write_string_file_verify() takes more than 10 ms ;] --- src/test/test-fileio.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/test/test-fileio.c b/src/test/test-fileio.c index 23c7d370d4..32a00349ac 100644 --- a/src/test/test-fileio.c +++ b/src/test/test-fileio.c @@ -444,20 +444,20 @@ static void test_write_string_file_verify(void) { _cleanup_free_ char *buf = NULL, *buf2 = NULL; int r; - assert_se(read_one_line_file("/proc/cmdline", &buf) >= 0); + assert_se(read_one_line_file("/proc/version", &buf) >= 0); assert_se(buf2 = strjoin(buf, "\n")); - r = write_string_file("/proc/cmdline", buf, 0); + r = write_string_file("/proc/version", buf, 0); assert_se(IN_SET(r, -EACCES, -EIO)); - r = write_string_file("/proc/cmdline", buf2, 0); + r = write_string_file("/proc/version", buf2, 0); assert_se(IN_SET(r, -EACCES, -EIO)); - assert_se(write_string_file("/proc/cmdline", buf, WRITE_STRING_FILE_VERIFY_ON_FAILURE) == 0); - assert_se(write_string_file("/proc/cmdline", buf2, WRITE_STRING_FILE_VERIFY_ON_FAILURE) == 0); + assert_se(write_string_file("/proc/version", buf, WRITE_STRING_FILE_VERIFY_ON_FAILURE) == 0); + assert_se(write_string_file("/proc/version", buf2, WRITE_STRING_FILE_VERIFY_ON_FAILURE) == 0); - r = write_string_file("/proc/cmdline", buf, WRITE_STRING_FILE_VERIFY_ON_FAILURE|WRITE_STRING_FILE_AVOID_NEWLINE); + r = write_string_file("/proc/version", buf, WRITE_STRING_FILE_VERIFY_ON_FAILURE|WRITE_STRING_FILE_AVOID_NEWLINE); assert_se(IN_SET(r, -EACCES, -EIO)); - assert_se(write_string_file("/proc/cmdline", buf2, WRITE_STRING_FILE_VERIFY_ON_FAILURE|WRITE_STRING_FILE_AVOID_NEWLINE) == 0); + assert_se(write_string_file("/proc/version", buf2, WRITE_STRING_FILE_VERIFY_ON_FAILURE|WRITE_STRING_FILE_AVOID_NEWLINE) == 0); } static void test_load_env_file_pairs(void) { @@ -757,7 +757,7 @@ static void test_read_line3(void) { _cleanup_free_ char *line = NULL; int r; - f = fopen("/proc/cmdline", "re"); + f = fopen("/proc/uptime", "re"); if (!f && IN_SET(errno, ENOENT, EPERM)) return; assert_se(f); From f4c40fd75416d00af0b4d115277ad5529c378aa3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Tue, 10 Dec 2019 15:31:09 +0100 Subject: [PATCH 35/78] test: move TEST-24-UNIT-TESTS setup to static files I picked the list of zone files to install by grepping through the code. This is is a bit brittle, but installing all of them takes a while, and more importantly, writes a lot of lines to the log. --- test/TEST-24-UNIT-TESTS/test.sh | 31 ++--------------- test/test-functions | 34 ++++++++++++++++--- test/units/testsuite-24.service | 6 ++++ .../testsuite.sh => units/testsuite-24.sh} | 12 +++---- 4 files changed, 43 insertions(+), 40 deletions(-) create mode 100644 test/units/testsuite-24.service rename test/{TEST-24-UNIT-TESTS/testsuite.sh => units/testsuite-24.sh} (92%) diff --git a/test/TEST-24-UNIT-TESTS/test.sh b/test/TEST-24-UNIT-TESTS/test.sh index c9198fb6c7..7b07a9ee5c 100755 --- a/test/TEST-24-UNIT-TESTS/test.sh +++ b/test/TEST-24-UNIT-TESTS/test.sh @@ -65,37 +65,10 @@ test_setup() { LOG_LEVEL=5 eval $(udevadm info --export --query=env --name=${LOOPDEV}p2) - for i in getfacl dirname basename capsh cut rev stat mktemp rmdir ionice unshare uname tr awk getent diff xzcat lz4cat; do - inst_binary $i - done - - inst /etc/hosts - setup_basic_environment - install_keymaps yes - install_zoneinfo - # Install nproc to determine # of CPUs for correct parallelization - inst_binary nproc - - # setup the testsuite service - cat >$initdir/etc/systemd/system/testsuite.service </dev/null | grep '^/' -m1) BASICTOOLS=( + awk + basename bash busybox + capsh cat chmod chown cmp cryptsetup + cut date + dd + diff + dirname dmsetup echo env false + getent + getfacl + gunzip gzip head + ionice ip ln loadkeys login + lz4cat mkfifo mktemp modprobe mount mv nc + nproc readlink + rev rm rmdir sed + seq setfont setsid - seq sh sleep socat @@ -81,10 +95,13 @@ BASICTOOLS=( tee test touch + tr true umount + uname unshare xargs + xzcat ) DEBUGTOOLS=( @@ -385,6 +402,7 @@ setup_basic_environment() { install_systemd install_missing_libraries install_config_files + install_zoneinfo create_rc_local install_basic_tools install_libnss @@ -964,10 +982,16 @@ install_keymaps() { } install_zoneinfo() { - for i in /usr/share/zoneinfo/{,*/,*/*/}*; do - [[ -f $i ]] || continue - inst $i - done + inst_any /usr/share/zoneinfo/Asia/Seoul + inst_any /usr/share/zoneinfo/Asia/Vladivostok + inst_any /usr/share/zoneinfo/Australia/Sydney + inst_any /usr/share/zoneinfo/Europe/Berlin + inst_any /usr/share/zoneinfo/Europe/Kiev + inst_any /usr/share/zoneinfo/Pacific/Auckland + inst_any /usr/share/zoneinfo/Pacific/Honolulu + inst_any /usr/share/zoneinfo/CET + inst_any /usr/share/zoneinfo/EET + inst_any /usr/share/zoneinfo/UTC } install_fonts() { diff --git a/test/units/testsuite-24.service b/test/units/testsuite-24.service new file mode 100644 index 0000000000..de53f03fb4 --- /dev/null +++ b/test/units/testsuite-24.service @@ -0,0 +1,6 @@ +[Unit] +Description=TEST-24-UNIT-TESTS + +[Service] +ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh +Type=oneshot diff --git a/test/TEST-24-UNIT-TESTS/testsuite.sh b/test/units/testsuite-24.sh similarity index 92% rename from test/TEST-24-UNIT-TESTS/testsuite.sh rename to test/units/testsuite-24.sh index cc78adbbe9..0e3cb15477 100755 --- a/test/TEST-24-UNIT-TESTS/testsuite.sh +++ b/test/units/testsuite-24.sh @@ -21,23 +21,23 @@ function report_result() { if [[ $ret -ne 0 && $ret != 77 ]]; then echo "$name failed with $ret" - echo "$name" >> /failed-tests + echo "$name" >>/failed-tests { echo "--- $name begin ---" cat "/$name.log" echo "--- $name end ---" - } >> /failed + } >>/failed elif [[ $ret == 77 ]]; then echo "$name skipped" - echo "$name" >> /skipped-tests + echo "$name" >>/skipped-tests { echo "--- $name begin ---" cat "/$name.log" echo "--- $name end ---" - } >> /skipped + } >>/skipped else echo "$name OK" - echo "$name" >> /testok + echo "$name" >>/testok fi systemd-cat echo "--- $name ---" @@ -69,7 +69,7 @@ for task in "${TEST_LIST[@]}"; do if [[ -x $task ]]; then log_file="/${task##*/}.log" - $task &> "$log_file" & + $task &>"$log_file" & running[$task]=$! fi done From 6e796683dff0fadbc035f6a218fd1230d725b7ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Tue, 10 Dec 2019 09:10:28 +0100 Subject: [PATCH 36/78] test: move TEST-25-IMPORT setup to static files Also run mask_supporting_services() here. --- test/TEST-25-IMPORT/test.sh | 17 ++--------------- test/test-functions | 1 + test/units/testsuite-25.service | 6 ++++++ .../testsuite.sh => units/testsuite-25.sh} | 0 4 files changed, 9 insertions(+), 15 deletions(-) create mode 100644 test/units/testsuite-25.service rename test/{TEST-25-IMPORT/testsuite.sh => units/testsuite-25.sh} (100%) diff --git a/test/TEST-25-IMPORT/test.sh b/test/TEST-25-IMPORT/test.sh index 14265cdfc5..977f984bd3 100755 --- a/test/TEST-25-IMPORT/test.sh +++ b/test/TEST-25-IMPORT/test.sh @@ -12,22 +12,9 @@ test_setup() { eval $(udevadm info --export --query=env --name=${LOOPDEV}p2) setup_basic_environment - dracut_install dd gunzip mv tar diff - - # setup the testsuite service - cat >$initdir/etc/systemd/system/testsuite.service < Date: Sat, 21 Mar 2020 15:29:43 +0100 Subject: [PATCH 37/78] test/TEST-25: remove all images at the end of the test scratch5 would be left behind, and trying to run the test again on the same image would fail. --- test/units/testsuite-25.sh | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/test/units/testsuite-25.sh b/test/units/testsuite-25.sh index 6dcb780508..2558d5bf4c 100755 --- a/test/units/testsuite-25.sh +++ b/test/units/testsuite-25.sh @@ -133,6 +133,11 @@ rm -rf /var/tmp/extract rm -rf /var/tmp/scratch +# Test removal +machinectl remove scratch5 +! test -f /var/lib/machines/scratch5 +! machinectl image-status scratch5 + echo OK > /testok exit 0 From dfa633ca6a17685d4a82198498e90ffbdd54dc87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Tue, 10 Dec 2019 09:13:20 +0100 Subject: [PATCH 38/78] test: move TEST-26-SETENV setup to static files Also run mask_supporting_services() here. --- test/TEST-26-SETENV/test.sh | 16 ++-------------- test/units/testsuite-26.service | 6 ++++++ .../testsuite.sh => units/testsuite-26.sh} | 0 3 files changed, 8 insertions(+), 14 deletions(-) create mode 100644 test/units/testsuite-26.service rename test/{TEST-26-SETENV/testsuite.sh => units/testsuite-26.sh} (100%) diff --git a/test/TEST-26-SETENV/test.sh b/test/TEST-26-SETENV/test.sh index ee0f562277..7b71fcda3a 100755 --- a/test/TEST-26-SETENV/test.sh +++ b/test/TEST-26-SETENV/test.sh @@ -12,21 +12,9 @@ test_setup() { eval $(udevadm info --export --query=env --name=${LOOPDEV}p2) setup_basic_environment - - # setup the testsuite service - cat >$initdir/etc/systemd/system/testsuite.service < Date: Tue, 10 Dec 2019 09:19:13 +0100 Subject: [PATCH 39/78] test: move TEST-27-STDOUTFILE setup to static files --- test/TEST-27-STDOUTFILE/test.sh | 16 +--------------- test/units/testsuite-27.service | 6 ++++++ .../testsuite.sh => units/testsuite-27.sh} | 8 ++++---- 3 files changed, 11 insertions(+), 19 deletions(-) create mode 100644 test/units/testsuite-27.service rename test/{TEST-27-STDOUTFILE/testsuite.sh => units/testsuite-27.sh} (85%) diff --git a/test/TEST-27-STDOUTFILE/test.sh b/test/TEST-27-STDOUTFILE/test.sh index 66c98e5675..80c4b0920c 100755 --- a/test/TEST-27-STDOUTFILE/test.sh +++ b/test/TEST-27-STDOUTFILE/test.sh @@ -13,22 +13,8 @@ test_setup() { setup_basic_environment mask_supporting_services - inst_binary cmp - - # setup the testsuite service - cat >$initdir/etc/systemd/system/testsuite.service < /testok +echo OK >/testok exit 0 From 94370e627fe62d20557832765bb733ac2bcde6c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Tue, 10 Dec 2019 09:32:44 +0100 Subject: [PATCH 40/78] test: move TEST-28-PERCENTJ-WANTEDBY setup to static files --- test/TEST-28-PERCENTJ-WANTEDBY/test.sh | 36 +------------------ test/meson.build | 2 ++ .../specifier-j-depends-wants.service | 6 ++++ .../specifier-j-wants.service | 9 +++++ test/units/testsuite-28.service | 9 +++++ 5 files changed, 27 insertions(+), 35 deletions(-) create mode 100644 test/testsuite-28.units/specifier-j-depends-wants.service create mode 100644 test/testsuite-28.units/specifier-j-wants.service create mode 100644 test/units/testsuite-28.service diff --git a/test/TEST-28-PERCENTJ-WANTEDBY/test.sh b/test/TEST-28-PERCENTJ-WANTEDBY/test.sh index 934e1bc70c..477eb15cbe 100755 --- a/test/TEST-28-PERCENTJ-WANTEDBY/test.sh +++ b/test/TEST-28-PERCENTJ-WANTEDBY/test.sh @@ -15,42 +15,8 @@ test_setup() { setup_basic_environment mask_supporting_services - - # Set up the services. - cat >$initdir/etc/systemd/system/specifier-j-wants.service << EOF -[Unit] -Description=Wants with percent-j specifier -Wants=specifier-j-depends-%j.service -After=specifier-j-depends-%j.service - -[Service] -Type=oneshot -ExecStart=test -f /tmp/test-specifier-j-%j -ExecStart=/bin/sh -c 'echo OK > /testok' -EOF - cat >$initdir/etc/systemd/system/specifier-j-depends-wants.service << EOF -[Unit] -Description=Dependent service for percent-j specifier - -[Service] -Type=oneshot -ExecStart=touch /tmp/test-specifier-j-wants -EOF - cat >$initdir/etc/systemd/system/testsuite.service << EOF -[Unit] -Description=Testsuite: Ensure %j Wants directives work -Wants=specifier-j-wants.service -After=specifier-j-wants.service - -[Service] -Type=oneshot -ExecStart=/bin/true -EOF - - setup_testsuite ) - setup_nspawn_root } -do_test "$@" +do_test "$@" 28 diff --git a/test/meson.build b/test/meson.build index 6fea0fc93d..6b85854d20 100644 --- a/test/meson.build +++ b/test/meson.build @@ -22,6 +22,8 @@ install_subdir('testsuite-11.units', install_dir : testdata_dir) install_subdir('testsuite-16.units', install_dir : testdata_dir) +install_subdir('testsuite-28.units', + install_dir : testdata_dir) testsuite08_dir = testdata_dir + '/testsuite-08.units' install_data('testsuite-08.units/-.mount', diff --git a/test/testsuite-28.units/specifier-j-depends-wants.service b/test/testsuite-28.units/specifier-j-depends-wants.service new file mode 100644 index 0000000000..1db4d855b9 --- /dev/null +++ b/test/testsuite-28.units/specifier-j-depends-wants.service @@ -0,0 +1,6 @@ +[Unit] +Description=Dependent service for percent-j specifier + +[Service] +Type=oneshot +ExecStart=touch /tmp/test-specifier-j-wants diff --git a/test/testsuite-28.units/specifier-j-wants.service b/test/testsuite-28.units/specifier-j-wants.service new file mode 100644 index 0000000000..10c35906bb --- /dev/null +++ b/test/testsuite-28.units/specifier-j-wants.service @@ -0,0 +1,9 @@ +[Unit] +Description=Wants with percent-j specifier +Wants=specifier-j-depends-%j.service +After=specifier-j-depends-%j.service + +[Service] +Type=oneshot +ExecStart=test -f /tmp/test-specifier-j-%j +ExecStart=sh -c 'echo OK > /testok' diff --git a/test/units/testsuite-28.service b/test/units/testsuite-28.service new file mode 100644 index 0000000000..c4be0c631c --- /dev/null +++ b/test/units/testsuite-28.service @@ -0,0 +1,9 @@ +[Unit] +Description=TEST-28-PERCENTJ-WANTEDBY +# Testsuite: Ensure %j Wants directives work +Wants=specifier-j-wants.service +After=specifier-j-wants.service + +[Service] +ExecStart=true +Type=oneshot From e578ea4df4a63c9bc916fd3d23ee5c4065318886 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Tue, 10 Dec 2019 09:35:49 +0100 Subject: [PATCH 41/78] test: move TEST-29-UDEV-ID_RENAMING setup to static files --- test/TEST-29-UDEV-ID_RENAMING/test.sh | 15 +-------------- test/units/testsuite-29.service | 6 ++++++ .../testsuite.sh => units/testsuite-29.sh} | 0 3 files changed, 7 insertions(+), 14 deletions(-) create mode 100644 test/units/testsuite-29.service rename test/{TEST-29-UDEV-ID_RENAMING/testsuite.sh => units/testsuite-29.sh} (100%) diff --git a/test/TEST-29-UDEV-ID_RENAMING/test.sh b/test/TEST-29-UDEV-ID_RENAMING/test.sh index fb570b0347..b266ff9e56 100755 --- a/test/TEST-29-UDEV-ID_RENAMING/test.sh +++ b/test/TEST-29-UDEV-ID_RENAMING/test.sh @@ -15,20 +15,7 @@ test_setup() { setup_basic_environment mask_supporting_services - - # setup the testsuite service - cat >$initdir/etc/systemd/system/testsuite.service < Date: Tue, 10 Dec 2019 13:45:48 +0100 Subject: [PATCH 42/78] test: move TEST-30-ONCLOCKCHANGE setup to static files The two timezone files are now installed in the global setup. I am not too happy about this, but it still seems better than to create a completely separate image just for this. --- test/TEST-30-ONCLOCKCHANGE/test.sh | 25 +------------------ test/meson.build | 2 ++ test/test-functions | 1 + .../systemd-timedated.service.d/watchdog.conf | 2 ++ test/units/testsuite-30.service | 6 +++++ .../testsuite.sh => units/testsuite-30.sh} | 0 6 files changed, 12 insertions(+), 24 deletions(-) create mode 100644 test/testsuite-30.units/systemd-timedated.service.d/watchdog.conf create mode 100644 test/units/testsuite-30.service rename test/{TEST-30-ONCLOCKCHANGE/testsuite.sh => units/testsuite-30.sh} (100%) diff --git a/test/TEST-30-ONCLOCKCHANGE/test.sh b/test/TEST-30-ONCLOCKCHANGE/test.sh index 9e2c11238c..5b4133202f 100755 --- a/test/TEST-30-ONCLOCKCHANGE/test.sh +++ b/test/TEST-30-ONCLOCKCHANGE/test.sh @@ -12,32 +12,9 @@ test_setup() { LOG_LEVEL=5 eval $(udevadm info --export --query=env --name=${LOOPDEV}p2) - inst_any /usr/share/zoneinfo/Europe/Kiev - inst_any /usr/share/zoneinfo/Europe/Berlin - setup_basic_environment mask_supporting_services - - # extend the watchdog - mkdir -p $initdir/etc/systemd/system/systemd-timedated.service.d - cat >$initdir/etc/systemd/system/systemd-timedated.service.d/watchdog.conf <$initdir/etc/systemd/system/testsuite.service < $initdir/etc/environment > $initdir/etc/machine-id + # set the hostname echo systemd-testsuite > $initdir/etc/hostname # fstab diff --git a/test/testsuite-30.units/systemd-timedated.service.d/watchdog.conf b/test/testsuite-30.units/systemd-timedated.service.d/watchdog.conf new file mode 100644 index 0000000000..d5ed27cf6b --- /dev/null +++ b/test/testsuite-30.units/systemd-timedated.service.d/watchdog.conf @@ -0,0 +1,2 @@ +[Service] +WatchdogSec=10min diff --git a/test/units/testsuite-30.service b/test/units/testsuite-30.service new file mode 100644 index 0000000000..c3bb25853d --- /dev/null +++ b/test/units/testsuite-30.service @@ -0,0 +1,6 @@ +[Unit] +Description=TEST-30-ONCLOCKCHANGE + +[Service] +ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh +Type=oneshot diff --git a/test/TEST-30-ONCLOCKCHANGE/testsuite.sh b/test/units/testsuite-30.sh similarity index 100% rename from test/TEST-30-ONCLOCKCHANGE/testsuite.sh rename to test/units/testsuite-30.sh From 048d52d51ee5413b2376cfa21ec153510c7e766b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Tue, 10 Dec 2019 09:41:07 +0100 Subject: [PATCH 43/78] test: move TEST-31-DEVICE-ENUMERATION setup to static files --- test/TEST-31-DEVICE-ENUMERATION/test.sh | 15 +-------------- test/units/testsuite-31.service | 6 ++++++ .../testsuite.sh => units/testsuite-31.sh} | 0 3 files changed, 7 insertions(+), 14 deletions(-) create mode 100644 test/units/testsuite-31.service rename test/{TEST-31-DEVICE-ENUMERATION/testsuite.sh => units/testsuite-31.sh} (100%) diff --git a/test/TEST-31-DEVICE-ENUMERATION/test.sh b/test/TEST-31-DEVICE-ENUMERATION/test.sh index 7bc9298dc1..b2565e0c96 100755 --- a/test/TEST-31-DEVICE-ENUMERATION/test.sh +++ b/test/TEST-31-DEVICE-ENUMERATION/test.sh @@ -15,20 +15,7 @@ test_setup() { setup_basic_environment mask_supporting_services - - # setup the testsuite service - cat >$initdir/etc/systemd/system/testsuite.service < Date: Tue, 10 Dec 2019 09:43:14 +0100 Subject: [PATCH 44/78] test: move TEST-32-OOMPOLICY setup to static files --- test/TEST-32-OOMPOLICY/test.sh | 16 +--------------- test/units/testsuite-32.service | 7 +++++++ .../testsuite.sh => units/testsuite-32.sh} | 12 +++++++----- 3 files changed, 15 insertions(+), 20 deletions(-) create mode 100644 test/units/testsuite-32.service rename test/{TEST-32-OOMPOLICY/testsuite.sh => units/testsuite-32.sh} (72%) diff --git a/test/TEST-32-OOMPOLICY/test.sh b/test/TEST-32-OOMPOLICY/test.sh index 36aad419ea..32fac7a289 100755 --- a/test/TEST-32-OOMPOLICY/test.sh +++ b/test/TEST-32-OOMPOLICY/test.sh @@ -16,21 +16,7 @@ test_setup() { setup_basic_environment mask_supporting_services - - # setup the testsuite service - cat >$initdir/etc/systemd/system/testsuite.service < /proc/sys/kernel/sysrq - echo f > /proc/sysrq-trigger + echo 1 >/proc/sys/kernel/sysrq + echo f >/proc/sysrq-trigger while : ; do STATE=`systemctl show -p ActiveState --value oomtest.service` @@ -32,6 +34,6 @@ if test -f /sys/fs/cgroup/system.slice/testsuite.service/memory.oom.group ; then systemd-analyze log-level info fi -echo OK > /testok +echo OK >/testok exit 0 From ff978cd24a9c60d859d89997e2650aca4fe7dee2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Tue, 10 Dec 2019 09:47:14 +0100 Subject: [PATCH 45/78] test: move TEST-33-CLEAN-UNIT setup to static files --- test/TEST-33-CLEAN-UNIT/test.sh | 17 ++--------------- test/units/testsuite-33.service | 6 ++++++ .../testsuite.sh => units/testsuite-33.sh} | 0 3 files changed, 8 insertions(+), 15 deletions(-) create mode 100644 test/units/testsuite-33.service rename test/{TEST-33-CLEAN-UNIT/testsuite.sh => units/testsuite-33.sh} (100%) diff --git a/test/TEST-33-CLEAN-UNIT/test.sh b/test/TEST-33-CLEAN-UNIT/test.sh index 310cf7b145..fe2458b170 100755 --- a/test/TEST-33-CLEAN-UNIT/test.sh +++ b/test/TEST-33-CLEAN-UNIT/test.sh @@ -15,21 +15,8 @@ test_setup() { setup_basic_environment mask_supporting_services - - # setup the testsuite service - cat >$initdir/etc/systemd/system/testsuite.service < Date: Tue, 10 Dec 2019 09:49:08 +0100 Subject: [PATCH 46/78] test: move TEST-34-DYNAMICUSERMIGRATE setup to static files --- test/TEST-34-DYNAMICUSERMIGRATE/test.sh | 15 +-------------- test/units/testsuite-34.service | 6 ++++++ .../testsuite.sh => units/testsuite-34.sh} | 0 3 files changed, 7 insertions(+), 14 deletions(-) create mode 100644 test/units/testsuite-34.service rename test/{TEST-34-DYNAMICUSERMIGRATE/testsuite.sh => units/testsuite-34.sh} (100%) diff --git a/test/TEST-34-DYNAMICUSERMIGRATE/test.sh b/test/TEST-34-DYNAMICUSERMIGRATE/test.sh index ad299df420..97c8ab4350 100755 --- a/test/TEST-34-DYNAMICUSERMIGRATE/test.sh +++ b/test/TEST-34-DYNAMICUSERMIGRATE/test.sh @@ -13,21 +13,8 @@ test_setup() { setup_basic_environment mask_supporting_services - - # setup the testsuite service - cat >$initdir/etc/systemd/system/testsuite.service < Date: Tue, 10 Dec 2019 13:04:39 +0100 Subject: [PATCH 47/78] test: convert TEST-35-NETWORK-GENERATOR into a unit test --- meson.build | 9 ++++- test/TEST-35-NETWORK-GENERATOR/Makefile | 1 - test/TEST-35-NETWORK-GENERATOR/test.sh | 36 ------------------- test/meson.build | 7 ++++ test/test-network-generator-conversion.sh | 30 ++++++++++++++++ .../test-01-dhcp.expected/91-default.network | 0 .../test-01-dhcp.input | 0 .../90-bridge99.netdev | 0 .../90-bridge99.network | 0 .../test-02-bridge.expected/90-eth0.network | 0 .../test-02-bridge.expected/90-eth1.network | 0 .../test-02-bridge.input | 0 .../90-enp3s0.network | 0 .../test-03-issue-14319.input | 0 test/testdata | 1 + 15 files changed, 46 insertions(+), 38 deletions(-) delete mode 120000 test/TEST-35-NETWORK-GENERATOR/Makefile delete mode 100755 test/TEST-35-NETWORK-GENERATOR/test.sh create mode 100755 test/test-network-generator-conversion.sh rename test/{TEST-35-NETWORK-GENERATOR => test-network-generator-conversion}/test-01-dhcp.expected/91-default.network (100%) rename test/{TEST-35-NETWORK-GENERATOR => test-network-generator-conversion}/test-01-dhcp.input (100%) rename test/{TEST-35-NETWORK-GENERATOR => test-network-generator-conversion}/test-02-bridge.expected/90-bridge99.netdev (100%) rename test/{TEST-35-NETWORK-GENERATOR => test-network-generator-conversion}/test-02-bridge.expected/90-bridge99.network (100%) rename test/{TEST-35-NETWORK-GENERATOR => test-network-generator-conversion}/test-02-bridge.expected/90-eth0.network (100%) rename test/{TEST-35-NETWORK-GENERATOR => test-network-generator-conversion}/test-02-bridge.expected/90-eth1.network (100%) rename test/{TEST-35-NETWORK-GENERATOR => test-network-generator-conversion}/test-02-bridge.input (100%) rename test/{TEST-35-NETWORK-GENERATOR => test-network-generator-conversion}/test-03-issue-14319.expected/90-enp3s0.network (100%) rename test/{TEST-35-NETWORK-GENERATOR => test-network-generator-conversion}/test-03-issue-14319.input (100%) create mode 120000 test/testdata diff --git a/meson.build b/meson.build index d763e81342..360318b7d8 100644 --- a/meson.build +++ b/meson.build @@ -2962,13 +2962,20 @@ if conf.get('ENABLE_NETWORKD') == 1 install_dir : rootbindir) public_programs += exe - executable('systemd-network-generator', + exe = executable('systemd-network-generator', network_generator_sources, include_directories : includes, link_with : [networkd_link_with], install_rpath : rootlibexecdir, install : true, install_dir : rootlibexecdir) + + if want_tests != 'false' + test('test-network-generator-conversion', + test_network_generator_conversion_sh, + # https://github.com/mesonbuild/meson/issues/2681 + args : exe.full_path()) + endif endif executable('systemd-sulogin-shell', diff --git a/test/TEST-35-NETWORK-GENERATOR/Makefile b/test/TEST-35-NETWORK-GENERATOR/Makefile deleted file mode 120000 index e9f93b1104..0000000000 --- a/test/TEST-35-NETWORK-GENERATOR/Makefile +++ /dev/null @@ -1 +0,0 @@ -../TEST-01-BASIC/Makefile \ No newline at end of file diff --git a/test/TEST-35-NETWORK-GENERATOR/test.sh b/test/TEST-35-NETWORK-GENERATOR/test.sh deleted file mode 100755 index 7853281850..0000000000 --- a/test/TEST-35-NETWORK-GENERATOR/test.sh +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/env bash -set -e -TEST_DESCRIPTION="network-generator tests" - -. $TEST_BASE_DIR/test-functions - -test_setup() { - mkdir -p $TESTDIR/run/systemd/network -} - -test_run() { - local generator - - if [[ -x $BUILD_DIR/systemd-network-generator ]]; then - generator=$BUILD_DIR/systemd-network-generator - elif [[ -x /usr/lib/systemd/systemd-network-generator ]]; then - generator=/usr/lib/systemd/systemd-network-generator - elif [[ -x /lib/systemd/systemd-network-generator ]]; then - generator=/lib/systemd/systemd-network-generator - else - exit 1 - fi - - for f in test-*.input; do - echo "*** Running $f" - rm -f $TESTDIR/run/systemd/network/* - $generator --root $TESTDIR -- $(cat $f) - - if ! diff -u $TESTDIR/run/systemd/network ${f%.input}.expected; then - echo "**** Unexpected output for $f" - exit 1 - fi - done -} - -do_test "$@" diff --git a/test/meson.build b/test/meson.build index b347a0817d..404b923467 100644 --- a/test/meson.build +++ b/test/meson.build @@ -12,6 +12,8 @@ install_subdir('test-path', install_dir : testdata_dir) install_subdir('test-umount', install_dir : testdata_dir) +install_subdir('test-network-generator-conversion', + install_dir : testdata_dir) install_subdir('testsuite-04.units', install_dir : testdata_dir) install_subdir('testsuite-06.units', @@ -48,6 +50,8 @@ install_data('create-busybox-container', install_mode : 'rwxr-xr-x', install_dir : testdata_dir) +test_network_generator_conversion_sh = find_program('test-network-generator-conversion.sh') + ############################################################ rule_syntax_check_py = find_program('rule-syntax-check.py') @@ -73,6 +77,9 @@ if install_tests install_data('run-unit-tests.py', install_mode : 'rwxr-xr-x', install_dir : testsdir) + install_data('test-network-generator-conversion.sh', + install_mode : 'rwxr-xr-x', + install_dir : testsdir) endif ############################################################ diff --git a/test/test-network-generator-conversion.sh b/test/test-network-generator-conversion.sh new file mode 100755 index 0000000000..d0d0834518 --- /dev/null +++ b/test/test-network-generator-conversion.sh @@ -0,0 +1,30 @@ +#!/usr/bin/env bash +set -ex + +if [[ -n "$1" ]]; then + generator=$1 +elif [[ -x /usr/lib/systemd/systemd-network-generator ]]; then + generator=/usr/lib/systemd/systemd-network-generator +elif [[ -x /lib/systemd/systemd-network-generator ]]; then + generator=/lib/systemd/systemd-network-generator +else + exit 1 +fi + +src="$(dirname "$0")/testdata/test-network-generator-conversion" + +for f in "$src"/test-*.input; do + echo "*** Running $f" + + ( + out=$(mktemp --directory) + trap "rm -rf '$out'" EXIT INT QUIT PIPE + + $generator --root "$out" -- $(cat $f) + + if ! diff -u "$out"/run/systemd/network ${f%.input}.expected; then + echo "**** Unexpected output for $f" + exit 1 + fi + ) || exit 1 +done diff --git a/test/TEST-35-NETWORK-GENERATOR/test-01-dhcp.expected/91-default.network b/test/test-network-generator-conversion/test-01-dhcp.expected/91-default.network similarity index 100% rename from test/TEST-35-NETWORK-GENERATOR/test-01-dhcp.expected/91-default.network rename to test/test-network-generator-conversion/test-01-dhcp.expected/91-default.network diff --git a/test/TEST-35-NETWORK-GENERATOR/test-01-dhcp.input b/test/test-network-generator-conversion/test-01-dhcp.input similarity index 100% rename from test/TEST-35-NETWORK-GENERATOR/test-01-dhcp.input rename to test/test-network-generator-conversion/test-01-dhcp.input diff --git a/test/TEST-35-NETWORK-GENERATOR/test-02-bridge.expected/90-bridge99.netdev b/test/test-network-generator-conversion/test-02-bridge.expected/90-bridge99.netdev similarity index 100% rename from test/TEST-35-NETWORK-GENERATOR/test-02-bridge.expected/90-bridge99.netdev rename to test/test-network-generator-conversion/test-02-bridge.expected/90-bridge99.netdev diff --git a/test/TEST-35-NETWORK-GENERATOR/test-02-bridge.expected/90-bridge99.network b/test/test-network-generator-conversion/test-02-bridge.expected/90-bridge99.network similarity index 100% rename from test/TEST-35-NETWORK-GENERATOR/test-02-bridge.expected/90-bridge99.network rename to test/test-network-generator-conversion/test-02-bridge.expected/90-bridge99.network diff --git a/test/TEST-35-NETWORK-GENERATOR/test-02-bridge.expected/90-eth0.network b/test/test-network-generator-conversion/test-02-bridge.expected/90-eth0.network similarity index 100% rename from test/TEST-35-NETWORK-GENERATOR/test-02-bridge.expected/90-eth0.network rename to test/test-network-generator-conversion/test-02-bridge.expected/90-eth0.network diff --git a/test/TEST-35-NETWORK-GENERATOR/test-02-bridge.expected/90-eth1.network b/test/test-network-generator-conversion/test-02-bridge.expected/90-eth1.network similarity index 100% rename from test/TEST-35-NETWORK-GENERATOR/test-02-bridge.expected/90-eth1.network rename to test/test-network-generator-conversion/test-02-bridge.expected/90-eth1.network diff --git a/test/TEST-35-NETWORK-GENERATOR/test-02-bridge.input b/test/test-network-generator-conversion/test-02-bridge.input similarity index 100% rename from test/TEST-35-NETWORK-GENERATOR/test-02-bridge.input rename to test/test-network-generator-conversion/test-02-bridge.input diff --git a/test/TEST-35-NETWORK-GENERATOR/test-03-issue-14319.expected/90-enp3s0.network b/test/test-network-generator-conversion/test-03-issue-14319.expected/90-enp3s0.network similarity index 100% rename from test/TEST-35-NETWORK-GENERATOR/test-03-issue-14319.expected/90-enp3s0.network rename to test/test-network-generator-conversion/test-03-issue-14319.expected/90-enp3s0.network diff --git a/test/TEST-35-NETWORK-GENERATOR/test-03-issue-14319.input b/test/test-network-generator-conversion/test-03-issue-14319.input similarity index 100% rename from test/TEST-35-NETWORK-GENERATOR/test-03-issue-14319.input rename to test/test-network-generator-conversion/test-03-issue-14319.input diff --git a/test/testdata b/test/testdata new file mode 120000 index 0000000000..945c9b46d6 --- /dev/null +++ b/test/testdata @@ -0,0 +1 @@ +. \ No newline at end of file From 097d8c6eb7909d9ecd49562855bb8c9a9e59cefb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Tue, 10 Dec 2019 09:54:36 +0100 Subject: [PATCH 48/78] test: move TEST-36-NUMAPOLICY setup to static files No need to call setup_nspawn_root() if we plan to only run under qemu. --- test/TEST-36-NUMAPOLICY/test.sh | 17 +---------------- test/units/testsuite-36.service | 6 ++++++ .../testsuite.sh => units/testsuite-36.sh} | 0 3 files changed, 7 insertions(+), 16 deletions(-) create mode 100644 test/units/testsuite-36.service rename test/{TEST-36-NUMAPOLICY/testsuite.sh => units/testsuite-36.sh} (100%) diff --git a/test/TEST-36-NUMAPOLICY/test.sh b/test/TEST-36-NUMAPOLICY/test.sh index 29addc958b..1956d5271d 100755 --- a/test/TEST-36-NUMAPOLICY/test.sh +++ b/test/TEST-36-NUMAPOLICY/test.sh @@ -16,22 +16,7 @@ test_setup() { setup_basic_environment mask_supporting_services - dracut_install mktemp - - # setup the testsuite service - cat >$initdir/etc/systemd/system/testsuite.service < Date: Sat, 21 Mar 2020 11:17:30 +0100 Subject: [PATCH 49/78] test/TEST-36: move the config files to /run This way we always start with a clean slate when running the test repeatedly. --- test/units/testsuite-36.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/units/testsuite-36.sh b/test/units/testsuite-36.sh index bd04bb2efe..d04751b3f0 100755 --- a/test/units/testsuite-36.sh +++ b/test/units/testsuite-36.sh @@ -22,7 +22,7 @@ journalLog='journal.log' # Systemd config files testUnit='numa-test.service' -testUnitFile="/etc/systemd/system/$testUnit" +testUnitFile="/run/systemd/system/$testUnit" testUnitNUMAConf="$testUnitFile.d/numa.conf" # Sleep constants (we should probably figure out something better but nothing comes to mind) @@ -70,9 +70,9 @@ writePID1NUMAPolicy() { } writeTestUnit() { + mkdir -p $testUnitFile.d/ echo [Service] > $testUnitFile echo ExecStart=/bin/sleep 3600 >> $testUnitFile - mkdir -p $testUnitFile.d/ } writeTestUnitNUMAPolicy() { @@ -129,7 +129,7 @@ systemctlCheckNUMAProperties() { writeTestUnit # Create systemd config drop-in directory -confDir="/etc/systemd/system.conf.d/" +confDir="/run/systemd/system.conf.d/" mkdir -p "$confDir" if ! checkNUMA; then From 4db7d044b8f2cb3e652fbaa19aa09e87c9b74834 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Tue, 10 Dec 2019 09:58:50 +0100 Subject: [PATCH 50/78] test: move TEST-37-RUNTIMEDIRECTORYPRESERVE setup to static files --- test/TEST-37-RUNTIMEDIRECTORYPRESERVE/test.sh | 17 ++--------------- test/units/testsuite-37.service | 6 ++++++ .../testsuite.sh => units/testsuite-37.sh} | 0 3 files changed, 8 insertions(+), 15 deletions(-) create mode 100644 test/units/testsuite-37.service rename test/{TEST-37-RUNTIMEDIRECTORYPRESERVE/testsuite.sh => units/testsuite-37.sh} (100%) diff --git a/test/TEST-37-RUNTIMEDIRECTORYPRESERVE/test.sh b/test/TEST-37-RUNTIMEDIRECTORYPRESERVE/test.sh index 2c5ad430b5..44f77bc6a0 100755 --- a/test/TEST-37-RUNTIMEDIRECTORYPRESERVE/test.sh +++ b/test/TEST-37-RUNTIMEDIRECTORYPRESERVE/test.sh @@ -15,21 +15,8 @@ test_setup() { setup_basic_environment mask_supporting_services - - # setup the testsuite service - cat >$initdir/etc/systemd/system/testsuite.service < Date: Tue, 10 Dec 2019 10:02:10 +0100 Subject: [PATCH 51/78] test: move TEST-39-EXECRELOAD setup to static files --- test/TEST-39-EXECRELOAD/test.sh | 16 +--------------- test/units/testsuite-39.service | 6 ++++++ .../testsuite.sh => units/testsuite-39.sh} | 0 3 files changed, 7 insertions(+), 15 deletions(-) create mode 100644 test/units/testsuite-39.service rename test/{TEST-39-EXECRELOAD/testsuite.sh => units/testsuite-39.sh} (100%) mode change 100644 => 100755 diff --git a/test/TEST-39-EXECRELOAD/test.sh b/test/TEST-39-EXECRELOAD/test.sh index ac1d0c9cf6..35cabff5ea 100755 --- a/test/TEST-39-EXECRELOAD/test.sh +++ b/test/TEST-39-EXECRELOAD/test.sh @@ -14,22 +14,8 @@ test_setup() { setup_basic_environment mask_supporting_services - dracut_install mktemp - - # setup the testsuite service - cat >$initdir/etc/systemd/system/testsuite.service < Date: Tue, 10 Dec 2019 10:08:09 +0100 Subject: [PATCH 52/78] test: move TEST-40-EXEC-COMMAND-EX setup to static files --- test/TEST-40-EXEC-COMMAND-EX/test.sh | 15 +-------------- test/units/testsuite-40.service | 6 ++++++ .../testsuite.sh => units/testsuite-40.sh} | 0 3 files changed, 7 insertions(+), 14 deletions(-) create mode 100644 test/units/testsuite-40.service rename test/{TEST-40-EXEC-COMMAND-EX/testsuite.sh => units/testsuite-40.sh} (100%) diff --git a/test/TEST-40-EXEC-COMMAND-EX/test.sh b/test/TEST-40-EXEC-COMMAND-EX/test.sh index a7933b0070..eae4e37c96 100755 --- a/test/TEST-40-EXEC-COMMAND-EX/test.sh +++ b/test/TEST-40-EXEC-COMMAND-EX/test.sh @@ -13,21 +13,8 @@ test_setup() { setup_basic_environment mask_supporting_services - - # setup the testsuite service - cat >$initdir/etc/systemd/system/testsuite.service < Date: Tue, 10 Dec 2019 10:09:53 +0100 Subject: [PATCH 53/78] test: move TEST-41-ONESHOT-RESTART setup to static files --- test/TEST-41-ONESHOT-RESTART/test.sh | 15 +-------------- test/units/testsuite-41.service | 6 ++++++ .../testsuite.sh => units/testsuite-41.sh} | 0 3 files changed, 7 insertions(+), 14 deletions(-) create mode 100644 test/units/testsuite-41.service rename test/{TEST-41-ONESHOT-RESTART/testsuite.sh => units/testsuite-41.sh} (100%) diff --git a/test/TEST-41-ONESHOT-RESTART/test.sh b/test/TEST-41-ONESHOT-RESTART/test.sh index 54292c0ca2..c94d181a30 100755 --- a/test/TEST-41-ONESHOT-RESTART/test.sh +++ b/test/TEST-41-ONESHOT-RESTART/test.sh @@ -12,21 +12,8 @@ test_setup() { setup_basic_environment mask_supporting_services - - # setup the testsuite service - cat >$initdir/etc/systemd/system/testsuite.service < Date: Fri, 20 Mar 2020 21:59:54 +0100 Subject: [PATCH 54/78] test/TEST-41: use a file in /tmp and reset the contents If the test was run a second time from the same root, it would fail. --- test/units/testsuite-41.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/units/testsuite-41.sh b/test/units/testsuite-41.sh index 905f32e994..e3c5f1dad6 100755 --- a/test/units/testsuite-41.sh +++ b/test/units/testsuite-41.sh @@ -19,9 +19,9 @@ if [[ "$(systemctl show one.service -p NRestarts --value)" -le 0 ]]; then exit 1 fi -TMP_FILE="/test-41-oneshot-restart-test" +TMP_FILE="/tmp/test-41-oneshot-restart-test" -touch $TMP_FILE +: >$TMP_FILE # test two: make sure StartLimitBurst correctly limits the number of restarts # and restarts execution of the unit from the first ExecStart= From bdfd515ad14913588be18b2bff8290842cec95d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Tue, 10 Dec 2019 11:49:39 +0100 Subject: [PATCH 55/78] test: move TEST-42-EXECSTOPPOST setup to static files --- test/TEST-42-EXECSTOPPOST/test.sh | 31 +------------------ test/test-functions | 13 ++++++++ test/units/testsuite-42.service | 8 +++++ .../testsuite.sh => units/testsuite-42.sh} | 0 4 files changed, 22 insertions(+), 30 deletions(-) create mode 100644 test/units/testsuite-42.service rename test/{TEST-42-EXECSTOPPOST/testsuite.sh => units/testsuite-42.sh} (100%) diff --git a/test/TEST-42-EXECSTOPPOST/test.sh b/test/TEST-42-EXECSTOPPOST/test.sh index 0c393597c7..e143fb6288 100755 --- a/test/TEST-42-EXECSTOPPOST/test.sh +++ b/test/TEST-42-EXECSTOPPOST/test.sh @@ -12,38 +12,9 @@ test_setup() { eval $(udevadm info --export --query=env --name=${LOOPDEV}p2) setup_basic_environment - mask_supporting_services - - # setup policy for Type=dbus test - mkdir -p $initdir/etc/dbus-1/system.d - cat > $initdir/etc/dbus-1/system.d/systemd.test.ExecStopPost.conf < - - - - - - -EOF - - # setup the testsuite service - cat >$initdir/etc/systemd/system/testsuite.service < $initdir/etc/dbus-1/system.d/systemd.test.ExecStopPost.conf < + + + + + + +EOF } install_user_dbus() { diff --git a/test/units/testsuite-42.service b/test/units/testsuite-42.service new file mode 100644 index 0000000000..d5d102fd91 --- /dev/null +++ b/test/units/testsuite-42.service @@ -0,0 +1,8 @@ +[Unit] +Description=TEST-42-EXECSTOPPOST +Before=getty-pre.target +Wants=getty-pre.target + +[Service] +ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh +Type=oneshot diff --git a/test/TEST-42-EXECSTOPPOST/testsuite.sh b/test/units/testsuite-42.sh similarity index 100% rename from test/TEST-42-EXECSTOPPOST/testsuite.sh rename to test/units/testsuite-42.sh From d0ac89a1e8bd0b434eaa68aa010ebc1bc621c5fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Fri, 20 Mar 2020 19:05:36 +0100 Subject: [PATCH 56/78] test: move TEST-43-* setup to static files Setup of lingering is dropped. I don't think it's necessary for anything, because the unit is still pulled in from the testsuite service. --- test/TEST-43-PRIVATEUSER-UNPRIV/test.sh | 30 +------------------ test/test-functions | 27 +++++++++-------- test/units/testsuite-43.service | 8 +++++ .../testsuite.sh => units/testsuite-43.sh} | 0 4 files changed, 23 insertions(+), 42 deletions(-) create mode 100644 test/units/testsuite-43.service rename test/{TEST-43-PRIVATEUSER-UNPRIV/testsuite.sh => units/testsuite-43.sh} (100%) diff --git a/test/TEST-43-PRIVATEUSER-UNPRIV/test.sh b/test/TEST-43-PRIVATEUSER-UNPRIV/test.sh index 3b40bf7d8b..4eed8242fd 100755 --- a/test/TEST-43-PRIVATEUSER-UNPRIV/test.sh +++ b/test/TEST-43-PRIVATEUSER-UNPRIV/test.sh @@ -11,39 +11,11 @@ test_setup() { eval $(udevadm info --export --query=env --name=${LOOPDEV}p2) setup_basic_environment - inst_binary stat - mask_supporting_services - - # Allocate user for running test case under - mkdir -p $initdir/etc/sysusers.d - cat >$initdir/etc/sysusers.d/testuser.conf <$initdir/etc/systemd/system/testsuite.service <$initdir/etc/sysusers.d/testuser.conf < Date: Fri, 20 Mar 2020 19:15:09 +0100 Subject: [PATCH 57/78] test: move TEST-44-* to static files --- test/TEST-44-LOG-NAMESPACE/test.sh | 21 +------------------ test/units/testsuite-44.service | 11 ++++++++++ .../testsuite.sh => units/testsuite-44.sh} | 0 3 files changed, 12 insertions(+), 20 deletions(-) create mode 100644 test/units/testsuite-44.service rename test/{TEST-44-LOG-NAMESPACE/testsuite.sh => units/testsuite-44.sh} (100%) diff --git a/test/TEST-44-LOG-NAMESPACE/test.sh b/test/TEST-44-LOG-NAMESPACE/test.sh index c2070f2b61..2ef0c244ac 100755 --- a/test/TEST-44-LOG-NAMESPACE/test.sh +++ b/test/TEST-44-LOG-NAMESPACE/test.sh @@ -12,28 +12,9 @@ test_setup() { eval $(udevadm info --export --query=env --name=${LOOPDEV}p2) setup_basic_environment - mask_supporting_services - - # setup the testsuite service - cat >$initdir/etc/systemd/system/testsuite.service < Date: Fri, 20 Mar 2020 20:22:42 +0100 Subject: [PATCH 58/78] test: convert TEST-45 to a normal meson test On my laptop, it now takes 0.23 s. We don't need the overhead of creating an image and spawning a machine to mangle a file in /tmp. --- meson.build | 8 ++- src/partition/meson.build | 2 + src/partition/test-repart.sh | 111 ++++++++++++++++++++++++++++ test/TEST-45-REPART/Makefile | 1 - test/TEST-45-REPART/test.sh | 37 ---------- test/TEST-45-REPART/testsuite.sh | 120 ------------------------------- test/test-functions | 3 + 7 files changed, 123 insertions(+), 159 deletions(-) create mode 100755 src/partition/test-repart.sh delete mode 120000 test/TEST-45-REPART/Makefile delete mode 100755 test/TEST-45-REPART/test.sh delete mode 100755 test/TEST-45-REPART/testsuite.sh diff --git a/meson.build b/meson.build index 360318b7d8..d3bdfada85 100644 --- a/meson.build +++ b/meson.build @@ -2506,7 +2506,7 @@ if conf.get('ENABLE_BINFMT') == 1 endif if conf.get('ENABLE_REPART') == 1 - executable('systemd-repart', + exe = executable('systemd-repart', systemd_repart_sources, include_directories : includes, link_with : [libshared], @@ -2518,6 +2518,12 @@ if conf.get('ENABLE_REPART') == 1 install_rpath : rootlibexecdir, install : true, install_dir : rootbindir) + + if want_tests != 'false' + test('test-repart', + test_repart_sh, + args : exe.full_path()) + endif endif if conf.get('ENABLE_VCONSOLE') == 1 diff --git a/src/partition/meson.build b/src/partition/meson.build index d0c111a473..3a75d5712d 100644 --- a/src/partition/meson.build +++ b/src/partition/meson.build @@ -3,3 +3,5 @@ systemd_repart_sources = files(''' repart.c '''.split()) + +test_repart_sh = find_program('test-repart.sh') diff --git a/src/partition/test-repart.sh b/src/partition/test-repart.sh new file mode 100755 index 0000000000..7da6b1b027 --- /dev/null +++ b/src/partition/test-repart.sh @@ -0,0 +1,111 @@ +#!/usr/bin/env bash +set -ex + +repart=$1 +test -x $repart + +D=$(mktemp --directory) +trap "rm -rf '$D'" EXIT INT QUIT PIPE +mkdir -p $D/definitions + +truncate -s 1G $D/zzz + +SEED=e2a40bf9-73f1-4278-9160-49c031e7aef8 + +$repart $D/zzz --empty=force --dry-run=no --seed=$SEED + +sfdisk -d $D/zzz | grep -v -e 'sector-size' -e '^$' > $D/empty + +cmp $D/empty - <$D/definitions/root.conf <$D/definitions/home.conf < $D/definitions/swap.conf <$D/populated + +cmp $D/populated - <$D/definitions/swap.conf <$D/definitions/extra.conf <$D/populated2 + +cmp $D/populated2 - <$D/populated3 + +cmp $D/populated3 - <$initdir/etc/systemd/system/testsuite.service < /testok - exit 0 -fi - -systemd-analyze log-level debug - -truncate -s 1G /tmp/zzz - -SEED=e2a40bf9-73f1-4278-9160-49c031e7aef8 - -systemd-repart /tmp/zzz --empty=force --dry-run=no --seed=$SEED - -sfdisk -d /tmp/zzz | grep -v -e 'sector-size' -e '^$' > /tmp/empty - -cmp /tmp/empty - < /tmp/definitions/root.conf < /tmp/definitions/home.conf < /tmp/definitions/swap.conf < /tmp/populated - -cmp /tmp/populated - < /tmp/definitions/swap.conf < /tmp/definitions/extra.conf < /tmp/populated2 - -cmp /tmp/populated2 - < /tmp/populated3 - -cmp /tmp/populated3 - < /testok - -exit 0 diff --git a/test/test-functions b/test/test-functions index 6043192a01..47ffba8fd6 100644 --- a/test/test-functions +++ b/test/test-functions @@ -61,6 +61,7 @@ BASICTOOLS=( false getent getfacl + grep gunzip gzip head @@ -85,6 +86,7 @@ BASICTOOLS=( seq setfont setsid + sfdisk sh sleep socat @@ -99,6 +101,7 @@ BASICTOOLS=( touch tr true + truncate umount uname unshare From 2c75449a3855cad34f2e3624c6321a4c2c807468 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Fri, 20 Mar 2020 19:52:41 +0100 Subject: [PATCH 59/78] test: move TEST-46-HOMED to static files --- test/TEST-46-HOMED/test.sh | 18 +----------------- test/units/testsuite-46.service | 9 +++++++++ .../testsuite.sh => units/testsuite-46.sh} | 0 3 files changed, 10 insertions(+), 17 deletions(-) create mode 100644 test/units/testsuite-46.service rename test/{TEST-46-HOMED/testsuite.sh => units/testsuite-46.sh} (100%) diff --git a/test/TEST-46-HOMED/test.sh b/test/TEST-46-HOMED/test.sh index 99fd5b85b8..5e87cf6143 100755 --- a/test/TEST-46-HOMED/test.sh +++ b/test/TEST-46-HOMED/test.sh @@ -16,22 +16,6 @@ test_setup() { setup_basic_environment mask_supporting_services - - # setup the testsuite service - cat >$initdir/etc/systemd/system/testsuite.service < Date: Fri, 20 Mar 2020 19:57:54 +0100 Subject: [PATCH 60/78] test: move TEST-47-* to static files --- test/TEST-47-ISSUE-14566/test.sh | 41 +------------------ test/units/testsuite-47-repro.service | 7 ++++ .../repro.sh => units/testsuite-47-repro.sh} | 2 +- test/units/testsuite-47.service | 6 +++ .../testsuite.sh => units/testsuite-47.sh} | 8 ++-- 5 files changed, 20 insertions(+), 44 deletions(-) create mode 100644 test/units/testsuite-47-repro.service rename test/{TEST-47-ISSUE-14566/repro.sh => units/testsuite-47-repro.sh} (71%) create mode 100644 test/units/testsuite-47.service rename test/{TEST-47-ISSUE-14566/testsuite.sh => units/testsuite-47.sh} (71%) diff --git a/test/TEST-47-ISSUE-14566/test.sh b/test/TEST-47-ISSUE-14566/test.sh index 35f862331c..11ae3d2524 100755 --- a/test/TEST-47-ISSUE-14566/test.sh +++ b/test/TEST-47-ISSUE-14566/test.sh @@ -1,43 +1,6 @@ -#!/bin/bash +#!/usr/bin/env bash set -e TEST_DESCRIPTION="Test that KillMode=mixed does not leave left over proccesses with ExecStopPost=" . $TEST_BASE_DIR/test-functions -test_setup() { - create_empty_image_rootdir - - ( - LOG_LEVEL=5 - eval $(udevadm info --export --query=env --name=${LOOPDEV}p2) - - setup_basic_environment - mask_supporting_services - - # setup the testsuite service - cat >$initdir/etc/systemd/system/testsuite.service < $initdir/etc/systemd/system/issue_14566_test.service << EOF -[Unit] -Description=Issue 14566 Repro - -[Service] -ExecStart=/repro.sh -ExecStopPost=/bin/true -KillMode=mixed -EOF - - cp testsuite.sh $initdir/ - cp repro.sh $initdir/ - - setup_testsuite - ) - setup_nspawn_root -} - -do_test "$@" +do_test "$@" 47 diff --git a/test/units/testsuite-47-repro.service b/test/units/testsuite-47-repro.service new file mode 100644 index 0000000000..655eea68e5 --- /dev/null +++ b/test/units/testsuite-47-repro.service @@ -0,0 +1,7 @@ +[Unit] +Description=Issue 14566 Repro + +[Service] +ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh +ExecStopPost=/bin/true +KillMode=mixed diff --git a/test/TEST-47-ISSUE-14566/repro.sh b/test/units/testsuite-47-repro.sh similarity index 71% rename from test/TEST-47-ISSUE-14566/repro.sh rename to test/units/testsuite-47-repro.sh index 5217602257..8c34289c52 100755 --- a/test/TEST-47-ISSUE-14566/repro.sh +++ b/test/units/testsuite-47-repro.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash sleep infinity & echo $! > /leakedtestpid diff --git a/test/units/testsuite-47.service b/test/units/testsuite-47.service new file mode 100644 index 0000000000..b6015e27cc --- /dev/null +++ b/test/units/testsuite-47.service @@ -0,0 +1,6 @@ +[Unit] +Description=TEST-47-ISSUE-14566 + +[Service] +ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh +Type=oneshot diff --git a/test/TEST-47-ISSUE-14566/testsuite.sh b/test/units/testsuite-47.sh similarity index 71% rename from test/TEST-47-ISSUE-14566/testsuite.sh rename to test/units/testsuite-47.sh index a0ba32530e..09be780a68 100755 --- a/test/TEST-47-ISSUE-14566/testsuite.sh +++ b/test/units/testsuite-47.sh @@ -1,17 +1,17 @@ -#!/bin/bash +#!/usr/bin/env bash set -ex set -o pipefail systemd-analyze log-level debug systemd-analyze log-target console -systemctl start issue_14566_test +systemctl start testsuite-47-repro sleep 1 -systemctl status issue_14566_test +systemctl status testsuite-47-repro leaked_pid=$(cat /leakedtestpid) -systemctl stop issue_14566_test +systemctl stop testsuite-47-repro # Leaked PID will still be around if we're buggy. # I personally prefer to see 42. From 70ce817ccbd18cab761a72d54c0a115f34b4b151 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Tue, 10 Dec 2019 16:40:31 +0100 Subject: [PATCH 61/78] test: de-duplicate test_setup() functions Now we will run setup_nspawn_root() in some case where do don't need to. --- test/TEST-03-JOBS/test.sh | 14 -------------- test/TEST-04-JOURNAL/test.sh | 14 -------------- test/TEST-05-RLIMITS/test.sh | 14 -------------- test/TEST-07-ISSUE-1981/test.sh | 14 -------------- test/TEST-09-ISSUE-2691/test.sh | 13 ------------- test/TEST-10-ISSUE-2467/test.sh | 14 -------------- test/TEST-11-ISSUE-3166/test.sh | 13 ------------- test/TEST-12-ISSUE-3171/test.sh | 15 --------------- test/TEST-15-DROPIN/test.sh | 9 --------- test/TEST-16-EXTEND-TIMEOUT/test.sh | 14 -------------- test/TEST-17-UDEV-WANTS/test.sh | 12 ------------ test/TEST-18-FAILUREACTION/test.sh | 14 -------------- test/TEST-19-DELEGATE/test.sh | 12 ------------ test/TEST-20-MAINPIDGAMES/test.sh | 14 -------------- test/TEST-22-TMPFILES/test.sh | 10 ---------- test/TEST-23-TYPE-EXEC/test.sh | 14 -------------- test/TEST-24-UNIT-TESTS/test.sh | 19 ------------------- test/TEST-25-IMPORT/test.sh | 13 ------------- test/TEST-26-SETENV/test.sh | 13 ------------- test/TEST-27-STDOUTFILE/test.sh | 13 ------------- test/TEST-28-PERCENTJ-WANTEDBY/test.sh | 14 -------------- test/TEST-29-UDEV-ID_RENAMING/test.sh | 12 ------------ test/TEST-30-ONCLOCKCHANGE/test.sh | 13 ------------- test/TEST-31-DEVICE-ENUMERATION/test.sh | 12 ------------ test/TEST-32-OOMPOLICY/test.sh | 13 ------------- test/TEST-33-CLEAN-UNIT/test.sh | 14 -------------- test/TEST-34-DYNAMICUSERMIGRATE/test.sh | 14 -------------- test/TEST-36-NUMAPOLICY/test.sh | 13 ------------- test/TEST-37-RUNTIMEDIRECTORYPRESERVE/test.sh | 14 -------------- test/TEST-39-EXECRELOAD/test.sh | 15 --------------- test/TEST-40-EXEC-COMMAND-EX/test.sh | 14 -------------- test/TEST-41-ONESHOT-RESTART/test.sh | 13 ------------- test/TEST-42-EXECSTOPPOST/test.sh | 13 ------------- test/TEST-43-PRIVATEUSER-UNPRIV/test.sh | 13 ------------- test/TEST-44-LOG-NAMESPACE/test.sh | 13 ------------- test/TEST-46-HOMED/test.sh | 18 ------------------ test/test-functions | 19 +++++++++++++++++++ 37 files changed, 19 insertions(+), 486 deletions(-) diff --git a/test/TEST-03-JOBS/test.sh b/test/TEST-03-JOBS/test.sh index 8b12e5ba9d..33a1fb6fd0 100755 --- a/test/TEST-03-JOBS/test.sh +++ b/test/TEST-03-JOBS/test.sh @@ -5,18 +5,4 @@ TEST_NO_QEMU=1 . $TEST_BASE_DIR/test-functions -test_setup() { - create_empty_image_rootdir - - # Create what will eventually be our root filesystem onto an overlay - ( - LOG_LEVEL=5 - eval $(udevadm info --export --query=env --name=${LOOPDEV}p2) - - setup_basic_environment - mask_supporting_services - ) - setup_nspawn_root -} - do_test "$@" 03 diff --git a/test/TEST-04-JOURNAL/test.sh b/test/TEST-04-JOURNAL/test.sh index 868ac28aa1..f16543c2b4 100755 --- a/test/TEST-04-JOURNAL/test.sh +++ b/test/TEST-04-JOURNAL/test.sh @@ -4,18 +4,4 @@ TEST_DESCRIPTION="Journal-related tests" . $TEST_BASE_DIR/test-functions -test_setup() { - create_empty_image_rootdir - - # Create what will eventually be our root filesystem onto an overlay - ( - LOG_LEVEL=5 - eval $(udevadm info --export --query=env --name=${LOOPDEV}p2) - - setup_basic_environment - mask_supporting_services - ) - setup_nspawn_root -} - do_test "$@" 04 diff --git a/test/TEST-05-RLIMITS/test.sh b/test/TEST-05-RLIMITS/test.sh index 6412188ef2..463fe42a7c 100755 --- a/test/TEST-05-RLIMITS/test.sh +++ b/test/TEST-05-RLIMITS/test.sh @@ -4,18 +4,4 @@ TEST_DESCRIPTION="Resource limits-related tests" . $TEST_BASE_DIR/test-functions -test_setup() { - create_empty_image_rootdir - - # Create what will eventually be our root filesystem onto an overlay - ( - LOG_LEVEL=5 - eval $(udevadm info --export --query=env --name=${LOOPDEV}p2) - - setup_basic_environment - mask_supporting_services - ) - setup_nspawn_root -} - do_test "$@" 05 diff --git a/test/TEST-07-ISSUE-1981/test.sh b/test/TEST-07-ISSUE-1981/test.sh index 3495951bfa..5da24a987c 100755 --- a/test/TEST-07-ISSUE-1981/test.sh +++ b/test/TEST-07-ISSUE-1981/test.sh @@ -7,18 +7,4 @@ TEST_NO_QEMU=1 NSPAWN_TIMEOUT=30 -test_setup() { - create_empty_image_rootdir - - # Create what will eventually be our root filesystem onto an overlay - ( - LOG_LEVEL=5 - eval $(udevadm info --export --query=env --name=${LOOPDEV}p2) - - setup_basic_environment - mask_supporting_services - ) - setup_nspawn_root -} - do_test "$@" 07 diff --git a/test/TEST-09-ISSUE-2691/test.sh b/test/TEST-09-ISSUE-2691/test.sh index 753a4a9868..a4d155be1d 100755 --- a/test/TEST-09-ISSUE-2691/test.sh +++ b/test/TEST-09-ISSUE-2691/test.sh @@ -6,17 +6,4 @@ TEST_NO_NSPAWN=1 . $TEST_BASE_DIR/test-functions QEMU_TIMEOUT=300 -test_setup() { - create_empty_image_rootdir - - # Create what will eventually be our root filesystem onto an overlay - ( - LOG_LEVEL=5 - eval $(udevadm info --export --query=env --name=${LOOPDEV}p2) - - setup_basic_environment - mask_supporting_services - ) -} - do_test "$@" 09 diff --git a/test/TEST-10-ISSUE-2467/test.sh b/test/TEST-10-ISSUE-2467/test.sh index 4cd7adf6bb..14ded56ba1 100755 --- a/test/TEST-10-ISSUE-2467/test.sh +++ b/test/TEST-10-ISSUE-2467/test.sh @@ -4,18 +4,4 @@ TEST_DESCRIPTION="https://github.com/systemd/systemd/issues/2467" . $TEST_BASE_DIR/test-functions -test_setup() { - create_empty_image_rootdir - - # Create what will eventually be our root filesystem onto an overlay - ( - LOG_LEVEL=5 - eval $(udevadm info --export --query=env --name=${LOOPDEV}p2) - - setup_basic_environment - mask_supporting_services - ) - setup_nspawn_root -} - do_test "$@" 10 diff --git a/test/TEST-11-ISSUE-3166/test.sh b/test/TEST-11-ISSUE-3166/test.sh index 0fe0eaeed1..da003c90d5 100755 --- a/test/TEST-11-ISSUE-3166/test.sh +++ b/test/TEST-11-ISSUE-3166/test.sh @@ -5,17 +5,4 @@ TEST_NO_NSPAWN=1 . $TEST_BASE_DIR/test-functions -test_setup() { - create_empty_image_rootdir - - # Create what will eventually be our root filesystem onto an overlay - ( - LOG_LEVEL=5 - eval $(udevadm info --export --query=env --name=${LOOPDEV}p2) - - setup_basic_environment - mask_supporting_services - ) -} - do_test "$@" 11 diff --git a/test/TEST-12-ISSUE-3171/test.sh b/test/TEST-12-ISSUE-3171/test.sh index c78fe525c3..c8abefbd86 100755 --- a/test/TEST-12-ISSUE-3171/test.sh +++ b/test/TEST-12-ISSUE-3171/test.sh @@ -5,19 +5,4 @@ TEST_NO_QEMU=1 . $TEST_BASE_DIR/test-functions -test_setup() { - create_empty_image_rootdir - - # Create what will eventually be our root filesystem onto an overlay - ( - LOG_LEVEL=5 - eval $(udevadm info --export --query=env --name=${LOOPDEV}p2) - - setup_basic_environment - mask_supporting_services - ) - - setup_nspawn_root -} - do_test "$@" 12 diff --git a/test/TEST-15-DROPIN/test.sh b/test/TEST-15-DROPIN/test.sh index 42d6c3dd79..1540e2e1f1 100755 --- a/test/TEST-15-DROPIN/test.sh +++ b/test/TEST-15-DROPIN/test.sh @@ -5,13 +5,4 @@ TEST_NO_QEMU=1 . $TEST_BASE_DIR/test-functions -test_setup() { - # create the basic filesystem layout - setup_basic_environment - mask_supporting_services - - # create dedicated rootfs for nspawn (located in $TESTDIR/nspawn-root) - setup_nspawn_root -} - do_test "$@" 15 diff --git a/test/TEST-16-EXTEND-TIMEOUT/test.sh b/test/TEST-16-EXTEND-TIMEOUT/test.sh index 474b9db2fc..e1e2a68fa9 100755 --- a/test/TEST-16-EXTEND-TIMEOUT/test.sh +++ b/test/TEST-16-EXTEND-TIMEOUT/test.sh @@ -6,18 +6,4 @@ TEST_NO_QEMU=1 . $TEST_BASE_DIR/test-functions -test_setup() { - create_empty_image - - # Create what will eventually be our root filesystem onto an overlay - ( - eval $(udevadm info --export --query=env --name=${LOOPDEV}p2) - - setup_basic_environment - mask_supporting_services - ) - - setup_nspawn_root -} - do_test "$@" 16 diff --git a/test/TEST-17-UDEV-WANTS/test.sh b/test/TEST-17-UDEV-WANTS/test.sh index a5a2eb3d29..5b8f22cbaa 100755 --- a/test/TEST-17-UDEV-WANTS/test.sh +++ b/test/TEST-17-UDEV-WANTS/test.sh @@ -6,16 +6,4 @@ TEST_NO_NSPAWN=1 . $TEST_BASE_DIR/test-functions QEMU_TIMEOUT=300 -test_setup() { - create_empty_image_rootdir - - ( - LOG_LEVEL=5 - eval $(udevadm info --export --query=env --name=${LOOPDEV}p2) - - setup_basic_environment - mask_supporting_services - ) -} - do_test "$@" 17 diff --git a/test/TEST-18-FAILUREACTION/test.sh b/test/TEST-18-FAILUREACTION/test.sh index a9315466f9..5c386b8ea2 100755 --- a/test/TEST-18-FAILUREACTION/test.sh +++ b/test/TEST-18-FAILUREACTION/test.sh @@ -5,18 +5,4 @@ TEST_DESCRIPTION="FailureAction= operation" . $TEST_BASE_DIR/test-functions QEMU_TIMEOUT=600 -test_setup() { - create_empty_image_rootdir - - ( - LOG_LEVEL=5 - eval $(udevadm info --export --query=env --name=${LOOPDEV}p2) - - setup_basic_environment - mask_supporting_services - ) - - setup_nspawn_root -} - do_test "$@" 18 diff --git a/test/TEST-19-DELEGATE/test.sh b/test/TEST-19-DELEGATE/test.sh index 872df15615..03c7760bfd 100755 --- a/test/TEST-19-DELEGATE/test.sh +++ b/test/TEST-19-DELEGATE/test.sh @@ -7,16 +7,4 @@ TEST_NO_NSPAWN=1 QEMU_TIMEOUT=600 UNIFIED_CGROUP_HIERARCHY=yes -test_setup() { - create_empty_image_rootdir - - ( - LOG_LEVEL=5 - eval $(udevadm info --export --query=env --name=${LOOPDEV}p2) - - setup_basic_environment - mask_supporting_services - ) -} - do_test "$@" 19 diff --git a/test/TEST-20-MAINPIDGAMES/test.sh b/test/TEST-20-MAINPIDGAMES/test.sh index d6abbadb2b..50724b3f3c 100755 --- a/test/TEST-20-MAINPIDGAMES/test.sh +++ b/test/TEST-20-MAINPIDGAMES/test.sh @@ -4,18 +4,4 @@ TEST_DESCRIPTION="test changing main PID" . $TEST_BASE_DIR/test-functions -test_setup() { - create_empty_image_rootdir - - ( - LOG_LEVEL=5 - eval $(udevadm info --export --query=env --name=${LOOPDEV}p2) - - setup_basic_environment - mask_supporting_services - ) - - setup_nspawn_root -} - do_test "$@" 20 diff --git a/test/TEST-22-TMPFILES/test.sh b/test/TEST-22-TMPFILES/test.sh index 5ab688e4ac..317e4a88f7 100755 --- a/test/TEST-22-TMPFILES/test.sh +++ b/test/TEST-22-TMPFILES/test.sh @@ -2,16 +2,6 @@ set -e TEST_DESCRIPTION="Tmpfiles related tests" TEST_NO_QEMU=1 - . $TEST_BASE_DIR/test-functions -test_setup() { - # create the basic filesystem layout - setup_basic_environment - mask_supporting_services - - # create dedicated rootfs for nspawn (located in $TESTDIR/nspawn-root) - setup_nspawn_root -} - do_test "$@" 22 diff --git a/test/TEST-23-TYPE-EXEC/test.sh b/test/TEST-23-TYPE-EXEC/test.sh index bafbef0319..1b0d25a721 100755 --- a/test/TEST-23-TYPE-EXEC/test.sh +++ b/test/TEST-23-TYPE-EXEC/test.sh @@ -1,20 +1,6 @@ #!/usr/bin/env bash set -e TEST_DESCRIPTION="test Type=exec" - . $TEST_BASE_DIR/test-functions -test_setup() { - create_empty_image_rootdir - - ( - LOG_LEVEL=5 - eval $(udevadm info --export --query=env --name=${LOOPDEV}p2) - - setup_basic_environment - mask_supporting_services - ) - setup_nspawn_root -} - do_test "$@" 23 diff --git a/test/TEST-24-UNIT-TESTS/test.sh b/test/TEST-24-UNIT-TESTS/test.sh index 7b07a9ee5c..06b6cebf4f 100755 --- a/test/TEST-24-UNIT-TESTS/test.sh +++ b/test/TEST-24-UNIT-TESTS/test.sh @@ -52,23 +52,4 @@ check_result_qemu() { return $_ret } -test_setup() { - if type -P meson && [[ "$(meson configure $BUILD_DIR | grep install-tests | awk '{ print $2 }')" != "true" ]]; then - dfatal "Needs to be built with -Dinstall-tests=true" - exit 1 - fi - - create_empty_image_rootdir - - # Create what will eventually be our root filesystem onto an overlay - ( - LOG_LEVEL=5 - eval $(udevadm info --export --query=env --name=${LOOPDEV}p2) - - setup_basic_environment - mask_supporting_services - ) - setup_nspawn_root -} - do_test "$@" 24 diff --git a/test/TEST-25-IMPORT/test.sh b/test/TEST-25-IMPORT/test.sh index 977f984bd3..034b94ca79 100755 --- a/test/TEST-25-IMPORT/test.sh +++ b/test/TEST-25-IMPORT/test.sh @@ -4,17 +4,4 @@ TEST_DESCRIPTION="test importd" . $TEST_BASE_DIR/test-functions -test_setup() { - create_empty_image_rootdir - - ( - LOG_LEVEL=5 - eval $(udevadm info --export --query=env --name=${LOOPDEV}p2) - - setup_basic_environment - mask_supporting_services - ) - setup_nspawn_root -} - do_test "$@" 25 diff --git a/test/TEST-26-SETENV/test.sh b/test/TEST-26-SETENV/test.sh index 7b71fcda3a..158fa6fdc0 100755 --- a/test/TEST-26-SETENV/test.sh +++ b/test/TEST-26-SETENV/test.sh @@ -4,17 +4,4 @@ TEST_DESCRIPTION="test setenv" . $TEST_BASE_DIR/test-functions -test_setup() { - create_empty_image_rootdir - - ( - LOG_LEVEL=5 - eval $(udevadm info --export --query=env --name=${LOOPDEV}p2) - - setup_basic_environment - mask_supporting_services - ) - setup_nspawn_root -} - do_test "$@" 26 diff --git a/test/TEST-27-STDOUTFILE/test.sh b/test/TEST-27-STDOUTFILE/test.sh index 80c4b0920c..23aadf314e 100755 --- a/test/TEST-27-STDOUTFILE/test.sh +++ b/test/TEST-27-STDOUTFILE/test.sh @@ -4,17 +4,4 @@ TEST_DESCRIPTION="test StandardOutput=file:" . $TEST_BASE_DIR/test-functions -test_setup() { - create_empty_image_rootdir - - ( - LOG_LEVEL=5 - eval $(udevadm info --export --query=env --name=${LOOPDEV}p2) - - setup_basic_environment - mask_supporting_services - ) - setup_nspawn_root -} - do_test "$@" 27 diff --git a/test/TEST-28-PERCENTJ-WANTEDBY/test.sh b/test/TEST-28-PERCENTJ-WANTEDBY/test.sh index 477eb15cbe..09baf22776 100755 --- a/test/TEST-28-PERCENTJ-WANTEDBY/test.sh +++ b/test/TEST-28-PERCENTJ-WANTEDBY/test.sh @@ -5,18 +5,4 @@ RUN_IN_UNPRIVILEGED_CONTAINER=yes . $TEST_BASE_DIR/test-functions -test_setup() { - create_empty_image_rootdir - - # Create what will eventually be our root filesystem onto an overlay - ( - LOG_LEVEL=5 - eval $(udevadm info --export --query=env --name=${LOOPDEV}p2) - - setup_basic_environment - mask_supporting_services - ) - setup_nspawn_root -} - do_test "$@" 28 diff --git a/test/TEST-29-UDEV-ID_RENAMING/test.sh b/test/TEST-29-UDEV-ID_RENAMING/test.sh index b266ff9e56..4feafc04d7 100755 --- a/test/TEST-29-UDEV-ID_RENAMING/test.sh +++ b/test/TEST-29-UDEV-ID_RENAMING/test.sh @@ -6,16 +6,4 @@ TEST_NO_NSPAWN=1 . $TEST_BASE_DIR/test-functions QEMU_TIMEOUT=300 -test_setup() { - create_empty_image_rootdir - - ( - LOG_LEVEL=5 - eval $(udevadm info --export --query=env --name=${LOOPDEV}p2) - - setup_basic_environment - mask_supporting_services - ) -} - do_test "$@" 29 diff --git a/test/TEST-30-ONCLOCKCHANGE/test.sh b/test/TEST-30-ONCLOCKCHANGE/test.sh index 5b4133202f..4723e7b0be 100755 --- a/test/TEST-30-ONCLOCKCHANGE/test.sh +++ b/test/TEST-30-ONCLOCKCHANGE/test.sh @@ -2,19 +2,6 @@ set -e TEST_DESCRIPTION="test OnClockChange= + OnTimezoneChange=" TEST_NO_NSPAWN=1 - . $TEST_BASE_DIR/test-functions -test_setup() { - create_empty_image_rootdir - - ( - LOG_LEVEL=5 - eval $(udevadm info --export --query=env --name=${LOOPDEV}p2) - - setup_basic_environment - mask_supporting_services - ) -} - do_test "$@" 30 diff --git a/test/TEST-31-DEVICE-ENUMERATION/test.sh b/test/TEST-31-DEVICE-ENUMERATION/test.sh index b2565e0c96..4fbd38d2d0 100755 --- a/test/TEST-31-DEVICE-ENUMERATION/test.sh +++ b/test/TEST-31-DEVICE-ENUMERATION/test.sh @@ -6,16 +6,4 @@ TEST_NO_NSPAWN=1 . $TEST_BASE_DIR/test-functions QEMU_TIMEOUT=300 -test_setup() { - create_empty_image_rootdir - - ( - LOG_LEVEL=5 - eval $(udevadm info --export --query=env --name=${LOOPDEV}p2) - - setup_basic_environment - mask_supporting_services - ) -} - do_test "$@" 31 diff --git a/test/TEST-32-OOMPOLICY/test.sh b/test/TEST-32-OOMPOLICY/test.sh index 32fac7a289..6f2955cf62 100755 --- a/test/TEST-32-OOMPOLICY/test.sh +++ b/test/TEST-32-OOMPOLICY/test.sh @@ -2,21 +2,8 @@ set -e TEST_DESCRIPTION="test OOM killer logic" TEST_NO_NSPAWN=1 - . $TEST_BASE_DIR/test-functions UNIFIED_CGROUP_HIERARCHY=yes -test_setup() { - create_empty_image_rootdir - - ( - LOG_LEVEL=5 - eval $(udevadm info --export --query=env --name=${LOOPDEV}p2) - - setup_basic_environment - mask_supporting_services - ) -} - do_test "$@" 32 diff --git a/test/TEST-33-CLEAN-UNIT/test.sh b/test/TEST-33-CLEAN-UNIT/test.sh index fe2458b170..64cb6aee59 100755 --- a/test/TEST-33-CLEAN-UNIT/test.sh +++ b/test/TEST-33-CLEAN-UNIT/test.sh @@ -3,20 +3,6 @@ # ex: ts=8 sw=4 sts=4 et filetype=sh set -e TEST_DESCRIPTION="test CleanUnit" - . $TEST_BASE_DIR/test-functions -test_setup() { - create_empty_image_rootdir - - ( - LOG_LEVEL=5 - eval $(udevadm info --export --query=env --name=${LOOPDEV}p2) - - setup_basic_environment - mask_supporting_services - ) - setup_nspawn_root -} - do_test "$@" 33 diff --git a/test/TEST-34-DYNAMICUSERMIGRATE/test.sh b/test/TEST-34-DYNAMICUSERMIGRATE/test.sh index 97c8ab4350..0b2174a894 100755 --- a/test/TEST-34-DYNAMICUSERMIGRATE/test.sh +++ b/test/TEST-34-DYNAMICUSERMIGRATE/test.sh @@ -1,20 +1,6 @@ #!/usr/bin/env bash set -e TEST_DESCRIPTION="test migrating state directory from DynamicUser=1 to DynamicUser=0 and back" - . $TEST_BASE_DIR/test-functions -test_setup() { - create_empty_image_rootdir - - ( - LOG_LEVEL=5 - eval $(udevadm info --export --query=env --name=${LOOPDEV}p2) - - setup_basic_environment - mask_supporting_services - ) - setup_nspawn_root -} - do_test "$@" 34 diff --git a/test/TEST-36-NUMAPOLICY/test.sh b/test/TEST-36-NUMAPOLICY/test.sh index 1956d5271d..02f013568c 100755 --- a/test/TEST-36-NUMAPOLICY/test.sh +++ b/test/TEST-36-NUMAPOLICY/test.sh @@ -4,19 +4,6 @@ set -e TEST_DESCRIPTION="test MUMAPolicy= and NUMAMask= options" TEST_NO_NSPAWN=1 QEMU_OPTIONS="-numa node,nodeid=0" - . $TEST_BASE_DIR/test-functions -test_setup() { - create_empty_image_rootdir - - ( - LOG_LEVEL=5 - eval $(udevadm info --export --query=env --name=${LOOPDEV}p2) - - setup_basic_environment - mask_supporting_services - ) -} - do_test "$@" 36 diff --git a/test/TEST-37-RUNTIMEDIRECTORYPRESERVE/test.sh b/test/TEST-37-RUNTIMEDIRECTORYPRESERVE/test.sh index 44f77bc6a0..b5806c429f 100755 --- a/test/TEST-37-RUNTIMEDIRECTORYPRESERVE/test.sh +++ b/test/TEST-37-RUNTIMEDIRECTORYPRESERVE/test.sh @@ -3,20 +3,6 @@ # ex: ts=8 sw=4 sts=4 et filetype=sh set -e TEST_DESCRIPTION="test RuntimeDirectoryPreserve=yes" - . $TEST_BASE_DIR/test-functions -test_setup() { - create_empty_image_rootdir - - ( - LOG_LEVEL=5 - eval $(udevadm info --export --query=env --name=${LOOPDEV}p2) - - setup_basic_environment - mask_supporting_services - ) - setup_nspawn_root -} - do_test "$@" 37 diff --git a/test/TEST-39-EXECRELOAD/test.sh b/test/TEST-39-EXECRELOAD/test.sh index 35cabff5ea..e38a9902ce 100755 --- a/test/TEST-39-EXECRELOAD/test.sh +++ b/test/TEST-39-EXECRELOAD/test.sh @@ -1,21 +1,6 @@ #!/usr/bin/env bash set -e TEST_DESCRIPTION="Test ExecReload= (PR #13098)" - . $TEST_BASE_DIR/test-functions -test_setup() { - create_empty_image_rootdir - - # Create what will eventually be our root filesystem onto an overlay - ( - LOG_LEVEL=5 - eval $(udevadm info --export --query=env --name=${LOOPDEV}p2) - - setup_basic_environment - mask_supporting_services - ) - setup_nspawn_root -} - do_test "$@" 39 diff --git a/test/TEST-40-EXEC-COMMAND-EX/test.sh b/test/TEST-40-EXEC-COMMAND-EX/test.sh index eae4e37c96..4ee84d4d35 100755 --- a/test/TEST-40-EXEC-COMMAND-EX/test.sh +++ b/test/TEST-40-EXEC-COMMAND-EX/test.sh @@ -1,20 +1,6 @@ #!/usr/bin/env bash set -e TEST_DESCRIPTION="test ExecXYZEx= service unit dbus hookups" - . $TEST_BASE_DIR/test-functions -test_setup() { - create_empty_image_rootdir - - ( - LOG_LEVEL=5 - eval $(udevadm info --export --query=env --name=${LOOPDEV}p2) - - setup_basic_environment - mask_supporting_services - ) - setup_nspawn_root -} - do_test "$@" 40 diff --git a/test/TEST-41-ONESHOT-RESTART/test.sh b/test/TEST-41-ONESHOT-RESTART/test.sh index c94d181a30..d3f96ae107 100755 --- a/test/TEST-41-ONESHOT-RESTART/test.sh +++ b/test/TEST-41-ONESHOT-RESTART/test.sh @@ -3,17 +3,4 @@ set -e TEST_DESCRIPTION="Test oneshot unit restart on failure" . $TEST_BASE_DIR/test-functions -test_setup() { - create_empty_image_rootdir - - ( - LOG_LEVEL=5 - eval $(udevadm info --export --query=env --name=${LOOPDEV}p2) - - setup_basic_environment - mask_supporting_services - ) - setup_nspawn_root -} - do_test "$@" 41 diff --git a/test/TEST-42-EXECSTOPPOST/test.sh b/test/TEST-42-EXECSTOPPOST/test.sh index e143fb6288..53e6fa3dd0 100755 --- a/test/TEST-42-EXECSTOPPOST/test.sh +++ b/test/TEST-42-EXECSTOPPOST/test.sh @@ -4,17 +4,4 @@ TEST_DESCRIPTION="test that ExecStopPost= is always run" . $TEST_BASE_DIR/test-functions -test_setup() { - create_empty_image_rootdir - - ( - LOG_LEVEL=5 - eval $(udevadm info --export --query=env --name=${LOOPDEV}p2) - - setup_basic_environment - mask_supporting_services - ) - setup_nspawn_root -} - do_test "$@" 42 diff --git a/test/TEST-43-PRIVATEUSER-UNPRIV/test.sh b/test/TEST-43-PRIVATEUSER-UNPRIV/test.sh index 4eed8242fd..4749150ff1 100755 --- a/test/TEST-43-PRIVATEUSER-UNPRIV/test.sh +++ b/test/TEST-43-PRIVATEUSER-UNPRIV/test.sh @@ -3,19 +3,6 @@ set -e TEST_DESCRIPTION="Test PrivateUsers=yes on user manager" . $TEST_BASE_DIR/test-functions -test_setup() { - create_empty_image_rootdir - - ( - LOG_LEVEL=5 - eval $(udevadm info --export --query=env --name=${LOOPDEV}p2) - - setup_basic_environment - mask_supporting_services - ) - setup_nspawn_root -} - has_user_dbus_socket || exit 0 do_test "$@" 43 diff --git a/test/TEST-44-LOG-NAMESPACE/test.sh b/test/TEST-44-LOG-NAMESPACE/test.sh index 2ef0c244ac..26d863708e 100755 --- a/test/TEST-44-LOG-NAMESPACE/test.sh +++ b/test/TEST-44-LOG-NAMESPACE/test.sh @@ -4,17 +4,4 @@ TEST_DESCRIPTION="test log namespaces" . $TEST_BASE_DIR/test-functions -test_setup() { - create_empty_image_rootdir - - ( - LOG_LEVEL=5 - eval $(udevadm info --export --query=env --name=${LOOPDEV}p2) - - setup_basic_environment - mask_supporting_services - ) - setup_nspawn_root -} - do_test "$@" 44 diff --git a/test/TEST-46-HOMED/test.sh b/test/TEST-46-HOMED/test.sh index 5e87cf6143..877cbfefd0 100755 --- a/test/TEST-46-HOMED/test.sh +++ b/test/TEST-46-HOMED/test.sh @@ -5,22 +5,4 @@ TEST_NO_QEMU=1 . $TEST_BASE_DIR/test-functions -test_setup() { - create_empty_image - mkdir -p $TESTDIR/root - mount ${LOOPDEV}p1 $TESTDIR/root - - ( - LOG_LEVEL=5 - eval $(udevadm info --export --query=env --name=${LOOPDEV}p2) - - setup_basic_environment - mask_supporting_services - ) || return 1 - setup_nspawn_root - - ddebug "umount $TESTDIR/root" - umount $TESTDIR/root -} - do_test "$@" 46 diff --git a/test/test-functions b/test/test-functions index 47ffba8fd6..827337a814 100644 --- a/test/test-functions +++ b/test/test-functions @@ -1893,6 +1893,25 @@ test_cleanup() { _test_cleanup } +test_setup() { + if type -P meson && [[ "$(meson configure $BUILD_DIR | grep install-tests | awk '{ print $2 }')" != "true" ]]; then + dfatal "Needs to be built with -Dinstall-tests=true" + exit 1 + fi + + create_empty_image_rootdir + + # Create what will eventually be our root filesystem onto an overlay + ( + LOG_LEVEL=5 + eval $(udevadm info --export --query=env --name=${LOOPDEV}p2) + + setup_basic_environment + mask_supporting_services + ) + setup_nspawn_root +} + test_run() { if [ -z "$TEST_NO_QEMU" ]; then if run_qemu "$1"; then From 80c53fe7d53234f6d56e8e4ba795d0a4de2d1f9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Tue, 10 Dec 2019 17:33:58 +0100 Subject: [PATCH 62/78] test: improve reporting a bit --- test/test-functions | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/test/test-functions b/test/test-functions index 827337a814..a7f28493ce 100644 --- a/test/test-functions +++ b/test/test-functions @@ -665,6 +665,9 @@ create_empty_image() { if [[ "$STRIP_BINARIES" = "no" ]]; then _size=$((4*_size)) fi + + echo "Setting up $TESTDIR/rootdisk.img (${_size} MB)" + rm -f "$TESTDIR/rootdisk.img" # Create the blank file to use as a root filesystem truncate -s "${_size}M" "$TESTDIR/rootdisk.img" @@ -1894,7 +1897,7 @@ test_cleanup() { } test_setup() { - if type -P meson && [[ "$(meson configure $BUILD_DIR | grep install-tests | awk '{ print $2 }')" != "true" ]]; then + if type -P meson >/dev/null && [[ "$(meson configure $BUILD_DIR | grep install-tests | awk '{ print $2 }')" != "true" ]]; then dfatal "Needs to be built with -Dinstall-tests=true" exit 1 fi From 50b836518c1f031a33b255f6684ded0422d5a8ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Thu, 12 Dec 2019 08:35:20 +0100 Subject: [PATCH 63/78] test: drop cargo-cult line p2 is only used in the cryptsetup test... --- test/TEST-01-BASIC/test.sh | 2 -- test/TEST-06-SELINUX/test.sh | 1 - test/TEST-08-ISSUE-2730/test.sh | 2 -- test/TEST-13-NSPAWN-SMOKE/test.sh | 2 -- test/TEST-14-MACHINE-ID/test.sh | 2 -- test/test-functions | 2 -- 6 files changed, 11 deletions(-) diff --git a/test/TEST-01-BASIC/test.sh b/test/TEST-01-BASIC/test.sh index e07e1f3771..c3901e2f57 100755 --- a/test/TEST-01-BASIC/test.sh +++ b/test/TEST-01-BASIC/test.sh @@ -11,8 +11,6 @@ test_setup() { # Create what will eventually be our root filesystem onto an overlay ( LOG_LEVEL=5 - eval $(udevadm info --export --query=env --name=${LOOPDEV}p2) - setup_basic_environment ) setup_nspawn_root diff --git a/test/TEST-06-SELINUX/test.sh b/test/TEST-06-SELINUX/test.sh index 5f22b3b74e..f17242c6e1 100755 --- a/test/TEST-06-SELINUX/test.sh +++ b/test/TEST-06-SELINUX/test.sh @@ -21,7 +21,6 @@ test_setup() { # Create what will eventually be our root filesystem onto an overlay ( LOG_LEVEL=5 - eval $(udevadm info --export --query=env --name=${LOOPDEV}p2) setup_basic_environment mask_supporting_services diff --git a/test/TEST-08-ISSUE-2730/test.sh b/test/TEST-08-ISSUE-2730/test.sh index 7acca157d2..1887978dfc 100755 --- a/test/TEST-08-ISSUE-2730/test.sh +++ b/test/TEST-08-ISSUE-2730/test.sh @@ -13,8 +13,6 @@ test_setup() { # Create what will eventually be our root filesystem onto an overlay ( LOG_LEVEL=5 - eval $(udevadm info --export --query=env --name=${LOOPDEV}p2) - setup_basic_environment rm $initdir/etc/fstab diff --git a/test/TEST-13-NSPAWN-SMOKE/test.sh b/test/TEST-13-NSPAWN-SMOKE/test.sh index d81de0ebca..48449c66e5 100755 --- a/test/TEST-13-NSPAWN-SMOKE/test.sh +++ b/test/TEST-13-NSPAWN-SMOKE/test.sh @@ -11,8 +11,6 @@ test_setup() { # Create what will eventually be our root filesystem onto an overlay ( LOG_LEVEL=5 - eval $(udevadm info --export --query=env --name=${LOOPDEV}p2) - setup_basic_environment mask_supporting_services diff --git a/test/TEST-14-MACHINE-ID/test.sh b/test/TEST-14-MACHINE-ID/test.sh index caae487134..4668392b91 100755 --- a/test/TEST-14-MACHINE-ID/test.sh +++ b/test/TEST-14-MACHINE-ID/test.sh @@ -11,8 +11,6 @@ test_setup() { # Create what will eventually be our root filesystem onto an overlay ( LOG_LEVEL=5 - eval $(udevadm info --export --query=env --name=${LOOPDEV}p2) - setup_basic_environment mask_supporting_services printf "556f48e837bc4424a710fa2e2c9d3e3c\ne3d\n" >$initdir/etc/machine-id diff --git a/test/test-functions b/test/test-functions index a7f28493ce..b910603cea 100644 --- a/test/test-functions +++ b/test/test-functions @@ -1907,8 +1907,6 @@ test_setup() { # Create what will eventually be our root filesystem onto an overlay ( LOG_LEVEL=5 - eval $(udevadm info --export --query=env --name=${LOOPDEV}p2) - setup_basic_environment mask_supporting_services ) From 8a59e79c0900c3fcbd8ca9434b6c6a8eb8690af1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Thu, 12 Dec 2019 15:17:30 +0100 Subject: [PATCH 64/78] test: mount root rw and drop /etc/fstab We had an fstab for the sole purpose of remounting "/" rw. Mounting root ro is a pointless excercise in obsolete approaches. More importantly, the nspawn image is now the same as the qemu one. --- test/TEST-08-ISSUE-2730/test.sh | 2 -- test/test-functions | 23 ++++------------------- 2 files changed, 4 insertions(+), 21 deletions(-) diff --git a/test/TEST-08-ISSUE-2730/test.sh b/test/TEST-08-ISSUE-2730/test.sh index 1887978dfc..80f3efad62 100755 --- a/test/TEST-08-ISSUE-2730/test.sh +++ b/test/TEST-08-ISSUE-2730/test.sh @@ -14,8 +14,6 @@ test_setup() { ( LOG_LEVEL=5 setup_basic_environment - - rm $initdir/etc/fstab ) mask_supporting_services } diff --git a/test/test-functions b/test/test-functions index b910603cea..cd1bfeb2fd 100644 --- a/test/test-functions +++ b/test/test-functions @@ -290,10 +290,6 @@ run_qemu() { if [[ "$LOOKS_LIKE_SUSE" ]]; then PARAMS+="rd.hostonly=0" - elif [[ "$LOOKS_LIKE_ARCH" ]]; then - PARAMS+="rw" - else - PARAMS+="ro" fi local _end @@ -305,6 +301,7 @@ run_qemu() { KERNEL_APPEND="$PARAMS \ root=/dev/sda1 \ +rw \ raid=noautodetect \ rd.luks=0 \ loglevel=2 \ @@ -314,7 +311,7 @@ selinux=0 \ $_cgroup_args \ SYSTEMD_UNIT_PATH=/usr/lib/systemd/tests/testdata/testsuite-$1.units:/usr/lib/systemd/tests/testdata/units: \ systemd.unit=testsuite.target \ -systemd.wants=testsuite-$1.service ${_end} +systemd.wants=testsuite-$1.service ${_end} \ $KERNEL_APPEND \ " @@ -681,9 +678,9 @@ EOF udevadm settle - local _label="-L systemd" + local _label="-L systemd.${name}" # mkfs.reiserfs doesn't know -L. so, use --label instead - [[ "$FSTYPE" == "reiserfs" ]] && _label="--label systemd" + [[ "$FSTYPE" == "reiserfs" ]] && _label="--label systemd.${name}" if ! mkfs -t "${FSTYPE}" ${_label} "${LOOPDEV}p1" -q; then dfatal "Failed to mkfs -t ${FSTYPE}" exit 1 @@ -862,16 +859,6 @@ install_config_files() { # set the hostname echo systemd-testsuite > $initdir/etc/hostname - # fstab - if [[ "$LOOKS_LIKE_SUSE" ]]; then - ROOTMOUNT="/dev/sda1 / ${FSTYPE} rw 0 1" - else - ROOTMOUNT="LABEL=systemd / ${FSTYPE} rw 0 1" - fi - - cat >$initdir/etc/fstab < Date: Fri, 13 Dec 2019 12:34:41 +0100 Subject: [PATCH 65/78] test: make sure to reset state before starting integration tests --- test/test-functions | 3 +++ test/units/testsuite-01.service | 1 + test/units/testsuite-02.service | 1 + test/units/testsuite-03.service | 1 + test/units/testsuite-04.service | 1 + test/units/testsuite-05.service | 1 + test/units/testsuite-06.service | 1 + test/units/testsuite-07.service | 1 + test/units/testsuite-08.service | 1 + test/units/testsuite-09.service | 1 + test/units/testsuite-10.service | 1 + test/units/testsuite-11.service | 1 + test/units/testsuite-12.service | 1 + test/units/testsuite-13.service | 1 + test/units/testsuite-14.service | 1 + test/units/testsuite-15.service | 1 + test/units/testsuite-16.service | 1 + test/units/testsuite-17.service | 1 + test/units/testsuite-18.service | 1 + test/units/testsuite-19.service | 1 + test/units/testsuite-20.service | 1 + test/units/testsuite-22.service | 1 + test/units/testsuite-23.service | 1 + test/units/testsuite-24.service | 1 + test/units/testsuite-24.sh | 3 +++ test/units/testsuite-25.service | 1 + test/units/testsuite-26.service | 1 + test/units/testsuite-27.service | 1 + test/units/testsuite-28.service | 1 + test/units/testsuite-29.service | 1 + test/units/testsuite-30.service | 1 + test/units/testsuite-31.service | 1 + test/units/testsuite-32.service | 1 + test/units/testsuite-33.service | 1 + test/units/testsuite-34.service | 1 + test/units/testsuite-36.service | 1 + test/units/testsuite-37.service | 1 + test/units/testsuite-39.service | 1 + test/units/testsuite-40.service | 1 + test/units/testsuite-41.service | 1 + test/units/testsuite-42.service | 1 + test/units/testsuite-43.service | 1 + test/units/testsuite-44.service | 1 + test/units/testsuite-46.service | 1 + test/units/testsuite-47.service | 1 + 45 files changed, 49 insertions(+) diff --git a/test/test-functions b/test/test-functions index cd1bfeb2fd..0e3c2734e2 100644 --- a/test/test-functions +++ b/test/test-functions @@ -1899,6 +1899,9 @@ test_setup() { } test_run() { + mount_initdir + rm -f "$initdir"/{testok,failed,skipped} + if [ -z "$TEST_NO_QEMU" ]; then if run_qemu "$1"; then check_result_qemu || return 1 diff --git a/test/units/testsuite-01.service b/test/units/testsuite-01.service index 8112a85c18..85b9cf5a96 100644 --- a/test/units/testsuite-01.service +++ b/test/units/testsuite-01.service @@ -3,5 +3,6 @@ Description=TEST-01-BASIC After=multi-user.target [Service] +ExecStartPre=rm -f /failed /testok ExecStart=sh -e -x -c 'systemctl --state=failed --no-legend --no-pager >/failed ; systemctl daemon-reload ; echo OK >/testok' Type=oneshot diff --git a/test/units/testsuite-02.service b/test/units/testsuite-02.service index ddb4729322..701610b790 100644 --- a/test/units/testsuite-02.service +++ b/test/units/testsuite-02.service @@ -3,5 +3,6 @@ Description=TEST-02-CRYPTSETUP After=multi-user.target [Service] +ExecStartPre=rm -f /failed /testok ExecStart=sh -x -c 'systemctl --state=failed --no-legend --no-pager >/failed ; echo OK > /testok' Type=oneshot diff --git a/test/units/testsuite-03.service b/test/units/testsuite-03.service index f487d41f82..fe18fdc7d7 100644 --- a/test/units/testsuite-03.service +++ b/test/units/testsuite-03.service @@ -3,5 +3,6 @@ Description=TEST-03-JOBS After=multi-user.target [Service] +ExecStartPre=rm -f /failed /testok ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh Type=oneshot diff --git a/test/units/testsuite-04.service b/test/units/testsuite-04.service index 468acfa43e..3d2b4a8bc2 100644 --- a/test/units/testsuite-04.service +++ b/test/units/testsuite-04.service @@ -2,5 +2,6 @@ Description=TEST-04-JOURNAL [Service] +ExecStartPre=rm -f /failed /testok ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh Type=oneshot diff --git a/test/units/testsuite-05.service b/test/units/testsuite-05.service index 44108d7701..66356fd16f 100644 --- a/test/units/testsuite-05.service +++ b/test/units/testsuite-05.service @@ -2,5 +2,6 @@ Description=TEST-05-RLIMITS [Service] +ExecStartPre=rm -f /failed /testok ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh Type=oneshot diff --git a/test/units/testsuite-06.service b/test/units/testsuite-06.service index 72c0a2ca0d..3f8dad36dc 100644 --- a/test/units/testsuite-06.service +++ b/test/units/testsuite-06.service @@ -5,5 +5,6 @@ Requires=load-systemd-test-module.service After=load-systemd-test-module.service [Service] +ExecStartPre=rm -f /failed /testok ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh Type=oneshot diff --git a/test/units/testsuite-07.service b/test/units/testsuite-07.service index 5521632a06..2506c211c2 100644 --- a/test/units/testsuite-07.service +++ b/test/units/testsuite-07.service @@ -2,5 +2,6 @@ Description=TEST-07-ISSUE-1981 [Service] +ExecStartPre=rm -f /failed /testok ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh Type=oneshot diff --git a/test/units/testsuite-08.service b/test/units/testsuite-08.service index 79fb089c70..d961dc7ae2 100644 --- a/test/units/testsuite-08.service +++ b/test/units/testsuite-08.service @@ -2,5 +2,6 @@ Description=TEST-08-ISSUE-2730 [Service] +ExecStartPre=rm -f /failed /testok ExecStart=sh -x -c 'mount -o remount,rw /dev/sda1 && echo OK >/testok; systemctl poweroff' Type=oneshot diff --git a/test/units/testsuite-09.service b/test/units/testsuite-09.service index d551501335..fc59e80889 100644 --- a/test/units/testsuite-09.service +++ b/test/units/testsuite-09.service @@ -2,6 +2,7 @@ Description=TEST-09-ISSUE-2691 [Service] +ExecStartPre=rm -f /failed /testok ExecStart=sh -c '>/testok' ExecStop=sh -c 'kill -SEGV $$$$' Type=oneshot diff --git a/test/units/testsuite-10.service b/test/units/testsuite-10.service index 13756cfa51..24f0da35ab 100644 --- a/test/units/testsuite-10.service +++ b/test/units/testsuite-10.service @@ -2,5 +2,6 @@ Description=TEST-10-ISSUE-2467 [Service] +ExecStartPre=rm -f /failed /testok Type=oneshot ExecStart=sh -e -x -c 'rm -f /tmp/nonexistent; systemctl start test10.socket; printf x >test.file; socat -t20 OPEN:test.file UNIX-CONNECT:/run/test.ctl; >/testok' diff --git a/test/units/testsuite-11.service b/test/units/testsuite-11.service index 9093ae8d43..1544fd6819 100644 --- a/test/units/testsuite-11.service +++ b/test/units/testsuite-11.service @@ -2,5 +2,6 @@ Description=TEST-11-ISSUE-3166 [Service] +ExecStartPre=rm -f /failed /testok ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh Type=oneshot diff --git a/test/units/testsuite-12.service b/test/units/testsuite-12.service index 77153ea2eb..72894eff92 100644 --- a/test/units/testsuite-12.service +++ b/test/units/testsuite-12.service @@ -3,5 +3,6 @@ Description=TEST-12-ISSUE-3171 After=multi-user.target [Service] +ExecStartPre=rm -f /failed /testok ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh Type=oneshot diff --git a/test/units/testsuite-13.service b/test/units/testsuite-13.service index a7441d1279..5086793a90 100644 --- a/test/units/testsuite-13.service +++ b/test/units/testsuite-13.service @@ -2,5 +2,6 @@ Description=TEST-13-NSPAWN-SMOKE [Service] +ExecStartPre=rm -f /failed /testok ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh Type=oneshot diff --git a/test/units/testsuite-14.service b/test/units/testsuite-14.service index 1fc0da6409..1606c68fb1 100644 --- a/test/units/testsuite-14.service +++ b/test/units/testsuite-14.service @@ -2,6 +2,7 @@ Description=TEST-14-MACHINE-ID [Service] +ExecStartPre=rm -f /failed /testok ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh ExecStart=/bin/sh -e -x -c 'systemctl --state=failed --no-legend --no-pager >/failed ; echo OK >/testok' Type=oneshot diff --git a/test/units/testsuite-15.service b/test/units/testsuite-15.service index 2d07bd6943..09571ed1ab 100644 --- a/test/units/testsuite-15.service +++ b/test/units/testsuite-15.service @@ -2,5 +2,6 @@ Description=TEST-15-DROPIN [Service] +ExecStartPre=rm -f /failed /testok ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh Type=oneshot diff --git a/test/units/testsuite-16.service b/test/units/testsuite-16.service index 1ebf3d3af6..b44baad91a 100644 --- a/test/units/testsuite-16.service +++ b/test/units/testsuite-16.service @@ -12,6 +12,7 @@ Wants=fail-runtime.service StopWhenUnneeded=yes [Service] +ExecStartPre=rm -f /failed /testok Type=simple TimeoutStartSec=infinity ExecStartPre=/usr/lib/systemd/tests/testdata/units/%N.sh diff --git a/test/units/testsuite-17.service b/test/units/testsuite-17.service index 2002543a33..ed2017a848 100644 --- a/test/units/testsuite-17.service +++ b/test/units/testsuite-17.service @@ -2,5 +2,6 @@ Description=TEST-17-UDEV-WANTS [Service] +ExecStartPre=rm -f /failed /testok ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh Type=oneshot diff --git a/test/units/testsuite-18.service b/test/units/testsuite-18.service index 08e836671e..e4a945dc3e 100644 --- a/test/units/testsuite-18.service +++ b/test/units/testsuite-18.service @@ -2,5 +2,6 @@ Description=TEST-18-FAILUREACTION [Service] +ExecStartPre=rm -f /failed /testok ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh Type=oneshot diff --git a/test/units/testsuite-19.service b/test/units/testsuite-19.service index 13a0b612cb..d6ad5beded 100644 --- a/test/units/testsuite-19.service +++ b/test/units/testsuite-19.service @@ -2,5 +2,6 @@ Description=TEST-19-DELEGATE [Service] +ExecStartPre=rm -f /failed /testok ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh Type=oneshot diff --git a/test/units/testsuite-20.service b/test/units/testsuite-20.service index 9befd81283..d31d531175 100644 --- a/test/units/testsuite-20.service +++ b/test/units/testsuite-20.service @@ -4,6 +4,7 @@ Before=getty-pre.target Wants=getty-pre.target [Service] +ExecStartPre=rm -f /failed /testok ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh Type=oneshot NotifyAccess=all diff --git a/test/units/testsuite-22.service b/test/units/testsuite-22.service index 3d53cbf56c..55e3056d53 100644 --- a/test/units/testsuite-22.service +++ b/test/units/testsuite-22.service @@ -5,6 +5,7 @@ Before=getty-pre.target Wants=getty-pre.target [Service] +ExecStartPre=rm -f /failed /testok ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh Type=oneshot StandardOutput=tty diff --git a/test/units/testsuite-23.service b/test/units/testsuite-23.service index c221bd28cc..b3b3297af8 100644 --- a/test/units/testsuite-23.service +++ b/test/units/testsuite-23.service @@ -2,5 +2,6 @@ Description=TEST-23-TYPE-EXEC [Service] +ExecStartPre=rm -f /failed /testok ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh Type=oneshot diff --git a/test/units/testsuite-24.service b/test/units/testsuite-24.service index de53f03fb4..43d4816d48 100644 --- a/test/units/testsuite-24.service +++ b/test/units/testsuite-24.service @@ -2,5 +2,6 @@ Description=TEST-24-UNIT-TESTS [Service] +ExecStartPre=rm -f /failed /testok ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh Type=oneshot diff --git a/test/units/testsuite-24.sh b/test/units/testsuite-24.sh index 0e3cb15477..1ff1c3347b 100755 --- a/test/units/testsuite-24.sh +++ b/test/units/testsuite-24.sh @@ -6,6 +6,9 @@ NPROC=$(nproc) MAX_QUEUE_SIZE=${NPROC:-2} IFS=$'\n' TEST_LIST=($(ls /usr/lib/systemd/tests/test-*)) +# reset state +rm /failed-tests /skipped-tests /skipped + # Check & report test results # Arguments: # $1: test path diff --git a/test/units/testsuite-25.service b/test/units/testsuite-25.service index 39b43917d0..45d8b6945f 100644 --- a/test/units/testsuite-25.service +++ b/test/units/testsuite-25.service @@ -2,5 +2,6 @@ Description=TEST-25-IMPORT [Service] +ExecStartPre=rm -f /failed /testok ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh Type=oneshot diff --git a/test/units/testsuite-26.service b/test/units/testsuite-26.service index ac1b2faa3f..65b66835ed 100644 --- a/test/units/testsuite-26.service +++ b/test/units/testsuite-26.service @@ -2,5 +2,6 @@ Description=TEST-26-SETENV [Service] +ExecStartPre=rm -f /failed /testok ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh Type=oneshot diff --git a/test/units/testsuite-27.service b/test/units/testsuite-27.service index a1e8851088..52185f0572 100644 --- a/test/units/testsuite-27.service +++ b/test/units/testsuite-27.service @@ -2,5 +2,6 @@ Description=TEST-27-STDOUTFILE [Service] +ExecStartPre=rm -f /failed /testok ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh Type=oneshot diff --git a/test/units/testsuite-28.service b/test/units/testsuite-28.service index c4be0c631c..6a41114493 100644 --- a/test/units/testsuite-28.service +++ b/test/units/testsuite-28.service @@ -5,5 +5,6 @@ Wants=specifier-j-wants.service After=specifier-j-wants.service [Service] +ExecStartPre=rm -f /failed /testok ExecStart=true Type=oneshot diff --git a/test/units/testsuite-29.service b/test/units/testsuite-29.service index 87e46bd587..90c2187bd7 100644 --- a/test/units/testsuite-29.service +++ b/test/units/testsuite-29.service @@ -2,5 +2,6 @@ Description=TEST-29-UDEV-ID_RENAMING [Service] +ExecStartPre=rm -f /failed /testok ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh Type=oneshot diff --git a/test/units/testsuite-30.service b/test/units/testsuite-30.service index c3bb25853d..eb342f3d17 100644 --- a/test/units/testsuite-30.service +++ b/test/units/testsuite-30.service @@ -2,5 +2,6 @@ Description=TEST-30-ONCLOCKCHANGE [Service] +ExecStartPre=rm -f /failed /testok ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh Type=oneshot diff --git a/test/units/testsuite-31.service b/test/units/testsuite-31.service index 26ec2cb5cd..07dfb0bb54 100644 --- a/test/units/testsuite-31.service +++ b/test/units/testsuite-31.service @@ -2,5 +2,6 @@ Description=TEST-31-DEVICE-ENUMERATION [Service] +ExecStartPre=rm -f /failed /testok ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh Type=oneshot diff --git a/test/units/testsuite-32.service b/test/units/testsuite-32.service index a868b46abf..aab95cb741 100644 --- a/test/units/testsuite-32.service +++ b/test/units/testsuite-32.service @@ -2,6 +2,7 @@ Description=TEST-32-OOMPOLICY [Service] +ExecStartPre=rm -f /failed /testok ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh Type=oneshot MemoryAccounting=yes diff --git a/test/units/testsuite-33.service b/test/units/testsuite-33.service index 8b65c8b106..b64f1e0b79 100644 --- a/test/units/testsuite-33.service +++ b/test/units/testsuite-33.service @@ -2,5 +2,6 @@ Description=TEST-33-CLEAN-UNIT [Service] +ExecStartPre=rm -f /failed /testok ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh Type=oneshot diff --git a/test/units/testsuite-34.service b/test/units/testsuite-34.service index d7051d450c..361e328221 100644 --- a/test/units/testsuite-34.service +++ b/test/units/testsuite-34.service @@ -2,5 +2,6 @@ Description=TEST-34-DYNAMICUSERMIGRATE [Service] +ExecStartPre=rm -f /failed /testok ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh Type=oneshot diff --git a/test/units/testsuite-36.service b/test/units/testsuite-36.service index f2dcbead69..a681153ee4 100644 --- a/test/units/testsuite-36.service +++ b/test/units/testsuite-36.service @@ -2,5 +2,6 @@ Description=TEST-36-NUMAPOLICY [Service] +ExecStartPre=rm -f /failed /testok ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh Type=oneshot diff --git a/test/units/testsuite-37.service b/test/units/testsuite-37.service index 68c805985d..d25c6d2cf9 100644 --- a/test/units/testsuite-37.service +++ b/test/units/testsuite-37.service @@ -2,5 +2,6 @@ Description=TEST-37-RUNTIMEDIRECTORYPRESERVE [Service] +ExecStartPre=rm -f /failed /testok ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh Type=oneshot diff --git a/test/units/testsuite-39.service b/test/units/testsuite-39.service index dbd924c6aa..395fe803e7 100644 --- a/test/units/testsuite-39.service +++ b/test/units/testsuite-39.service @@ -2,5 +2,6 @@ Description=TEST-39-EXECRELOAD [Service] +ExecStartPre=rm -f /failed /testok ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh Type=oneshot diff --git a/test/units/testsuite-40.service b/test/units/testsuite-40.service index 51659cce5d..38b0bd80d1 100644 --- a/test/units/testsuite-40.service +++ b/test/units/testsuite-40.service @@ -2,5 +2,6 @@ Description=TEST-40-EXEC-COMMAND-EX [Service] +ExecStartPre=rm -f /failed /testok ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh Type=oneshot diff --git a/test/units/testsuite-41.service b/test/units/testsuite-41.service index bf0b0db6a2..766cb4c99a 100644 --- a/test/units/testsuite-41.service +++ b/test/units/testsuite-41.service @@ -2,5 +2,6 @@ Description=TEST-41-ONESHOT-RESTART [Service] +ExecStartPre=rm -f /failed /testok ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh Type=oneshot diff --git a/test/units/testsuite-42.service b/test/units/testsuite-42.service index d5d102fd91..a5504b515d 100644 --- a/test/units/testsuite-42.service +++ b/test/units/testsuite-42.service @@ -4,5 +4,6 @@ Before=getty-pre.target Wants=getty-pre.target [Service] +ExecStartPre=rm -f /failed /testok ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh Type=oneshot diff --git a/test/units/testsuite-43.service b/test/units/testsuite-43.service index 6badedcc71..31248f17e8 100644 --- a/test/units/testsuite-43.service +++ b/test/units/testsuite-43.service @@ -4,5 +4,6 @@ After=systemd-logind.service user@4711.service Wants=user@4711.service [Service] +ExecStartPre=rm -f /failed /testok ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh Type=oneshot diff --git a/test/units/testsuite-44.service b/test/units/testsuite-44.service index 1211ea3eab..bd4dd728aa 100644 --- a/test/units/testsuite-44.service +++ b/test/units/testsuite-44.service @@ -6,6 +6,7 @@ Wants=systemd-journald@foobar.socket systemd-journald-varlink@foobar.socket After=systemd-journald@foobar.socket systemd-journald-varlink@foobar.socket [Service] +ExecStartPre=rm -f /failed /testok ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh Type=oneshot LogTarget=foobar diff --git a/test/units/testsuite-46.service b/test/units/testsuite-46.service index 46e9a618e2..da359cbb23 100644 --- a/test/units/testsuite-46.service +++ b/test/units/testsuite-46.service @@ -4,6 +4,7 @@ Before=getty-pre.target Wants=getty-pre.target [Service] +ExecStartPre=rm -f /failed /testok ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh Type=oneshot NotifyAccess=all diff --git a/test/units/testsuite-47.service b/test/units/testsuite-47.service index b6015e27cc..3816c57eed 100644 --- a/test/units/testsuite-47.service +++ b/test/units/testsuite-47.service @@ -2,5 +2,6 @@ Description=TEST-47-ISSUE-14566 [Service] +ExecStartPre=rm -f /failed /testok ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh Type=oneshot From de0162a95aef39fbfb0e0883433ba654d86627fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Tue, 17 Dec 2019 10:35:37 +0100 Subject: [PATCH 66/78] test/TEST-28: avoid race in handling of /testok --- test/testsuite-28.units/specifier-j-depends-wants.service | 1 + test/testsuite-28.units/specifier-j-wants.service | 1 + test/testsuite-28.units/testsuite-28-pre.service | 3 +++ test/units/testsuite-28.service | 3 ++- 4 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 test/testsuite-28.units/testsuite-28-pre.service diff --git a/test/testsuite-28.units/specifier-j-depends-wants.service b/test/testsuite-28.units/specifier-j-depends-wants.service index 1db4d855b9..f9c6abb493 100644 --- a/test/testsuite-28.units/specifier-j-depends-wants.service +++ b/test/testsuite-28.units/specifier-j-depends-wants.service @@ -1,5 +1,6 @@ [Unit] Description=Dependent service for percent-j specifier +After=testsuite-28-pre.service [Service] Type=oneshot diff --git a/test/testsuite-28.units/specifier-j-wants.service b/test/testsuite-28.units/specifier-j-wants.service index 10c35906bb..facf5577be 100644 --- a/test/testsuite-28.units/specifier-j-wants.service +++ b/test/testsuite-28.units/specifier-j-wants.service @@ -2,6 +2,7 @@ Description=Wants with percent-j specifier Wants=specifier-j-depends-%j.service After=specifier-j-depends-%j.service +After=testsuite-28-pre.service [Service] Type=oneshot diff --git a/test/testsuite-28.units/testsuite-28-pre.service b/test/testsuite-28.units/testsuite-28-pre.service new file mode 100644 index 0000000000..2b8ef98911 --- /dev/null +++ b/test/testsuite-28.units/testsuite-28-pre.service @@ -0,0 +1,3 @@ +[Service] +ExecStart=rm -f /failed /testok +Type=oneshot diff --git a/test/units/testsuite-28.service b/test/units/testsuite-28.service index 6a41114493..7ea8630011 100644 --- a/test/units/testsuite-28.service +++ b/test/units/testsuite-28.service @@ -3,8 +3,9 @@ Description=TEST-28-PERCENTJ-WANTEDBY # Testsuite: Ensure %j Wants directives work Wants=specifier-j-wants.service After=specifier-j-wants.service +Requires=testsuite-28-pre.service +After=testsuite-28-pre.service [Service] -ExecStartPre=rm -f /failed /testok ExecStart=true Type=oneshot From 388b68a74febaa857d6fdc3280aae4fa83b0e87a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Tue, 17 Dec 2019 10:34:31 +0100 Subject: [PATCH 67/78] semaphoreci: trivial cleanup --- semaphoreci/semaphore-runner.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/semaphoreci/semaphore-runner.sh b/semaphoreci/semaphore-runner.sh index 2bf8ce0d52..177fe77cda 100755 --- a/semaphoreci/semaphore-runner.sh +++ b/semaphoreci/semaphore-runner.sh @@ -17,7 +17,7 @@ PHASES=(${@:-SETUP RUN}) create_container() { # create autopkgtest LXC image; this sometimes fails with "Unable to fetch # GPG key from keyserver", so retry a few times - for retry in $(seq 5); do + for retry in {1..5}; do sudo lxc-create -n $CONTAINER -t download -- -d $DISTRO -r $RELEASE -a $ARCH --keyserver hkp://keyserver.ubuntu.com:80 && break sleep $((retry*retry)) done From 8c3534b5dbe63167c8c94ca77e1b347ffab944e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Thu, 12 Dec 2019 09:37:19 +0100 Subject: [PATCH 68/78] test: rework how images are created Before, we'd create a separate image for each test, in /var/tmp/systemd-test.XXXXX/rootdisk.img. Most of the images where very similar, except that each one had some unit files installed specifically for the test. The installation of those custom unit files was removed in previous commits (all the unit files are always installed). The new approach is to only create as few distinct images as possible. We have: default.img: the "normal" image suitable for almost all the tests basic.img: the same as default image but doesn't mask any services cryptsetup.img: p2 is used for encrypted /var badid.img: /etc/machine-id is overwritten with stuff selinux.img: with selinux added for fun and fun and a few others: ls -l build/test/*img lrwxrwxrwx 1 root root 38 Mar 21 21:23 build/test/badid.img -> /var/tmp/systemd-test.PJFFeo/badid.img lrwxrwxrwx 1 root root 38 Mar 21 21:17 build/test/basic.img -> /var/tmp/systemd-test.na0xOI/basic.img lrwxrwxrwx 1 root root 43 Mar 21 21:18 build/test/cryptsetup.img -> /var/tmp/systemd-test.Tzjv06/cryptsetup.img lrwxrwxrwx 1 root root 40 Mar 21 21:19 build/test/default.img -> /var/tmp/systemd-test.EscAsS/default.img lrwxrwxrwx 1 root root 39 Mar 21 21:22 build/test/nspawn.img -> /var/tmp/systemd-test.HSebKo/nspawn.img lrwxrwxrwx 1 root root 40 Mar 21 21:20 build/test/selinux.img -> /var/tmp/systemd-test.daBjbx/selinux.img lrwxrwxrwx 1 root root 39 Mar 21 21:21 build/test/test08.img -> /var/tmp/systemd-test.OgnN8Z/test08.img I considered trying to use the same image everywhere. It would probably be possible, but it would be very brittle. By using separate images where it is necessary we keep various orthogonal modifications independent. The way that images are cached is complicated by the fact that we still want to keep them in /var/tmp. Thus, an image is created on first use and linked to from build/test/ so it can be found by other tests. Tests cannot be run in parallel. I think that is an acceptable limitation. Creation of the images was probably taking more resources then the actual tests, so we should be better off anyway. --- test/TEST-01-BASIC/test.sh | 3 +- test/TEST-02-CRYPTSETUP/test.sh | 4 +- test/TEST-06-SELINUX/test.sh | 3 +- test/TEST-08-ISSUE-2730/test.sh | 3 +- test/TEST-13-NSPAWN-SMOKE/test.sh | 3 +- test/TEST-14-MACHINE-ID/test.sh | 3 +- test/TEST-21-SYSUSERS/test.sh | 2 +- test/TEST-24-UNIT-TESTS/test.sh | 6 +- test/run-integration-tests.sh | 17 ++++- test/test-functions | 108 +++++++++++++++++++++++------- 10 files changed, 114 insertions(+), 38 deletions(-) diff --git a/test/TEST-01-BASIC/test.sh b/test/TEST-01-BASIC/test.sh index c3901e2f57..9f2ec1e8ae 100755 --- a/test/TEST-01-BASIC/test.sh +++ b/test/TEST-01-BASIC/test.sh @@ -1,11 +1,12 @@ #!/usr/bin/env bash set -e TEST_DESCRIPTION="Basic systemd setup" +IMAGE_NAME="basic" RUN_IN_UNPRIVILEGED_CONTAINER=${RUN_IN_UNPRIVILEGED_CONTAINER:-yes} . $TEST_BASE_DIR/test-functions -test_setup() { +test_create_image() { create_empty_image_rootdir # Create what will eventually be our root filesystem onto an overlay diff --git a/test/TEST-02-CRYPTSETUP/test.sh b/test/TEST-02-CRYPTSETUP/test.sh index 2afc6f8ed4..3e3414b638 100755 --- a/test/TEST-02-CRYPTSETUP/test.sh +++ b/test/TEST-02-CRYPTSETUP/test.sh @@ -1,6 +1,7 @@ #!/usr/bin/env bash set -e TEST_DESCRIPTION="cryptsetup systemd setup" +IMAGE_NAME="cryptsetup" TEST_NO_NSPAWN=1 . $TEST_BASE_DIR/test-functions @@ -23,8 +24,7 @@ check_result_qemu() { return $ret } - -test_setup() { +test_create_image() { create_empty_image_rootdir echo -n test >$TESTDIR/keyfile cryptsetup -q luksFormat --pbkdf pbkdf2 --pbkdf-force-iterations 1000 ${LOOPDEV}p2 $TESTDIR/keyfile diff --git a/test/TEST-06-SELINUX/test.sh b/test/TEST-06-SELINUX/test.sh index f17242c6e1..7a836bbc03 100755 --- a/test/TEST-06-SELINUX/test.sh +++ b/test/TEST-06-SELINUX/test.sh @@ -1,6 +1,7 @@ #!/usr/bin/env bash set -e TEST_DESCRIPTION="SELinux tests" +IMAGE_NAME="selinux" TEST_NO_NSPAWN=1 # Requirements: @@ -15,7 +16,7 @@ test -f /usr/share/selinux/devel/include/system/systemd.if || exit 0 SETUP_SELINUX=yes KERNEL_APPEND="$KERNEL_APPEND selinux=1 security=selinux" -test_setup() { +test_create_image() { create_empty_image_rootdir # Create what will eventually be our root filesystem onto an overlay diff --git a/test/TEST-08-ISSUE-2730/test.sh b/test/TEST-08-ISSUE-2730/test.sh index 80f3efad62..e5dedf2f0c 100755 --- a/test/TEST-08-ISSUE-2730/test.sh +++ b/test/TEST-08-ISSUE-2730/test.sh @@ -1,13 +1,14 @@ #!/usr/bin/env bash set -e TEST_DESCRIPTION="https://github.com/systemd/systemd/issues/2730" +IMAGE_NAME="test08" TEST_NO_NSPAWN=1 . $TEST_BASE_DIR/test-functions QEMU_TIMEOUT=300 FSTYPE=ext4 -test_setup() { +test_create_image() { create_empty_image_rootdir # Create what will eventually be our root filesystem onto an overlay diff --git a/test/TEST-13-NSPAWN-SMOKE/test.sh b/test/TEST-13-NSPAWN-SMOKE/test.sh index 48449c66e5..c777c166f7 100755 --- a/test/TEST-13-NSPAWN-SMOKE/test.sh +++ b/test/TEST-13-NSPAWN-SMOKE/test.sh @@ -1,11 +1,12 @@ #!/usr/bin/env bash set -e TEST_DESCRIPTION="systemd-nspawn smoke test" +IMAGE_NAME=nspawn TEST_NO_NSPAWN=1 . $TEST_BASE_DIR/test-functions -test_setup() { +test_create_image() { create_empty_image_rootdir # Create what will eventually be our root filesystem onto an overlay diff --git a/test/TEST-14-MACHINE-ID/test.sh b/test/TEST-14-MACHINE-ID/test.sh index 4668392b91..d1486f0aae 100755 --- a/test/TEST-14-MACHINE-ID/test.sh +++ b/test/TEST-14-MACHINE-ID/test.sh @@ -1,11 +1,12 @@ #!/usr/bin/env bash set -e TEST_DESCRIPTION="/etc/machine-id testing" +IMAGE_NAME=badid TEST_NO_NSPAWN=1 . $TEST_BASE_DIR/test-functions -test_setup() { +test_create_image() { create_empty_image_rootdir # Create what will eventually be our root filesystem onto an overlay diff --git a/test/TEST-21-SYSUSERS/test.sh b/test/TEST-21-SYSUSERS/test.sh index c4b221af8a..f7dbbbf47b 100755 --- a/test/TEST-21-SYSUSERS/test.sh +++ b/test/TEST-21-SYSUSERS/test.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash set -e TEST_DESCRIPTION="Sysuser-related tests" - +IMAGE_NAME=sysusers . $TEST_BASE_DIR/test-functions test_setup() { diff --git a/test/TEST-24-UNIT-TESTS/test.sh b/test/TEST-24-UNIT-TESTS/test.sh index 06b6cebf4f..0475621623 100755 --- a/test/TEST-24-UNIT-TESTS/test.sh +++ b/test/TEST-24-UNIT-TESTS/test.sh @@ -24,13 +24,13 @@ check_result_nspawn() { fi cp -a $TESTDIR/$1/var/log/journal $TESTDIR [[ -n "$TIMED_OUT" ]] && _ret=$(($_ret+1)) + umount_initdir return $_ret } check_result_qemu() { local _ret=1 - mkdir -p $initdir - mount ${LOOPDEV}p1 $initdir + mount_initdir [[ -e $initdir/testok ]] && _ret=0 if [[ -s $initdir/failed ]]; then _ret=$(($_ret+1)) @@ -47,7 +47,7 @@ check_result_qemu() { fi fi cp -a $initdir/var/log/journal $TESTDIR - umount $initdir + umount_initdir [[ -n "$TIMED_OUT" ]] && _ret=$(($_ret+1)) return $_ret } diff --git a/test/run-integration-tests.sh b/test/run-integration-tests.sh index c0a8448a88..19b5fe0315 100755 --- a/test/run-integration-tests.sh +++ b/test/run-integration-tests.sh @@ -4,8 +4,10 @@ set -e BUILD_DIR="$($(dirname "$0")/../tools/find-build-dir.sh)" if [ $# -gt 0 ]; then args="$@" + do_clean=0 else - args="clean setup run clean-again" + args="setup run" + do_clean=1 fi ninja -C "$BUILD_DIR" @@ -16,6 +18,13 @@ COUNT=0 FAILURES=0 cd "$(dirname "$0")" + +if [ $do_clean = 1 ]; then + for TEST in TEST-??-* ; do + ( set -x ; make -C "$TEST" "BUILD_DIR=$BUILD_DIR" clean ) + done +fi + for TEST in TEST-??-* ; do COUNT=$(($COUNT+1)) @@ -31,6 +40,12 @@ for TEST in TEST-??-* ; do [ "$RESULT" -ne "0" ] && FAILURES=$(($FAILURES+1)) done +if [ $FAILURES -eq 0 -a $do_clean = 1 ]; then + for TEST in TEST-??-* ; do + ( set -x ; make -C "$TEST" "BUILD_DIR=$BUILD_DIR" clean-again ) + done +fi + echo "" for TEST in ${!results[@]}; do diff --git a/test/test-functions b/test/test-functions index 0e3c2734e2..bca0588af8 100644 --- a/test/test-functions +++ b/test/test-functions @@ -16,6 +16,7 @@ TIMED_OUT= # will be 1 after run_* if *_TIMEOUT is set and test timed out UNIFIED_CGROUP_HIERARCHY="${UNIFIED_CGROUP_HIERARCHY:-default}" EFI_MOUNT="${EFI_MOUNT:-$(bootctl -x 2>/dev/null || echo /boot)}" QEMU_MEM="${QEMU_MEM:-512M}" +IMAGE_NAME=${IMAGE_NAME:-default} # Decide if we can (and want to) run QEMU with KVM acceleration. # Check if nested KVM is explicitly enabled (TEST_NESTED_KVM). If not, @@ -136,6 +137,7 @@ DEBUGTOOLS=( STATEDIR="${BUILD_DIR:-.}/test/$(basename $(dirname $(realpath $0)))" STATEFILE="$STATEDIR/.testdir" +IMAGESTATEDIR="$STATEDIR/.." TESTLOG="$STATEDIR/test.log" is_built_with_asan() { @@ -276,6 +278,9 @@ run_qemu() { find_qemu_bin || return 1 + # Umount initdir to avoid concurrent access to the filesystem + umount_initdir + local _cgroup_args if [[ "$UNIFIED_CGROUP_HIERARCHY" = "yes" ]]; then _cgroup_args="systemd.unified_cgroup_hierarchy=yes" @@ -320,7 +325,7 @@ $KERNEL_APPEND \ -m $QEMU_MEM \ -nographic \ -kernel $KERNEL_BIN \ --drive format=raw,cache=unsafe,file=${TESTDIR}/rootdisk.img \ +-drive format=raw,cache=unsafe,file=${IMAGESTATEDIR}/${IMAGE_NAME}.img \ $QEMU_OPTIONS \ " @@ -631,7 +636,7 @@ install_systemd() { # and it could fill the available space strip_binaries - [[ "$LOOKS_LIKE_SUSE" ]] && setup_suse + [[ "$LOOKS_LIKE_SUSE" ]] && setup_suse # enable debug logging in PID1 echo LogLevel=debug >> $initdir/etc/systemd/system.conf @@ -658,19 +663,26 @@ install_missing_libraries() { } create_empty_image() { + if [ -z "$IMAGE_NAME" ]; then + echo "create_empty_image: \$IMAGE_NAME not set" + exit 1 + fi + local _size=500 if [[ "$STRIP_BINARIES" = "no" ]]; then _size=$((4*_size)) fi - echo "Setting up $TESTDIR/rootdisk.img (${_size} MB)" + image="${TESTDIR}/${IMAGE_NAME}.img" + public="$IMAGESTATEDIR/${IMAGE_NAME}.img" + echo "Setting up $public (${_size} MB)" - rm -f "$TESTDIR/rootdisk.img" + rm -f "$image" "$public" # Create the blank file to use as a root filesystem - truncate -s "${_size}M" "$TESTDIR/rootdisk.img" - LOOPDEV=$(losetup --show -P -f $TESTDIR/rootdisk.img) + truncate -s "${_size}M" "$image" + LOOPDEV=$(losetup --show -P -f "$image") [ -b "$LOOPDEV" ] || return 1 - echo "LOOPDEV=$LOOPDEV" >> $STATEFILE + echo "LOOPDEV=$LOOPDEV" >>$STATEFILE sfdisk "$LOOPDEV" <>$STATEFILE + fi + + mkdir -p $initdir + mount ${LOOPDEV}p1 $initdir + TEST_SETUP_CLEANUP_ROOTDIR=1 +} + +umount_initdir() { + _umount_dir $initdir + if [[ $LOOPDEV && -b $LOOPDEV ]]; then + ddebug "losetup -d $LOOPDEV" + losetup -d $LOOPDEV + fi + LOOPDEV= + sed -i /LOOPDEV=/d $STATEFILE } create_empty_image_rootdir() { create_empty_image - mkdir -p $initdir - mount ${LOOPDEV}p1 $initdir - TEST_SETUP_CLEANUP_ROOTDIR=1 + mount_initdir } check_asan_reports() { @@ -744,14 +780,14 @@ check_result_nspawn() { test -s $TESTDIR/failed && ret=$(($ret+1)) [ -n "$TIMED_OUT" ] && ret=$(($ret+1)) check_asan_reports "$TESTDIR/$1" || ret=$(($ret+1)) + umount_initdir return $ret } # can be overridden in specific test check_result_qemu() { local ret=1 - mkdir -p $initdir - mount ${LOOPDEV}p1 $initdir + mount_initdir [[ -e $initdir/testok ]] && ret=0 [[ -f $initdir/failed ]] && cp -a $initdir/failed $TESTDIR cp -a $initdir/var/log/journal $TESTDIR @@ -1042,6 +1078,10 @@ has_user_dbus_socket() { } setup_nspawn_root() { + if [ -z "${initdir}" ]; then + dfatal "\$initdir not defined" + exit 1 + fi rm -fr $TESTDIR/nspawn-root ddebug "cp -ar $initdir $TESTDIR/nspawn-root" cp -ar $initdir $TESTDIR/nspawn-root @@ -1110,7 +1150,10 @@ import_testdir() { mkdir -p "$TESTDIR" fi - echo "TESTDIR=\"$TESTDIR\"" > $STATEFILE + cat >$STATEFILE</dev/null && [[ "$(meson configure $BUILD_DIR | grep install-tests | awk '{ print $2 }')" != "true" ]]; then - dfatal "Needs to be built with -Dinstall-tests=true" - exit 1 - fi - +test_create_image() { create_empty_image_rootdir # Create what will eventually be our root filesystem onto an overlay @@ -1895,6 +1930,27 @@ test_setup() { setup_basic_environment mask_supporting_services ) +} + +test_setup() { + if type -P meson >/dev/null && [[ "$(meson configure $BUILD_DIR | grep install-tests | awk '{ print $2 }')" != "true" ]]; then + dfatal "Needs to be built with -Dinstall-tests=true" + exit 1 + fi + + image="${TESTDIR}/${IMAGE_NAME}.img" + public="${IMAGESTATEDIR}/${IMAGE_NAME}.img" + if [ -e "$image" ]; then + echo "Reusing existing image $PWD/$image → $(realpath $image)" + mount_initdir + elif [ -e "$public" ]; then + echo "Reusing existing cached image $PWD/$public → $(realpath $public)" + ln -s "$(realpath $public)" "$image" + mount_initdir + else + test_create_image + fi + setup_nspawn_root } From 9d84eb2053afe9ba7df14007d7d982d742601893 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Tue, 17 Dec 2019 12:52:35 +0100 Subject: [PATCH 69/78] test/TEST-01: allow running w/o -Dinstall-tests=true This is useful for sanitizer builds under CI, see https://github.com/systemd/systemd-centos-ci/pull/202#issuecomment-566476592. --- test/TEST-01-BASIC/test.sh | 5 +++++ test/test-functions | 5 ++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/test/TEST-01-BASIC/test.sh b/test/TEST-01-BASIC/test.sh index 9f2ec1e8ae..58f6cd1414 100755 --- a/test/TEST-01-BASIC/test.sh +++ b/test/TEST-01-BASIC/test.sh @@ -3,6 +3,7 @@ set -e TEST_DESCRIPTION="Basic systemd setup" IMAGE_NAME="basic" RUN_IN_UNPRIVILEGED_CONTAINER=${RUN_IN_UNPRIVILEGED_CONTAINER:-yes} +TEST_REQUIRE_INSTALL_TESTS=0 . $TEST_BASE_DIR/test-functions @@ -13,6 +14,10 @@ test_create_image() { ( LOG_LEVEL=5 setup_basic_environment + + # install tests manually so the test is functional even when -Dinstall-tests=false + mkdir -p $initdir/usr/lib/systemd/tests/testdata/units/ + cp -v $(dirname $0)/../units/{testsuite-01,end}.service $initdir/usr/lib/systemd/tests/testdata/units/ ) setup_nspawn_root } diff --git a/test/test-functions b/test/test-functions index bca0588af8..7ae7d74fa8 100644 --- a/test/test-functions +++ b/test/test-functions @@ -17,6 +17,7 @@ UNIFIED_CGROUP_HIERARCHY="${UNIFIED_CGROUP_HIERARCHY:-default}" EFI_MOUNT="${EFI_MOUNT:-$(bootctl -x 2>/dev/null || echo /boot)}" QEMU_MEM="${QEMU_MEM:-512M}" IMAGE_NAME=${IMAGE_NAME:-default} +TEST_REQUIRE_INSTALL_TESTS="${TEST_REQUIRE_INSTALL_TESTS:-1}" # Decide if we can (and want to) run QEMU with KVM acceleration. # Check if nested KVM is explicitly enabled (TEST_NESTED_KVM). If not, @@ -1933,7 +1934,9 @@ test_create_image() { } test_setup() { - if type -P meson >/dev/null && [[ "$(meson configure $BUILD_DIR | grep install-tests | awk '{ print $2 }')" != "true" ]]; then + if [ ${TEST_REQUIRE_INSTALL_TESTS} -ne 0 ] && \ + type -P meson >/dev/null && \ + [[ "$(meson configure $BUILD_DIR | grep install-tests | awk '{ print $2 }')" != "true" ]]; then dfatal "Needs to be built with -Dinstall-tests=true" exit 1 fi From b74a3061972d5d4cecfb93c1185aebfba72acb52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Fri, 20 Mar 2020 17:16:30 +0100 Subject: [PATCH 70/78] test: echo a message when the tests fails Sometimes it is not clear from the preceding output that there was a failure. --- test/test-functions | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/test-functions b/test/test-functions index 7ae7d74fa8..7c3e074c33 100644 --- a/test/test-functions +++ b/test/test-functions @@ -1963,21 +1963,21 @@ test_run() { if [ -z "$TEST_NO_QEMU" ]; then if run_qemu "$1"; then - check_result_qemu || return 1 + check_result_qemu || { echo "QEMU test failed"; return 1; } else dwarn "can't run QEMU, skipping" fi fi if [ -z "$TEST_NO_NSPAWN" ]; then if run_nspawn "nspawn-root" "$1"; then - check_result_nspawn "nspawn-root" || return 1 + check_result_nspawn "nspawn-root" || { echo "nspawn-root test failed"; return 1; } else dwarn "can't run systemd-nspawn, skipping" fi if [[ "$RUN_IN_UNPRIVILEGED_CONTAINER" = "yes" ]]; then if NSPAWN_ARGUMENTS="-U --private-network $NSPAWN_ARGUMENTS" run_nspawn "unprivileged-nspawn-root" "$1"; then - check_result_nspawn "unprivileged-nspawn-root" || return 1 + check_result_nspawn "unprivileged-nspawn-root" || { echo "unprivileged-nspawn-root test failed"; return 1; } else dwarn "can't run systemd-nspawn, skipping" fi From eb1290ef35af93eebb73e6f0769031382011e8ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Fri, 20 Mar 2020 17:46:04 +0100 Subject: [PATCH 71/78] test: wipe journal files after test Otherwise they accumulate and create noise. --- test/TEST-02-CRYPTSETUP/test.sh | 1 + test/TEST-24-UNIT-TESTS/test.sh | 2 ++ test/test-functions | 2 ++ 3 files changed, 5 insertions(+) diff --git a/test/TEST-02-CRYPTSETUP/test.sh b/test/TEST-02-CRYPTSETUP/test.sh index 3e3414b638..c6e6b7e649 100755 --- a/test/TEST-02-CRYPTSETUP/test.sh +++ b/test/TEST-02-CRYPTSETUP/test.sh @@ -15,6 +15,7 @@ check_result_qemu() { cryptsetup luksOpen ${LOOPDEV}p2 varcrypt <$TESTDIR/keyfile mount /dev/mapper/varcrypt $initdir/var cp -a $initdir/var/log/journal $TESTDIR + rm -r $initdir/var/log/journal/* umount $initdir/var umount $initdir cryptsetup luksClose /dev/mapper/varcrypt diff --git a/test/TEST-24-UNIT-TESTS/test.sh b/test/TEST-24-UNIT-TESTS/test.sh index 0475621623..5ce8d85433 100755 --- a/test/TEST-24-UNIT-TESTS/test.sh +++ b/test/TEST-24-UNIT-TESTS/test.sh @@ -23,6 +23,7 @@ check_result_nspawn() { fi fi cp -a $TESTDIR/$1/var/log/journal $TESTDIR + rm -r $TESTDIR/$1/var/log/journal/* [[ -n "$TIMED_OUT" ]] && _ret=$(($_ret+1)) umount_initdir return $_ret @@ -47,6 +48,7 @@ check_result_qemu() { fi fi cp -a $initdir/var/log/journal $TESTDIR + rm -r $initdir/var/log/journal/* umount_initdir [[ -n "$TIMED_OUT" ]] && _ret=$(($_ret+1)) return $_ret diff --git a/test/test-functions b/test/test-functions index 7c3e074c33..ebdcfaea66 100644 --- a/test/test-functions +++ b/test/test-functions @@ -776,6 +776,7 @@ check_result_nspawn() { [[ -e $TESTDIR/$1/testok ]] && ret=0 [[ -f $TESTDIR/$1/failed ]] && cp -a $TESTDIR/$1/failed $TESTDIR cp -a $TESTDIR/$1/var/log/journal $TESTDIR + rm -r $TESTDIR/$1/var/log/journal/* [[ -f $TESTDIR/failed ]] && cat $TESTDIR/failed ls -l $TESTDIR/journal/*/*.journal test -s $TESTDIR/failed && ret=$(($ret+1)) @@ -792,6 +793,7 @@ check_result_qemu() { [[ -e $initdir/testok ]] && ret=0 [[ -f $initdir/failed ]] && cp -a $initdir/failed $TESTDIR cp -a $initdir/var/log/journal $TESTDIR + rm -r $initdir/var/log/journal/* check_asan_reports "$initdir" || ret=$(($ret+1)) umount $initdir [[ -f $TESTDIR/failed ]] && cat $TESTDIR/failed From ec43f6862eeafa1d737b60c8c812066f7cf1ff7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Fri, 13 Dec 2019 14:21:31 +0100 Subject: [PATCH 72/78] test: run tests directly from the loopback device Before, we'd copy the test tree into nspawn-root, and run the tests from there. This is OK, and doesn't actually take much extra time. But it uses quite a lot of extra disk space. So let's make things a bit more efficient by running directly from the image file. We still run the unprivileged nspawn tests from a copy. Once the kernel implements fs shift, we can do away with that too. --- test/TEST-02-CRYPTSETUP/test.sh | 4 +- test/TEST-24-UNIT-TESTS/test.sh | 20 +++++----- test/test-functions | 66 ++++++++++++++++++++------------- 3 files changed, 52 insertions(+), 38 deletions(-) diff --git a/test/TEST-02-CRYPTSETUP/test.sh b/test/TEST-02-CRYPTSETUP/test.sh index c6e6b7e649..cdaed13047 100755 --- a/test/TEST-02-CRYPTSETUP/test.sh +++ b/test/TEST-02-CRYPTSETUP/test.sh @@ -70,8 +70,8 @@ test_cleanup() { } test_setup_cleanup() { - cleanup_root_var - _test_setup_cleanup + cleanup_root_var || : + cleanup_initdir } do_test "$@" 02 diff --git a/test/TEST-24-UNIT-TESTS/test.sh b/test/TEST-24-UNIT-TESTS/test.sh index 5ce8d85433..2c70d42914 100755 --- a/test/TEST-24-UNIT-TESTS/test.sh +++ b/test/TEST-24-UNIT-TESTS/test.sh @@ -7,25 +7,25 @@ RUN_IN_UNPRIVILEGED_CONTAINER=yes check_result_nspawn() { local _ret=1 - [[ -e $TESTDIR/$1/testok ]] && _ret=0 - if [[ -s $TESTDIR/$1/failed ]]; then + [[ -e $1/testok ]] && _ret=0 + if [[ -s $1/failed ]]; then _ret=$(($_ret+1)) echo "=== Failed test log ===" - cat $TESTDIR/$1/failed + cat $1/failed else - if [[ -s $TESTDIR/$1/skipped ]]; then + if [[ -s $1/skipped ]]; then echo "=== Skipped test log ==" - cat $TESTDIR/$1/skipped + cat $1/skipped fi - if [[ -s $TESTDIR/$1/testok ]]; then + if [[ -s $1/testok ]]; then echo "=== Passed tests ===" - cat $TESTDIR/$1/testok + cat $1/testok fi fi - cp -a $TESTDIR/$1/var/log/journal $TESTDIR - rm -r $TESTDIR/$1/var/log/journal/* - [[ -n "$TIMED_OUT" ]] && _ret=$(($_ret+1)) + cp -a $1/var/log/journal $TESTDIR + rm -r $1/var/log/journal/* umount_initdir + [[ -n "$TIMED_OUT" ]] && _ret=$(($_ret+1)) return $_ret } diff --git a/test/test-functions b/test/test-functions index ebdcfaea66..64afa8e3f1 100644 --- a/test/test-functions +++ b/test/test-functions @@ -233,6 +233,10 @@ run_qemu() { CONSOLE=ttyS0 + # make sure the initdir is not mounted to avoid concurrent access + cleanup_initdir + umount_loopback + if [[ ! "$KERNEL_BIN" ]]; then if [[ "$LOOKS_LIKE_ARCH" ]]; then KERNEL_BIN=/boot/vmlinuz-linux @@ -361,7 +365,7 @@ run_nspawn() { local _nspawn_cmd=( --register=no --kill-signal=SIGKILL - --directory=$TESTDIR/$1 + --directory=$1 --setenv=SYSTEMD_UNIT_PATH=/usr/lib/systemd/tests/testdata/testsuite-$2.units:/usr/lib/systemd/tests/testdata/units: $PATH_TO_INIT $KERNEL_APPEND @@ -677,11 +681,13 @@ create_empty_image() { image="${TESTDIR}/${IMAGE_NAME}.img" public="$IMAGESTATEDIR/${IMAGE_NAME}.img" echo "Setting up $public (${_size} MB)" - rm -f "$image" "$public" + # Create the blank file to use as a root filesystem truncate -s "${_size}M" "$image" - LOOPDEV=$(losetup --show -P -f "$image") + ln -vs "$(realpath $image)" "$public" + + LOOPDEV=$(losetup --show -P -f "$public") [ -b "$LOOPDEV" ] || return 1 echo "LOOPDEV=$LOOPDEV" >>$STATEFILE sfdisk "$LOOPDEV" <>$STATEFILE @@ -726,6 +729,21 @@ umount_initdir() { sed -i /LOOPDEV=/d $STATEFILE } +cleanup_initdir() { + # only umount if create_empty_image_rootdir() was called to mount it + [[ -z $TEST_SETUP_CLEANUP_ROOTDIR ]] || _umount_dir $initdir +} + +umount_loopback() { + # unmount the loopback device from all places. Otherwise we risk file + # system corruption. + image="${IMAGESTATEDIR}/${IMAGE_NAME}.img" + for device in $(losetup -l | awk '$6=="'"$image"'" {print $1}'); do + ddebug "Unmounting all uses of $device" + mount | awk '/^'"${device}"'p/{print $1}' | xargs --no-run-if-empty umount -v + done +} + create_empty_image_rootdir() { create_empty_image mount_initdir @@ -773,15 +791,15 @@ check_result_nspawn() { local ret=1 local journald_report="" local pids="" - [[ -e $TESTDIR/$1/testok ]] && ret=0 - [[ -f $TESTDIR/$1/failed ]] && cp -a $TESTDIR/$1/failed $TESTDIR - cp -a $TESTDIR/$1/var/log/journal $TESTDIR - rm -r $TESTDIR/$1/var/log/journal/* + [[ -e $1/testok ]] && ret=0 + [[ -f $1/failed ]] && cp -a $1/failed $TESTDIR + cp -a $1/var/log/journal $TESTDIR + rm -r $1/var/log/journal/* [[ -f $TESTDIR/failed ]] && cat $TESTDIR/failed ls -l $TESTDIR/journal/*/*.journal test -s $TESTDIR/failed && ret=$(($ret+1)) [ -n "$TIMED_OUT" ] && ret=$(($ret+1)) - check_asan_reports "$TESTDIR/$1" || ret=$(($ret+1)) + check_asan_reports "$1" || ret=$(($ret+1)) umount_initdir return $ret } @@ -1085,11 +1103,10 @@ setup_nspawn_root() { dfatal "\$initdir not defined" exit 1 fi - rm -fr $TESTDIR/nspawn-root - ddebug "cp -ar $initdir $TESTDIR/nspawn-root" - cp -ar $initdir $TESTDIR/nspawn-root + if [[ "$RUN_IN_UNPRIVILEGED_CONTAINER" = "yes" ]]; then - cp -ar $TESTDIR/nspawn-root $TESTDIR/unprivileged-nspawn-root + ddebug "cp -ar $initdir $TESTDIR/unprivileged-nspawn-root" + cp -ar $initdir $TESTDIR/unprivileged-nspawn-root fi } @@ -1898,14 +1915,9 @@ _umount_dir() { fi } -_test_setup_cleanup() { - # only umount if create_empty_image_rootdir() was called to mount it - [[ -z $TEST_SETUP_CLEANUP_ROOTDIR ]] || _umount_dir $initdir -} - # can be overridden in specific test test_setup_cleanup() { - _test_setup_cleanup + cleanup_initdir } _test_cleanup() { @@ -1971,15 +1983,17 @@ test_run() { fi fi if [ -z "$TEST_NO_NSPAWN" ]; then - if run_nspawn "nspawn-root" "$1"; then - check_result_nspawn "nspawn-root" || { echo "nspawn-root test failed"; return 1; } + mount_initdir + if run_nspawn "$initdir" "$1"; then + check_result_nspawn "$initdir" || { echo "nspawn-root test failed"; return 1; } else dwarn "can't run systemd-nspawn, skipping" fi if [[ "$RUN_IN_UNPRIVILEGED_CONTAINER" = "yes" ]]; then - if NSPAWN_ARGUMENTS="-U --private-network $NSPAWN_ARGUMENTS" run_nspawn "unprivileged-nspawn-root" "$1"; then - check_result_nspawn "unprivileged-nspawn-root" || { echo "unprivileged-nspawn-root test failed"; return 1; } + dir="$TESTDIR/unprivileged-nspawn-root" + if NSPAWN_ARGUMENTS="-U --private-network $NSPAWN_ARGUMENTS" run_nspawn "$dir" "$1"; then + check_result_nspawn "$dir" || { echo "unprivileged-nspawn-root test failed"; return 1; } else dwarn "can't run systemd-nspawn, skipping" fi From 108d00a6b2a1bfa7ec5550acdf4b12915d132d96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Fri, 20 Mar 2020 18:31:10 +0100 Subject: [PATCH 73/78] test: simplify the Makefiles has-overflow was a temporary hack that was removed in 844da987ef8b8c98f837d3328eeb3ed481f43835 (Oct. 2016). All the makefiles can be the same, and all the targets can be handled identically. --- test/TEST-01-BASIC/Makefile | 5 +---- test/TEST-13-NSPAWN-SMOKE/Makefile | 11 +---------- test/test-functions | 2 +- 3 files changed, 3 insertions(+), 15 deletions(-) mode change 100644 => 120000 test/TEST-13-NSPAWN-SMOKE/Makefile diff --git a/test/TEST-01-BASIC/Makefile b/test/TEST-01-BASIC/Makefile index 45e9bfc67c..79fe9688b8 100644 --- a/test/TEST-01-BASIC/Makefile +++ b/test/TEST-01-BASIC/Makefile @@ -1,9 +1,6 @@ BUILD_DIR=$(shell ../../tools/find-build-dir.sh) -all setup run: +all setup run clean clean-again: @basedir=../.. TEST_BASE_DIR=../ BUILD_DIR=$(BUILD_DIR) ./test.sh --$@ -clean clean-again: - @basedir=../.. TEST_BASE_DIR=../ BUILD_DIR=$(BUILD_DIR) ./test.sh --clean - .PHONY: all setup run clean clean-again diff --git a/test/TEST-13-NSPAWN-SMOKE/Makefile b/test/TEST-13-NSPAWN-SMOKE/Makefile deleted file mode 100644 index e5e3350211..0000000000 --- a/test/TEST-13-NSPAWN-SMOKE/Makefile +++ /dev/null @@ -1,10 +0,0 @@ -BUILD_DIR=$(shell ../../tools/find-build-dir.sh) - -all setup run: - @basedir=../.. TEST_BASE_DIR=../ BUILD_DIR=$(BUILD_DIR) ./test.sh --$@ - -clean clean-again: - @basedir=../.. TEST_BASE_DIR=../ ./test.sh --clean - @rm -f has-overflow - -.PHONY: all setup run clean clean-again diff --git a/test/TEST-13-NSPAWN-SMOKE/Makefile b/test/TEST-13-NSPAWN-SMOKE/Makefile new file mode 120000 index 0000000000..e9f93b1104 --- /dev/null +++ b/test/TEST-13-NSPAWN-SMOKE/Makefile @@ -0,0 +1 @@ +../TEST-01-BASIC/Makefile \ No newline at end of file diff --git a/test/test-functions b/test/test-functions index 64afa8e3f1..d1595fcd60 100644 --- a/test/test-functions +++ b/test/test-functions @@ -2039,7 +2039,7 @@ do_test() { test_setup test_setup_cleanup ;; - --clean) + --clean|--clean-again) echo "TEST CLEANUP: $TEST_DESCRIPTION" test_cleanup ;; From 693ad298e97a99b1fecdceed72efbeb8b6e0c3a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Fri, 20 Mar 2020 19:09:35 +0100 Subject: [PATCH 74/78] test: perform partial cleanup after each test is run MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This causes the unprivileged-nspawn-root directory to be removed after running one test. The advantage is that we reduce the maximum disk-space use quite a bit (47*400 MB → about 18GB). --- test/run-integration-tests.sh | 2 +- test/test-functions | 14 +++++++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/test/run-integration-tests.sh b/test/run-integration-tests.sh index 19b5fe0315..bcbbb8b7ed 100755 --- a/test/run-integration-tests.sh +++ b/test/run-integration-tests.sh @@ -6,7 +6,7 @@ if [ $# -gt 0 ]; then args="$@" do_clean=0 else - args="setup run" + args="setup run clean-again" do_clean=1 fi diff --git a/test/test-functions b/test/test-functions index d1595fcd60..732e25a8b2 100644 --- a/test/test-functions +++ b/test/test-functions @@ -1104,6 +1104,8 @@ setup_nspawn_root() { exit 1 fi + rm -rf "$TESTDIR/unprivileged-nspawn-root" + if [[ "$RUN_IN_UNPRIVILEGED_CONTAINER" = "yes" ]]; then ddebug "cp -ar $initdir $TESTDIR/unprivileged-nspawn-root" cp -ar $initdir $TESTDIR/unprivileged-nspawn-root @@ -1936,6 +1938,12 @@ test_cleanup() { _test_cleanup } +test_cleanup_again() { + [ -n "$TESTDIR" ] || return + rm -rf "$TESTDIR/unprivileged-nspawn-root" + umount_initdir +} + test_create_image() { create_empty_image_rootdir @@ -2039,10 +2047,14 @@ do_test() { test_setup test_setup_cleanup ;; - --clean|--clean-again) + --clean) echo "TEST CLEANUP: $TEST_DESCRIPTION" test_cleanup ;; + --clean-again) + echo "TEST CLEANUP AGAIN: $TEST_DESCRIPTION" + test_cleanup_again + ;; --all) ret=0 echo -n "TEST: $TEST_DESCRIPTION " From 1506edca913250fa043618cb972d555c7646d397 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Fri, 20 Mar 2020 20:17:11 +0100 Subject: [PATCH 75/78] test: stop caching loopdev It is more trouble than it is worth. The setup is of a loopback device is very quick, so it's better to always create it when needed and immediately drop afterwards. --- test/TEST-02-CRYPTSETUP/test.sh | 7 +++-- test/TEST-24-UNIT-TESTS/test.sh | 4 +-- test/test-functions | 47 ++++++++++++++++++--------------- 3 files changed, 31 insertions(+), 27 deletions(-) diff --git a/test/TEST-02-CRYPTSETUP/test.sh b/test/TEST-02-CRYPTSETUP/test.sh index cdaed13047..157a70021b 100755 --- a/test/TEST-02-CRYPTSETUP/test.sh +++ b/test/TEST-02-CRYPTSETUP/test.sh @@ -8,16 +8,15 @@ TEST_NO_NSPAWN=1 check_result_qemu() { ret=1 - mkdir -p $initdir - mount ${LOOPDEV}p1 $initdir + mount_initdir [[ -e $initdir/testok ]] && ret=0 [[ -f $initdir/failed ]] && cp -a $initdir/failed $TESTDIR cryptsetup luksOpen ${LOOPDEV}p2 varcrypt <$TESTDIR/keyfile mount /dev/mapper/varcrypt $initdir/var cp -a $initdir/var/log/journal $TESTDIR rm -r $initdir/var/log/journal/* - umount $initdir/var - umount $initdir + _umount_dir $initdir/var + _umount_dir $initdir cryptsetup luksClose /dev/mapper/varcrypt [[ -f $TESTDIR/failed ]] && cat $TESTDIR/failed ls -l $TESTDIR/journal/*/*.journal diff --git a/test/TEST-24-UNIT-TESTS/test.sh b/test/TEST-24-UNIT-TESTS/test.sh index 2c70d42914..251ac9ef9b 100755 --- a/test/TEST-24-UNIT-TESTS/test.sh +++ b/test/TEST-24-UNIT-TESTS/test.sh @@ -24,7 +24,7 @@ check_result_nspawn() { fi cp -a $1/var/log/journal $TESTDIR rm -r $1/var/log/journal/* - umount_initdir + _umount_dir $initdir [[ -n "$TIMED_OUT" ]] && _ret=$(($_ret+1)) return $_ret } @@ -49,7 +49,7 @@ check_result_qemu() { fi cp -a $initdir/var/log/journal $TESTDIR rm -r $initdir/var/log/journal/* - umount_initdir + _umount_dir $initdir [[ -n "$TIMED_OUT" ]] && _ret=$(($_ret+1)) return $_ret } diff --git a/test/test-functions b/test/test-functions index 732e25a8b2..73213c3aa7 100644 --- a/test/test-functions +++ b/test/test-functions @@ -18,6 +18,7 @@ EFI_MOUNT="${EFI_MOUNT:-$(bootctl -x 2>/dev/null || echo /boot)}" QEMU_MEM="${QEMU_MEM:-512M}" IMAGE_NAME=${IMAGE_NAME:-default} TEST_REQUIRE_INSTALL_TESTS="${TEST_REQUIRE_INSTALL_TESTS:-1}" +LOOPDEV= # Decide if we can (and want to) run QEMU with KVM acceleration. # Check if nested KVM is explicitly enabled (TEST_NESTED_KVM). If not, @@ -284,7 +285,7 @@ run_qemu() { find_qemu_bin || return 1 # Umount initdir to avoid concurrent access to the filesystem - umount_initdir + _umount_dir $initdir local _cgroup_args if [[ "$UNIFIED_CGROUP_HIERARCHY" = "yes" ]]; then @@ -667,6 +668,15 @@ install_missing_libraries() { done } +cleanup_loopdev() { + if [ -n "${LOOPDEV}" ]; then + ddebug "losetup -d $LOOPDEV" + losetup -d "${LOOPDEV}" + fi +} + +trap cleanup_loopdev EXIT + create_empty_image() { if [ -z "$IMAGE_NAME" ]; then echo "create_empty_image: \$IMAGE_NAME not set" @@ -689,7 +699,6 @@ create_empty_image() { LOOPDEV=$(losetup --show -P -f "$public") [ -b "$LOOPDEV" ] || return 1 - echo "LOOPDEV=$LOOPDEV" >>$STATEFILE sfdisk "$LOOPDEV" <>$STATEFILE + + udevadm settle fi - mkdir -p $initdir - mount ${LOOPDEV}p1 $initdir - TEST_SETUP_CLEANUP_ROOTDIR=1 -} - -umount_initdir() { - _umount_dir $initdir - if [[ $LOOPDEV && -b $LOOPDEV ]]; then - ddebug "losetup -d $LOOPDEV" - losetup -d $LOOPDEV + if ! mountpoint -q $initdir; then + mkdir -p $initdir + mount ${LOOPDEV}p1 $initdir + TEST_SETUP_CLEANUP_ROOTDIR=1 fi - LOOPDEV= - sed -i /LOOPDEV=/d $STATEFILE } cleanup_initdir() { @@ -800,7 +803,7 @@ check_result_nspawn() { test -s $TESTDIR/failed && ret=$(($ret+1)) [ -n "$TIMED_OUT" ] && ret=$(($ret+1)) check_asan_reports "$1" || ret=$(($ret+1)) - umount_initdir + _umount_dir $initdir return $ret } @@ -813,7 +816,7 @@ check_result_qemu() { cp -a $initdir/var/log/journal $TESTDIR rm -r $initdir/var/log/journal/* check_asan_reports "$initdir" || ret=$(($ret+1)) - umount $initdir + _umount_dir $initdir [[ -f $TESTDIR/failed ]] && cat $TESTDIR/failed ls -l $TESTDIR/journal/*/*.journal test -s $TESTDIR/failed && ret=$(($ret+1)) @@ -1164,7 +1167,10 @@ inst_libs() { } import_testdir() { + # make sure we don't get a stale LOOPDEV value from old times + __LOOPDEV=$LOOPDEV [[ -e $STATEFILE ]] && . $STATEFILE + LOOPDEV=$__LOOPDEV if [[ ! -d "$TESTDIR" ]]; then if [[ -z "$TESTDIR" ]]; then TESTDIR=$(mktemp --tmpdir=/var/tmp -d -t systemd-test.XXXXXX) @@ -1174,7 +1180,6 @@ import_testdir() { cat >$STATEFILE< Date: Fri, 13 Dec 2019 14:20:35 +0100 Subject: [PATCH 76/78] test: run unittests with newlines in /proc/cmdline This should help catch this class of errors. --- test/TEST-24-UNIT-TESTS/test.sh | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/test/TEST-24-UNIT-TESTS/test.sh b/test/TEST-24-UNIT-TESTS/test.sh index 251ac9ef9b..a3a911c1b2 100755 --- a/test/TEST-24-UNIT-TESTS/test.sh +++ b/test/TEST-24-UNIT-TESTS/test.sh @@ -3,6 +3,14 @@ set -e TEST_DESCRIPTION="Run unit tests under containers" RUN_IN_UNPRIVILEGED_CONTAINER=yes +# embed some newlines in the kernel command line to stress our test suite +KERNEL_APPEND=" + +frobnicate! + +$KERNEL_APPEND +" + . $TEST_BASE_DIR/test-functions check_result_nspawn() { From e2d612a8e48c99104b9794240ea35ae265bbb0f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Sat, 28 Mar 2020 09:30:51 +0100 Subject: [PATCH 77/78] meson: use find_program() for add-git-hook.sh On azure systemd.systemd ci, the build would fail with: meson.build:53:0: ERROR: Program or command '/home/appuser/fuzzer/tools/add-git-hook.sh' not found or not executable We use find_program() for all helpers, so let's do it for this one too. This should solve the issue, whatever it exactly is. --- meson.build | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/meson.build b/meson.build index d3bdfada85..28042f0ae6 100644 --- a/meson.build +++ b/meson.build @@ -50,9 +50,12 @@ fuzzer_build = want_ossfuzz or want_libfuzzer or want_fuzzbuzz ##################################################################### # Try to install the git pre-commit hook -git_hook = run_command(join_paths(project_source_root, 'tools/add-git-hook.sh')) -if git_hook.returncode() == 0 - message(git_hook.stdout().strip()) +add_git_hook_sh = find_program('tools/add-git-hook.sh', required : false) +if add_git_hook_sh.found() + git_hook = run_command(add_git_hook_sh) + if git_hook.returncode() == 0 + message(git_hook.stdout().strip()) + endif endif ##################################################################### From 8af10ca3fc2554d7bd90be4fe713f786b55ec53b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Wed, 25 Mar 2020 13:15:37 +0100 Subject: [PATCH 78/78] test: print test of name in output --- test/README.testsuite | 6 +++--- test/test-functions | 16 +++++++++------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/test/README.testsuite b/test/README.testsuite index 471771acd4..7204fdb00b 100644 --- a/test/README.testsuite +++ b/test/README.testsuite @@ -10,10 +10,10 @@ ninja: no work to do. --x-- Running TEST-01-BASIC --x-- + make -C TEST-01-BASIC BUILD_DIR=/home/zbyszek/src/systemd/build clean setup run make: Entering directory '/home/zbyszek/src/systemd/test/TEST-01-BASIC' -TEST CLEANUP: Basic systemd setup -TEST SETUP: Basic systemd setup +TEST-01-BASIC CLEANUP: Basic systemd setup +TEST-01-BASIC SETUP: Basic systemd setup ... -TEST RUN: Basic systemd setup [OK] +TEST-01-BASIC RUN: Basic systemd setup [OK] make: Leaving directory '/home/zbyszek/src/systemd/test/TEST-01-BASIC' --x-- Result of TEST-01-BASIC: 0 --x-- --x-- Running TEST-02-CRYPTSETUP --x-- diff --git a/test/test-functions b/test/test-functions index 73213c3aa7..ead815f2fa 100644 --- a/test/test-functions +++ b/test/test-functions @@ -2035,34 +2035,36 @@ do_test() { import_testdir import_initdir + testname="$(basename $PWD)" + while (($# > 0)); do case $1 in --run) - echo "TEST RUN: $TEST_DESCRIPTION" + echo "${testname} RUN: $TEST_DESCRIPTION" test_run "$2" ret=$? if (( $ret == 0 )); then - echo "TEST RUN: $TEST_DESCRIPTION [OK]" + echo "${testname} RUN: $TEST_DESCRIPTION [OK]" else - echo "TEST RUN: $TEST_DESCRIPTION [FAILED]" + echo "${testname} RUN: $TEST_DESCRIPTION [FAILED]" fi exit $ret;; --setup) - echo "TEST SETUP: $TEST_DESCRIPTION" + echo "${testname} SETUP: $TEST_DESCRIPTION" test_setup test_setup_cleanup ;; --clean) - echo "TEST CLEANUP: $TEST_DESCRIPTION" + echo "${testname} CLEANUP: $TEST_DESCRIPTION" test_cleanup ;; --clean-again) - echo "TEST CLEANUP AGAIN: $TEST_DESCRIPTION" + echo "${testname} CLEANUP AGAIN: $TEST_DESCRIPTION" test_cleanup_again ;; --all) ret=0 - echo -n "TEST: $TEST_DESCRIPTION " + echo -n "${testname}: $TEST_DESCRIPTION " ( test_setup test_setup_cleanup