Remove DataGenerator from admin V3 identity tests

The identity tests have a DataGenerator that handles resource creation
and cleanup for tests, however using this DataGenerator has proven to
make debugging more difficult. The object storage tests used to use
this DataGenerator as well but was removed for the same reason. This
is the second of a series of commits to removes the DataGenerator from
the Identity tests. This commit removes the DataGenerator from the
admin v3 tests and moves resource creation and cleanup back to the
tests or the resource_setup, resource_cleanup methods.

Change-Id: Ic73cbffec8ff801462ea2155718fc3728bfb6512
This commit is contained in:
Castulo J. Martinez
2016-07-15 08:58:25 -07:00
parent e3adee430e
commit 19b81b2cde
9 changed files with 117 additions and 51 deletions

View File

@@ -23,14 +23,21 @@ class GroupsV3TestJSON(base.BaseIdentityV3AdminTest):
@classmethod
def resource_setup(cls):
super(GroupsV3TestJSON, cls).resource_setup()
cls.data.setup_test_domain()
cls.domain = cls.create_domain()
@classmethod
def resource_cleanup(cls):
# Cleanup the domains created in the setup
cls.domains_client.update_domain(cls.domain['id'], enabled=False)
cls.domains_client.delete_domain(cls.domain['id'])
super(GroupsV3TestJSON, cls).resource_cleanup()
@test.idempotent_id('2e80343b-6c81-4ac3-88c7-452f3e9d5129')
def test_group_create_update_get(self):
name = data_utils.rand_name('Group')
description = data_utils.rand_name('Description')
group = self.groups_client.create_group(
name=name, domain_id=self.data.domain['id'],
name=name, domain_id=self.domain['id'],
description=description)['group']
self.addCleanup(self.groups_client.delete_group, group['id'])
self.assertEqual(group['name'], name)
@@ -53,7 +60,7 @@ class GroupsV3TestJSON(base.BaseIdentityV3AdminTest):
name = data_utils.rand_name('Group')
old_description = data_utils.rand_name('Description')
group = self.groups_client.create_group(
name=name, domain_id=self.data.domain['id'],
name=name, domain_id=self.domain['id'],
description=old_description)['group']
self.addCleanup(self.groups_client.delete_group, group['id'])
@@ -69,7 +76,7 @@ class GroupsV3TestJSON(base.BaseIdentityV3AdminTest):
def test_group_users_add_list_delete(self):
name = data_utils.rand_name('Group')
group = self.groups_client.create_group(
name=name, domain_id=self.data.domain['id'])['group']
name=name, domain_id=self.domain['id'])['group']
self.addCleanup(self.groups_client.delete_group, group['id'])
# add user into group
users = []
@@ -103,7 +110,7 @@ class GroupsV3TestJSON(base.BaseIdentityV3AdminTest):
for i in range(2):
name = data_utils.rand_name('Group')
group = self.groups_client.create_group(
name=name, domain_id=self.data.domain['id'])['group']
name=name, domain_id=self.domain['id'])['group']
groups.append(group)
self.addCleanup(self.groups_client.delete_group, group['id'])
self.groups_client.add_group_user(group['id'], user['id'])
@@ -121,7 +128,7 @@ class GroupsV3TestJSON(base.BaseIdentityV3AdminTest):
name = data_utils.rand_name('Group')
description = data_utils.rand_name('Description')
group = self.groups_client.create_group(
name=name, domain_id=self.data.domain['id'],
name=name, domain_id=self.domain['id'],
description=description)['group']
self.addCleanup(self.groups_client.delete_group, group['id'])
group_ids.append(group['id'])

View File

@@ -24,26 +24,38 @@ class ListProjectsTestJSON(base.BaseIdentityV3AdminTest):
def resource_setup(cls):
super(ListProjectsTestJSON, cls).resource_setup()
cls.project_ids = list()
cls.data.setup_test_domain()
# Create a domain
cls.domain = cls.create_domain()
# Create project with domain
cls.projects = list()
cls.p1_name = data_utils.rand_name('project')
cls.p1 = cls.projects_client.create_project(
cls.p1_name, enabled=False,
domain_id=cls.data.domain['id'])['project']
cls.data.projects.append(cls.p1)
domain_id=cls.domain['id'])['project']
cls.projects.append(cls.p1)
cls.project_ids.append(cls.p1['id'])
# Create default project
p2_name = data_utils.rand_name('project')
cls.p2 = cls.projects_client.create_project(p2_name)['project']
cls.data.projects.append(cls.p2)
cls.projects.append(cls.p2)
cls.project_ids.append(cls.p2['id'])
# Create a new project (p3) using p2 as parent project
p3_name = data_utils.rand_name('project')
cls.p3 = cls.projects_client.create_project(
p3_name, parent_id=cls.p2['id'])['project']
cls.data.projects.append(cls.p3)
cls.projects.append(cls.p3)
cls.project_ids.append(cls.p3['id'])
@classmethod
def resource_cleanup(cls):
# Cleanup the projects created during setup in inverse order
for project in reversed(cls.projects):
cls.projects_client.delete_project(project['id'])
# Cleanup the domain created during setup
cls.domains_client.update_domain(cls.domain['id'], enabled=False)
cls.domains_client.delete_domain(cls.domain['id'])
super(ListProjectsTestJSON, cls).resource_cleanup()
@test.idempotent_id('1d830662-22ad-427c-8c3e-4ec854b0af44')
def test_list_projects(self):
# List projects
@@ -57,7 +69,7 @@ class ListProjectsTestJSON(base.BaseIdentityV3AdminTest):
def test_list_projects_with_domains(self):
# List projects with domain
self._list_projects_with_params(
{'domain_id': self.data.domain['id']}, 'domain_id')
{'domain_id': self.domain['id']}, 'domain_id')
@test.idempotent_id('0fe7a334-675a-4509-b00e-1c4b95d5dae8')
def test_list_projects_with_enabled(self):

