89 lines
3.4 KiB
Python
89 lines
3.4 KiB
Python
|
# 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 uuid
|
||
|
|
||
|
from oslo_config import fixture as config
|
||
|
|
||
|
from keystoneauth1 import fixture
|
||
|
from keystoneauth1 import loading
|
||
|
from keystoneauth1 import session
|
||
|
from keystoneauth1.tests.unit import utils
|
||
|
|
||
|
|
||
|
class FixturesTests(utils.TestCase):
|
||
|
|
||
|
GROUP = uuid.uuid4().hex
|
||
|
AUTH_TYPE = uuid.uuid4().hex
|
||
|
|
||
|
def setUp(self):
|
||
|
super(FixturesTests, self).setUp()
|
||
|
self.conf_fixture = self.useFixture(config.Config())
|
||
|
|
||
|
# conf loading will still try to read the auth_type from the config
|
||
|
# object and pass that to the get_plugin_loader method. This value will
|
||
|
# typically be ignored and the fake plugin returned regardless of name
|
||
|
# but it could be a useful differentiator and it also ensures that the
|
||
|
# application has called register_auth_conf_options before simply
|
||
|
# returning a fake plugin.
|
||
|
loading.register_auth_conf_options(self.conf_fixture.conf,
|
||
|
group=self.GROUP)
|
||
|
|
||
|
self.conf_fixture.config(auth_type=self.AUTH_TYPE, group=self.GROUP)
|
||
|
|
||
|
def useLoadingFixture(self, **kwargs):
|
||
|
return self.useFixture(fixture.LoadingFixture(**kwargs))
|
||
|
|
||
|
def test_endpoint_resolve(self):
|
||
|
endpoint = "http://%(service_type)s/%(version)s/%(interface)s"
|
||
|
loader = self.useLoadingFixture(endpoint=endpoint)
|
||
|
|
||
|
endpoint_filter = {'service_type': 'compute',
|
||
|
'service_name': 'nova',
|
||
|
'version': (2, 1),
|
||
|
'interface': 'public'}
|
||
|
|
||
|
auth = loading.load_auth_from_conf_options(self.conf_fixture.conf,
|
||
|
self.GROUP)
|
||
|
sess = session.Session(auth=auth)
|
||
|
|
||
|
loader_endpoint = loader.get_endpoint(**endpoint_filter)
|
||
|
plugin_endpoint = sess.get_endpoint(**endpoint_filter)
|
||
|
|
||
|
self.assertEqual("http://compute/2.1/public", loader_endpoint)
|
||
|
self.assertEqual(loader_endpoint, plugin_endpoint)
|
||
|
|
||
|
def test_conf_loaded(self):
|
||
|
token = uuid.uuid4().hex
|
||
|
endpoint_filter = {'service_type': 'compute',
|
||
|
'service_name': 'nova',
|
||
|
'version': (2, 1)}
|
||
|
|
||
|
loader = self.useLoadingFixture(token=token)
|
||
|
|
||
|
url = loader.get_endpoint('/path', **endpoint_filter)
|
||
|
|
||
|
m = self.requests_mock.get(url)
|
||
|
|
||
|
auth = loading.load_auth_from_conf_options(self.conf_fixture.conf,
|
||
|
self.GROUP)
|
||
|
sess = session.Session(auth=auth)
|
||
|
self.assertEqual(self.AUTH_TYPE, auth.auth_type)
|
||
|
|
||
|
sess.get('/path', endpoint_filter=endpoint_filter)
|
||
|
|
||
|
self.assertTrue(m.called_once)
|
||
|
|
||
|
self.assertTrue(token, m.last_request.headers['X-Auth-Token'])
|
||
|
self.assertEqual(loader.project_id, sess.get_project_id())
|
||
|
self.assertEqual(loader.user_id, sess.get_user_id())
|