blob: 8f07a6a55e4e4ecf1a0d28f3475be67919e9a26e [file] [log] [blame]
ZhiQiang Fan39f97222013-09-20 04:49:44 +08001# Copyright 2012 OpenStack Foundation
Jay Pipesf38eaac2012-06-21 13:37:35 -04002# All Rights Reserved.
3#
4# Licensed under the Apache License, Version 2.0 (the "License"); you may
5# not use this file except in compliance with the License. You may obtain
6# a copy of the License at
7#
8# http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13# License for the specific language governing permissions and limitations
14# under the License.
15
Masayuki Igawabfa07602015-01-20 18:47:17 +090016from tempest_lib import exceptions as lib_exc
Jay Pipesf38eaac2012-06-21 13:37:35 -040017
Matthew Treinish481466b2012-12-20 17:16:01 -050018from tempest import clients
Andrea Frittoli878d5ab2015-01-30 13:22:50 +000019from tempest.common import cred_provider
Masayuki Igawa259c1132013-10-31 17:48:44 +090020from tempest.common.utils import data_utils
Matthew Treinishdb2c5972014-01-31 22:18:59 +000021from tempest import config
Masayuki Igawa630a3fa2014-03-12 19:51:45 +090022from tempest.openstack.common import log as logging
Attila Fazekasdc216422013-01-29 15:12:14 +010023import tempest.test
Rohit Karajgi6b1e1542012-05-14 05:55:54 -070024
Matthew Treinishdb2c5972014-01-31 22:18:59 +000025CONF = config.CONF
Masayuki Igawa630a3fa2014-03-12 19:51:45 +090026LOG = logging.getLogger(__name__)
Matthew Treinishdb2c5972014-01-31 22:18:59 +000027
Rohit Karajgi6b1e1542012-05-14 05:55:54 -070028
Attila Fazekas0d0c6162013-02-24 09:14:23 +010029class BaseIdentityAdminTest(tempest.test.BaseTestCase):
Rohit Karajgi6b1e1542012-05-14 05:55:54 -070030
31 @classmethod
Andrea Frittoli7688e742014-09-15 12:38:22 +010032 def resource_setup(cls):
33 super(BaseIdentityAdminTest, cls).resource_setup()
Andrea Frittolic0978352015-02-06 15:57:40 +000034 cls.os_adm = clients.AdminManager()
35 cls.os = clients.Manager()
Jay Pipesf38eaac2012-06-21 13:37:35 -040036
Rohit Karajgi6b1e1542012-05-14 05:55:54 -070037 @classmethod
Matthew Treinishdb2c5972014-01-31 22:18:59 +000038 def disable_user(cls, user_name):
39 user = cls.get_user_by_name(user_name)
40 cls.client.enable_disable_user(user['id'], False)
Rohit Karajgi6b1e1542012-05-14 05:55:54 -070041
Matthew Treinishdb2c5972014-01-31 22:18:59 +000042 @classmethod
43 def disable_tenant(cls, tenant_name):
44 tenant = cls.get_tenant_by_name(tenant_name)
45 cls.client.update_tenant(tenant['id'], enabled=False)
Rohit Karajgi6b1e1542012-05-14 05:55:54 -070046
Matthew Treinishdb2c5972014-01-31 22:18:59 +000047 @classmethod
48 def get_user_by_name(cls, name):
David Kranzb7afa922014-12-30 10:56:26 -050049 users = cls.client.get_users()
Rohit Karajgi6b1e1542012-05-14 05:55:54 -070050 user = [u for u in users if u['name'] == name]
51 if len(user) > 0:
52 return user[0]
53
Matthew Treinishdb2c5972014-01-31 22:18:59 +000054 @classmethod
55 def get_tenant_by_name(cls, name):
56 try:
David Kranzb7afa922014-12-30 10:56:26 -050057 tenants = cls.client.list_tenants()
Matthew Treinishdb2c5972014-01-31 22:18:59 +000058 except AttributeError:
David Kranzb7afa922014-12-30 10:56:26 -050059 tenants = cls.client.list_projects()
Rohit Karajgi6b1e1542012-05-14 05:55:54 -070060 tenant = [t for t in tenants if t['name'] == name]
61 if len(tenant) > 0:
62 return tenant[0]
63
Matthew Treinishdb2c5972014-01-31 22:18:59 +000064 @classmethod
65 def get_role_by_name(cls, name):
David Kranzb7afa922014-12-30 10:56:26 -050066 roles = cls.client.list_roles()
Rohit Karajgi6b1e1542012-05-14 05:55:54 -070067 role = [r for r in roles if r['name'] == name]
68 if len(role) > 0:
69 return role[0]
70
71
Matthew Treinishdb2c5972014-01-31 22:18:59 +000072class BaseIdentityV2AdminTest(BaseIdentityAdminTest):
73
74 @classmethod
Andrea Frittoli7688e742014-09-15 12:38:22 +010075 def resource_setup(cls):
Matthew Treinishdb2c5972014-01-31 22:18:59 +000076 if not CONF.identity_feature_enabled.api_v2:
77 raise cls.skipException("Identity api v2 is not enabled")
Andrea Frittoli7688e742014-09-15 12:38:22 +010078 super(BaseIdentityV2AdminTest, cls).resource_setup()
Matthew Treinishdb2c5972014-01-31 22:18:59 +000079 cls.client = cls.os_adm.identity_client
80 cls.token_client = cls.os_adm.token_client
81 if not cls.client.has_admin_extensions():
82 raise cls.skipException("Admin extensions disabled")
83 cls.data = DataGenerator(cls.client)
84 cls.non_admin_client = cls.os.identity_client
85
86 @classmethod
Andrea Frittoli7688e742014-09-15 12:38:22 +010087 def resource_cleanup(cls):
Matthew Treinishdb2c5972014-01-31 22:18:59 +000088 cls.data.teardown_all()
Andrea Frittoli7688e742014-09-15 12:38:22 +010089 super(BaseIdentityV2AdminTest, cls).resource_cleanup()
Matthew Treinishdb2c5972014-01-31 22:18:59 +000090
91
92class BaseIdentityV3AdminTest(BaseIdentityAdminTest):
93
94 @classmethod
Andrea Frittoli7688e742014-09-15 12:38:22 +010095 def resource_setup(cls):
Matthew Treinishdb2c5972014-01-31 22:18:59 +000096 if not CONF.identity_feature_enabled.api_v3:
97 raise cls.skipException("Identity api v3 is not enabled")
Andrea Frittoli7688e742014-09-15 12:38:22 +010098 super(BaseIdentityV3AdminTest, cls).resource_setup()
Matthew Treinishdb2c5972014-01-31 22:18:59 +000099 cls.client = cls.os_adm.identity_v3_client
100 cls.token = cls.os_adm.token_v3_client
101 cls.endpoints_client = cls.os_adm.endpoints_client
ravikumar-venkatesan3052e942014-05-12 18:25:17 +0000102 cls.region_client = cls.os_adm.region_client
Matthew Treinishdb2c5972014-01-31 22:18:59 +0000103 cls.data = DataGenerator(cls.client)
104 cls.non_admin_client = cls.os.identity_v3_client
105 cls.service_client = cls.os_adm.service_client
106 cls.policy_client = cls.os_adm.policy_client
107 cls.creds_client = cls.os_adm.credentials_client
108 cls.non_admin_client = cls.os.identity_v3_client
109
110 @classmethod
Andrea Frittoli7688e742014-09-15 12:38:22 +0100111 def resource_cleanup(cls):
Matthew Treinishdb2c5972014-01-31 22:18:59 +0000112 cls.data.teardown_all()
Andrea Frittoli7688e742014-09-15 12:38:22 +0100113 super(BaseIdentityV3AdminTest, cls).resource_cleanup()
Matthew Treinishdb2c5972014-01-31 22:18:59 +0000114
David Kranzd8ccb792014-12-29 11:32:05 -0500115 @classmethod
116 def get_user_by_name(cls, name):
117 users = cls.client.get_users()
118 user = [u for u in users if u['name'] == name]
119 if len(user) > 0:
120 return user[0]
121
122 @classmethod
123 def get_tenant_by_name(cls, name):
124 tenants = cls.client.list_projects()
125 tenant = [t for t in tenants if t['name'] == name]
126 if len(tenant) > 0:
127 return tenant[0]
128
129 @classmethod
130 def get_role_by_name(cls, name):
131 roles = cls.client.list_roles()
132 role = [r for r in roles if r['name'] == name]
133 if len(role) > 0:
134 return role[0]
135
Matthew Treinishdb2c5972014-01-31 22:18:59 +0000136
Rohit Karajgi6b1e1542012-05-14 05:55:54 -0700137class DataGenerator(object):
138
139 def __init__(self, client):
140 self.client = client
141 self.users = []
142 self.tenants = []
143 self.roles = []
144 self.role_name = None
Nayna Patele6331362013-08-12 06:59:48 +0000145 self.v3_users = []
146 self.projects = []
147 self.v3_roles = []
nayna-patel2db83b32014-05-15 11:41:03 +0000148 self.domains = []
Rohit Karajgi6b1e1542012-05-14 05:55:54 -0700149
Andrea Frittoli422fbdf2014-03-20 10:05:18 +0000150 @property
151 def test_credentials(self):
Andrea Frittoli878d5ab2015-01-30 13:22:50 +0000152 return cred_provider.get_credentials(username=self.test_user,
153 user_id=self.user['id'],
154 password=self.test_password,
155 tenant_name=self.test_tenant,
156 tenant_id=self.tenant['id'])
Andrea Frittoli422fbdf2014-03-20 10:05:18 +0000157
Rohit Karajgi6b1e1542012-05-14 05:55:54 -0700158 def setup_test_user(self):
Sean Daguef237ccb2013-01-04 15:19:14 -0500159 """Set up a test user."""
Rohit Karajgi6b1e1542012-05-14 05:55:54 -0700160 self.setup_test_tenant()
Masayuki Igawa259c1132013-10-31 17:48:44 +0900161 self.test_user = data_utils.rand_name('test_user_')
162 self.test_password = data_utils.rand_name('pass_')
Rohit Karajgi6b1e1542012-05-14 05:55:54 -0700163 self.test_email = self.test_user + '@testmail.tm'
David Kranzb7afa922014-12-30 10:56:26 -0500164 self.user = self.client.create_user(self.test_user,
165 self.test_password,
166 self.tenant['id'],
167 self.test_email)
Rohit Karajgi6b1e1542012-05-14 05:55:54 -0700168 self.users.append(self.user)
169
170 def setup_test_tenant(self):
Sean Daguef237ccb2013-01-04 15:19:14 -0500171 """Set up a test tenant."""
Masayuki Igawa259c1132013-10-31 17:48:44 +0900172 self.test_tenant = data_utils.rand_name('test_tenant_')
173 self.test_description = data_utils.rand_name('desc_')
David Kranzb7afa922014-12-30 10:56:26 -0500174 self.tenant = self.client.create_tenant(
Zhongyue Luoa1343de2013-01-04 16:21:35 +0800175 name=self.test_tenant,
176 description=self.test_description)
Rohit Karajgi6b1e1542012-05-14 05:55:54 -0700177 self.tenants.append(self.tenant)
178
179 def setup_test_role(self):
Sean Daguef237ccb2013-01-04 15:19:14 -0500180 """Set up a test role."""
Masayuki Igawa259c1132013-10-31 17:48:44 +0900181 self.test_role = data_utils.rand_name('role')
David Kranzb7afa922014-12-30 10:56:26 -0500182 self.role = self.client.create_role(self.test_role)
Rohit Karajgi69e80a02012-05-15 03:54:04 -0700183 self.roles.append(self.role)
Rohit Karajgi6b1e1542012-05-14 05:55:54 -0700184
Nayna Patele6331362013-08-12 06:59:48 +0000185 def setup_test_v3_user(self):
186 """Set up a test v3 user."""
187 self.setup_test_project()
Masayuki Igawa259c1132013-10-31 17:48:44 +0900188 self.test_user = data_utils.rand_name('test_user_')
189 self.test_password = data_utils.rand_name('pass_')
Nayna Patele6331362013-08-12 06:59:48 +0000190 self.test_email = self.test_user + '@testmail.tm'
David Kranzd8ccb792014-12-29 11:32:05 -0500191 self.v3_user = self.client.create_user(
wanglianminb1ddea72014-02-25 17:17:30 +0800192 self.test_user,
193 password=self.test_password,
194 project_id=self.project['id'],
195 email=self.test_email)
Nayna Patele6331362013-08-12 06:59:48 +0000196 self.v3_users.append(self.v3_user)
197
198 def setup_test_project(self):
199 """Set up a test project."""
Masayuki Igawa259c1132013-10-31 17:48:44 +0900200 self.test_project = data_utils.rand_name('test_project_')
201 self.test_description = data_utils.rand_name('desc_')
David Kranzd8ccb792014-12-29 11:32:05 -0500202 self.project = self.client.create_project(
Nayna Patele6331362013-08-12 06:59:48 +0000203 name=self.test_project,
204 description=self.test_description)
205 self.projects.append(self.project)
206
207 def setup_test_v3_role(self):
208 """Set up a test v3 role."""
Masayuki Igawa259c1132013-10-31 17:48:44 +0900209 self.test_role = data_utils.rand_name('role')
David Kranzd8ccb792014-12-29 11:32:05 -0500210 self.v3_role = self.client.create_role(self.test_role)
Nayna Patele6331362013-08-12 06:59:48 +0000211 self.v3_roles.append(self.v3_role)
212
nayna-patel2db83b32014-05-15 11:41:03 +0000213 def setup_test_domain(self):
214 """Set up a test domain."""
215 self.test_domain = data_utils.rand_name('test_domain')
216 self.test_description = data_utils.rand_name('desc')
David Kranzd8ccb792014-12-29 11:32:05 -0500217 self.domain = self.client.create_domain(
nayna-patel2db83b32014-05-15 11:41:03 +0000218 name=self.test_domain,
219 description=self.test_description)
220 self.domains.append(self.domain)
221
Masayuki Igawa630a3fa2014-03-12 19:51:45 +0900222 @staticmethod
223 def _try_wrapper(func, item, **kwargs):
224 try:
225 if kwargs:
David Kranz9e2ad372014-10-06 17:06:20 -0400226 func(item['id'], **kwargs)
Masayuki Igawa630a3fa2014-03-12 19:51:45 +0900227 else:
228 func(item['id'])
Masayuki Igawabfa07602015-01-20 18:47:17 +0900229 except lib_exc.NotFound:
Masayuki Igawa630a3fa2014-03-12 19:51:45 +0900230 pass
231 except Exception:
232 LOG.exception("Unexpected exception occurred in %s deletion."
233 " But ignored here." % item['id'])
234
Rohit Karajgi6b1e1542012-05-14 05:55:54 -0700235 def teardown_all(self):
Masayuki Igawa630a3fa2014-03-12 19:51:45 +0900236 # NOTE(masayukig): v3 client doesn't have v2 method.
237 # (e.g. delete_tenant) So we need to check resources existence
238 # before using client methods.
Rohit Karajgi6b1e1542012-05-14 05:55:54 -0700239 for user in self.users:
Masayuki Igawa630a3fa2014-03-12 19:51:45 +0900240 self._try_wrapper(self.client.delete_user, user)
Rohit Karajgi6b1e1542012-05-14 05:55:54 -0700241 for tenant in self.tenants:
Masayuki Igawa630a3fa2014-03-12 19:51:45 +0900242 self._try_wrapper(self.client.delete_tenant, tenant)
Rohit Karajgi6b1e1542012-05-14 05:55:54 -0700243 for role in self.roles:
Masayuki Igawa630a3fa2014-03-12 19:51:45 +0900244 self._try_wrapper(self.client.delete_role, role)
Nayna Patele6331362013-08-12 06:59:48 +0000245 for v3_user in self.v3_users:
Masayuki Igawa630a3fa2014-03-12 19:51:45 +0900246 self._try_wrapper(self.client.delete_user, v3_user)
Nayna Patele6331362013-08-12 06:59:48 +0000247 for v3_project in self.projects:
Masayuki Igawa630a3fa2014-03-12 19:51:45 +0900248 self._try_wrapper(self.client.delete_project, v3_project)
Nayna Patele6331362013-08-12 06:59:48 +0000249 for v3_role in self.v3_roles:
Masayuki Igawa630a3fa2014-03-12 19:51:45 +0900250 self._try_wrapper(self.client.delete_role, v3_role)
nayna-patel2db83b32014-05-15 11:41:03 +0000251 for domain in self.domains:
Masayuki Igawa630a3fa2014-03-12 19:51:45 +0900252 self._try_wrapper(self.client.update_domain, domain,
253 enabled=False)
254 self._try_wrapper(self.client.delete_domain, domain)