summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVictor Sergeyev <vsergeyev@mirantis.com>2013-08-01 15:56:14 +0300
committerVictor Sergeyev <vsergeyev@mirantis.com>2013-08-01 15:56:14 +0300
commitb7edc999729bc59a2a3abe7efbb5dbbccfa05c99 (patch)
treeae2b185f843d674bea9b0a96ddce20b85d038986
parent96d1f887dda21b43ba4376187f31953dee6f5273 (diff)
downloadoslo-b7edc999729bc59a2a3abe7efbb5dbbccfa05c99.tar.gz
oslo-b7edc999729bc59a2a3abe7efbb5dbbccfa05c99.tar.xz
oslo-b7edc999729bc59a2a3abe7efbb5dbbccfa05c99.zip
Fix missing argument bug in oslo common policy
AndCheck() and OrCheck() classes in common policy module missing a argument when calls rules in __call__() method. Current patch fixed it by adding the necessary argument. Tests added. Fixed bug 1194354 Change-Id: I9a6e7d04b06ef61216cb7dbfd291c855b799b621
-rw-r--r--openstack/common/policy.py4
-rw-r--r--tests/unit/test_policy.py52
2 files changed, 49 insertions, 7 deletions
diff --git a/openstack/common/policy.py b/openstack/common/policy.py
index 02335ca..3a3c63f 100644
--- a/openstack/common/policy.py
+++ b/openstack/common/policy.py
@@ -404,7 +404,7 @@ class AndCheck(BaseCheck):
"""
for rule in self.rules:
- if not rule(target, cred):
+ if not rule(target, cred, enforcer):
return False
return True
@@ -447,7 +447,7 @@ class OrCheck(BaseCheck):
"""
for rule in self.rules:
- if rule(target, cred):
+ if rule(target, cred, enforcer):
return True
return False
diff --git a/tests/unit/test_policy.py b/tests/unit/test_policy.py
index 2ccf71e..bd412bf 100644
--- a/tests/unit/test_policy.py
+++ b/tests/unit/test_policy.py
@@ -327,6 +327,48 @@ class NotCheckTestCase(utils.BaseTestCase):
rule.assert_called_once_with('target', 'cred', None)
+class AndCheckTestCase(utils.BaseTestCase):
+ def test_init(self):
+ check = policy.AndCheck(['rule1', 'rule2'])
+
+ self.assertEqual(check.rules, ['rule1', 'rule2'])
+
+ def test_add_check(self):
+ check = policy.AndCheck(['rule1', 'rule2'])
+ check.add_check('rule3')
+
+ self.assertEqual(check.rules, ['rule1', 'rule2', 'rule3'])
+
+ def test_str(self):
+ check = policy.AndCheck(['rule1', 'rule2'])
+
+ self.assertEqual(str(check), '(rule1 and rule2)')
+
+ def test_call_all_false(self):
+ rules = [mock.Mock(return_value=False), mock.Mock(return_value=False)]
+ check = policy.AndCheck(rules)
+
+ self.assertEqual(check('target', 'cred', None), False)
+ rules[0].assert_called_once_with('target', 'cred', None)
+ self.assertFalse(rules[1].called)
+
+ def test_call_first_true(self):
+ rules = [mock.Mock(return_value=True), mock.Mock(return_value=False)]
+ check = policy.AndCheck(rules)
+
+ self.assertFalse(check('target', 'cred', None))
+ rules[0].assert_called_once_with('target', 'cred', None)
+ rules[1].assert_called_once_with('target', 'cred', None)
+
+ def test_call_second_true(self):
+ rules = [mock.Mock(return_value=False), mock.Mock(return_value=True)]
+ check = policy.AndCheck(rules)
+
+ self.assertFalse(check('target', 'cred', None))
+ rules[0].assert_called_once_with('target', 'cred', None)
+ self.assertFalse(rules[1].called)
+
+
class OrCheckTestCase(utils.BaseTestCase):
def test_init(self):
check = policy.OrCheck(['rule1', 'rule2'])
@@ -349,15 +391,15 @@ class OrCheckTestCase(utils.BaseTestCase):
check = policy.OrCheck(rules)
self.assertEqual(check('target', 'cred', None), False)
- rules[0].assert_called_once_with('target', 'cred')
- rules[1].assert_called_once_with('target', 'cred')
+ rules[0].assert_called_once_with('target', 'cred', None)
+ rules[1].assert_called_once_with('target', 'cred', None)
def test_call_first_true(self):
rules = [mock.Mock(return_value=True), mock.Mock(return_value=False)]
check = policy.OrCheck(rules)
self.assertEqual(check('target', 'cred', None), True)
- rules[0].assert_called_once_with('target', 'cred')
+ rules[0].assert_called_once_with('target', 'cred', None)
self.assertFalse(rules[1].called)
def test_call_second_true(self):
@@ -365,8 +407,8 @@ class OrCheckTestCase(utils.BaseTestCase):
check = policy.OrCheck(rules)
self.assertEqual(check('target', 'cred', None), True)
- rules[0].assert_called_once_with('target', 'cred')
- rules[1].assert_called_once_with('target', 'cred')
+ rules[0].assert_called_once_with('target', 'cred', None)
+ rules[1].assert_called_once_with('target', 'cred', None)
class ParseCheckTestCase(utils.BaseTestCase):