Federation Service Providers CRUD operations
Implement CRUD operations for Service Providers used in K2K. Implements: bp k2k-service-providers Change-Id: I514c64d2a412d12cff922a02c575f1764a1a23ae
This commit is contained in:

committed by
Rodrigo Duarte Sousa

parent
bd6fa327c8
commit
e491d0dc84
@@ -21,6 +21,7 @@ from keystoneclient.v3.contrib.federation import base
|
||||
from keystoneclient.v3.contrib.federation import identity_providers
|
||||
from keystoneclient.v3.contrib.federation import mappings
|
||||
from keystoneclient.v3.contrib.federation import protocols
|
||||
from keystoneclient.v3.contrib.federation import service_providers
|
||||
from keystoneclient.v3 import domains
|
||||
from keystoneclient.v3 import projects
|
||||
|
||||
@@ -407,3 +408,72 @@ class FederatedTokenTests(utils.TestCase):
|
||||
def test_get_user_domain_id(self):
|
||||
"""Ensure a federated user's domain ID does not exist."""
|
||||
self.assertIsNone(self.federated_token.user_domain_id)
|
||||
|
||||
|
||||
class ServiceProviderTests(utils.TestCase, utils.CrudTests):
|
||||
def setUp(self):
|
||||
super(ServiceProviderTests, self).setUp()
|
||||
self.key = 'service_provider'
|
||||
self.collection_key = 'service_providers'
|
||||
self.model = service_providers.ServiceProvider
|
||||
self.manager = self.client.federation.service_providers
|
||||
self.path_prefix = 'OS-FEDERATION'
|
||||
|
||||
def new_ref(self, **kwargs):
|
||||
kwargs.setdefault('auth_url', uuid.uuid4().hex)
|
||||
kwargs.setdefault('description', uuid.uuid4().hex)
|
||||
kwargs.setdefault('enabled', True)
|
||||
kwargs.setdefault('id', uuid.uuid4().hex)
|
||||
kwargs.setdefault('sp_url', uuid.uuid4().hex)
|
||||
return kwargs
|
||||
|
||||
def test_positional_parameters_expect_fail(self):
|
||||
"""Ensure CrudManager raises TypeError exceptions.
|
||||
|
||||
After passing wrong number of positional arguments
|
||||
an exception should be raised.
|
||||
|
||||
Operations to be tested:
|
||||
* create()
|
||||
* get()
|
||||
* list()
|
||||
* delete()
|
||||
* update()
|
||||
|
||||
"""
|
||||
POS_PARAM_1 = uuid.uuid4().hex
|
||||
POS_PARAM_2 = uuid.uuid4().hex
|
||||
POS_PARAM_3 = uuid.uuid4().hex
|
||||
|
||||
PARAMETERS = {
|
||||
'create': (POS_PARAM_1, POS_PARAM_2),
|
||||
'get': (POS_PARAM_1, POS_PARAM_2),
|
||||
'list': (POS_PARAM_1, POS_PARAM_2),
|
||||
'update': (POS_PARAM_1, POS_PARAM_2, POS_PARAM_3),
|
||||
'delete': (POS_PARAM_1, POS_PARAM_2)
|
||||
}
|
||||
|
||||
for f_name, args in PARAMETERS.items():
|
||||
self.assertRaises(TypeError, getattr(self.manager, f_name),
|
||||
*args)
|
||||
|
||||
def test_create(self):
|
||||
ref = self.new_ref()
|
||||
|
||||
# req_ref argument allows you to specify a different
|
||||
# signature for the request when the manager does some
|
||||
# conversion before doing the request (e.g. converting
|
||||
# from datetime object to timestamp string)
|
||||
req_ref = ref.copy()
|
||||
req_ref.pop('id')
|
||||
|
||||
self.stub_entity('PUT', entity=ref, id=ref['id'], status_code=201)
|
||||
|
||||
returned = self.manager.create(**ref)
|
||||
self.assertIsInstance(returned, self.model)
|
||||
for attr in req_ref:
|
||||
self.assertEqual(
|
||||
getattr(returned, attr),
|
||||
req_ref[attr],
|
||||
'Expected different %s' % attr)
|
||||
self.assertEntityRequestBodyIs(req_ref)
|
||||
|
@@ -15,6 +15,7 @@ from keystoneclient.v3.contrib.federation import identity_providers
|
||||
from keystoneclient.v3.contrib.federation import mappings
|
||||
from keystoneclient.v3.contrib.federation import projects
|
||||
from keystoneclient.v3.contrib.federation import protocols
|
||||
from keystoneclient.v3.contrib.federation import service_providers
|
||||
|
||||
|
||||
class FederationManager(object):
|
||||
@@ -25,3 +26,4 @@ class FederationManager(object):
|
||||
self.protocols = protocols.ProtocolManager(api)
|
||||
self.projects = projects.ProjectManager(api)
|
||||
self.domains = domains.DomainManager(api)
|
||||
self.service_providers = service_providers.ServiceProviderManager(api)
|
||||
|
104
keystoneclient/v3/contrib/federation/service_providers.py
Normal file
104
keystoneclient/v3/contrib/federation/service_providers.py
Normal file
@@ -0,0 +1,104 @@
|
||||
# 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.
|
||||
|
||||
from keystoneclient import base
|
||||
from keystoneclient import utils
|
||||
|
||||
|
||||
class ServiceProvider(base.Resource):
|
||||
"""Object representing Service Provider container
|
||||
|
||||
Attributes:
|
||||
* id: user-defined unique string identifying Service Provider.
|
||||
* sp_url: the shibboleth endpoint of a Service Provider.
|
||||
* auth_url: the authentication url of Service Provider.
|
||||
|
||||
"""
|
||||
pass
|
||||
|
||||
|
||||
class ServiceProviderManager(base.CrudManager):
|
||||
"""Manager class for manipulating Service Providers."""
|
||||
|
||||
resource_class = ServiceProvider
|
||||
collection_key = 'service_providers'
|
||||
key = 'service_provider'
|
||||
base_url = 'OS-FEDERATION'
|
||||
|
||||
def _build_url_and_put(self, **kwargs):
|
||||
url = self.build_url(dict_args_in_out=kwargs)
|
||||
body = {self.key: kwargs}
|
||||
return self._update(url, body=body, response_key=self.key,
|
||||
method='PUT')
|
||||
|
||||
@utils.positional.method(0)
|
||||
def create(self, id, **kwargs):
|
||||
"""Create Service Provider object.
|
||||
|
||||
Utilize Keystone URI:
|
||||
``PUT /OS-FEDERATION/service_providers/{id}``
|
||||
|
||||
:param id: unique id of the service provider.
|
||||
|
||||
"""
|
||||
return self._build_url_and_put(service_provider_id=id,
|
||||
**kwargs)
|
||||
|
||||
def get(self, service_provider):
|
||||
"""Fetch Service Provider object
|
||||
|
||||
Utilize Keystone URI:
|
||||
``GET /OS-FEDERATION/service_providers/{id}``
|
||||
|
||||
:param service_provider: an object with service_provider_id
|
||||
stored inside.
|
||||
|
||||
"""
|
||||
return super(ServiceProviderManager, self).get(
|
||||
service_provider_id=base.getid(service_provider))
|
||||
|
||||
def list(self, **kwargs):
|
||||
"""List all Service Providers.
|
||||
|
||||
Utilize Keystone URI:
|
||||
``GET /OS-FEDERATION/service_providers``
|
||||
|
||||
"""
|
||||
return super(ServiceProviderManager, self).list(**kwargs)
|
||||
|
||||
def update(self, service_provider, **kwargs):
|
||||
"""Update the existing Service Provider object on the server.
|
||||
|
||||
Only properties provided to the function are being updated.
|
||||
|
||||
Utilize Keystone URI:
|
||||
``PATCH /OS-FEDERATION/service_providers/{id}``
|
||||
|
||||
:param service_provider: an object with service_provider_id
|
||||
stored inside.
|
||||
|
||||
"""
|
||||
return super(ServiceProviderManager, self).update(
|
||||
service_provider_id=base.getid(service_provider), **kwargs)
|
||||
|
||||
def delete(self, service_provider):
|
||||
"""Delete Service Provider object.
|
||||
|
||||
Utilize Keystone URI:
|
||||
``DELETE /OS-FEDERATION/service_providers/{id}``
|
||||
|
||||
:param service_provider: an object with service_provider_id
|
||||
stored inside.
|
||||
|
||||
"""
|
||||
return super(ServiceProviderManager, self).delete(
|
||||
service_provider_id=base.getid(service_provider))
|
Reference in New Issue
Block a user