]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
tests: skip tests when cg_pid_get_path fails (#7033)
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Tue, 10 Oct 2017 18:55:20 +0000 (20:55 +0200)
committerGitHub <noreply@github.com>
Tue, 10 Oct 2017 18:55:20 +0000 (20:55 +0200)
v2:
- cast the fstype_t type to ull, because it varies between arches.
  Making it long long should be on the safe side.

src/basic/cgroup-util.c
src/test/test-bpf.c
src/test/test-cgroup-mask.c
src/test/test-engine.c
src/test/test-execute.c
src/test/test-helper.c
src/test/test-helper.h
src/test/test-path.c
src/test/test-sched-prio.c
src/test/test-unit-file.c
src/test/test-unit-name.c

index d51c3efd227811f1edd5441dbd847c676e7565ca..f5fed2a92799df4a7ca84cba8e649e53277d29f9 100644 (file)
@@ -2456,8 +2456,11 @@ static int cg_unified_update(void) {
                                 return -ENOMEDIUM;
                         unified_cache = CGROUP_UNIFIED_NONE;
                 }
-        } else
+        } else {
+                log_debug("Unknown filesystem type %llx mounted on /sys/fs/cgroup.",
+                          (unsigned long long) fs.f_type);
                 return -ENOMEDIUM;
+        }
 
         return 0;
 }
