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:
parent
8241aef929
commit
0e6885d6fc
|
@ -53,6 +53,10 @@ class FakeCache(image_cache.ImageCache):
|
||||||
def delete_cached_image(self, image_id):
|
def delete_cached_image(self, image_id):
|
||||||
self.deleted_images.append(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):
|
def get_queued_images(self):
|
||||||
return {'test': 'passed'}
|
return {'test': 'passed'}
|
||||||
|
|
||||||
|
@ -62,6 +66,10 @@ class FakeCache(image_cache.ImageCache):
|
||||||
def delete_queued_image(self, image_id):
|
def delete_queued_image(self, image_id):
|
||||||
self.deleted_images.append(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):
|
class FakeController(cached_images.Controller):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
|
@ -87,12 +95,29 @@ class TestCachedImages(testtools.TestCase):
|
||||||
result = self.controller.get_cached_images(req)
|
result = self.controller.get_cached_images(req)
|
||||||
self.assertEqual({'cached_images': {'id': 'test'}}, result)
|
self.assertEqual({'cached_images': {'id': 'test'}}, result)
|
||||||
|
|
||||||
def test_delete_cached_images(self):
|
def test_delete_cached_image(self):
|
||||||
req = webob.Request.blank('')
|
req = webob.Request.blank('')
|
||||||
req.context = 'test'
|
req.context = 'test'
|
||||||
self.controller.delete_cached_image(req, image_id='test')
|
self.controller.delete_cached_image(req, image_id='test')
|
||||||
self.assertEqual(['test'], self.controller.cache.deleted_images)
|
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):
|
def test_get_queued_images(self):
|
||||||
req = webob.Request.blank('')
|
req = webob.Request.blank('')
|
||||||
req.context = 'test'
|
req.context = 'test'
|
||||||
|
@ -110,3 +135,11 @@ class TestCachedImages(testtools.TestCase):
|
||||||
self.controller.delete_queued_image(req, 'deleted_img')
|
self.controller.delete_queued_image(req, 'deleted_img')
|
||||||
self.assertEqual(['deleted_img'],
|
self.assertEqual(['deleted_img'],
|
||||||
self.controller.cache.deleted_images)
|
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)
|
||||||
|
|
|
@ -192,6 +192,21 @@ class TestImagesController(base.StoreClearingUnitTest):
|
||||||
request, str(uuid.uuid4()), 'ABC', 3)
|
request, str(uuid.uuid4()), 'ABC', 3)
|
||||||
self.assertTrue(image.delete.called)
|
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):
|
def test_upload_non_existent_image_before_save(self):
|
||||||
request = unit_test_utils.get_fake_request()
|
request = unit_test_utils.get_fake_request()
|
||||||
self.image_repo.result = exception.NotFound()
|
self.image_repo.result = exception.NotFound()
|
||||||
|
@ -226,6 +241,13 @@ class TestImagesController(base.StoreClearingUnitTest):
|
||||||
self.controller.upload,
|
self.controller.upload,
|
||||||
request, unit_test_utils.UUID1, 'YYYYYYY', 7)
|
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):
|
def test_upload_storage_forbidden(self):
|
||||||
request = unit_test_utils.get_fake_request(user=unit_test_utils.USER2)
|
request = unit_test_utils.get_fake_request(user=unit_test_utils.USER2)
|
||||||
image = FakeImage()
|
image = FakeImage()
|
||||||
|
@ -234,6 +256,13 @@ class TestImagesController(base.StoreClearingUnitTest):
|
||||||
self.assertRaises(webob.exc.HTTPForbidden, self.controller.upload,
|
self.assertRaises(webob.exc.HTTPForbidden, self.controller.upload,
|
||||||
request, unit_test_utils.UUID2, 'YY', 2)
|
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):
|
def test_upload_storage_write_denied(self):
|
||||||
request = unit_test_utils.get_fake_request(user=unit_test_utils.USER3)
|
request = unit_test_utils.get_fake_request(user=unit_test_utils.USER3)
|
||||||
image = FakeImage()
|
image = FakeImage()
|
||||||
|
|
|
@ -308,6 +308,11 @@ class TestImageMembersController(test_utils.BaseTestCase):
|
||||||
self.assertRaises(webob.exc.HTTPForbidden, self.controller.update,
|
self.assertRaises(webob.exc.HTTPForbidden, self.controller.update,
|
||||||
request, UUID2, TENANT4, status='accepted')
|
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):
|
def test_update_invalid_status(self):
|
||||||
request = unit_test_utils.get_fake_request(tenant=TENANT4)
|
request = unit_test_utils.get_fake_request(tenant=TENANT4)
|
||||||
self.assertRaises(webob.exc.HTTPBadRequest, self.controller.update,
|
self.assertRaises(webob.exc.HTTPBadRequest, self.controller.update,
|
||||||
|
|
|
@ -16,8 +16,10 @@
|
||||||
import webob
|
import webob
|
||||||
|
|
||||||
import glance.api.v2.image_tags
|
import glance.api.v2.image_tags
|
||||||
|
from glance.common import exception
|
||||||
from glance.tests.unit import base
|
from glance.tests.unit import base
|
||||||
import glance.tests.unit.utils as unit_test_utils
|
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
|
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)
|
tags = self.db.image_tag_get_all(context, unit_test_utils.UUID1)
|
||||||
self.assertEqual(1, len([tag for tag in tags if tag == 'dink']))
|
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):
|
def test_delete_tag(self):
|
||||||
request = unit_test_utils.get_fake_request()
|
request = unit_test_utils.get_fake_request()
|
||||||
self.controller.delete(request, unit_test_utils.UUID1, 'ping')
|
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,
|
self.assertRaises(webob.exc.HTTPNotFound, self.controller.delete,
|
||||||
request, unit_test_utils.UUID1, 'what')
|
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):
|
class TestImagesSerializer(test_utils.BaseTestCase):
|
||||||
|
|
||||||
|
|
|
@ -661,6 +661,14 @@ class TestImagesController(base.IsolatedUnitTest):
|
||||||
request, image={}, extra_properties={},
|
request, image={}, extra_properties={},
|
||||||
tags=tags)
|
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):
|
def test_update_no_changes(self):
|
||||||
request = unit_test_utils.get_fake_request()
|
request = unit_test_utils.get_fake_request()
|
||||||
output = self.controller.update(request, UUID1, changes=[])
|
output = self.controller.update(request, UUID1, changes=[])
|
||||||
|
@ -696,6 +704,16 @@ class TestImagesController(base.IsolatedUnitTest):
|
||||||
self.assertRaises(webob.exc.HTTPNotFound, self.controller.update,
|
self.assertRaises(webob.exc.HTTPNotFound, self.controller.update,
|
||||||
request, UUID1, changes=[])
|
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):
|
def test_update_replace_base_attribute(self):
|
||||||
self.db.image_update(None, UUID1, {'properties': {'foo': 'bar'}})
|
self.db.image_update(None, UUID1, {'properties': {'foo': 'bar'}})
|
||||||
request = unit_test_utils.get_fake_request()
|
request = unit_test_utils.get_fake_request()
|
||||||
|
|
|
@ -44,3 +44,18 @@ class TestSchemasController(test_utils.BaseTestCase):
|
||||||
expected = set(['{schema}', '{first}', '{next}'])
|
expected = set(['{schema}', '{first}', '{next}'])
|
||||||
actual = set([link['href'] for link in output['links']])
|
actual = set([link['href'] for link in output['links']])
|
||||||
self.assertEqual(actual, expected)
|
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()))
|
||||||
|
|
Loading…
Reference in New Issue