summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--openstack_dashboard/api/rest/keystone.py11
-rw-r--r--openstack_dashboard/test/unit/api/rest/test_keystone.py68
2 files changed, 72 insertions, 7 deletions
diff --git a/openstack_dashboard/api/rest/keystone.py b/openstack_dashboard/api/rest/keystone.py
index 980035af0..8575ae820 100644
--- a/openstack_dashboard/api/rest/keystone.py
+++ b/openstack_dashboard/api/rest/keystone.py
@@ -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
diff --git a/openstack_dashboard/test/unit/api/rest/test_keystone.py b/openstack_dashboard/test/unit/api/rest/test_keystone.py
index 88e4111d3..245a24530 100644
--- a/openstack_dashboard/test/unit/api/rest/test_keystone.py
+++ b/openstack_dashboard/test/unit/api/rest/test_keystone.py
@@ -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