c2dfb7
From ad8f0b480799aa7e312dacbcb0c01a3a9e6aa6db Mon Sep 17 00:00:00 2001
c2dfb7
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
c2dfb7
Date: Tue, 26 Mar 2019 11:38:55 +0100
c2dfb7
Subject: [PATCH] test-execute: provide custom failure message
c2dfb7
c2dfb7
test_exec_ambientcapabilities: exec-ambientcapabilities-nobody.service: exit status 0, expected 1
c2dfb7
c2dfb7
Sometimes we get just the last line, for example from the failure summary,
c2dfb7
so make it as useful as possible.
c2dfb7
c2dfb7
(cherry picked from commit 6aed6a11577b108b9a39f26aeae5e45d98f20c90)
c2dfb7
c2dfb7
Related: #1737283
c2dfb7
---
c2dfb7
 src/test/test-execute.c | 236 +++++++++++++++++++++-------------------
c2dfb7
 1 file changed, 123 insertions(+), 113 deletions(-)
c2dfb7
c2dfb7
diff --git a/src/test/test-execute.c b/src/test/test-execute.c
c2dfb7
index d077674efc..e42d0d30a8 100644
c2dfb7
--- a/src/test/test-execute.c
c2dfb7
+++ b/src/test/test-execute.c
c2dfb7
@@ -30,7 +30,7 @@
c2dfb7
 
c2dfb7
 typedef void (*test_function_t)(Manager *m);
c2dfb7
 
c2dfb7
-static void check(Manager *m, Unit *unit, int status_expected, int code_expected) {
c2dfb7
+static void check(const char *func, Manager *m, Unit *unit, int status_expected, int code_expected) {
c2dfb7
         Service *service = NULL;
c2dfb7
         usec_t ts;
c2dfb7
         usec_t timeout = 2 * USEC_PER_MINUTE;
c2dfb7
@@ -56,8 +56,18 @@ static void check(Manager *m, Unit *unit, int status_expected, int code_expected
c2dfb7
                 }
c2dfb7
         }
c2dfb7
         exec_status_dump(&service->main_exec_status, stdout, "\t");
c2dfb7
-        assert_se(service->main_exec_status.status == status_expected);
c2dfb7
-        assert_se(service->main_exec_status.code == code_expected);
c2dfb7
+        if (service->main_exec_status.status != status_expected) {
c2dfb7
+                log_error("%s: %s: exit status %d, expected %d",
c2dfb7
+                          func, unit->id,
c2dfb7
+                          service->main_exec_status.status, status_expected);
c2dfb7
+                abort();
c2dfb7
+        }
c2dfb7
+        if (service->main_exec_status.code != code_expected) {
c2dfb7
+                log_error("%s: %s: exit code %d, expected %d",
c2dfb7
+                          func, unit->id,
c2dfb7
+                          service->main_exec_status.code, code_expected);
c2dfb7
+                abort();
c2dfb7
+        }
c2dfb7
 }
c2dfb7
 
