blob: d7c9db40f41b7adaead205d8415f2affbf2d673c [file] [log] [blame]
Daryl Walleck1465d612011-11-02 02:22:15 -05001from nose.plugins.attrib import attr
2from storm import openstack
3import unittest2 as unittest
4import storm.config
5from storm.common.utils.data_utils import rand_name
6
Jay Pipes7f757632011-12-02 15:53:32 -05007# Some module-level skip conditions
8resize_available = False
Daryl Walleck1465d612011-11-02 02:22:15 -05009
10class ServerActionsTest(unittest.TestCase):
Daryl Walleck1465d612011-11-02 02:22:15 -050011
12 @classmethod
13 def setUpClass(cls):
14 cls.os = openstack.Manager()
15 cls.client = cls.os.servers_client
Jay Pipes7f757632011-12-02 15:53:32 -050016 cls.config = cls.os.config
Daryl Walleck1465d612011-11-02 02:22:15 -050017 cls.image_ref = cls.config.env.image_ref
18 cls.image_ref_alt = cls.config.env.image_ref_alt
19 cls.flavor_ref = cls.config.env.flavor_ref
20 cls.flavor_ref_alt = cls.config.env.flavor_ref_alt
Jay Pipes7f757632011-12-02 15:53:32 -050021 resize_available = cls.config.env.resize_available
Daryl Walleck1465d612011-11-02 02:22:15 -050022
23 def setUp(self):
24 self.name = rand_name('server')
25 resp, server = self.client.create_server(self.name, self.image_ref,
26 self.flavor_ref)
27 self.id = server['id']
28 self.client.wait_for_server_status(self.id, 'ACTIVE')
29
30 def tearDown(self):
31 self.client.delete_server(self.id)
32
33 @attr(type='smoke')
34 def test_change_server_password(self):
Daryl Wallecke5b83d42011-11-10 14:39:02 -060035 """The server's password should be set to the provided password"""
Daryl Walleck1465d612011-11-02 02:22:15 -050036 resp, body = self.client.change_password(self.id, 'newpass')
37 self.client.wait_for_server_status(self.id, 'ACTIVE')
38 #TODO: SSH in to verify the new password works
39
40 @attr(type='smoke')
41 def test_reboot_server_hard(self):
42 """ The server should be power cycled """
43 #TODO: Add validation the server has been rebooted
44
45 resp, body = self.client.reboot(self.id, 'HARD')
46 self.client.wait_for_server_status(self.id, 'ACTIVE')
47
48 @attr(type='smoke')
49 def test_reboot_server_soft(self):
Daryl Wallecke5b83d42011-11-10 14:39:02 -060050 """The server should be signaled to reboot gracefully"""
Daryl Walleck1465d612011-11-02 02:22:15 -050051 #TODO: Add validation the server has been rebooted
52
53 resp, body = self.client.reboot(self.id, 'SOFT')
54 self.client.wait_for_server_status(self.id, 'ACTIVE')
55
56 @attr(type='smoke')
57 def test_rebuild_server(self):
Daryl Wallecke5b83d42011-11-10 14:39:02 -060058 """The server should be rebuilt using the provided image"""
Daryl Walleck1465d612011-11-02 02:22:15 -050059
60 self.client.rebuild(self.id, self.image_ref_alt, name='rebuiltserver')
61 self.client.wait_for_server_status(self.id, 'ACTIVE')
62 resp, server = self.client.get_server(self.id)
63 self.assertEqual(self.image_ref_alt, server['image']['id'])
64 self.assertEqual('rebuiltserver', server['name'])
65
66 @attr(type='smoke')
67 @unittest.skipIf(not resize_available, 'Resize not available.')
68 def test_resize_server_confirm(self):
69 """
70 The server's RAM and disk space should be modified to that of
71 the provided flavor
72 """
73
74 self.client.resize(self.id, self.flavor_ref_alt)
75 self.client.wait_for_server_status(self.id, 'VERIFY_RESIZE')
76
77 self.client.confirm_resize(self.id)
78 self.client.wait_for_server_status(self.id, 'ACTIVE')
79
80 resp, server = self.client.get_server(self.id)
81 self.assertEqual(self.flavor_ref_alt, server['flavor']['id'])
82
83 @attr(type='smoke')
84 @unittest.skipIf(not resize_available, 'Resize not available.')
85 def test_resize_server_revert(self):
86 """
87 The server's RAM and disk space should return to its original
88 values after a resize is reverted
89 """
90
91 self.client.resize(self.id, self.flavor_ref_alt)
92 self.client.wait_for_server_status(id, 'VERIFY_RESIZE')
93
94 self.client.revert_resize(self.id)
95 self.client.wait_for_server_status(id, 'ACTIVE')
96
97 resp, server = self.client.get_server(id)
98 self.assertEqual(self.flavor_ref, server['flavor']['id'])