diff --git a/neutron/api/v2/base.py b/neutron/api/v2/base.py index b1359b2930f..30c4c1c56db 100644 --- a/neutron/api/v2/base.py +++ b/neutron/api/v2/base.py @@ -536,6 +536,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}) diff --git a/neutron/tests/unit/db/test_db_base_plugin_v2.py b/neutron/tests/unit/db/test_db_base_plugin_v2.py index 89622966c39..c75aae30352 100644 --- a/neutron/tests/unit/db/test_db_base_plugin_v2.py +++ b/neutron/tests/unit/db/test_db_base_plugin_v2.py @@ -218,11 +218,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, @@ -866,6 +866,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',