bug lp:882233 Code changes to support API calls to fetch services/roles by name.
Change-Id: Iac3687940c3dac6e0d4924ff9dc7cf50d1f31e74
This commit is contained in:
parent
c18c093573
commit
f09d84a0ef
@ -109,6 +109,7 @@
|
||||
|
||||
<resource id="role-service-OS-KSADM" path="OS-KSADM">
|
||||
<resource id="roles" path="roles">
|
||||
<method href="#getRoleByName"/>
|
||||
<method href="#listRoles"/>
|
||||
<method href="#addRole"/>
|
||||
<resource id="roleId" path="{roleId}">
|
||||
@ -120,7 +121,7 @@
|
||||
<resource id="services" path="services">
|
||||
<method href="#listServices"/>
|
||||
<method href="#addService"/>
|
||||
|
||||
<method href="#getServiceByName"/>
|
||||
<resource id="serviceId" path="{serviceId}">
|
||||
<param name="serviceId" style="template" type="xsd:int"/>
|
||||
<method href="#getService"/>
|
||||
@ -348,9 +349,6 @@
|
||||
<method name="POST" id="updateUser">
|
||||
<doc xml:lang="EN" title="Update user">
|
||||
<p xmlns="http://www.w3.org/1999/xhtml">Update a user.</p>
|
||||
|
||||
|
||||
|
||||
</doc>
|
||||
<request>
|
||||
<representation mediaType="application/xml" element="identity:user">
|
||||
@ -679,13 +677,50 @@
|
||||
&getFaults;
|
||||
</method>
|
||||
|
||||
<method name="GET" id="getRoleByName">
|
||||
<doc xml:lang="EN" title="Get Role By Name">
|
||||
<p xmlns="http://www.w3.org/1999/xhtml">Get a role by Name.</p>
|
||||
</doc>
|
||||
<request>
|
||||
<param name="name" style="query" type="xsd:string" required="true"/>
|
||||
</request>
|
||||
<response status="200 203">
|
||||
<representation mediaType="application/xml" element="identity:role">
|
||||
<doc xml:lang="EN">
|
||||
<xsdxt:code href="../common/samples/role.xml"/>
|
||||
</doc>
|
||||
<param name="Location" type="xsd:anyURI" style="header"/>
|
||||
</representation>
|
||||
<representation mediaType="application/json">
|
||||
<doc xml:lang="EN">
|
||||
<xsdxt:code href="../common/samples/role.json"/>
|
||||
</doc>
|
||||
<param name="Location" type="xsd:anyURI" style="header"/>
|
||||
</representation>
|
||||
</response>
|
||||
&commonFaults;
|
||||
&postPutFaults;
|
||||
&getFaults;
|
||||
</method>
|
||||
|
||||
|
||||
<method name="GET" id="getRole">
|
||||
<doc xml:lang="EN" title="Get Role">
|
||||
<p xmlns="http://www.w3.org/1999/xhtml">Get a role.</p>
|
||||
</doc>
|
||||
<response status="200 203">
|
||||
<representation mediaType="application/xml" element="identity:role"/>
|
||||
<representation mediaType="application/json"/>
|
||||
<representation mediaType="application/xml" element="identity:role">
|
||||
<doc xml:lang="EN">
|
||||
<xsdxt:code href="../common/samples/role.xml"/>
|
||||
</doc>
|
||||
<param name="Location" type="xsd:anyURI" style="header"/>
|
||||
</representation>
|
||||
<representation mediaType="application/json">
|
||||
<doc xml:lang="EN">
|
||||
<xsdxt:code href="../common/samples/role.json"/>
|
||||
</doc>
|
||||
<param name="Location" type="xsd:anyURI" style="header"/>
|
||||
</representation>
|
||||
</response>
|
||||
&commonFaults;
|
||||
&postPutFaults;
|
||||
@ -725,6 +760,28 @@
|
||||
&commonFaults;
|
||||
&getFaults;
|
||||
</method>
|
||||
<method name="GET" id="getServiceByName">
|
||||
<doc xml:lang="EN" title="Get Service">
|
||||
<p xmlns="http://www.w3.org/1999/xhtml">Get a service by name.</p>
|
||||
</doc>
|
||||
<request>
|
||||
<param name="name" style="query" type="xsd:string" required="true"/>
|
||||
</request>
|
||||
<response status="200 203">
|
||||
<representation mediaType="application/xml" element="OS-KSADM:service">
|
||||
<doc xml:lang="EN">
|
||||
<xsdxt:code href="../common/samples/service.xml"/>
|
||||
</doc>
|
||||
</representation>
|
||||
<representation mediaType="application/json">
|
||||
<doc xml:lang="EN">
|
||||
<xsdxt:code href="../common/samples/service.json"/>
|
||||
</doc>
|
||||
</representation>
|
||||
</response>
|
||||
&commonFaults;
|
||||
&getFaults;
|
||||
</method>
|
||||
<method name="GET" id="getService">
|
||||
<doc xml:lang="EN" title="Get Service">
|
||||
<p xmlns="http://www.w3.org/1999/xhtml">Get a service.</p>
|
||||
|
@ -25,6 +25,12 @@ class RolesController(wsgi.Controller):
|
||||
|
||||
@utils.wrap_error
|
||||
def get_roles(self, req):
|
||||
role_name = req.GET["name"] if "name" in req.GET else None
|
||||
if role_name:
|
||||
tenant = config.SERVICE.get_role_by_name(
|
||||
utils.get_auth_token(req), role_name)
|
||||
return utils.send_result(200, req, tenant)
|
||||
else:
|
||||
marker, limit, url = get_marker_limit_and_url(req)
|
||||
roles = config.SERVICE.get_roles(
|
||||
utils.get_auth_token(req), marker, limit, url)
|
||||
|
@ -19,6 +19,12 @@ class ServicesController(wsgi.Controller):
|
||||
|
||||
@utils.wrap_error
|
||||
def get_services(self, req):
|
||||
service_name = req.GET["name"] if "name" in req.GET else None
|
||||
if service_name:
|
||||
tenant = config.SERVICE.get_service_by_name(
|
||||
utils.get_auth_token(req), service_name)
|
||||
return utils.send_result(200, req, tenant)
|
||||
else:
|
||||
marker, limit, url = get_marker_limit_and_url(req)
|
||||
services = config.SERVICE.get_services(
|
||||
utils.get_auth_token(req), marker, limit, url)
|
||||
|
@ -739,6 +739,14 @@ class IdentityService(object):
|
||||
raise fault.ItemNotFoundFault("The role could not be found")
|
||||
return Role(drole.id, drole.name, drole.desc, drole.service_id)
|
||||
|
||||
def get_role_by_name(self, admin_token, role_name):
|
||||
self.__validate_service_or_keystone_admin_token(admin_token)
|
||||
|
||||
drole = api.ROLE.get_by_name(role_name)
|
||||
if not drole:
|
||||
raise fault.ItemNotFoundFault("The role could not be found")
|
||||
return Role(drole.id, drole.name, drole.desc, drole.service_id)
|
||||
|
||||
def delete_role(self, admin_token, role_id):
|
||||
self.__validate_service_or_keystone_admin_token(admin_token)
|
||||
drole = api.ROLE.get(role_id)
|
||||
@ -1105,6 +1113,14 @@ class IdentityService(object):
|
||||
return Service(dservice.id, dservice.name, dservice.type,
|
||||
dservice.desc)
|
||||
|
||||
def get_service_by_name(self, admin_token, service_name):
|
||||
self.__validate_service_or_keystone_admin_token(admin_token)
|
||||
dservice = api.SERVICE.get_by_name(service_name)
|
||||
if not dservice:
|
||||
raise fault.ItemNotFoundFault("The service could not be found")
|
||||
return Service(dservice.id, dservice.name, dservice.type,
|
||||
dservice.desc)
|
||||
|
||||
def delete_service(self, admin_token, service_id):
|
||||
self.__validate_service_or_keystone_admin_token(admin_token)
|
||||
dservice = api.SERVICE.get(service_id)
|
||||
|
@ -329,6 +329,11 @@ class ApiTestCase(RestfulTestCase):
|
||||
return self.admin_request(method='GET',
|
||||
path='/OS-KSADM/roles/%s' % (role_id,), **kwargs)
|
||||
|
||||
def get_role_by_name(self, role_name, **kwargs):
|
||||
"""GET /roles?name={role_name}"""
|
||||
return self.admin_request(method='GET',
|
||||
path='/OS-KSADM/roles?name=%s' % (role_name,), **kwargs)
|
||||
|
||||
def delete_role(self, role_id, **kwargs):
|
||||
"""DELETE /roles/{role_id}"""
|
||||
return self.admin_request(method='DELETE',
|
||||
@ -409,6 +414,11 @@ class ApiTestCase(RestfulTestCase):
|
||||
return self.admin_request(method='GET',
|
||||
path='/OS-KSADM/services/%s' % (service_id,), **kwargs)
|
||||
|
||||
def get_service_by_name(self, service_name, **kwargs):
|
||||
"""GET /services?name={service_name}"""
|
||||
return self.admin_request(method='GET',
|
||||
path='/OS-KSADM/services?name=%s' % (service_name,), **kwargs)
|
||||
|
||||
def delete_service(self, service_id, **kwargs):
|
||||
"""DELETE /services/{service_id}"""
|
||||
return self.admin_request(method='DELETE',
|
||||
@ -725,6 +735,10 @@ class FunctionalTestCase(ApiTestCase):
|
||||
role_id = optional_str(role_id)
|
||||
return self.get_role(role_id, **kwargs)
|
||||
|
||||
def fetch_role_by_name(self, role_name=None, **kwargs):
|
||||
role_name = optional_str(role_name)
|
||||
return self.get_role_by_name(role_name, **kwargs)
|
||||
|
||||
def remove_role(self, role_id=None, **kwargs):
|
||||
role_id = optional_str(role_id)
|
||||
return self.delete_role(role_id, **kwargs)
|
||||
@ -748,6 +762,10 @@ class FunctionalTestCase(ApiTestCase):
|
||||
service_id = optional_str(service_id)
|
||||
return self.get_service(service_id, **kwargs)
|
||||
|
||||
def fetch_service_by_name(self, service_name=None, **kwargs):
|
||||
service_name = optional_str(service_name)
|
||||
return self.get_service_by_name(service_name, **kwargs)
|
||||
|
||||
def remove_service(self, service_id=None, **kwargs):
|
||||
service_id = optional_str(service_id)
|
||||
self.delete_service(service_id, **kwargs)
|
||||
|
@ -226,6 +226,74 @@ class GetRoleTest(RolesTest):
|
||||
'Accept': 'application/xml'})
|
||||
|
||||
|
||||
class GetRoleByNameTest(RolesTest):
|
||||
def setUp(self, *args, **kwargs):
|
||||
super(GetRoleByNameTest, self).setUp(*args, **kwargs)
|
||||
|
||||
self.role = self.create_role().json['role']
|
||||
|
||||
def test_get_role(self):
|
||||
role = self.fetch_role_by_name(
|
||||
self.role['name'], assert_status=200).json['role']
|
||||
self.assertEqual(role['id'], self.role['id'])
|
||||
self.assertEqual(role['name'], self.role['name'])
|
||||
self.assertEqual(role['description'], self.role['description'])
|
||||
self.assertEqual(role.get('serviceId'), self.role.get('serviceId'))
|
||||
|
||||
def test_get_role_xml(self):
|
||||
r = self.get_role_by_name(self.role['name'],
|
||||
assert_status=200, headers={
|
||||
'Accept': 'application/xml'})
|
||||
self.assertEqual(r.xml.tag, '{%s}role' % self.xmlns)
|
||||
self.assertEqual(r.xml.get('id'), self.role['id'])
|
||||
self.assertEqual(r.xml.get('name'), self.role['name'])
|
||||
self.assertEqual(r.xml.get('description'), self.role['description'])
|
||||
self.assertEqual(r.xml.get('serviceId'), self.role.get('serviceId'))
|
||||
|
||||
def test_get_role_bad(self):
|
||||
self.fetch_role_by_name(common.unique_str(), assert_status=404)
|
||||
|
||||
def test_get_role_xml_bad(self):
|
||||
self.get_role_by_name(common.unique_str(), assert_status=404, headers={
|
||||
'Accept': 'application/xml'})
|
||||
|
||||
def test_get_role_expired_token(self):
|
||||
self.admin_token = self.expired_admin_token
|
||||
self.fetch_role_by_name(self.role['name'], assert_status=403)
|
||||
|
||||
def test_get_role_xml_using_expired_token(self):
|
||||
self.admin_token = self.expired_admin_token
|
||||
self.get_role_by_name(self.role['name'], assert_status=403, headers={
|
||||
'Accept': 'application/xml'})
|
||||
|
||||
def test_get_role_using_disabled_token(self):
|
||||
self.admin_token = self.disabled_admin_token
|
||||
self.fetch_role_by_name(self.role['name'], assert_status=403)
|
||||
|
||||
def test_get_role_xml_using_disabled_token(self):
|
||||
self.admin_token = self.disabled_admin_token
|
||||
self.get_role_by_name(self.role['name'], assert_status=403, headers={
|
||||
'Accept': 'application/xml'})
|
||||
|
||||
def test_get_role_using_missing_token(self):
|
||||
self.admin_token = ''
|
||||
self.fetch_role_by_name(self.role['name'], assert_status=401)
|
||||
|
||||
def test_get_role_xml_using_missing_token(self):
|
||||
self.admin_token = ''
|
||||
self.get_role_by_name(self.role['name'], assert_status=401, headers={
|
||||
'Accept': 'application/xml'})
|
||||
|
||||
def test_get_role_using_invalid_token(self):
|
||||
self.admin_token = common.unique_str()
|
||||
self.fetch_role_by_name(self.role['name'], assert_status=401)
|
||||
|
||||
def test_get_role_xml_using_invalid_token(self):
|
||||
self.admin_token = common.unique_str()
|
||||
self.get_role_by_name(self.role['name'], assert_status=401, headers={
|
||||
'Accept': 'application/xml'})
|
||||
|
||||
|
||||
class CreateRoleAssignmentTest(RolesTest):
|
||||
def setUp(self, *args, **kwargs):
|
||||
super(CreateRoleAssignmentTest, self).setUp(*args, **kwargs)
|
||||
|
@ -112,6 +112,49 @@ class GetServiceTest(ServicesTest):
|
||||
self.fetch_service(service_id=self.service['id'], assert_status=401)
|
||||
|
||||
|
||||
class GetServiceByNameTest(ServicesTest):
|
||||
def setUp(self, *args, **kwargs):
|
||||
super(GetServiceByNameTest, self).setUp(*args, **kwargs)
|
||||
self.service = self.create_service().json['OS-KSADM:service']
|
||||
|
||||
def test_service_get_json(self):
|
||||
service = self.fetch_service_by_name(service_name=self.service['name'],
|
||||
assert_status=200).json['OS-KSADM:service']
|
||||
|
||||
self.assertIsNotNone(service['id'])
|
||||
self.assertIsNotNone(service['name'])
|
||||
self.assertIsNotNone(service['description'])
|
||||
|
||||
def test_service_get_xml(self):
|
||||
service = self.fetch_service_by_name(service_name=self.service['name'],
|
||||
assert_status=200, headers={'Accept': 'application/xml'}).xml
|
||||
|
||||
self.assertEqual(service.tag, '{%s}service' % self.xmlns_ksadm)
|
||||
self.assertIsNotNone(service.get('id'))
|
||||
self.assertIsNotNone(service.get('name'))
|
||||
self.assertIsNotNone(service.get('description'))
|
||||
|
||||
def test_get_service_using_disabled_token(self):
|
||||
self.admin_token = self.disabled_admin_token
|
||||
self.fetch_service_by_name(
|
||||
service_name=self.service['name'], assert_status=403)
|
||||
|
||||
def test_get_service_using_missing_token(self):
|
||||
self.admin_token = ''
|
||||
self.fetch_service_by_name(
|
||||
service_name=self.service['name'], assert_status=401)
|
||||
|
||||
def test_get_service_using_expired_token(self):
|
||||
self.admin_token = self.expired_admin_token
|
||||
self.fetch_service_by_name(
|
||||
service_name=self.service['name'], assert_status=403)
|
||||
|
||||
def test_get_service_using_invalid_token(self):
|
||||
self.admin_token = common.unique_str()
|
||||
self.fetch_service_by_name(
|
||||
service_name=self.service['name'], assert_status=401)
|
||||
|
||||
|
||||
class CreateServiceTest(ServicesTest):
|
||||
def test_service_create_json(self):
|
||||
name = common.unique_str()
|
||||
|
Loading…
Reference in New Issue
Block a user