From a94c746bd53d9f69f7658f71e8f9330862cbb38f Mon Sep 17 00:00:00 2001 From: Kamalesh Babulal Date: Mon, 27 Feb 2023 09:51:19 +0530 Subject: [PATCH] tests/gunit: Extend the fuzzer to test cgroup_add_value_string() 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 Signed-off-by: Tom Hromatka (cherry picked from commit aa1148a7b50e7f8bc33cad0a013b9545716365a2) --- tests/gunit/017-API_fuzz_test.cpp | 57 +++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/tests/gunit/017-API_fuzz_test.cpp b/tests/gunit/017-API_fuzz_test.cpp index a959a2fc..64f2ee5c 100644 --- a/tests/gunit/017-API_fuzz_test.cpp +++ b/tests/gunit/017-API_fuzz_test.cpp @@ -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); +} -- 2.47.2