On Thu, Mar 05, 2015 at 07:11:05PM +0100, Christian Boltz wrote: > Hallo, > > this patch adds tests for serialize_parse_profile_start() to test-aa.py > to document the function's behaviour. > > This patch obviously depends on the > split off serialize_parse_profile_start_line() > patch ;-) > > I propose this patch for trunk and 2.9 > > > [ 13-add-tests-for-serialize_parse_profile_start.diff ]
Acked-by: Steve Beattie <st...@nxnw.org>. Thanks. > --- utils/test/test-aa.py 2015-03-04 23:40:37.101565050 +0100 > +++ utils/test/test-aa.py 2015-03-05 19:04:45.142411528 +0100 > @@ -15,7 +15,7 @@ import shutil > import tempfile > from common_test import write_file > > -from apparmor.aa import check_for_apparmor, get_profile_flags, > is_skippable_file, parse_profile_start > +from apparmor.aa import check_for_apparmor, get_profile_flags, > is_skippable_file, parse_profile_start, serialize_parse_profile_start > from apparmor.common import AppArmorException, AppArmorBug > > class AaTestWithTempdir(unittest.TestCase): > @@ -191,6 +191,85 @@ class AaTest_parse_profile_start(unittes > with self.assertRaises(AppArmorBug): > self._parse('xy', '/bar', '/bar') # not a profile start > > +class AaTest_serialize_parse_profile_start(unittest.TestCase): > + def _parse(self, line, profile, hat, prof_data_profile, > prof_data_external): > + # 'correct' is always True in the code that uses > serialize_parse_profile_start() (set some lines above the function call) > + return serialize_parse_profile_start(line, 'somefile', 1, profile, > hat, prof_data_profile, prof_data_external, True) > + > + def test_serialize_parse_profile_start_01(self): > + result = self._parse('/foo {', None, None, False, False) > + expected = ('/foo', '/foo', None, False, True) > + self.assertEqual(result, expected) > + > + def test_serialize_parse_profile_start_02(self): > + result = self._parse('/foo (complain) {', None, None, False, False) > + expected = ('/foo', '/foo', 'complain', False, True) > + self.assertEqual(result, expected) > + > + def test_serialize_parse_profile_start_03(self): > + result = self._parse('profile foo /foo {', None, None, False, False) > # named profile > + expected = ('foo /foo', 'foo /foo', None, False, True) # XXX yes, > that's what happens with the current code :-/ > + self.assertEqual(result, expected) > + > + def test_serialize_parse_profile_start_04(self): > + result = self._parse('profile /foo {', '/bar', '/bar', False, False) > # child profile > + expected = ('/bar', '/foo', None, True, True) > + self.assertEqual(result, expected) > + > + def test_serialize_parse_profile_start_05(self): > + result = self._parse('/foo//bar {', None, None, False, False) # > external hat > + expected = ('/foo', 'bar', None, False, False) # note correct == > False here > + self.assertEqual(result, expected) > + > + def test_serialize_parse_profile_start_06(self): > + result = self._parse('profile "/foo" (complain) {', None, None, > False, False) > + expected = ('/foo', '/foo', 'complain', False, True) > + self.assertEqual(result, expected) > + > + def test_serialize_parse_profile_start_07(self): > + result = self._parse('/foo {', None, None, True, False) > + expected = ('/foo', '/foo', None, False, True) > + self.assertEqual(result, expected) > + > + def test_serialize_parse_profile_start_08(self): > + result = self._parse('/foo {', None, None, False, True) > + expected = ('/foo', '/foo', None, False, True) > + self.assertEqual(result, expected) > + > + def test_serialize_parse_profile_start_09(self): > + result = self._parse('/foo {', None, None, True, True) > + expected = ('/foo', '/foo', None, False, True) > + self.assertEqual(result, expected) > + > + def test_serialize_parse_profile_start_10(self): > + result = self._parse('profile /foo {', '/bar', '/bar', True, False) > # child profile > + expected = ('/bar', '/foo', None, True, True) > + self.assertEqual(result, expected) > + > + def test_serialize_parse_profile_start_11(self): > + result = self._parse('profile /foo {', '/bar', '/bar', False, True) > # child profile > + expected = ('/bar', '/foo', None, True, True) > + self.assertEqual(result, expected) > + > + def test_serialize_parse_profile_start_12(self): > + result = self._parse('profile /foo {', '/bar', '/bar', True, True) # > child profile > + expected = ('/bar', '/foo', None, True, True) > + self.assertEqual(result, expected) > + > + def test_serialize_parse_profile_start_13(self): > + result = self._parse('/foo {', '/bar', '/bar', False, False) # child > profile without 'profile' keyword - XXX should this error out? > + expected = ('/foo', '/foo', None, False, True) # note that > in_contained_hat == False and that profile == hat == child profile > + self.assertEqual(result, expected) > + > + > + def test_serialize_parse_profile_start_invalid_01(self): > + with self.assertRaises(AttributeError): # XXX change to AppArmorBug? > + self._parse('xy', '/bar', '/bar', False, False) # not a profile > start > + > + # XXX not catched as error. See also > test_serialize_parse_profile_start_13() - maybe this is wanted behaviour here? > + #def test_serialize_parse_profile_start_invalid_02(self): > + # with self.assertRaises(AppArmorException): > + # self._parse('/foo {', '/bar', '/bar', False, False) # child > profile without profile keyword > > if __name__ == '__main__': > unittest.main(verbosity=2) -- Steve Beattie <sbeat...@ubuntu.com> http://NxNW.org/~steve/
signature.asc
Description: Digital signature
-- AppArmor mailing list AppArmor@lists.ubuntu.com Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/apparmor