blob: 40f5fa777c5cc684f4b12bbdceebeca0c5024007 [file] [log] [blame]
Daryl Walleck73a9e7a2011-11-15 17:43:31 -06001from nose.plugins.attrib import attr
Daryl Walleck73a9e7a2011-11-15 17:43:31 -06002import unittest2 as unittest
Daryl Walleck73a9e7a2011-11-15 17:43:31 -06003
Brian Waldon738cd632011-12-12 18:45:09 -05004from tempest.common.utils.data_utils import rand_name
5import tempest.config
6from tempest import openstack
7
8
9def _parse_image_id(image_ref):
10 temp = image_ref.rsplit('/')
11 return temp[6]
Jay Pipes7f757632011-12-02 15:53:32 -050012
Daryl Walleck73a9e7a2011-11-15 17:43:31 -060013
14class ImagesTest(unittest.TestCase):
Daryl Walleck73a9e7a2011-11-15 17:43:31 -060015
Brian Waldon738cd632011-12-12 18:45:09 -050016 create_image_enabled = tempest.config.TempestConfig().\
17 env.create_image_enabled
18
Daryl Walleck73a9e7a2011-11-15 17:43:31 -060019 @classmethod
20 def setUpClass(cls):
21 cls.os = openstack.Manager()
22 cls.client = cls.os.images_client
23 cls.servers_client = cls.os.servers_client
Jay Pipes7f757632011-12-02 15:53:32 -050024 cls.config = cls.os.config
Daryl Walleck73a9e7a2011-11-15 17:43:31 -060025 cls.image_ref = cls.config.env.image_ref
26 cls.flavor_ref = cls.config.env.flavor_ref
Brian Waldon738cd632011-12-12 18:45:09 -050027 cls.create_image_enabled = cls.config.env.create_image_enabled
Daryl Walleck73a9e7a2011-11-15 17:43:31 -060028
Daryl Wallecked8bef32011-12-05 23:02:08 -060029 @attr(type='smoke')
Brian Waldon738cd632011-12-12 18:45:09 -050030 @unittest.skipUnless(create_image_enabled,
31 'Environment unable to create images.')
Daryl Walleck73a9e7a2011-11-15 17:43:31 -060032 def test_create_delete_image(self):
33 """An image for the provided server should be created"""
34 server_name = rand_name('server')
35 resp, server = self.servers_client.create_server(server_name,
36 self.image_ref,
37 self.flavor_ref)
38 self.servers_client.wait_for_server_status(server['id'], 'ACTIVE')
39
Ravikumar Venkatesan94d81172012-01-09 21:53:14 -080040 # Create a new image
Daryl Walleck73a9e7a2011-11-15 17:43:31 -060041 name = rand_name('image')
Daryl Wallecked8bef32011-12-05 23:02:08 -060042 meta = {'image_type': 'test'}
43 resp, body = self.client.create_image(server['id'], name, meta)
Brian Waldon738cd632011-12-12 18:45:09 -050044 image_id = _parse_image_id(resp['location'])
Daryl Walleck416af922011-11-22 22:28:33 -060045 self.client.wait_for_image_resp_code(image_id, 200)
Daryl Walleck73a9e7a2011-11-15 17:43:31 -060046 self.client.wait_for_image_status(image_id, 'ACTIVE')
47
Ravikumar Venkatesan94d81172012-01-09 21:53:14 -080048 # Verify the image was created correctly
Daryl Walleck73a9e7a2011-11-15 17:43:31 -060049 resp, image = self.client.get_image(image_id)
50 self.assertEqual(name, image['name'])
Daryl Wallecked8bef32011-12-05 23:02:08 -060051 self.assertEqual('test', image['metadata']['image_type'])
52
Ravikumar Venkatesan94d81172012-01-09 21:53:14 -080053 # Verify minRAM and minDisk values are the same as the original image
Daryl Wallecked8bef32011-12-05 23:02:08 -060054 resp, original_image = self.client.get_image(self.image_ref)
55 self.assertEqual(original_image['minRam'], image['minRam'])
56 self.assertEqual(original_image['minDisk'], image['minDisk'])
Daryl Walleck73a9e7a2011-11-15 17:43:31 -060057
Ravikumar Venkatesan94d81172012-01-09 21:53:14 -080058 # Teardown
Daryl Walleck73a9e7a2011-11-15 17:43:31 -060059 self.client.delete_image(image['id'])
60 self.servers_client.delete_server(server['id'])
Ravikumar Venkatesan94d81172012-01-09 21:53:14 -080061
62 @attr(type='negative')
63 def test_create_image_from_deleted_server(self):
Jay Pipes04b70812012-01-11 10:53:24 -050064 """An image should not be created if the server instance is removed """
Ravikumar Venkatesan94d81172012-01-09 21:53:14 -080065 server_name = rand_name('server')
66 resp, server = self.servers_client.create_server(server_name,
67 self.image_ref,
68 self.flavor_ref)
69 self.servers_client.wait_for_server_status(server['id'], 'ACTIVE')
70
71 # Delete server before trying to create server
72 self.servers_client.delete_server(server['id'])
73
74 try:
75 # Create a new image after server is deleted
76 name = rand_name('image')
77 meta = {'image_type': 'test'}
78 resp, body = self.client.create_image(server['id'], name, meta)
79
80 except:
81 pass
82
83 else:
Jay Pipes04b70812012-01-11 10:53:24 -050084 self.fail("Should not create snapshot from deleted instance!")
85 image_id = _parse_image_id(resp.['location'])
86 self.client.delete_image(image_id)