blob: e0d4d44f2cc31df923033f550d10df58092469b7 [file] [log] [blame]
Jay Pipes13b479b2012-06-11 14:52:27 -04001# vim: tabstop=4 shiftwidth=4 softtabstop=4
2
3# Copyright 2012 OpenStack, LLC
4# All Rights Reserved.
5#
6# Licensed under the Apache License, Version 2.0 (the "License"); you may
7# not use this file except in compliance with the License. You may obtain
8# a copy of the License at
9#
10# http://www.apache.org/licenses/LICENSE-2.0
11#
12# Unless required by applicable law or agreed to in writing, software
13# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
14# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
15# License for the specific language governing permissions and limitations
16# under the License.
17
Daryl Walleck1465d612011-11-02 02:22:15 -050018from nose.plugins.attrib import attr
Jay Pipes13b479b2012-06-11 14:52:27 -040019
Daryl Wallecked8bef32011-12-05 23:02:08 -060020from tempest.common.utils.data_utils import rand_name
Dan Smith011164b2012-08-14 09:06:06 -070021from tempest.tests.compute import base
Daryl Walleck1465d612011-11-02 02:22:15 -050022
23
Dan Smith011164b2012-08-14 09:06:06 -070024class ServersTestBase(object):
Daryl Walleck1465d612011-11-02 02:22:15 -050025
Daryl Wallecked97dca2012-07-04 23:25:45 -050026 @attr(type='positive')
Daryl Walleck1465d612011-11-02 02:22:15 -050027 def test_create_server_with_admin_password(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -050028 # If an admin password is provided on server creation, the server's
29 # root password should be set to that password.
Daryl Walleck1465d612011-11-02 02:22:15 -050030
saradpatele81028a2012-05-02 22:36:06 -070031 try:
David Kranzee3cc8d2012-12-03 09:23:09 -050032 server = None
saradpatele81028a2012-05-02 22:36:06 -070033 name = rand_name('server')
Sean Dague9b669e32012-12-13 18:40:08 -050034 resp, server = self.create_server_with_extras(name, self.image_ref,
35 self.flavor_ref,
36 adminPass='test'
37 'password')
Daryl Walleck1465d612011-11-02 02:22:15 -050038
saradpatele81028a2012-05-02 22:36:06 -070039 #Verify the password is set correctly in the response
40 self.assertEqual('testpassword', server['adminPass'])
Daryl Walleck1465d612011-11-02 02:22:15 -050041
Daryl Walleck1465d612011-11-02 02:22:15 -050042 #Teardown
saradpatele81028a2012-05-02 22:36:06 -070043 finally:
David Kranzee3cc8d2012-12-03 09:23:09 -050044 if server:
45 self.client.delete_server(server['id'])
Daryl Walleck1465d612011-11-02 02:22:15 -050046
Rohit Karajgidc300b22012-05-04 08:11:00 -070047 def test_create_with_existing_server_name(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -050048 # Creating a server with a name that already exists is allowed
Rohit Karajgidc300b22012-05-04 08:11:00 -070049
50 try:
David Kranzee3cc8d2012-12-03 09:23:09 -050051 id1 = None
52 id2 = None
Rohit Karajgidc300b22012-05-04 08:11:00 -070053 server_name = rand_name('server')
Sean Dague9b669e32012-12-13 18:40:08 -050054 resp, server = self.create_server_with_extras(server_name,
55 self.image_ref,
56 self.flavor_ref)
Rohit Karajgidc300b22012-05-04 08:11:00 -070057 self.client.wait_for_server_status(server['id'], 'ACTIVE')
58 id1 = server['id']
Sean Dague9b669e32012-12-13 18:40:08 -050059 resp, server = self.create_server_with_extras(server_name,
60 self.image_ref,
61 self.flavor_ref)
Rohit Karajgidc300b22012-05-04 08:11:00 -070062 self.client.wait_for_server_status(server['id'], 'ACTIVE')
63 id2 = server['id']
64 self.assertNotEqual(id1, id2, "Did not create a new server")
65 resp, server = self.client.get_server(id1)
66 name1 = server['name']
67 resp, server = self.client.get_server(id2)
68 name2 = server['name']
69 self.assertEqual(name1, name2)
70 finally:
71 for server_id in (id1, id2):
72 if server_id:
73 self.client.delete_server(server_id)
74
Daryl Wallecked97dca2012-07-04 23:25:45 -050075 @attr(type='positive')
Rohit Karajgidc300b22012-05-04 08:11:00 -070076 def test_create_specify_keypair(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -050077 # Specify a keypair while creating a server
Rohit Karajgidc300b22012-05-04 08:11:00 -070078
79 try:
David Kranzee3cc8d2012-12-03 09:23:09 -050080 server = None
Rohit Karajgidc300b22012-05-04 08:11:00 -070081 key_name = rand_name('key')
82 resp, keypair = self.keypairs_client.create_keypair(key_name)
83 resp, body = self.keypairs_client.list_keypairs()
84 server_name = rand_name('server')
Sean Dague9b669e32012-12-13 18:40:08 -050085 resp, server = self.create_server_with_extras(server_name,
86 self.image_ref,
87 self.flavor_ref,
88 key_name=key_name)
Rohit Karajgidc300b22012-05-04 08:11:00 -070089 self.assertEqual('202', resp['status'])
90 self.client.wait_for_server_status(server['id'], 'ACTIVE')
91 resp, server = self.client.get_server(server['id'])
92 self.assertEqual(key_name, server['key_name'])
93 finally:
94 if server:
95 self.client.delete_server(server['id'])
96
Daryl Wallecked97dca2012-07-04 23:25:45 -050097 @attr(type='positive')
Daryl Walleck1465d612011-11-02 02:22:15 -050098 def test_update_server_name(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -050099 # The server name should be changed to the the provided value
saradpatele81028a2012-05-02 22:36:06 -0700100 try:
David Kranzee3cc8d2012-12-03 09:23:09 -0500101 server = None
saradpatele81028a2012-05-02 22:36:06 -0700102 name = rand_name('server')
Sean Dague9b669e32012-12-13 18:40:08 -0500103 resp, server = self.create_server_with_extras(name, self.image_ref,
104 self.flavor_ref)
saradpatele81028a2012-05-02 22:36:06 -0700105 self.client.wait_for_server_status(server['id'], 'ACTIVE')
Daryl Walleck1465d612011-11-02 02:22:15 -0500106
saradpatele81028a2012-05-02 22:36:06 -0700107 #Update the server with a new name
108 resp, server = self.client.update_server(server['id'],
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800109 name='newname')
saradpatele81028a2012-05-02 22:36:06 -0700110 self.assertEquals(200, resp.status)
111 self.client.wait_for_server_status(server['id'], 'ACTIVE')
Daryl Walleck1465d612011-11-02 02:22:15 -0500112
saradpatele81028a2012-05-02 22:36:06 -0700113 #Verify the name of the server has changed
114 resp, server = self.client.get_server(server['id'])
115 self.assertEqual('newname', server['name'])
Daryl Walleck1465d612011-11-02 02:22:15 -0500116
117 #Teardown
saradpatele81028a2012-05-02 22:36:06 -0700118 finally:
David Kranzee3cc8d2012-12-03 09:23:09 -0500119 if server:
120 self.client.delete_server(server['id'])
Daryl Walleck1465d612011-11-02 02:22:15 -0500121
Daryl Wallecked97dca2012-07-04 23:25:45 -0500122 @attr(type='positive')
Daryl Walleck1465d612011-11-02 02:22:15 -0500123 def test_update_access_server_address(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500124 # The server's access addresses should reflect the provided values
saradpatele81028a2012-05-02 22:36:06 -0700125 try:
David Kranzee3cc8d2012-12-03 09:23:09 -0500126 server = None
saradpatele81028a2012-05-02 22:36:06 -0700127 name = rand_name('server')
Sean Dague9b669e32012-12-13 18:40:08 -0500128 resp, server = self.create_server_with_extras(name, self.image_ref,
129 self.flavor_ref)
saradpatele81028a2012-05-02 22:36:06 -0700130 self.client.wait_for_server_status(server['id'], 'ACTIVE')
Daryl Walleck1465d612011-11-02 02:22:15 -0500131
saradpatele81028a2012-05-02 22:36:06 -0700132 #Update the IPv4 and IPv6 access addresses
133 resp, body = self.client.update_server(server['id'],
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800134 accessIPv4='1.1.1.1',
Sean Dagueab3d5d42013-01-18 19:10:14 -0500135 accessIPv6='::babe:202:202')
saradpatele81028a2012-05-02 22:36:06 -0700136 self.assertEqual(200, resp.status)
137 self.client.wait_for_server_status(server['id'], 'ACTIVE')
Daryl Walleck1465d612011-11-02 02:22:15 -0500138
saradpatele81028a2012-05-02 22:36:06 -0700139 #Verify the access addresses have been updated
140 resp, server = self.client.get_server(server['id'])
141 self.assertEqual('1.1.1.1', server['accessIPv4'])
Sean Dagueab3d5d42013-01-18 19:10:14 -0500142 self.assertEqual('::babe:202:202', server['accessIPv6'])
Daryl Walleck1465d612011-11-02 02:22:15 -0500143
144 #Teardown
saradpatele81028a2012-05-02 22:36:06 -0700145 finally:
David Kranzee3cc8d2012-12-03 09:23:09 -0500146 if server:
147 self.client.delete_server(server['id'])
Rohit Karajgidc300b22012-05-04 08:11:00 -0700148
149 def test_delete_server_while_in_building_state(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500150 # Delete a server while it's VM state is Building
Rohit Karajgidc300b22012-05-04 08:11:00 -0700151 name = rand_name('server')
Sean Dague9b669e32012-12-13 18:40:08 -0500152 resp, server = self.create_server_with_extras(name, self.image_ref,
153 self.flavor_ref)
Rohit Karajgidc300b22012-05-04 08:11:00 -0700154 self.client.wait_for_server_status(server['id'], 'BUILD')
155 resp, _ = self.client.delete_server(server['id'])
156 self.assertEqual('204', resp['status'])
Dan Smith011164b2012-08-14 09:06:06 -0700157
158
159class ServersTestJSON(base.BaseComputeTestJSON, ServersTestBase):
160 @classmethod
161 def setUpClass(cls):
162 super(ServersTestJSON, cls).setUpClass()
163 cls.client = cls.servers_client
164
Sean Daguedd523b12012-12-13 17:31:22 -0500165 def tearDown(self):
166 # clean up any remaining servers and wait for them to fully
167 # delete. This is done because delete calls are async, and if
168 # deletes are running slow we could very well overrun system
169 # memory
170 self.clear_servers()
Sean Daguedd523b12012-12-13 17:31:22 -0500171 super(ServersTestJSON, self).tearDown()
172
Dan Smith011164b2012-08-14 09:06:06 -0700173
174class ServersTestXML(base.BaseComputeTestXML, ServersTestBase):
175 @classmethod
176 def setUpClass(cls):
177 super(ServersTestXML, cls).setUpClass()
178 cls.client = cls.servers_client
Sean Daguedd523b12012-12-13 17:31:22 -0500179
180 def tearDown(self):
181 # clean up any remaining servers and wait for them to fully
182 # delete. This is done because delete calls are async, and if
183 # deletes are running slow we could very well overrun system
184 # memory
185 self.clear_servers()
Sean Daguedd523b12012-12-13 17:31:22 -0500186 super(ServersTestXML, self).tearDown()