diff --git a/glance/tests/unit/test_cached_images.py b/glance/tests/unit/test_cached_images.py index c0360384..9bc8fcd4 100644 --- a/glance/tests/unit/test_cached_images.py +++ b/glance/tests/unit/test_cached_images.py @@ -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) diff --git a/glance/tests/unit/v2/test_image_data_resource.py b/glance/tests/unit/v2/test_image_data_resource.py index 49f91b51..2fd700bb 100644 --- a/glance/tests/unit/v2/test_image_data_resource.py +++ b/glance/tests/unit/v2/test_image_data_resource.py @@ -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() diff --git a/glance/tests/unit/v2/test_image_members_resource.py b/glance/tests/unit/v2/test_image_members_resource.py index af6f7737..f2f2525c 100644 --- a/glance/tests/unit/v2/test_image_members_resource.py +++ b/glance/tests/unit/v2/test_image_members_resource.py @@ -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, diff --git a/glance/tests/unit/v2/test_image_tags_resource.py b/glance/tests/unit/v2/test_image_tags_resource.py index dee9c095..6c68e2b6 100644 --- a/glance/tests/unit/v2/test_image_tags_resource.py +++ b/glance/tests/unit/v2/test_image_tags_resource.py @@ -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): diff --git a/glance/tests/unit/v2/test_images_resource.py b/glance/tests/unit/v2/test_images_resource.py index 05efca52..47a0f65c 100644 --- a/glance/tests/unit/v2/test_images_resource.py +++ b/glance/tests/unit/v2/test_images_resource.py @@ -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() diff --git a/glance/tests/unit/v2/test_schemas_resource.py b/glance/tests/unit/v2/test_schemas_resource.py index 3d3259e6..8e7c2a87 100644 --- a/glance/tests/unit/v2/test_schemas_resource.py +++ b/glance/tests/unit/v2/test_schemas_resource.py @@ -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()))