Add test cases to check user{domain}
pattern. Heat uses domain in user{domain} pattern to find the user in the corresponding domain. Change-Id: Ic01877e2524e094b087fcbddac7504356e395031 Story:2007867 Task:40234
This commit is contained in:
parent
4a707e45f5
commit
d2be2f9cfe
@ -17,6 +17,7 @@ from heat.common.i18n import _
|
|||||||
from heatclient import client as heat_client
|
from heatclient import client as heat_client
|
||||||
from keystoneauth1.identity.generic import password
|
from keystoneauth1.identity.generic import password
|
||||||
from keystoneauth1 import session
|
from keystoneauth1 import session
|
||||||
|
from keystoneclient.v3 import client as kc_v3
|
||||||
from neutronclient.v2_0 import client as neutron_client
|
from neutronclient.v2_0 import client as neutron_client
|
||||||
from novaclient import client as nova_client
|
from novaclient import client as nova_client
|
||||||
from swiftclient import client as swift_client
|
from swiftclient import client as swift_client
|
||||||
@ -79,6 +80,7 @@ class ClientManager(object):
|
|||||||
self.ca_file = self.conf.ca_file
|
self.ca_file = self.conf.ca_file
|
||||||
|
|
||||||
self.identity_client = self._get_identity_client()
|
self.identity_client = self._get_identity_client()
|
||||||
|
self.keystone_client = self._get_keystone_client()
|
||||||
self.orchestration_client = self._get_orchestration_client()
|
self.orchestration_client = self._get_orchestration_client()
|
||||||
self.compute_client = self._get_compute_client()
|
self.compute_client = self._get_compute_client()
|
||||||
self.network_client = self._get_network_client()
|
self.network_client = self._get_network_client()
|
||||||
@ -143,6 +145,12 @@ class ClientManager(object):
|
|||||||
|
|
||||||
return KeystoneWrapperClient(auth, verify_cert)
|
return KeystoneWrapperClient(auth, verify_cert)
|
||||||
|
|
||||||
|
def _get_keystone_client(self):
|
||||||
|
# Create our default Keystone client to use in testing
|
||||||
|
return kc_v3.Client(
|
||||||
|
session=self.identity_client.session,
|
||||||
|
region_name=self.conf.region)
|
||||||
|
|
||||||
def _get_compute_client(self):
|
def _get_compute_client(self):
|
||||||
# Create our default Nova client to use in testing
|
# Create our default Nova client to use in testing
|
||||||
return nova_client.Client(
|
return nova_client.Client(
|
||||||
|
@ -100,6 +100,7 @@ class HeatIntegrationTest(testscenarios.WithScenarios,
|
|||||||
def setup_clients(self, conf, admin_credentials=False):
|
def setup_clients(self, conf, admin_credentials=False):
|
||||||
self.manager = clients.ClientManager(conf, admin_credentials)
|
self.manager = clients.ClientManager(conf, admin_credentials)
|
||||||
self.identity_client = self.manager.identity_client
|
self.identity_client = self.manager.identity_client
|
||||||
|
self.keystone_client = self.manager.keystone_client
|
||||||
self.orchestration_client = self.manager.orchestration_client
|
self.orchestration_client = self.manager.orchestration_client
|
||||||
self.compute_client = self.manager.compute_client
|
self.compute_client = self.manager.compute_client
|
||||||
self.network_client = self.manager.network_client
|
self.network_client = self.manager.network_client
|
||||||
|
@ -0,0 +1,183 @@
|
|||||||
|
# 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 heat_integrationtests.common import test
|
||||||
|
from heat_integrationtests.functional import functional_base
|
||||||
|
|
||||||
|
create_user = '''
|
||||||
|
heat_template_version: 2014-10-16
|
||||||
|
description: test template to test user role assignment with user{domain}
|
||||||
|
parameters:
|
||||||
|
user_name:
|
||||||
|
type: string
|
||||||
|
label: User Name
|
||||||
|
description: Test user name
|
||||||
|
project_name:
|
||||||
|
type: string
|
||||||
|
label: Project Name
|
||||||
|
description: Test project name
|
||||||
|
domain_name:
|
||||||
|
type: string
|
||||||
|
label: Domain Name
|
||||||
|
description: Test domain name
|
||||||
|
resources:
|
||||||
|
Domain:
|
||||||
|
properties:
|
||||||
|
description: "Test Domain"
|
||||||
|
enabled: true
|
||||||
|
name: {get_param: domain_name}
|
||||||
|
type: OS::Keystone::Domain
|
||||||
|
Project:
|
||||||
|
properties:
|
||||||
|
description: "Test Project"
|
||||||
|
enabled: true
|
||||||
|
name: {get_param: project_name}
|
||||||
|
type: OS::Keystone::Project
|
||||||
|
User:
|
||||||
|
type: OS::Keystone::User
|
||||||
|
properties:
|
||||||
|
name: {get_param: user_name}
|
||||||
|
domain: {get_resource: Domain}
|
||||||
|
description: Test user
|
||||||
|
enabled: true
|
||||||
|
email: xyz@abc.com
|
||||||
|
password: passWORD
|
||||||
|
outputs:
|
||||||
|
project_name:
|
||||||
|
value: {get_attr: [Project, name]}
|
||||||
|
user_name:
|
||||||
|
value: {get_attr: [User, name]}
|
||||||
|
'''
|
||||||
|
assign_user_roles = '''
|
||||||
|
heat_template_version: 2014-10-16
|
||||||
|
description: test template to test user role assignment with user{domain}
|
||||||
|
parameters:
|
||||||
|
user_name:
|
||||||
|
type: string
|
||||||
|
label: User Name
|
||||||
|
description: Test user name
|
||||||
|
project_name:
|
||||||
|
type: string
|
||||||
|
label: Project Name
|
||||||
|
description: Test project name
|
||||||
|
domain_name:
|
||||||
|
type: string
|
||||||
|
label: Domain Name
|
||||||
|
description: Test domain name
|
||||||
|
resources:
|
||||||
|
UserRoleAssignemnt:
|
||||||
|
properties:
|
||||||
|
roles:
|
||||||
|
- role: admin
|
||||||
|
project: {get_param: project_name}
|
||||||
|
user:
|
||||||
|
list_join: ['',
|
||||||
|
[
|
||||||
|
{get_param: user_name},
|
||||||
|
'{',
|
||||||
|
{get_param: domain_name},
|
||||||
|
'}'
|
||||||
|
]
|
||||||
|
]
|
||||||
|
type: OS::Keystone::UserRoleAssignment
|
||||||
|
'''
|
||||||
|
disable_domain = '''
|
||||||
|
heat_template_version: 2014-10-16
|
||||||
|
description: test template to test user role assignment with user{domain}
|
||||||
|
parameters:
|
||||||
|
user_name:
|
||||||
|
type: string
|
||||||
|
label: User Name
|
||||||
|
description: Test user name
|
||||||
|
project_name:
|
||||||
|
type: string
|
||||||
|
label: Project Name
|
||||||
|
description: Test project name
|
||||||
|
domain_name:
|
||||||
|
type: string
|
||||||
|
label: Domain Name
|
||||||
|
description: Test domain name
|
||||||
|
resources:
|
||||||
|
Domain:
|
||||||
|
properties:
|
||||||
|
description: "Test Domain"
|
||||||
|
enabled: false
|
||||||
|
name: {get_param: domain_name}
|
||||||
|
type: OS::Keystone::Domain
|
||||||
|
Project:
|
||||||
|
properties:
|
||||||
|
description: "Test Project"
|
||||||
|
enabled: true
|
||||||
|
name: {get_param: project_name}
|
||||||
|
type: OS::Keystone::Project
|
||||||
|
User:
|
||||||
|
type: OS::Keystone::User
|
||||||
|
properties:
|
||||||
|
name: {get_param: user_name}
|
||||||
|
domain: {get_resource: Domain}
|
||||||
|
description: Test user
|
||||||
|
enabled: true
|
||||||
|
email: xyz@abc.com
|
||||||
|
password: passWORD
|
||||||
|
outputs:
|
||||||
|
project_name:
|
||||||
|
value: {get_attr: [Project, name]}
|
||||||
|
user_name:
|
||||||
|
value: {get_attr: [User, name]}
|
||||||
|
'''
|
||||||
|
|
||||||
|
|
||||||
|
class CreateUserTest(functional_base.FunctionalTestsBase):
|
||||||
|
|
||||||
|
def get_user_and_project_outputs(self, stack_identifier):
|
||||||
|
stack = self.client.stacks.get(stack_identifier)
|
||||||
|
project_name = self._stack_output(stack, 'project_name')
|
||||||
|
user_name = self._stack_output(stack, 'user_name')
|
||||||
|
return project_name, user_name
|
||||||
|
|
||||||
|
def get_outputs(self, stack_identifier, output_key):
|
||||||
|
stack = self.client.stacks.get(stack_identifier)
|
||||||
|
return self._stack_output(stack, output_key)
|
||||||
|
|
||||||
|
def test_assign_user_role_with_domain(self):
|
||||||
|
# Setup admin clients
|
||||||
|
self.setup_clients_for_admin()
|
||||||
|
parms = {
|
||||||
|
'user_name': test.rand_name('test-user-domain-user-name'),
|
||||||
|
'project_name': test.rand_name('test-user-domain-project'),
|
||||||
|
'domain_name': test.rand_name('test-user-domain-domain-name')
|
||||||
|
}
|
||||||
|
stack_identifier_create_user = self.stack_create(
|
||||||
|
template=create_user,
|
||||||
|
parameters=parms)
|
||||||
|
|
||||||
|
self.stack_create(
|
||||||
|
template=assign_user_roles,
|
||||||
|
parameters=parms)
|
||||||
|
|
||||||
|
project_name, user_name = self.get_user_and_project_outputs(
|
||||||
|
stack_identifier_create_user)
|
||||||
|
self.assertEqual(project_name, project_name)
|
||||||
|
self.assertEqual(user_name, user_name)
|
||||||
|
users = self.keystone_client.users.list()
|
||||||
|
projects = self.keystone_client.projects.list()
|
||||||
|
user_id = [x for x in users if x.name == user_name][0].id
|
||||||
|
project_id = [x for x in projects if x.name == project_name][0].id
|
||||||
|
self.assertIsNotNone(
|
||||||
|
self.keystone_client.role_assignments.list(
|
||||||
|
user=user_id, project=project_id))
|
||||||
|
|
||||||
|
# Disable domain so stack can be deleted
|
||||||
|
self.update_stack(
|
||||||
|
stack_identifier=stack_identifier_create_user,
|
||||||
|
template=disable_domain,
|
||||||
|
parameters=parms)
|
Loading…
Reference in New Issue
Block a user