blob: 10f52179545b17f0cb988165259aabe9ea8a9c9c [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
Jay Pipesf38eaac2012-06-21 13:37:35 -040016
Matthew Treinish481466b2012-12-20 17:16:01 -050017from tempest import clients
Masayuki Igawa259c1132013-10-31 17:48:44 +090018from tempest.common.utils import data_utils
Matthew Treinishdb2c5972014-01-31 22:18:59 +000019from tempest import config
Attila Fazekasdc216422013-01-29 15:12:14 +010020import tempest.test
Rohit Karajgi6b1e1542012-05-14 05:55:54 -070021
Matthew Treinishdb2c5972014-01-31 22:18:59 +000022CONF = config.CONF
23
Rohit Karajgi6b1e1542012-05-14 05:55:54 -070024
Attila Fazekas0d0c6162013-02-24 09:14:23 +010025class BaseIdentityAdminTest(tempest.test.BaseTestCase):
Rohit Karajgi6b1e1542012-05-14 05:55:54 -070026
27 @classmethod
28 def setUpClass(cls):
Attila Fazekasf86fa312013-07-30 19:56:39 +020029 super(BaseIdentityAdminTest, cls).setUpClass()
Matthew Treinishdb2c5972014-01-31 22:18:59 +000030 cls.os_adm = clients.AdminManager(interface=cls._interface)
31 cls.os = clients.Manager(interface=cls._interface)
Jay Pipesf38eaac2012-06-21 13:37:35 -040032
Rohit Karajgi6b1e1542012-05-14 05:55:54 -070033 @classmethod
Matthew Treinishdb2c5972014-01-31 22:18:59 +000034 def disable_user(cls, user_name):
35 user = cls.get_user_by_name(user_name)
36 cls.client.enable_disable_user(user['id'], False)
Rohit Karajgi6b1e1542012-05-14 05:55:54 -070037
Matthew Treinishdb2c5972014-01-31 22:18:59 +000038 @classmethod
39 def disable_tenant(cls, tenant_name):
40 tenant = cls.get_tenant_by_name(tenant_name)
41 cls.client.update_tenant(tenant['id'], enabled=False)
Rohit Karajgi6b1e1542012-05-14 05:55:54 -070042
Matthew Treinishdb2c5972014-01-31 22:18:59 +000043 @classmethod
44 def get_user_by_name(cls, name):
45 _, users = cls.client.get_users()
Rohit Karajgi6b1e1542012-05-14 05:55:54 -070046 user = [u for u in users if u['name'] == name]
47 if len(user) > 0:
48 return user[0]
49
Matthew Treinishdb2c5972014-01-31 22:18:59 +000050 @classmethod
51 def get_tenant_by_name(cls, name):
52 try:
53 _, tenants = cls.client.list_tenants()
54 except AttributeError:
55 _, tenants = cls.client.list_projects()
Rohit Karajgi6b1e1542012-05-14 05:55:54 -070056 tenant = [t for t in tenants if t['name'] == name]
57 if len(tenant) > 0:
58 return tenant[0]
59
Matthew Treinishdb2c5972014-01-31 22:18:59 +000060 @classmethod
61 def get_role_by_name(cls, name):
62 _, roles = cls.client.list_roles()
Rohit Karajgi6b1e1542012-05-14 05:55:54 -070063 role = [r for r in roles if r['name'] == name]
64 if len(role) > 0:
65 return role[0]
66
67
Matthew Treinishdb2c5972014-01-31 22:18:59 +000068class BaseIdentityV2AdminTest(BaseIdentityAdminTest):
69
70 @classmethod
71 def setUpClass(cls):
72 if not CONF.identity_feature_enabled.api_v2:
73 raise cls.skipException("Identity api v2 is not enabled")
74 super(BaseIdentityV2AdminTest, cls).setUpClass()
75 cls.client = cls.os_adm.identity_client
76 cls.token_client = cls.os_adm.token_client
77 if not cls.client.has_admin_extensions():
78 raise cls.skipException("Admin extensions disabled")
79 cls.data = DataGenerator(cls.client)
80 cls.non_admin_client = cls.os.identity_client
81
82 @classmethod
83 def tearDownClass(cls):
84 cls.data.teardown_all()
85 super(BaseIdentityV2AdminTest, cls).tearDownClass()
86
87
88class BaseIdentityV3AdminTest(BaseIdentityAdminTest):
89
90 @classmethod
91 def setUpClass(cls):
92 if not CONF.identity_feature_enabled.api_v3:
93 raise cls.skipException("Identity api v3 is not enabled")
94 super(BaseIdentityV3AdminTest, cls).setUpClass()
95 cls.client = cls.os_adm.identity_v3_client
96 cls.token = cls.os_adm.token_v3_client
97 cls.endpoints_client = cls.os_adm.endpoints_client
98 cls.data = DataGenerator(cls.client)
99 cls.non_admin_client = cls.os.identity_v3_client
100 cls.service_client = cls.os_adm.service_client
101 cls.policy_client = cls.os_adm.policy_client
102 cls.creds_client = cls.os_adm.credentials_client
103 cls.non_admin_client = cls.os.identity_v3_client
104
105 @classmethod
106 def tearDownClass(cls):
107 cls.data.teardown_all()
108 super(BaseIdentityV3AdminTest, cls).tearDownClass()
109
110
Rohit Karajgi6b1e1542012-05-14 05:55:54 -0700111class DataGenerator(object):
112
113 def __init__(self, client):
114 self.client = client
115 self.users = []
116 self.tenants = []
117 self.roles = []
118 self.role_name = None
Nayna Patele6331362013-08-12 06:59:48 +0000119 self.v3_users = []
120 self.projects = []
121 self.v3_roles = []
Rohit Karajgi6b1e1542012-05-14 05:55:54 -0700122
123 def setup_test_user(self):
Sean Daguef237ccb2013-01-04 15:19:14 -0500124 """Set up a test user."""
Rohit Karajgi6b1e1542012-05-14 05:55:54 -0700125 self.setup_test_tenant()
Masayuki Igawa259c1132013-10-31 17:48:44 +0900126 self.test_user = data_utils.rand_name('test_user_')
127 self.test_password = data_utils.rand_name('pass_')
Rohit Karajgi6b1e1542012-05-14 05:55:54 -0700128 self.test_email = self.test_user + '@testmail.tm'
129 resp, self.user = self.client.create_user(self.test_user,
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800130 self.test_password,
131 self.tenant['id'],
132 self.test_email)
Rohit Karajgi6b1e1542012-05-14 05:55:54 -0700133 self.users.append(self.user)
134
135 def setup_test_tenant(self):
Sean Daguef237ccb2013-01-04 15:19:14 -0500136 """Set up a test tenant."""
Masayuki Igawa259c1132013-10-31 17:48:44 +0900137 self.test_tenant = data_utils.rand_name('test_tenant_')
138 self.test_description = data_utils.rand_name('desc_')
Rohit Karajgi6b1e1542012-05-14 05:55:54 -0700139 resp, self.tenant = self.client.create_tenant(
Zhongyue Luoa1343de2013-01-04 16:21:35 +0800140 name=self.test_tenant,
141 description=self.test_description)
Rohit Karajgi6b1e1542012-05-14 05:55:54 -0700142 self.tenants.append(self.tenant)
143
144 def setup_test_role(self):
Sean Daguef237ccb2013-01-04 15:19:14 -0500145 """Set up a test role."""
Masayuki Igawa259c1132013-10-31 17:48:44 +0900146 self.test_role = data_utils.rand_name('role')
Rohit Karajgi69e80a02012-05-15 03:54:04 -0700147 resp, self.role = self.client.create_role(self.test_role)
148 self.roles.append(self.role)
Rohit Karajgi6b1e1542012-05-14 05:55:54 -0700149
Nayna Patele6331362013-08-12 06:59:48 +0000150 def setup_test_v3_user(self):
151 """Set up a test v3 user."""
152 self.setup_test_project()
Masayuki Igawa259c1132013-10-31 17:48:44 +0900153 self.test_user = data_utils.rand_name('test_user_')
154 self.test_password = data_utils.rand_name('pass_')
Nayna Patele6331362013-08-12 06:59:48 +0000155 self.test_email = self.test_user + '@testmail.tm'
156 resp, self.v3_user = self.client.create_user(self.test_user,
157 self.test_password,
158 self.project['id'],
159 self.test_email)
160 self.v3_users.append(self.v3_user)
161
162 def setup_test_project(self):
163 """Set up a test project."""
Masayuki Igawa259c1132013-10-31 17:48:44 +0900164 self.test_project = data_utils.rand_name('test_project_')
165 self.test_description = data_utils.rand_name('desc_')
Nayna Patele6331362013-08-12 06:59:48 +0000166 resp, self.project = self.client.create_project(
167 name=self.test_project,
168 description=self.test_description)
169 self.projects.append(self.project)
170
171 def setup_test_v3_role(self):
172 """Set up a test v3 role."""
Masayuki Igawa259c1132013-10-31 17:48:44 +0900173 self.test_role = data_utils.rand_name('role')
Nayna Patele6331362013-08-12 06:59:48 +0000174 resp, self.v3_role = self.client.create_role(self.test_role)
175 self.v3_roles.append(self.v3_role)
176
Rohit Karajgi6b1e1542012-05-14 05:55:54 -0700177 def teardown_all(self):
178 for user in self.users:
179 self.client.delete_user(user['id'])
180 for tenant in self.tenants:
181 self.client.delete_tenant(tenant['id'])
182 for role in self.roles:
183 self.client.delete_role(role['id'])
Nayna Patele6331362013-08-12 06:59:48 +0000184 for v3_user in self.v3_users:
185 self.client.delete_user(v3_user['id'])
186 for v3_project in self.projects:
187 self.client.delete_project(v3_project['id'])
188 for v3_role in self.v3_roles:
189 self.client.delete_role(v3_role['id'])