]> xenbits.xensource.com Git - osstest/openstack-nova.git/commitdiff
Add handle for 2 exceptions in force_delete
authorjichenjc <jichenjc@cn.ibm.com>
Mon, 14 Nov 2016 18:38:39 +0000 (02:38 +0800)
committerjichenjc <jichenjc@cn.ibm.com>
Thu, 17 Nov 2016 03:35:35 +0000 (11:35 +0800)
as force_delete is same to delete action, we need handle
InstanceNotFound and InstanceCellUnknown exception.

Change-Id: I1840f8f4ac1b793fd6348b4d056cb94e1333e596
Related-Bug: 1641523

nova/api/openstack/compute/deferred_delete.py
nova/tests/unit/api/openstack/compute/test_deferred_delete.py

index a02da3b963161645eba0de56b1abb745998d64a5..e8743fc625b64e2822bd1efb9e594c5037ecfb39 100644 (file)
@@ -62,6 +62,10 @@ class DeferredDeleteController(wsgi.Controller):
                             'project_id': instance.project_id})
         try:
             self.compute_api.force_delete(context, instance)
+        except exception.InstanceNotFound as e:
+            raise webob.exc.HTTPNotFound(explanation=e.format_message())
+        except exception.InstanceUnknownCell as e:
+            raise webob.exc.HTTPNotFound(explanation=e.format_message())
         except exception.InstanceIsLocked as e:
             raise webob.exc.HTTPConflict(explanation=e.format_message())
 
index 8b39405103ee6cd38befe383ca36ab233542d30a..243fe5f2d384710d2c41c73d6142876aaa26eb74 100644 (file)
@@ -88,6 +88,31 @@ class DeferredDeleteExtensionTestV21(test.NoDBTestCase):
                             req, 'fake_uuid', '')
         self.assertIn('Instance fake_uuid is locked', ex.explanation)
 
+    @mock.patch.object(compute_api.API, 'get')
+    @mock.patch.object(compute_api.API, 'force_delete',
+                side_effect=exception.InstanceNotFound(
+                    instance_id='fake_uuid'))
+    def test_force_delete_instance_notfound(self, mock_force_delete, mock_get):
+        req = fakes.HTTPRequest.blank('/v2/fake/servers/fake_uuid/action')
+        ex = self.assertRaises(webob.exc.HTTPNotFound,
+                            self.extension._force_delete,
+                            req, 'fake_uuid', '')
+        self.assertIn('Instance fake_uuid could not be found',
+                      ex.explanation)
+
+    @mock.patch.object(compute_api.API, 'get')
+    @mock.patch.object(compute_api.API, 'force_delete',
+                side_effect=exception.InstanceUnknownCell(
+                    instance_uuid='fake_uuid'))
+    def test_force_delete_instance_cellunknown(self, mock_force_delete,
+                                               mock_get):
+        req = fakes.HTTPRequest.blank('/v2/fake/servers/fake_uuid/action')
+        ex = self.assertRaises(webob.exc.HTTPNotFound,
+                            self.extension._force_delete,
+                            req, 'fake_uuid', '')
+        self.assertIn('Cell is not known for instance fake_uuid',
+                      ex.explanation)
+
     def test_restore(self):
         self.mox.StubOutWithMock(compute_api.API, 'get')
         self.mox.StubOutWithMock(compute_api.API, 'restore')