Improved coverage for glance.api.*

Added new tests for glance.api.v2.image_data,
glance.api.v2.image_members, glance.api.v2.images,
glance.api.v2.schemas, glance.api.v2.image_tags,
glance.api.cached_images.

Part of blueprint improve-api-unit-tests

Change-Id: I2bd39e12366dd1b185bf60a8cd1d03a162ba5896
This commit is contained in:
Sergey Nikitin 2013-12-12 15:14:55 +04:00
parent 8241aef929
commit 0e6885d6fc
6 changed files with 128 additions and 1 deletions

View File

@ -53,6 +53,10 @@ class FakeCache(image_cache.ImageCache):
def delete_cached_image(self, image_id):
self.deleted_images.append(image_id)
def delete_all_cached_images(self):
self.delete_cached_image(self.get_cached_images().get('id'))
return 1
def get_queued_images(self):
return {'test': 'passed'}
@ -62,6 +66,10 @@ class FakeCache(image_cache.ImageCache):
def delete_queued_image(self, image_id):
self.deleted_images.append(image_id)
def delete_all_queued_images(self):
self.delete_queued_image('deleted_img')
return 1
class FakeController(cached_images.Controller):
def __init__(self):
@ -87,12 +95,29 @@ class TestCachedImages(testtools.TestCase):
result = self.controller.get_cached_images(req)
self.assertEqual({'cached_images': {'id': 'test'}}, result)
def test_delete_cached_images(self):
def test_delete_cached_image(self):
req = webob.Request.blank('')
req.context = 'test'
self.controller.delete_cached_image(req, image_id='test')
self.assertEqual(['test'], self.controller.cache.deleted_images)
def test_delete_cached_images(self):
req = webob.Request.blank('')
req.context = 'test'
self.assertEqual({'num_deleted': 1},
self.controller.delete_cached_images(req))
self.assertEqual(['test'], self.controller.cache.deleted_images)
def test_policy_enforce_forbidden(self):
def fake_enforce(context, action, target):
raise exception.Forbidden()
self.controller.policy.enforce = fake_enforce
req = webob.Request.blank('')
req.context = 'test'
self.assertRaises(webob.exc.HTTPForbidden,
self.controller.get_cached_images, req)
def test_get_queued_images(self):
req = webob.Request.blank('')
req.context = 'test'
@ -110,3 +135,11 @@ class TestCachedImages(testtools.TestCase):
self.controller.delete_queued_image(req, 'deleted_img')
self.assertEqual(['deleted_img'],
self.controller.cache.deleted_images)
def test_delete_queued_images(self):
req = webob.Request.blank('')
req.context = 'test'
self.assertEqual({'num_deleted': 1},
self.controller.delete_queued_images(req))
self.assertEqual(['deleted_img'],
self.controller.cache.deleted_images)

View File

@ -192,6 +192,21 @@ class TestImagesController(base.StoreClearingUnitTest):
request, str(uuid.uuid4()), 'ABC', 3)
self.assertTrue(image.delete.called)
def test_upload_non_existent_image_raises_not_found_exception(self):
def fake_save(self):
raise exception.NotFound()
def fake_delete():
raise exception.NotFound()
request = unit_test_utils.get_fake_request()
image = FakeImage('abcd', locations=['http://example.com/image'])
self.image_repo.result = image
self.image_repo.save = fake_save
image.delete = fake_delete
self.assertRaises(webob.exc.HTTPGone, self.controller.upload,
request, str(uuid.uuid4()), 'ABC', 3)
def test_upload_non_existent_image_before_save(self):
request = unit_test_utils.get_fake_request()
self.image_repo.result = exception.NotFound()
@ -226,6 +241,13 @@ class TestImagesController(base.StoreClearingUnitTest):
self.controller.upload,
request, unit_test_utils.UUID1, 'YYYYYYY', 7)
def test_upload_storage_quota_full(self):
request = unit_test_utils.get_fake_request()
self.image_repo.result = exception.StorageQuotaFull("message")
self.assertRaises(webob.exc.HTTPRequestEntityTooLarge,
self.controller.upload,
request, unit_test_utils.UUID1, 'YYYYYYY', 7)
def test_upload_storage_forbidden(self):
request = unit_test_utils.get_fake_request(user=unit_test_utils.USER2)
image = FakeImage()
@ -234,6 +256,13 @@ class TestImagesController(base.StoreClearingUnitTest):
self.assertRaises(webob.exc.HTTPForbidden, self.controller.upload,
request, unit_test_utils.UUID2, 'YY', 2)
def test_upload_storage_internal_error(self):
request = unit_test_utils.get_fake_request()
self.image_repo.result = exception.ServerError()
self.assertRaises(exception.ServerError,
self.controller.upload,
request, unit_test_utils.UUID1, 'ABC', 3)
def test_upload_storage_write_denied(self):
request = unit_test_utils.get_fake_request(user=unit_test_utils.USER3)
image = FakeImage()

