Merge "Send 400 error if device specification contains unexpected attributes"
This commit is contained in:
commit
43d904ba93
@ -26,6 +26,7 @@ from quantum.api.v2 import base
|
||||
from quantum import manager
|
||||
from quantum import quota
|
||||
|
||||
|
||||
RESOURCE_NAME = "network-gateway"
|
||||
COLLECTION_NAME = "%ss" % RESOURCE_NAME
|
||||
EXT_ALIAS = RESOURCE_NAME
|
||||
@ -62,16 +63,21 @@ def _validate_device_list(data, valid_values=None):
|
||||
return msg
|
||||
try:
|
||||
for device in data:
|
||||
key_specs = {DEVICE_ID_ATTR:
|
||||
{'type:regex': attributes.UUID_PATTERN,
|
||||
'required': True},
|
||||
IFACE_NAME_ATTR:
|
||||
{'type:string': None,
|
||||
'required': False}}
|
||||
err_msg = attributes._validate_dict(
|
||||
device,
|
||||
key_specs={DEVICE_ID_ATTR:
|
||||
{'type:regex': attributes.UUID_PATTERN,
|
||||
'required': True},
|
||||
IFACE_NAME_ATTR:
|
||||
{'type:string': None,
|
||||
'required': False}})
|
||||
device, key_specs=key_specs)
|
||||
if err_msg:
|
||||
return err_msg
|
||||
unexpected_keys = [key for key in device if key not in key_specs]
|
||||
if unexpected_keys:
|
||||
err_msg = ("Unexpected keys found in device description:%s",
|
||||
",".join(unexpected_keys))
|
||||
return err_msg
|
||||
except TypeError:
|
||||
return (_("%s: provided data are not iterable") %
|
||||
_validate_device_list.__name__)
|
||||
|
@ -103,6 +103,27 @@ class NetworkGatewayExtensionTestCase(base.BaseTestCase):
|
||||
nw_gw = res.json[self._resource]
|
||||
self.assertEqual(nw_gw['id'], nw_gw_id)
|
||||
|
||||
def _test_network_gateway_create_with_error(
|
||||
self, data, error_code=exc.HTTPBadRequest.code):
|
||||
res = self.api.post_json(_get_path(networkgw.COLLECTION_NAME), data,
|
||||
expect_errors=True)
|
||||
self.assertEqual(res.status_int, error_code)
|
||||
|
||||
def test_network_gateway_create_invalid_device_spec(self):
|
||||
data = {self._resource: {'name': 'nw-gw',
|
||||
'tenant_id': _uuid(),
|
||||
'devices': [{'id': _uuid(),
|
||||
'invalid': 'xxx'}]}}
|
||||
self._test_network_gateway_create_with_error(data)
|
||||
|
||||
def test_network_gateway_create_extra_attr_in_device_spec(self):
|
||||
data = {self._resource: {'name': 'nw-gw',
|
||||
'tenant_id': _uuid(),
|
||||
'devices': [{'id': _uuid(),
|
||||
'interface_name': 'xxx',
|
||||
'extra_attr': 'onetoomany'}]}}
|
||||
self._test_network_gateway_create_with_error(data)
|
||||
|
||||
def test_network_gateway_update(self):
|
||||
nw_gw_name = 'updated'
|
||||
data = {self._resource: {'name': nw_gw_name}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user