blob: b2d2a04ef926b8efe9a10abea8f5553bf6005e07 [file] [log] [blame]
Lingxian Kong4b398fd2013-10-04 17:14:14 +08001# Copyright 2013 Huawei Technologies Co.,LTD.
2#
3# Licensed under the Apache License, Version 2.0 (the "License"); you may
4# not use this file except in compliance with the License. You may obtain
5# a copy of the License at
6#
7# http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12# License for the specific language governing permissions and limitations
13# under the License.
14
Masayuki Igawabfa07602015-01-20 18:47:17 +090015from tempest_lib import exceptions as lib_exc
16
Lingxian Kong4b398fd2013-10-04 17:14:14 +080017from tempest.api.compute import base
Fei Long Wangd39431f2015-05-14 11:30:48 +120018from tempest.common.utils import data_utils
Ken'ichi Ohmichia1aa44c2013-12-06 20:48:24 +090019from tempest import test
Lingxian Kong4b398fd2013-10-04 17:14:14 +080020
21
Mate Lakat1e89a1b2013-10-26 11:19:13 +010022class HostsAdminNegativeTestJSON(base.BaseV2ComputeAdminTest):
Lingxian Kong4b398fd2013-10-04 17:14:14 +080023
24 """
25 Tests hosts API using admin privileges.
26 """
27
Lingxian Kong4b398fd2013-10-04 17:14:14 +080028 @classmethod
Rohan Kanade60b73092015-02-04 17:58:19 +053029 def setup_clients(cls):
30 super(HostsAdminNegativeTestJSON, cls).setup_clients()
Lingxian Kong4b398fd2013-10-04 17:14:14 +080031 cls.client = cls.os_adm.hosts_client
32 cls.non_admin_client = cls.os.hosts_client
33
34 def _get_host_name(self):
David Kranz0a735172015-01-16 10:51:18 -050035 hosts = self.client.list_hosts()
Lingxian Kong4b398fd2013-10-04 17:14:14 +080036 self.assertTrue(len(hosts) >= 1)
37 hostname = hosts[0]['host_name']
38 return hostname
39
Sean Dague639f2fa2015-04-27 09:00:33 -040040 @test.attr(type=['negative'])
Chris Hoge7579c1a2015-02-26 14:12:15 -080041 @test.idempotent_id('dd032027-0210-4d9c-860e-69b1b8deed5f')
Lingxian Kong4b398fd2013-10-04 17:14:14 +080042 def test_list_hosts_with_non_admin_user(self):
Masayuki Igawa6b1cd292015-02-16 11:11:55 +090043 self.assertRaises(lib_exc.Forbidden,
Lingxian Kong4b398fd2013-10-04 17:14:14 +080044 self.non_admin_client.list_hosts)
45
Sean Dague639f2fa2015-04-27 09:00:33 -040046 @test.attr(type=['negative'])
Chris Hoge7579c1a2015-02-26 14:12:15 -080047 @test.idempotent_id('e75b0a1a-041f-47a1-8b4a-b72a6ff36d3f')
Lingxian Kong4b398fd2013-10-04 17:14:14 +080048 def test_show_host_detail_with_nonexistent_hostname(self):
49 nonexitent_hostname = data_utils.rand_name('rand_hostname')
Masayuki Igawabfa07602015-01-20 18:47:17 +090050 self.assertRaises(lib_exc.NotFound,
Ken'ichi Ohmichi394e6e42015-06-11 04:20:37 +000051 self.client.show_host, nonexitent_hostname)
Lingxian Kong4b398fd2013-10-04 17:14:14 +080052
Sean Dague639f2fa2015-04-27 09:00:33 -040053 @test.attr(type=['negative'])
Chris Hoge7579c1a2015-02-26 14:12:15 -080054 @test.idempotent_id('19ebe09c-bfd4-4b7c-81a2-e2e0710f59cc')
Lingxian Kong4b398fd2013-10-04 17:14:14 +080055 def test_show_host_detail_with_non_admin_user(self):
56 hostname = self._get_host_name()
57
Masayuki Igawa6b1cd292015-02-16 11:11:55 +090058 self.assertRaises(lib_exc.Forbidden,
Ken'ichi Ohmichi394e6e42015-06-11 04:20:37 +000059 self.non_admin_client.show_host,
Lingxian Kong4b398fd2013-10-04 17:14:14 +080060 hostname)
61
Sean Dague639f2fa2015-04-27 09:00:33 -040062 @test.attr(type=['negative'])
Chris Hoge7579c1a2015-02-26 14:12:15 -080063 @test.idempotent_id('e40c72b1-0239-4ed6-ba21-81a184df1f7c')
Lingxian Kong4b398fd2013-10-04 17:14:14 +080064 def test_update_host_with_non_admin_user(self):
65 hostname = self._get_host_name()
66
Masayuki Igawa6b1cd292015-02-16 11:11:55 +090067 self.assertRaises(lib_exc.Forbidden,
Lingxian Kong4b398fd2013-10-04 17:14:14 +080068 self.non_admin_client.update_host,
Haiwei Xu0c1ca792014-01-15 22:49:24 +090069 hostname,
70 status='enable',
71 maintenance_mode='enable')
Lingxian Kong4b398fd2013-10-04 17:14:14 +080072
Sean Dague639f2fa2015-04-27 09:00:33 -040073 @test.attr(type=['negative'])
Chris Hoge7579c1a2015-02-26 14:12:15 -080074 @test.idempotent_id('76e396fe-5418-4dd3-a186-5b301edc0721')
Lingxian Kong4b398fd2013-10-04 17:14:14 +080075 def test_update_host_with_extra_param(self):
76 # only 'status' and 'maintenance_mode' are the valid params.
77 hostname = self._get_host_name()
78
Masayuki Igawa4b29e472015-02-16 10:41:54 +090079 self.assertRaises(lib_exc.BadRequest,
Lingxian Kong4b398fd2013-10-04 17:14:14 +080080 self.client.update_host,
81 hostname,
82 status='enable',
83 maintenance_mode='enable',
84 param='XXX')
85
Sean Dague639f2fa2015-04-27 09:00:33 -040086 @test.attr(type=['negative'])
Chris Hoge7579c1a2015-02-26 14:12:15 -080087 @test.idempotent_id('fbe2bf3e-3246-4a95-a59f-94e4e298ec77')
Lingxian Kong4b398fd2013-10-04 17:14:14 +080088 def test_update_host_with_invalid_status(self):
89 # 'status' can only be 'enable' or 'disable'
90 hostname = self._get_host_name()
91
Masayuki Igawa4b29e472015-02-16 10:41:54 +090092 self.assertRaises(lib_exc.BadRequest,
Lingxian Kong4b398fd2013-10-04 17:14:14 +080093 self.client.update_host,
94 hostname,
95 status='invalid',
96 maintenance_mode='enable')
97
Sean Dague639f2fa2015-04-27 09:00:33 -040098 @test.attr(type=['negative'])
Chris Hoge7579c1a2015-02-26 14:12:15 -080099 @test.idempotent_id('ab1e230e-5e22-41a9-8699-82b9947915d4')
Lingxian Kong4b398fd2013-10-04 17:14:14 +0800100 def test_update_host_with_invalid_maintenance_mode(self):
101 # 'maintenance_mode' can only be 'enable' or 'disable'
102 hostname = self._get_host_name()
103
Masayuki Igawa4b29e472015-02-16 10:41:54 +0900104 self.assertRaises(lib_exc.BadRequest,
Lingxian Kong4b398fd2013-10-04 17:14:14 +0800105 self.client.update_host,
106 hostname,
107 status='enable',
108 maintenance_mode='invalid')
109
Sean Dague639f2fa2015-04-27 09:00:33 -0400110 @test.attr(type=['negative'])
Chris Hoge7579c1a2015-02-26 14:12:15 -0800111 @test.idempotent_id('0cd85f75-6992-4a4a-b1bd-d11e37fd0eee')
Lingxian Kong4b398fd2013-10-04 17:14:14 +0800112 def test_update_host_without_param(self):
113 # 'status' or 'maintenance_mode' needed for host update
114 hostname = self._get_host_name()
115
Masayuki Igawa4b29e472015-02-16 10:41:54 +0900116 self.assertRaises(lib_exc.BadRequest,
Lingxian Kong4b398fd2013-10-04 17:14:14 +0800117 self.client.update_host,
118 hostname)
119
Sean Dague639f2fa2015-04-27 09:00:33 -0400120 @test.attr(type=['negative'])
Chris Hoge7579c1a2015-02-26 14:12:15 -0800121 @test.idempotent_id('23c92146-2100-4d68-b2d6-c7ade970c9c1')
Lingxian Kong4b398fd2013-10-04 17:14:14 +0800122 def test_update_nonexistent_host(self):
123 nonexitent_hostname = data_utils.rand_name('rand_hostname')
124
Masayuki Igawabfa07602015-01-20 18:47:17 +0900125 self.assertRaises(lib_exc.NotFound,
Lingxian Kong4b398fd2013-10-04 17:14:14 +0800126 self.client.update_host,
127 nonexitent_hostname,
128 status='enable',
129 maintenance_mode='enable')
130
Sean Dague639f2fa2015-04-27 09:00:33 -0400131 @test.attr(type=['negative'])
Chris Hoge7579c1a2015-02-26 14:12:15 -0800132 @test.idempotent_id('0d981ac3-4320-4898-b674-82b61fbb60e4')
Lingxian Kong4b398fd2013-10-04 17:14:14 +0800133 def test_startup_nonexistent_host(self):
134 nonexitent_hostname = data_utils.rand_name('rand_hostname')
135
Masayuki Igawabfa07602015-01-20 18:47:17 +0900136 self.assertRaises(lib_exc.NotFound,
Lingxian Kong4b398fd2013-10-04 17:14:14 +0800137 self.client.startup_host,
138 nonexitent_hostname)
139
Sean Dague639f2fa2015-04-27 09:00:33 -0400140 @test.attr(type=['negative'])
Chris Hoge7579c1a2015-02-26 14:12:15 -0800141 @test.idempotent_id('9f4ebb7e-b2ae-4e5b-a38f-0fd1bb0ddfca')
Lingxian Kong4b398fd2013-10-04 17:14:14 +0800142 def test_startup_host_with_non_admin_user(self):
143 hostname = self._get_host_name()
144
Masayuki Igawa6b1cd292015-02-16 11:11:55 +0900145 self.assertRaises(lib_exc.Forbidden,
Lingxian Kong4b398fd2013-10-04 17:14:14 +0800146 self.non_admin_client.startup_host,
147 hostname)
148
Sean Dague639f2fa2015-04-27 09:00:33 -0400149 @test.attr(type=['negative'])
Chris Hoge7579c1a2015-02-26 14:12:15 -0800150 @test.idempotent_id('9e637444-29cf-4244-88c8-831ae82c31b6')
Lingxian Kong4b398fd2013-10-04 17:14:14 +0800151 def test_shutdown_nonexistent_host(self):
152 nonexitent_hostname = data_utils.rand_name('rand_hostname')
153
Masayuki Igawabfa07602015-01-20 18:47:17 +0900154 self.assertRaises(lib_exc.NotFound,
Lingxian Kong4b398fd2013-10-04 17:14:14 +0800155 self.client.shutdown_host,
156 nonexitent_hostname)
157
Sean Dague639f2fa2015-04-27 09:00:33 -0400158 @test.attr(type=['negative'])
Chris Hoge7579c1a2015-02-26 14:12:15 -0800159 @test.idempotent_id('a803529c-7e3f-4d3c-a7d6-8e1c203d27f6')
Lingxian Kong4b398fd2013-10-04 17:14:14 +0800160 def test_shutdown_host_with_non_admin_user(self):
161 hostname = self._get_host_name()
162
Masayuki Igawa6b1cd292015-02-16 11:11:55 +0900163 self.assertRaises(lib_exc.Forbidden,
Lingxian Kong4b398fd2013-10-04 17:14:14 +0800164 self.non_admin_client.shutdown_host,
165 hostname)
166
Sean Dague639f2fa2015-04-27 09:00:33 -0400167 @test.attr(type=['negative'])
Chris Hoge7579c1a2015-02-26 14:12:15 -0800168 @test.idempotent_id('f86bfd7b-0b13-4849-ae29-0322e83ee58b')
Lingxian Kong4b398fd2013-10-04 17:14:14 +0800169 def test_reboot_nonexistent_host(self):
170 nonexitent_hostname = data_utils.rand_name('rand_hostname')
171
Masayuki Igawabfa07602015-01-20 18:47:17 +0900172 self.assertRaises(lib_exc.NotFound,
Lingxian Kong4b398fd2013-10-04 17:14:14 +0800173 self.client.reboot_host,
174 nonexitent_hostname)
175
Sean Dague639f2fa2015-04-27 09:00:33 -0400176 @test.attr(type=['negative'])
Chris Hoge7579c1a2015-02-26 14:12:15 -0800177 @test.idempotent_id('02d79bb9-eb57-4612-abf6-2cb38897d2f8')
Lingxian Kong4b398fd2013-10-04 17:14:14 +0800178 def test_reboot_host_with_non_admin_user(self):
179 hostname = self._get_host_name()
180
Masayuki Igawa6b1cd292015-02-16 11:11:55 +0900181 self.assertRaises(lib_exc.Forbidden,
Lingxian Kong4b398fd2013-10-04 17:14:14 +0800182 self.non_admin_client.reboot_host,
183 hostname)