[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