diff options
| author | Brian Waldon <brian.waldon@rackspace.com> | 2011-07-11 19:31:40 +0000 |
|---|---|---|
| committer | Tarmac <> | 2011-07-11 19:31:40 +0000 |
| commit | 92b0b614b1077bfc44bed0bd5d6e9e68d41c4f36 (patch) | |
| tree | 96349a78a121d228f1a94e6dcc7fe957c90b6da5 | |
| parent | 11be49aa59efc2d0d991d70546899b3625270af6 (diff) | |
| parent | 2aacfcbef233113ce25c52f1504bde9dd49f758e (diff) | |
| download | nova-92b0b614b1077bfc44bed0bd5d6e9e68d41c4f36.tar.gz nova-92b0b614b1077bfc44bed0bd5d6e9e68d41c4f36.tar.xz nova-92b0b614b1077bfc44bed0bd5d6e9e68d41c4f36.zip | |
Set the proper return code for server delete requests
| -rw-r--r-- | nova/api/openstack/servers.py | 37 | ||||
| -rw-r--r-- | nova/tests/api/openstack/test_servers.py | 16 | ||||
| -rw-r--r-- | nova/tests/integrated/api/client.py | 2 |
3 files changed, 44 insertions, 11 deletions
diff --git a/nova/api/openstack/servers.py b/nova/api/openstack/servers.py index 206a69265..12af44a8d 100644 --- a/nova/api/openstack/servers.py +++ b/nova/api/openstack/servers.py @@ -104,15 +104,6 @@ class Controller(object): except exception.NotFound: return faults.Fault(exc.HTTPNotFound()) - @scheduler_api.redirect_handler - def delete(self, req, id): - """ Destroys a server """ - try: - self.compute_api.delete(req.environ['nova.context'], id) - except exception.NotFound: - return faults.Fault(exc.HTTPNotFound()) - return exc.HTTPAccepted() - def create(self, req, body): """ Creates a new server for a given user """ extra_values = None @@ -420,6 +411,15 @@ class Controller(object): class ControllerV10(Controller): + @scheduler_api.redirect_handler + def delete(self, req, id): + """ Destroys a server """ + try: + self.compute_api.delete(req.environ['nova.context'], id) + except exception.NotFound: + return faults.Fault(exc.HTTPNotFound()) + return exc.HTTPAccepted() + def _image_ref_from_req_data(self, data): return data['server']['imageId'] @@ -482,6 +482,15 @@ class ControllerV10(Controller): class ControllerV11(Controller): + + @scheduler_api.redirect_handler + def delete(self, req, id): + """ Destroys a server """ + try: + self.compute_api.delete(req.environ['nova.context'], id) + except exception.NotFound: + return faults.Fault(exc.HTTPNotFound()) + def _image_ref_from_req_data(self, data): return data['server']['imageRef'] @@ -597,6 +606,12 @@ class ControllerV11(Controller): return self.helper._get_server_admin_password_new_style(server) +class HeadersSerializer(wsgi.ResponseHeadersSerializer): + + def delete(self, response, data): + response.status_int = 204 + + def create_resource(version='1.0'): controller = { '1.0': ControllerV10, @@ -624,6 +639,8 @@ def create_resource(version='1.0'): '1.1': wsgi.XMLNS_V11, }[version] + headers_serializer = HeadersSerializer() + body_serializers = { 'application/xml': wsgi.XMLDictSerializer(metadata=metadata, xmlns=xmlns), @@ -633,7 +650,7 @@ def create_resource(version='1.0'): 'application/xml': helper.ServerXMLDeserializer(), } - serializer = wsgi.ResponseSerializer(body_serializers) + serializer = wsgi.ResponseSerializer(body_serializers, headers_serializer) deserializer = wsgi.RequestDeserializer(body_deserializers) return wsgi.Resource(controller, deserializer, serializer) diff --git a/nova/tests/api/openstack/test_servers.py b/nova/tests/api/openstack/test_servers.py index b6b5a1e76..8e82a7edc 100644 --- a/nova/tests/api/openstack/test_servers.py +++ b/nova/tests/api/openstack/test_servers.py @@ -1433,6 +1433,22 @@ class ServersTest(test.TestCase): self.assertEqual(res.status, '202 Accepted') self.assertEqual(self.server_delete_called, True) + def test_delete_server_instance_v1_1(self): + req = webob.Request.blank('/v1.1/servers/1') + req.method = 'DELETE' + + self.server_delete_called = False + + def instance_destroy_mock(context, id): + self.server_delete_called = True + + self.stubs.Set(nova.db.api, 'instance_destroy', + instance_destroy_mock) + + res = req.get_response(fakes.wsgi_app()) + self.assertEqual(res.status_int, 204) + self.assertEqual(self.server_delete_called, True) + def test_resize_server(self): req = self.webreq('/1/action', 'POST', dict(resize=dict(flavorId=3))) diff --git a/nova/tests/integrated/api/client.py b/nova/tests/integrated/api/client.py index 3d255b40c..59cc3b564 100644 --- a/nova/tests/integrated/api/client.py +++ b/nova/tests/integrated/api/client.py @@ -174,7 +174,7 @@ class TestOpenStackClient(object): def api_delete(self, relative_uri, **kwargs): kwargs['method'] = 'DELETE' - kwargs.setdefault('check_response_status', [200, 202]) + kwargs.setdefault('check_response_status', [200, 202, 204]) return self.api_request(relative_uri, **kwargs) def get_server(self, server_id): |
