diff --git a/keystoneclient/fixture/__init__.py b/keystoneclient/fixture/__init__.py index 0445ce861..3373a8fba 100644 --- a/keystoneclient/fixture/__init__.py +++ b/keystoneclient/fixture/__init__.py @@ -23,5 +23,6 @@ testing. from keystoneclient.fixture.exception import FixtureValidationError # noqa from keystoneclient.fixture.v2 import Token as V2Token # noqa +from keystoneclient.fixture.v3 import Token as V3Token # noqa -__all__ = ['V2Token', 'FixtureValidationError'] +__all__ = ['V2Token', 'V3Token', 'FixtureValidationError'] diff --git a/keystoneclient/fixture/v3.py b/keystoneclient/fixture/v3.py new file mode 100644 index 000000000..7522f13f5 --- /dev/null +++ b/keystoneclient/fixture/v3.py @@ -0,0 +1,304 @@ +# 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 datetime +import uuid + +from keystoneclient.fixture import exception +from keystoneclient.openstack.common import timeutils + + +class _Service(dict): + """One of the services that exist in the catalog. + + You use this by adding a service to a token which returns an instance of + this object and then you can add_endpoints to the service. + """ + + def add_endpoint(self, interface, url, region=None): + data = {'interface': interface, + 'url': url, + 'region': region} + self.setdefault('endpoints', []).append(data) + return data + + def add_standard_endpoints(self, public=None, admin=None, internal=None, + region=None): + ret = [] + + if public: + ret.append(self.add_endpoint('public', public, region=region)) + if admin: + ret.append(self.add_endpoint('admin', admin, region=region)) + if internal: + ret.append(self.add_endpoint('internal', internal, region=region)) + + return ret + + +class Token(dict): + """A V3 Keystone token that can be used for testing. + + This object is designed to allow clients to generate a correct V3 token for + use in there test code. It should prevent clients from having to know the + correct token format and allow them to test the portions of token handling + that matter to them and not copy and paste sample. + """ + + def __init__(self, expires=None, user_id=None, user_name=None, + user_domain_id=None, user_domain_name=None, methods=None, + project_id=None, project_name=None, project_domain_id=None, + project_domain_name=None, domain_id=None, domain_name=None, + trust_id=None, trust_impersonation=None, trustee_user_id=None, + trustor_user_id=None): + super(Token, self).__init__() + + self.user_id = user_id or uuid.uuid4().hex + self.user_name = user_name or uuid.uuid4().hex + self.user_domain_id = user_domain_id or uuid.uuid4().hex + self.user_domain_name = user_domain_name or uuid.uuid4().hex + + if not methods: + methods = ['password'] + self.methods.extend(methods) + + if not expires: + expires = timeutils.utcnow() + datetime.timedelta(hours=1) + + try: + self.expires = expires + except (TypeError, AttributeError): + # expires should be able to be passed as a string so ignore + self.expires_str = expires + + if (project_id or project_name or + project_domain_id or project_domain_name): + self.set_project_scope(id=project_id, + name=project_name, + domain_id=project_domain_id, + domain_name=project_domain_name) + + if domain_id or domain_name: + self.set_domain_scope(id=domain_id, name=domain_name) + + if (trust_id or (trust_impersonation is not None) or + trustee_user_id or trustor_user_id): + self.set_trust_scope(id=trust_id, + impersonation=trust_impersonation, + trustee_user_id=trustee_user_id, + trustor_user_id=trustor_user_id) + + @property + def root(self): + return self.setdefault('token', {}) + + @property + def expires_str(self): + return self.root.get('expires_at') + + @expires_str.setter + def expires_str(self, value): + self.root['expires_at'] = value + + @property + def expires(self): + return timeutils.parse_isotime(self.expires_str) + + @expires.setter + def expires(self, value): + self.expires_str = timeutils.isotime(value) + + @property + def _user(self): + return self.root.setdefault('user', {}) + + @property + def user_id(self): + return self._user.get('id') + + @user_id.setter + def user_id(self, value): + self._user['id'] = value + + @property + def user_name(self): + return self._user.get('name') + + @user_name.setter + def user_name(self, value): + self._user['name'] = value + + @property + def _user_domain(self): + return self._user.setdefault('domain', {}) + + @property + def user_domain_id(self): + return self._user_domain.get('id') + + @user_domain_id.setter + def user_domain_id(self, value): + self._user_domain['id'] = value + + @property + def user_domain_name(self): + return self._user_domain.get('name') + + @user_domain_name.setter + def user_domain_name(self, value): + self._user_domain['name'] = value + + @property + def methods(self): + return self.root.setdefault('methods', []) + + @property + def project_id(self): + return self.root.get('project', {}).get('id') + + @project_id.setter + def project_id(self, value): + self.root.setdefault('project', {})['id'] = value + + @property + def project_name(self): + return self.root.get('project', {}).get('name') + + @project_name.setter + def project_name(self, value): + self.root.setdefault('project', {})['name'] = value + + @property + def project_domain_id(self): + return self.root.get('project', {}).get('domain', {}).get('id') + + @project_domain_id.setter + def project_domain_id(self, value): + project = self.root.setdefault('project', {}) + project.setdefault('domain', {})['id'] = value + + @property + def project_domain_name(self): + return self.root.get('project', {}).get('project', {}).get('name') + + @project_domain_name.setter + def project_domain_name(self, value): + project = self.root.setdefault('project', {}) + project.setdefault('domain', {})['name'] = value + + @property + def domain_id(self): + return self.root.get('domain', {}).get('id') + + @domain_id.setter + def domain_id(self, value): + self.root.setdefault('domain', {})['id'] = value + + @property + def domain_name(self): + return self.root.get('domain', {}).get('name') + + @domain_name.setter + def domain_name(self, value): + self.root.setdefault('domain', {})['name'] = value + + @property + def trust_id(self): + return self.root.get('OS-TRUST:trust', {}).get('id') + + @trust_id.setter + def trust_id(self, value): + self.root.setdefault('OS-TRUST:trust', {})['id'] = value + + @property + def trust_impersonation(self): + return self.root.get('OS-TRUST:trust', {}).get('impersonation') + + @trust_impersonation.setter + def trust_impersonation(self, value): + self.root.setdefault('OS-TRUST:trust', {})['impersonation'] = value + + @property + def trustee_user_id(self): + trust = self.root.get('OS-TRUST:trust', {}) + return trust.get('trustee_user', {}).get('id') + + @trustee_user_id.setter + def trustee_user_id(self, value): + trust = self.root.setdefault('OS-TRUST:trust', {}) + trust.setdefault('trustee_user', {})['id'] = value + + @property + def trustor_user_id(self): + trust = self.root.get('OS-TRUST:trust', {}) + return trust.get('trustor_user', {}).get('id') + + @trustor_user_id.setter + def trustor_user_id(self, value): + trust = self.root.setdefault('OS-TRUST:trust', {}) + trust.setdefault('trustor_user', {})['id'] = value + + def validate(self): + project = self.root.get('project') + domain = self.root.get('domain') + trust = self.root.get('OS-TRUST:trust') + catalog = self.root.get('catalog') + roles = self.root.get('roles') + scoped = project or domain or trust + + if sum((bool(project), bool(domain), bool(trust))) > 1: + msg = 'You cannot scope to multiple targets' + raise exception.FixtureValidationError(msg) + + if catalog and not scoped: + msg = 'You cannot have a service catalog on an unscoped token' + raise exception.FixtureValidationError(msg) + + if scoped and not self.user.get('roles'): + msg = 'You must have roles on a token to scope it' + raise exception.FixtureValidationError(msg) + + if bool(scoped) != bool(roles): + msg = 'You must be scoped to have roles and vice-versa' + raise exception.FixtureValidationError(msg) + + def add_role(self, name=None, id=None): + roles = self.root.setdefault('roles', []) + data = {'id': id or uuid.uuid4().hex, + 'name': name or uuid.uuid4().hex} + roles.append(data) + return data + + def add_service(self, type, name=None): + service = _Service(type=type) + if name: + service['name'] = name + self.root.setdefault('catalog', []).append(service) + return service + + def set_project_scope(self, id=None, name=None, domain_id=None, + domain_name=None): + self.project_id = id or uuid.uuid4().hex + self.project_name = name or uuid.uuid4().hex + self.project_domain_id = domain_id or uuid.uuid4().hex + self.project_domain_name = domain_name or uuid.uuid4().hex + + def set_domain_scope(self, id=None, name=None): + self.domain_id = id or uuid.uuid4().hex + self.domain_name = name or uuid.uuid4().hex + + def set_trust_scope(self, id=None, impersonation=False, + trustee_user_id=None, trustor_user_id=None): + self.trust_id = id or uuid.uuid4().hex + self.trust_impersonation = impersonation + self.trustee_user_id = trustee_user_id or uuid.uuid4().hex + self.trustor_user_id = trustor_user_id or uuid.uuid4().hex diff --git a/keystoneclient/tests/v3/client_fixtures.py b/keystoneclient/tests/v3/client_fixtures.py index 87361c887..6764257d6 100644 --- a/keystoneclient/tests/v3/client_fixtures.py +++ b/keystoneclient/tests/v3/client_fixtures.py @@ -12,266 +12,112 @@ from __future__ import unicode_literals +from keystoneclient import fixture -UNSCOPED_TOKEN = { - 'token': { - 'methods': [ - 'password' - ], - 'catalog': {}, - 'expires_at': '2010-11-01T03:32:15-05:00', - 'user': { - 'domain': { - 'id': '4e6893b7ba0b4006840c3845660b86ed', - 'name': 'exampledomain' - }, - 'id': 'c4da488862bd435c9e6c0275a0d0e49a', - 'name': 'exampleuser', - } - } -} -DOMAIN_SCOPED_TOKEN = { - 'token': { - 'methods': [ - 'password' - ], - 'catalog': [{ - 'endpoints': [{ - 'url': - 'http://public.com:8776/v1/None', - 'region': 'RegionOne', - 'interface': 'public' - }, { - 'url': - 'http://internal:8776/v1/None', - 'region': 'RegionOne', - 'interface': 'internal' - }, { - 'url': - 'http://admin:8776/v1/None', - 'region': 'RegionOne', - 'interface': 'admin' - }], - 'type': 'volume' - }, { - 'endpoints': [{ - 'url': 'http://public.com:9292/v1', - 'region': 'RegionOne', - 'interface': 'public' - }, { - 'url': 'http://internal:9292/v1', - 'region': 'RegionOne', - 'interface': 'internal' - }, { - 'url': 'http://admin:9292/v1', - 'region': 'RegionOne', - 'interface': 'admin' - }], - 'type': 'image' - }, { - 'endpoints': [{ - 'url': - 'http://public.com:8774/v1.1/None', - 'region': 'RegionOne', - 'interface': 'public' - }, { - 'url': - 'http://internal:8774/v1.1/None', - 'region': 'RegionOne', - 'interface': 'internal' - }, { - 'url': - 'http://admin:8774/v1.1/None', - 'region': 'RegionOne', - 'interface': 'admin' - }], - 'type': 'compute' - }, { - 'endpoints': [{ - 'url': 'http://public.com:8773/services/Cloud', - 'region': 'RegionOne', - 'interface': 'public' - }, { - 'url': 'http://internal:8773/services/Cloud', - 'region': 'RegionOne', - 'interface': 'internal' - }, { - 'url': 'http://admin:8773/services/Admin', - 'region': 'RegionOne', - 'interface': 'admin' - }], - 'type': 'ec2' - }, { - 'endpoints': [{ - 'url': 'http://public.com:5000/v3', - 'region': 'RegionOne', - 'interface': 'public' - }, { - 'url': 'http://internal:5000/v3', - 'region': 'RegionOne', - 'interface': 'internal' - }, { - 'url': 'http://admin:35357/v3', - 'region': 'RegionOne', - 'interface': 'admin' - }], - 'type': 'identity' - }], - 'expires_at': '2010-11-01T03:32:15-05:00', - 'user': { - 'domain': { - 'id': '4e6893b7ba0b4006840c3845660b86ed', - 'name': 'exampledomain' - }, - 'id': 'c4da488862bd435c9e6c0275a0d0e49a', - 'name': 'exampleuser', - }, - 'roles': [ - { - "id": "76e72a", - "links": { - "self": "http://identity:35357/v3/roles/76e72a" - }, - "name": "admin" - }, - { - "id": "f4f392", - "links": { - "self": "http://identity:35357/v3/roles/f4f392" - }, - "name": "member" - } - ], - 'domain': { - 'id': '8e9283b7ba0b1038840c3842058b86ab', - 'name': 'anotherdomain' - }, - } -} +def unscoped_token(): + return fixture.V3Token(user_id='c4da488862bd435c9e6c0275a0d0e49a', + user_name='exampleuser', + user_domain_id='4e6893b7ba0b4006840c3845660b86ed', + user_domain_name='exampledomain', + expires='2010-11-01T03:32:15-05:00') + + +def domain_scoped_token(): + f = fixture.V3Token(user_id='c4da488862bd435c9e6c0275a0d0e49a', + user_name='exampleuser', + user_domain_id='4e6893b7ba0b4006840c3845660b86ed', + user_domain_name='exampledomain', + expires='2010-11-01T03:32:15-05:00', + domain_id='8e9283b7ba0b1038840c3842058b86ab', + domain_name='anotherdomain') + + f.add_role(id='76e72a', name='admin') + f.add_role(id='f4f392', name='member') + region = 'RegionOne' + + s = f.add_service('volume') + s.add_standard_endpoints(public='http://public.com:8776/v1/None', + internal='http://internal.com:8776/v1/None', + admin='http://admin.com:8776/v1/None', + region=region) + + s = f.add_service('image') + s.add_standard_endpoints(public='http://public.com:9292/v1', + internal='http://internal:9292/v1', + admin='http://admin:9292/v1', + region=region) + + s = f.add_service('compute') + s.add_standard_endpoints(public='http://public.com:8774/v1.1/None', + internal='http://internal:8774/v1.1/None', + admin='http://admin:8774/v1.1/None', + region=region) + + s = f.add_service('ec2') + s.add_standard_endpoints(public='http://public.com:8773/services/Cloud', + internal='http://internal:8773/services/Cloud', + admin='http://admin:8773/services/Admin', + region=region) + + s = f.add_service('identity') + s.add_standard_endpoints(public='http://public.com:5000/v3', + internal='http://internal:5000/v3', + admin='http://admin:35357/v3', + region=region) + + return f + + +def project_scoped_token(): + f = fixture.V3Token(user_id='c4da488862bd435c9e6c0275a0d0e49a', + user_name='exampleuser', + user_domain_id='4e6893b7ba0b4006840c3845660b86ed', + user_domain_name='exampledomain', + expires='2010-11-01T03:32:15-05:00', + project_id='225da22d3ce34b15877ea70b2a575f58', + project_name='exampleproject', + project_domain_id='4e6893b7ba0b4006840c3845660b86ed', + project_domain_name='exampledomain') + + f.add_role(id='76e72a', name='admin') + f.add_role(id='f4f392', name='member') + + region = 'RegionOne' + tenant = '225da22d3ce34b15877ea70b2a575f58' + + s = f.add_service('volume') + s.add_standard_endpoints(public='http://public.com:8776/v1/%s' % tenant, + internal='http://internal:8776/v1/%s' % tenant, + admin='http://admin:8776/v1/%s' % tenant, + region=region) + + s = f.add_service('image') + s.add_standard_endpoints(public='http://public.com:9292/v1', + internal='http://internal:9292/v1', + admin='http://admin:9292/v1', + region=region) + + s = f.add_service('compute') + s.add_standard_endpoints(public='http://public.com:8774/v2/%s' % tenant, + internal='http://internal:8774/v2/%s' % tenant, + admin='http://admin:8774/v2/%s' % tenant, + region=region) + + s = f.add_service('ec2') + s.add_standard_endpoints(public='http://public.com:8773/services/Cloud', + internal='http://internal:8773/services/Cloud', + admin='http://admin:8773/services/Admin', + region=region) + + s = f.add_service('identity') + s.add_standard_endpoints(public='http://public.com:5000/v3', + internal='http://internal:5000/v3', + admin='http://admin:35357/v3', + region=region) + + return f -PROJECT_SCOPED_TOKEN = { - 'token': { - 'methods': [ - 'password' - ], - 'catalog': [{ - 'endpoints': [{ - 'url': - 'http://public.com:8776/v1/225da22d3ce34b15877ea70b2a575f58', - 'region': 'RegionOne', - 'interface': 'public' - }, { - 'url': - 'http://internal:8776/v1/225da22d3ce34b15877ea70b2a575f58', - 'region': 'RegionOne', - 'interface': 'internal' - }, { - 'url': - 'http://admin:8776/v1/225da22d3ce34b15877ea70b2a575f58', - 'region': 'RegionOne', - 'interface': 'admin' - }], - 'type': 'volume' - }, { - 'endpoints': [{ - 'url': 'http://public.com:9292/v1', - 'region': 'RegionOne', - 'interface': 'public' - }, { - 'url': 'http://internal:9292/v1', - 'region': 'RegionOne', - 'interface': 'internal' - }, { - 'url': 'http://admin:9292/v1', - 'region': 'RegionOne', - 'interface': 'admin' - }], - 'type': 'image' - }, { - 'endpoints': [{ - 'url': - 'http://public.com:8774/v2/225da22d3ce34b15877ea70b2a575f58', - 'region': 'RegionOne', - 'interface': 'public' - }, { - 'url': - 'http://internal:8774/v2/225da22d3ce34b15877ea70b2a575f58', - 'region': 'RegionOne', - 'interface': 'internal' - }, { - 'url': - 'http://admin:8774/v2/225da22d3ce34b15877ea70b2a575f58', - 'region': 'RegionOne', - 'interface': 'admin' - }], - 'type': 'compute' - }, { - 'endpoints': [{ - 'url': 'http://public.com:8773/services/Cloud', - 'region': 'RegionOne', - 'interface': 'public' - }, { - 'url': 'http://internal:8773/services/Cloud', - 'region': 'RegionOne', - 'interface': 'internal' - }, { - 'url': 'http://admin:8773/services/Admin', - 'region': 'RegionOne', - 'interface': 'admin' - }], - 'type': 'ec2' - }, { - 'endpoints': [{ - 'url': 'http://public.com:5000/v3', - 'region': 'RegionOne', - 'interface': 'public' - }, { - 'url': 'http://internal:5000/v3', - 'region': 'RegionOne', - 'interface': 'internal' - }, { - 'url': 'http://admin:35357/v3', - 'region': 'RegionOne', - 'interface': 'admin' - }], - 'type': 'identity' - }], - 'expires_at': '2010-11-01T03:32:15-05:00', - 'user': { - 'domain': { - 'id': '4e6893b7ba0b4006840c3845660b86ed', - 'name': 'exampledomain' - }, - 'id': 'c4da488862bd435c9e6c0275a0d0e49a', - 'name': 'exampleuser', - }, - 'roles': [ - { - "id": "76e72a", - "links": { - "self": "http://identity:35357/v3/roles/76e72a" - }, - "name": "admin" - }, - { - "id": "f4f392", - "links": { - "self": "http://identity:35357/v3/roles/f4f392" - }, - "name": "member" - } - ], - 'project': { - 'domain': { - 'id': '4e6893b7ba0b4006840c3845660b86ed', - 'name': 'exampledomain' - }, - 'id': '225da22d3ce34b15877ea70b2a575f58', - 'name': 'exampleproject', - }, - } -} AUTH_SUBJECT_TOKEN = '3e2813b7ba0b4006840c3825860b86ed' @@ -279,142 +125,58 @@ AUTH_RESPONSE_HEADERS = { 'X-Subject-Token': AUTH_SUBJECT_TOKEN } -AUTH_RESPONSE_BODY = { - 'token': { - 'methods': [ - 'password' - ], - 'expires_at': '2010-11-01T03:32:15-05:00', - 'project': { - 'domain': { - 'id': '123', - 'name': 'aDomain' - }, - 'id': '345', - 'name': 'aTenant' - }, - 'user': { - 'domain': { - 'id': '1', - 'name': 'aDomain' - }, - 'id': '567', - 'name': 'test', - 'roles': [ - { - "id": "76e72a", - "links": { - "self": "http://identity:35357/v3/roles/76e72a" - }, - "name": "admin" - }, - { - "id": "f4f392", - "links": { - "self": "http://identity:35357/v3/roles/f4f392" - }, - "name": "member" - } - ], - }, - 'issued_at': '2010-10-31T03:32:15-05:00', - 'catalog': [{ - 'endpoints': [{ - 'url': 'https://compute.north.host/novapi/public', - 'region': 'North', - 'interface': 'public' - }, { - 'url': 'https://compute.north.host/novapi/internal', - 'region': 'North', - 'interface': 'internal' - }, { - 'url': 'https://compute.north.host/novapi/admin', - 'region': 'North', - 'interface': 'admin' - }], - 'type': 'compute', - 'name': 'nova', - }, { - 'endpoints': [{ - 'url': 'http://swift.north.host/swiftapi/public', - 'region': 'South', - 'interface': 'public' - }, { - 'url': 'http://swift.north.host/swiftapi/internal', - 'region': 'South', - 'interface': 'internal' - }, { - 'url': 'http://swift.north.host/swiftapi/admin', - 'region': 'South', - 'interface': 'admin' - }], - 'type': 'object-store', - 'name': 'swift', - }, { - 'endpoints': [{ - 'url': 'http://glance.north.host/glanceapi/public', - 'region': 'North', - 'interface': 'public' - }, { - 'url': 'http://glance.north.host/glanceapi/internal', - 'region': 'North', - 'interface': 'internal' - }, { - 'url': 'http://glance.north.host/glanceapi/admin', - 'region': 'North', - 'interface': 'admin' - }, { - 'url': 'http://glance.south.host/glanceapi/public', - 'region': 'South', - 'interface': 'public' - }, { - 'url': 'http://glance.south.host/glanceapi/internal', - 'region': 'South', - 'interface': 'internal' - }, { - 'url': 'http://glance.south.host/glanceapi/admin', - 'region': 'South', - 'interface': 'admin' - }], - 'type': 'image', - 'name': 'glance', - }] - } -} -TRUST_TOKEN = { - 'token': { - 'methods': [ - 'password' - ], - 'catalog': {}, - 'expires_at': '2010-11-01T03:32:15-05:00', - "OS-TRUST:trust": { - "id": "fe0aef", - "impersonation": False, - "links": { - "self": "http://identity:35357/v3/trusts/fe0aef" - }, - "trustee_user": { - "id": "0ca8f6", - "links": { - "self": "http://identity:35357/v3/users/0ca8f6" - } - }, - "trustor_user": { - "id": "bd263c", - "links": { - "self": "http://identity:35357/v3/users/bd263c" - } - } - }, - 'user': { - 'domain': { - 'id': '4e6893b7ba0b4006840c3845660b86ed', - 'name': 'exampledomain' - }, - 'id': '0ca8f6', - 'name': 'exampleuser', - } - } -} +def auth_response_body(): + f = fixture.V3Token(user_id='567', + user_name='test', + user_domain_id='1', + user_domain_name='aDomain', + expires='2010-11-01T03:32:15-05:00', + project_domain_id='123', + project_domain_name='aDomain', + project_id='345', + project_name='aTenant') + + f.add_role(id='76e72a', name='admin') + f.add_role(id='f4f392', name='member') + + s = f.add_service('compute', name='nova') + s.add_standard_endpoints( + public='https://compute.north.host/novapi/public', + internal='https://compute.north.host/novapi/internal', + admin='https://compute.north.host/novapi/admin', + region='North') + + s = f.add_service('object-store', name='swift') + s.add_standard_endpoints( + public='http://swift.north.host/swiftapi/public', + internal='http://swift.north.host/swiftapi/internal', + admin='http://swift.north.host/swiftapi/admin', + region='South') + + s = f.add_service('image', name='glance') + s.add_standard_endpoints( + public='http://glance.north.host/glanceapi/public', + internal='http://glance.north.host/glanceapi/internal', + admin='http://glance.north.host/glanceapi/admin', + region='North') + + s.add_standard_endpoints( + public='http://glance.south.host/glanceapi/public', + internal='http://glance.south.host/glanceapi/internal', + admin='http://glance.south.host/glanceapi/admin', + region='South') + + return f + + +def trust_token(): + return fixture.V3Token(user_id='0ca8f6', + user_name='exampleuser', + user_domain_id='4e6893b7ba0b4006840c3845660b86ed', + user_domain_name='exampledomain', + expires='2010-11-01T03:32:15-05:00', + trust_id='fe0aef', + trust_impersonation=False, + trustee_user_id='0ca8f6', + trustor_user_id='bd263c') diff --git a/keystoneclient/tests/v3/test_access.py b/keystoneclient/tests/v3/test_access.py index dfc7b3c66..cae09f978 100644 --- a/keystoneclient/tests/v3/test_access.py +++ b/keystoneclient/tests/v3/test_access.py @@ -21,9 +21,9 @@ from keystoneclient.tests.v3 import utils TOKEN_RESPONSE = utils.TestResponse({ "headers": client_fixtures.AUTH_RESPONSE_HEADERS }) -UNSCOPED_TOKEN = client_fixtures.UNSCOPED_TOKEN -DOMAIN_SCOPED_TOKEN = client_fixtures.DOMAIN_SCOPED_TOKEN -PROJECT_SCOPED_TOKEN = client_fixtures.PROJECT_SCOPED_TOKEN +UNSCOPED_TOKEN = client_fixtures.unscoped_token() +DOMAIN_SCOPED_TOKEN = client_fixtures.domain_scoped_token() +PROJECT_SCOPED_TOKEN = client_fixtures.project_scoped_token() class AccessInfoTest(utils.TestCase): @@ -33,8 +33,7 @@ class AccessInfoTest(utils.TestCase): self.assertTrue(auth_ref) self.assertIn('methods', auth_ref) - self.assertIn('catalog', auth_ref) - self.assertFalse(auth_ref['catalog']) + self.assertNotIn('catalog', auth_ref) self.assertEqual(auth_ref.auth_token, '3e2813b7ba0b4006840c3825860b86ed') diff --git a/keystoneclient/tests/v3/test_client.py b/keystoneclient/tests/v3/test_client.py index 1ea14d4af..d225b95ef 100644 --- a/keystoneclient/tests/v3/test_client.py +++ b/keystoneclient/tests/v3/test_client.py @@ -25,7 +25,7 @@ class KeystoneClientTest(utils.TestCase): @httpretty.activate def test_unscoped_init(self): - self.stub_auth(json=client_fixtures.UNSCOPED_TOKEN) + self.stub_auth(json=client_fixtures.unscoped_token()) c = client.Client(user_domain_name='exampledomain', username='exampleuser', @@ -39,7 +39,7 @@ class KeystoneClientTest(utils.TestCase): @httpretty.activate def test_domain_scoped_init(self): - self.stub_auth(json=client_fixtures.DOMAIN_SCOPED_TOKEN) + self.stub_auth(json=client_fixtures.domain_scoped_token()) c = client.Client(user_id='c4da488862bd435c9e6c0275a0d0e49a', password='password', @@ -55,7 +55,7 @@ class KeystoneClientTest(utils.TestCase): @httpretty.activate def test_project_scoped_init(self): - self.stub_auth(json=client_fixtures.PROJECT_SCOPED_TOKEN), + self.stub_auth(json=client_fixtures.project_scoped_token()), c = client.Client(user_id='c4da488862bd435c9e6c0275a0d0e49a', password='password', @@ -72,7 +72,7 @@ class KeystoneClientTest(utils.TestCase): @httpretty.activate def test_auth_ref_load(self): - self.stub_auth(json=client_fixtures.PROJECT_SCOPED_TOKEN) + self.stub_auth(json=client_fixtures.project_scoped_token()) c = client.Client(user_id='c4da488862bd435c9e6c0275a0d0e49a', password='password', @@ -92,8 +92,8 @@ class KeystoneClientTest(utils.TestCase): def test_auth_ref_load_with_overridden_arguments(self): new_auth_url = 'https://newkeystone.com/v3' - self.stub_auth(json=client_fixtures.PROJECT_SCOPED_TOKEN) - self.stub_auth(json=client_fixtures.PROJECT_SCOPED_TOKEN, + self.stub_auth(json=client_fixtures.project_scoped_token()) + self.stub_auth(json=client_fixtures.project_scoped_token(), base_url=new_auth_url) c = client.Client(user_id='c4da488862bd435c9e6c0275a0d0e49a', @@ -114,7 +114,7 @@ class KeystoneClientTest(utils.TestCase): @httpretty.activate def test_trust_init(self): - self.stub_auth(json=client_fixtures.TRUST_TOKEN) + self.stub_auth(json=client_fixtures.trust_token()) c = client.Client(user_domain_name='exampledomain', username='exampleuser', @@ -169,12 +169,12 @@ class KeystoneClientTest(utils.TestCase): @httpretty.activate def test_management_url_is_updated_with_project(self): - self._management_url_is_updated(client_fixtures.PROJECT_SCOPED_TOKEN, + self._management_url_is_updated(client_fixtures.project_scoped_token(), project_name='exampleproject') @httpretty.activate def test_management_url_is_updated_with_domain(self): - self._management_url_is_updated(client_fixtures.DOMAIN_SCOPED_TOKEN, + self._management_url_is_updated(client_fixtures.domain_scoped_token(), domain_name='exampledomain') @httpretty.activate @@ -182,7 +182,7 @@ class KeystoneClientTest(utils.TestCase): # NOTE(jamielennox): this is deprecated behaviour that should be # removed ASAP, however must remain compatible. - self.stub_auth(json=client_fixtures.AUTH_RESPONSE_BODY) + self.stub_auth(json=client_fixtures.auth_response_body()) cl = client.Client(username='exampleuser', password='password', diff --git a/keystoneclient/tests/v3/test_service_catalog.py b/keystoneclient/tests/v3/test_service_catalog.py index 5ad303c01..7a96c3a25 100644 --- a/keystoneclient/tests/v3/test_service_catalog.py +++ b/keystoneclient/tests/v3/test_service_catalog.py @@ -10,8 +10,6 @@ # License for the specific language governing permissions and limitations # under the License. -import copy - from keystoneclient import access from keystoneclient import exceptions from keystoneclient.tests.v3 import client_fixtures @@ -21,8 +19,7 @@ from keystoneclient.tests.v3 import utils class ServiceCatalogTest(utils.TestCase): def setUp(self): super(ServiceCatalogTest, self).setUp() - self.AUTH_RESPONSE_BODY = copy.deepcopy( - client_fixtures.AUTH_RESPONSE_BODY) + self.AUTH_RESPONSE_BODY = client_fixtures.auth_response_body() self.RESPONSE = utils.TestResponse({ "headers": client_fixtures.AUTH_RESPONSE_HEADERS }) @@ -202,7 +199,7 @@ class ServiceCatalogTest(utils.TestCase): def test_service_catalog_without_name(self): pr_auth_ref = access.AccessInfo.factory( resp=None, - body=client_fixtures.PROJECT_SCOPED_TOKEN) + body=client_fixtures.project_scoped_token()) pr_sc = pr_auth_ref.service_catalog # this will work because there are no service names on that token