index 74e9d505612d0d5988bf0040c2379e17cede3055..ec8e00b070b9d7887e0f022ec99d904e20e0d5c1 100644 (file)
@@ -49,7 +49,12 @@ int main(int argc, char *argv[]) {
         log_parse_environment();
         log_open();
 
-        enter_cgroup_subroot();
+        r = enter_cgroup_subroot();
+        if (r == -ENOMEDIUM) {
+                log_notice("cgroupfs not available, skipping tests");
+                return EXIT_TEST_SKIP;
+        }
+
         assert_se(set_unit_path(get_testdata_dir("")) >= 0);
         assert_se(runtime_dir = setup_fake_runtime_dir());
 
index 02aae84152daab11a23be13ba775345e222eade6..6fd35c81dcb2f251e79a30731e3a2b934dd312e0 100644 (file)
@@ -34,7 +34,11 @@ static int test_cgroup_mask(void) {
         FDSet *fdset = NULL;
         int r;
 
-        enter_cgroup_subroot();
+        r = enter_cgroup_subroot();
+        if (r == -ENOMEDIUM) {
+                puts("Skipping test: cgroupfs not available");
+                return EXIT_TEST_SKIP;
+        }
 
         /* Prepare the manager. */
         assert_se(set_unit_path(get_testdata_dir("")) >= 0);
index 6916f838d401e15691a8c2579b1f2e93b8ca2f22..55249fdce28ba910039b78f356eea7d2f723b8c6 100644 (file)
@@ -37,7 +37,11 @@ int main(int argc, char *argv[]) {
         Job *j;
         int r;
 
-        enter_cgroup_subroot();
+        r = enter_cgroup_subroot();
+        if (r == -ENOMEDIUM) {
+                log_notice_errno(r, "Skipping test: cgroupfs not available");
+                return EXIT_TEST_SKIP;
+        }
 
         /* prepare the test */
         assert_se(set_unit_path(get_testdata_dir("")) >= 0);
index 6786d561977227e224d20b0fb66a834f18f00c03..486c7e1226a1ea5b62b03ee650a45775141375f2 100644 (file)
@@ -528,11 +528,15 @@ int main(int argc, char *argv[]) {
 
         /* It is needed otherwise cgroup creation fails */
         if (getuid() != 0) {
-                printf("Skipping test: not root\n");
+                puts("Skipping test: not root");
                 return EXIT_TEST_SKIP;
         }
 
-        enter_cgroup_subroot();
+        r = enter_cgroup_subroot();
+        if (r == -ENOMEDIUM) {
+                puts("Skipping test: cgroupfs not available");
+                return EXIT_TEST_SKIP;
+        }
 
         assert_se(setenv("XDG_RUNTIME_DIR", "/tmp/", 1) == 0);
         assert_se(set_unit_path(get_testdata_dir("/test-execute")) >= 0);
index 5b707c3276bc4acac4fcd59588e1d399f810c99e..2a4b4347b6d34374e60ea10391a11a85f833b3e3 100644 (file)
 #include "alloc-util.h"
 #include "cgroup-util.h"
 
-void enter_cgroup_subroot(void) {
+int enter_cgroup_subroot(void) {
         _cleanup_free_ char *cgroup_root = NULL, *cgroup_subroot = NULL;
         CGroupMask supported;
+        int r;
+
+        r = cg_pid_get_path(NULL, 0, &cgroup_root);
+        if (r == -ENOMEDIUM)
+                return log_warning_errno(r, "cg_pid_get_path(NULL, 0, ...) failed: %m");
+        assert(r >= 0);
 
-        assert_se(cg_pid_get_path(NULL, 0, &cgroup_root) >= 0);
         assert_se(asprintf(&cgroup_subroot, "%s/%" PRIx64, cgroup_root, random_u64()) >= 0);
         assert_se(cg_mask_supported(&supported) >= 0);
 
         /* If this fails, then we don't mind as the later cgroup operations will fail too, and it's fine if we handle
          * any errors at that point. */
 
-        if (cg_create_everywhere(supported, _CGROUP_MASK_ALL, cgroup_subroot) < 0)
-                return;
+        r = cg_create_everywhere(supported, _CGROUP_MASK_ALL, cgroup_subroot);
+        if (r < 0)
+                return r;
 
-        if (cg_attach_everywhere(supported, cgroup_subroot, 0, NULL, NULL) < 0)
-                return;
+        return cg_attach_everywhere(supported, cgroup_subroot, 0, NULL, NULL);
 }
index 8af32c8744f0bc73680195d5c6c3c05e8f8fe99e..f7235527a52cec5372dfa2bfd3d931952fb469f9 100644 (file)
@@ -40,4 +40,4 @@
                -ENOMEDIUM /* cannot determine cgroup */         \
                )
 
-void enter_cgroup_subroot(void);
+int enter_cgroup_subroot(void);
index c1915017df3a8d84424bd49da2c3e50272f9381f..9de3dd66743573af9174125694b2a9aa9683b397 100644 (file)
@@ -45,7 +45,11 @@ static int setup_test(Manager **m) {
 
         assert_se(m);
 
-        enter_cgroup_subroot();
+        r = enter_cgroup_subroot();
+        if (r == -ENOMEDIUM) {
+                log_notice_errno(r, "Skipping test: cgroupfs not available");
+                return EXIT_TEST_SKIP;
+        }
 
         r = manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_MINIMAL, &tmp);
         if (MANAGER_SKIP_TEST(r)) {
index 9bed4b38322971a6e7d514219a46f43064eba385..8f526a8415fd8c5dd57eaddf45738639b907187d 100644 (file)
@@ -34,7 +34,11 @@ int main(int argc, char *argv[]) {
         FDSet *fdset = NULL;
         int r;
 
-        enter_cgroup_subroot();
+        r = enter_cgroup_subroot();
+        if (r == -ENOMEDIUM) {
+                log_notice_errno(r, "Skipping test: cgroupfs not available");
+                return EXIT_TEST_SKIP;
+        }
 
         /* prepare the test */
         assert_se(set_unit_path(get_testdata_dir("")) >= 0);
index 07f21d0d3db1161a06523436b958985dcae57a44..c16a6342f71dcda925d6ba214eb6430074b19892 100644 (file)
@@ -858,7 +858,11 @@ int main(int argc, char *argv[]) {
         log_parse_environment();
         log_open();
 
-        enter_cgroup_subroot();
+        r = enter_cgroup_subroot();
+        if (r == -ENOMEDIUM) {
+                log_notice_errno(r, "Skipping test: cgroupfs not available");
+                return EXIT_TEST_SKIP;
+        }
 
         assert_se(runtime_dir = setup_fake_runtime_dir());
 
index 1992357e1b3a84dddecde6d36d381f3fb82f2953..858bbf84761c5bfb9065b3ad563b333ae78a1c90 100644 (file)
@@ -465,12 +465,16 @@ static void test_unit_name_path_unescape(void) {
 
 int main(int argc, char* argv[]) {
         _cleanup_(rm_rf_physical_and_freep) char *runtime_dir = NULL;
-        int rc = 0;
+        int r, rc = 0;
 
         log_parse_environment();
         log_open();
 
-        enter_cgroup_subroot();
+        r = enter_cgroup_subroot();
+        if (r == -ENOMEDIUM) {
+                log_notice_errno(r, "Skipping test: cgroupfs not available");
+                return EXIT_TEST_SKIP;
+        }
 
         assert_se(runtime_dir = setup_fake_runtime_dir());