From 1f90c7c6555e042cda1371a22c9891713a3f6430 Mon Sep 17 00:00:00 2001 From: Dan Prince Date: Wed, 23 Mar 2011 13:01:59 -0400 Subject: Implement v1.1 image metadata. --- nova/tests/api/openstack/test_image_metadata.py | 166 ++++++++++++++++++++++++ 1 file changed, 166 insertions(+) create mode 100644 nova/tests/api/openstack/test_image_metadata.py (limited to 'nova/tests') diff --git a/nova/tests/api/openstack/test_image_metadata.py b/nova/tests/api/openstack/test_image_metadata.py new file mode 100644 index 000000000..81280bd97 --- /dev/null +++ b/nova/tests/api/openstack/test_image_metadata.py @@ -0,0 +1,166 @@ +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +# Copyright 2011 OpenStack LLC. +# 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 json +import stubout +import unittest +import webob + + +from nova import flags +from nova.api import openstack +from nova.tests.api.openstack import fakes +import nova.wsgi + + +FLAGS = flags.FLAGS + + +class ImageMetaDataTest(unittest.TestCase): + + IMAGE_FIXTURES = [ + {'status': 'active', + 'name': 'image1', + 'deleted': False, + 'container_format': None, + 'created_at': '2011-03-22T17: 40: 15.492626', + 'disk_format': None, + 'updated_at': '2011-03-22T17: 40: 15.591556', + 'id': '1', + 'location': 'file: ///var/lib/glance/images/1', + 'is_public': True, + 'deleted_at': None, + 'properties': { + 'type': 'ramdisk', + 'key1': 'value1', + 'key2': 'value2' + }, + 'size': 5882349}, + {'status': 'active', + 'name': 'image2', + 'deleted': False, + 'container_format': None, + 'created_at': '2011-03-22T17: 40: 15.492626', + 'disk_format': None, + 'updated_at': '2011-03-22T17: 40: 15.591556', + 'id': '2', + 'location': 'file: ///var/lib/glance/images/2', + 'is_public': True, + 'deleted_at': None, + 'properties': { + 'type': 'ramdisk', + 'key1': 'value1', + 'key2': 'value2' + }, + 'size': 5882349} + ] + + def setUp(self): + super(ImageMetaDataTest, self).setUp() + self.stubs = stubout.StubOutForTesting() + self.orig_image_service = FLAGS.image_service + FLAGS.image_service = 'nova.image.glance.GlanceImageService' + fakes.FakeAuthManager.auth_data = {} + fakes.FakeAuthDatabase.data = {} + fakes.stub_out_auth(self.stubs) + fakes.stub_out_glance(self.stubs, self.IMAGE_FIXTURES) + + def tearDown(self): + self.stubs.UnsetAll() + FLAGS.image_service = self.orig_image_service + super(ImageMetaDataTest, self).tearDown() + + def test_index(self): + req = webob.Request.blank('/v1.1/images/1/meta') + req.environ['api.version'] = '1.1' + res = req.get_response(fakes.wsgi_app()) + res_dict = json.loads(res.body) + self.assertEqual(200, res.status_int) + self.assertEqual('value1', res_dict['metadata']['key1']) + + def test_show(self): + req = webob.Request.blank('/v1.1/images/1/meta/key1') + req.environ['api.version'] = '1.1' + 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']) + + 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): + req = webob.Request.blank('/v1.1/images/2/meta') + req.environ['api.version'] = '1.1' + req.method = 'POST' + req.body = '{"metadata": {"key9": "value9"}}' + req.headers["content-type"] = "application/json" + res = req.get_response(fakes.wsgi_app()) + res_dict = json.loads(res.body) + self.assertEqual(200, res.status_int) + self.assertEqual('value9', res_dict['metadata']['key9']) + # other items should not be modified + self.assertEqual('value1', res_dict['metadata']['key1']) + self.assertEqual('value2', res_dict['metadata']['key2']) + self.assertEqual(1, len(res_dict)) + + def test_update_item(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(200, res.status_int) + res_dict = json.loads(res.body) + self.assertEqual('zz', res_dict['key1']) + + 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.headers["content-type"] = "application/json" + res = req.get_response(fakes.wsgi_app()) + self.assertEqual(400, res.status_int) + + def test_update_item_body_uri_mismatch(self): + req = webob.Request.blank('/v1.1/images/1/meta/bad') + req.environ['api.version'] = '1.1' + req.method = 'PUT' + req.body = '{"key1": "value1"}' + req.headers["content-type"] = "application/json" + res = req.get_response(fakes.wsgi_app()) + self.assertEqual(400, res.status_int) + + def test_delete(self): + req = webob.Request.blank('/v1.1/images/2/meta/key1') + req.environ['api.version'] = '1.1' + req.method = 'DELETE' + res = req.get_response(fakes.wsgi_app()) + self.assertEqual(200, res.status_int) + + def test_delete_not_found(self): + req = webob.Request.blank('/v1.1/images/2/meta/blah') + req.environ['api.version'] = '1.1' + req.method = 'DELETE' + res = req.get_response(fakes.wsgi_app()) + self.assertEqual(404, res.status_int) -- cgit From 96e8ef1049848563b60e457ab88adfb37b2dc473 Mon Sep 17 00:00:00 2001 From: Dan Prince Date: Thu, 24 Mar 2011 10:25:36 -0400 Subject: Couple of pep8 fixes. --- nova/tests/api/openstack/test_image_metadata.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'nova/tests') diff --git a/nova/tests/api/openstack/test_image_metadata.py b/nova/tests/api/openstack/test_image_metadata.py index 81280bd97..46f7e5490 100644 --- a/nova/tests/api/openstack/test_image_metadata.py +++ b/nova/tests/api/openstack/test_image_metadata.py @@ -41,7 +41,7 @@ class ImageMetaDataTest(unittest.TestCase): 'disk_format': None, 'updated_at': '2011-03-22T17: 40: 15.591556', 'id': '1', - 'location': 'file: ///var/lib/glance/images/1', + 'location': 'file:///var/lib/glance/images/1', 'is_public': True, 'deleted_at': None, 'properties': { @@ -58,7 +58,7 @@ class ImageMetaDataTest(unittest.TestCase): 'disk_format': None, 'updated_at': '2011-03-22T17: 40: 15.591556', 'id': '2', - 'location': 'file: ///var/lib/glance/images/2', + 'location': 'file:///var/lib/glance/images/2', 'is_public': True, 'deleted_at': None, 'properties': { @@ -66,7 +66,7 @@ class ImageMetaDataTest(unittest.TestCase): 'key1': 'value1', 'key2': 'value2' }, - 'size': 5882349} + 'size': 5882349}, ] def setUp(self): -- cgit From d91102e1ce73b5b2e1f5fbcc380814f1673cefa3 Mon Sep 17 00:00:00 2001 From: Mark Washenberger Date: Thu, 24 Mar 2011 12:46:41 -0400 Subject: get image metadata tests working after the datetime interface change in image services --- nova/tests/api/openstack/fakes.py | 8 ++++++-- nova/tests/api/openstack/test_image_metadata.py | 8 ++++---- 2 files changed, 10 insertions(+), 6 deletions(-) (limited to 'nova/tests') diff --git a/nova/tests/api/openstack/fakes.py b/nova/tests/api/openstack/fakes.py index 56143114d..7002c3a74 100644 --- a/nova/tests/api/openstack/fakes.py +++ b/nova/tests/api/openstack/fakes.py @@ -168,15 +168,19 @@ def stub_out_glance(stubs, initial_fixtures=None): id = ''.join(random.choice(string.letters) for _ in range(20)) image_meta['id'] = id self.fixtures.append(image_meta) - return image_meta + return copy.deepcopy(image_meta) def fake_update_image(self, image_id, image_meta, data=None): + for attr in ('created_at', 'updated_at', 'deleted_at', 'deleted'): + if attr in image_meta: + del image_meta[attr] + f = self._find_image(image_id) if not f: raise glance_exc.NotFound f.update(image_meta) - return f + return copy.deepcopy(f) def fake_delete_image(self, image_id): f = self._find_image(image_id) diff --git a/nova/tests/api/openstack/test_image_metadata.py b/nova/tests/api/openstack/test_image_metadata.py index 46f7e5490..33ef1a0a3 100644 --- a/nova/tests/api/openstack/test_image_metadata.py +++ b/nova/tests/api/openstack/test_image_metadata.py @@ -37,9 +37,9 @@ class ImageMetaDataTest(unittest.TestCase): 'name': 'image1', 'deleted': False, 'container_format': None, - 'created_at': '2011-03-22T17: 40: 15.492626', + 'created_at': '2011-03-22T17:40:15.492626', 'disk_format': None, - 'updated_at': '2011-03-22T17: 40: 15.591556', + 'updated_at': '2011-03-22T17:40:15.591556', 'id': '1', 'location': 'file:///var/lib/glance/images/1', 'is_public': True, @@ -54,9 +54,9 @@ class ImageMetaDataTest(unittest.TestCase): 'name': 'image2', 'deleted': False, 'container_format': None, - 'created_at': '2011-03-22T17: 40: 15.492626', + 'created_at': '2011-03-22T17:40:15.492626', 'disk_format': None, - 'updated_at': '2011-03-22T17: 40: 15.591556', + 'updated_at': '2011-03-22T17:40:15.591556', 'id': '2', 'location': 'file:///var/lib/glance/images/2', 'is_public': True, -- cgit From f533c441c0062d05c7c361208016e56ca8f5e9df Mon Sep 17 00:00:00 2001 From: Dan Prince Date: Fri, 25 Mar 2011 09:28:36 -0400 Subject: Fix unit tests w/ latest trunk merge. --- nova/tests/api/openstack/test_image_metadata.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'nova/tests') diff --git a/nova/tests/api/openstack/test_image_metadata.py b/nova/tests/api/openstack/test_image_metadata.py index 33ef1a0a3..9be753f84 100644 --- a/nova/tests/api/openstack/test_image_metadata.py +++ b/nova/tests/api/openstack/test_image_metadata.py @@ -37,9 +37,9 @@ class ImageMetaDataTest(unittest.TestCase): 'name': 'image1', 'deleted': False, 'container_format': None, - 'created_at': '2011-03-22T17:40:15.492626', + 'created_at': '2011-03-22T17:40:15', 'disk_format': None, - 'updated_at': '2011-03-22T17:40:15.591556', + 'updated_at': '2011-03-22T17:40:15', 'id': '1', 'location': 'file:///var/lib/glance/images/1', 'is_public': True, @@ -54,9 +54,9 @@ class ImageMetaDataTest(unittest.TestCase): 'name': 'image2', 'deleted': False, 'container_format': None, - 'created_at': '2011-03-22T17:40:15.492626', + 'created_at': '2011-03-22T17:40:15', 'disk_format': None, - 'updated_at': '2011-03-22T17:40:15.591556', + 'updated_at': '2011-03-22T17:40:15', 'id': '2', 'location': 'file:///var/lib/glance/images/2', 'is_public': True, -- cgit