Return 404 from delete of extra spec if not found

API service now returns a 404 if the volume type that the
user is trying to delete doesn't exist.

Fixed Bug 1090306.

Change-Id: I3c1d4fdac1c2492f532ab4dbfd5c7aaf0ffa6fa4
This commit is contained in:
Cian O'Driscoll 2013-05-30 13:00:54 +00:00
parent 301d72cfae
commit de84fd7b15
3 changed files with 21 additions and 1 deletions

View File

@ -134,7 +134,12 @@ class VolumeTypeExtraSpecsController(wsgi.Controller):
context = req.environ['cinder.context'] context = req.environ['cinder.context']
self._check_type(context, type_id) self._check_type(context, type_id)
authorize(context) authorize(context)
try:
db.volume_type_extra_specs_delete(context, type_id, id) db.volume_type_extra_specs_delete(context, type_id, id)
except exception.VolumeTypeExtraSpecsNotFound as error:
raise webob.exc.HTTPNotFound(explanation=unicode(error))
notifier_info = dict(type_id=type_id, id=id) notifier_info = dict(type_id=type_id, id=id)
notifier_api.notify(context, 'volumeTypeExtraSpecs', notifier_api.notify(context, 'volumeTypeExtraSpecs',
'volume_type_extra_specs.delete', 'volume_type_extra_specs.delete',

View File

@ -1575,6 +1575,8 @@ def volume_type_extra_specs_get(context, volume_type_id):
@require_context @require_context
def volume_type_extra_specs_delete(context, volume_type_id, key): def volume_type_extra_specs_delete(context, volume_type_id, key):
session = get_session()
volume_type_extra_specs_get_item(context, volume_type_id, key, session)
_volume_type_extra_specs_query(context, volume_type_id).\ _volume_type_extra_specs_query(context, volume_type_id).\
filter_by(key=key).\ filter_by(key=key).\
update({'deleted': True, update({'deleted': True,

View File

@ -21,6 +21,7 @@ from lxml import etree
import webob import webob
from cinder.api.contrib import types_extra_specs from cinder.api.contrib import types_extra_specs
from cinder import exception
from cinder.openstack.common.notifier import api as notifier_api from cinder.openstack.common.notifier import api as notifier_api
from cinder.openstack.common.notifier import test_notifier from cinder.openstack.common.notifier import test_notifier
from cinder import test from cinder import test
@ -45,6 +46,10 @@ def delete_volume_type_extra_specs(context, volume_type_id, key):
pass pass
def delete_volume_type_extra_specs_not_found(context, volume_type_id, key):
raise exception.VolumeTypeExtraSpecsNotFound("Not Found")
def stub_volume_type_extra_specs(): def stub_volume_type_extra_specs():
specs = { specs = {
"key1": "value1", "key1": "value1",
@ -121,6 +126,14 @@ class VolumeTypesExtraSpecsTest(test.TestCase):
self.controller.delete(req, 1, 'key5') self.controller.delete(req, 1, 'key5')
self.assertEquals(len(test_notifier.NOTIFICATIONS), 1) self.assertEquals(len(test_notifier.NOTIFICATIONS), 1)
def test_delete_not_found(self):
self.stubs.Set(cinder.db, 'volume_type_extra_specs_delete',
delete_volume_type_extra_specs_not_found)
req = fakes.HTTPRequest.blank(self.api_path + '/key6')
self.assertRaises(webob.exc.HTTPNotFound, self.controller.delete,
req, 1, 'key6')
def test_create(self): def test_create(self):
self.stubs.Set(cinder.db, self.stubs.Set(cinder.db,
'volume_type_extra_specs_update_or_create', 'volume_type_extra_specs_update_or_create',