]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
Fix failing test 27766/head
authorRichard Phibel <rphibel@googlemail.com>
Mon, 29 May 2023 22:45:09 +0000 (00:45 +0200)
committerRichard Phibel <rphibel@googlemail.com>
Tue, 30 May 2023 10:38:47 +0000 (12:38 +0200)
In test-execute, only the unit was started, not the slice. Because of
that the slice cgroup was pruned even if it was still needed. From what
I can tell, this is because, in the test, we don't have all the
mechanics that starts the slice for a service. To fix the issue the
slice is started manually.

src/test/test-execute.c

index ae6227c492b64c3a241ca30d6a5f9a54253d0957..a07c837e3f5c0b57e4f5f6e5cde70f4cd385f8d8 100644 (file)
@@ -206,6 +206,17 @@ static bool is_inaccessible_available(void) {
         return true;
 }
 
+static void start_parent_slices(Unit *unit) {
+        Unit *slice;
+
+        slice = UNIT_GET_SLICE(unit);
+        if (slice) {
+                start_parent_slices(slice);
+                int r = unit_start(slice, NULL);
+                assert_se(r >= 0 || r == -EALREADY);
+        }
+}
+
 static void _test(const char *file, unsigned line, const char *func,
                   Manager *m, const char *unit_name, int status_expected, int code_expected) {
         Unit *unit;
@@ -213,6 +224,9 @@ static void _test(const char *file, unsigned line, const char *func,
         assert_se(unit_name);
 
         assert_se(manager_load_startable_unit_or_warn(m, unit_name, NULL, &unit) >= 0);
+        /* We need to start the slices as well otherwise the slice cgroups might be pruned
+         * in on_cgroup_empty_event. */
+        start_parent_slices(unit);
         assert_se(unit_start(unit, NULL) >= 0);
         check_main_result(file, line, func, m, unit, status_expected, code_expected);
 }