c2dfb7
 static bool check_nobody_user_and_group(void) {
c2dfb7
@@ -123,21 +133,21 @@ static bool is_inaccessible_available(void) {
c2dfb7
         return true;
c2dfb7
 }
c2dfb7
 
c2dfb7
-static void test(Manager *m, const char *unit_name, int status_expected, int code_expected) {
c2dfb7
+static void test(const char *func, Manager *m, const char *unit_name, int status_expected, int code_expected) {
c2dfb7
         Unit *unit;
c2dfb7
 
c2dfb7
         assert_se(unit_name);
c2dfb7
 
c2dfb7
         assert_se(manager_load_startable_unit_or_warn(m, unit_name, NULL, &unit) >= 0);
c2dfb7
         assert_se(unit_start(unit) >= 0);
c2dfb7
-        check(m, unit, status_expected, code_expected);
c2dfb7
+        check(func, m, unit, status_expected, code_expected);
c2dfb7
 }
c2dfb7
 
c2dfb7
 static void test_exec_bindpaths(Manager *m) {
c2dfb7
         assert_se(mkdir_p("/tmp/test-exec-bindpaths", 0755) >= 0);
c2dfb7
         assert_se(mkdir_p("/tmp/test-exec-bindreadonlypaths", 0755) >= 0);
c2dfb7
 
c2dfb7
-        test(m, "exec-bindpaths.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-bindpaths.service", 0, CLD_EXITED);
c2dfb7
 
c2dfb7
         (void) rm_rf("/tmp/test-exec-bindpaths", REMOVE_ROOT|REMOVE_PHYSICAL);
c2dfb7
         (void) rm_rf("/tmp/test-exec-bindreadonlypaths", REMOVE_ROOT|REMOVE_PHYSICAL);
c2dfb7
@@ -154,8 +164,8 @@ static void test_exec_cpuaffinity(Manager *m) {
c2dfb7
                 return;
c2dfb7
         }
c2dfb7
 
c2dfb7
-        test(m, "exec-cpuaffinity1.service", 0, CLD_EXITED);
c2dfb7
-        test(m, "exec-cpuaffinity2.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-cpuaffinity1.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-cpuaffinity2.service", 0, CLD_EXITED);
c2dfb7
 
c2dfb7
         if (!CPU_ISSET_S(1, c.allocated, c.set) ||
c2dfb7
             !CPU_ISSET_S(2, c.allocated, c.set)) {
c2dfb7
@@ -163,52 +173,52 @@ static void test_exec_cpuaffinity(Manager *m) {
c2dfb7
                 return;
c2dfb7
         }
c2dfb7
 
c2dfb7
-        test(m, "exec-cpuaffinity3.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-cpuaffinity3.service", 0, CLD_EXITED);
c2dfb7
 }
c2dfb7
 
c2dfb7
 static void test_exec_workingdirectory(Manager *m) {
c2dfb7
         assert_se(mkdir_p("/tmp/test-exec_workingdirectory", 0755) >= 0);
c2dfb7
 
c2dfb7
-        test(m, "exec-workingdirectory.service", 0, CLD_EXITED);
c2dfb7
-        test(m, "exec-workingdirectory-trailing-dot.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-workingdirectory.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-workingdirectory-trailing-dot.service", 0, CLD_EXITED);
c2dfb7
 
c2dfb7
         (void) rm_rf("/tmp/test-exec_workingdirectory", REMOVE_ROOT|REMOVE_PHYSICAL);
c2dfb7
 }
c2dfb7
 
c2dfb7
 static void test_exec_personality(Manager *m) {
c2dfb7
 #if defined(__x86_64__)
c2dfb7
-        test(m, "exec-personality-x86-64.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-personality-x86-64.service", 0, CLD_EXITED);
c2dfb7
 
c2dfb7
 #elif defined(__s390__)
c2dfb7
-        test(m, "exec-personality-s390.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-personality-s390.service", 0, CLD_EXITED);
c2dfb7
 
c2dfb7
 #elif defined(__powerpc64__)
c2dfb7
 #  if __BYTE_ORDER == __BIG_ENDIAN
c2dfb7
-        test(m, "exec-personality-ppc64.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-personality-ppc64.service", 0, CLD_EXITED);
c2dfb7
 #  else
c2dfb7
-        test(m, "exec-personality-ppc64le.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-personality-ppc64le.service", 0, CLD_EXITED);
c2dfb7
 #  endif
c2dfb7
 
c2dfb7
 #elif defined(__aarch64__)
c2dfb7
-        test(m, "exec-personality-aarch64.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-personality-aarch64.service", 0, CLD_EXITED);
c2dfb7
 
c2dfb7
 #elif defined(__i386__)
c2dfb7
-        test(m, "exec-personality-x86.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-personality-x86.service", 0, CLD_EXITED);
c2dfb7
 #else
c2dfb7
         log_notice("Unknown personality, skipping %s", __func__);
c2dfb7
 #endif
c2dfb7
 }
c2dfb7
 
c2dfb7
 static void test_exec_ignoresigpipe(Manager *m) {
c2dfb7
-        test(m, "exec-ignoresigpipe-yes.service", 0, CLD_EXITED);
c2dfb7
-        test(m, "exec-ignoresigpipe-no.service", SIGPIPE, CLD_KILLED);
c2dfb7
+        test(__func__, m, "exec-ignoresigpipe-yes.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-ignoresigpipe-no.service", SIGPIPE, CLD_KILLED);
c2dfb7
 }
c2dfb7
 
c2dfb7
 static void test_exec_privatetmp(Manager *m) {
c2dfb7
         assert_se(touch("/tmp/test-exec_privatetmp") >= 0);
c2dfb7
 
c2dfb7
-        test(m, "exec-privatetmp-yes.service", 0, CLD_EXITED);
c2dfb7
-        test(m, "exec-privatetmp-no.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-privatetmp-yes.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-privatetmp-no.service", 0, CLD_EXITED);
c2dfb7
 
c2dfb7
         unlink("/tmp/test-exec_privatetmp");
c2dfb7
 }
c2dfb7
@@ -225,9 +235,9 @@ static void test_exec_privatedevices(Manager *m) {
c2dfb7
                 return;
c2dfb7
         }
c2dfb7
 
c2dfb7
-        test(m, "exec-privatedevices-yes.service", 0, CLD_EXITED);
c2dfb7
-        test(m, "exec-privatedevices-no.service", 0, CLD_EXITED);
c2dfb7
-        test(m, "exec-privatedevices-disabled-by-prefix.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-privatedevices-yes.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-privatedevices-no.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-privatedevices-disabled-by-prefix.service", 0, CLD_EXITED);
c2dfb7
 
c2dfb7
         /* We use capsh to test if the capabilities are
c2dfb7
          * properly set, so be sure that it exists */
c2dfb7
@@ -237,10 +247,10 @@ static void test_exec_privatedevices(Manager *m) {
c2dfb7
                 return;
c2dfb7
         }
c2dfb7
 
c2dfb7
-        test(m, "exec-privatedevices-yes-capability-mknod.service", 0, CLD_EXITED);
c2dfb7
-        test(m, "exec-privatedevices-no-capability-mknod.service", 0, CLD_EXITED);
c2dfb7
-        test(m, "exec-privatedevices-yes-capability-sys-rawio.service", 0, CLD_EXITED);
c2dfb7
-        test(m, "exec-privatedevices-no-capability-sys-rawio.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-privatedevices-yes-capability-mknod.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-privatedevices-no-capability-mknod.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-privatedevices-yes-capability-sys-rawio.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-privatedevices-no-capability-sys-rawio.service", 0, CLD_EXITED);
c2dfb7
 }
c2dfb7
 
c2dfb7
 static void test_exec_protectkernelmodules(Manager *m) {
c2dfb7
@@ -261,23 +271,23 @@ static void test_exec_protectkernelmodules(Manager *m) {
c2dfb7
                 return;
c2dfb7
         }
c2dfb7
 
c2dfb7
-        test(m, "exec-protectkernelmodules-no-capabilities.service", 0, CLD_EXITED);
c2dfb7
-        test(m, "exec-protectkernelmodules-yes-capabilities.service", 0, CLD_EXITED);
c2dfb7
-        test(m, "exec-protectkernelmodules-yes-mount-propagation.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-protectkernelmodules-no-capabilities.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-protectkernelmodules-yes-capabilities.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-protectkernelmodules-yes-mount-propagation.service", 0, CLD_EXITED);
c2dfb7
 }
c2dfb7
 
c2dfb7
 static void test_exec_readonlypaths(Manager *m) {
c2dfb7
 
c2dfb7
-        test(m, "exec-readonlypaths-simple.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-readonlypaths-simple.service", 0, CLD_EXITED);
c2dfb7
 
c2dfb7
         if (path_is_read_only_fs("/var") > 0) {
c2dfb7
                 log_notice("Directory /var is readonly, skipping remaining tests in %s", __func__);
c2dfb7
                 return;
c2dfb7
         }
c2dfb7
 
c2dfb7
-        test(m, "exec-readonlypaths.service", 0, CLD_EXITED);
c2dfb7
-        test(m, "exec-readonlypaths-mount-propagation.service", 0, CLD_EXITED);
c2dfb7
-        test(m, "exec-readonlypaths-with-bindpaths.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-readonlypaths.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-readonlypaths-mount-propagation.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-readonlypaths-with-bindpaths.service", 0, CLD_EXITED);
c2dfb7
 }
c2dfb7
 
c2dfb7
 static void test_exec_readwritepaths(Manager *m) {
c2dfb7
@@ -287,7 +297,7 @@ static void test_exec_readwritepaths(Manager *m) {
c2dfb7
                 return;
c2dfb7
         }
c2dfb7
 
c2dfb7
-        test(m, "exec-readwritepaths-mount-propagation.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-readwritepaths-mount-propagation.service", 0, CLD_EXITED);
c2dfb7
 }
c2dfb7
 
c2dfb7
 static void test_exec_inaccessiblepaths(Manager *m) {
c2dfb7
@@ -297,22 +307,22 @@ static void test_exec_inaccessiblepaths(Manager *m) {
c2dfb7
                 return;
c2dfb7
         }
c2dfb7
 
c2dfb7
-        test(m, "exec-inaccessiblepaths-proc.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-inaccessiblepaths-proc.service", 0, CLD_EXITED);
c2dfb7
 
c2dfb7
         if (path_is_read_only_fs("/") > 0) {
c2dfb7
                 log_notice("Root directory is readonly, skipping remaining tests in %s", __func__);
c2dfb7
                 return;
c2dfb7
         }
c2dfb7
 
c2dfb7
-        test(m, "exec-inaccessiblepaths-mount-propagation.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-inaccessiblepaths-mount-propagation.service", 0, CLD_EXITED);
c2dfb7
 }
c2dfb7
 
c2dfb7
 static void test_exec_temporaryfilesystem(Manager *m) {
c2dfb7
 
c2dfb7
-        test(m, "exec-temporaryfilesystem-options.service", 0, CLD_EXITED);
c2dfb7
-        test(m, "exec-temporaryfilesystem-ro.service", 0, CLD_EXITED);
c2dfb7
-        test(m, "exec-temporaryfilesystem-rw.service", 0, CLD_EXITED);
c2dfb7
-        test(m, "exec-temporaryfilesystem-usr.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-temporaryfilesystem-options.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-temporaryfilesystem-ro.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-temporaryfilesystem-rw.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-temporaryfilesystem-usr.service", 0, CLD_EXITED);
c2dfb7
 }
c2dfb7
 
c2dfb7
 static void test_exec_systemcallfilter(Manager *m) {
c2dfb7
@@ -324,10 +334,10 @@ static void test_exec_systemcallfilter(Manager *m) {
c2dfb7
                 return;
c2dfb7
         }
c2dfb7
 
c2dfb7
-        test(m, "exec-systemcallfilter-not-failing.service", 0, CLD_EXITED);
c2dfb7
-        test(m, "exec-systemcallfilter-not-failing2.service", 0, CLD_EXITED);
c2dfb7
-        test(m, "exec-systemcallfilter-failing.service", SIGSYS, CLD_KILLED);
c2dfb7
-        test(m, "exec-systemcallfilter-failing2.service", SIGSYS, CLD_KILLED);
c2dfb7
+        test(__func__, m, "exec-systemcallfilter-not-failing.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-systemcallfilter-not-failing2.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-systemcallfilter-failing.service", SIGSYS, CLD_KILLED);
c2dfb7
+        test(__func__, m, "exec-systemcallfilter-failing2.service", SIGSYS, CLD_KILLED);
c2dfb7
 
c2dfb7
         r = find_binary("python3", NULL);
c2dfb7
         if (r < 0) {
c2dfb7
@@ -335,8 +345,8 @@ static void test_exec_systemcallfilter(Manager *m) {
c2dfb7
                 return;
c2dfb7
         }
c2dfb7
 
c2dfb7
-        test(m, "exec-systemcallfilter-with-errno-name.service", errno_from_name("EILSEQ"), CLD_EXITED);
c2dfb7
-        test(m, "exec-systemcallfilter-with-errno-number.service", 255, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-systemcallfilter-with-errno-name.service", errno_from_name("EILSEQ"), CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-systemcallfilter-with-errno-number.service", 255, CLD_EXITED);
c2dfb7
 #endif
c2dfb7
 }
c2dfb7
 
c2dfb7
@@ -355,8 +365,8 @@ static void test_exec_systemcallerrornumber(Manager *m) {
c2dfb7
                 return;
c2dfb7
         }
c2dfb7
 
c2dfb7
-        test(m, "exec-systemcallerrornumber-name.service", errno_from_name("EACCES"), CLD_EXITED);
c2dfb7
-        test(m, "exec-systemcallerrornumber-number.service", 255, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-systemcallerrornumber-name.service", errno_from_name("EACCES"), CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-systemcallerrornumber-number.service", 255, CLD_EXITED);
c2dfb7
 #endif
c2dfb7
 }
c2dfb7
 
c2dfb7
@@ -367,13 +377,13 @@ static void test_exec_restrictnamespaces(Manager *m) {
c2dfb7
                 return;
c2dfb7
         }
c2dfb7
 
c2dfb7
-        test(m, "exec-restrictnamespaces-no.service", 0, CLD_EXITED);
c2dfb7
-        test(m, "exec-restrictnamespaces-yes.service", 1, CLD_EXITED);
c2dfb7
-        test(m, "exec-restrictnamespaces-mnt.service", 0, CLD_EXITED);
c2dfb7
-        test(m, "exec-restrictnamespaces-mnt-blacklist.service", 1, CLD_EXITED);
c2dfb7
-        test(m, "exec-restrictnamespaces-merge-and.service", 0, CLD_EXITED);
c2dfb7
-        test(m, "exec-restrictnamespaces-merge-or.service", 0, CLD_EXITED);
c2dfb7
-        test(m, "exec-restrictnamespaces-merge-all.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-restrictnamespaces-no.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-restrictnamespaces-yes.service", 1, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-restrictnamespaces-mnt.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-restrictnamespaces-mnt-blacklist.service", 1, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-restrictnamespaces-merge-and.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-restrictnamespaces-merge-or.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-restrictnamespaces-merge-all.service", 0, CLD_EXITED);
c2dfb7
 #endif
c2dfb7
 }
c2dfb7
 
c2dfb7
@@ -384,7 +394,7 @@ static void test_exec_systemcallfilter_system(Manager *m) {
c2dfb7
                 return;
c2dfb7
         }
c2dfb7
 
c2dfb7
-        test(m, "exec-systemcallfilter-system-user.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-systemcallfilter-system-user.service", 0, CLD_EXITED);
c2dfb7
 
c2dfb7
         if (!check_nobody_user_and_group()) {
c2dfb7
                 log_notice("nobody user/group is not synthesized or may conflict to other entries, skipping remaining tests in %s", __func__);
c2dfb7
@@ -396,12 +406,12 @@ static void test_exec_systemcallfilter_system(Manager *m) {
c2dfb7
                 return;
c2dfb7
         }
c2dfb7
 
c2dfb7
-        test(m, "exec-systemcallfilter-system-user-" NOBODY_USER_NAME ".service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-systemcallfilter-system-user-" NOBODY_USER_NAME ".service", 0, CLD_EXITED);
c2dfb7
 #endif
c2dfb7
 }
c2dfb7
 
c2dfb7
 static void test_exec_user(Manager *m) {
c2dfb7
-        test(m, "exec-user.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-user.service", 0, CLD_EXITED);
c2dfb7
 
c2dfb7
         if (!check_nobody_user_and_group()) {
c2dfb7
                 log_notice("nobody user/group is not synthesized or may conflict to other entries, skipping remaining tests in %s", __func__);
c2dfb7
@@ -413,11 +423,11 @@ static void test_exec_user(Manager *m) {
c2dfb7
                 return;
c2dfb7
         }
c2dfb7
 
c2dfb7
-        test(m, "exec-user-" NOBODY_USER_NAME ".service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-user-" NOBODY_USER_NAME ".service", 0, CLD_EXITED);
c2dfb7
 }
c2dfb7
 
c2dfb7
 static void test_exec_group(Manager *m) {
c2dfb7
-        test(m, "exec-group.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-group.service", 0, CLD_EXITED);
c2dfb7
 
c2dfb7
         if (!check_nobody_user_and_group()) {
c2dfb7
                 log_notice("nobody user/group is not synthesized or may conflict to other entries, skipping remaining tests in %s", __func__);
c2dfb7
@@ -429,31 +439,31 @@ static void test_exec_group(Manager *m) {
c2dfb7
                 return;
c2dfb7
         }
c2dfb7
 
c2dfb7
-        test(m, "exec-group-" NOBODY_GROUP_NAME ".service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-group-" NOBODY_GROUP_NAME ".service", 0, CLD_EXITED);
c2dfb7
 }
c2dfb7
 
c2dfb7
 static void test_exec_supplementarygroups(Manager *m) {
c2dfb7
-        test(m, "exec-supplementarygroups.service", 0, CLD_EXITED);
c2dfb7
-        test(m, "exec-supplementarygroups-single-group.service", 0, CLD_EXITED);
c2dfb7
-        test(m, "exec-supplementarygroups-single-group-user.service", 0, CLD_EXITED);
c2dfb7
-        test(m, "exec-supplementarygroups-multiple-groups-default-group-user.service", 0, CLD_EXITED);
c2dfb7
-        test(m, "exec-supplementarygroups-multiple-groups-withgid.service", 0, CLD_EXITED);
c2dfb7
-        test(m, "exec-supplementarygroups-multiple-groups-withuid.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-supplementarygroups.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-supplementarygroups-single-group.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-supplementarygroups-single-group-user.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-supplementarygroups-multiple-groups-default-group-user.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-supplementarygroups-multiple-groups-withgid.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-supplementarygroups-multiple-groups-withuid.service", 0, CLD_EXITED);
c2dfb7
 }
c2dfb7
 
c2dfb7
 static void test_exec_dynamicuser(Manager *m) {
c2dfb7
-        test(m, "exec-dynamicuser-fixeduser.service", 0, CLD_EXITED);
c2dfb7
-        test(m, "exec-dynamicuser-fixeduser-one-supplementarygroup.service", 0, CLD_EXITED);
c2dfb7
-        test(m, "exec-dynamicuser-supplementarygroups.service", 0, CLD_EXITED);
c2dfb7
-        test(m, "exec-dynamicuser-statedir.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-dynamicuser-fixeduser.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-dynamicuser-fixeduser-one-supplementarygroup.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-dynamicuser-supplementarygroups.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-dynamicuser-statedir.service", 0, CLD_EXITED);
c2dfb7
 
c2dfb7
         (void) rm_rf("/var/lib/test-dynamicuser-migrate", REMOVE_ROOT|REMOVE_PHYSICAL);
c2dfb7
         (void) rm_rf("/var/lib/test-dynamicuser-migrate2", REMOVE_ROOT|REMOVE_PHYSICAL);
c2dfb7
         (void) rm_rf("/var/lib/private/test-dynamicuser-migrate", REMOVE_ROOT|REMOVE_PHYSICAL);
c2dfb7
         (void) rm_rf("/var/lib/private/test-dynamicuser-migrate2", REMOVE_ROOT|REMOVE_PHYSICAL);
c2dfb7
 
c2dfb7
-        test(m, "exec-dynamicuser-statedir-migrate-step1.service", 0, CLD_EXITED);
c2dfb7
-        test(m, "exec-dynamicuser-statedir-migrate-step2.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-dynamicuser-statedir-migrate-step1.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-dynamicuser-statedir-migrate-step2.service", 0, CLD_EXITED);
c2dfb7
 
c2dfb7
         (void) rm_rf("/var/lib/test-dynamicuser-migrate", REMOVE_ROOT|REMOVE_PHYSICAL);
c2dfb7
         (void) rm_rf("/var/lib/test-dynamicuser-migrate2", REMOVE_ROOT|REMOVE_PHYSICAL);
c2dfb7
@@ -462,9 +472,9 @@ static void test_exec_dynamicuser(Manager *m) {
c2dfb7
 }
c2dfb7
 
c2dfb7
 static void test_exec_environment(Manager *m) {
c2dfb7
-        test(m, "exec-environment.service", 0, CLD_EXITED);
c2dfb7
-        test(m, "exec-environment-multiple.service", 0, CLD_EXITED);
c2dfb7
-        test(m, "exec-environment-empty.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-environment.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-environment-multiple.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-environment-empty.service", 0, CLD_EXITED);
c2dfb7
 }
c2dfb7
 
c2dfb7
 static void test_exec_environmentfile(Manager *m) {
c2dfb7
@@ -484,7 +494,7 @@ static void test_exec_environmentfile(Manager *m) {
c2dfb7
         r = write_string_file("/tmp/test-exec_environmentfile.conf", e, WRITE_STRING_FILE_CREATE);
c2dfb7
         assert_se(r == 0);
c2dfb7
 
c2dfb7
-        test(m, "exec-environmentfile.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-environmentfile.service", 0, CLD_EXITED);
c2dfb7
 
c2dfb7
         (void) unlink("/tmp/test-exec_environmentfile.conf");
c2dfb7
 }
c2dfb7
@@ -506,26 +516,26 @@ static void test_exec_passenvironment(Manager *m) {
c2dfb7
         assert_se(setenv("VAR3", "$word 5 6", 1) == 0);
c2dfb7
         assert_se(setenv("VAR4", "new\nline", 1) == 0);
c2dfb7
         assert_se(setenv("VAR5", "passwordwithbackslashes", 1) == 0);
c2dfb7
-        test(m, "exec-passenvironment.service", 0, CLD_EXITED);
c2dfb7
-        test(m, "exec-passenvironment-repeated.service", 0, CLD_EXITED);
c2dfb7
-        test(m, "exec-passenvironment-empty.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-passenvironment.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-passenvironment-repeated.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-passenvironment-empty.service", 0, CLD_EXITED);
c2dfb7
         assert_se(unsetenv("VAR1") == 0);
c2dfb7
         assert_se(unsetenv("VAR2") == 0);
c2dfb7
         assert_se(unsetenv("VAR3") == 0);
c2dfb7
         assert_se(unsetenv("VAR4") == 0);
c2dfb7
         assert_se(unsetenv("VAR5") == 0);
c2dfb7
-        test(m, "exec-passenvironment-absent.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-passenvironment-absent.service", 0, CLD_EXITED);
c2dfb7
 }
c2dfb7
 
c2dfb7
 static void test_exec_umask(Manager *m) {
c2dfb7
-        test(m, "exec-umask-default.service", 0, CLD_EXITED);
c2dfb7
-        test(m, "exec-umask-0177.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-umask-default.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-umask-0177.service", 0, CLD_EXITED);
c2dfb7
 }
c2dfb7
 
c2dfb7
 static void test_exec_runtimedirectory(Manager *m) {
c2dfb7
-        test(m, "exec-runtimedirectory.service", 0, CLD_EXITED);
c2dfb7
-        test(m, "exec-runtimedirectory-mode.service", 0, CLD_EXITED);
c2dfb7
-        test(m, "exec-runtimedirectory-owner.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-runtimedirectory.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-runtimedirectory-mode.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-runtimedirectory-owner.service", 0, CLD_EXITED);
c2dfb7
 
c2dfb7
         if (!check_nobody_user_and_group()) {
c2dfb7
                 log_notice("nobody user/group is not synthesized or may conflict to other entries, skipping remaining tests in %s", __func__);
c2dfb7
@@ -537,7 +547,7 @@ static void test_exec_runtimedirectory(Manager *m) {
c2dfb7
                 return;
c2dfb7
         }
c2dfb7
 
c2dfb7
-        test(m, "exec-runtimedirectory-owner-" NOBODY_GROUP_NAME ".service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-runtimedirectory-owner-" NOBODY_GROUP_NAME ".service", 0, CLD_EXITED);
c2dfb7
 }
c2dfb7
 
c2dfb7
 static void test_exec_capabilityboundingset(Manager *m) {
c2dfb7
@@ -556,14 +566,14 @@ static void test_exec_capabilityboundingset(Manager *m) {
c2dfb7
                 return;
c2dfb7
         }
c2dfb7
 
c2dfb7
-        test(m, "exec-capabilityboundingset-simple.service", 0, CLD_EXITED);
c2dfb7
-        test(m, "exec-capabilityboundingset-reset.service", 0, CLD_EXITED);
c2dfb7
-        test(m, "exec-capabilityboundingset-merge.service", 0, CLD_EXITED);
c2dfb7
-        test(m, "exec-capabilityboundingset-invert.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-capabilityboundingset-simple.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-capabilityboundingset-reset.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-capabilityboundingset-merge.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-capabilityboundingset-invert.service", 0, CLD_EXITED);
c2dfb7
 }
c2dfb7
 
c2dfb7
 static void test_exec_basic(Manager *m) {
c2dfb7
-        test(m, "exec-basic.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-basic.service", 0, CLD_EXITED);
c2dfb7
 }
c2dfb7
 
c2dfb7
 static void test_exec_ambientcapabilities(Manager *m) {
c2dfb7
@@ -585,8 +595,8 @@ static void test_exec_ambientcapabilities(Manager *m) {
c2dfb7
                 return;
c2dfb7
         }
c2dfb7
 
c2dfb7
-        test(m, "exec-ambientcapabilities.service", 0, CLD_EXITED);
c2dfb7
-        test(m, "exec-ambientcapabilities-merge.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-ambientcapabilities.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-ambientcapabilities-merge.service", 0, CLD_EXITED);
c2dfb7
 
c2dfb7
         if (!check_nobody_user_and_group()) {
c2dfb7
                 log_notice("nobody user/group is not synthesized or may conflict to other entries, skipping remaining tests in %s", __func__);
c2dfb7
@@ -598,8 +608,8 @@ static void test_exec_ambientcapabilities(Manager *m) {
c2dfb7
                 return;
c2dfb7
         }
c2dfb7
 
c2dfb7
-        test(m, "exec-ambientcapabilities-" NOBODY_USER_NAME ".service", 0, CLD_EXITED);
c2dfb7
-        test(m, "exec-ambientcapabilities-merge-" NOBODY_USER_NAME ".service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-ambientcapabilities-" NOBODY_USER_NAME ".service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-ambientcapabilities-merge-" NOBODY_USER_NAME ".service", 0, CLD_EXITED);
c2dfb7
 }
c2dfb7
 
c2dfb7
 static void test_exec_privatenetwork(Manager *m) {
c2dfb7
@@ -611,52 +621,52 @@ static void test_exec_privatenetwork(Manager *m) {
c2dfb7
                 return;
c2dfb7
         }
c2dfb7
 
c2dfb7
-        test(m, "exec-privatenetwork-yes.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-privatenetwork-yes.service", 0, CLD_EXITED);
c2dfb7
 }
c2dfb7
 
c2dfb7
 static void test_exec_oomscoreadjust(Manager *m) {
c2dfb7
-        test(m, "exec-oomscoreadjust-positive.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-oomscoreadjust-positive.service", 0, CLD_EXITED);
c2dfb7
 
c2dfb7
         if (detect_container() > 0) {
c2dfb7
                 log_notice("Testing in container, skipping remaining tests in %s", __func__);
c2dfb7
                 return;
c2dfb7
         }
c2dfb7
-        test(m, "exec-oomscoreadjust-negative.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-oomscoreadjust-negative.service", 0, CLD_EXITED);
c2dfb7
 }
c2dfb7
 
c2dfb7
 static void test_exec_ioschedulingclass(Manager *m) {
c2dfb7
-        test(m, "exec-ioschedulingclass-none.service", 0, CLD_EXITED);
c2dfb7
-        test(m, "exec-ioschedulingclass-idle.service", 0, CLD_EXITED);
c2dfb7
-        test(m, "exec-ioschedulingclass-best-effort.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-ioschedulingclass-none.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-ioschedulingclass-idle.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-ioschedulingclass-best-effort.service", 0, CLD_EXITED);
c2dfb7
 
c2dfb7
         if (detect_container() > 0) {
c2dfb7
                 log_notice("Testing in container, skipping remaining tests in %s", __func__);
c2dfb7
                 return;
c2dfb7
         }
c2dfb7
-        test(m, "exec-ioschedulingclass-realtime.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-ioschedulingclass-realtime.service", 0, CLD_EXITED);
c2dfb7
 }
c2dfb7
 
c2dfb7
 static void test_exec_unsetenvironment(Manager *m) {
c2dfb7
-        test(m, "exec-unsetenvironment.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-unsetenvironment.service", 0, CLD_EXITED);
c2dfb7
 }
c2dfb7
 
c2dfb7
 static void test_exec_specifier(Manager *m) {
c2dfb7
-        test(m, "exec-specifier.service", 0, CLD_EXITED);
c2dfb7
-        test(m, "exec-specifier@foo-bar.service", 0, CLD_EXITED);
c2dfb7
-        test(m, "exec-specifier-interpolation.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-specifier.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-specifier@foo-bar.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-specifier-interpolation.service", 0, CLD_EXITED);
c2dfb7
 }
c2dfb7
 
c2dfb7
 static void test_exec_standardinput(Manager *m) {
c2dfb7
-        test(m, "exec-standardinput-data.service", 0, CLD_EXITED);
c2dfb7
-        test(m, "exec-standardinput-file.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-standardinput-data.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-standardinput-file.service", 0, CLD_EXITED);
c2dfb7
 }
c2dfb7
 
c2dfb7
 static void test_exec_standardoutput(Manager *m) {
c2dfb7
-        test(m, "exec-standardoutput-file.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-standardoutput-file.service", 0, CLD_EXITED);
c2dfb7
 }
c2dfb7
 
c2dfb7
 static void test_exec_standardoutput_append(Manager *m) {
c2dfb7
-        test(m, "exec-standardoutput-append.service", 0, CLD_EXITED);
c2dfb7
+        test(__func__, m, "exec-standardoutput-append.service", 0, CLD_EXITED);
c2dfb7
 }
c2dfb7
 
c2dfb7
 typedef struct test_entry {