summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--nova/image/glance.py14
-rw-r--r--nova/tests/image/test_glance.py64
2 files changed, 71 insertions, 7 deletions
diff --git a/nova/image/glance.py b/nova/image/glance.py
index 3b448db4b..d0c191ea1 100644
--- a/nova/image/glance.py
+++ b/nova/image/glance.py
@@ -18,6 +18,8 @@
from __future__ import absolute_import
+import datetime as dt
+
from glance.common import exception as glance_exception
from nova import exception
@@ -60,6 +62,18 @@ class GlanceImageService(service.BaseImageService):
"""
try:
image = self.client.get_image_meta(image_id)
+ if 'created_at' in image:
+ image['created_at'] = \
+ dt.datetime.strptime(image['created_at'],
+ "%Y-%m-%dT%H:%M:%S.%f")
+ if 'updated_at' in image:
+ image['updated_at'] = \
+ dt.datetime.strptime(image['updated_at'],
+ "%Y-%m-%dT%H:%M:%S.%f")
+ if 'deleted_at' in image and image['deleted_at'] is not None:
+ image['deleted_at'] = \
+ dt.datetime.strptime(image['deleted_at'],
+ "%Y-%m-%dT%H:%M:%S.%f")
except glance_exception.NotFound:
raise exception.NotFound
return image
diff --git a/nova/tests/image/test_glance.py b/nova/tests/image/test_glance.py
index b568f593d..971a32a17 100644
--- a/nova/tests/image/test_glance.py
+++ b/nova/tests/image/test_glance.py
@@ -1,3 +1,4 @@
+import datetime as dt
import unittest
from nova.image import glance
@@ -5,14 +6,63 @@ from nova.image import glance
class StubGlanceClient(object):
def __init__(self, images):
- self._images = images
+ self.images = images
- def get_image_meta(id):
- return self._images[id]
+ def get_image_meta(self, id):
+ return self.images[id]
+
+ def get_images_detailed(self):
+ return self.images
class TestGlance(unittest.TestCase):
- def test(self):
- images = {'xyz': "image"}
- client = StubGlanceClient(images)
- service = glance.GlanceImageService(client)
+ def setUp(self):
+ self.client = StubGlanceClient(None)
+ self.service = glance.GlanceImageService(self.client)
+
+ def test_show_passes_through_to_client(self):
+ self.client.images = {'xyz': "image"}
+ self.assertEqual(self.service.show({}, 'xyz'), "image")
+
+ def test_detail_passes_through_to_client(self):
+ self.client.images = "these are the images"
+ self.assertEqual(self.service.detail({}), self.client.images)
+
+ def test_show_makes_create_datetimes(self):
+ create_time = dt.datetime.utcnow()
+ self.client.images = {'xyz': {
+ 'id': "id",
+ 'name': "my awesome image",
+ 'created_at': create_time.isoformat(),
+ }}
+ actual = self.service.show({}, 'xyz')
+ self.assertEqual(actual['created_at'], create_time)
+
+ def test_show_makes_update_datetimes(self):
+ update_time = dt.datetime.utcnow()
+ self.client.images = {'abc': {
+ 'id': "id",
+ 'name': "my okay image",
+ 'updated_at': update_time.isoformat(),
+ }}
+ actual = self.service.show({}, 'abc')
+ self.assertEqual(actual['updated_at'], update_time)
+
+ def test_show_makes_delete_datetimes(self):
+ delete_time = dt.datetime.utcnow()
+ self.client.images = {'123': {
+ 'id': "123",
+ 'name': "my lame image",
+ 'deleted_at': delete_time.isoformat(),
+ }}
+ actual = self.service.show({}, '123')
+ self.assertEqual(actual['deleted_at'], delete_time)
+
+ def test_show_handles_deleted_at_none(self):
+ self.client.images = {'747': {
+ 'id': "747",
+ 'name': "not deleted",
+ 'deleted_at': None,
+ }}
+ actual = self.service.show({}, '747')
+ self.assertEqual(actual['deleted_at'], None)