blob: 73f470f6afe5031ef1871bda5f41fe667cacbf95 [file] [log] [blame]
Daryl Wallecked8bef32011-12-05 23:02:08 -06001import base64
2
Brian Waldon738cd632011-12-12 18:45:09 -05003from nose.plugins.attrib import attr
4import unittest2 as unittest
5
6from tempest.common.utils.data_utils import rand_name
7import tempest.config
8from tempest import openstack
9
Daryl Wallecked8bef32011-12-05 23:02:08 -060010
11class ServerActionsTest(unittest.TestCase):
Brian Waldon738cd632011-12-12 18:45:09 -050012
Daryl Wallecked8bef32011-12-05 23:02:08 -060013 resize_available = tempest.config.TempestConfig().env.resize_available
14
15 @classmethod
16 def setUpClass(cls):
17 cls.os = openstack.Manager()
18 cls.client = cls.os.servers_client
19 cls.config = cls.os.config
20 cls.image_ref = cls.config.env.image_ref
21 cls.image_ref_alt = cls.config.env.image_ref_alt
22 cls.flavor_ref = cls.config.env.flavor_ref
23 cls.flavor_ref_alt = cls.config.env.flavor_ref_alt
24
25 def setUp(self):
26 self.name = rand_name('server')
Brian Waldon3bde07f2011-12-13 15:11:22 -050027 resp, server = self.client.create_server(self.name,
28 self.image_ref,
29 self.flavor_ref)
30 self.server_id = server['id']
31
32 self.client.wait_for_server_status(self.server_id, 'ACTIVE')
Daryl Wallecked8bef32011-12-05 23:02:08 -060033
34 def tearDown(self):
Brian Waldon3bde07f2011-12-13 15:11:22 -050035 self.client.delete_server(self.server_id)
Daryl Wallecked8bef32011-12-05 23:02:08 -060036
37 @attr(type='smoke')
38 def test_change_server_password(self):
39 """The server's password should be set to the provided password"""
Brian Waldon3bde07f2011-12-13 15:11:22 -050040 resp, body = self.client.change_password(self.server_id, 'newpass')
Daryl Wallecked8bef32011-12-05 23:02:08 -060041 self.assertEqual(202, resp.status)
Brian Waldon3bde07f2011-12-13 15:11:22 -050042 self.client.wait_for_server_status(self.server_id, 'ACTIVE')
Daryl Wallecked8bef32011-12-05 23:02:08 -060043
44 @attr(type='smoke')
45 def test_reboot_server_hard(self):
46 """ The server should be power cycled """
Brian Waldon3bde07f2011-12-13 15:11:22 -050047 resp, body = self.client.reboot(self.server_id, 'HARD')
Daryl Wallecked8bef32011-12-05 23:02:08 -060048 self.assertEqual(202, resp.status)
Brian Waldon3bde07f2011-12-13 15:11:22 -050049 self.client.wait_for_server_status(self.server_id, 'ACTIVE')
Daryl Wallecked8bef32011-12-05 23:02:08 -060050
51 @attr(type='smoke')
52 def test_reboot_server_soft(self):
53 """The server should be signaled to reboot gracefully"""
Brian Waldon3bde07f2011-12-13 15:11:22 -050054 resp, body = self.client.reboot(self.server_id, 'SOFT')
Daryl Wallecked8bef32011-12-05 23:02:08 -060055 self.assertEqual(202, resp.status)
Brian Waldon3bde07f2011-12-13 15:11:22 -050056 self.client.wait_for_server_status(self.server_id, 'ACTIVE')
Daryl Wallecked8bef32011-12-05 23:02:08 -060057
58 @attr(type='smoke')
59 def test_rebuild_server(self):
60 """ The server should be rebuilt using the provided image and data """
61 meta = {'rebuild': 'server'}
Brian Waldon738cd632011-12-12 18:45:09 -050062 new_name = rand_name('server')
Daryl Wallecked8bef32011-12-05 23:02:08 -060063 file_contents = 'Test server rebuild.'
64 personality = [{'path': '/etc/rebuild.txt',
65 'contents': base64.b64encode(file_contents)}]
66
Brian Waldon3bde07f2011-12-13 15:11:22 -050067 resp, rebuilt_server = self.client.rebuild(self.server_id,
Daryl Wallecked8bef32011-12-05 23:02:08 -060068 self.image_ref_alt,
Brian Waldon738cd632011-12-12 18:45:09 -050069 name=new_name, meta=meta,
Daryl Wallecked8bef32011-12-05 23:02:08 -060070 personality=personality,
71 adminPass='rebuild')
72
73 #Verify the properties in the initial response are correct
Brian Waldon3bde07f2011-12-13 15:11:22 -050074 self.assertEqual(self.server_id, rebuilt_server['id'])
Daryl Wallecked8bef32011-12-05 23:02:08 -060075 self.assertEqual(self.image_ref_alt, rebuilt_server['image']['id'])
76 self.assertEqual(self.flavor_ref, rebuilt_server['flavor']['id'])
77
78 #Verify the server properties after the rebuild completes
79 self.client.wait_for_server_status(rebuilt_server['id'], 'ACTIVE')
80 resp, server = self.client.get_server(rebuilt_server['id'])
81 self.assertEqual(self.image_ref_alt, rebuilt_server['image']['id'])
Brian Waldon738cd632011-12-12 18:45:09 -050082 self.assertEqual(new_name, rebuilt_server['name'])
Daryl Wallecked8bef32011-12-05 23:02:08 -060083
84 @attr(type='smoke')
85 @unittest.skipIf(not resize_available, 'Resize not available.')
86 def test_resize_server_confirm(self):
87 """
88 The server's RAM and disk space should be modified to that of
89 the provided flavor
90 """
91
Brian Waldon3bde07f2011-12-13 15:11:22 -050092 resp, server = self.client.resize(self.server_id, self.flavor_ref_alt)
Daryl Wallecked8bef32011-12-05 23:02:08 -060093 self.assertEqual(202, resp.status)
Brian Waldon3bde07f2011-12-13 15:11:22 -050094 self.client.wait_for_server_status(self.server_id, 'VERIFY_RESIZE')
Daryl Wallecked8bef32011-12-05 23:02:08 -060095
Brian Waldon3bde07f2011-12-13 15:11:22 -050096 self.client.confirm_resize(self.server_id)
97 self.client.wait_for_server_status(self.server_id, 'ACTIVE')
Daryl Wallecked8bef32011-12-05 23:02:08 -060098
Brian Waldon3bde07f2011-12-13 15:11:22 -050099 resp, server = self.client.get_server(self.server_id)
Daryl Wallecked8bef32011-12-05 23:02:08 -0600100 self.assertEqual(self.flavor_ref_alt, server['flavor']['id'])
101
102 @attr(type='smoke')
103 @unittest.skipIf(not resize_available, 'Resize not available.')
104 def test_resize_server_revert(self):
105 """
106 The server's RAM and disk space should return to its original
107 values after a resize is reverted
108 """
109
Brian Waldon3bde07f2011-12-13 15:11:22 -0500110 resp, server = self.client.resize(self.server_id, self.flavor_ref_alt)
Daryl Wallecked8bef32011-12-05 23:02:08 -0600111 self.assertEqual(202, resp.status)
Brian Waldon3bde07f2011-12-13 15:11:22 -0500112 self.client.wait_for_server_status(self.server_id, 'VERIFY_RESIZE')
Daryl Wallecked8bef32011-12-05 23:02:08 -0600113
Brian Waldon3bde07f2011-12-13 15:11:22 -0500114 self.client.revert_resize(self.server_id)
115 self.client.wait_for_server_status(self.server_id, 'ACTIVE')
Daryl Wallecked8bef32011-12-05 23:02:08 -0600116
Brian Waldon3bde07f2011-12-13 15:11:22 -0500117 resp, server = self.client.get_server(self.server_id)
Daryl Wallecked8bef32011-12-05 23:02:08 -0600118 self.assertEqual(self.flavor_ref, server['flavor']['id'])