blob: 83669455ae43108298a9973bd14623ebffc81d05 [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
15from tempest.api.compute import base
Fei Long Wangd39431f2015-05-14 11:30:48 +120016from tempest.common.utils import data_utils
Andrea Frittoli (andreaf)db9672e2016-02-23 14:07:24 -050017from tempest.lib import exceptions as lib_exc
Ken'ichi Ohmichia1aa44c2013-12-06 20:48:24 +090018from tempest import test
Lingxian Kong4b398fd2013-10-04 17:14:14 +080019
20
Mate Lakat1e89a1b2013-10-26 11:19:13 +010021class HostsAdminNegativeTestJSON(base.BaseV2ComputeAdminTest):
Ken'ichi Ohmichi88363cb2015-11-19 08:00:54 +000022 """Tests hosts API using admin privileges."""
Lingxian Kong4b398fd2013-10-04 17:14:14 +080023
Lingxian Kong4b398fd2013-10-04 17:14:14 +080024 @classmethod
Rohan Kanade60b73092015-02-04 17:58:19 +053025 def setup_clients(cls):
26 super(HostsAdminNegativeTestJSON, cls).setup_clients()
Lingxian Kong4b398fd2013-10-04 17:14:14 +080027 cls.client = cls.os_adm.hosts_client
28 cls.non_admin_client = cls.os.hosts_client
29
30 def _get_host_name(self):
ghanshyame1bd29e2015-08-18 16:47:24 +090031 hosts = self.client.list_hosts()['hosts']
Lingxian Kong4b398fd2013-10-04 17:14:14 +080032 self.assertTrue(len(hosts) >= 1)
33 hostname = hosts[0]['host_name']
34 return hostname
35
Sean Dague639f2fa2015-04-27 09:00:33 -040036 @test.attr(type=['negative'])
Chris Hoge7579c1a2015-02-26 14:12:15 -080037 @test.idempotent_id('dd032027-0210-4d9c-860e-69b1b8deed5f')
Lingxian Kong4b398fd2013-10-04 17:14:14 +080038 def test_list_hosts_with_non_admin_user(self):
Masayuki Igawa6b1cd292015-02-16 11:11:55 +090039 self.assertRaises(lib_exc.Forbidden,
Lingxian Kong4b398fd2013-10-04 17:14:14 +080040 self.non_admin_client.list_hosts)
41
Sean Dague639f2fa2015-04-27 09:00:33 -040042 @test.attr(type=['negative'])
Chris Hoge7579c1a2015-02-26 14:12:15 -080043 @test.idempotent_id('e75b0a1a-041f-47a1-8b4a-b72a6ff36d3f')
Lingxian Kong4b398fd2013-10-04 17:14:14 +080044 def test_show_host_detail_with_nonexistent_hostname(self):
45 nonexitent_hostname = data_utils.rand_name('rand_hostname')
Masayuki Igawabfa07602015-01-20 18:47:17 +090046 self.assertRaises(lib_exc.NotFound,
Ken'ichi Ohmichi394e6e42015-06-11 04:20:37 +000047 self.client.show_host, nonexitent_hostname)
Lingxian Kong4b398fd2013-10-04 17:14:14 +080048
Sean Dague639f2fa2015-04-27 09:00:33 -040049 @test.attr(type=['negative'])
Chris Hoge7579c1a2015-02-26 14:12:15 -080050 @test.idempotent_id('19ebe09c-bfd4-4b7c-81a2-e2e0710f59cc')
Lingxian Kong4b398fd2013-10-04 17:14:14 +080051 def test_show_host_detail_with_non_admin_user(self):
52 hostname = self._get_host_name()
53
Masayuki Igawa6b1cd292015-02-16 11:11:55 +090054 self.assertRaises(lib_exc.Forbidden,
Ken'ichi Ohmichi394e6e42015-06-11 04:20:37 +000055 self.non_admin_client.show_host,
Lingxian Kong4b398fd2013-10-04 17:14:14 +080056 hostname)
57
Sean Dague639f2fa2015-04-27 09:00:33 -040058 @test.attr(type=['negative'])
Chris Hoge7579c1a2015-02-26 14:12:15 -080059 @test.idempotent_id('e40c72b1-0239-4ed6-ba21-81a184df1f7c')
Lingxian Kong4b398fd2013-10-04 17:14:14 +080060 def test_update_host_with_non_admin_user(self):
61 hostname = self._get_host_name()
62
Masayuki Igawa6b1cd292015-02-16 11:11:55 +090063 self.assertRaises(lib_exc.Forbidden,
Lingxian Kong4b398fd2013-10-04 17:14:14 +080064 self.non_admin_client.update_host,
Haiwei Xu0c1ca792014-01-15 22:49:24 +090065 hostname,
66 status='enable',
67 maintenance_mode='enable')
Lingxian Kong4b398fd2013-10-04 17:14:14 +080068
Sean Dague639f2fa2015-04-27 09:00:33 -040069 @test.attr(type=['negative'])
Chris Hoge7579c1a2015-02-26 14:12:15 -080070 @test.idempotent_id('fbe2bf3e-3246-4a95-a59f-94e4e298ec77')
Lingxian Kong4b398fd2013-10-04 17:14:14 +080071 def test_update_host_with_invalid_status(self):
72 # 'status' can only be 'enable' or 'disable'
73 hostname = self._get_host_name()
74
Masayuki Igawa4b29e472015-02-16 10:41:54 +090075 self.assertRaises(lib_exc.BadRequest,
Lingxian Kong4b398fd2013-10-04 17:14:14 +080076 self.client.update_host,
77 hostname,
78 status='invalid',
79 maintenance_mode='enable')
80
Sean Dague639f2fa2015-04-27 09:00:33 -040081 @test.attr(type=['negative'])
Chris Hoge7579c1a2015-02-26 14:12:15 -080082 @test.idempotent_id('ab1e230e-5e22-41a9-8699-82b9947915d4')
Lingxian Kong4b398fd2013-10-04 17:14:14 +080083 def test_update_host_with_invalid_maintenance_mode(self):
84 # 'maintenance_mode' can only be 'enable' or 'disable'
85 hostname = self._get_host_name()
86
Masayuki Igawa4b29e472015-02-16 10:41:54 +090087 self.assertRaises(lib_exc.BadRequest,
Lingxian Kong4b398fd2013-10-04 17:14:14 +080088 self.client.update_host,
89 hostname,
90 status='enable',
91 maintenance_mode='invalid')
92
Sean Dague639f2fa2015-04-27 09:00:33 -040093 @test.attr(type=['negative'])
Chris Hoge7579c1a2015-02-26 14:12:15 -080094 @test.idempotent_id('0cd85f75-6992-4a4a-b1bd-d11e37fd0eee')
Lingxian Kong4b398fd2013-10-04 17:14:14 +080095 def test_update_host_without_param(self):
96 # 'status' or 'maintenance_mode' needed for host update
97 hostname = self._get_host_name()
98
Masayuki Igawa4b29e472015-02-16 10:41:54 +090099 self.assertRaises(lib_exc.BadRequest,
Lingxian Kong4b398fd2013-10-04 17:14:14 +0800100 self.client.update_host,
101 hostname)
102
Sean Dague639f2fa2015-04-27 09:00:33 -0400103 @test.attr(type=['negative'])
Chris Hoge7579c1a2015-02-26 14:12:15 -0800104 @test.idempotent_id('23c92146-2100-4d68-b2d6-c7ade970c9c1')
Lingxian Kong4b398fd2013-10-04 17:14:14 +0800105 def test_update_nonexistent_host(self):
106 nonexitent_hostname = data_utils.rand_name('rand_hostname')
107
Masayuki Igawabfa07602015-01-20 18:47:17 +0900108 self.assertRaises(lib_exc.NotFound,
Lingxian Kong4b398fd2013-10-04 17:14:14 +0800109 self.client.update_host,
110 nonexitent_hostname,
111 status='enable',
112 maintenance_mode='enable')
113
Sean Dague639f2fa2015-04-27 09:00:33 -0400114 @test.attr(type=['negative'])
Chris Hoge7579c1a2015-02-26 14:12:15 -0800115 @test.idempotent_id('0d981ac3-4320-4898-b674-82b61fbb60e4')
Lingxian Kong4b398fd2013-10-04 17:14:14 +0800116 def test_startup_nonexistent_host(self):
117 nonexitent_hostname = data_utils.rand_name('rand_hostname')
118
Masayuki Igawabfa07602015-01-20 18:47:17 +0900119 self.assertRaises(lib_exc.NotFound,
Lingxian Kong4b398fd2013-10-04 17:14:14 +0800120 self.client.startup_host,
121 nonexitent_hostname)
122
Sean Dague639f2fa2015-04-27 09:00:33 -0400123 @test.attr(type=['negative'])
Chris Hoge7579c1a2015-02-26 14:12:15 -0800124 @test.idempotent_id('9f4ebb7e-b2ae-4e5b-a38f-0fd1bb0ddfca')
Lingxian Kong4b398fd2013-10-04 17:14:14 +0800125 def test_startup_host_with_non_admin_user(self):
126 hostname = self._get_host_name()
127
Masayuki Igawa6b1cd292015-02-16 11:11:55 +0900128 self.assertRaises(lib_exc.Forbidden,
Lingxian Kong4b398fd2013-10-04 17:14:14 +0800129 self.non_admin_client.startup_host,
130 hostname)
131
Sean Dague639f2fa2015-04-27 09:00:33 -0400132 @test.attr(type=['negative'])
Chris Hoge7579c1a2015-02-26 14:12:15 -0800133 @test.idempotent_id('9e637444-29cf-4244-88c8-831ae82c31b6')
Lingxian Kong4b398fd2013-10-04 17:14:14 +0800134 def test_shutdown_nonexistent_host(self):
135 nonexitent_hostname = data_utils.rand_name('rand_hostname')
136
Masayuki Igawabfa07602015-01-20 18:47:17 +0900137 self.assertRaises(lib_exc.NotFound,
Lingxian Kong4b398fd2013-10-04 17:14:14 +0800138 self.client.shutdown_host,
139 nonexitent_hostname)
140
Sean Dague639f2fa2015-04-27 09:00:33 -0400141 @test.attr(type=['negative'])
Chris Hoge7579c1a2015-02-26 14:12:15 -0800142 @test.idempotent_id('a803529c-7e3f-4d3c-a7d6-8e1c203d27f6')
Lingxian Kong4b398fd2013-10-04 17:14:14 +0800143 def test_shutdown_host_with_non_admin_user(self):
144 hostname = self._get_host_name()
145
Masayuki Igawa6b1cd292015-02-16 11:11:55 +0900146 self.assertRaises(lib_exc.Forbidden,
Lingxian Kong4b398fd2013-10-04 17:14:14 +0800147 self.non_admin_client.shutdown_host,
148 hostname)
149
Sean Dague639f2fa2015-04-27 09:00:33 -0400150 @test.attr(type=['negative'])
Chris Hoge7579c1a2015-02-26 14:12:15 -0800151 @test.idempotent_id('f86bfd7b-0b13-4849-ae29-0322e83ee58b')
Lingxian Kong4b398fd2013-10-04 17:14:14 +0800152 def test_reboot_nonexistent_host(self):
153 nonexitent_hostname = data_utils.rand_name('rand_hostname')
154
Masayuki Igawabfa07602015-01-20 18:47:17 +0900155 self.assertRaises(lib_exc.NotFound,
Lingxian Kong4b398fd2013-10-04 17:14:14 +0800156 self.client.reboot_host,
157 nonexitent_hostname)
158
Sean Dague639f2fa2015-04-27 09:00:33 -0400159 @test.attr(type=['negative'])
Chris Hoge7579c1a2015-02-26 14:12:15 -0800160 @test.idempotent_id('02d79bb9-eb57-4612-abf6-2cb38897d2f8')
Lingxian Kong4b398fd2013-10-04 17:14:14 +0800161 def test_reboot_host_with_non_admin_user(self):
162 hostname = self._get_host_name()
163
Masayuki Igawa6b1cd292015-02-16 11:11:55 +0900164 self.assertRaises(lib_exc.Forbidden,
Lingxian Kong4b398fd2013-10-04 17:14:14 +0800165 self.non_admin_client.reboot_host,
166 hostname)