View File

@ -308,6 +308,11 @@ class TestImageMembersController(test_utils.BaseTestCase):
self.assertRaises(webob.exc.HTTPForbidden, self.controller.update,
request, UUID2, TENANT4, status='accepted')
def test_update_non_existent_image(self):
request = unit_test_utils.get_fake_request(tenant=TENANT1)
self.assertRaises(webob.exc.HTTPNotFound, self.controller.update,
request, '123', TENANT4, status='accepted')
def test_update_invalid_status(self):
request = unit_test_utils.get_fake_request(tenant=TENANT4)
self.assertRaises(webob.exc.HTTPBadRequest, self.controller.update,

View File

@ -16,8 +16,10 @@
import webob
import glance.api.v2.image_tags
from glance.common import exception
from glance.tests.unit import base
import glance.tests.unit.utils as unit_test_utils
import glance.tests.unit.v2.test_image_data_resource as image_data_tests
import glance.tests.utils as test_utils
@ -50,6 +52,26 @@ class TestImageTagsController(base.IsolatedUnitTest):
tags = self.db.image_tag_get_all(context, unit_test_utils.UUID1)
self.assertEqual(1, len([tag for tag in tags if tag == 'dink']))
def test_update_tag_of_non_existing_image(self):
request = unit_test_utils.get_fake_request()
self.assertRaises(webob.exc.HTTPNotFound, self.controller.update,
request, "abcd", "dink")
def test_delete_tag_forbidden(self):
def fake_get(self):
raise exception.Forbidden()
image_repo = image_data_tests.FakeImageRepo()
image_repo.get = fake_get
def get_fake_repo(self):
return image_repo
self.controller.gateway.get_repo = get_fake_repo
request = unit_test_utils.get_fake_request()
self.assertRaises(webob.exc.HTTPForbidden, self.controller.update,
request, unit_test_utils.UUID1, "ping")
def test_delete_tag(self):
request = unit_test_utils.get_fake_request()
self.controller.delete(request, unit_test_utils.UUID1, 'ping')
@ -59,6 +81,11 @@ class TestImageTagsController(base.IsolatedUnitTest):
self.assertRaises(webob.exc.HTTPNotFound, self.controller.delete,
request, unit_test_utils.UUID1, 'what')
def test_delete_tag_of_non_existing_image(self):
request = unit_test_utils.get_fake_request()
self.assertRaises(webob.exc.HTTPNotFound, self.controller.delete,
request, "abcd", "dink")
class TestImagesSerializer(test_utils.BaseTestCase):

View File

@ -661,6 +661,14 @@ class TestImagesController(base.IsolatedUnitTest):
request, image={}, extra_properties={},
tags=tags)
def test_create_with_duplicate_location(self):
request = unit_test_utils.get_fake_request()
location = {'url': '%s/fake_location' % BASE_URI, 'metadata': {}}
image = {'name': 'image-1', 'locations': [location, location]}
self.assertRaises(webob.exc.HTTPBadRequest, self.controller.create,
request, image=image, extra_properties={},
tags=[])
def test_update_no_changes(self):
request = unit_test_utils.get_fake_request()
output = self.controller.update(request, UUID1, changes=[])
@ -696,6 +704,16 @@ class TestImagesController(base.IsolatedUnitTest):
self.assertRaises(webob.exc.HTTPNotFound, self.controller.update,
request, UUID1, changes=[])
def test_update_with_too_many_properties(self):
self.config(user_storage_quota='1')
new_location = {'url': '%s/fake_location' % BASE_URI, 'metadata': {}}
request = unit_test_utils.get_fake_request()
changes = [{'op': 'add', 'path': ['locations', '-'],
'value': new_location}]
self.assertRaises(webob.exc.HTTPRequestEntityTooLarge,
self.controller.update,
request, UUID1, changes=changes)
def test_update_replace_base_attribute(self):
self.db.image_update(None, UUID1, {'properties': {'foo': 'bar'}})
request = unit_test_utils.get_fake_request()

View File

@ -44,3 +44,18 @@ class TestSchemasController(test_utils.BaseTestCase):
expected = set(['{schema}', '{first}', '{next}'])
actual = set([link['href'] for link in output['links']])
self.assertEqual(actual, expected)
def test_member(self):
req = unit_test_utils.get_fake_request()
output = self.controller.member(req)
self.assertEqual(output['name'], 'member')
expected = set(['status', 'created_at', 'updated_at', 'image_id',
'member_id', 'schema'])
self.assertEqual(expected, set(output['properties'].keys()))
def test_members(self):
req = unit_test_utils.get_fake_request()
output = self.controller.members(req)
self.assertEqual(output['name'], 'members')
expected = set(['schema', 'members'])
self.assertEqual(expected, set(output['properties'].keys()))