Validate dscp value less that 64
Previously neutron would raise a 500 error if the dscp value was greater than 63. This patch adds validation to neutron so that a clear error message is returned if the value is greater than 63. Fixes bug 1200026 Change-Id: I41a93661952669d112463608be907eede1901490
This commit is contained in:
parent
58424dd616
commit
b51738b310
@ -43,7 +43,8 @@ class DefaultQueueAlreadyExists(qexception.InUse):
|
|||||||
|
|
||||||
|
|
||||||
class QueueInvalidDscp(qexception.InvalidInput):
|
class QueueInvalidDscp(qexception.InvalidInput):
|
||||||
message = _("Invalid value for dscp %(data)s must be integer.")
|
message = _("Invalid value for dscp %(data)s must be integer value"
|
||||||
|
"between 0 and 63.")
|
||||||
|
|
||||||
|
|
||||||
class QueueMinGreaterMax(qexception.InvalidInput):
|
class QueueMinGreaterMax(qexception.InvalidInput):
|
||||||
@ -83,6 +84,13 @@ def convert_to_unsigned_int_or_none(val):
|
|||||||
raise qexception.InvalidInput(error_message=msg)
|
raise qexception.InvalidInput(error_message=msg)
|
||||||
return val
|
return val
|
||||||
|
|
||||||
|
|
||||||
|
def convert_to_unsigned_int_or_none_max_63(val):
|
||||||
|
val = convert_to_unsigned_int_or_none(val)
|
||||||
|
if val > 63:
|
||||||
|
raise QueueInvalidDscp(data=val)
|
||||||
|
return val
|
||||||
|
|
||||||
# Attribute Map
|
# Attribute Map
|
||||||
RESOURCE_ATTRIBUTE_MAP = {
|
RESOURCE_ATTRIBUTE_MAP = {
|
||||||
'qos_queues': {
|
'qos_queues': {
|
||||||
@ -105,7 +113,7 @@ RESOURCE_ATTRIBUTE_MAP = {
|
|||||||
'default': 'untrusted', 'is_visible': True},
|
'default': 'untrusted', 'is_visible': True},
|
||||||
'dscp': {'allow_post': True, 'allow_put': False,
|
'dscp': {'allow_post': True, 'allow_put': False,
|
||||||
'is_visible': True, 'default': '0',
|
'is_visible': True, 'default': '0',
|
||||||
'convert_to': convert_to_unsigned_int_or_none},
|
'convert_to': convert_to_unsigned_int_or_none_max_63},
|
||||||
'tenant_id': {'allow_post': True, 'allow_put': False,
|
'tenant_id': {'allow_post': True, 'allow_put': False,
|
||||||
'required_by_policy': True,
|
'required_by_policy': True,
|
||||||
'validate': {'type:string': None},
|
'validate': {'type:string': None},
|
||||||
|
@ -777,6 +777,12 @@ class TestNiciraQoSQueue(NiciraPluginV2TestCase):
|
|||||||
port = self.deserialize('json', res)
|
port = self.deserialize('json', res)
|
||||||
self.assertEqual(ext_qos.QUEUE not in port['port'], True)
|
self.assertEqual(ext_qos.QUEUE not in port['port'], True)
|
||||||
|
|
||||||
|
def test_dscp_value_out_of_range(self):
|
||||||
|
body = {'qos_queue': {'tenant_id': 'admin', 'dscp': '64',
|
||||||
|
'name': 'foo', 'min': 20, 'max': 20}}
|
||||||
|
res = self._create_qos_queue('json', body)
|
||||||
|
self.assertEqual(res.status_int, 400)
|
||||||
|
|
||||||
def test_non_admin_cannot_create_queue(self):
|
def test_non_admin_cannot_create_queue(self):
|
||||||
body = {'qos_queue': {'tenant_id': 'not_admin',
|
body = {'qos_queue': {'tenant_id': 'not_admin',
|
||||||
'name': 'foo', 'min': 20, 'max': 20}}
|
'name': 'foo', 'min': 20, 'max': 20}}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user