diff --git a/oslo_policy/fixture.py b/oslo_policy/fixture.py new file mode 100644 index 00000000..a12aa1f9 --- /dev/null +++ b/oslo_policy/fixture.py @@ -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 + ) diff --git a/oslo_policy/tests/test_fixtures.py b/oslo_policy/tests/test_fixtures.py new file mode 100644 index 00000000..074c2dab --- /dev/null +++ b/oslo_policy/tests/test_fixtures.py @@ -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={})