blob: 65ada4d194c395aa1fff319e0cd68f5db8dd12cb [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):
Ken'ichi Ohmichi88363cb2015-11-19 08:00:54 +000023 """Tests hosts API using admin privileges."""
Lingxian Kong4b398fd2013-10-04 17:14:14 +080024
Lingxian Kong4b398fd2013-10-04 17:14:14 +080025 @classmethod
Rohan Kanade60b73092015-02-04 17:58:19 +053026 def setup_clients(cls):
27 super(HostsAdminNegativeTestJSON, cls).setup_clients()
Lingxian Kong4b398fd2013-10-04 17:14:14 +080028 cls.client = cls.os_adm.hosts_client
29 cls.non_admin_client = cls.os.hosts_client
30
31 def _get_host_name(self):
ghanshyame1bd29e2015-08-18 16:47:24 +090032 hosts = self.client.list_hosts()['hosts']
Lingxian Kong4b398fd2013-10-04 17:14:14 +080033 self.assertTrue(len(hosts) >= 1)
34 hostname = hosts[0]['host_name']
35 return hostname
36
Sean Dague639f2fa2015-04-27 09:00:33 -040037 @test.attr(type=['negative'])
Chris Hoge7579c1a2015-02-26 14:12:15 -080038 @test.idempotent_id('dd032027-0210-4d9c-860e-69b1b8deed5f')
Lingxian Kong4b398fd2013-10-04 17:14:14 +080039 def test_list_hosts_with_non_admin_user(self):
Masayuki Igawa6b1cd292015-02-16 11:11:55 +090040 self.assertRaises(lib_exc.Forbidden,
Lingxian Kong4b398fd2013-10-04 17:14:14 +080041 self.non_admin_client.list_hosts)
42
Sean Dague639f2fa2015-04-27 09:00:33 -040043 @test.attr(type=['negative'])
Chris Hoge7579c1a2015-02-26 14:12:15 -080044 @test.idempotent_id('e75b0a1a-041f-47a1-8b4a-b72a6ff36d3f')
Lingxian Kong4b398fd2013-10-04 17:14:14 +080045 def test_show_host_detail_with_nonexistent_hostname(self):
46 nonexitent_hostname = data_utils.rand_name('rand_hostname')
Masayuki Igawabfa07602015-01-20 18:47:17 +090047 self.assertRaises(lib_exc.NotFound,
Ken'ichi Ohmichi394e6e42015-06-11 04:20:37 +000048 self.client.show_host, nonexitent_hostname)
Lingxian Kong4b398fd2013-10-04 17:14:14 +080049
Sean Dague639f2fa2015-04-27 09:00:33 -040050 @test.attr(type=['negative'])
Chris Hoge7579c1a2015-02-26 14:12:15 -080051 @test.idempotent_id('19ebe09c-bfd4-4b7c-81a2-e2e0710f59cc')
Lingxian Kong4b398fd2013-10-04 17:14:14 +080052 def test_show_host_detail_with_non_admin_user(self):
53 hostname = self._get_host_name()
54
Masayuki Igawa6b1cd292015-02-16 11:11:55 +090055 self.assertRaises(lib_exc.Forbidden,
Ken'ichi Ohmichi394e6e42015-06-11 04:20:37 +000056 self.non_admin_client.show_host,
Lingxian Kong4b398fd2013-10-04 17:14:14 +080057 hostname)
58
Sean Dague639f2fa2015-04-27 09:00:33 -040059 @test.attr(type=['negative'])
Chris Hoge7579c1a2015-02-26 14:12:15 -080060 @test.idempotent_id('e40c72b1-0239-4ed6-ba21-81a184df1f7c')
Lingxian Kong4b398fd2013-10-04 17:14:14 +080061 def test_update_host_with_non_admin_user(self):
62 hostname = self._get_host_name()
63
Masayuki Igawa6b1cd292015-02-16 11:11:55 +090064 self.assertRaises(lib_exc.Forbidden,
Lingxian Kong4b398fd2013-10-04 17:14:14 +080065 self.non_admin_client.update_host,
Haiwei Xu0c1ca792014-01-15 22:49:24 +090066 hostname,
67 status='enable',
68 maintenance_mode='enable')
Lingxian Kong4b398fd2013-10-04 17:14:14 +080069
Sean Dague639f2fa2015-04-27 09:00:33 -040070 @test.attr(type=['negative'])
Chris Hoge7579c1a2015-02-26 14:12:15 -080071 @test.idempotent_id('fbe2bf3e-3246-4a95-a59f-94e4e298ec77')
Lingxian Kong4b398fd2013-10-04 17:14:14 +080072 def test_update_host_with_invalid_status(self):
73 # 'status' can only be 'enable' or 'disable'
74 hostname = self._get_host_name()
75
Masayuki Igawa4b29e472015-02-16 10:41:54 +090076 self.assertRaises(lib_exc.BadRequest,
Lingxian Kong4b398fd2013-10-04 17:14:14 +080077 self.client.update_host,
78 hostname,
79 status='invalid',
80 maintenance_mode='enable')
81
Sean Dague639f2fa2015-04-27 09:00:33 -040082 @test.attr(type=['negative'])
Chris Hoge7579c1a2015-02-26 14:12:15 -080083 @test.idempotent_id('ab1e230e-5e22-41a9-8699-82b9947915d4')
Lingxian Kong4b398fd2013-10-04 17:14:14 +080084 def test_update_host_with_invalid_maintenance_mode(self):
85 # 'maintenance_mode' can only be 'enable' or 'disable'
86 hostname = self._get_host_name()
87
Masayuki Igawa4b29e472015-02-16 10:41:54 +090088 self.assertRaises(lib_exc.BadRequest,
Lingxian Kong4b398fd2013-10-04 17:14:14 +080089 self.client.update_host,
90 hostname,
91 status='enable',
92 maintenance_mode='invalid')
93
Sean Dague639f2fa2015-04-27 09:00:33 -040094 @test.attr(type=['negative'])
Chris Hoge7579c1a2015-02-26 14:12:15 -080095 @test.idempotent_id('0cd85f75-6992-4a4a-b1bd-d11e37fd0eee')
Lingxian Kong4b398fd2013-10-04 17:14:14 +080096 def test_update_host_without_param(self):
97 # 'status' or 'maintenance_mode' needed for host update
98 hostname = self._get_host_name()
99
Masayuki Igawa4b29e472015-02-16 10:41:54 +0900100 self.assertRaises(lib_exc.BadRequest,
Lingxian Kong4b398fd2013-10-04 17:14:14 +0800101 self.client.update_host,
102 hostname)
103
Sean Dague639f2fa2015-04-27 09:00:33 -0400104 @test.attr(type=['negative'])
Chris Hoge7579c1a2015-02-26 14:12:15 -0800105 @test.idempotent_id('23c92146-2100-4d68-b2d6-c7ade970c9c1')
Lingxian Kong4b398fd2013-10-04 17:14:14 +0800106 def test_update_nonexistent_host(self):
107 nonexitent_hostname = data_utils.rand_name('rand_hostname')
108
Masayuki Igawabfa07602015-01-20 18:47:17 +0900109 self.assertRaises(lib_exc.NotFound,
Lingxian Kong4b398fd2013-10-04 17:14:14 +0800110 self.client.update_host,
111 nonexitent_hostname,
112 status='enable',
113 maintenance_mode='enable')
114
Sean Dague639f2fa2015-04-27 09:00:33 -0400115 @test.attr(type=['negative'])
Chris Hoge7579c1a2015-02-26 14:12:15 -0800116 @test.idempotent_id('0d981ac3-4320-4898-b674-82b61fbb60e4')
Lingxian Kong4b398fd2013-10-04 17:14:14 +0800117 def test_startup_nonexistent_host(self):
118 nonexitent_hostname = data_utils.rand_name('rand_hostname')
119
Masayuki Igawabfa07602015-01-20 18:47:17 +0900120 self.assertRaises(lib_exc.NotFound,
Lingxian Kong4b398fd2013-10-04 17:14:14 +0800121 self.client.startup_host,
122 nonexitent_hostname)
123
Sean Dague639f2fa2015-04-27 09:00:33 -0400124 @test.attr(type=['negative'])
Chris Hoge7579c1a2015-02-26 14:12:15 -0800125 @test.idempotent_id('9f4ebb7e-b2ae-4e5b-a38f-0fd1bb0ddfca')
Lingxian Kong4b398fd2013-10-04 17:14:14 +0800126 def test_startup_host_with_non_admin_user(self):
127 hostname = self._get_host_name()
128
Masayuki Igawa6b1cd292015-02-16 11:11:55 +0900129 self.assertRaises(lib_exc.Forbidden,
Lingxian Kong4b398fd2013-10-04 17:14:14 +0800130 self.non_admin_client.startup_host,
131 hostname)
132
Sean Dague639f2fa2015-04-27 09:00:33 -0400133 @test.attr(type=['negative'])
Chris Hoge7579c1a2015-02-26 14:12:15 -0800134 @test.idempotent_id('9e637444-29cf-4244-88c8-831ae82c31b6')
Lingxian Kong4b398fd2013-10-04 17:14:14 +0800135 def test_shutdown_nonexistent_host(self):
136 nonexitent_hostname = data_utils.rand_name('rand_hostname')
137
Masayuki Igawabfa07602015-01-20 18:47:17 +0900138 self.assertRaises(lib_exc.NotFound,
Lingxian Kong4b398fd2013-10-04 17:14:14 +0800139 self.client.shutdown_host,
140 nonexitent_hostname)
141
Sean Dague639f2fa2015-04-27 09:00:33 -0400142 @test.attr(type=['negative'])
Chris Hoge7579c1a2015-02-26 14:12:15 -0800143 @test.idempotent_id('a803529c-7e3f-4d3c-a7d6-8e1c203d27f6')
Lingxian Kong4b398fd2013-10-04 17:14:14 +0800144 def test_shutdown_host_with_non_admin_user(self):
145 hostname = self._get_host_name()
146
Masayuki Igawa6b1cd292015-02-16 11:11:55 +0900147 self.assertRaises(lib_exc.Forbidden,
Lingxian Kong4b398fd2013-10-04 17:14:14 +0800148 self.non_admin_client.shutdown_host,
149 hostname)
150
Sean Dague639f2fa2015-04-27 09:00:33 -0400151 @test.attr(type=['negative'])
Chris Hoge7579c1a2015-02-26 14:12:15 -0800152 @test.idempotent_id('f86bfd7b-0b13-4849-ae29-0322e83ee58b')
Lingxian Kong4b398fd2013-10-04 17:14:14 +0800153 def test_reboot_nonexistent_host(self):
154 nonexitent_hostname = data_utils.rand_name('rand_hostname')
155
Masayuki Igawabfa07602015-01-20 18:47:17 +0900156 self.assertRaises(lib_exc.NotFound,
Lingxian Kong4b398fd2013-10-04 17:14:14 +0800157 self.client.reboot_host,
158 nonexitent_hostname)
159
Sean Dague639f2fa2015-04-27 09:00:33 -0400160 @test.attr(type=['negative'])
Chris Hoge7579c1a2015-02-26 14:12:15 -0800161 @test.idempotent_id('02d79bb9-eb57-4612-abf6-2cb38897d2f8')
Lingxian Kong4b398fd2013-10-04 17:14:14 +0800162 def test_reboot_host_with_non_admin_user(self):
163 hostname = self._get_host_name()
164
Masayuki Igawa6b1cd292015-02-16 11:11:55 +0900165 self.assertRaises(lib_exc.Forbidden,
Lingxian Kong4b398fd2013-10-04 17:14:14 +0800166 self.non_admin_client.reboot_host,
167 hostname)