diff --git a/doc/v3/api_samples/os-deferred-delete/force-delete-post-req.json b/doc/v3/api_samples/os-deferred-delete/force-delete-post-req.json index e1a585a698e6..d3562d390db6 100644 --- a/doc/v3/api_samples/os-deferred-delete/force-delete-post-req.json +++ b/doc/v3/api_samples/os-deferred-delete/force-delete-post-req.json @@ -1,3 +1,3 @@ { - "force_delete": null -} \ No newline at end of file + "forceDelete": null +} diff --git a/nova/api/openstack/compute/plugins/v3/deferred_delete.py b/nova/api/openstack/compute/plugins/v3/deferred_delete.py index 416ebd1625b8..9a53f88325a9 100644 --- a/nova/api/openstack/compute/plugins/v3/deferred_delete.py +++ b/nova/api/openstack/compute/plugins/v3/deferred_delete.py @@ -51,7 +51,7 @@ class DeferredDeleteController(wsgi.Controller): return webob.Response(status_int=202) @extensions.expected_errors((404, 409)) - @wsgi.action('force_delete') + @wsgi.action('forceDelete') def _force_delete(self, req, id, body): """Force delete of instance before deferred cleanup.""" context = req.environ["nova.context"] @@ -62,7 +62,7 @@ class DeferredDeleteController(wsgi.Controller): self.compute_api.force_delete(context, instance) except exception.InstanceInvalidState as state_error: common.raise_http_conflict_for_instance_invalid_state(state_error, - 'force_delete') + 'forceDelete') return webob.Response(status_int=202) diff --git a/nova/tests/api/openstack/compute/contrib/test_deferred_delete.py b/nova/tests/api/openstack/compute/contrib/test_deferred_delete.py index 8ce0a199be0b..b8dbac8ace92 100644 --- a/nova/tests/api/openstack/compute/contrib/test_deferred_delete.py +++ b/nova/tests/api/openstack/compute/contrib/test_deferred_delete.py @@ -16,6 +16,7 @@ import webob from nova.api.openstack.compute.contrib import deferred_delete +from nova.api.openstack.compute.plugins.v3 import deferred_delete as dd_v21 from nova.compute import api as compute_api from nova import context from nova import exception @@ -27,14 +28,16 @@ class FakeRequest(object): self.environ = {'nova.context': context} -class DeferredDeleteExtensionTest(test.NoDBTestCase): +class DeferredDeleteExtensionTestV21(test.NoDBTestCase): + ext_ver = dd_v21.DeferredDeleteController + def setUp(self): - super(DeferredDeleteExtensionTest, self).setUp() - self.extension = deferred_delete.DeferredDeleteController() + super(DeferredDeleteExtensionTestV21, self).setUp() self.fake_input_dict = {} self.fake_uuid = 'fake_uuid' self.fake_context = context.RequestContext('fake', 'fake') self.fake_req = FakeRequest(self.fake_context) + self.extension = self.ext_ver() def test_force_delete(self): self.mox.StubOutWithMock(compute_api.API, 'get') @@ -105,6 +108,18 @@ class DeferredDeleteExtensionTest(test.NoDBTestCase): self.fake_input_dict) self.assertEqual(res.status_int, 202) + def test_restore_instance_not_found(self): + self.mox.StubOutWithMock(compute_api.API, 'get') + + compute_api.API.get(self.fake_context, self.fake_uuid, + expected_attrs=None, want_objects=True).AndRaise( + exception.InstanceNotFound(instance_id='instance-0000')) + + self.mox.ReplayAll() + self.assertRaises(webob.exc.HTTPNotFound, self.extension._restore, + self.fake_req, self.fake_uuid, + self.fake_input_dict) + def test_restore_raises_conflict_on_invalid_state(self): self.mox.StubOutWithMock(compute_api.API, 'get') self.mox.StubOutWithMock(compute_api.API, 'restore') @@ -123,3 +138,7 @@ class DeferredDeleteExtensionTest(test.NoDBTestCase): self.mox.ReplayAll() self.assertRaises(webob.exc.HTTPConflict, self.extension._restore, self.fake_req, self.fake_uuid, self.fake_input_dict) + + +class DeferredDeleteExtensionTestV2(DeferredDeleteExtensionTestV21): + ext_ver = deferred_delete.DeferredDeleteController diff --git a/nova/tests/api/openstack/compute/plugins/v3/test_deferred_delete.py b/nova/tests/api/openstack/compute/plugins/v3/test_deferred_delete.py deleted file mode 100644 index c4ccaa47217d..000000000000 --- a/nova/tests/api/openstack/compute/plugins/v3/test_deferred_delete.py +++ /dev/null @@ -1,136 +0,0 @@ -# Copyright 2011 OpenStack Foundation -# All Rights Reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -import webob - -from nova.api.openstack.compute.plugins.v3 import deferred_delete -from nova.compute import api as compute_api -from nova import context -from nova import exception -from nova import test - - -class FakeRequest(object): - def __init__(self, context): - self.environ = {'nova.context': context} - - -class DeferredDeleteExtensionTest(test.NoDBTestCase): - def setUp(self): - super(DeferredDeleteExtensionTest, self).setUp() - self.extension = deferred_delete.DeferredDeleteController() - self.fake_input_dict = {} - self.fake_uuid = 'fake_uuid' - self.fake_context = context.RequestContext('fake', 'fake') - self.fake_req = FakeRequest(self.fake_context) - - def test_force_delete(self): - self.mox.StubOutWithMock(compute_api.API, 'get') - self.mox.StubOutWithMock(compute_api.API, 'force_delete') - - fake_instance = 'fake_instance' - - compute_api.API.get(self.fake_context, self.fake_uuid, - expected_attrs=None, want_objects=True).AndReturn( - fake_instance) - compute_api.API.force_delete(self.fake_context, fake_instance) - - self.mox.ReplayAll() - res = self.extension._force_delete(self.fake_req, self.fake_uuid, - self.fake_input_dict) - self.assertEqual(res.status_int, 202) - - def test_force_delete_instance_not_found(self): - self.mox.StubOutWithMock(compute_api.API, 'get') - - compute_api.API.get(self.fake_context, self.fake_uuid, - expected_attrs=None, want_objects=True).AndRaise( - exception.InstanceNotFound(instance_id='instance-0000')) - - self.mox.ReplayAll() - self.assertRaises(webob.exc.HTTPNotFound, - self.extension._force_delete, - self.fake_req, - self.fake_uuid, - self.fake_input_dict) - - def test_force_delete_raises_conflict_on_invalid_state(self): - self.mox.StubOutWithMock(compute_api.API, 'get') - self.mox.StubOutWithMock(compute_api.API, 'force_delete') - - fake_instance = 'fake_instance' - - compute_api.API.get(self.fake_context, self.fake_uuid, - expected_attrs=None, want_objects=True).AndReturn( - fake_instance) - - exc = exception.InstanceInvalidState(attr='fake_attr', - state='fake_state', method='fake_method', - instance_uuid='fake') - - compute_api.API.force_delete(self.fake_context, fake_instance)\ - .AndRaise(exc) - - self.mox.ReplayAll() - self.assertRaises(webob.exc.HTTPConflict, - self.extension._force_delete, self.fake_req, self.fake_uuid, - self.fake_input_dict) - - def test_restore(self): - self.mox.StubOutWithMock(compute_api.API, 'get') - self.mox.StubOutWithMock(compute_api.API, 'restore') - - fake_instance = 'fake_instance' - - compute_api.API.get(self.fake_context, self.fake_uuid, - expected_attrs=None, want_objects=True).AndReturn( - fake_instance) - compute_api.API.restore(self.fake_context, fake_instance) - - self.mox.ReplayAll() - res = self.extension._restore(self.fake_req, self.fake_uuid, - self.fake_input_dict) - self.assertEqual(res.status_int, 202) - - def test_restore_instance_not_found(self): - self.mox.StubOutWithMock(compute_api.API, 'get') - - compute_api.API.get(self.fake_context, self.fake_uuid, - expected_attrs=None, want_objects=True).AndRaise( - exception.InstanceNotFound(instance_id='instance-0000')) - - self.mox.ReplayAll() - self.assertRaises(webob.exc.HTTPNotFound, self.extension._restore, - self.fake_req, self.fake_uuid, - self.fake_input_dict) - - def test_restore_raises_conflict_on_invalid_state(self): - self.mox.StubOutWithMock(compute_api.API, 'get') - self.mox.StubOutWithMock(compute_api.API, 'restore') - - fake_instance = 'fake_instance' - exc = exception.InstanceInvalidState(attr='fake_attr', - state='fake_state', method='fake_method', - instance_uuid='fake') - - compute_api.API.get(self.fake_context, self.fake_uuid, - expected_attrs=None, want_objects=True).AndReturn( - fake_instance) - compute_api.API.restore(self.fake_context, fake_instance).AndRaise( - exc) - - self.mox.ReplayAll() - self.assertRaises(webob.exc.HTTPConflict, self.extension._restore, - self.fake_req, self.fake_uuid, self.fake_input_dict) diff --git a/nova/tests/integrated/test_servers.py b/nova/tests/integrated/test_servers.py index 6142e045e314..53533e183103 100644 --- a/nova/tests/integrated/test_servers.py +++ b/nova/tests/integrated/test_servers.py @@ -510,7 +510,7 @@ class ServersTest(integrated_helpers._IntegratedTestBase): class ServersTestV3(client.TestOpenStackClientV3Mixin, ServersTest): - _force_delete_parameter = 'force_delete' + _force_delete_parameter = 'forceDelete' _api_version = 'v3' _image_ref_parameter = 'imageRef' _flavor_ref_parameter = 'flavorRef' diff --git a/nova/tests/integrated/v3/api_samples/os-deferred-delete/force-delete-post-req.json.tpl b/nova/tests/integrated/v3/api_samples/os-deferred-delete/force-delete-post-req.json.tpl index efe867880885..d3562d390db6 100644 --- a/nova/tests/integrated/v3/api_samples/os-deferred-delete/force-delete-post-req.json.tpl +++ b/nova/tests/integrated/v3/api_samples/os-deferred-delete/force-delete-post-req.json.tpl @@ -1,3 +1,3 @@ { - "force_delete": null + "forceDelete": null }