[apparmor] [patch 3/8] utils tests: restructure Unix Parse tests
Steve Beattie
steve at nxnw.org
Fri Aug 29 00:04:07 UTC 2014
This patch abstracts out parse tests into a super class to inherit from
and converts the af_unix parse tests to use the super class.
Signed-off-by: Steve Beattie <steve at nxnw.org>
---
utils/test/common_test.py | 21 ++++++++++++++
utils/test/test-unix_parse.py | 60 ++++++++++++++----------------------------
2 files changed, 41 insertions(+), 40 deletions(-)
Index: b/utils/test/common_test.py
===================================================================
--- a/utils/test/common_test.py
+++ b/utils/test/common_test.py
@@ -33,6 +33,27 @@ class Test(unittest.TestCase):
# print("Please press the Y button on the keyboard.")
# self.assertEqual(apparmor.common.readkey().lower(), 'y', 'Error reading key from shell!')
+class AAParseTest(unittest.TestCase):
+ parse_function = None
+
+ def _test_parse_rule(self, rule):
+ self.assertIsNot(self.parse_function, 'Test class did not set a parse_function')
+ parsed = self.parse_function(rule)
+ self.assertEqual(rule, parsed.serialize(),
+ 'parse object %s returned "%s", expected "%s"' \
+ %(self.parse_function.__doc__, parsed.serialize(), rule))
+
+def setup_regex_tests(test_class):
+ '''Create tests in test_class using test_class.tests and AAParseTest._test_parse_rule()
+
+ test_class.tests should be tuples of (line, description)
+ '''
+ for (i, (line, desc)) in enumerate(test_class.tests):
+ def stub_test(self, line=line):
+ self._test_parse_rule(line)
+
+ stub_test.__doc__ = "test '%s': %s" % (line, desc)
+ setattr(test_class, 'test_%d' % (i), stub_test)
if __name__ == "__main__":
#import sys;sys.argv = ['', 'Test.test_RegexParser']
Index: b/utils/test/test-unix_parse.py
===================================================================
--- a/utils/test/test-unix_parse.py
+++ b/utils/test/test-unix_parse.py
@@ -11,49 +11,29 @@
import apparmor.aa as aa
import unittest
+from common_test import AAParseTest, setup_regex_tests
-class AAParseUnixTest(unittest.TestCase):
+class AAParseUnixTest(AAParseTest):
- def _test_parse_unix_rule(self, rule):
- unix = aa.parse_unix_rule(rule)
- self.assertEqual(rule, unix.serialize(),
- 'ptrace object returned "%s", expected "%s"' % (unix.serialize(), rule))
+ def setUp(self):
+ self.parse_function = aa.parse_unix_rule
- def test_parse_plain_unix_rule(self):
- self._test_parse_unix_rule('unix,')
-
- def test_parse_r_unix_rule(self):
- self._test_parse_unix_rule('unix r,')
-
- def test_parse_w_unix_rule(self):
- self._test_parse_unix_rule('unix w,')
-
- def test_parse_rw_unix_rule(self):
- self._test_parse_unix_rule('unix rw,')
-
- def test_parse_send_unix_rule(self):
- self._test_parse_unix_rule('unix send,')
-
- def test_parse_receive_unix_rule(self):
- self._test_parse_unix_rule('unix receive,')
-
- def test_parse_r_paren_unix_rule(self):
- self._test_parse_unix_rule('unix (r),')
-
- def test_parse_w_paren_unix_rule(self):
- self._test_parse_unix_rule('unix (w),')
-
- def test_parse_rw_paren_unix_rule(self):
- self._test_parse_unix_rule('unix (rw),')
-
- def test_parse_send_paren_unix_rule(self):
- self._test_parse_unix_rule('unix (send),')
-
- def test_parse_receive_paren_unix_rule(self):
- self._test_parse_unix_rule('unix (receive),')
-
- def test_parse_complex_unix_rule(self):
- self._test_parse_unix_rule('unix (connect, receive, send) type=stream peer=(label=unconfined,addr="@/tmp/.X11-unix/X[0-9]*"),')
+ tests = [
+ ('unix,', 'unix base keyword'),
+ ('unix r,', 'unix r rule'),
+ ('unix w,', 'unix w rule'),
+ ('unix rw,', 'unix rw rule'),
+ ('unix send,', 'unix send rule'),
+ ('unix receive,', 'unix receive rule'),
+ ('unix (r),', 'unix (r) rule'),
+ ('unix (w),', 'unix (w) rule'),
+ ('unix (rw),', 'unix (rw) rule'),
+ ('unix (send),', 'unix (send) rule'),
+ ('unix (receive),', 'unix (receive) rule'),
+ ('unix (connect, receive, send) type=stream peer=(label=unconfined,addr="@/tmp/.X11-unix/X[0-9]*"),',
+ 'complex unix rule'),
+ ]
if __name__ == '__main__':
+ setup_regex_tests(AAParseUnixTest)
unittest.main(verbosity=2)
More information about the AppArmor
mailing list