[apparmor] [patch] add tests for write_header()

Steve Beattie steve at nxnw.org
Wed Apr 1 17:45:58 UTC 2015


On Sat, Mar 07, 2015 at 12:38:15AM +0100, Christian Boltz wrote:
> Hello,
> 
> this patch adds tests for write_header() and loop support to test-aa.py.
> 
> BTW: In case you wonder - the need to replace unittest.TestCase with
> AATest is intentional. It might look annoying, but it makes sure that
> a test-*.py file doesn't contain a test class where tests = [...] is
> ignored because it's still unittest.TestCase.
> (Technically, setup_all_tests() will error out if a test class doesn't
> contain tests = [...] - either explicit or via its parent AATest.)
> 
> 
> [ 16-add-tests-for-write_header.diff ]

Acked-by: Steve Beattie <steve at nxnw.org>

> --- utils/test/test-aa.py       2015-03-06 23:44:47.248306044 +0100
> +++ utils/test/test-aa.py       2015-03-07 00:17:34.955050118 +0100
> @@ -10,15 +10,16 @@
>  # ------------------------------------------------------------------
>  
>  import unittest
> +from common_test import AATest, setup_all_tests
>  import os
>  import shutil
>  import tempfile
>  from common_test import read_file, write_file
>  
> -from apparmor.aa import check_for_apparmor, get_profile_flags, set_profile_flags, is_skippable_file, parse_profile_start, serialize_parse_profile_start
> +from apparmor.aa import check_for_apparmor, get_profile_flags, set_profile_flags, is_skippable_file, parse_profile_start, write_header, serialize_parse_profile_start
>  from apparmor.common import AppArmorException, AppArmorBug
>  
> -class AaTestWithTempdir(unittest.TestCase):
> +class AaTestWithTempdir(AATest):
>      def setUp(self):
>          self.tmpdir = tempfile.mkdtemp(prefix='aa-py-')
>  
> @@ -220,7 +221,7 @@
>          set_profile_flags('%s/file-not-found' % self.tmpdir, '/foo', 'audit')
>  
>  
> -class AaTest_is_skippable_file(unittest.TestCase):
> +class AaTest_is_skippable_file(AATest):
>      def test_not_skippable_01(self):
>          self.assertFalse(is_skippable_file('bin.ping'))
>      def test_not_skippable_02(self):
> @@ -262,7 +263,7 @@
>      def test_skippable_13(self):
>          self.assertTrue(is_skippable_file('README'))
>  
> -class AaTest_parse_profile_start(unittest.TestCase):
> +class AaTest_parse_profile_start(AATest):
>      def _parse(self, line, profile, hat):
>          return parse_profile_start(line, 'somefile', 1, profile, hat)
>          # (profile, hat, flags, in_contained_hat, pps_set_profile, pps_set_hat_external)
> @@ -306,7 +307,33 @@
>          with self.assertRaises(AppArmorBug):
>              self._parse('xy', '/bar', '/bar') # not a profile start
>  
> +class AaTest_write_header(AATest):
> +    tests = [
> +        # name       embedded_hat    write_flags    depth   flags           attachment      expected
> +        (['/foo',    False,          True,          1,      'complain',     None        ],  '  /foo flags=(complain) {'),
> +        (['/foo',    True,           True,          1,      'complain',     None        ],  '  profile /foo flags=(complain) {'),
> +        (['/foo sp', False,          False,         2,      'complain',     None        ],  '    profile "/foo sp" {'), # XXX why is the profile keyword added here?
> +        (['/foo'    ,False,          False,         2,      'complain',     None        ],  '    /foo {'),
> +        (['/foo',    True,           False,         2,      'complain',     None        ],  '    profile /foo {'),
> +        (['/foo',    False,          True,          0,      None,           None        ],  '/foo {'),
> +        (['/foo',    True,           True,          0,      None,           None        ],  'profile /foo {'),
> +        (['/foo',    False,          False,         0,      None,           None        ],  '/foo {'),
> +        (['/foo',    True,           False,         0,      None,           None        ],  'profile /foo {'),
> +        (['^foo',    False,          True,          1,      'complain',     None        ],  '  profile ^foo flags=(complain) {'),
> +        (['^foo',    True,           True,          1,      'complain',     None        ],  '  ^foo flags=(complain) {'),
> +     ]
> +
> +    def _run_test(self, params, expected):
> +        name = params[0]
> +        embedded_hat = params[1]
> +        write_flags = params[2]
> +        depth = params[3]
> +        prof_data = { 'flags': params[4], 'attachment': params[5] }
> +
> +        result = write_header(prof_data, depth, name, embedded_hat, write_flags)
> +        self.assertEqual(result, [expected])
> +
> -class AaTest_serialize_parse_profile_start(unittest.TestCase):
> +class AaTest_serialize_parse_profile_start(AATest):
>      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)
> @@ -397,4 +424,5 @@
>      #        self._parse('/foo {', '/bar', '/bar', False, False) # child profile without profile keyword
>  
>  if __name__ == '__main__':
> +    setup_all_tests()
>      unittest.main(verbosity=2)

-- 
Steve Beattie
<sbeattie at ubuntu.com>
http://NxNW.org/~steve/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <https://lists.ubuntu.com/archives/apparmor/attachments/20150401/f09d7a23/attachment.pgp>


More information about the AppArmor mailing list