Daryl Walleck | 73a9e7a | 2011-11-15 17:43:31 -0600 | [diff] [blame] | 1 | from nose.plugins.attrib import attr |
Daryl Walleck | ed8bef3 | 2011-12-05 23:02:08 -0600 | [diff] [blame^] | 2 | from tempest import openstack |
| 3 | from tempest.common.utils.data_utils import rand_name |
Daryl Walleck | 73a9e7a | 2011-11-15 17:43:31 -0600 | [diff] [blame] | 4 | import unittest2 as unittest |
Daryl Walleck | ed8bef3 | 2011-12-05 23:02:08 -0600 | [diff] [blame^] | 5 | import tempest.config |
Daryl Walleck | 73a9e7a | 2011-11-15 17:43:31 -0600 | [diff] [blame] | 6 | |
Jay Pipes | 7f75763 | 2011-12-02 15:53:32 -0500 | [diff] [blame] | 7 | # Some module-level skip conditions |
| 8 | create_image_enabled = False |
| 9 | |
Daryl Walleck | 73a9e7a | 2011-11-15 17:43:31 -0600 | [diff] [blame] | 10 | |
| 11 | class ImagesTest(unittest.TestCase): |
Daryl Walleck | 73a9e7a | 2011-11-15 17:43:31 -0600 | [diff] [blame] | 12 | |
| 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 Pipes | 7f75763 | 2011-12-02 15:53:32 -0500 | [diff] [blame] | 18 | cls.config = cls.os.config |
Daryl Walleck | 73a9e7a | 2011-11-15 17:43:31 -0600 | [diff] [blame] | 19 | cls.image_ref = cls.config.env.image_ref |
| 20 | cls.flavor_ref = cls.config.env.flavor_ref |
Jay Pipes | 7f75763 | 2011-12-02 15:53:32 -0500 | [diff] [blame] | 21 | create_image_enabled = cls.config.env.create_image_enabled |
Daryl Walleck | 73a9e7a | 2011-11-15 17:43:31 -0600 | [diff] [blame] | 22 | |
| 23 | def _parse_image_id(self, image_ref): |
| 24 | temp = image_ref.rsplit('/') |
| 25 | return temp[6] |
| 26 | |
Daryl Walleck | ed8bef3 | 2011-12-05 23:02:08 -0600 | [diff] [blame^] | 27 | @unittest.skipIf(not imaging_enabled, |
Daryl Walleck | 73a9e7a | 2011-11-15 17:43:31 -0600 | [diff] [blame] | 28 | 'Environment unable to create images.') |
Daryl Walleck | ed8bef3 | 2011-12-05 23:02:08 -0600 | [diff] [blame^] | 29 | @attr(type='smoke') |
Daryl Walleck | 73a9e7a | 2011-11-15 17:43:31 -0600 | [diff] [blame] | 30 | def test_create_delete_image(self): |
| 31 | """An image for the provided server should be created""" |
| 32 | server_name = rand_name('server') |
| 33 | resp, server = self.servers_client.create_server(server_name, |
| 34 | self.image_ref, |
| 35 | self.flavor_ref) |
| 36 | self.servers_client.wait_for_server_status(server['id'], 'ACTIVE') |
| 37 | |
| 38 | #Create a new image |
| 39 | name = rand_name('image') |
Daryl Walleck | ed8bef3 | 2011-12-05 23:02:08 -0600 | [diff] [blame^] | 40 | meta = {'image_type': 'test'} |
| 41 | resp, body = self.client.create_image(server['id'], name, meta) |
Daryl Walleck | 73a9e7a | 2011-11-15 17:43:31 -0600 | [diff] [blame] | 42 | image_id = self._parse_image_id(resp['location']) |
Daryl Walleck | 416af92 | 2011-11-22 22:28:33 -0600 | [diff] [blame] | 43 | self.client.wait_for_image_resp_code(image_id, 200) |
Daryl Walleck | 73a9e7a | 2011-11-15 17:43:31 -0600 | [diff] [blame] | 44 | self.client.wait_for_image_status(image_id, 'ACTIVE') |
| 45 | |
| 46 | #Verify the image was created correctly |
| 47 | resp, image = self.client.get_image(image_id) |
| 48 | self.assertEqual(name, image['name']) |
Daryl Walleck | ed8bef3 | 2011-12-05 23:02:08 -0600 | [diff] [blame^] | 49 | self.assertEqual('test', image['metadata']['image_type']) |
| 50 | |
| 51 | #Verify minRAM and minDisk values are the same as the original image |
| 52 | resp, original_image = self.client.get_image(self.image_ref) |
| 53 | self.assertEqual(original_image['minRam'], image['minRam']) |
| 54 | self.assertEqual(original_image['minDisk'], image['minDisk']) |
Daryl Walleck | 73a9e7a | 2011-11-15 17:43:31 -0600 | [diff] [blame] | 55 | |
| 56 | #Teardown |
| 57 | self.client.delete_image(image['id']) |
| 58 | self.servers_client.delete_server(server['id']) |