
Merge base_service_test.py and base_config_tempest_test.py into base.py to cut one level of base hierarchy. Change-Id: Id98b9c3a5788b4ca6198462df48426e6a79224a6
371 lines
16 KiB
Python
371 lines
16 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
# Copyright 2017 Red Hat, Inc.
|
|
# All Rights Reserved.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
# not use this file except in compliance with the License. You may obtain
|
|
# a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
# License for the specific language governing permissions and limitations
|
|
# under the License.
|
|
|
|
from config_tempest import config_tempest as tool
|
|
from config_tempest.tests.base import BaseConfigTempestTest
|
|
import mock
|
|
from tempest.lib import exceptions
|
|
|
|
|
|
class TestCreateTempestUser(BaseConfigTempestTest):
|
|
|
|
def setUp(self):
|
|
super(TestCreateTempestUser, self).setUp()
|
|
self.conf = self._get_conf("v2.0", "v3")
|
|
self.tenants_client = self._get_clients(self.conf).tenants
|
|
self.users_client = self._get_clients(self.conf).users
|
|
self.roles_client = self._get_clients(self.conf).roles
|
|
|
|
@mock.patch('config_tempest.config_tempest.'
|
|
'create_user_with_tenant')
|
|
@mock.patch('config_tempest.config_tempest.give_role_to_user')
|
|
def _test_create_tempest_user(self,
|
|
mock_give_role_to_user,
|
|
mock_create_user_with_tenant,
|
|
services):
|
|
alt_username = "my_user"
|
|
alt_password = "my_pass"
|
|
alt_tenant_name = "my_tenant"
|
|
self.conf.set("identity", "alt_username", alt_username)
|
|
self.conf.set("identity", "alt_password", alt_password)
|
|
self.conf.set("identity", "alt_tenant_name", alt_tenant_name)
|
|
tool.create_tempest_users(self.tenants_client,
|
|
self.roles_client,
|
|
self.users_client,
|
|
self.conf,
|
|
services=services)
|
|
if 'orchestration' in services:
|
|
self.assertEqual(mock_give_role_to_user.mock_calls, [
|
|
mock.call(self.tenants_client,
|
|
self.roles_client,
|
|
self.users_client,
|
|
self.conf.get('identity',
|
|
'admin_username'),
|
|
self.conf.get('identity',
|
|
'tenant_name'),
|
|
role_name='admin'),
|
|
mock.call(self.tenants_client,
|
|
self.roles_client,
|
|
self.users_client,
|
|
self.conf.get('identity',
|
|
'username'),
|
|
self.conf.get('identity',
|
|
'tenant_name'),
|
|
role_name='heat_stack_owner',
|
|
role_required=False),
|
|
])
|
|
else:
|
|
mock_give_role_to_user.assert_called_with(
|
|
self.tenants_client, self.roles_client,
|
|
self.users_client,
|
|
self.conf.get('identity', 'admin_username'),
|
|
self.conf.get('identity', 'tenant_name'),
|
|
role_name='admin')
|
|
self.assertEqual(mock_create_user_with_tenant.mock_calls, [
|
|
mock.call(self.tenants_client,
|
|
self.users_client,
|
|
self.conf.get('identity', 'username'),
|
|
self.conf.get('identity', 'password'),
|
|
self.conf.get('identity', 'tenant_name')),
|
|
mock.call(self.tenants_client,
|
|
self.users_client,
|
|
self.conf.get('identity', 'alt_username'),
|
|
self.conf.get('identity', 'alt_password'),
|
|
self.conf.get('identity', 'alt_tenant_name')),
|
|
])
|
|
|
|
def test_create_tempest_user(self):
|
|
services = ['compute', 'network']
|
|
self._test_create_tempest_user(services=services)
|
|
|
|
def test_create_tempest_user_with_orchestration(self):
|
|
services = ['compute', 'network', 'orchestration']
|
|
self._test_create_tempest_user(services=services)
|
|
|
|
|
|
class TestCreateUserWithTenant(BaseConfigTempestTest):
|
|
|
|
def setUp(self):
|
|
super(TestCreateUserWithTenant, self).setUp()
|
|
self.conf = self._get_conf("v2.0", "v3")
|
|
self.tenants_client = self._get_clients(self.conf).tenants
|
|
self.users_client = self._get_clients(self.conf).users
|
|
self.username = "test_user"
|
|
self.password = "cryptic"
|
|
self.tenant_name = "project"
|
|
self.tenant_description = "Tenant for Tempest %s user" % self.username
|
|
self.email = "%s@test.com" % self.username
|
|
|
|
@mock.patch('tempest.common.identity.get_tenant_by_name')
|
|
@mock.patch('tempest.lib.services.identity.v2.tenants_client.'
|
|
'TenantsClient.create_tenant')
|
|
@mock.patch('tempest.lib.services.identity.v2.users_client.'
|
|
'UsersClient.create_user')
|
|
def test_create_user_with_tenant(self,
|
|
mock_create_user,
|
|
mock_create_tenant,
|
|
mock_get_tenant_by_name):
|
|
mock_get_tenant_by_name.return_value = {'id': "fake-id"}
|
|
tool.create_user_with_tenant(
|
|
tenants_client=self.tenants_client,
|
|
users_client=self.users_client,
|
|
username=self.username,
|
|
password=self.password,
|
|
tenant_name=self.tenant_name)
|
|
mock_create_tenant.assert_called_with(
|
|
name=self.tenant_name, description=self.tenant_description)
|
|
mock_create_user.assert_called_with(name=self.username,
|
|
password=self.password,
|
|
tenantId="fake-id",
|
|
email=self.email)
|
|
|
|
@mock.patch('tempest.common.identity.get_tenant_by_name')
|
|
@mock.patch(
|
|
'tempest.lib.services.identity.v2.'
|
|
'tenants_client.TenantsClient.create_tenant')
|
|
@mock.patch('tempest.lib.services.identity.v2'
|
|
'.users_client.UsersClient.create_user')
|
|
def test_create_user_with_tenant_tenant_exists(
|
|
self,
|
|
mock_create_user,
|
|
mock_create_tenant,
|
|
mock_get_tenant_by_name):
|
|
mock_get_tenant_by_name.return_value = {'id': "fake-id"}
|
|
exc = exceptions.Conflict
|
|
mock_create_tenant.side_effect = exc
|
|
tool.create_user_with_tenant(
|
|
tenants_client=self.tenants_client,
|
|
users_client=self.users_client,
|
|
username=self.username,
|
|
password=self.password,
|
|
tenant_name=self.tenant_name)
|
|
mock_create_tenant.assert_called_with(
|
|
name=self.tenant_name, description=self.tenant_description)
|
|
mock_create_user.assert_called_with(
|
|
name=self.username,
|
|
password=self.password,
|
|
tenantId="fake-id",
|
|
email=self.email)
|
|
|
|
@mock.patch('tempest.lib.services.identity.v2.'
|
|
'users_client.UsersClient.update_user_password')
|
|
@mock.patch('tempest.common.identity.get_user_by_username')
|
|
@mock.patch('tempest.common.identity.get_tenant_by_name')
|
|
@mock.patch('tempest.lib.services.identity.v2.'
|
|
'tenants_client.TenantsClient.create_tenant')
|
|
@mock.patch('tempest.lib.services.identity.'
|
|
'v2.users_client.UsersClient.create_user')
|
|
def test_create_user_with_tenant_user_exists(
|
|
self, mock_create_user, mock_create_tenant,
|
|
mock_get_tenant_by_name,
|
|
mock_get_user_by_username,
|
|
mock_update_user_password):
|
|
mock_get_tenant_by_name.return_value = {'id': "fake-id"}
|
|
exc = exceptions.Conflict
|
|
mock_create_user.side_effect = exc
|
|
fake_user = {'id': "fake_user_id"}
|
|
mock_get_user_by_username.return_value = fake_user
|
|
tool.create_user_with_tenant(
|
|
tenants_client=self.tenants_client,
|
|
users_client=self.users_client,
|
|
username=self.username, password=self.password,
|
|
tenant_name=self.tenant_name)
|
|
mock_create_tenant.assert_called_with(
|
|
name=self.tenant_name, description=self.tenant_description)
|
|
mock_create_user.assert_called_with(name=self.username,
|
|
password=self.password,
|
|
tenantId="fake-id",
|
|
email=self.email)
|
|
mock_update_user_password.assert_called_with(
|
|
fake_user['id'], password=self.password)
|
|
|
|
@mock.patch('tempest.lib.services.identity.v2.'
|
|
'users_client.UsersClient.update_user_password')
|
|
@mock.patch('tempest.common.identity.get_user_by_username')
|
|
@mock.patch('tempest.common.identity.get_tenant_by_name')
|
|
@mock.patch('tempest.lib.services.identity.v2.'
|
|
'tenants_client.TenantsClient.create_tenant')
|
|
@mock.patch('tempest.lib.services.identity.v2.'
|
|
'users_client.UsersClient.create_user')
|
|
def test_create_user_with_tenant_exists_user_exists(
|
|
self, mock_create_user, mock_create_tenant,
|
|
mock_get_tenant_by_name,
|
|
mock_get_user_by_username,
|
|
mock_update_user_password):
|
|
mock_get_tenant_by_name.return_value = {'id': "fake-id"}
|
|
exc = exceptions.Conflict
|
|
mock_create_tenant.side_effects = exc
|
|
mock_create_user.side_effect = exc
|
|
fake_user = {'id': "fake_user_id"}
|
|
mock_get_user_by_username.return_value = fake_user
|
|
tool.create_user_with_tenant(tenants_client=self.tenants_client,
|
|
users_client=self.users_client,
|
|
username=self.username,
|
|
password=self.password,
|
|
tenant_name=self.tenant_name)
|
|
mock_create_tenant.assert_called_with(
|
|
name=self.tenant_name, description=self.tenant_description)
|
|
mock_create_user.assert_called_with(name=self.username,
|
|
password=self.password,
|
|
tenantId="fake-id",
|
|
email=self.email)
|
|
mock_update_user_password.assert_called_with(
|
|
fake_user['id'], password=self.password)
|
|
|
|
|
|
class TestGiveRoleToUser(BaseConfigTempestTest):
|
|
|
|
def setUp(self):
|
|
super(TestGiveRoleToUser, self).setUp()
|
|
self.conf = self._get_conf("v2.0", "v3")
|
|
self.tenants_client = self._get_clients(self.conf).tenants
|
|
self.users_client = self._get_clients(self.conf).users
|
|
self.roles_client = self._get_clients(self.conf).roles
|
|
self.username = "test_user"
|
|
self.tenant_name = "project"
|
|
self.role_name = "fake_role"
|
|
self.users = {'users':
|
|
[{'name': "test_user",
|
|
'id': "fake_user_id"},
|
|
{'name': "test_user2",
|
|
'id': "fake_user_id2"}]}
|
|
self.roles = {'roles':
|
|
[{'name': "fake_role",
|
|
'id': "fake_role_id"},
|
|
{'name': "fake_role2",
|
|
'id': "fake_role_id2"}]}
|
|
|
|
@mock.patch('tempest.common.identity.get_tenant_by_name')
|
|
@mock.patch('tempest.lib.services.identity.v2.'
|
|
'users_client.UsersClient.list_users')
|
|
@mock.patch('tempest.lib.services.identity.v2.'
|
|
'users_client.UsersClient.create_user')
|
|
@mock.patch('tempest.lib.services.identity.v2.'
|
|
'roles_client.RolesClient.list_roles')
|
|
@mock.patch('tempest.lib.services.identity.v2.''roles_client.'
|
|
'RolesClient.create_user_role_on_project')
|
|
def test_give_role_to_user(self,
|
|
mock_create_user_role_on_project,
|
|
mock_list_roles,
|
|
mock_create_user,
|
|
mock_list_users,
|
|
mock_get_tenant_by_name):
|
|
|
|
mock_get_tenant_by_name.return_value = \
|
|
{'id': "fake_tenant_id"}
|
|
mock_list_users.return_value = self.users
|
|
mock_list_roles.return_value = self.roles
|
|
tool.give_role_to_user(
|
|
tenants_client=self.tenants_client,
|
|
roles_client=self.roles_client,
|
|
users_client=self.users_client,
|
|
username=self.username,
|
|
tenant_name=self.tenant_name,
|
|
role_name=self.role_name)
|
|
mock_create_user_role_on_project.assert_called_with(
|
|
"fake_tenant_id", "fake_user_id", "fake_role_id")
|
|
|
|
@mock.patch('tempest.common.identity.get_tenant_by_name')
|
|
@mock.patch('tempest.lib.services.identity.'
|
|
'v2.users_client.UsersClient.list_users')
|
|
@mock.patch('tempest.lib.services.identity.v2.'
|
|
'users_client.UsersClient.create_user')
|
|
@mock.patch('tempest.lib.services.identity.v2.'
|
|
'roles_client.RolesClient.list_roles')
|
|
@mock.patch('tempest.lib.services.identity.v2.'
|
|
'roles_client.RolesClient.create_user_role_on_project')
|
|
def test_give_role_to_user_role_not_found(
|
|
self,
|
|
mock_create_user_role_on_project,
|
|
mock_list_roles,
|
|
mock_create_user,
|
|
mock_list_users,
|
|
mock_get_tenant_by_name):
|
|
role_name = "fake_role_that_does_not_exist"
|
|
mock_get_tenant_by_name.return_value = \
|
|
{'id': "fake_tenant_id"}
|
|
mock_list_users.return_value = self.users
|
|
mock_list_roles.return_value = self.roles
|
|
exc = Exception
|
|
self.assertRaises(exc,
|
|
tool.give_role_to_user,
|
|
tenants_client=self.tenants_client,
|
|
roles_client=self.roles_client,
|
|
users_client=self.users_client,
|
|
username=self.username,
|
|
tenant_name=self.tenant_name,
|
|
role_name=role_name)
|
|
|
|
@mock.patch('tempest.common.identity.get_tenant_by_name')
|
|
@mock.patch('tempest.lib.services.identity.v2.'
|
|
'users_client.UsersClient.list_users')
|
|
@mock.patch('tempest.lib.services.identity.v2.'
|
|
'users_client.UsersClient.create_user')
|
|
@mock.patch('tempest.lib.services.identity.v2.'
|
|
'roles_client.RolesClient.list_roles')
|
|
@mock.patch('tempest.lib.services.identity.v2.roles_client'
|
|
'.RolesClient.create_user_role_on_project')
|
|
def test_give_role_to_user_role_not_found_not_req(
|
|
self,
|
|
mock_create_user_role_on_project,
|
|
mock_list_roles,
|
|
mock_create_user,
|
|
mock_list_users,
|
|
mock_get_tenant_by_name):
|
|
|
|
mock_get_tenant_by_name.return_value = \
|
|
{'id': "fake_tenant_id"}
|
|
mock_list_users.return_value = self.users
|
|
mock_list_roles.return_value = self.roles
|
|
tool.give_role_to_user(
|
|
tenants_client=self.tenants_client,
|
|
roles_client=self.roles_client,
|
|
users_client=self.users_client,
|
|
username=self.username,
|
|
tenant_name=self.tenant_name,
|
|
role_name=self.role_name,
|
|
role_required=False)
|
|
|
|
@mock.patch('tempest.common.identity.get_tenant_by_name')
|
|
@mock.patch('tempest.lib.services.identity.v2.'
|
|
'users_client.UsersClient.list_users')
|
|
@mock.patch('tempest.lib.services.identity.v2.'
|
|
'users_client.UsersClient.create_user')
|
|
@mock.patch('tempest.lib.services.identity.v2.'
|
|
'roles_client.RolesClient.list_roles')
|
|
@mock.patch('tempest.lib.services.identity.v2.roles_client.'
|
|
'RolesClient.create_user_role_on_project')
|
|
def test_give_role_to_user_role_already_given(
|
|
self,
|
|
mock_create_user_role_on_project,
|
|
mock_list_roles,
|
|
mock_create_user,
|
|
mock_list_users,
|
|
mock_get_tenant_by_name):
|
|
exc = exceptions.Conflict
|
|
mock_create_user_role_on_project.side_effect = exc
|
|
mock_get_tenant_by_name.return_value = {'id': "fake_tenant_id"}
|
|
mock_list_users.return_value = self.users
|
|
mock_list_roles.return_value = self.roles
|
|
tool.give_role_to_user(
|
|
tenants_client=self.tenants_client,
|
|
roles_client=self.roles_client,
|
|
users_client=self.users_client,
|
|
username=self.username,
|
|
tenant_name=self.tenant_name,
|
|
role_name=self.role_name)
|