This commit adds nine tests for the wildcard logic in the ignore rule destination field.
[ RUN ] CgroupCompareIgnoreRuleTest.WildcardProcnameSimpleMatch [ OK ] CgroupCompareIgnoreRuleTest.WildcardProcnameSimpleMatch (0 ms) [ RUN ] CgroupCompareIgnoreRuleTest.WildcardProcnameNoMatch [ OK ] CgroupCompareIgnoreRuleTest.WildcardProcnameNoMatch (0 ms) [ RUN ] CgroupCompareIgnoreRuleTest.WildcardMatch [ OK ] CgroupCompareIgnoreRuleTest.WildcardMatch (0 ms) [ RUN ] CgroupCompareIgnoreRuleTest.WildcardNoMatch [ OK ] CgroupCompareIgnoreRuleTest.WildcardNoMatch (0 ms) [ RUN ] CgroupCompareIgnoreRuleTest.WildcardNoMatch2 [ OK ] CgroupCompareIgnoreRuleTest.WildcardNoMatch2 (0 ms) [ RUN ] CgroupCompareIgnoreRuleTest.WildcardMatch2 [ OK ] CgroupCompareIgnoreRuleTest.WildcardMatch2 (0 ms) [ RUN ] CgroupCompareIgnoreRuleTest.WildcardMatch3 [ OK ] CgroupCompareIgnoreRuleTest.WildcardMatch3 (0 ms) [ RUN ] CgroupCompareIgnoreRuleTest.RootDestWithWildcardNoMatch [ OK ] CgroupCompareIgnoreRuleTest.RootDestWithWildcardNoMatch (0 ms) [ RUN ] CgroupCompareIgnoreRuleTest.RootDestWithWildcardMatch [ OK ] CgroupCompareIgnoreRuleTest.RootDestWithWildcardMatch (0 ms) Signed-off-by: Tom Hromatka <tom.hroma...@oracle.com> --- tests/gunit/004-cgroup_compare_ignore_rule.cpp | 151 +++++++++++++++++++++++++ 1 file changed, 151 insertions(+) diff --git a/tests/gunit/004-cgroup_compare_ignore_rule.cpp b/tests/gunit/004-cgroup_compare_ignore_rule.cpp index 29341f280ee0..4d6317a096df 100644 --- a/tests/gunit/004-cgroup_compare_ignore_rule.cpp +++ b/tests/gunit/004-cgroup_compare_ignore_rule.cpp @@ -382,3 +382,154 @@ TEST_F(CgroupCompareIgnoreRuleTest, WildcardProcnameNoMatch) ret = cgroup_compare_ignore_rule(&rule, pid, procname); ASSERT_EQ(ret, false); } + +TEST_F(CgroupCompareIgnoreRuleTest, WildcardMatch) +{ + char proc_file_contents[] = + "7:cpuset:/parentcg/childcg/grandchildcg"; + char rule_controller[] = "cpuset"; + char procname[] = "childprocess"; + struct cgroup_rule rule; + pid_t pid = 2345; + bool ret; + + CreateCgroupProcFile(proc_file_contents); + + rule.procname = procname; + rule.is_ignore = true; + rule.controllers[0] = rule_controller; + sprintf(rule.destination, "parentcg/*"); + + ret = cgroup_compare_ignore_rule(&rule, pid, procname); + ASSERT_EQ(ret, true); +} + +TEST_F(CgroupCompareIgnoreRuleTest, WildcardNoMatch) +{ + char proc_file_contents[] = + "7:cpuset:/parentcg1/childcg/grandchildcg"; + char rule_controller[] = "cpuset"; + char procname[] = "childprocess"; + struct cgroup_rule rule; + pid_t pid = 3456; + bool ret; + + CreateCgroupProcFile(proc_file_contents); + + rule.procname = procname; + rule.is_ignore = true; + rule.controllers[0] = rule_controller; + sprintf(rule.destination, "parentcg/*"); + + ret = cgroup_compare_ignore_rule(&rule, pid, procname); + ASSERT_EQ(ret, false); +} + +TEST_F(CgroupCompareIgnoreRuleTest, WildcardNoMatch2) +{ + char proc_file_contents[] = "7:cpuset:/parentcg"; + char rule_controller[] = "cpuset"; + char procname[] = "childprocess"; + struct cgroup_rule rule; + pid_t pid = 4567; + bool ret; + + CreateCgroupProcFile(proc_file_contents); + + rule.procname = procname; + rule.is_ignore = true; + rule.controllers[0] = rule_controller; + sprintf(rule.destination, "parentcg/*"); + + ret = cgroup_compare_ignore_rule(&rule, pid, procname); + + /* These won't match because the user has written the rule with a + * trailing "/". That means that only cgroups beneath parentcg + * will match. Processes in parentcg will _not_ match + */ + ASSERT_EQ(ret, false); +} + +TEST_F(CgroupCompareIgnoreRuleTest, WildcardMatch2) +{ + char proc_file_contents[] = + "1:hugetlb:/parentcg/childcg/grandchildcg"; + char rule_controller[] = "hugetlb"; + char procname[] = "granchildprocess"; + struct cgroup_rule rule; + pid_t pid = 5678; + bool ret; + + CreateCgroupProcFile(proc_file_contents); + + rule.procname = NULL; + rule.is_ignore = true; + rule.controllers[0] = rule_controller; + sprintf(rule.destination, "parentcg/childcg*"); + + ret = cgroup_compare_ignore_rule(&rule, pid, procname); + ASSERT_EQ(ret, true); +} + +TEST_F(CgroupCompareIgnoreRuleTest, WildcardMatch3) +{ + char proc_file_contents[] = + "1:memory:/mycgroup1"; + char rule_controller[] = "memory"; + char procname[] = "granchildprocess"; + struct cgroup_rule rule; + pid_t pid = 6789; + bool ret; + + CreateCgroupProcFile(proc_file_contents); + + rule.procname = NULL; + rule.is_ignore = true; + rule.controllers[0] = rule_controller; + sprintf(rule.destination, "mycgroup*"); + + ret = cgroup_compare_ignore_rule(&rule, pid, procname); + ASSERT_EQ(ret, true); +} + +TEST_F(CgroupCompareIgnoreRuleTest, RootDestWithWildcardNoMatch) +{ + char proc_file_contents[] = + "2:freezer:/somerandomcg"; + char rule_controller[] = "freezer"; + char procname[] = "ANewProcess"; + struct cgroup_rule rule; + pid_t pid = 7890; + bool ret; + + CreateCgroupProcFile(proc_file_contents); + + rule.procname = procname; + rule.is_ignore = true; + rule.controllers[0] = rule_controller; + sprintf(rule.destination, "/*"); + + ret = cgroup_compare_ignore_rule(&rule, pid, procname); + ASSERT_EQ(ret, false); +} + +TEST_F(CgroupCompareIgnoreRuleTest, RootDestWithWildcardMatch) +{ + char proc_file_contents[] = + "2:freezer:/"; + char rule_controller[] = "freezer"; + char procname[] = "ANewProcess"; + struct cgroup_rule rule; + pid_t pid = 8901; + bool ret; + + CreateCgroupProcFile(proc_file_contents); + + rule.procname = procname; + rule.is_ignore = true; + rule.controllers[0] = rule_controller; + sprintf(rule.destination, "/*"); + + ret = cgroup_compare_ignore_rule(&rule, pid, procname); + ASSERT_EQ(ret, true); +} -- 1.8.3.1 _______________________________________________ Libcg-devel mailing list Libcg-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/libcg-devel