Merge "Don't use context.elevated to get volume"
This commit is contained in:
commit
4bba79d2f2
@ -235,10 +235,13 @@ class VolumeApiTest(test.TestCase):
|
||||
req,
|
||||
body)
|
||||
|
||||
def test_volume_update(self):
|
||||
self.stubs.Set(db, 'volume_get', stubs.stub_volume_get_db)
|
||||
self.stubs.Set(volume_api.API, "update", stubs.stub_volume_update)
|
||||
|
||||
@mock.patch.object(db, 'volume_admin_metadata_get',
|
||||
return_value={'attached_mode': 'rw',
|
||||
'readonly': 'False'})
|
||||
@mock.patch.object(db, 'volume_get', side_effect=stubs.stub_volume_get_db)
|
||||
@mock.patch.object(volume_api.API, 'update',
|
||||
side_effect=stubs.stub_volume_update)
|
||||
def test_volume_update(self, *args):
|
||||
updates = {
|
||||
"display_name": "Updated Test Name",
|
||||
}
|
||||
@ -266,10 +269,14 @@ class VolumeApiTest(test.TestCase):
|
||||
self.assertEqual(expected, res_dict)
|
||||
self.assertEqual(2, len(self.notifier.notifications))
|
||||
|
||||
def test_volume_update_metadata(self):
|
||||
self.stubs.Set(db, 'volume_get', stubs.stub_volume_get_db)
|
||||
self.stubs.Set(volume_api.API, "update", stubs.stub_volume_update)
|
||||
|
||||
@mock.patch.object(db, 'volume_admin_metadata_get',
|
||||
return_value={"qos_max_iops": 2000,
|
||||
"readonly": "False",
|
||||
"attached_mode": "rw"})
|
||||
@mock.patch.object(db, 'volume_get', side_effect=stubs.stub_volume_get_db)
|
||||
@mock.patch.object(volume_api.API, 'update',
|
||||
side_effect=stubs.stub_volume_update)
|
||||
def test_volume_update_metadata(self, *args):
|
||||
updates = {
|
||||
"metadata": {"qos_max_iops": 2000}
|
||||
}
|
||||
@ -300,6 +307,11 @@ class VolumeApiTest(test.TestCase):
|
||||
self.assertEqual(2, len(self.notifier.notifications))
|
||||
|
||||
def test_volume_update_with_admin_metadata(self):
|
||||
def stubs_volume_admin_metadata_get(context, volume_id):
|
||||
return {'key': 'value',
|
||||
'readonly': 'True'}
|
||||
self.stubs.Set(db, 'volume_admin_metadata_get',
|
||||
stubs_volume_admin_metadata_get)
|
||||
self.stubs.Set(volume_api.API, "update", stubs.stub_volume_update)
|
||||
|
||||
volume = stubs.stub_volume("1")
|
||||
@ -379,6 +391,11 @@ class VolumeApiTest(test.TestCase):
|
||||
req, '1', body)
|
||||
|
||||
def test_volume_list(self):
|
||||
def stubs_volume_admin_metadata_get(context, volume_id):
|
||||
return {'attached_mode': 'rw',
|
||||
'readonly': 'False'}
|
||||
self.stubs.Set(db, 'volume_admin_metadata_get',
|
||||
stubs_volume_admin_metadata_get)
|
||||
self.stubs.Set(db, 'volume_get', stubs.stub_volume_get_db)
|
||||
self.stubs.Set(volume_api.API, 'get_all',
|
||||
stubs.stub_volume_get_all_by_project)
|
||||
@ -524,9 +541,11 @@ class VolumeApiTest(test.TestCase):
|
||||
'size': 1}]}
|
||||
self.assertEqual(expected, res_dict)
|
||||
|
||||
def test_volume_show(self):
|
||||
self.stubs.Set(db, 'volume_get', stubs.stub_volume_get_db)
|
||||
|
||||
@mock.patch.object(db, 'volume_admin_metadata_get',
|
||||
return_value={'attached_mode': 'rw',
|
||||
'readonly': 'False'})
|
||||
@mock.patch.object(db, 'volume_get', side_effect=stubs.stub_volume_get_db)
|
||||
def test_volume_show(self, *args):
|
||||
req = fakes.HTTPRequest.blank('/v1/volumes/1')
|
||||
res_dict = self.controller.show(req, '1')
|
||||
expected = {'volume': {'status': 'fakestatus',
|
||||
|
@ -125,7 +125,12 @@ def stub_volume_delete(self, context, *args, **param):
|
||||
|
||||
|
||||
def stub_volume_get(self, context, volume_id, viewable_admin_meta=False):
|
||||
return stub_volume(volume_id)
|
||||
if viewable_admin_meta:
|
||||
return stub_volume(volume_id)
|
||||
else:
|
||||
volume = stub_volume(volume_id)
|
||||
del volume['volume_admin_metadata']
|
||||
return volume
|
||||
|
||||
|
||||
def stub_volume_get_notfound(self, context,
|
||||
@ -134,7 +139,12 @@ def stub_volume_get_notfound(self, context,
|
||||
|
||||
|
||||
def stub_volume_get_db(context, volume_id):
|
||||
return stub_volume(volume_id)
|
||||
if context.is_admin:
|
||||
return stub_volume(volume_id)
|
||||
else:
|
||||
volume = stub_volume(volume_id)
|
||||
del volume['volume_admin_metadata']
|
||||
return volume
|
||||
|
||||
|
||||
def stub_volume_get_all(context, search_opts=None, marker=None, limit=None,
|
||||
@ -150,7 +160,7 @@ def stub_volume_get_all_by_project(self, context, marker, limit,
|
||||
filters=None,
|
||||
viewable_admin_meta=False):
|
||||
filters = filters or {}
|
||||
return [stub_volume_get(self, context, '1')]
|
||||
return [stub_volume_get(self, context, '1', viewable_admin_meta=True)]
|
||||
|
||||
|
||||
def stub_snapshot(id, **kwargs):
|
||||
|
@ -15,6 +15,7 @@
|
||||
|
||||
|
||||
import datetime
|
||||
import functools
|
||||
|
||||
from lxml import etree
|
||||
import mock
|
||||
@ -245,7 +246,8 @@ class VolumeApiTest(test.TestCase):
|
||||
@mock.patch.object(volume_api.API, 'create', autospec=True)
|
||||
def test_volume_creation_from_source_volume(self, create, get_volume):
|
||||
|
||||
get_volume.side_effect = stubs.stub_volume_get
|
||||
get_volume.side_effect = functools.partial(stubs.stub_volume_get,
|
||||
viewable_admin_meta=True)
|
||||
create.side_effect = stubs.stub_volume_create
|
||||
|
||||
source_volid = '2f49aa3a-6aae-488d-8b99-a43271605af6'
|
||||
|
@ -705,9 +705,15 @@ def add_visible_admin_metadata(volume):
|
||||
visible_admin_meta = {}
|
||||
|
||||
if volume.get('volume_admin_metadata'):
|
||||
for item in volume['volume_admin_metadata']:
|
||||
if item['key'] in _visible_admin_metadata_keys:
|
||||
visible_admin_meta[item['key']] = item['value']
|
||||
if isinstance(volume['volume_admin_metadata'], dict):
|
||||
volume_admin_metadata = volume['volume_admin_metadata']
|
||||
for key in volume_admin_metadata:
|
||||
if key in _visible_admin_metadata_keys:
|
||||
visible_admin_meta[key] = volume_admin_metadata[key]
|
||||
else:
|
||||
for item in volume['volume_admin_metadata']:
|
||||
if item['key'] in _visible_admin_metadata_keys:
|
||||
visible_admin_meta[item['key']] = item['value']
|
||||
# avoid circular ref when volume is a Volume instance
|
||||
elif (volume.get('admin_metadata') and
|
||||
isinstance(volume.get('admin_metadata'), dict)):
|
||||
|
@ -401,12 +401,16 @@ class API(base.Base):
|
||||
LOG.info(_LI("Volume updated successfully."), resource=vref)
|
||||
|
||||
def get(self, context, volume_id, viewable_admin_meta=False):
|
||||
rv = self.db.volume_get(context, volume_id)
|
||||
|
||||
volume = dict(rv)
|
||||
|
||||
if viewable_admin_meta:
|
||||
ctxt = context.elevated()
|
||||
else:
|
||||
ctxt = context
|
||||
rv = self.db.volume_get(ctxt, volume_id)
|
||||
volume = dict(rv)
|
||||
admin_metadata = self.db.volume_admin_metadata_get(ctxt,
|
||||
volume_id)
|
||||
volume['volume_admin_metadata'] = admin_metadata
|
||||
|
||||
try:
|
||||
check_policy(context, 'get', volume)
|
||||
except exception.PolicyNotAuthorized:
|
||||
|
Loading…
x
Reference in New Issue
Block a user