blob: ea4c1412337389f5f0b2d0934c1c8371da232df2 [file] [log] [blame]
ZhiQiang Fan39f97222013-09-20 04:49:44 +08001# Copyright 2012 OpenStack Foundation
Jay Pipes13b479b2012-06-11 14:52:27 -04002# All Rights Reserved.
3#
4# Licensed under the Apache License, Version 2.0 (the "License"); you may
5# not use this file except in compliance with the License. You may obtain
6# a copy of the License at
7#
8# http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13# License for the specific language governing permissions and limitations
14# under the License.
15
Ghanshyam3390d9f2015-12-25 12:48:02 +090016import testtools
17
Sean Dague1937d092013-05-17 16:36:38 -040018from tempest.api.compute import base
Ken'ichi Ohmichi0eb153c2015-07-13 02:18:25 +000019from tempest.common import waiters
Ghanshyam3390d9f2015-12-25 12:48:02 +090020from tempest import config
Ken'ichi Ohmichi757833a2017-03-10 10:30:30 -080021from tempest.lib.common.utils import data_utils
Ken'ichi Ohmichi14b0ae12017-01-27 17:18:52 -080022from tempest.lib import decorators
Daryl Walleck1465d612011-11-02 02:22:15 -050023
Ghanshyam3390d9f2015-12-25 12:48:02 +090024CONF = config.CONF
25
Daryl Walleck1465d612011-11-02 02:22:15 -050026
ivan-zhuf2b00502013-10-18 10:06:52 +080027class ServersTestJSON(base.BaseV2ComputeTest):
Attila Fazekas19044d52013-02-16 07:35:06 +010028
29 @classmethod
Rohan Kanade60b73092015-02-04 17:58:19 +053030 def setup_clients(cls):
31 super(ServersTestJSON, cls).setup_clients()
Attila Fazekas19044d52013-02-16 07:35:06 +010032 cls.client = cls.servers_client
Daryl Walleck1465d612011-11-02 02:22:15 -050033
Sean Dagueab277ad2013-03-15 15:59:06 -040034 def tearDown(self):
35 self.clear_servers()
36 super(ServersTestJSON, self).tearDown()
37
Ken'ichi Ohmichi14b0ae12017-01-27 17:18:52 -080038 @decorators.idempotent_id('b92d5ec7-b1dd-44a2-87e4-45e888c46ef0')
Ghanshyam3390d9f2015-12-25 12:48:02 +090039 @testtools.skipUnless(CONF.compute_feature_enabled.
40 enable_instance_password,
41 'Instance password not available.')
Daryl Walleck1465d612011-11-02 02:22:15 -050042 def test_create_server_with_admin_password(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -050043 # If an admin password is provided on server creation, the server's
44 # root password should be set to that password.
David Kranz0fb14292015-02-11 15:55:20 -050045 server = self.create_test_server(adminPass='testpassword')
Daryl Walleck1465d612011-11-02 02:22:15 -050046
Sean Dagueab277ad2013-03-15 15:59:06 -040047 # Verify the password is set correctly in the response
48 self.assertEqual('testpassword', server['adminPass'])
Daryl Walleck1465d612011-11-02 02:22:15 -050049
Ken'ichi Ohmichi14b0ae12017-01-27 17:18:52 -080050 @decorators.idempotent_id('8fea6be7-065e-47cf-89b8-496e6f96c699')
Rohit Karajgidc300b22012-05-04 08:11:00 -070051 def test_create_with_existing_server_name(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -050052 # Creating a server with a name that already exists is allowed
Rohit Karajgidc300b22012-05-04 08:11:00 -070053
Sean Dague22897e12013-02-25 17:54:09 -050054 # TODO(sdague): clear out try, we do cleanup one layer up
zhuflc6ce5392016-08-17 14:34:37 +080055 server_name = data_utils.rand_name(
56 self.__class__.__name__ + '-server')
David Kranz0fb14292015-02-11 15:55:20 -050057 server = self.create_test_server(name=server_name,
58 wait_until='ACTIVE')
Sean Dagueab277ad2013-03-15 15:59:06 -040059 id1 = server['id']
David Kranz0fb14292015-02-11 15:55:20 -050060 server = self.create_test_server(name=server_name,
61 wait_until='ACTIVE')
Sean Dagueab277ad2013-03-15 15:59:06 -040062 id2 = server['id']
63 self.assertNotEqual(id1, id2, "Did not create a new server")
ghanshyam0f825252015-08-25 16:02:50 +090064 server = self.client.show_server(id1)['server']
Sean Dagueab277ad2013-03-15 15:59:06 -040065 name1 = server['name']
ghanshyam0f825252015-08-25 16:02:50 +090066 server = self.client.show_server(id2)['server']
Sean Dagueab277ad2013-03-15 15:59:06 -040067 name2 = server['name']
68 self.assertEqual(name1, name2)
Rohit Karajgidc300b22012-05-04 08:11:00 -070069
Ken'ichi Ohmichi14b0ae12017-01-27 17:18:52 -080070 @decorators.idempotent_id('f9e15296-d7f9-4e62-b53f-a04e89160833')
Rohit Karajgidc300b22012-05-04 08:11:00 -070071 def test_create_specify_keypair(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -050072 # Specify a keypair while creating a server
Rohit Karajgidc300b22012-05-04 08:11:00 -070073
Masayuki Igawa259c1132013-10-31 17:48:44 +090074 key_name = data_utils.rand_name('key')
Ken'ichi Ohmichie364bce2015-07-17 10:27:59 +000075 self.keypairs_client.create_keypair(name=key_name)
ahmad525a5bc2015-05-12 10:43:02 +053076 self.addCleanup(self.keypairs_client.delete_keypair, key_name)
David Kranz173f0e02015-02-06 13:47:57 -050077 self.keypairs_client.list_keypairs()
David Kranz0fb14292015-02-11 15:55:20 -050078 server = self.create_test_server(key_name=key_name)
Ken'ichi Ohmichi0eb153c2015-07-13 02:18:25 +000079 waiters.wait_for_server_status(self.client, server['id'], 'ACTIVE')
ghanshyam0f825252015-08-25 16:02:50 +090080 server = self.client.show_server(server['id'])['server']
Sean Dagueab277ad2013-03-15 15:59:06 -040081 self.assertEqual(key_name, server['key_name'])
Rohit Karajgidc300b22012-05-04 08:11:00 -070082
Alexander Gubanov145258f2015-11-24 15:06:27 +020083 def _update_server_name(self, server_id, status, prefix_name='server'):
Anh Trand44a8be2016-03-25 09:49:14 +070084 # The server name should be changed to the provided value
Alexander Gubanov145258f2015-11-24 15:06:27 +020085 new_name = data_utils.rand_name(prefix_name)
86
Ghanshyam03d4dfd2014-05-26 14:20:37 +090087 # Update the server with a new name
David Kranz0fb14292015-02-11 15:55:20 -050088 self.client.update_server(server_id,
89 name=new_name)
Ken'ichi Ohmichi0eb153c2015-07-13 02:18:25 +000090 waiters.wait_for_server_status(self.client, server_id, status)
Ghanshyam03d4dfd2014-05-26 14:20:37 +090091
92 # Verify the name of the server has changed
ghanshyam0f825252015-08-25 16:02:50 +090093 server = self.client.show_server(server_id)['server']
Ghanshyam03d4dfd2014-05-26 14:20:37 +090094 self.assertEqual(new_name, server['name'])
95 return server
96
Ken'ichi Ohmichi14b0ae12017-01-27 17:18:52 -080097 @decorators.idempotent_id('5e6ccff8-349d-4852-a8b3-055df7988dd2')
Daryl Walleck1465d612011-11-02 02:22:15 -050098 def test_update_server_name(self):
Anh Trand44a8be2016-03-25 09:49:14 +070099 # The server name should be changed to the provided value
David Kranz0fb14292015-02-11 15:55:20 -0500100 server = self.create_test_server(wait_until='ACTIVE')
Alexander Gubanov145258f2015-11-24 15:06:27 +0200101 # Update instance name with non-ASCII characters
102 prefix_name = u'\u00CD\u00F1st\u00E1\u00F1c\u00E9'
103 self._update_server_name(server['id'], 'ACTIVE', prefix_name)
Daryl Walleck1465d612011-11-02 02:22:15 -0500104
zhufl2ae6b902017-05-08 16:20:41 +0800105 # stop server and check server name update again
Ken'ichi Ohmichib2631082015-08-27 01:31:00 +0000106 self.client.stop_server(server['id'])
Ken'ichi Ohmichi0eb153c2015-07-13 02:18:25 +0000107 waiters.wait_for_server_status(self.client, server['id'], 'SHUTOFF')
Alexander Gubanov145258f2015-11-24 15:06:27 +0200108 # Update instance name with non-ASCII characters
Alexander Gubanov145258f2015-11-24 15:06:27 +0200109 updated_server = self._update_server_name(server['id'],
110 'SHUTOFF',
111 prefix_name)
Ghanshyam03d4dfd2014-05-26 14:20:37 +0900112 self.assertNotIn('progress', updated_server)
Daryl Walleck1465d612011-11-02 02:22:15 -0500113
Ken'ichi Ohmichi14b0ae12017-01-27 17:18:52 -0800114 @decorators.idempotent_id('89b90870-bc13-4b73-96af-f9d4f2b70077')
Daryl Walleck1465d612011-11-02 02:22:15 -0500115 def test_update_access_server_address(self):
Sean Dague4dd2c0b2013-01-03 17:50:28 -0500116 # The server's access addresses should reflect the provided values
David Kranz0fb14292015-02-11 15:55:20 -0500117 server = self.create_test_server(wait_until='ACTIVE')
Daryl Walleck1465d612011-11-02 02:22:15 -0500118
Sean Dagueab277ad2013-03-15 15:59:06 -0400119 # Update the IPv4 and IPv6 access addresses
David Kranz0fb14292015-02-11 15:55:20 -0500120 self.client.update_server(server['id'],
121 accessIPv4='1.1.1.1',
122 accessIPv6='::babe:202:202')
Ken'ichi Ohmichi0eb153c2015-07-13 02:18:25 +0000123 waiters.wait_for_server_status(self.client, server['id'], 'ACTIVE')
Daryl Walleck1465d612011-11-02 02:22:15 -0500124
Sean Dagueab277ad2013-03-15 15:59:06 -0400125 # Verify the access addresses have been updated
ghanshyam0f825252015-08-25 16:02:50 +0900126 server = self.client.show_server(server['id'])['server']
Sean Dagueab277ad2013-03-15 15:59:06 -0400127 self.assertEqual('1.1.1.1', server['accessIPv4'])
128 self.assertEqual('::babe:202:202', server['accessIPv6'])
Rohit Karajgidc300b22012-05-04 08:11:00 -0700129
Ken'ichi Ohmichi14b0ae12017-01-27 17:18:52 -0800130 @decorators.idempotent_id('38fb1d02-c3c5-41de-91d3-9bc2025a75eb')
jun xie0ea79842013-09-26 21:57:44 +0800131 def test_create_server_with_ipv6_addr_only(self):
132 # Create a server without an IPv4 address(only IPv6 address).
David Kranz0fb14292015-02-11 15:55:20 -0500133 server = self.create_test_server(accessIPv6='2001:2001::3')
Ken'ichi Ohmichi0eb153c2015-07-13 02:18:25 +0000134 waiters.wait_for_server_status(self.client, server['id'], 'ACTIVE')
ghanshyam0f825252015-08-25 16:02:50 +0900135 server = self.client.show_server(server['id'])['server']
jun xie0ea79842013-09-26 21:57:44 +0800136 self.assertEqual('2001:2001::3', server['accessIPv6'])