blob: e1349b71d0fa609809c15f222be5556b7f6b633f [file] [log] [blame]
Daryl Walleck73a9e7a2011-11-15 17:43:31 -06001from nose.plugins.attrib import attr
2from storm import openstack
3from storm.common.utils.data_utils import rand_name
4import unittest2 as unittest
5import storm.config
6
Jay Pipes7f757632011-12-02 15:53:32 -05007# Some module-level skip conditions
8create_image_enabled = False
9
Daryl Walleck73a9e7a2011-11-15 17:43:31 -060010
11class ImagesTest(unittest.TestCase):
Daryl Walleck73a9e7a2011-11-15 17:43:31 -060012
13 @classmethod
14 def setUpClass(cls):
15 cls.os = openstack.Manager()
16 cls.client = cls.os.images_client
17 cls.servers_client = cls.os.servers_client
Jay Pipes7f757632011-12-02 15:53:32 -050018 cls.config = cls.os.config
Daryl Walleck73a9e7a2011-11-15 17:43:31 -060019 cls.image_ref = cls.config.env.image_ref
20 cls.flavor_ref = cls.config.env.flavor_ref
Jay Pipes7f757632011-12-02 15:53:32 -050021 create_image_enabled = cls.config.env.create_image_enabled
Daryl Walleck73a9e7a2011-11-15 17:43:31 -060022
23 def _parse_image_id(self, image_ref):
24 temp = image_ref.rsplit('/')
25 return temp[6]
26
27 @unittest.skipIf(not create_image_enabled,
28 'Environment unable to create images.')
29 def test_create_delete_image(self):
30 """An image for the provided server should be created"""
31 server_name = rand_name('server')
32 resp, server = self.servers_client.create_server(server_name,
33 self.image_ref,
34 self.flavor_ref)
35 self.servers_client.wait_for_server_status(server['id'], 'ACTIVE')
36
37 #Create a new image
38 name = rand_name('image')
39 resp, body = self.client.create_image(server['id'], name)
40 image_id = self._parse_image_id(resp['location'])
Daryl Walleck416af922011-11-22 22:28:33 -060041 self.client.wait_for_image_resp_code(image_id, 200)
Daryl Walleck73a9e7a2011-11-15 17:43:31 -060042 self.client.wait_for_image_status(image_id, 'ACTIVE')
43
44 #Verify the image was created correctly
45 resp, image = self.client.get_image(image_id)
46 self.assertEqual(name, image['name'])
47
48 #Teardown
49 self.client.delete_image(image['id'])
50 self.servers_client.delete_server(server['id'])
51
52 @attr(type='smoke')
53 def test_get_image(self):
54 """Returns the correct details for a single image"""
55 resp, image = self.client.get_image(self.image_ref)
56 self.assertEqual(self.image_ref, image['id'])
57
58 @attr(type='smoke')
59 def test_list_images(self):
60 """The list of all images should contain the image flavor"""
61 resp, images = self.client.list_images()
62 found = any([i for i in images if i['id'] == self.image_ref])
63 self.assertTrue(found)
64
65 @attr(type='smoke')
66 def test_list_images_with_detail(self):
67 """Detailed list of all images should contain the expected image"""
68 resp, images = self.client.list_images_with_detail()
69 found = any([i for i in images if i['id'] == self.image_ref])
70 self.assertTrue(found)