blob: f4d010e17079955be7d1ee04719d4186ad8f1c00 [file] [log] [blame]
huangtianhua5232b662013-10-11 10:21:58 +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
15import uuid
16
Matt Riedemann7051d622014-03-23 18:36:17 -070017import testtools
18
huangtianhua5232b662013-10-11 10:21:58 +080019from tempest.api.compute import base
20from tempest.common.utils import data_utils
Matt Riedemann7051d622014-03-23 18:36:17 -070021from tempest import config
huangtianhua5232b662013-10-11 10:21:58 +080022from tempest import exceptions
Masayuki Igawa394d8d92014-03-04 17:21:56 +090023from tempest import test
huangtianhua5232b662013-10-11 10:21:58 +080024
Matt Riedemann7051d622014-03-23 18:36:17 -070025CONF = config.CONF
26
huangtianhua5232b662013-10-11 10:21:58 +080027
28class ServersAdminNegativeTestJSON(base.BaseV2ComputeAdminTest):
29
30 """
31 Tests Servers API using admin privileges
32 """
33
huangtianhua5232b662013-10-11 10:21:58 +080034 @classmethod
35 def setUpClass(cls):
36 super(ServersAdminNegativeTestJSON, cls).setUpClass()
37 cls.client = cls.os_adm.servers_client
38 cls.non_adm_client = cls.servers_client
39 cls.flavors_client = cls.os_adm.flavors_client
Andrea Frittoli9612e812014-03-13 10:57:26 +000040 cls.tenant_id = cls.client.tenant_id
huangtianhua5232b662013-10-11 10:21:58 +080041
42 cls.s1_name = data_utils.rand_name('server')
43 resp, server = cls.create_test_server(name=cls.s1_name,
44 wait_until='ACTIVE')
45 cls.s1_id = server['id']
46
47 def _get_unused_flavor_id(self):
48 flavor_id = data_utils.rand_int_id(start=1000)
49 while True:
50 try:
51 resp, body = self.flavors_client.get_flavor_details(flavor_id)
52 except exceptions.NotFound:
53 break
54 flavor_id = data_utils.rand_int_id(start=1000)
55 return flavor_id
56
Ken'ichi Ohmichi3efb4562014-06-24 16:14:07 +090057 @test.skip_because(bug="1298131")
Joseph Lanouxb3d956f2014-06-25 14:45:24 +000058 @testtools.skipUnless(CONF.compute_feature_enabled.resize,
59 'Resize not available.')
Masayuki Igawa394d8d92014-03-04 17:21:56 +090060 @test.attr(type=['negative', 'gate'])
huangtianhua5232b662013-10-11 10:21:58 +080061 def test_resize_server_using_overlimit_ram(self):
62 flavor_name = data_utils.rand_name("flavor-")
63 flavor_id = self._get_unused_flavor_id()
64 resp, quota_set = self.quotas_client.get_default_quota_set(
65 self.tenant_id)
66 ram = int(quota_set['ram']) + 1
67 vcpus = 8
68 disk = 10
69 resp, flavor_ref = self.flavors_client.create_flavor(flavor_name,
70 ram, vcpus, disk,
71 flavor_id)
72 self.addCleanup(self.flavors_client.delete_flavor, flavor_id)
Ken'ichi Ohmichi3efb4562014-06-24 16:14:07 +090073 self.assertRaises(exceptions.Unauthorized,
huangtianhua5232b662013-10-11 10:21:58 +080074 self.client.resize,
75 self.servers[0]['id'],
76 flavor_ref['id'])
77
Ken'ichi Ohmichi3efb4562014-06-24 16:14:07 +090078 @test.skip_because(bug="1298131")
Joseph Lanouxb3d956f2014-06-25 14:45:24 +000079 @testtools.skipUnless(CONF.compute_feature_enabled.resize,
80 'Resize not available.')
Masayuki Igawa394d8d92014-03-04 17:21:56 +090081 @test.attr(type=['negative', 'gate'])
huangtianhua5232b662013-10-11 10:21:58 +080082 def test_resize_server_using_overlimit_vcpus(self):
83 flavor_name = data_utils.rand_name("flavor-")
84 flavor_id = self._get_unused_flavor_id()
85 ram = 512
86 resp, quota_set = self.quotas_client.get_default_quota_set(
87 self.tenant_id)
88 vcpus = int(quota_set['cores']) + 1
89 disk = 10
90 resp, flavor_ref = self.flavors_client.create_flavor(flavor_name,
91 ram, vcpus, disk,
92 flavor_id)
93 self.addCleanup(self.flavors_client.delete_flavor, flavor_id)
Ken'ichi Ohmichi3efb4562014-06-24 16:14:07 +090094 self.assertRaises(exceptions.Unauthorized,
huangtianhua5232b662013-10-11 10:21:58 +080095 self.client.resize,
96 self.servers[0]['id'],
97 flavor_ref['id'])
98
Masayuki Igawa394d8d92014-03-04 17:21:56 +090099 @test.attr(type=['negative', 'gate'])
huangtianhua5232b662013-10-11 10:21:58 +0800100 def test_reset_state_server_invalid_state(self):
101 self.assertRaises(exceptions.BadRequest,
102 self.client.reset_state, self.s1_id,
103 state='invalid')
104
Masayuki Igawa394d8d92014-03-04 17:21:56 +0900105 @test.attr(type=['negative', 'gate'])
huangtianhua5232b662013-10-11 10:21:58 +0800106 def test_reset_state_server_invalid_type(self):
107 self.assertRaises(exceptions.BadRequest,
108 self.client.reset_state, self.s1_id,
109 state=1)
110
Masayuki Igawa394d8d92014-03-04 17:21:56 +0900111 @test.attr(type=['negative', 'gate'])
huangtianhua5232b662013-10-11 10:21:58 +0800112 def test_reset_state_server_nonexistent_server(self):
113 self.assertRaises(exceptions.NotFound,
114 self.client.reset_state, '999')
115
Masayuki Igawa394d8d92014-03-04 17:21:56 +0900116 @test.attr(type=['negative', 'gate'])
huangtianhua5232b662013-10-11 10:21:58 +0800117 def test_get_server_diagnostics_by_non_admin(self):
118 # Non-admin user can not view server diagnostics according to policy
119 self.assertRaises(exceptions.Unauthorized,
120 self.non_adm_client.get_server_diagnostics,
121 self.s1_id)
122
Masayuki Igawa394d8d92014-03-04 17:21:56 +0900123 @test.attr(type=['negative', 'gate'])
huangtianhua5232b662013-10-11 10:21:58 +0800124 def test_migrate_non_existent_server(self):
125 # migrate a non existent server
126 self.assertRaises(exceptions.NotFound,
127 self.client.migrate_server,
128 str(uuid.uuid4()))
129
Andrea Rosa3df237c2014-07-18 14:22:53 +0100130 @testtools.skipUnless(CONF.compute_feature_enabled.resize,
131 'Resize not available.')
Matt Riedemann7051d622014-03-23 18:36:17 -0700132 @testtools.skipUnless(CONF.compute_feature_enabled.suspend,
133 'Suspend is not available.')
Masayuki Igawa394d8d92014-03-04 17:21:56 +0900134 @test.attr(type=['negative', 'gate'])
huangtianhua5232b662013-10-11 10:21:58 +0800135 def test_migrate_server_invalid_state(self):
136 # create server.
137 resp, server = self.create_test_server(wait_until='ACTIVE')
138 self.assertEqual(202, resp.status)
139 server_id = server['id']
140 # suspend the server.
141 resp, _ = self.client.suspend_server(server_id)
142 self.assertEqual(202, resp.status)
143 self.client.wait_for_server_status(server_id, 'SUSPENDED')
144 # migrate an suspended server should fail
145 self.assertRaises(exceptions.Conflict,
146 self.client.migrate_server,
147 server_id)
148
149
150class ServersAdminNegativeTestXML(ServersAdminNegativeTestJSON):
151 _interface = 'xml'