]> git.ipfire.org Git - thirdparty/libcgroup.git/commitdiff
tests/gunit: Extend the fuzzer to test cgroup_set_value_bool()
authorKamalesh Babulal <kamalesh.babulal@oracle.com>
Tue, 7 Mar 2023 05:32:23 +0000 (11:02 +0530)
committerTom Hromatka <tom.hromatka@oracle.com>
Wed, 8 Mar 2023 14:28:30 +0000 (07:28 -0700)
Add fuzzing to the cgroup_set_value_bool() API, by passing combination
of valid/NULL as arguments to the API.

[----------] 12 tests from APIArgsTest
[ RUN      ] APIArgsTest.API_cgroup_set_permissions
[       OK ] APIArgsTest.API_cgroup_set_permissions (1 ms)
[ RUN      ] APIArgsTest.API_cgroup_new_cgroup
[       OK ] APIArgsTest.API_cgroup_new_cgroup (0 ms)
[ RUN      ] APIArgsTest.API_cgroup_set_value_string
[       OK ] APIArgsTest.API_cgroup_set_value_string (0 ms)
[ RUN      ] APIArgsTest.API_cgroup_get_value_string
[       OK ] APIArgsTest.API_cgroup_get_value_string (0 ms)
[ RUN      ] APIArgsTest.API_cgroup_add_controller
[       OK ] APIArgsTest.API_cgroup_add_controller (0 ms)
[ RUN      ] APIArgsTest.API_cgroup_add_value_string
[       OK ] APIArgsTest.API_cgroup_add_value_string (0 ms)
[ RUN      ] APIArgsTest.API_cgroup_get_uid_gid
[       OK ] APIArgsTest.API_cgroup_get_uid_gid (0 ms)
[ RUN      ] APIArgsTest.API_cgroup_set_value_int64
[       OK ] APIArgsTest.API_cgroup_set_value_int64 (0 ms)
[ RUN      ] APIArgsTest.API_cgroup_get_value_int64
[       OK ] APIArgsTest.API_cgroup_get_value_int64 (0 ms)
[ RUN      ] APIArgsTest.API_cgroup_set_value_uint64
[       OK ] APIArgsTest.API_cgroup_set_value_uint64 (0 ms)
[ RUN      ] APIArgsTest.API_cgroup_get_value_uint64
[       OK ] APIArgsTest.API_cgroup_get_value_uint64 (0 ms)
[ RUN      ] APIArgsTest.API_cgroup_set_value_bool
[       OK ] APIArgsTest.API_cgroup_set_value_bool (0 ms)
[----------] 12 tests from APIArgsTest (1 ms total)

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
(cherry picked from commit 235874aea5f1c055c4ae99d0f41ea6e7f650aa96)

tests/gunit/017-API_fuzz_test.cpp

index ba0c8a72e866b41f50e3c76bc680b5f440e8730b..71cb130d52f187a0e078f056ae66030286978e69 100644 (file)
@@ -537,3 +537,58 @@ TEST_F(APIArgsTest, API_cgroup_get_value_uint64)
        ret = cgroup_get_value_uint64(cgc, name, &value);
        ASSERT_EQ(ret, 50011);
 }
+
+/**
+ * Test arguments passed to set a controller's setting
+ * @param APIArgsTest googletest test case name
+ * @param API_cgroup_set_value_bool test name
+ *
+ * This test will pass a combination of valid and NULL as
+ * arguments to cgroup_set_value_bool() and check if it
+ * handles it gracefully.
+ */
+TEST_F(APIArgsTest, API_cgroup_set_value_bool)
+{
+       const char * const cg_name = "FuzzerCgroup";
+       struct cgroup_controller * cgc = NULL;
+       const char * const cg_ctrl = "cpuset";
+       struct cgroup *cgroup = NULL;
+       char * name = NULL;
+       bool value = 1;
+       int ret;
+
+       // case 1
+       // cgc = NULL, name = NULL, value = valid
+       ret = cgroup_set_value_bool(cgc, name, value);
+       ASSERT_EQ(ret, 50011);
+
+       // case 2
+       // cgc = valid, name = NULL, value = valid
+       cgroup = cgroup_new_cgroup(cg_name);
+       ASSERT_NE(cgroup, nullptr);
+
+       cgc = cgroup_add_controller(cgroup, cg_ctrl);
+       ASSERT_NE(cgroup, nullptr);
+
+       // set cpuset.cpu_exclusive, so that cgc->index > 0
+       ret = cgroup_set_value_bool(cgc, "cpuset.cpu_exclusive", 0);
+       ASSERT_EQ(ret, 0);
+
+       ret = cgroup_set_value_bool(cgc, name, value);
+       ASSERT_EQ(ret, 50011);
+
+       // case 3
+       // cgc = valid, name = valid, value = valid
+       name = strdup("cpuset.cpu_exclusive");
+       ASSERT_NE(name, nullptr);
+
+       ret = cgroup_set_value_bool(cgc, name, value);
+       ASSERT_EQ(ret, 0);
+
+       // check if the value was set right
+       ret = cgroup_get_value_bool(cgc, name, &value);
+       ASSERT_EQ(ret, 0);
+       ASSERT_EQ(value, 1);
+
+       free(name);
+}