summaryrefslogtreecommitdiffstats
path: root/nova/tests
diff options
context:
space:
mode:
authorRick Harris <rick.harris@rackspace.com>2011-03-15 00:37:13 +0000
committerRick Harris <rick.harris@rackspace.com>2011-03-15 00:37:13 +0000
commita56a973e9d839df5bcd956126300afd7df4c2fe9 (patch)
tree4c6802cb321a85f788b8b00cba782088217ac014 /nova/tests
parent7fe5052f9e8dbaebce45b44a545be9707f6480a6 (diff)
Fixing API per spec, to get unit-tests to pass
Diffstat (limited to 'nova/tests')
-rw-r--r--nova/tests/api/openstack/fakes.py13
-rw-r--r--nova/tests/api/openstack/test_images.py93
2 files changed, 58 insertions, 48 deletions
diff --git a/nova/tests/api/openstack/fakes.py b/nova/tests/api/openstack/fakes.py
index 1c7d926ba..ef38b93ca 100644
--- a/nova/tests/api/openstack/fakes.py
+++ b/nova/tests/api/openstack/fakes.py
@@ -138,10 +138,12 @@ def stub_out_glance_add_image(stubs, sent_to_glance):
in place.
"""
orig_add_image = glance_client.Client.add_image
+
def fake_add_image(context, metadata, data=None):
sent_to_glance['metadata'] = metadata
sent_to_glance['data'] = data
return orig_add_image(metadata, data)
+
stubs.Set(glance_client.Client, 'add_image', fake_add_image)
@@ -166,10 +168,13 @@ def stub_out_glance(stubs, initial_fixtures=None):
raise glance_exc.NotFound
def fake_add_image(self, image_meta, data=None):
- if 'id' not in image_meta:
- image_id = ''.join(random.choice(string.letters)
- for _ in range(20))
- image_meta['id'] = image_id
+ if 'id' in image_meta:
+ raise Exception(
+ _("Cannot set id attribute for Glance image: %s")
+ % image_meta)
+ image_id = ''.join(random.choice(string.letters)
+ for _ in range(20))
+ image_meta['id'] = image_id
self.fixtures.append(image_meta)
return image_meta
diff --git a/nova/tests/api/openstack/test_images.py b/nova/tests/api/openstack/test_images.py
index 0e6d538f9..9b4b5832a 100644
--- a/nova/tests/api/openstack/test_images.py
+++ b/nova/tests/api/openstack/test_images.py
@@ -156,7 +156,7 @@ class LocalImageServiceTest(test.TestCase,
class GlanceImageServiceTest(test.TestCase,
BaseImageServiceTests):
- """Tests the local image service"""
+ """Tests the Glance image service"""
def setUp(self):
super(GlanceImageServiceTest, self).setUp()
@@ -183,20 +183,23 @@ class GlanceImageServiceTest(test.TestCase,
first-class attribrutes, but that they are passed to Glance as image
properties.
"""
- fixture = {'id': 123, 'instance_id': 42, 'name': 'test image'}
+ fixture = {'instance_id': 42, 'name': 'test image'}
image_id = self.service.create(self.context, fixture)['id']
- expected = {'id': 123,
+ expected = {'id': image_id,
'name': 'test image',
'properties': {'instance_id': 42}}
self.assertDictMatch(self.sent_to_glance['metadata'], expected)
# The ImageService shouldn't leak the fact that the instance_id
# happens to be stored as a property in Glance
- expected = {'id': 123, 'instance_id': 42, 'name': 'test image'}
+ expected = {'id': image_id, 'instance_id': 42, 'name': 'test image'}
image_meta = self.service.show(self.context, image_id)
self.assertDictMatch(image_meta, expected)
+ #image_metas = self.service.detail(self.context)
+ #self.assertDictMatch(image_metas[0], expected)
+
def test_create_propertified_images_without_instance_id(self):
"""
Some attributes are passed to Glance as image-properties (ex.
@@ -206,10 +209,10 @@ class GlanceImageServiceTest(test.TestCase,
first-class attribrutes, but that they are passed to Glance as image
properties.
"""
- fixture = {'id': 123, 'name': 'test image'}
+ fixture = {'name': 'test image'}
image_id = self.service.create(self.context, fixture)['id']
- expected = {'id': 123, 'name': 'test image', 'properties': {}}
+ expected = {'id': image_id, 'name': 'test image', 'properties': {}}
self.assertDictMatch(self.sent_to_glance['metadata'], expected)
@@ -217,29 +220,39 @@ class ImageControllerWithGlanceServiceTest(test.TestCase):
"""Test of the OpenStack API /images application controller"""
- # Registered images at start of each test.
+ # FIXME(sirp): The ImageService and API use two different formats for
+ # timestamps. Ultimately, the ImageService should probably use datetime
+ # objects
+ NOW_SERVICE_STR = "2010-10-11T10:30:22"
+ NOW_API_STR = "2010-10-11T10:30:22Z"
IMAGE_FIXTURES = [
- {'id': '23g2ogk23k4hhkk4k42l',
- 'imageId': '23g2ogk23k4hhkk4k42l',
+ {'id': 123,
'name': 'public image #1',
- 'created_at': str(datetime.datetime.utcnow()),
- 'updated_at': str(datetime.datetime.utcnow()),
+ 'created_at': NOW_SERVICE_STR,
+ 'updated_at': NOW_SERVICE_STR,
'deleted_at': None,
'deleted': False,
'is_public': True,
- 'status': 'available',
- 'image_type': 'kernel'},
- {'id': 'slkduhfas73kkaskgdas',
- 'imageId': 'slkduhfas73kkaskgdas',
+ 'status': 'saving'},
+ {'id': 124,
'name': 'public image #2',
- 'created_at': str(datetime.datetime.utcnow()),
- 'updated_at': str(datetime.datetime.utcnow()),
+ 'created_at': NOW_SERVICE_STR,
+ 'updated_at': NOW_SERVICE_STR,
+ 'deleted_at': None,
+ 'deleted': False,
+ 'is_public': True,
+ 'status': 'active',
+ 'instance_id': 42},
+ {'id': 125,
+ 'name': 'public image #3',
+ 'created_at': NOW_SERVICE_STR,
+ 'updated_at': NOW_SERVICE_STR,
'deleted_at': None,
'deleted': False,
'is_public': True,
- 'status': 'available',
- 'image_type': 'ramdisk'}]
+ 'status': 'killed',
+ 'instance_id': 42}]
def setUp(self):
super(ImageControllerWithGlanceServiceTest, self).setUp()
@@ -262,34 +275,26 @@ class ImageControllerWithGlanceServiceTest(test.TestCase):
def test_get_image_index(self):
req = webob.Request.blank('/v1.0/images')
res = req.get_response(fakes.wsgi_app())
- res_dict = json.loads(res.body)
+ image_metas = json.loads(res.body)['images']
- fixture_index = [dict(id=f['id'], name=f['name']) for f
- in self.IMAGE_FIXTURES]
+ expected = [{'id': 123, 'name': 'public image #1'},
+ {'id': 124, 'name': 'public image #2'},
+ {'id': 125, 'name': 'public image #3'}]
- for image in res_dict['images']:
- self.assertEquals(1, fixture_index.count(image),
- "image %s not in fixture index!" % str(image))
+ self.assertDictListMatch(image_metas, expected)
def test_get_image_details(self):
req = webob.Request.blank('/v1.0/images/detail')
res = req.get_response(fakes.wsgi_app())
- res_dict = json.loads(res.body)
-
- def _is_equivalent_subset(x, y):
- if set(x) <= set(y):
- for k, v in x.iteritems():
- if x[k] != y[k]:
- if x[k] == 'active' and y[k] == 'available':
- continue
- return False
- return True
- return False
-
- for image in res_dict['images']:
- for image_fixture in self.IMAGE_FIXTURES:
- if _is_equivalent_subset(image, image_fixture):
- break
- else:
- self.assertEquals(1, 2, "image %s not in fixtures!" %
- str(image))
+ image_metas = json.loads(res.body)['images']
+
+ expected = [
+ {'id': 123, 'name': 'public image #1', 'updated': self.NOW_API_STR,
+ 'created': self.NOW_API_STR, 'status': 'SAVING', 'progress': 0},
+ {'id': 124, 'name': 'public image #2', 'updated': self.NOW_API_STR,
+ 'created': self.NOW_API_STR, 'status': 'ACTIVE', 'serverId': 42},
+ {'id': 125, 'name': 'public image #3', 'updated': self.NOW_API_STR,
+ 'created': self.NOW_API_STR, 'status': 'FAILED', 'serverId': 42},
+ ]
+
+ self.assertDictListMatch(image_metas, expected)