Allow registered limit's region_id to be None
Region_id in registered limit is optional, so we should allow updating its region_id to None as well. Closes-bug: #1798716 Change-Id: Ia59950376e958aaa19973d3bc97180727f5e5326
This commit is contained in:
parent
c1e57e57cc
commit
8e9de8a515
|
@ -212,7 +212,7 @@ class UnifiedLimit(base.UnifiedLimitDriverBase):
|
|||
old_dict = ref.to_dict()
|
||||
old_dict.update(registered_limit)
|
||||
if (registered_limit.get('service_id') or
|
||||
registered_limit.get('region_id') or
|
||||
'region_id' in registered_limit or
|
||||
registered_limit.get('resource_name')):
|
||||
self._check_unified_limit_unique(old_dict)
|
||||
new_registered_limit = RegisteredLimitModel.from_dict(
|
||||
|
|
|
@ -18,7 +18,7 @@ from keystone.common.validation import parameter_types
|
|||
_registered_limit_properties = {
|
||||
'service_id': parameter_types.id_string,
|
||||
'region_id': {
|
||||
'type': 'string'
|
||||
'type': ['null', 'string']
|
||||
},
|
||||
'resource_name': {
|
||||
'type': 'string'
|
||||
|
|
|
@ -280,6 +280,54 @@ class RegisteredLimitsTestCase(test_v3.RestfulTestCase):
|
|||
new_registered_limits = r.result['registered_limit']
|
||||
self.assertEqual(new_registered_limits['description'], '')
|
||||
|
||||
def test_update_registered_limit_region_id_to_none(self):
|
||||
ref = unit.new_registered_limit_ref(service_id=self.service_id,
|
||||
region_id=self.region_id,
|
||||
resource_name='volume',
|
||||
default_limit=10)
|
||||
r = self.post(
|
||||
'/registered_limits',
|
||||
body={'registered_limits': [ref]},
|
||||
expected_status=http_client.CREATED)
|
||||
update_ref = {
|
||||
'region_id': None
|
||||
}
|
||||
registered_limit_id = r.result['registered_limits'][0]['id']
|
||||
r = self.patch(
|
||||
'/registered_limits/%s' % registered_limit_id,
|
||||
body={'registered_limit': update_ref},
|
||||
expected_status=http_client.OK)
|
||||
self.assertIsNone(r.result['registered_limit']['region_id'])
|
||||
|
||||
def test_update_registered_limit_region_id_to_none_conflict(self):
|
||||
ref1 = unit.new_registered_limit_ref(service_id=self.service_id,
|
||||
resource_name='volume',
|
||||
default_limit=10)
|
||||
ref2 = unit.new_registered_limit_ref(service_id=self.service_id,
|
||||
region_id=self.region_id,
|
||||
resource_name='volume',
|
||||
default_limit=10)
|
||||
self.post(
|
||||
'/registered_limits',
|
||||
body={'registered_limits': [ref1]},
|
||||
expected_status=http_client.CREATED)
|
||||
r = self.post(
|
||||
'/registered_limits',
|
||||
body={'registered_limits': [ref2]},
|
||||
expected_status=http_client.CREATED)
|
||||
|
||||
update_ref = {
|
||||
'region_id': None
|
||||
}
|
||||
registered_limit_id = r.result['registered_limits'][0]['id']
|
||||
# There is a registered limit with "service_id=self.service_id,
|
||||
# region_id=None" already. So update ref2's region_id to None will
|
||||
# raise 409 Conflict Error.
|
||||
self.patch(
|
||||
'/registered_limits/%s' % registered_limit_id,
|
||||
body={'registered_limit': update_ref},
|
||||
expected_status=http_client.CONFLICT)
|
||||
|
||||
def test_update_registered_limit_not_found(self):
|
||||
update_ref = {
|
||||
'service_id': self.service_id,
|
||||
|
|
Loading…
Reference in New Issue