Fix RequestContext crashes w/ no service catalog
Code introduced in a prev review assumed service_catalog will be at least an empty list and will never be None. But missed one code path where the service_catalog could potentially be set to None. So this change switches back the default value of service_catalog in the arguments to None and makes sure we tolerate anyone else passing in a None or Empty list as service_catalog Fix for LP# 1156730 Change-Id: I480b761d57c4699ea7ef72114160cdbeb281e454
This commit is contained in:
parent
85aebeb8b8
commit
4664d2294a
|
@ -47,7 +47,7 @@ class RequestContext(object):
|
|||
roles=None, remote_address=None, timestamp=None,
|
||||
request_id=None, auth_token=None, overwrite=True,
|
||||
quota_class=None, user_name=None, project_name=None,
|
||||
service_catalog=[], instance_lock_checked=False, **kwargs):
|
||||
service_catalog=None, instance_lock_checked=False, **kwargs):
|
||||
"""
|
||||
:param read_deleted: 'no' indicates deleted records are hidden, 'yes'
|
||||
indicates deleted records are visible, 'only' indicates that
|
||||
|
@ -77,9 +77,15 @@ class RequestContext(object):
|
|||
request_id = generate_request_id()
|
||||
self.request_id = request_id
|
||||
self.auth_token = auth_token
|
||||
# Only include required parts of service_catalog
|
||||
self.service_catalog = [s for s in service_catalog
|
||||
|
||||
if service_catalog:
|
||||
# Only include required parts of service_catalog
|
||||
self.service_catalog = [s for s in service_catalog
|
||||
if s.get('type') in ('volume')]
|
||||
else:
|
||||
# if list is empty or none
|
||||
self.service_catalog = []
|
||||
|
||||
self.instance_lock_checked = instance_lock_checked
|
||||
|
||||
# NOTE(markmc): this attribute is currently only used by the
|
||||
|
|
|
@ -79,6 +79,14 @@ class ContextTestCase(test.TestCase):
|
|||
ctxt = context.RequestContext('111', '222')
|
||||
self.assertEquals(ctxt.service_catalog, [])
|
||||
|
||||
ctxt = context.RequestContext('111', '222',
|
||||
service_catalog=[])
|
||||
self.assertEquals(ctxt.service_catalog, [])
|
||||
|
||||
ctxt = context.RequestContext('111', '222',
|
||||
service_catalog=None)
|
||||
self.assertEquals(ctxt.service_catalog, [])
|
||||
|
||||
def test_service_catalog_cinder_only(self):
|
||||
service_catalog = [
|
||||
{u'type': u'compute', u'name': u'nova'},
|
||||
|
|
Loading…
Reference in New Issue