moving image show/update into 'meta' container
This commit is contained in:
@@ -59,7 +59,7 @@ class Controller(object):
|
||||
context = req.environ['nova.context']
|
||||
metadata = self._get_metadata(context, image_id)
|
||||
if id in metadata:
|
||||
return {id: metadata[id]}
|
||||
return {'meta': {id: metadata[id]}}
|
||||
else:
|
||||
return faults.Fault(exc.HTTPNotFound())
|
||||
|
||||
@@ -77,15 +77,22 @@ class Controller(object):
|
||||
|
||||
def update(self, req, image_id, id, body):
|
||||
context = req.environ['nova.context']
|
||||
if not id in body:
|
||||
|
||||
try:
|
||||
meta = body['meta']
|
||||
except KeyError:
|
||||
expl = _('Incorrect request body format')
|
||||
raise exc.HTTPBadRequest(explanation=expl)
|
||||
|
||||
if not id in meta:
|
||||
expl = _('Request body and URI mismatch')
|
||||
raise exc.HTTPBadRequest(explanation=expl)
|
||||
if len(body) > 1:
|
||||
if len(meta) > 1:
|
||||
expl = _('Request body contains too many items')
|
||||
raise exc.HTTPBadRequest(explanation=expl)
|
||||
img = self.image_service.show(context, image_id)
|
||||
metadata = self._get_metadata(context, image_id, img)
|
||||
metadata[id] = body[id]
|
||||
metadata[id] = meta[id]
|
||||
self._check_quota_limit(context, metadata)
|
||||
img['properties'] = metadata
|
||||
self.image_service.update(context, image_id, img, None)
|
||||
|
||||
@@ -111,13 +111,14 @@ class ImageMetaDataTest(unittest.TestCase):
|
||||
res = req.get_response(fakes.wsgi_app())
|
||||
res_dict = json.loads(res.body)
|
||||
self.assertEqual(200, res.status_int)
|
||||
self.assertEqual('value1', res_dict['key1'])
|
||||
self.assertTrue('meta' in res_dict)
|
||||
self.assertEqual(len(res_dict['meta']), 1)
|
||||
self.assertEqual('value1', res_dict['meta']['key1'])
|
||||
|
||||
def test_show_not_found(self):
|
||||
req = webob.Request.blank('/v1.1/images/1/meta/key9')
|
||||
req.environ['api.version'] = '1.1'
|
||||
res = req.get_response(fakes.wsgi_app())
|
||||
res_dict = json.loads(res.body)
|
||||
self.assertEqual(404, res.status_int)
|
||||
|
||||
def test_create(self):
|
||||
@@ -139,18 +140,29 @@ class ImageMetaDataTest(unittest.TestCase):
|
||||
req = webob.Request.blank('/v1.1/images/1/meta/key1')
|
||||
req.environ['api.version'] = '1.1'
|
||||
req.method = 'PUT'
|
||||
req.body = '{"key1": "zz"}'
|
||||
req.body = '{"meta": {"key1": "zz"}}'
|
||||
req.headers["content-type"] = "application/json"
|
||||
res = req.get_response(fakes.wsgi_app())
|
||||
self.assertEqual(200, res.status_int)
|
||||
res_dict = json.loads(res.body)
|
||||
self.assertEqual('zz', res_dict['key1'])
|
||||
self.assertTrue('meta' in res_dict)
|
||||
self.assertEqual(len(res_dict['meta']), 1)
|
||||
self.assertEqual('zz', res_dict['meta']['key1'])
|
||||
|
||||
def test_update_item_bad_body(self):
|
||||
req = webob.Request.blank('/v1.1/images/1/meta/key1')
|
||||
req.environ['api.version'] = '1.1'
|
||||
req.method = 'PUT'
|
||||
req.body = '{"key1": "zz"}'
|
||||
req.headers["content-type"] = "application/json"
|
||||
res = req.get_response(fakes.wsgi_app())
|
||||
self.assertEqual(400, res.status_int)
|
||||
|
||||
def test_update_item_too_many_keys(self):
|
||||
req = webob.Request.blank('/v1.1/images/1/meta/key1')
|
||||
req.environ['api.version'] = '1.1'
|
||||
req.method = 'PUT'
|
||||
req.body = '{"key1": "value1", "key2": "value2"}'
|
||||
req.body = '{"meta": {"key1": "value1", "key2": "value2"}}'
|
||||
req.headers["content-type"] = "application/json"
|
||||
res = req.get_response(fakes.wsgi_app())
|
||||
self.assertEqual(400, res.status_int)
|
||||
@@ -159,7 +171,7 @@ class ImageMetaDataTest(unittest.TestCase):
|
||||
req = webob.Request.blank('/v1.1/images/1/meta/bad')
|
||||
req.environ['api.version'] = '1.1'
|
||||
req.method = 'PUT'
|
||||
req.body = '{"key1": "value1"}'
|
||||
req.body = '{"meta": {"key1": "value1"}}'
|
||||
req.headers["content-type"] = "application/json"
|
||||
res = req.get_response(fakes.wsgi_app())
|
||||
self.assertEqual(400, res.status_int)
|
||||
@@ -195,7 +207,7 @@ class ImageMetaDataTest(unittest.TestCase):
|
||||
req = webob.Request.blank('/v1.1/images/3/meta/blah')
|
||||
req.environ['api.version'] = '1.1'
|
||||
req.method = 'PUT'
|
||||
req.body = '{"blah": "blah"}'
|
||||
req.body = '{"meta": {"blah": "blah"}}'
|
||||
req.headers["content-type"] = "application/json"
|
||||
res = req.get_response(fakes.wsgi_app())
|
||||
self.assertEqual(400, res.status_int)
|
||||
|
||||
Reference in New Issue
Block a user