2
0
mirror of https://gitlab.com/apparmor/apparmor synced 2025-08-22 01:57:43 +00:00

Add __repr__() functions to BaseRule and BaseRuleset

This makes print()ing a class object much more helpful - instead of
    <apparmor.rule.network.NetworkRule object at 0x7f416b239e48>
we now get something like
    <NetworkRule> network inet stream,
(based on get_raw())

A NetworkRuleset will be printed as (also based on get_raw())

<NetworkRuleset>
  network inet stream,
  allow network inet stream, # comment
</NetworkRuleset>

Also add tests to test-network.py to ensure that __repr__() works as
expected.


Acked-by: Kshitij Gupta <kgupta8592@gmail.com>
This commit is contained in:
Christian Boltz 2015-10-28 22:58:56 +01:00
parent cc9cf967b2
commit 37ab41bb13
2 changed files with 28 additions and 0 deletions

View File

@ -50,6 +50,10 @@ class BaseRule(object):
# Set only in the parse() class method
self.raw_rule = None
def __repr__(self):
classname = self.__class__.__name__
return '<%s> ' % classname + self.get_raw()
@classmethod
def match(cls, raw_rule):
'''return True if raw_rule matches the class (main) regex, False otherwise
@ -211,6 +215,10 @@ class BaseRuleset(object):
'''called by __init__() and delete_all_rules() - override in child class to initialize more variables'''
pass
def __repr__(self):
classname = self.__class__.__name__
return '<%s>\n' % classname + '\n'.join(self.get_raw(1)) + '</%s>' % classname
def add(self, rule):
'''add a rule object'''
self.rules.append(rule)

View File

@ -353,6 +353,15 @@ class NetworkLogprofHeaderTest(AATest):
obj = NetworkRule._parse(params)
self.assertEqual(obj.logprof_header(), expected)
class NetworkRuleReprTest(AATest):
tests = [
(NetworkRule('inet', 'stream'), '<NetworkRule> network inet stream,'),
(NetworkRule.parse(' allow network inet stream, # foo'), '<NetworkRule> allow network inet stream, # foo'),
]
def _run_test(self, params, expected):
self.assertEqual(str(params), expected)
## --- tests for NetworkRuleset --- #
class NetworkRulesTest(AATest):
@ -439,6 +448,17 @@ class NetworkGlobTestAATest(AATest):
class NetworkDeleteTestAATest(AATest):
pass
class NetworkRulesetReprTest(AATest):
def test_network_ruleset_repr(self):
obj = NetworkRuleset()
obj.add(NetworkRule('inet', 'stream'))
obj.add(NetworkRule.parse(' allow network inet stream, # foo'))
expected = '<NetworkRuleset>\n network inet stream,\n allow network inet stream, # foo\n</NetworkRuleset>'
self.assertEqual(str(obj), expected)
setup_all_loops(__name__)
if __name__ == '__main__':
unittest.main(verbosity=2)