summaryrefslogtreecommitdiff
path: root/keystonemiddleware
diff options
context:
space:
mode:
authorGuang Yee <guang.yee@suse.com>2018-10-25 13:01:23 -0700
committerGuang Yee <guang.yee@suse.com>2018-10-26 08:13:39 -0700
commit6779838a242b222672721407cc320672ab24067a (patch)
tree4360754d7b7bb20f390e9c5db402bcf722780236 /keystonemiddleware
parentfc51082ef43e316bbfa65c16dd6483af1f2092e7 (diff)
downloadkeystonemiddleware-6779838a242b222672721407cc320672ab24067a.tar.gz
Skip the services with no endpoints when parsing service catalog
When parsing the service catalog to find the source, audit middleware should skip over the services which have no endpoints instead of assuming they will have at least one endpoint. Change-Id: I287873e99338d95baaf20d52ecb3a43763a401fc Closes-Bug: #1800017
Diffstat (limited to 'keystonemiddleware')
-rw-r--r--keystonemiddleware/audit/_api.py5
-rw-r--r--keystonemiddleware/tests/unit/audit/test_audit_api.py17
2 files changed, 22 insertions, 0 deletions
diff --git a/keystonemiddleware/audit/_api.py b/keystonemiddleware/audit/_api.py
index d05d732..e692151 100644
--- a/keystonemiddleware/audit/_api.py
+++ b/keystonemiddleware/audit/_api.py
@@ -261,6 +261,11 @@ class OpenStackAuditApi(object):
default_endpoint = None
for endp in catalog:
+ if not endp['endpoints']:
+ self._log.warning(
+ 'Skipping service %s as it have no endpoints.',
+ endp['name'])
+ continue
endpoint_urls = endp['endpoints'][0]
admin_urlparse = urlparse.urlparse(
endpoint_urls.get('adminURL', ''))
diff --git a/keystonemiddleware/tests/unit/audit/test_audit_api.py b/keystonemiddleware/tests/unit/audit/test_audit_api.py
index 367d7d0..1512e9d 100644
--- a/keystonemiddleware/tests/unit/audit/test_audit_api.py
+++ b/keystonemiddleware/tests/unit/audit/test_audit_api.py
@@ -303,6 +303,23 @@ class AuditApiLogicTest(base.BaseAuditMiddlewareTest):
payload = self.get_payload('GET', url, environ=env_headers)
self.assertEqual((payload['target']['addresses'][0]['url']), "unknown")
+ def test_service_with_no_endpoints(self):
+ env_headers = {'HTTP_X_SERVICE_CATALOG':
+ '''[{"endpoints_links": [],
+ "endpoints": [],
+ "type": "foo",
+ "name": "bar"}]''',
+ 'HTTP_X_USER_ID': 'user_id',
+ 'HTTP_X_USER_NAME': 'user_name',
+ 'HTTP_X_AUTH_TOKEN': 'token',
+ 'HTTP_X_PROJECT_ID': 'tenant_id',
+ 'HTTP_X_IDENTITY_STATUS': 'Confirmed',
+ 'REQUEST_METHOD': 'GET'}
+
+ url = 'http://public_host:8774/v2/' + str(uuid.uuid4()) + '/servers'
+ payload = self.get_payload('GET', url, environ=env_headers)
+ self.assertEqual(payload['target']['name'], "unknown")
+
def test_no_auth_token(self):
# Test cases where API requests such as Swift list public containers
# which does not require an auth token. In these cases, CADF event