api: Remove unnecessary validation helpers
Now that we have JSON schemas for all APIs that accept a body, we no longer need to do this validation in the method. Change-Id: Ie09de58bd1b01edea916d7e43e32eb81e7877fae Signed-off-by: Stephen Finucane <stephenfin@redhat.com>
This commit is contained in:
@@ -161,7 +161,7 @@ class BackupsController(wsgi.Controller):
|
||||
container = backup.get('container', None)
|
||||
volume_id = backup['volume_id']
|
||||
|
||||
self.validate_name_and_description(backup, check_length=False)
|
||||
self.clean_name_and_description(backup)
|
||||
name = backup.get('name', None)
|
||||
description = backup.get('description', None)
|
||||
incremental = strutils.bool_from_string(backup.get(
|
||||
|
||||
@@ -124,21 +124,12 @@ class CgsnapshotsController(wsgi.Controller):
|
||||
"""Create a new cgsnapshot."""
|
||||
versionutils.report_deprecated_feature(LOG, DEPRECATE_CGSNAP_API_MSG)
|
||||
LOG.debug('Creating new cgsnapshot %s', body)
|
||||
self.assert_valid_body(body, 'cgsnapshot')
|
||||
|
||||
context = req.environ['cinder.context']
|
||||
cgsnapshot = body['cgsnapshot']
|
||||
self.validate_name_and_description(cgsnapshot)
|
||||
|
||||
try:
|
||||
group_id = cgsnapshot['consistencygroup_id']
|
||||
except KeyError:
|
||||
msg = _("'consistencygroup_id' must be specified")
|
||||
raise exc.HTTPBadRequest(explanation=msg)
|
||||
|
||||
# Not found exception will be handled at the wsgi level
|
||||
group = self._get_cg(context, group_id)
|
||||
|
||||
group_id = cgsnapshot['consistencygroup_id']
|
||||
self.clean_name_and_description(cgsnapshot)
|
||||
name = cgsnapshot.get('name', None)
|
||||
description = cgsnapshot.get('description', None)
|
||||
|
||||
@@ -146,6 +137,9 @@ class CgsnapshotsController(wsgi.Controller):
|
||||
{'name': name},
|
||||
context=context)
|
||||
|
||||
# Not found exception will be handled at the wsgi level
|
||||
group = self._get_cg(context, group_id)
|
||||
|
||||
try:
|
||||
new_cgsnapshot = self.group_snapshot_api.create_group_snapshot(
|
||||
context, group, name, description)
|
||||
|
||||
@@ -68,9 +68,9 @@ class ConsistencyGroupsController(wsgi.Controller):
|
||||
context = req.environ['cinder.context']
|
||||
force = False
|
||||
if body:
|
||||
self.assert_valid_body(body, 'consistencygroup')
|
||||
|
||||
cg_body = body['consistencygroup']
|
||||
# We wrap this in a try-except "to be sure to be sure" but the
|
||||
# schema will ensure we never get unexpected values here
|
||||
try:
|
||||
force = strutils.bool_from_string(cg_body.get('force', False),
|
||||
strict=True)
|
||||
@@ -142,12 +142,12 @@ class ConsistencyGroupsController(wsgi.Controller):
|
||||
"""Create a new consistency group."""
|
||||
versionutils.report_deprecated_feature(LOG, DEPRECATE_CG_API_MSG)
|
||||
LOG.debug('Creating new consistency group %s', body)
|
||||
self.assert_valid_body(body, 'consistencygroup')
|
||||
|
||||
context = req.environ['cinder.context']
|
||||
context.authorize(group_policy.CREATE_POLICY)
|
||||
|
||||
consistencygroup = body['consistencygroup']
|
||||
self.validate_name_and_description(consistencygroup)
|
||||
self.clean_name_and_description(consistencygroup)
|
||||
name = consistencygroup.get('name', None)
|
||||
description = consistencygroup.get('description', None)
|
||||
volume_types = consistencygroup.get('volume_types', None)
|
||||
@@ -194,12 +194,12 @@ class ConsistencyGroupsController(wsgi.Controller):
|
||||
"""
|
||||
versionutils.report_deprecated_feature(LOG, DEPRECATE_CG_API_MSG)
|
||||
LOG.debug('Creating new consistency group %s.', body)
|
||||
self.assert_valid_body(body, 'consistencygroup-from-src')
|
||||
|
||||
context = req.environ['cinder.context']
|
||||
context.authorize(group_policy.CREATE_POLICY)
|
||||
|
||||
consistencygroup = body['consistencygroup-from-src']
|
||||
self.validate_name_and_description(consistencygroup)
|
||||
self.clean_name_and_description(consistencygroup)
|
||||
name = consistencygroup.get('name', None)
|
||||
description = consistencygroup.get('description', None)
|
||||
cgsnapshot_id = consistencygroup.get('cgsnapshot_id', None)
|
||||
@@ -288,12 +288,12 @@ class ConsistencyGroupsController(wsgi.Controller):
|
||||
msg = _("Missing request body.")
|
||||
raise exc.HTTPBadRequest(explanation=msg)
|
||||
|
||||
self.assert_valid_body(body, 'consistencygroup')
|
||||
context = req.environ['cinder.context']
|
||||
group = self._get(context, id)
|
||||
context.authorize(group_policy.UPDATE_POLICY, target_obj=group)
|
||||
consistencygroup = body.get('consistencygroup', None)
|
||||
self.validate_name_and_description(consistencygroup)
|
||||
|
||||
consistencygroup = body['consistencygroup']
|
||||
self.clean_name_and_description(consistencygroup)
|
||||
name = consistencygroup.get('name', None)
|
||||
description = consistencygroup.get('description', None)
|
||||
add_volumes = consistencygroup.get('add_volumes', None)
|
||||
|
||||
@@ -1239,37 +1239,14 @@ class Controller(object, metaclass=ControllerMetaclass):
|
||||
return decorator
|
||||
|
||||
@staticmethod
|
||||
def assert_valid_body(body, entity_name):
|
||||
fail_msg = _(
|
||||
"Missing required element '%s' in request body.") % entity_name
|
||||
|
||||
if not (body and entity_name in body):
|
||||
raise webob.exc.HTTPBadRequest(explanation=fail_msg)
|
||||
|
||||
def is_dict(d):
|
||||
try:
|
||||
d.get(None)
|
||||
return True
|
||||
except AttributeError:
|
||||
return False
|
||||
|
||||
if not is_dict(body[entity_name]):
|
||||
raise webob.exc.HTTPBadRequest(explanation=fail_msg)
|
||||
|
||||
@staticmethod
|
||||
def validate_name_and_description(body, check_length=True):
|
||||
def clean_name_and_description(body):
|
||||
"""Strip whitespace from name and description fields."""
|
||||
for attribute in ['name', 'description',
|
||||
'display_name', 'display_description']:
|
||||
value = body.get(attribute)
|
||||
if value is not None:
|
||||
if isinstance(value, str):
|
||||
body[attribute] = value.strip()
|
||||
if check_length:
|
||||
try:
|
||||
utils.check_string_length(body[attribute], attribute,
|
||||
min_length=0, max_length=255)
|
||||
except exception.InvalidInput as error:
|
||||
raise webob.exc.HTTPBadRequest(explanation=error.msg)
|
||||
|
||||
@staticmethod
|
||||
def validate_string_length(value, entity_name, min_length=0,
|
||||
|
||||
@@ -45,7 +45,7 @@ class BackupsController(backups.BackupsController):
|
||||
|
||||
backup_update = body['backup']
|
||||
|
||||
self.validate_name_and_description(backup_update, check_length=False)
|
||||
self.clean_name_and_description(backup_update)
|
||||
update_dict = {}
|
||||
if 'name' in backup_update:
|
||||
update_dict['display_name'] = backup_update.pop('name')
|
||||
|
||||
@@ -76,12 +76,12 @@ class ConsistencyGroupsController(
|
||||
msg = _("Missing request body.")
|
||||
raise exc.HTTPBadRequest(explanation=msg)
|
||||
|
||||
self.assert_valid_body(body, 'consistencygroup')
|
||||
context = req.environ['cinder.context']
|
||||
group = self._get(context, id)
|
||||
context.authorize(group_policy.UPDATE_POLICY, target_obj=group)
|
||||
consistencygroup = body.get('consistencygroup', None)
|
||||
self.validate_name_and_description(consistencygroup)
|
||||
|
||||
consistencygroup = body['consistencygroup']
|
||||
self.clean_name_and_description(consistencygroup)
|
||||
name = consistencygroup.get('name', None)
|
||||
description = consistencygroup.get('description', None)
|
||||
add_volumes = consistencygroup.get('add_volumes', None)
|
||||
|
||||
@@ -48,7 +48,6 @@ class SnapshotMetadataController(wsgi.Controller):
|
||||
|
||||
@validation.schema(schema.create)
|
||||
def create(self, req, snapshot_id, body):
|
||||
self.assert_valid_body(body, 'metadata')
|
||||
context = req.environ['cinder.context']
|
||||
metadata = body['metadata']
|
||||
|
||||
@@ -61,7 +60,6 @@ class SnapshotMetadataController(wsgi.Controller):
|
||||
|
||||
@validation.schema(schema.update)
|
||||
def update(self, req, snapshot_id, id, body):
|
||||
self.assert_valid_body(body, 'meta')
|
||||
meta_item = body['meta']
|
||||
|
||||
if id not in meta_item:
|
||||
@@ -82,7 +80,6 @@ class SnapshotMetadataController(wsgi.Controller):
|
||||
|
||||
@validation.schema(schema.update_all)
|
||||
def update_all(self, req, snapshot_id, body):
|
||||
self.assert_valid_body(body, 'metadata')
|
||||
context = req.environ['cinder.context']
|
||||
metadata = body['metadata']
|
||||
|
||||
|
||||
@@ -207,7 +207,7 @@ class SnapshotsController(wsgi.Controller):
|
||||
|
||||
LOG.info("Create snapshot from volume %s", volume_id)
|
||||
|
||||
self.validate_name_and_description(snapshot, check_length=False)
|
||||
self.clean_name_and_description(snapshot)
|
||||
if 'name' in snapshot:
|
||||
snapshot['display_name'] = snapshot.pop('name')
|
||||
|
||||
@@ -237,8 +237,8 @@ class SnapshotsController(wsgi.Controller):
|
||||
"""Update a snapshot."""
|
||||
context = req.environ['cinder.context']
|
||||
snapshot_body = body['snapshot']
|
||||
self.validate_name_and_description(snapshot_body, check_length=False)
|
||||
|
||||
self.clean_name_and_description(snapshot_body)
|
||||
if 'name' in snapshot_body:
|
||||
snapshot_body['display_name'] = snapshot_body.pop('name')
|
||||
|
||||
|
||||
@@ -250,9 +250,8 @@ class VolumeController(wsgi.Controller):
|
||||
@validation.schema(schema.revert)
|
||||
def revert(self, req, id, body):
|
||||
"""revert a volume to a snapshot"""
|
||||
|
||||
context = req.environ['cinder.context']
|
||||
self.assert_valid_body(body, 'revert')
|
||||
|
||||
snapshot_id = body['revert'].get('snapshot_id')
|
||||
volume = self.volume_api.get_volume(context, id)
|
||||
try:
|
||||
@@ -380,7 +379,7 @@ class VolumeController(wsgi.Controller):
|
||||
|
||||
volume = body['volume']
|
||||
kwargs = {}
|
||||
self.validate_name_and_description(volume, check_length=False)
|
||||
self.clean_name_and_description(volume)
|
||||
|
||||
# NOTE: it's 'name'/'description' in the REST API, but
|
||||
# 'display_name'/display_description' in the database layer,
|
||||
@@ -484,8 +483,7 @@ class VolumeController(wsgi.Controller):
|
||||
"""Update a volume."""
|
||||
context = req.environ['cinder.context']
|
||||
update_dict = body['volume']
|
||||
|
||||
self.validate_name_and_description(update_dict, check_length=False)
|
||||
self.clean_name_and_description(update_dict)
|
||||
|
||||
# NOTE(thingee): v2 API allows name instead of display_name
|
||||
if 'name' in update_dict:
|
||||
|
||||
@@ -214,9 +214,7 @@ class CgsnapshotsAPITestCase(test.TestCase):
|
||||
db.volume_destroy(context.get_admin_context(), volume_id)
|
||||
consistencygroup.destroy()
|
||||
|
||||
@mock.patch(
|
||||
'cinder.api.openstack.wsgi.Controller.validate_name_and_description')
|
||||
def test_create_cgsnapshot_json(self, mock_validate):
|
||||
def test_create_cgsnapshot_json(self):
|
||||
vol_type = utils.create_volume_type(context.get_admin_context(),
|
||||
self, name='my_vol_type')
|
||||
consistencygroup = utils.create_group(
|
||||
@@ -243,7 +241,6 @@ class CgsnapshotsAPITestCase(test.TestCase):
|
||||
|
||||
self.assertEqual(HTTPStatus.ACCEPTED, res.status_int)
|
||||
self.assertIn('id', res_dict['cgsnapshot'])
|
||||
self.assertTrue(mock_validate.called)
|
||||
|
||||
cgsnapshot = objects.GroupSnapshot.get_by_id(
|
||||
context.get_admin_context(), res_dict['cgsnapshot']['id'])
|
||||
@@ -251,10 +248,7 @@ class CgsnapshotsAPITestCase(test.TestCase):
|
||||
db.volume_destroy(context.get_admin_context(), volume_id)
|
||||
consistencygroup.destroy()
|
||||
|
||||
@mock.patch(
|
||||
'cinder.api.openstack.wsgi.Controller.validate_name_and_description')
|
||||
def test_create_cgsnapshot_when_volume_in_error_status(self,
|
||||
mock_validate):
|
||||
def test_create_cgsnapshot_when_volume_in_error_status(self):
|
||||
vol_type = utils.create_volume_type(context.get_admin_context(),
|
||||
self, name='my_vol_type')
|
||||
consistencygroup = utils.create_group(
|
||||
@@ -286,7 +280,6 @@ class CgsnapshotsAPITestCase(test.TestCase):
|
||||
"is in error status.",
|
||||
res_dict['badRequest']['message']
|
||||
)
|
||||
self.assertTrue(mock_validate.called)
|
||||
|
||||
db.volume_destroy(context.get_admin_context(), volume_id)
|
||||
consistencygroup.destroy()
|
||||
|
||||
@@ -427,9 +427,7 @@ class ConsistencyGroupsAPITestCase(test.TestCase):
|
||||
for vol_type_id in res_dict['consistencygroups'][2]['volume_types']:
|
||||
self.assertIn(vol_type_id, vol_type_ids)
|
||||
|
||||
@mock.patch(
|
||||
'cinder.api.openstack.wsgi.Controller.validate_name_and_description')
|
||||
def test_create_consistencygroup_json(self, mock_validate):
|
||||
def test_create_consistencygroup_json(self):
|
||||
group_id = fake.CONSISTENCY_GROUP_ID
|
||||
|
||||
# Create volume type
|
||||
@@ -451,7 +449,6 @@ class ConsistencyGroupsAPITestCase(test.TestCase):
|
||||
|
||||
self.assertEqual(HTTPStatus.ACCEPTED, res.status_int)
|
||||
self.assertIn('id', res_dict['consistencygroup'])
|
||||
self.assertTrue(mock_validate.called)
|
||||
|
||||
group_id = res_dict['consistencygroup']['id']
|
||||
cg = objects.Group.get_by_id(self.ctxt, group_id)
|
||||
@@ -780,9 +777,7 @@ class ConsistencyGroupsAPITestCase(test.TestCase):
|
||||
res_dict['badRequest']['code'])
|
||||
self.assertIsNotNone(res_dict['badRequest']['message'])
|
||||
|
||||
@mock.patch(
|
||||
'cinder.api.openstack.wsgi.Controller.validate_name_and_description')
|
||||
def test_update_consistencygroup_success(self, mock_validate):
|
||||
def test_update_consistencygroup_success(self):
|
||||
volume_type_id = utils.create_volume_type(
|
||||
context.get_admin_context(), self, name='my_vol_type')['id']
|
||||
fake_grp_type = {'id': fake.GROUP_TYPE_ID, 'name': 'fake_grp_type'}
|
||||
@@ -858,16 +853,13 @@ class ConsistencyGroupsAPITestCase(test.TestCase):
|
||||
consistencygroup = objects.Group.get_by_id(
|
||||
self.ctxt, consistencygroup.id)
|
||||
self.assertEqual(HTTPStatus.ACCEPTED, res.status_int)
|
||||
self.assertTrue(mock_validate.called)
|
||||
self.assertEqual(fields.ConsistencyGroupStatus.UPDATING,
|
||||
consistencygroup.status)
|
||||
|
||||
consistencygroup.destroy()
|
||||
cg2.destroy()
|
||||
|
||||
@mock.patch(
|
||||
'cinder.api.openstack.wsgi.Controller.validate_name_and_description')
|
||||
def test_update_consistencygroup_sourcing_cg(self, mock_validate):
|
||||
def test_update_consistencygroup_sourcing_cg(self):
|
||||
volume_type_id = fake.VOLUME_TYPE_ID
|
||||
consistencygroup = self._create_consistencygroup(
|
||||
status=fields.ConsistencyGroupStatus.AVAILABLE,
|
||||
@@ -909,9 +901,7 @@ class ConsistencyGroupsAPITestCase(test.TestCase):
|
||||
consistencygroup.destroy()
|
||||
cg2.destroy()
|
||||
|
||||
@mock.patch(
|
||||
'cinder.api.openstack.wsgi.Controller.validate_name_and_description')
|
||||
def test_update_consistencygroup_creating_cgsnapshot(self, mock_validate):
|
||||
def test_update_consistencygroup_creating_cgsnapshot(self):
|
||||
volume_type_id = fake.VOLUME_TYPE_ID
|
||||
consistencygroup = self._create_consistencygroup(
|
||||
status=fields.ConsistencyGroupStatus.AVAILABLE,
|
||||
@@ -1143,11 +1133,8 @@ class ConsistencyGroupsAPITestCase(test.TestCase):
|
||||
|
||||
consistencygroup.destroy()
|
||||
|
||||
@mock.patch(
|
||||
'cinder.api.openstack.wsgi.Controller.validate_name_and_description')
|
||||
@mock.patch('cinder.scheduler.rpcapi.SchedulerAPI.validate_host_capacity')
|
||||
def test_create_consistencygroup_from_src_snap(self, mock_validate_host,
|
||||
mock_validate):
|
||||
def test_create_consistencygroup_from_src_snap(self, mock_validate_host):
|
||||
self.mock_object(volume_api.API, "create", v3_fakes.fake_volume_create)
|
||||
|
||||
consistencygroup = utils.create_group(
|
||||
@@ -1184,7 +1171,6 @@ class ConsistencyGroupsAPITestCase(test.TestCase):
|
||||
self.assertEqual(HTTPStatus.ACCEPTED, res.status_int)
|
||||
self.assertIn('id', res_dict['consistencygroup'])
|
||||
self.assertEqual(test_cg_name, res_dict['consistencygroup']['name'])
|
||||
self.assertTrue(mock_validate.called)
|
||||
|
||||
cg_ref = objects.Group.get_by_id(
|
||||
self.ctxt.elevated(), res_dict['consistencygroup']['id'])
|
||||
|
||||
@@ -14,7 +14,6 @@ from http import HTTPStatus
|
||||
import inspect
|
||||
from unittest import mock
|
||||
|
||||
import ddt
|
||||
from oslo_utils import encodeutils
|
||||
import webob
|
||||
|
||||
@@ -881,70 +880,3 @@ class ResponseObjectTest(test.TestCase):
|
||||
def test_default_serializers(self):
|
||||
robj = wsgi.ResponseObject({})
|
||||
self.assertEqual({}, robj.serializers)
|
||||
|
||||
|
||||
@ddt.data
|
||||
class ValidBodyTest(test.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
super(ValidBodyTest, self).setUp()
|
||||
self.controller = wsgi.Controller()
|
||||
|
||||
def test_assert_valid_body(self):
|
||||
body = {'foo': {}}
|
||||
self.controller.assert_valid_body(body, 'foo')
|
||||
|
||||
def test_assert_valid_body_none(self):
|
||||
self.assertRaises(webob.exc.HTTPBadRequest,
|
||||
self.controller.assert_valid_body(None, 'foo'))
|
||||
|
||||
def test_assert_valid_body_empty(self):
|
||||
self.assertRaises(webob.exc.HTTPBadRequest,
|
||||
self.controller.assert_valid_body({}, 'foo'))
|
||||
|
||||
def test_assert_valid_body_no_entity(self):
|
||||
body = {'bar': {}}
|
||||
self.assertRaises(webob.exc.HTTPBadRequest,
|
||||
self.controller.assert_valid_body(body, 'foo'))
|
||||
|
||||
def test_assert_valid_body_malformed_entity(self):
|
||||
body = {'foo': 'bar'}
|
||||
self.assertRaises(webob.exc.HTTPBadRequest,
|
||||
self.controller.assert_valid_body(body, 'foo'))
|
||||
|
||||
def test_validate_string_length_with_name_too_long(self):
|
||||
name = 'a' * 256
|
||||
self.assertRaises(webob.exc.HTTPBadRequest,
|
||||
self.controller.validate_string_length,
|
||||
name, 'Name', min_length=1, max_length=255,
|
||||
remove_whitespaces=False)
|
||||
|
||||
@ddt.data('name', 'display_name', 'description', 'display_description')
|
||||
def test_validate_name_and_description_with_name_too_long(self, attribute):
|
||||
body = {attribute: 'a' * 256}
|
||||
self.assertRaises(webob.exc.HTTPBadRequest,
|
||||
self.controller.validate_name_and_description,
|
||||
body)
|
||||
|
||||
@ddt.data('name', 'display_name', 'description', 'display_description')
|
||||
def test_validate_name_and_description_with_name_as_int(self, attribute):
|
||||
body = {attribute: 1234}
|
||||
self.assertRaises(webob.exc.HTTPBadRequest,
|
||||
self.controller.validate_name_and_description,
|
||||
body)
|
||||
|
||||
@ddt.data('name', 'display_name', 'description', 'display_description')
|
||||
def test_validate_name_and_description_with_name_zero_length(self,
|
||||
attribute):
|
||||
# NOTE(jdg): We allow zero length names currently, particularly
|
||||
# from Nova, changes to this require an API version bump
|
||||
body = {attribute: ""}
|
||||
self.controller.validate_name_and_description(body)
|
||||
self.assertEqual('', body[attribute])
|
||||
|
||||
@ddt.data('name', 'display_name', 'description', 'display_description')
|
||||
def test_validate_name_and_description_with_name_contains_white_spaces(
|
||||
self, attribute):
|
||||
body = {attribute: 'a' * 255 + " "}
|
||||
self.controller.validate_name_and_description(body)
|
||||
self.assertEqual('a' * 255, body[attribute])
|
||||
|
||||
@@ -74,9 +74,7 @@ class VolumeManageTest(test.TestCase):
|
||||
|
||||
@mock.patch('cinder.volume.api.API.manage_existing',
|
||||
wraps=test_contrib.api_manage)
|
||||
@mock.patch(
|
||||
'cinder.api.openstack.wsgi.Controller.validate_name_and_description')
|
||||
def test_manage_volume_route(self, mock_validate, mock_api_manage):
|
||||
def test_manage_volume_route(self, mock_api_manage):
|
||||
"""Test call to manage volume.
|
||||
|
||||
There is currently no change between the API in contrib and the API in
|
||||
|
||||
@@ -459,9 +459,7 @@ class VolumeApiTest(BaseVolumeTest):
|
||||
autospec=True)
|
||||
@mock.patch.object(volume_api.API, 'get_snapshot', autospec=True)
|
||||
@mock.patch.object(volume_api.API, 'create', autospec=True)
|
||||
@mock.patch(
|
||||
'cinder.api.openstack.wsgi.Controller.validate_name_and_description')
|
||||
def test_volume_create_with_snapshot_image(self, mock_validate, create,
|
||||
def test_volume_create_with_snapshot_image(self, create,
|
||||
get_snapshot, volume_type_get):
|
||||
create.side_effect = v3_fakes.fake_volume_api_create
|
||||
get_snapshot.side_effect = v3_fakes.fake_snapshot_get
|
||||
@@ -1275,9 +1273,7 @@ class VolumeApiTestNoMicroversion(BaseVolumeTest):
|
||||
'qos_specs_id': fake.QOS_SPEC_ID,
|
||||
'deleted': False}
|
||||
|
||||
@mock.patch(
|
||||
'cinder.api.openstack.wsgi.Controller.validate_name_and_description')
|
||||
def test_volume_create(self, mock_validate):
|
||||
def test_volume_create(self):
|
||||
self.mock_object(volume_api.API, 'get', v3_fakes.fake_volume_get)
|
||||
self.mock_object(volume_api.API, "create",
|
||||
v3_fakes.fake_volume_api_create)
|
||||
@@ -1290,16 +1286,13 @@ class VolumeApiTestNoMicroversion(BaseVolumeTest):
|
||||
res_dict = self.controller.create(req, body=body)
|
||||
ex = self._expected_vol_from_controller()
|
||||
self.assertEqual(ex, res_dict)
|
||||
self.assertTrue(mock_validate.called)
|
||||
|
||||
@mock.patch.object(db, 'volume_get_all', v3_fakes.fake_volume_get_all)
|
||||
@mock.patch.object(db, 'service_get_all',
|
||||
return_value=v3_fakes.fake_service_get_all_by_topic(
|
||||
None, None),
|
||||
autospec=True)
|
||||
@mock.patch(
|
||||
'cinder.api.openstack.wsgi.Controller.validate_name_and_description')
|
||||
def test_volume_create_with_type(self, mock_validate, mock_service_get):
|
||||
def test_volume_create_with_type(self, mock_service_get):
|
||||
db_vol_type = db.volume_type_get_by_name(context.get_admin_context(),
|
||||
'__DEFAULT__')
|
||||
|
||||
@@ -1338,7 +1331,6 @@ class VolumeApiTestNoMicroversion(BaseVolumeTest):
|
||||
v3_fakes.fake_volume_type_get)
|
||||
req = fakes.HTTPRequest.blank('/v3/volumes/detail')
|
||||
res_dict = self.controller.detail(req)
|
||||
self.assertTrue(mock_validate.called)
|
||||
|
||||
@classmethod
|
||||
def _vol_in_request_body(cls,
|
||||
@@ -1592,9 +1584,7 @@ class VolumeApiTestNoMicroversion(BaseVolumeTest):
|
||||
self.controller.create,
|
||||
req, body=body)
|
||||
|
||||
@mock.patch(
|
||||
'cinder.api.openstack.wsgi.Controller.validate_name_and_description')
|
||||
def test_volume_create_with_image_ref(self, mock_validate):
|
||||
def test_volume_create_with_image_ref(self):
|
||||
self.mock_object(volume_api.API, "create",
|
||||
v3_fakes.fake_volume_api_create)
|
||||
self.mock_object(db.sqlalchemy.api, '_volume_type_get_full',
|
||||
@@ -1608,7 +1598,6 @@ class VolumeApiTestNoMicroversion(BaseVolumeTest):
|
||||
req = fakes.HTTPRequest.blank('/v3/volumes')
|
||||
res_dict = self.controller.create(req, body=body)
|
||||
self.assertEqual(ex, res_dict)
|
||||
self.assertTrue(mock_validate.called)
|
||||
|
||||
def test_volume_create_with_image_ref_is_integer(self):
|
||||
self.mock_object(volume_api.API, "create", v3_fakes.fake_volume_create)
|
||||
@@ -1649,9 +1638,7 @@ class VolumeApiTestNoMicroversion(BaseVolumeTest):
|
||||
req,
|
||||
body=body)
|
||||
|
||||
@mock.patch(
|
||||
'cinder.api.openstack.wsgi.Controller.validate_name_and_description')
|
||||
def test_volume_create_with_image_id(self, mock_validate):
|
||||
def test_volume_create_with_image_id(self):
|
||||
self.mock_object(volume_api.API, "create",
|
||||
v3_fakes.fake_volume_api_create)
|
||||
self.mock_object(db.sqlalchemy.api, '_volume_type_get_full',
|
||||
@@ -1665,7 +1652,6 @@ class VolumeApiTestNoMicroversion(BaseVolumeTest):
|
||||
req = fakes.HTTPRequest.blank('/v3/volumes')
|
||||
res_dict = self.controller.create(req, body=body)
|
||||
self.assertEqual(ex, res_dict)
|
||||
self.assertTrue(mock_validate.called)
|
||||
|
||||
def test_volume_create_with_image_id_is_integer(self):
|
||||
self.mock_object(volume_api.API, "create", v3_fakes.fake_volume_create)
|
||||
@@ -1706,9 +1692,7 @@ class VolumeApiTestNoMicroversion(BaseVolumeTest):
|
||||
req,
|
||||
body=body)
|
||||
|
||||
@mock.patch(
|
||||
'cinder.api.openstack.wsgi.Controller.validate_name_and_description')
|
||||
def test_volume_create_with_image_name(self, mock_validate):
|
||||
def test_volume_create_with_image_name(self):
|
||||
self.mock_object(volume_api.API, "create",
|
||||
v3_fakes.fake_volume_api_create)
|
||||
self.mock_object(db.sqlalchemy.api, '_volume_type_get_full',
|
||||
@@ -1801,9 +1785,7 @@ class VolumeApiTestNoMicroversion(BaseVolumeTest):
|
||||
self.assertEqual(expected, res_dict)
|
||||
self.assertEqual(2, len(self.notifier.notifications))
|
||||
|
||||
@mock.patch(
|
||||
'cinder.api.openstack.wsgi.Controller.validate_name_and_description')
|
||||
def test_volume_update_deprecation(self, mock_validate):
|
||||
def test_volume_update_deprecation(self):
|
||||
self.mock_object(volume_api.API, 'get', v3_fakes.fake_volume_api_get)
|
||||
self.mock_object(volume_api.API, "update", v3_fakes.fake_volume_update)
|
||||
self.mock_object(db.sqlalchemy.api, '_volume_type_get_full',
|
||||
@@ -1823,11 +1805,8 @@ class VolumeApiTestNoMicroversion(BaseVolumeTest):
|
||||
metadata={'attached_mode': 'rw', 'readonly': 'False'})
|
||||
self.assertEqual(expected, res_dict)
|
||||
self.assertEqual(2, len(self.notifier.notifications))
|
||||
self.assertTrue(mock_validate.called)
|
||||
|
||||
@mock.patch(
|
||||
'cinder.api.openstack.wsgi.Controller.validate_name_and_description')
|
||||
def test_volume_update_deprecation_key_priority(self, mock_validate):
|
||||
def test_volume_update_deprecation_key_priority(self):
|
||||
"""Test current update keys have priority over deprecated keys."""
|
||||
self.mock_object(volume_api.API, 'get', v3_fakes.fake_volume_api_get)
|
||||
self.mock_object(volume_api.API, "update", v3_fakes.fake_volume_update)
|
||||
@@ -1850,11 +1829,8 @@ class VolumeApiTestNoMicroversion(BaseVolumeTest):
|
||||
metadata={'attached_mode': 'rw', 'readonly': 'False'})
|
||||
self.assertEqual(expected, res_dict)
|
||||
self.assertEqual(2, len(self.notifier.notifications))
|
||||
self.assertTrue(mock_validate.called)
|
||||
|
||||
@mock.patch(
|
||||
'cinder.api.openstack.wsgi.Controller.validate_name_and_description')
|
||||
def test_volume_update_metadata(self, mock_validate):
|
||||
def test_volume_update_metadata(self):
|
||||
self.mock_object(volume_api.API, 'get', v3_fakes.fake_volume_api_get)
|
||||
self.mock_object(volume_api.API, "update", v3_fakes.fake_volume_update)
|
||||
self.mock_object(db.sqlalchemy.api, '_volume_type_get_full',
|
||||
@@ -1873,11 +1849,8 @@ class VolumeApiTestNoMicroversion(BaseVolumeTest):
|
||||
'qos_max_iops': '2000'})
|
||||
self.assertEqual(expected, res_dict)
|
||||
self.assertEqual(2, len(self.notifier.notifications))
|
||||
self.assertTrue(mock_validate.called)
|
||||
|
||||
@mock.patch(
|
||||
'cinder.api.openstack.wsgi.Controller.validate_name_and_description')
|
||||
def test_volume_update_with_admin_metadata(self, mock_validate):
|
||||
def test_volume_update_with_admin_metadata(self):
|
||||
self.mock_object(volume_api.API, "update", v3_fakes.fake_volume_update)
|
||||
|
||||
volume = v3_fakes.create_volume(fake.VOLUME_ID)
|
||||
@@ -1926,7 +1899,6 @@ class VolumeApiTestNoMicroversion(BaseVolumeTest):
|
||||
tzinfo=iso8601.UTC)
|
||||
self.assertEqual(expected, res_dict)
|
||||
self.assertEqual(2, len(self.notifier.notifications))
|
||||
self.assertTrue(mock_validate.called)
|
||||
|
||||
@ddt.data({'a' * 256: 'a'},
|
||||
{'a': 'a' * 256},
|
||||
|
||||
Reference in New Issue
Block a user