summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrian Waldon <brian.waldon@rackspace.com>2011-09-06 09:24:24 -0400
committerBrian Waldon <brian.waldon@rackspace.com>2011-09-06 09:24:24 -0400
commitc87009f009cb749dbccd6bd155ec1a6800631ae1 (patch)
treec81141a0e575f35aebbbd0fdd1ea212782dd5743
parent9347124127624bd949a986bab348a81085a91a1c (diff)
downloadnova-c87009f009cb749dbccd6bd155ec1a6800631ae1.tar.gz
nova-c87009f009cb749dbccd6bd155ec1a6800631ae1.tar.xz
nova-c87009f009cb749dbccd6bd155ec1a6800631ae1.zip
cleaning up tests
-rw-r--r--nova/image/glance.py2
-rw-r--r--nova/tests/image/test_glance.py549
2 files changed, 250 insertions, 301 deletions
diff --git a/nova/image/glance.py b/nova/image/glance.py
index f0d39dfb6..8920a5d8a 100644
--- a/nova/image/glance.py
+++ b/nova/image/glance.py
@@ -280,7 +280,7 @@ class GlanceImageService(object):
if hasattr(context, 'auth_token') and context.auth_token:
return True
- properties = image_meta['properties']
+ properties = image_meta.get('properties', {})
if context.project_id and ('project_id' in properties):
return str(properties['project_id']) == str(context.project_id)
diff --git a/nova/tests/image/test_glance.py b/nova/tests/image/test_glance.py
index e4324d24b..f77117ca0 100644
--- a/nova/tests/image/test_glance.py
+++ b/nova/tests/image/test_glance.py
@@ -18,20 +18,18 @@
import datetime
import stubout
-import unittest
from nova.tests.api.openstack import fakes
from nova import context
from nova import exception
from nova.image import glance
from nova import test
-from nova import utils
class StubGlanceClient(object):
- def __init__(self, images, add_response=None, update_response=None):
- self.images = images
+ def __init__(self, images=None, add_response=None, update_response=None):
+ self.images = images or []
self.add_response = add_response
self.update_response = update_response
@@ -39,28 +37,51 @@ class StubGlanceClient(object):
pass
def get_image_meta(self, image_id):
- return self.images[image_id]
+ for image in self.images:
+ if image['id'] == image_id:
+ return image
+ raise exception.ImageNotFound(image_id=image_id)
- def get_images_detailed(self, filters=None, marker=None, limit=None):
- images = self.images.values()
+ #TODO(bcwaldon): implement filters
+ def get_images_detailed(self, filters=None, marker=None, limit=3):
if marker is None:
index = 0
else:
- for index, image in enumerate(images):
+ for index, image in enumerate(self.images):
if image['id'] == marker:
index += 1
break
- # default to a page size of 3 to ensure we flex the pagination code
- return images[index:index + 3]
+
+ return self.images[index:index + limit]
def get_image(self, image_id):
- return self.images[image_id], []
+ return self.get_image_meta(image_id), []
def add_image(self, metadata, data):
- return self.add_response
+ self.images.append(metadata)
+
+ try:
+ image_id = int(metadata['id'])
+ except KeyError:
+ # auto-generate an id if one wasn't provided
+ image_id = len(self.images)
+ metadata['id'] = image_id
+
+ return metadata
def update_image(self, image_id, metadata, data):
- return self.update_response
+ for i, image in enumerate(self.images):
+ if image['id'] == image_id:
+ self.images[i].update(metadata)
+ return self.images[i]
+ raise exception.ImageNotFound(image_id=image_id)
+
+ def delete_image(self, image_id):
+ for i, image in enumerate(self.images):
+ if image['id'] == image_id:
+ del self.images[i]
+ return
+ raise exception.ImageNotFound(image_id=image_id)
class NullWriter(object):
@@ -70,230 +91,7 @@ class NullWriter(object):
pass
-class BaseGlanceTest(unittest.TestCase):
- NOW_GLANCE_OLD_FORMAT = "2010-10-11T10:30:22"
- NOW_GLANCE_FORMAT = "2010-10-11T10:30:22.000000"
- NOW_DATETIME = datetime.datetime(2010, 10, 11, 10, 30, 22)
-
- def setUp(self):
- self.client = StubGlanceClient(None)
- self.service = glance.GlanceImageService(client=self.client)
- self.context = context.RequestContext(None, None)
-
- def assertDateTimesFilled(self, image_meta):
- self.assertEqual(image_meta['created_at'], self.NOW_DATETIME)
- self.assertEqual(image_meta['updated_at'], self.NOW_DATETIME)
- self.assertEqual(image_meta['deleted_at'], self.NOW_DATETIME)
-
- def assertDateTimesEmpty(self, image_meta):
- self.assertEqual(image_meta['updated_at'], None)
- self.assertEqual(image_meta['deleted_at'], None)
-
- def assertDateTimesBlank(self, image_meta):
- self.assertEqual(image_meta['updated_at'], '')
- self.assertEqual(image_meta['deleted_at'], '')
-
-
-class TestGlanceImageServiceProperties(BaseGlanceTest):
- """
- Ensure attributes which aren't base attributes are ignored.
-
- Missingattributes should be added as None
-
- """
-
- def test_show_passes_through_to_client(self):
- fixtures = {'image1': {'id': '1', 'name': 'image1', 'is_public': True,
- 'foo': 'bar',
- 'properties': {'prop1': 'propvalue1'}}}
- self.client.images = fixtures
- image_meta = self.service.show(self.context, 'image1')
-
- expected = {'id': '1', 'name': 'image1', 'is_public': True,
- 'size': None, 'location': None, 'disk_format': None,
- 'container_format': None, 'checksum': None,
- 'created_at': None, 'updated_at': None,
- 'deleted_at': None, 'deleted': None, 'status': None,
- 'properties': {'prop1': 'propvalue1'}}
- self.assertEqual(image_meta, expected)
-
- def test_show_raises_when_no_authtoken_in_the_context(self):
- fixtures = {'image1': {'name': 'image1', 'is_public': False,
- 'foo': 'bar',
- 'properties': {'prop1': 'propvalue1'}}}
- self.client.images = fixtures
- self.context.auth_token = False
-
- expected = {'name': 'image1', 'is_public': True,
- 'properties': {'prop1': 'propvalue1', 'foo': 'bar'}}
- self.assertRaises(exception.ImageNotFound,
- self.service.show, self.context, 'image1')
-
- def test_show_passes_through_to_client_with_authtoken_in_context(self):
- fixtures = {'image1': {'name': 'image1', 'is_public': False,
- 'foo': 'bar',
- 'properties': {'prop1': 'propvalue1'}}}
- self.client.images = fixtures
- self.context.auth_token = True
-
- expected = {'name': 'image1', 'is_public': False,
- 'properties': {'prop1': 'propvalue1', 'foo': 'bar'}}
-
- image_meta = self.service.show(self.context, 'image1')
- self.assertEqual(image_meta, expected)
-
- def test_detail_passes_through_to_client(self):
- fixtures = {'image1': {'id': '1', 'name': 'image1', 'is_public': True,
- 'foo': 'bar',
- 'properties': {'prop1': 'propvalue1'}}}
- self.client.images = fixtures
- image_meta = self.service.detail(self.context)
- expected = [{'id': '1', 'name': 'image1', 'is_public': True,
- 'size': None, 'location': None, 'disk_format': None,
- 'container_format': None, 'checksum': None,
- 'created_at': None, 'updated_at': None,
- 'deleted_at': None, 'deleted': None, 'status': None,
- 'properties': {'prop1': 'propvalue1'}}]
- self.assertEqual(image_meta, expected)
-
-
-class TestGetterDateTimeNoneTests(BaseGlanceTest):
-
- def test_show_handles_none_datetimes(self):
- self.client.images = self._make_none_datetime_fixtures()
- image_meta = self.service.show(self.context, 'image1')
- self.assertDateTimesEmpty(image_meta)
-
- def test_show_handles_blank_datetimes(self):
- self.client.images = self._make_blank_datetime_fixtures()
- image_meta = self.service.show(self.context, 'image1')
- self.assertDateTimesBlank(image_meta)
-
- def test_detail_handles_none_datetimes(self):
- self.client.images = self._make_none_datetime_fixtures()
- image_meta = self.service.detail(self.context)[0]
- self.assertDateTimesEmpty(image_meta)
-
- def test_detail_handles_blank_datetimes(self):
- self.client.images = self._make_blank_datetime_fixtures()
- image_meta = self.service.detail(self.context)[0]
- self.assertDateTimesBlank(image_meta)
-
- def test_get_handles_none_datetimes(self):
- self.client.images = self._make_none_datetime_fixtures()
- writer = NullWriter()
- image_meta = self.service.get(self.context, 'image1', writer)
- self.assertDateTimesEmpty(image_meta)
-
- def test_get_handles_blank_datetimes(self):
- self.client.images = self._make_blank_datetime_fixtures()
- writer = NullWriter()
- image_meta = self.service.get(self.context, 'image1', writer)
- self.assertDateTimesBlank(image_meta)
-
- def test_show_makes_datetimes(self):
- self.client.images = self._make_datetime_fixtures()
- image_meta = self.service.show(self.context, 'image1')
- self.assertDateTimesFilled(image_meta)
- image_meta = self.service.show(self.context, 'image2')
- self.assertDateTimesFilled(image_meta)
-
- def test_detail_makes_datetimes(self):
- self.client.images = self._make_datetime_fixtures()
- image_meta = self.service.detail(self.context)[0]
- self.assertDateTimesFilled(image_meta)
- image_meta = self.service.detail(self.context)[1]
- self.assertDateTimesFilled(image_meta)
-
- def test_get_makes_datetimes(self):
- self.client.images = self._make_datetime_fixtures()
- writer = NullWriter()
- image_meta = self.service.get(self.context, 'image1', writer)
- self.assertDateTimesFilled(image_meta)
- image_meta = self.service.get(self.context, 'image2', writer)
- self.assertDateTimesFilled(image_meta)
-
- def _make_datetime_fixtures(self):
- fixtures = {
- 'image1': {
- 'id': '1',
- 'name': 'image1',
- 'is_public': True,
- 'created_at': self.NOW_GLANCE_FORMAT,
- 'updated_at': self.NOW_GLANCE_FORMAT,
- 'deleted_at': self.NOW_GLANCE_FORMAT,
- },
- 'image2': {
- 'id': '2',
- 'name': 'image2',
- 'is_public': True,
- 'created_at': self.NOW_GLANCE_OLD_FORMAT,
- 'updated_at': self.NOW_GLANCE_OLD_FORMAT,
- 'deleted_at': self.NOW_GLANCE_OLD_FORMAT,
- },
- }
- return fixtures
-
- def _make_none_datetime_fixtures(self):
- fixtures = {'image1': {'id': '1',
- 'name': 'image1',
- 'is_public': True,
- 'updated_at': None,
- 'deleted_at': None}}
- return fixtures
-
- def _make_blank_datetime_fixtures(self):
- fixtures = {'image1': {'id': '1',
- 'name': 'image1',
- 'is_public': True,
- 'updated_at': '',
- 'deleted_at': ''}}
- return fixtures
-
-
-class TestMutatorDateTimeTests(BaseGlanceTest):
- """Tests create(), update()"""
-
- def test_create_handles_datetimes(self):
- self.client.add_response = self._make_datetime_fixture()
- image_meta = self.service.create(self.context, {})
- self.assertDateTimesFilled(image_meta)
-
- def test_create_handles_none_datetimes(self):
- self.client.add_response = self._make_none_datetime_fixture()
- dummy_meta = {}
- image_meta = self.service.create(self.context, dummy_meta)
- self.assertDateTimesEmpty(image_meta)
-
- def test_update_handles_datetimes(self):
- self.client.images = {'image1': self._make_datetime_fixture()}
- self.client.update_response = self._make_datetime_fixture()
- dummy_meta = {}
- image_meta = self.service.update(self.context, 'image1', dummy_meta)
- self.assertDateTimesFilled(image_meta)
-
- def test_update_handles_none_datetimes(self):
- self.client.images = {'image1': self._make_datetime_fixture()}
- self.client.update_response = self._make_none_datetime_fixture()
- dummy_meta = {}
- image_meta = self.service.update(self.context, 'image1', dummy_meta)
- self.assertDateTimesEmpty(image_meta)
-
- def _make_datetime_fixture(self):
- fixture = {'id': 'image1', 'name': 'image1', 'is_public': True,
- 'created_at': self.NOW_GLANCE_FORMAT,
- 'updated_at': self.NOW_GLANCE_FORMAT,
- 'deleted_at': self.NOW_GLANCE_FORMAT}
- return fixture
-
- def _make_none_datetime_fixture(self):
- fixture = {'id': 'image1', 'name': 'image1', 'is_public': True,
- 'updated_at': None,
- 'deleted_at': None}
- return fixture
-
-
-class TestGlanceSerializer(unittest.TestCase):
+class TestGlanceSerializer(test.TestCase):
def test_serialize(self):
metadata = {'name': 'image1',
'is_public': True,
@@ -329,7 +127,7 @@ class TestGlanceSerializer(unittest.TestCase):
self.assertEqual(glance._convert_from_string(converted), metadata)
-class GlanceImageServiceTest(test.TestCase):
+class TestGlanceImageService(test.TestCase):
"""
Tests the Glance image service.
@@ -342,34 +140,74 @@ class GlanceImageServiceTest(test.TestCase):
APIs (OpenStack, EC2)
"""
- def __init__(self, *args, **kwargs):
- super(GlanceImageServiceTest, self).__init__(*args, **kwargs)
- self.service = None
- self.context = None
-
- @staticmethod
- def _make_fixture(name):
- fixture = {'name': name,
- 'properties': {'one': 'two'},
- 'status': None,
- 'is_public': True}
- return fixture
+ NOW_GLANCE_OLD_FORMAT = "2010-10-11T10:30:22"
+ NOW_GLANCE_FORMAT = "2010-10-11T10:30:22.000000"
+ NOW_DATETIME = datetime.datetime(2010, 10, 11, 10, 30, 22)
def setUp(self):
- super(GlanceImageServiceTest, self).setUp()
+ super(TestGlanceImageService, self).setUp()
self.stubs = stubout.StubOutForTesting()
fakes.stub_out_glance(self.stubs)
fakes.stub_out_compute_api_snapshot(self.stubs)
- service_class = 'nova.image.glance.GlanceImageService'
- self.service = utils.import_object(service_class)
- self.context = context.RequestContext('fake', 'fake')
+ self.client = StubGlanceClient()
+ self.service = glance.GlanceImageService(client=self.client)
+ self.context = context.RequestContext('fake', 'fake', auth_token=True)
self.service.delete_all()
- self.sent_to_glance = {}
- fakes.stub_out_glance_add_image(self.stubs, self.sent_to_glance)
def tearDown(self):
self.stubs.UnsetAll()
- super(GlanceImageServiceTest, self).tearDown()
+ super(TestGlanceImageService, self).tearDown()
+
+
+ @staticmethod
+ def _make_fixture(**kwargs):
+ fixture = {'name': None,
+ 'properties': {},
+ 'status': None,
+ 'is_public': None}
+ fixture.update(kwargs)
+ return fixture
+
+ def _make_datetime_fixtures(self):
+ return [
+ {
+ 'id': '1',
+ 'name': 'image1',
+ 'is_public': True,
+ 'created_at': self.NOW_GLANCE_FORMAT,
+ 'updated_at': self.NOW_GLANCE_FORMAT,
+ 'deleted_at': self.NOW_GLANCE_FORMAT,
+ },
+ {
+ 'id': '2',
+ 'name': 'image2',
+ 'is_public': True,
+ 'created_at': self.NOW_GLANCE_OLD_FORMAT,
+ 'updated_at': self.NOW_GLANCE_OLD_FORMAT,
+ 'deleted_at': self.NOW_GLANCE_OLD_FORMAT,
+ },
+ ]
+
+ def _make_datetime_fixture(self):
+ return self._make_fixture(created_at=self.NOW_GLANCE_FORMAT,
+ updated_at=self.NOW_GLANCE_FORMAT,
+ deleted_at=self.NOW_GLANCE_FORMAT)
+
+ def _make_none_datetime_fixture(self):
+ return self._make_fixture(updated_at=None, deleted_at=None)
+
+ def assertDateTimesFilled(self, image_meta):
+ self.assertEqual(image_meta['created_at'], self.NOW_DATETIME)
+ self.assertEqual(image_meta['updated_at'], self.NOW_DATETIME)
+ self.assertEqual(image_meta['deleted_at'], self.NOW_DATETIME)
+
+ def assertDateTimesEmpty(self, image_meta):
+ self.assertEqual(image_meta['updated_at'], None)
+ self.assertEqual(image_meta['deleted_at'], None)
+
+ def assertDateTimesBlank(self, image_meta):
+ self.assertEqual(image_meta['updated_at'], '')
+ self.assertEqual(image_meta['deleted_at'], '')
def test_create_with_instance_id(self):
"""Ensure instance_id is persisted as an image-property"""
@@ -378,8 +216,6 @@ class GlanceImageServiceTest(test.TestCase):
'properties': {'instance_id': '42', 'user_id': 'fake'}}
image_id = self.service.create(self.context, fixture)['id']
- expected = fixture
- self.assertDictMatch(self.sent_to_glance['metadata'], expected)
image_meta = self.service.show(self.context, image_id)
expected = {'id': image_id, 'name': 'test image', 'is_public': False,
@@ -399,16 +235,21 @@ class GlanceImageServiceTest(test.TestCase):
instance_id. Public images are an example of an image not tied to an
instance.
"""
- fixture = {'name': 'test image'}
+ fixture = {'name': 'test image', 'is_public': False}
image_id = self.service.create(self.context, fixture)['id']
- expected = {'name': 'test image'}
- self.assertDictMatch(self.sent_to_glance['metadata'], expected)
+ expected = {'id': image_id, 'name': 'test image', 'is_public': False,
+ 'size': None, 'location': None, 'disk_format': None,
+ 'container_format': None, 'checksum': None,
+ 'created_at': None, 'updated_at': None,
+ 'deleted_at': None, 'deleted': None, 'status': None,
+ 'properties': {}}
+ actual = self.service.show(self.context, image_id)
+ self.assertDictMatch(actual, expected)
def test_create(self):
- fixture = self._make_fixture('test image')
+ fixture = self._make_fixture(name='test image')
num_images = len(self.service.index(self.context))
-
image_id = self.service.create(self.context, fixture)['id']
self.assertNotEquals(None, image_id)
@@ -416,9 +257,7 @@ class GlanceImageServiceTest(test.TestCase):
len(self.service.index(self.context)))
def test_create_and_show_non_existing_image(self):
- fixture = self._make_fixture('test image')
- num_images = len(self.service.index(self.context))
-
+ fixture = self._make_fixture(name='test image')
image_id = self.service.create(self.context, fixture)['id']
self.assertNotEquals(None, image_id)
@@ -428,9 +267,7 @@ class GlanceImageServiceTest(test.TestCase):
'bad image id')
def test_create_and_show_non_existing_image_by_name(self):
- fixture = self._make_fixture('test image')
- num_images = len(self.service.index(self.context))
-
+ fixture = self._make_fixture(name='test image')
image_id = self.service.create(self.context, fixture)['id']
self.assertNotEquals(None, image_id)
@@ -440,17 +277,17 @@ class GlanceImageServiceTest(test.TestCase):
'bad image id')
def test_index(self):
- fixture = self._make_fixture('test image')
+ fixture = self._make_fixture(name='test image')
image_id = self.service.create(self.context, fixture)['id']
image_metas = self.service.index(self.context)
- expected = [{'id': 'DONTCARE', 'name': 'test image'}]
+ expected = [{'id': image_id, 'name': 'test image'}]
self.assertDictListMatch(image_metas, expected)
def test_index_default_limit(self):
fixtures = []
ids = []
for i in range(10):
- fixture = self._make_fixture('TestImage %d' % (i))
+ fixture = self._make_fixture(name='TestImage %d' % (i))
fixtures.append(fixture)
ids.append(self.service.create(self.context, fixture)['id'])
@@ -466,7 +303,7 @@ class GlanceImageServiceTest(test.TestCase):
fixtures = []
ids = []
for i in range(10):
- fixture = self._make_fixture('TestImage %d' % (i))
+ fixture = self._make_fixture(name='TestImage %d' % (i))
fixtures.append(fixture)
ids.append(self.service.create(self.context, fixture)['id'])
@@ -483,18 +320,18 @@ class GlanceImageServiceTest(test.TestCase):
fixtures = []
ids = []
for i in range(10):
- fixture = self._make_fixture('TestImage %d' % (i))
+ fixture = self._make_fixture(name='TestImage %d' % (i))
fixtures.append(fixture)
ids.append(self.service.create(self.context, fixture)['id'])
- image_metas = self.service.index(self.context, limit=3)
- self.assertEquals(len(image_metas), 3)
+ image_metas = self.service.index(self.context, limit=5)
+ self.assertEquals(len(image_metas), 5)
def test_index_marker_and_limit(self):
fixtures = []
ids = []
for i in range(10):
- fixture = self._make_fixture('TestImage %d' % (i))
+ fixture = self._make_fixture(name='TestImage %d' % (i))
fixtures.append(fixture)
ids.append(self.service.create(self.context, fixture)['id'])
@@ -502,7 +339,7 @@ class GlanceImageServiceTest(test.TestCase):
self.assertEquals(len(image_metas), 1)
i = 4
for meta in image_metas:
- expected = {'id': 'DONTCARE',
+ expected = {'id': ids[i],
'name': 'TestImage %d' % (i)}
self.assertDictMatch(meta, expected)
i = i + 1
@@ -511,7 +348,7 @@ class GlanceImageServiceTest(test.TestCase):
fixtures = []
ids = []
for i in range(10):
- fixture = self._make_fixture('TestImage %d' % (i))
+ fixture = self._make_fixture(name='TestImage %d' % (i))
fixtures.append(fixture)
ids.append(self.service.create(self.context, fixture)['id'])
@@ -520,11 +357,11 @@ class GlanceImageServiceTest(test.TestCase):
i = 2
for meta in image_metas:
expected = {
- 'id': 'DONTCARE',
+ 'id': ids[i],
'status': None,
- 'is_public': True,
+ 'is_public': None,
'name': 'TestImage %d' % (i),
- 'properties': {'one': 'two'},
+ 'properties': {},
'size': None,
'location': None,
'disk_format': None,
@@ -536,8 +373,6 @@ class GlanceImageServiceTest(test.TestCase):
'deleted': None
}
- print meta
- print expected
self.assertDictMatch(meta, expected)
i = i + 1
@@ -545,31 +380,31 @@ class GlanceImageServiceTest(test.TestCase):
fixtures = []
ids = []
for i in range(10):
- fixture = self._make_fixture('TestImage %d' % (i))
+ fixture = self._make_fixture(name='TestImage %d' % (i))
fixtures.append(fixture)
ids.append(self.service.create(self.context, fixture)['id'])
- image_metas = self.service.detail(self.context, limit=3)
- self.assertEquals(len(image_metas), 3)
+ image_metas = self.service.detail(self.context, limit=5)
+ self.assertEquals(len(image_metas), 5)
def test_detail_marker_and_limit(self):
fixtures = []
ids = []
for i in range(10):
- fixture = self._make_fixture('TestImage %d' % (i))
+ fixture = self._make_fixture(name='TestImage %d' % (i))
fixtures.append(fixture)
ids.append(self.service.create(self.context, fixture)['id'])
- image_metas = self.service.detail(self.context, marker=ids[3], limit=3)
- self.assertEquals(len(image_metas), 3)
+ image_metas = self.service.detail(self.context, marker=ids[3], limit=5)
+ self.assertEquals(len(image_metas), 5)
i = 4
for meta in image_metas:
expected = {
- 'id': 'DONTCARE',
+ 'id': ids[i],
'status': None,
- 'is_public': True,
+ 'is_public': None,
'name': 'TestImage %d' % (i),
- 'properties': {'one': 'two'},
+ 'properties': {},
'size': None,
'location': None,
'disk_format': None,
@@ -584,18 +419,17 @@ class GlanceImageServiceTest(test.TestCase):
i = i + 1
def test_update(self):
- fixture = self._make_fixture('test image')
+ fixture = self._make_fixture(name='test image')
image_id = self.service.create(self.context, fixture)['id']
- fixture['status'] = 'in progress'
-
+ fixture['name'] = 'new image name'
self.service.update(self.context, image_id, fixture)
new_image_data = self.service.show(self.context, image_id)
- self.assertEquals('in progress', new_image_data['status'])
+ self.assertEquals('new image name', new_image_data['name'])
def test_delete(self):
- fixture1 = self._make_fixture('test image 1')
- fixture2 = self._make_fixture('test image 2')
+ fixture1 = self._make_fixture(name='test image 1')
+ fixture2 = self._make_fixture(name='test image 2')
fixtures = [fixture1, fixture2]
num_images = len(self.service.index(self.context))
@@ -613,3 +447,118 @@ class GlanceImageServiceTest(test.TestCase):
num_images = len(self.service.index(self.context))
self.assertEquals(1, num_images)
+
+ def test_show_passes_through_to_client(self):
+ fixture = self._make_fixture(name='image1', is_public=True)
+ image_id = self.service.create(self.context, fixture)['id']
+
+ image_meta = self.service.show(self.context, image_id)
+ expected = {'id': image_id, 'name': 'image1', 'is_public': True,
+ 'size': None, 'location': None, 'disk_format': None,
+ 'container_format': None, 'checksum': None,
+ 'created_at': None, 'updated_at': None,
+ 'deleted_at': None, 'deleted': None, 'status': None,
+ 'properties': {}}
+ self.assertEqual(image_meta, expected)
+
+ def test_show_raises_when_no_authtoken_in_the_context(self):
+ fixture = self._make_fixture(name='image1',
+ is_public=False,
+ properties={'one': 'two'})
+ image_id = self.service.create(self.context, fixture)['id']
+ self.context.auth_token = False
+ self.assertRaises(exception.ImageNotFound,
+ self.service.show,
+ self.context,
+ image_id)
+
+ def test_detail_passes_through_to_client(self):
+ fixture = self._make_fixture(name='image10', is_public=True)
+ image_id = self.service.create(self.context, fixture)['id']
+ image_metas = self.service.detail(self.context)
+ expected = [{'id': image_id, 'name': 'image10', 'is_public': True,
+ 'size': None, 'location': None, 'disk_format': None,
+ 'container_format': None, 'checksum': None,
+ 'created_at': None, 'updated_at': None,
+ 'deleted_at': None, 'deleted': None, 'status': None,
+ 'properties': {}}]
+ self.assertEqual(image_metas, expected)
+
+ def test_show_handles_none_datetimes(self):
+ fixture = self._make_fixture(updated_at=None, deleted_at=None)
+ image_id = self.service.create(self.context, fixture)['id']
+ image_meta = self.service.show(self.context, image_id)
+ self.assertDateTimesEmpty(image_meta)
+
+ def test_show_handles_blank_datetimes(self):
+ fixture = self._make_fixture(updated_at='', deleted_at='')
+ image_id = self.service.create(self.context, fixture)['id']
+ image_meta = self.service.show(self.context, image_id)
+ self.assertDateTimesBlank(image_meta)
+
+ def test_detail_handles_none_datetimes(self):
+ fixture = self._make_fixture(updated_at=None, deleted_at=None)
+ self.service.create(self.context, fixture)
+ image_meta = self.service.detail(self.context)[0]
+ self.assertDateTimesEmpty(image_meta)
+
+ def test_detail_handles_blank_datetimes(self):
+ fixture = self._make_fixture(updated_at='', deleted_at='')
+ self.service.create(self.context, fixture)
+ image_meta = self.service.detail(self.context)[0]
+ self.assertDateTimesBlank(image_meta)
+
+ def test_get_handles_none_datetimes(self):
+ fixture = self._make_fixture(updated_at=None, deleted_at=None)
+ image_id = self.service.create(self.context, fixture)['id']
+ writer = NullWriter()
+ image_meta = self.service.get(self.context, image_id, writer)
+ self.assertDateTimesEmpty(image_meta)
+
+ def test_get_handles_blank_datetimes(self):
+ fixture = self._make_fixture(updated_at='', deleted_at='')
+ image_id = self.service.create(self.context, fixture)['id']
+ writer = NullWriter()
+ image_meta = self.service.get(self.context, image_id, writer)
+ self.assertDateTimesBlank(image_meta)
+
+ def test_show_makes_datetimes(self):
+ fixture = self._make_datetime_fixture()
+ image_id = self.service.create(self.context, fixture)['id']
+ image_meta = self.service.show(self.context, image_id)
+ self.assertDateTimesFilled(image_meta)
+
+ def test_detail_makes_datetimes(self):
+ fixture = self._make_datetime_fixture()
+ self.service.create(self.context, fixture)
+ image_meta = self.service.detail(self.context)[0]
+ self.assertDateTimesFilled(image_meta)
+
+ def test_get_makes_datetimes(self):
+ fixture = self._make_datetime_fixture()
+ image_id = self.service.create(self.context, fixture)['id']
+ writer = NullWriter()
+ image_meta = self.service.get(self.context, image_id, writer)
+ self.assertDateTimesFilled(image_meta)
+
+ def test_create_handles_datetimes(self):
+ fixture = self._make_datetime_fixture()
+ image_meta = self.service.create(self.context, fixture)
+ self.assertDateTimesFilled(image_meta)
+
+ def test_create_handles_none_datetimes(self):
+ fixture = self._make_none_datetime_fixture()
+ image_meta = self.service.create(self.context, fixture)
+ self.assertDateTimesEmpty(image_meta)
+
+ def test_update_handles_datetimes(self):
+ fixture = self._make_datetime_fixture()
+ image_id = self.service.create(self.context, fixture)['id']
+ image_meta = self.service.update(self.context, image_id, {})
+ self.assertDateTimesFilled(image_meta)
+
+ def test_update_handles_none_datetimes(self):
+ fixture = self._make_none_datetime_fixture()
+ image_id = self.service.create(self.context, fixture)['id']
+ image_meta = self.service.update(self.context, image_id, {})
+ self.assertDateTimesEmpty(image_meta)