summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Yeoh <cyeoh@au1.ibm.com>2014-08-12 11:03:05 +0930
committerChris Yeoh <cyeoh@au1.ibm.com>2014-08-22 14:23:12 +0930
commit2c8685b07f836b75fb7ce591682927f20fb6bf7b (patch)
treedbc97eae961682662848ee0ebc3c8ad19d7b0847
parent6f2b36815eaa67fe31015c575640b47145666e4d (diff)
downloadnova-2c8685b07f836b75fb7ce591682927f20fb6bf7b.tar.gz
Convert deferred_delete v3 plugin to v2.1 API
Changes required to have v3 plugin natively support the V2.1 API The force_delete action is reverted back to forceDelete Partially implements blueprint v2-on-v3-api Change-Id: I0b050d3328338923cf05521b9ef5cc3b1c50a586
-rw-r--r--doc/v3/api_samples/os-deferred-delete/force-delete-post-req.json4
-rw-r--r--nova/api/openstack/compute/plugins/v3/deferred_delete.py4
-rw-r--r--nova/tests/api/openstack/compute/contrib/test_deferred_delete.py25
-rw-r--r--nova/tests/api/openstack/compute/plugins/v3/test_deferred_delete.py136
-rw-r--r--nova/tests/integrated/test_servers.py2
-rw-r--r--nova/tests/integrated/v3/api_samples/os-deferred-delete/force-delete-post-req.json.tpl2
6 files changed, 28 insertions, 145 deletions
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 e1a585a698..d3562d390d 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 f3e30afedc..9dbd75a8f1 100644
--- a/nova/api/openstack/compute/plugins/v3/deferred_delete.py
+++ b/nova/api/openstack/compute/plugins/v3/deferred_delete.py
@@ -53,7 +53,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"]
@@ -64,7 +64,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 8ce0a199be..b8dbac8ace 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 c4ccaa4721..0000000000
--- 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 110bad3844..3780195c46 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 = 'image_ref'
_flavor_ref_parameter = 'flavor_ref'
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 efe8678808..d3562d390d 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
}