blob: dff4aaae9f832026181ce3f4d31fa8d234737488 [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
17from tempest.api.compute import base
18from tempest.common.utils import data_utils
19from tempest import exceptions
20from tempest.test import attr
21
22
23class ServersAdminNegativeTestJSON(base.BaseV2ComputeAdminTest):
24
25 """
26 Tests Servers API using admin privileges
27 """
28
huangtianhua5232b662013-10-11 10:21:58 +080029 @classmethod
30 def setUpClass(cls):
31 super(ServersAdminNegativeTestJSON, cls).setUpClass()
32 cls.client = cls.os_adm.servers_client
33 cls.non_adm_client = cls.servers_client
34 cls.flavors_client = cls.os_adm.flavors_client
35 cls.identity_client = cls._get_identity_admin_client()
36 tenant = cls.identity_client.get_tenant_by_name(
37 cls.client.tenant_name)
38 cls.tenant_id = tenant['id']
39
40 cls.s1_name = data_utils.rand_name('server')
41 resp, server = cls.create_test_server(name=cls.s1_name,
42 wait_until='ACTIVE')
43 cls.s1_id = server['id']
44
45 def _get_unused_flavor_id(self):
46 flavor_id = data_utils.rand_int_id(start=1000)
47 while True:
48 try:
49 resp, body = self.flavors_client.get_flavor_details(flavor_id)
50 except exceptions.NotFound:
51 break
52 flavor_id = data_utils.rand_int_id(start=1000)
53 return flavor_id
54
55 @attr(type=['negative', 'gate'])
56 def test_resize_server_using_overlimit_ram(self):
57 flavor_name = data_utils.rand_name("flavor-")
58 flavor_id = self._get_unused_flavor_id()
59 resp, quota_set = self.quotas_client.get_default_quota_set(
60 self.tenant_id)
61 ram = int(quota_set['ram']) + 1
62 vcpus = 8
63 disk = 10
64 resp, flavor_ref = self.flavors_client.create_flavor(flavor_name,
65 ram, vcpus, disk,
66 flavor_id)
67 self.addCleanup(self.flavors_client.delete_flavor, flavor_id)
68 self.assertRaises(exceptions.OverLimit,
69 self.client.resize,
70 self.servers[0]['id'],
71 flavor_ref['id'])
72
73 @attr(type=['negative', 'gate'])
74 def test_resize_server_using_overlimit_vcpus(self):
75 flavor_name = data_utils.rand_name("flavor-")
76 flavor_id = self._get_unused_flavor_id()
77 ram = 512
78 resp, quota_set = self.quotas_client.get_default_quota_set(
79 self.tenant_id)
80 vcpus = int(quota_set['cores']) + 1
81 disk = 10
82 resp, flavor_ref = self.flavors_client.create_flavor(flavor_name,
83 ram, vcpus, disk,
84 flavor_id)
85 self.addCleanup(self.flavors_client.delete_flavor, flavor_id)
86 self.assertRaises(exceptions.OverLimit,
87 self.client.resize,
88 self.servers[0]['id'],
89 flavor_ref['id'])
90
91 @attr(type=['negative', 'gate'])
92 def test_reset_state_server_invalid_state(self):
93 self.assertRaises(exceptions.BadRequest,
94 self.client.reset_state, self.s1_id,
95 state='invalid')
96
97 @attr(type=['negative', 'gate'])
98 def test_reset_state_server_invalid_type(self):
99 self.assertRaises(exceptions.BadRequest,
100 self.client.reset_state, self.s1_id,
101 state=1)
102
103 @attr(type=['negative', 'gate'])
104 def test_reset_state_server_nonexistent_server(self):
105 self.assertRaises(exceptions.NotFound,
106 self.client.reset_state, '999')
107
108 @attr(type=['negative', 'gate'])
109 def test_get_server_diagnostics_by_non_admin(self):
110 # Non-admin user can not view server diagnostics according to policy
111 self.assertRaises(exceptions.Unauthorized,
112 self.non_adm_client.get_server_diagnostics,
113 self.s1_id)
114
115 @attr(type=['negative', 'gate'])
116 def test_migrate_non_existent_server(self):
117 # migrate a non existent server
118 self.assertRaises(exceptions.NotFound,
119 self.client.migrate_server,
120 str(uuid.uuid4()))
121
122 @attr(type=['negative', 'gate'])
123 def test_migrate_server_invalid_state(self):
124 # create server.
125 resp, server = self.create_test_server(wait_until='ACTIVE')
126 self.assertEqual(202, resp.status)
127 server_id = server['id']
128 # suspend the server.
129 resp, _ = self.client.suspend_server(server_id)
130 self.assertEqual(202, resp.status)
131 self.client.wait_for_server_status(server_id, 'SUSPENDED')
132 # migrate an suspended server should fail
133 self.assertRaises(exceptions.Conflict,
134 self.client.migrate_server,
135 server_id)
136
137
138class ServersAdminNegativeTestXML(ServersAdminNegativeTestJSON):
139 _interface = 'xml'