[apparmor] [patch] Add tests for aa.py get_output() and get_reqs()

Kshitij Gupta kgupta8592 at gmail.com
Sun Feb 21 19:49:37 UTC 2016


Hello,

On Tue, Feb 2, 2016 at 2:00 AM, Christian Boltz <apparmor at cboltz.de> wrote:

> Hello,
>
> Am Montag, 1. Februar 2016, 11:50:49 CET schrieb Seth Arnold:
> > On Mon, Feb 01, 2016 at 07:35:07PM +0100, Christian Boltz wrote:
> > > --- utils/test/test-aa.py       2016-01-26 22:22:14.660008000 +0100
> > > +++ utils/test/test-aa.py       2016-02-01 18:53:10.085684909 +0100
>
> > > +import apparmor.aa as aa  # needed to set global vars in some tests
>
> > Most of this looked good but I'm a bit worried about the global
> > variables. Could they be referenced via apparmor.aa.<whatever>
> > instead? I think that'd lead to better comprehension two years from
> > now..
>
> Yes, that's possible ;-)  - it makes the import a bit shorter ("as aa"
> gets removed) and the usage a bit longer ("apparmor.aa.cfg...")
>
> Here's v2 with this changed:
>
>
> [ 66-add-tests-for-get_output-and-get_reqs.diff ]
>
> --- utils/test/test-aa.py       2016-01-26 22:22:14.660008000 +0100
> +++ utils/test/test-aa.py       2016-02-01 18:53:10.085684909 +0100
> @@ -14,8 +14,9 @@
>  from common_test import read_file, write_file
>
>  import os
>
> -from apparmor.aa import (check_for_apparmor,
> get_interpreter_and_abstraction, create_new_profile,
> +import apparmor.aa  # needed to set global vars in some tests
> +from apparmor.aa import (check_for_apparmor, get_output, get_reqs,
> get_interpreter_and_abstraction, create_new_profile,
>       get_profile_flags, set_profile_flags, is_skippable_file,
> is_skippable_dir,
>       parse_profile_start, parse_profile_data, separate_vars,
> store_list_var, write_header,
>       var_transform, serialize_parse_profile_start)
> @@ -72,6 +73,26 @@
>          mounts = write_file(self.tmpdir, 'mounts',
> self.MOUNTS_WITH_SECURITYFS % self.tmpdir)
>          self.assertEqual('%s/security/apparmor' % self.tmpdir,
> check_for_apparmor(filesystems, mounts))
>
> +class AATest_get_output(AATest):
> +    tests = [
> +        (['./fake_ldd', '/AATest/lib64/libc-2.22.so'],  (0, ['
> /AATest/lib64/ld-linux-x86-64.so.2 (0x0000556858473000)', '
> linux-vdso.so.1 (0x00007ffe98912000)']     )),
> +        (['./fake_ldd', '/tmp/aa-test-foo'],            (0, ['        not
> a dynamic executable']
>                               )),
> +        (['./fake_ldd', 'invalid'],                     (1, ['']
>
>                               )),  # stderr is not part of output
> +    ]
> +    def _run_test(self, params, expected):
> +        self.assertEqual(get_output(params), expected)
> +
> +class AATest_get_reqs(AATest):
> +    tests = [
> +        ('/AATest/bin/bash',    ['/AATest/lib64/libreadline.so.6',
> '/AATest/lib64/libtinfo.so.6', '/AATest/lib64/libdl.so.2',
> '/AATest/lib64/libc.so.6', '/AATest/lib64/ld-linux-x86-64.so.2']),
> +        ('/tmp/aa-test-foo',    []),
> +    ]
> +
> +    def _run_test(self, params, expected):
> +        apparmor.aa.cfg['settings']['ldd'] = './fake_ldd'
> +
> +        self.assertEqual(get_reqs(params), expected)
> +
>  class AaTest_create_new_profile(AATest):
>      tests = [
>          # file content              expected interpreter    expected
> abstraction (besides 'base')
> --- utils/test/fake_ldd 2016-02-01 19:22:59.738008345 +0100
> +++ utils/test/fake_ldd 2016-02-01 19:23:58.781645883 +0100
> @@ -0,0 +1,56 @@
> +#!/usr/bin/python3
> +
> +import sys
> +
> +if len(sys.argv) != 2:
> +    raise Exception('wrong number of arguments in fake_ldd')
> +
> +if sys.argv[1] == '/AATest/bin/bash':
> +    print('        linux-vdso.so.1 (0x00007ffcf97f4000)')
> +    print('        libreadline.so.6 => /AATest/lib64/libreadline.so.6
> (0x00007f2c41324000)')
> +    print('        libtinfo.so.6 => /AATest/lib64/libtinfo.so.6
> (0x00007f2c410f9000)')
> +    print('        libdl.so.2 => /AATest/lib64/libdl.so.2
> (0x00007f2c40ef5000)')
> +    print('        libc.so.6 => /AATest/lib64/libc.so.6
> (0x00007f2c40b50000)')
> +    print('        /AATest/lib64/ld-linux-x86-64.so.2
> (0x000055782c473000)')
> +
> +elif sys.argv[1] == '/AATest/lib64/ld-2.22.so':
> +    print('        linux-vdso.so.1 (0x00007ffcf97f4000)')
> +
> +elif sys.argv[1] == '/AATest/lib64/libc-2.22.so':
> +    print('        /AATest/lib64/ld-linux-x86-64.so.2
> (0x0000556858473000)')
> +    print('        linux-vdso.so.1 (0x00007ffe98912000)')
> +
> +elif sys.argv[1] == '/AATest/lib64/libdl.so.2':
> +    print('        linux-vdso.so.1 (0x00007ffec2538000)')
> +    print('        libc.so.6 => /AATest/lib64/libc.so.6
> (0x00007f8865346000)')
> +    print('        /AATest/lib64/ld-linux-x86-64.so.2
> (0x0000560c3bcee000)')
> +
> +elif sys.argv[1] == '/AATest/lib64/libtinfo.so.6':
> +    print('        linux-vdso.so.1 (0x00007fff30518000)')
> +    print('        libc.so.6 => /AATest/lib64/libc.so.6
> (0x00007fb6f2ea3000)')
> +    print('        /AATest/lib64/ld-linux-x86-64.so.2
> (0x00005631fe8d3000)')
> +
> +elif sys.argv[1] == '/AATest/lib64/libreadline.so.6':
> +    print('        linux-vdso.so.1 (0x00007ffcb5b62000)')
> +    print('        libtinfo.so.6 => /AATest/lib64/libtinfo.so.6
> (0x00007f2a4ed07000)')
> +    print('        libc.so.6 => /AATest/lib64/libc.so.6
> (0x00007f2a4e961000)')
> +    print('        /AATest/lib64/ld-linux-x86-64.so.2
> (0x000055f749c89000)')
> +
> +elif sys.argv[1] == '/AATest/lib64/ld-linux-x86-64.so.2':
> +    print('        statically linked')
> +
> +elif sys.argv[1] == '/AATest/lib64/libc.so.6':
> +    print('        /AATest/lib64/ld-linux-x86-64.so.2
> (0x000055b65f7a9000)')
> +    print('        linux-vdso.so.1 (0x00007ffde132b000)')
> +
> +
> +elif sys.argv[1].startswith('/tmp/aa-test-'):  # test file generated by
> test-aa.py
> +    print('        not a dynamic executable')
> +
> +elif sys.argv[1] == 'TEMPLATE':
> +    print('')
> +    print('')
> +    print('')
> +
> +else:
> +    raise Exception('unknown parameter in fake_ldd: %s' % sys.argv[1])
>
>
> lgtm.
Can't think of a better way to write these tests atm.

Acked-by: Kshitij Gupta <kgupta8592 at gmail.com>

Regards,
>
> Christian Boltz
> --
> > (Windows XP welches auch installiert ist läuft aber ohne Probleme)
> Musst Du nicht erwähnen, eine Mail so zu versauen, geht in der Regel
> nur mit Outlook. [> Stephan Papst und Manfred Tremmel in suse-linux]
>
> --
> AppArmor mailing list
> AppArmor at lists.ubuntu.com
> Modify settings or unsubscribe at:
> https://lists.ubuntu.com/mailman/listinfo/apparmor
>
>


-- 
Regards,

Kshitij Gupta
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.ubuntu.com/archives/apparmor/attachments/20160222/0bdae8be/attachment.html>


More information about the AppArmor mailing list