blob: 958da69ca0fc15f664a87c8a1ea5c576f444abe6 [file] [log] [blame]
Daryl Walleck1465d612011-11-02 02:22:15 -05001from storm.common import ssh
2from nose.plugins.attrib import attr
3from storm import openstack
4from storm.common.utils.data_utils import rand_name
5import base64
6import storm.config
7import unittest2 as unittest
8
9
10class ServersTest(unittest.TestCase):
11
12 @classmethod
13 def setUpClass(cls):
14 cls.os = openstack.Manager()
15 cls.client = cls.os.servers_client
16 cls.config = storm.config.StormConfig()
17 cls.image_ref = cls.config.env.image_ref
18 cls.flavor_ref = cls.config.env.flavor_ref
19 cls.ssh_timeout = cls.config.nova.ssh_timeout
20
21 @attr(type='smoke')
22 def test_create_delete_server(self):
23 meta = {'hello': 'world'}
24 accessIPv4 = '1.1.1.1'
25 accessIPv6 = '::babe:220.12.22.2'
26 name = rand_name('server')
27 file_contents = 'This is a test file.'
28 personality = [{'path': '/etc/test.txt',
29 'contents': base64.b64encode(file_contents)}]
30 resp, server = self.client.create_server(name,
31 self.image_ref,
32 self.flavor_ref,
33 meta=meta,
34 accessIPv4=accessIPv4,
35 accessIPv6=accessIPv6,
36 personality=personality)
37
38 #Wait for the server to become active
39 self.client.wait_for_server_status(server['id'], 'ACTIVE')
40
41 #Verify the specified attributes are set correctly
42 resp, server = self.client.get_server(server['id'])
43 self.assertEqual('1.1.1.1', server['accessIPv4'])
44 self.assertEqual('::babe:220.12.22.2', server['accessIPv6'])
45 self.assertEqual(name, server['name'])
46 self.assertEqual(self.image_ref, server['image']['id'])
47 self.assertEqual(str(self.flavor_ref), server['flavor']['id'])
48
49 #Teardown
50 self.client.delete_server(self.id)
51
52 @attr(type='smoke')
53 def test_create_server_with_admin_password(self):
54 """
55 If an admin password is provided on server creation, the server's root
56 password should be set to that password.
57 """
58
59 name = rand_name('server')
60 resp, server = self.client.create_server(name, self.image_ref,
61 self.flavor_ref,
62 adminPass='testpassword')
63
64 #Verify the password is set correctly in the response
65 self.assertEqual('testpassword', server['adminPass'])
66
67 #SSH into the server using the set password
68 self.client.wait_for_server_status(server['id'], 'ACTIVE')
69 resp, addresses = self.client.list_addresses(server['id'])
70 ip = addresses['public'][0]['addr']
71
72 client = ssh.Client(ip, 'root', 'testpassword', self.ssh_timeout)
73 self.assertTrue(client.test_connection_auth())
74
75 #Teardown
76 self.client.delete_server(server['id'])
77
78 @attr(type='smoke')
79 def test_update_server_name(self):
80 """ The server name should be changed to the the provided value """
81 name = rand_name('server')
82 resp, server = self.client.create_server(name, self.image_ref,
83 self.flavor_ref)
84 self.client.wait_for_server_status(server['id'], 'ACTIVE')
85
86 #Update the server with a new name
87 self.client.update_server(server['id'], name='newname')
88 self.client.wait_for_server_status(server['id'], 'ACTIVE')
89
90 #Verify the name of the server has changed
91 resp, server = self.client.get_server(server['id'])
92 self.assertEqual('newname', server['name'])
93
94 #Teardown
95 self.client.delete_server(server['id'])
96
97 @attr(type='smoke')
98 def test_update_access_server_address(self):
99 """
100 The server's access addresses should reflect the provided values
101 """
102 name = rand_name('server')
103 resp, server = self.client.create_server(name, self.image_ref,
104 self.flavor_ref)
105 self.client.wait_for_server_status(server['id'], 'ACTIVE')
106
107 #Update the IPv4 and IPv6 access addresses
108 self.client.update_server(server['id'], accessIPv4='1.1.1.1',
109 accessIPv6='::babe:2.2.2.2')
110 self.client.wait_for_server_status(server['id'], 'ACTIVE')
111
112 #Verify the access addresses have been updated
113 resp, server = self.client.get_server(server['id'])
114 self.assertEqual('1.1.1.1', server['accessIPv4'])
115 self.assertEqual('::babe:2.2.2.2', server['accessIPv6'])
116
117 #Teardown
118 self.client.delete_server(server['id'])