View File

@@ -36,24 +36,36 @@ class UsersV3TestJSON(base.BaseIdentityV3AdminTest):
alt_user = data_utils.rand_name('test_user')
alt_password = data_utils.rand_password()
cls.alt_email = alt_user + '@testmail.tm'
cls.data.setup_test_domain()
# Create a domain
cls.domain = cls.create_domain()
# Create user with Domain
cls.users = list()
u1_name = data_utils.rand_name('test_user')
cls.domain_enabled_user = cls.users_client.create_user(
u1_name, password=alt_password,
email=cls.alt_email, domain_id=cls.data.domain['id'])['user']
cls.data.users.append(cls.domain_enabled_user)
email=cls.alt_email, domain_id=cls.domain['id'])['user']
cls.users.append(cls.domain_enabled_user)
# Create default not enabled user
u2_name = data_utils.rand_name('test_user')
cls.non_domain_enabled_user = cls.users_client.create_user(
u2_name, password=alt_password,
email=cls.alt_email, enabled=False)['user']
cls.data.users.append(cls.non_domain_enabled_user)
cls.users.append(cls.non_domain_enabled_user)
@classmethod
def resource_cleanup(cls):
# Cleanup the users created during setup
for user in cls.users:
cls.users_client.delete_user(user['id'])
# Cleanup the domain created during setup
cls.domains_client.update_domain(cls.domain['id'], enabled=False)
cls.domains_client.delete_domain(cls.domain['id'])
super(UsersV3TestJSON, cls).resource_cleanup()
@test.idempotent_id('08f9aabb-dcfe-41d0-8172-82b5fa0bd73d')
def test_list_user_domains(self):
# List users with domain
params = {'domain_id': self.data.domain['id']}
params = {'domain_id': self.domain['id']}
self._list_users_with_params(params, 'domain_id',
self.domain_enabled_user,
self.non_domain_enabled_user)
@@ -79,7 +91,7 @@ class UsersV3TestJSON(base.BaseIdentityV3AdminTest):
# List users
body = self.users_client.list_users()['users']
fetched_ids = [u['id'] for u in body]
missing_users = [u['id'] for u in self.data.users
missing_users = [u['id'] for u in self.users
if u['id'] not in fetched_ids]
self.assertEqual(0, len(missing_users),
"Failed to find user %s in fetched list" %
@@ -88,8 +100,8 @@ class UsersV3TestJSON(base.BaseIdentityV3AdminTest):
@test.idempotent_id('b4baa3ae-ac00-4b4e-9e27-80deaad7771f')
def test_get_user(self):
# Get a user detail
user = self.users_client.show_user(self.data.users[0]['id'])['user']
self.assertEqual(self.data.users[0]['id'], user['id'])
self.assertEqual(self.data.users[0]['name'], user['name'])
user = self.users_client.show_user(self.users[0]['id'])['user']
self.assertEqual(self.users[0]['id'], user['id'])
self.assertEqual(self.users[0]['name'], user['name'])
self.assertEqual(self.alt_email, user['email'])
self.assertEqual(self.data.domain['id'], user['domain_id'])
self.assertEqual(self.domain['id'], user['domain_id'])

View File

@@ -32,7 +32,7 @@ class ProjectsTestJSON(base.BaseIdentityV3AdminTest):
project_desc = data_utils.rand_name('desc')
project = self.projects_client.create_project(
project_name, description=project_desc)['project']
self.data.projects.append(project)
self.addCleanup(self.projects_client.delete_project, project['id'])
project_id = project['id']
desc1 = project['description']
self.assertEqual(desc1, project_desc, 'Description should have '
@@ -45,25 +45,25 @@ class ProjectsTestJSON(base.BaseIdentityV3AdminTest):
@test.idempotent_id('5f50fe07-8166-430b-a882-3b2ee0abe26f')
def test_project_create_with_domain(self):
# Create project with a domain
self.data.setup_test_domain()
domain = self.setup_test_domain()
project_name = data_utils.rand_name('project')
project = self.projects_client.create_project(
project_name, domain_id=self.data.domain['id'])['project']
self.data.projects.append(project)
project_name, domain_id=domain['id'])['project']
self.addCleanup(self.projects_client.delete_project, project['id'])
project_id = project['id']
self.assertEqual(project_name, project['name'])
self.assertEqual(self.data.domain['id'], project['domain_id'])
self.assertEqual(domain['id'], project['domain_id'])
body = self.projects_client.show_project(project_id)['project']
self.assertEqual(project_name, body['name'])
self.assertEqual(self.data.domain['id'], body['domain_id'])
self.assertEqual(domain['id'], body['domain_id'])
@testtools.skipUnless(CONF.identity_feature_enabled.reseller,
'Reseller not available.')
@test.idempotent_id('1854f9c0-70bc-4d11-a08a-1c789d339e3d')
def test_project_create_with_parent(self):
# Create root project without providing a parent_id
self.data.setup_test_domain()
domain_id = self.data.domain['id']
domain = self.setup_test_domain()
domain_id = domain['id']
root_project_name = data_utils.rand_name('root_project')
root_project = self.projects_client.create_project(
@@ -94,7 +94,7 @@ class ProjectsTestJSON(base.BaseIdentityV3AdminTest):
project_name = data_utils.rand_name('project')
project = self.projects_client.create_project(
project_name, enabled=True)['project']
self.data.projects.append(project)
self.addCleanup(self.projects_client.delete_project, project['id'])
project_id = project['id']
en1 = project['enabled']
self.assertTrue(en1, 'Enable should be True in response')
@@ -108,7 +108,7 @@ class ProjectsTestJSON(base.BaseIdentityV3AdminTest):
project_name = data_utils.rand_name('project')
project = self.projects_client.create_project(
project_name, enabled=False)['project']
self.data.projects.append(project)
self.addCleanup(self.projects_client.delete_project, project['id'])
en1 = project['enabled']
self.assertEqual('false', str(en1).lower(),
'Enable should be False in response')
@@ -122,7 +122,7 @@ class ProjectsTestJSON(base.BaseIdentityV3AdminTest):
# Update name attribute of a project
p_name1 = data_utils.rand_name('project')
project = self.projects_client.create_project(p_name1)['project']
self.data.projects.append(project)
self.addCleanup(self.projects_client.delete_project, project['id'])
resp1_name = project['name']
@@ -146,7 +146,7 @@ class ProjectsTestJSON(base.BaseIdentityV3AdminTest):
p_desc = data_utils.rand_name('desc')
project = self.projects_client.create_project(
p_name, description=p_desc)['project']
self.data.projects.append(project)
self.addCleanup(self.projects_client.delete_project, project['id'])
resp1_desc = project['description']
p_desc2 = data_utils.rand_name('desc2')
@@ -169,7 +169,7 @@ class ProjectsTestJSON(base.BaseIdentityV3AdminTest):
p_en = False
project = self.projects_client.create_project(p_name,
enabled=p_en)['project']
self.data.projects.append(project)
self.addCleanup(self.projects_client.delete_project, project['id'])
resp1_en = project['enabled']
@@ -192,7 +192,7 @@ class ProjectsTestJSON(base.BaseIdentityV3AdminTest):
# Create a Project
p_name = data_utils.rand_name('project')
project = self.projects_client.create_project(p_name)['project']
self.data.projects.append(project)
self.addCleanup(self.projects_client.delete_project, project['id'])
# Create a User
u_name = data_utils.rand_name('user')

View File

@@ -34,7 +34,7 @@ class ProjectsNegativeTestJSON(base.BaseIdentityV3AdminTest):
# Project names should be unique
project_name = data_utils.rand_name('project-dup')
project = self.projects_client.create_project(project_name)['project']
self.data.projects.append(project)
self.addCleanup(self.projects_client.delete_project, project['id'])
self.assertRaises(lib_exc.Conflict,
self.projects_client.create_project, project_name)
@@ -69,7 +69,7 @@ class ProjectsNegativeTestJSON(base.BaseIdentityV3AdminTest):
# Non-admin user should not be able to delete a project
project_name = data_utils.rand_name('project')
project = self.projects_client.create_project(project_name)['project']
self.data.projects.append(project)
self.addCleanup(self.projects_client.delete_project, project['id'])
self.assertRaises(
lib_exc.Forbidden, self.non_admin_projects_client.delete_project,
project['id'])

View File

@@ -23,10 +23,11 @@ class RolesV3TestJSON(base.BaseIdentityV3AdminTest):
@classmethod
def resource_setup(cls):
super(RolesV3TestJSON, cls).resource_setup()
cls.roles = list()
for _ in range(3):
role_name = data_utils.rand_name(name='role')
role = cls.roles_client.create_role(name=role_name)['role']
cls.data.roles.append(role)
cls.roles.append(role)
cls.fetched_role_ids = list()
u_name = data_utils.rand_name('user')
u_desc = '%s description' % u_name
@@ -59,6 +60,8 @@ class RolesV3TestJSON(base.BaseIdentityV3AdminTest):
# before deleting,or else it would result in unauthorized error
cls.domains_client.update_domain(cls.domain['id'], enabled=False)
cls.domains_client.delete_domain(cls.domain['id'])
for role in cls.roles:
cls.roles_client.delete_role(role['id'])
super(RolesV3TestJSON, cls).resource_cleanup()
def _list_assertions(self, body, fetched_role_ids, role_id):
@@ -189,5 +192,5 @@ class RolesV3TestJSON(base.BaseIdentityV3AdminTest):
def test_list_roles(self):
# Return a list of all roles
body = self.roles_client.list_roles()['roles']
found = [role for role in body if role in self.data.roles]
self.assertEqual(len(found), len(self.data.roles))
found = [role for role in body if role in self.roles]
self.assertEqual(len(found), len(self.roles))

View File

@@ -149,6 +149,6 @@ class UsersV3TestJSON(base.BaseIdentityV3AdminTest):
@test.idempotent_id('c10dcd90-461d-4b16-8e23-4eb836c00644')
def test_get_user(self):
# Get a user detail
self.data.setup_test_user()
user = self.users_client.show_user(self.data.user['id'])['user']
self.assertEqual(self.data.user['id'], user['id'])
user = self.setup_test_user()
fetched_user = self.users_client.show_user(user['id'])['user']
self.assertEqual(user['id'], fetched_user['id'])

View File

@@ -37,9 +37,10 @@ class UsersNegativeTest(base.BaseIdentityV3AdminTest):
@test.idempotent_id('b3c9fccc-4134-46f5-b600-1da6fb0a3b1f')
def test_authentication_for_disabled_user(self):
# Attempt to authenticate for disabled user should fail
self.data.setup_test_user()
self.disable_user(self.data.user['name'], self.data.user['domain_id'])
password = data_utils.rand_password()
user = self.setup_test_user(password)
self.disable_user(user['name'], user['domain_id'])
self.assertRaises(lib_exc.Unauthorized, self.token.auth,
username=self.data.user['name'],
password=self.data.user_password,
username=user['name'],
password=password,
user_domain_id='default')

View File

@@ -193,12 +193,9 @@ class BaseIdentityV3AdminTest(BaseIdentityV3Test):
@classmethod
def resource_setup(cls):
super(BaseIdentityV3AdminTest, cls).resource_setup()
cls.data = DataGeneratorV3(cls.projects_client, cls.users_client,
cls.roles_client, cls.domains_client)
@classmethod
def resource_cleanup(cls):
cls.data.teardown_all()
super(BaseIdentityV3AdminTest, cls).resource_cleanup()
@classmethod
@@ -206,12 +203,46 @@ class BaseIdentityV3AdminTest(BaseIdentityV3Test):
user = cls.get_user_by_name(user_name, domain_id)
cls.users_client.update_user(user['id'], user_name, enabled=False)
@classmethod
def create_domain(cls):
"""Create a domain."""
domain = cls.domains_client.create_domain(
name=data_utils.rand_name('test_domain'),
description=data_utils.rand_name('desc'))['domain']
return domain
def delete_domain(self, domain_id):
# NOTE(mpavlase) It is necessary to disable the domain before deleting
# otherwise it raises Forbidden exception
self.domains_client.update_domain(domain_id, enabled=False)
self.domains_client.delete_domain(domain_id)
def setup_test_user(self, password=None):
"""Set up a test user."""
project = self.setup_test_project()
username = data_utils.rand_name('test_user')
email = username + '@testmail.tm'
user = self._create_test_user(user_name=username, email=email,
project_id=project['id'],
password=password)
return user
def setup_test_project(self):
"""Set up a test project."""
project = self.projects_client.create_project(
name=data_utils.rand_name('test_project'),
description=data_utils.rand_name('desc'))['project']
# Delete the project at the end of the test
self.addCleanup(self.projects_client.delete_project, project['id'])
return project
def setup_test_domain(self):
"""Set up a test domain."""
domain = self.create_domain()
# Delete the domain at the end of the test
self.addCleanup(self.delete_domain, domain['id'])
return domain
class BaseDataGenerator(object):