Insert validation with request params for HTTP DELETE

When delete request is thrown with "request body", it returns 500.
This commit fixes the return code from 500 to 400(BadRequest).

Change-Id: Iadf1bc724f9bd1728d3f9d3c0da4f0675da97d30
Closes-Bug: #1519342
This commit is contained in:
Yushiro FURUKAWA 2015-12-03 21:19:14 +09:00
parent 4f4a40689d
commit fdecc62682
2 changed files with 14 additions and 2 deletions

View File

@ -526,6 +526,9 @@ class Controller(object):
def delete(self, request, id, **kwargs):
"""Deletes the specified entity."""
if request.body:
msg = _('Request body is not supported in DELETE.')
raise webob.exc.HTTPBadRequest(msg)
self._notifier.info(request.context,
self._resource + '.delete.start',
{self._resource + '_id': id})

View File

@ -216,11 +216,11 @@ class NeutronDbPluginV2TestCase(testlib_api.WebTestCase):
params=params, subresource=subresource)
def new_delete_request(self, resource, id, fmt=None, subresource=None,
sub_id=None):
sub_id=None, data=None):
return self._req(
'DELETE',
resource,
None,
data,
fmt,
id=id,
subresource=subresource,
@ -846,6 +846,15 @@ class TestV2HTTPResponse(NeutronDbPluginV2TestCase):
res = req.get_response(self.api)
self.assertEqual(webob.exc.HTTPNoContent.code, res.status_int)
def test_delete_with_req_body_returns_400(self):
res = self._create_network(self.fmt, 'net1', True)
net = self.deserialize(self.fmt, res)
data = {"network": {"id": net['network']['id']}}
req = self.new_delete_request('networks', net['network']['id'],
data=data)
res = req.get_response(self.api)
self.assertEqual(webob.exc.HTTPBadRequest.code, res.status_int)
def test_update_returns_200(self):
with self.network() as net:
req = self.new_update_request('networks',