From 1f8511d8b09c5199a57588e8312a46441fbcd7a6 Mon Sep 17 00:00:00 2001 From: wangxiyuan Date: Tue, 13 Oct 2015 12:13:29 +0800 Subject: [PATCH] Catch InvalidImageStatusTransition error Now, when delete image to unallowed status, it will raise a 500 error. So we should catch that error to avoid it. Change-Id: I47f777a81a6069793dfa4d52eace79edb266669d Closes-bug: #1505474 --- glance/api/v2/images.py | 2 ++ glance/tests/unit/v2/test_images_resource.py | 15 +++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/glance/api/v2/images.py b/glance/api/v2/images.py index d7f3792bdc..17678f29fc 100644 --- a/glance/api/v2/images.py +++ b/glance/api/v2/images.py @@ -250,6 +250,8 @@ class ImagesController(object): "exc": e.msg}) LOG.warn(msg) raise webob.exc.HTTPConflict(explanation=msg) + except exception.InvalidImageStatusTransition as e: + raise webob.exc.HTTPBadRequest(explanation=e.msg) except exception.NotAuthenticated as e: raise webob.exc.HTTPUnauthorized(explanation=e.msg) diff --git a/glance/tests/unit/v2/test_images_resource.py b/glance/tests/unit/v2/test_images_resource.py index bf7e28258d..8465f1ba70 100644 --- a/glance/tests/unit/v2/test_images_resource.py +++ b/glance/tests/unit/v2/test_images_resource.py @@ -26,6 +26,7 @@ from six.moves import range import testtools import webob +import glance.api.v2.image_actions import glance.api.v2.images from glance.common import exception from glance import domain @@ -129,6 +130,11 @@ class TestImagesController(base.IsolatedUnitTest): self.policy, self.notifier, self.store) + self.action_controller = (glance.api.v2.image_actions. + ImageActionsController(self.db, + self.policy, + self.notifier, + self.store)) self.controller.gateway.store_utils = self.store_utils store.create_stores() @@ -2017,6 +2023,15 @@ class TestImagesController(base.IsolatedUnitTest): self.assertRaises(webob.exc.HTTPConflict, self.controller.delete, request, UUID1) + def test_delete_to_unallowed_status(self): + # from deactivated to pending-delete + self.config(delayed_delete=True) + request = unit_test_utils.get_fake_request(is_admin=True) + self.action_controller.deactivate(request, UUID1) + + self.assertRaises(webob.exc.HTTPBadRequest, self.controller.delete, + request, UUID1) + def test_index_with_invalid_marker(self): fake_uuid = str(uuid.uuid4()) request = unit_test_utils.get_fake_request()