From: Salvatore Orlando Date: Tue, 13 Mar 2012 16:58:19 +0000 (+0000) Subject: Fix for bug 921743 X-Git-Url: https://review.fuel-infra.org/gitweb?a=commitdiff_plain;h=fa0e7e617e49f190e6ed33caafb853f7b9f5aa42;p=openstack-build%2Fneutron-build.git Fix for bug 921743 Response codes for create ops in API v1.0 not compliant with spec Change-Id: I7723e46b05ffd7b29940327b9c7362f843e01817 --- diff --git a/quantum/api/api_common.py b/quantum/api/api_common.py index 82adc09cb..07bfb89eb 100644 --- a/quantum/api/api_common.py +++ b/quantum/api/api_common.py @@ -62,7 +62,10 @@ def create_resource(version, controller_dict): # and also the function for building the fault body fault_body_function = faults.fault_body_function(version) - headers_serializer = HeaderSerializer() + headers_serializers = { + '1.0': HeaderSerializer10(), + '1.1': HeaderSerializer11() + } xml_serializer = wsgi.XMLDictSerializer(metadata, xmlns) json_serializer = wsgi.JSONDictSerializer() xml_deserializer = wsgi.XMLDeserializer(metadata) @@ -78,7 +81,8 @@ def create_resource(version, controller_dict): 'application/json': json_deserializer, } - serializer = wsgi.ResponseSerializer(body_serializers, headers_serializer) + serializer = wsgi.ResponseSerializer(body_serializers, + headers_serializers[version]) deserializer = wsgi.RequestDeserializer(body_deserializers) return wsgi.Resource(controller, @@ -116,10 +120,10 @@ def APIFaultWrapper(errors=None): return wrapper -class HeaderSerializer(wsgi.ResponseHeaderSerializer): +class HeaderSerializer10(wsgi.ResponseHeaderSerializer): """ - Defines default respone status codes for Quantum API operations - create - 202 ACCEPTED + Defines default respone status codes for Quantum API 1.0 operations + create - 200 OK update - 204 NOCONTENT delete - 204 NOCONTENT others - 200 OK (defined in base class) @@ -127,7 +131,7 @@ class HeaderSerializer(wsgi.ResponseHeaderSerializer): """ def create(self, response, data): - response.status_int = 202 + response.status_int = 200 def delete(self, response, data): response.status_int = 204 @@ -142,6 +146,20 @@ class HeaderSerializer(wsgi.ResponseHeaderSerializer): response.status_int = 204 +class HeaderSerializer11(HeaderSerializer10): + """ + Defines default respone status codes for Quantum API 1.0 operations + create - 202 ACCEPTED + update - 204 NOCONTENT + delete - 204 NOCONTENT + others - 200 OK (defined in base class) + + """ + + def create(self, response, data): + response.status_int = 202 + + class QuantumController(object): """ Base controller class for Quantum API """ diff --git a/quantum/tests/unit/_test_api.py b/quantum/tests/unit/_test_api.py index f4011129a..73a417dba 100644 --- a/quantum/tests/unit/_test_api.py +++ b/quantum/tests/unit/_test_api.py @@ -53,7 +53,7 @@ class AbstractAPITest(unittest.TestCase): return port_data def _create_network(self, fmt, name=None, custom_req_body=None, - expected_res_status=202): + expected_res_status=None): LOG.debug("Creating network") content_type = "application/" + fmt if name: @@ -64,20 +64,24 @@ class AbstractAPITest(unittest.TestCase): net_name, fmt, custom_req_body) network_res = network_req.get_response(self.api) + expected_res_status = expected_res_status or \ + self._successful_create_code self.assertEqual(network_res.status_int, expected_res_status) if expected_res_status in (200, 202): network_data = self._deserialize_net_response(content_type, network_res) return network_data['network']['id'] - def _create_port(self, network_id, port_state, fmt, - custom_req_body=None, expected_res_status=202): + def _create_port(self, network_id, port_state, fmt, custom_req_body=None, + expected_res_status=None): LOG.debug("Creating port for network %s", network_id) content_type = "application/%s" % fmt port_req = testlib.new_port_request(self.tenant_id, network_id, port_state, fmt, custom_req_body) port_res = port_req.get_response(self.api) + expected_res_status = expected_res_status or \ + self._successful_create_code self.assertEqual(port_res.status_int, expected_res_status) if expected_res_status in (200, 202): port_data = self._deserialize_port_response(content_type, diff --git a/quantum/tests/unit/test_api.py b/quantum/tests/unit/test_api.py index ca6c50e4e..ea49ae0e6 100644 --- a/quantum/tests/unit/test_api.py +++ b/quantum/tests/unit/test_api.py @@ -61,6 +61,7 @@ class APITestV10(test_api.BaseAPIOperationsTest): {test_api.NETS: nets.ControllerV10._serialization_metadata, test_api.PORTS: ports.ControllerV10._serialization_metadata, test_api.ATTS: atts.ControllerV10._serialization_metadata}) + self._successful_create_code = exc.HTTPOk.code self._network_not_found_code = 420 self._network_in_use_code = 421 self._port_not_found_code = 430 @@ -107,6 +108,7 @@ class APITestV11(test_api.BaseAPIOperationsTest): {test_api.NETS: nets.ControllerV11._serialization_metadata, test_api.PORTS: ports.ControllerV11._serialization_metadata, test_api.ATTS: atts.ControllerV11._serialization_metadata}) + self._successful_create_code = exc.HTTPAccepted.code self._network_not_found_code = exc.HTTPNotFound.code self._network_in_use_code = exc.HTTPConflict.code self._port_not_found_code = exc.HTTPNotFound.code @@ -146,6 +148,7 @@ class APIFiltersTest(test_api.AbstractAPITest): {test_api.NETS: nets.ControllerV11._serialization_metadata, test_api.PORTS: ports.ControllerV11._serialization_metadata, test_api.ATTS: atts.ControllerV11._serialization_metadata}) + self._successful_create_code = exc.HTTPAccepted.code self.net_op_status = test_config.get('default_net_op_status', 'UNKNOWN') self.port_op_status = test_config.get('default_port_op_status',