From: Yu Watanabe Date: Sat, 30 Aug 2025 12:59:44 +0000 (+0900) Subject: test: rearrange test-cgroup and test-cgroup-util X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=refs%2Fpull%2F38877%2Fhead;p=thirdparty%2Fsystemd.git test: rearrange test-cgroup and test-cgroup-util --- diff --git a/src/test/meson.build b/src/test/meson.build index da04b82d476..2a4d77a8efb 100644 --- a/src/test/meson.build +++ b/src/test/meson.build @@ -68,8 +68,8 @@ simple_tests += files( 'test-bus-unit-util.c', 'test-bus-util.c', 'test-calendarspec.c', + 'test-cgroup-setup.c', 'test-cgroup-util.c', - 'test-cgroup.c', 'test-chase.c', 'test-chid.c', 'test-clock.c', diff --git a/src/test/test-cgroup.c b/src/test/test-cgroup-setup.c similarity index 60% rename from src/test/test-cgroup.c rename to src/test/test-cgroup-setup.c index a14043442f7..ce20c956d2f 100644 --- a/src/test/test-cgroup.c +++ b/src/test/test-cgroup-setup.c @@ -3,43 +3,11 @@ #include "cgroup-setup.h" #include "cgroup-util.h" #include "errno-util.h" -#include "fd-util.h" #include "path-util.h" #include "process-util.h" -#include "stat-util.h" #include "string-util.h" #include "tests.h" -TEST(cg_split_spec) { - char *c, *p; - - ASSERT_OK_ZERO(cg_split_spec("foobar:/", &c, &p)); - ASSERT_STREQ(c, "foobar"); - ASSERT_STREQ(p, "/"); - c = mfree(c); - p = mfree(p); - - ASSERT_OK_ZERO(cg_split_spec("foobar:", &c, &p)); - c = mfree(c); - p = mfree(p); - - ASSERT_FAIL(cg_split_spec("foobar:asdfd", &c, &p)); - ASSERT_FAIL(cg_split_spec(":///", &c, &p)); - ASSERT_FAIL(cg_split_spec(":", &c, &p)); - ASSERT_FAIL(cg_split_spec("", &c, &p)); - ASSERT_FAIL(cg_split_spec("fo/obar:/", &c, &p)); - - ASSERT_OK(cg_split_spec("/", &c, &p)); - ASSERT_NULL(c); - ASSERT_STREQ(p, "/"); - p = mfree(p); - - ASSERT_OK(cg_split_spec("foo", &c, &p)); - ASSERT_STREQ(c, "foo"); - ASSERT_NULL(p); - c = mfree(c); -} - TEST(cg_create) { int r; @@ -118,45 +86,4 @@ TEST(cg_create) { ASSERT_OK(cg_trim(test_b, true)); } -TEST(id) { - _cleanup_free_ char *p = NULL, *p2 = NULL; - _cleanup_close_ int fd = -EBADF, fd2 = -EBADF; - uint64_t id, id2; - int r; - - r = cg_all_unified(); - if (IN_SET(r, -ENOMEDIUM, -ENOENT)) - return (void) log_tests_skipped("cgroupfs is not mounted"); - if (r == 0) - return (void) log_tests_skipped("skipping cgroupid test, not running in unified mode"); - ASSERT_OK_POSITIVE(r); - - fd = cg_path_open(SYSTEMD_CGROUP_CONTROLLER, "/"); - ASSERT_OK(fd); - - ASSERT_OK(fd_get_path(fd, &p)); - ASSERT_TRUE(path_equal(p, "/sys/fs/cgroup")); - - ASSERT_OK(cg_fd_get_cgroupid(fd, &id)); - - fd2 = cg_cgroupid_open(fd, id); - - if (ERRNO_IS_NEG_PRIVILEGE(fd2)) - log_notice("Skipping open-by-cgroup-id test because lacking privs."); - else if (ERRNO_IS_NEG_NOT_SUPPORTED(fd2)) - log_notice("Skipping open-by-cgroup-id test because syscall is missing or blocked."); - else { - ASSERT_OK(fd2); - - ASSERT_OK(fd_get_path(fd2, &p2)); - ASSERT_TRUE(path_equal(p2, "/sys/fs/cgroup")); - - ASSERT_OK(cg_fd_get_cgroupid(fd2, &id2)); - - ASSERT_EQ(id, id2); - - ASSERT_OK_EQ(inode_same_at(fd, NULL, fd2, NULL, AT_EMPTY_PATH), true); - } -} - DEFINE_TEST_MAIN(LOG_DEBUG); diff --git a/src/test/test-cgroup-util.c b/src/test/test-cgroup-util.c index 552e9a5d280..fea0733173f 100644 --- a/src/test/test-cgroup-util.c +++ b/src/test/test-cgroup-util.c @@ -11,6 +11,7 @@ #include "pidref.h" #include "process-util.h" #include "special.h" +#include "stat-util.h" #include "string-util.h" #include "tests.h" @@ -334,6 +335,36 @@ TEST(controller_is_valid) { assert_se(!cg_controller_is_valid("tatü")); } +TEST(cg_split_spec) { + char *c, *p; + + ASSERT_OK_ZERO(cg_split_spec("foobar:/", &c, &p)); + ASSERT_STREQ(c, "foobar"); + ASSERT_STREQ(p, "/"); + c = mfree(c); + p = mfree(p); + + ASSERT_OK_ZERO(cg_split_spec("foobar:", &c, &p)); + c = mfree(c); + p = mfree(p); + + ASSERT_FAIL(cg_split_spec("foobar:asdfd", &c, &p)); + ASSERT_FAIL(cg_split_spec(":///", &c, &p)); + ASSERT_FAIL(cg_split_spec(":", &c, &p)); + ASSERT_FAIL(cg_split_spec("", &c, &p)); + ASSERT_FAIL(cg_split_spec("fo/obar:/", &c, &p)); + + ASSERT_OK(cg_split_spec("/", &c, &p)); + ASSERT_NULL(c); + ASSERT_STREQ(p, "/"); + p = mfree(p); + + ASSERT_OK(cg_split_spec("foo", &c, &p)); + ASSERT_STREQ(c, "foo"); + ASSERT_NULL(p); + c = mfree(c); +} + static void test_slice_to_path_one(const char *unit, const char *path, int error) { _cleanup_free_ char *ret = NULL; int r; @@ -473,4 +504,45 @@ TEST(bfq_weight_conversion) { assert_se(BFQ_WEIGHT(10000) == 1000); } +TEST(cgroupid) { + _cleanup_free_ char *p = NULL, *p2 = NULL; + _cleanup_close_ int fd = -EBADF, fd2 = -EBADF; + uint64_t id, id2; + int r; + + r = cg_all_unified(); + if (IN_SET(r, -ENOMEDIUM, -ENOENT)) + return (void) log_tests_skipped("cgroupfs is not mounted"); + if (r == 0) + return (void) log_tests_skipped("skipping cgroupid test, not running in unified mode"); + ASSERT_OK_POSITIVE(r); + + fd = cg_path_open(SYSTEMD_CGROUP_CONTROLLER, "/"); + ASSERT_OK(fd); + + ASSERT_OK(fd_get_path(fd, &p)); + ASSERT_TRUE(path_equal(p, "/sys/fs/cgroup")); + + ASSERT_OK(cg_fd_get_cgroupid(fd, &id)); + + fd2 = cg_cgroupid_open(fd, id); + + if (ERRNO_IS_NEG_PRIVILEGE(fd2)) + log_notice("Skipping open-by-cgroup-id test because lacking privs."); + else if (ERRNO_IS_NEG_NOT_SUPPORTED(fd2)) + log_notice("Skipping open-by-cgroup-id test because syscall is missing or blocked."); + else { + ASSERT_OK(fd2); + + ASSERT_OK(fd_get_path(fd2, &p2)); + ASSERT_TRUE(path_equal(p2, "/sys/fs/cgroup")); + + ASSERT_OK(cg_fd_get_cgroupid(fd2, &id2)); + + ASSERT_EQ(id, id2); + + ASSERT_OK_EQ(inode_same_at(fd, NULL, fd2, NULL, AT_EMPTY_PATH), true); + } +} + DEFINE_TEST_MAIN(LOG_DEBUG);