Custom fixture to avoid external call in HttpCheck

Neutron was mocking urlrequest.urlopen as the original
implementation in oslo.policy was using that inside HttpCheck,
then we switched over to requests.post with change
I364ddb5f86900a3e166f4480d9f4889a68de247f
and a fresh oslo.policy version would have broken them. So
we should have a fixture to enable them to write their
tests without knowing how it is implemented.

Closes-Bug: #1503890
Change-Id: Ia482de71d3db5b89599a1d708a415364cdb468f8
This commit is contained in:
Davanum Srinivas 2015-10-08 11:59:56 -07:00
parent e3e8f15580
commit bcfe188c38
2 changed files with 71 additions and 0 deletions

34
oslo_policy/fixture.py Normal file
View File

@ -0,0 +1,34 @@
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
__all__ = ['HttpCheckFixture']
import fixtures
from oslo_policy import policy as oslo_policy
class HttpCheckFixture(fixtures.MockPatchObject):
"""Helps short circuit the external http call"""
def __init__(self, return_value=True):
"""Initialize the fixture.
:param return_value: True implies the policy check passed and False
implies that the policy check failed
:type return_value: boolean
"""
super(HttpCheckFixture, self).__init__(
oslo_policy._checks.HttpCheck,
'__call__',
return_value=return_value
)

View File

@ -0,0 +1,37 @@
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
import json
from oslo_policy import fixture
from oslo_policy import policy as oslo_policy
from oslo_policy.tests import base as test_base
class FixtureTestCase(test_base.PolicyBaseTestCase):
def test_enforce_http_true(self):
self.assertTrue(self._test_enforce_http(True))
def test_enforce_http_false(self):
self.assertFalse(self._test_enforce_http(False))
def _test_enforce_http(self, return_value):
self.useFixture(fixture.HttpCheckFixture(return_value=return_value))
action = self.getUniqueString()
rules_json = {
action: "http:" + self.getUniqueString()
}
rules = oslo_policy.Rules.load_json(json.dumps(rules_json))
self.enforcer.set_rules(rules)
return self.enforcer.enforce(rule=action,
target={},
creds={})