Merge "Refactor app response for api request '/api/keystone/svc-catalog'"

This commit is contained in:
Zuul 2018-10-24 08:28:20 +00:00 committed by Gerrit Code Review
commit 11fe92baf0
2 changed files with 72 additions and 7 deletions

View File

@ -13,6 +13,8 @@
# limitations under the License.
"""API over the keystone service."""
import copy
from django.conf import settings
import django.http
from django.views import generic
@ -542,7 +544,14 @@ class ServiceCatalog(generic.View):
@rest_utils.ajax()
def get(self, request):
"""Return the service catalog associated with the current user."""
return request.user.service_catalog
catalog = copy.deepcopy(request.user.service_catalog)
for record in catalog:
for endpoint in record['endpoints']:
if endpoint['interface'] != 'public':
record['endpoints'].remove(endpoint)
if not record['endpoints']:
catalog.remove(record)
return catalog
@urls.register

View File

@ -15,7 +15,6 @@
from django.conf import settings
import mock
from oslo_serialization import jsonutils
import six
from openstack_dashboard import api
from openstack_dashboard.api.rest import keystone
@ -688,13 +687,70 @@ class KeystoneRestTestCase(test.TestCase):
#
def test_service_catalog_get(self):
request = self.mock_rest_request()
request.user = mock.MagicMock(**{'service_catalog': [
{'endpoints': [
{'url': 'http://cool_url/image',
'interface': 'admin',
'region': 'RegionOne',
'region_id': 'RegionOne',
'id': 'test'},
{'url': 'http://cool_url/image',
'interface': 'public',
'region': 'RegionOne',
'region_id': 'RegionOne',
'id': 'test'},
{'url': 'http://cool_url/image',
'interface': 'internal',
'region': 'RegionOne',
'region_id': 'RegionOne',
'id': 'test'}],
'type': 'image',
'id': '2b5bc2e59b094f898a43f5e8ce446240',
'name': 'glance'},
{'endpoints': [
{'url': 'http://cool_url/volume/v2/test',
'interface': 'public',
'region': 'RegionOne',
'region_id': 'RegionOne',
'id': '29a629afb80547ea9baa4266e97b4cb5'},
{'url': 'http://cool_url/volume/v2/test',
'interface': 'admin',
'region': 'RegionOne',
'region_id': 'RegionOne',
'id': '29a629afb80547ea9baa4266e97b4cb5'}],
'type': 'volumev2',
'id': '55ef272cfa714e54b8f2046c157b027d',
'name': 'cinderv2'},
{'endpoints': [
{'url': 'http://cool_url/compute/v2/check',
'interface': 'internal',
'region': 'RegionOne',
'region_id': 'RegionOne',
'id': 'e8c440e025d94355ab82c78cc2062129'}],
'type': 'compute_legacy',
'id': 'b7f1d3f4119643508d5ca2325eb8af87',
'name': 'nova_legacy'}]})
response = keystone.ServiceCatalog().get(request)
self.assertStatusCode(response, 200)
content = jsonutils.dumps(request.user.service_catalog,
sort_keys=settings.DEBUG)
if six.PY3:
content = content.encode('utf-8')
self.assertEqual(content, response.content)
content = [{'endpoints': [
{'url': 'http://cool_url/image',
'interface': 'public',
'region': 'RegionOne',
'region_id': 'RegionOne',
'id': 'test'}],
'type': 'image',
'id': '2b5bc2e59b094f898a43f5e8ce446240',
'name': 'glance'},
{'endpoints': [
{'url': 'http://cool_url/volume/v2/test',
'interface': 'public',
'region': 'RegionOne',
'region_id': 'RegionOne',
'id': '29a629afb80547ea9baa4266e97b4cb5'}],
'type': 'volumev2',
'id': '55ef272cfa714e54b8f2046c157b027d',
'name': 'cinderv2'}]
self.assertEqual(content, jsonutils.loads(response.content))
#
# User Session