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

Reply via email to