]> git.ipfire.org Git - thirdparty/libcgroup.git/commitdiff
tests/gunit: Extend the fuzzer to test cgroup_add_value_string()
authorKamalesh Babulal <kamalesh.babulal@oracle.com>
Mon, 27 Feb 2023 04:21:19 +0000 (09:51 +0530)
committerTom Hromatka <tom.hromatka@oracle.com>
Mon, 27 Feb 2023 16:39:30 +0000 (09:39 -0700)
Add fuzzing to the cgroup_add_value_string() API, by passing combination
of valid/NULL as arguments to the API.

[----------] 6 tests from APIArgsTest
[ RUN      ] APIArgsTest.API_cgroup_set_permissions
[       OK ] APIArgsTest.API_cgroup_set_permissions (0 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)
[----------] 6 tests from APIArgsTest (0 ms total)

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

tests/gunit/017-API_fuzz_test.cpp

index a959a2fc7d49643c82b38ddca139e1df6d0cdc44..64f2ee5ce7d15ef5c8e4127ffd5935c45e740576 100644 (file)
@@ -210,3 +210,60 @@ TEST_F(APIArgsTest, API_cgroup_add_controller)
        cgc = cgroup_add_controller(cgroup, new_cg_ctrl);
        ASSERT_EQ(cgc, nullptr);
 }
+
+/**
+ * Test arguments passed to add a controller's setting
+ * @param APIArgsTest googletest test case name
+ * @param API_cgroup_set_value_string test name
+ *
+ * This test will pass a combination of valid and NULL as
+ * arguments to cgroup_add_value_string() and check if it
+ * handles it gracefully.
+ */
+TEST_F(APIArgsTest, API_cgroup_add_value_string)
+{
+       const char * const cg_name = "FuzzerCgroup";
+       struct cgroup_controller *cgc = NULL;
+       const char * const cg_ctrl = "cpu";
+       struct cgroup *cgroup = NULL;
+       char * ctrl_value = NULL;
+       char * ctrl_name = NULL;
+       int ret;
+
+       // case 1
+       // cgc = NULL, name = NULL, value = NULL
+       ret = cgroup_add_value_string(cgc, ctrl_name, ctrl_value);
+       ASSERT_EQ(ret, 50011);
+
+       // case 2
+       // cgc = valid, name = NULL, value = NULL
+       cgroup = cgroup_new_cgroup(cg_name);
+       ASSERT_NE(cgroup, nullptr);
+
+       cgc = cgroup_add_controller(cgroup, cg_ctrl);
+       ASSERT_NE(cgroup, nullptr);
+
+       ret = cgroup_add_value_string(cgc, ctrl_name, ctrl_value);
+       ASSERT_EQ(ret, 50011);
+
+       // case 3
+       // cgc = valid, name = valid, value = NULL
+       ctrl_name = strdup("cpu.shares");
+       ASSERT_NE(ctrl_name, nullptr);
+
+       ret = cgroup_add_value_string(cgc, ctrl_name, ctrl_value);
+       ASSERT_EQ(ret, 0);
+
+       // case 4
+       // cgc = valid, name = NULL, value = valid
+       free(ctrl_name);
+       ctrl_name = NULL;
+
+       ctrl_value = strdup("1024");
+       ASSERT_NE(ctrl_value, nullptr);
+
+       ret = cgroup_add_value_string(cgc, ctrl_name, ctrl_value);
+       ASSERT_EQ(ret, 50011);
+
+       free(ctrl_value);
+}