Blacken openstackclient.identity

Black used with the '-l 79 -S' flags.

A future change will ignore this commit in git-blame history by adding a
'git-blame-ignore-revs' file.

Change-Id: I2eeade1ce6653be8e9179ecc40105182c5ff5f16
Signed-off-by: Stephen Finucane <sfinucan@redhat.com>
This commit is contained in:
Stephen Finucane 2023-05-08 11:32:01 +01:00
parent 6475dc58e8
commit aed521d426
100 changed files with 4899 additions and 4009 deletions

View File

@ -43,18 +43,15 @@ AUTH_VERSIONS = {
def make_client(instance): def make_client(instance):
"""Returns an identity service client.""" """Returns an identity service client."""
identity_client = utils.get_client_class( identity_client = utils.get_client_class(
API_NAME, API_NAME, instance._api_version[API_NAME], API_VERSIONS
instance._api_version[API_NAME], )
API_VERSIONS)
LOG.debug('Instantiating identity client: %s', identity_client) LOG.debug('Instantiating identity client: %s', identity_client)
# Remember interface only if interface is set # Remember interface only if interface is set
kwargs = utils.build_kwargs_dict('interface', instance.interface) kwargs = utils.build_kwargs_dict('interface', instance.interface)
client = identity_client( client = identity_client(
session=instance.session, session=instance.session, region_name=instance.region_name, **kwargs
region_name=instance.region_name,
**kwargs
) )
return client return client
@ -66,8 +63,11 @@ def build_option_parser(parser):
'--os-identity-api-version', '--os-identity-api-version',
metavar='<identity-api-version>', metavar='<identity-api-version>',
default=utils.env('OS_IDENTITY_API_VERSION'), default=utils.env('OS_IDENTITY_API_VERSION'),
help=_('Identity API version, default=%s ' help=_(
'(Env: OS_IDENTITY_API_VERSION)') % DEFAULT_API_VERSION, 'Identity API version, default=%s '
'(Env: OS_IDENTITY_API_VERSION)'
)
% DEFAULT_API_VERSION,
) )
return parser return parser

View File

@ -33,7 +33,8 @@ def find_service_in_list(service_list, service_id):
if service.id == service_id: if service.id == service_id:
return service return service
raise exceptions.CommandError( raise exceptions.CommandError(
"No service with a type, name or ID of '%s' exists." % service_id) "No service with a type, name or ID of '%s' exists." % service_id
)
def find_service(identity_client, name_type_or_id): def find_service(identity_client, name_type_or_id):
@ -52,8 +53,10 @@ def find_service(identity_client, name_type_or_id):
except identity_exc.NotFound: except identity_exc.NotFound:
pass pass
except identity_exc.NoUniqueMatch: except identity_exc.NoUniqueMatch:
msg = _("Multiple service matches found for '%s', " msg = _(
"use an ID to be more specific.") "Multiple service matches found for '%s', "
"use an ID to be more specific."
)
raise exceptions.CommandError(msg % name_type_or_id) raise exceptions.CommandError(msg % name_type_or_id)
try: try:
@ -63,8 +66,10 @@ def find_service(identity_client, name_type_or_id):
msg = _("No service with a type, name or ID of '%s' exists.") msg = _("No service with a type, name or ID of '%s' exists.")
raise exceptions.CommandError(msg % name_type_or_id) raise exceptions.CommandError(msg % name_type_or_id)
except identity_exc.NoUniqueMatch: except identity_exc.NoUniqueMatch:
msg = _("Multiple service matches found for '%s', " msg = _(
"use an ID to be more specific.") "Multiple service matches found for '%s', "
"use an ID to be more specific."
)
raise exceptions.CommandError(msg % name_type_or_id) raise exceptions.CommandError(msg % name_type_or_id)
@ -141,42 +146,56 @@ def _get_domain_id_if_requested(identity_client, domain_name_or_id):
def find_domain(identity_client, name_or_id): def find_domain(identity_client, name_or_id):
return _find_identity_resource(identity_client.domains, name_or_id, return _find_identity_resource(
domains.Domain) identity_client.domains, name_or_id, domains.Domain
)
def find_group(identity_client, name_or_id, domain_name_or_id=None): def find_group(identity_client, name_or_id, domain_name_or_id=None):
domain_id = _get_domain_id_if_requested(identity_client, domain_name_or_id) domain_id = _get_domain_id_if_requested(identity_client, domain_name_or_id)
if not domain_id: if not domain_id:
return _find_identity_resource(identity_client.groups, name_or_id, return _find_identity_resource(
groups.Group) identity_client.groups, name_or_id, groups.Group
)
else: else:
return _find_identity_resource(identity_client.groups, name_or_id, return _find_identity_resource(
groups.Group, domain_id=domain_id) identity_client.groups,
name_or_id,
groups.Group,
domain_id=domain_id,
)
def find_project(identity_client, name_or_id, domain_name_or_id=None): def find_project(identity_client, name_or_id, domain_name_or_id=None):
domain_id = _get_domain_id_if_requested(identity_client, domain_name_or_id) domain_id = _get_domain_id_if_requested(identity_client, domain_name_or_id)
if not domain_id: if not domain_id:
return _find_identity_resource(identity_client.projects, name_or_id, return _find_identity_resource(
projects.Project) identity_client.projects, name_or_id, projects.Project
)
else: else:
return _find_identity_resource(identity_client.projects, name_or_id, return _find_identity_resource(
projects.Project, domain_id=domain_id) identity_client.projects,
name_or_id,
projects.Project,
domain_id=domain_id,
)
def find_user(identity_client, name_or_id, domain_name_or_id=None): def find_user(identity_client, name_or_id, domain_name_or_id=None):
domain_id = _get_domain_id_if_requested(identity_client, domain_name_or_id) domain_id = _get_domain_id_if_requested(identity_client, domain_name_or_id)
if not domain_id: if not domain_id:
return _find_identity_resource(identity_client.users, name_or_id, return _find_identity_resource(
users.User) identity_client.users, name_or_id, users.User
)
else: else:
return _find_identity_resource(identity_client.users, name_or_id, return _find_identity_resource(
users.User, domain_id=domain_id) identity_client.users, name_or_id, users.User, domain_id=domain_id
)
def _find_identity_resource(identity_client_manager, name_or_id, def _find_identity_resource(
resource_type, **kwargs): identity_client_manager, name_or_id, resource_type, **kwargs
):
"""Find a specific identity resource. """Find a specific identity resource.
Using keystoneclient's manager, attempt to find a specific resource by its Using keystoneclient's manager, attempt to find a specific resource by its
@ -203,8 +222,9 @@ def _find_identity_resource(identity_client_manager, name_or_id,
""" """
try: try:
identity_resource = utils.find_resource(identity_client_manager, identity_resource = utils.find_resource(
name_or_id, **kwargs) identity_client_manager, name_or_id, **kwargs
)
if identity_resource is not None: if identity_resource is not None:
return identity_resource return identity_resource
except (exceptions.Forbidden, identity_exc.Forbidden): except (exceptions.Forbidden, identity_exc.Forbidden):
@ -226,9 +246,11 @@ def add_user_domain_option_to_parser(parser):
parser.add_argument( parser.add_argument(
'--user-domain', '--user-domain',
metavar='<user-domain>', metavar='<user-domain>',
help=_('Domain the user belongs to (name or ID). ' help=_(
'Domain the user belongs to (name or ID). '
'This can be used in case collisions between user names ' 'This can be used in case collisions between user names '
'exist.'), 'exist.'
),
) )
@ -236,9 +258,11 @@ def add_group_domain_option_to_parser(parser):
parser.add_argument( parser.add_argument(
'--group-domain', '--group-domain',
metavar='<group-domain>', metavar='<group-domain>',
help=_('Domain the group belongs to (name or ID). ' help=_(
'Domain the group belongs to (name or ID). '
'This can be used in case collisions between group names ' 'This can be used in case collisions between group names '
'exist.'), 'exist.'
),
) )
@ -246,9 +270,13 @@ def add_project_domain_option_to_parser(parser, enhance_help=lambda _h: _h):
parser.add_argument( parser.add_argument(
'--project-domain', '--project-domain',
metavar='<project-domain>', metavar='<project-domain>',
help=enhance_help(_('Domain the project belongs to (name or ID). This ' help=enhance_help(
_(
'Domain the project belongs to (name or ID). This '
'can be used in case collisions between project ' 'can be used in case collisions between project '
'names exist.')), 'names exist.'
)
),
) )
@ -256,9 +284,11 @@ def add_role_domain_option_to_parser(parser):
parser.add_argument( parser.add_argument(
'--role-domain', '--role-domain',
metavar='<role-domain>', metavar='<role-domain>',
help=_('Domain the role belongs to (name or ID). ' help=_(
'Domain the role belongs to (name or ID). '
'This must be specified when the name of a domain specific ' 'This must be specified when the name of a domain specific '
'role is used.'), 'role is used.'
),
) )
@ -267,8 +297,9 @@ def add_inherited_option_to_parser(parser):
'--inherited', '--inherited',
action='store_true', action='store_true',
default=False, default=False,
help=_('Specifies if the role grant is inheritable to the sub ' help=_(
'projects'), 'Specifies if the role grant is inheritable to the sub ' 'projects'
),
) )
@ -277,8 +308,10 @@ def add_resource_option_to_parser(parser):
enable_group.add_argument( enable_group.add_argument(
'--immutable', '--immutable',
action='store_true', action='store_true',
help=_('Make resource immutable. An immutable project may not ' help=_(
'be deleted or modified except to remove the immutable flag'), 'Make resource immutable. An immutable project may not '
'be deleted or modified except to remove the immutable flag'
),
) )
enable_group.add_argument( enable_group.add_argument(
'--no-immutable', '--no-immutable',

View File

@ -47,7 +47,6 @@ class ListCatalog(command.Lister):
_description = _("List services in the service catalog") _description = _("List services in the service catalog")
def take_action(self, parsed_args): def take_action(self, parsed_args):
# Trigger auth if it has not happened yet # Trigger auth if it has not happened yet
auth_ref = self.app.client_manager.auth_ref auth_ref = self.app.client_manager.auth_ref
if not auth_ref: if not auth_ref:
@ -57,13 +56,19 @@ class ListCatalog(command.Lister):
data = auth_ref.service_catalog.catalog data = auth_ref.service_catalog.catalog
columns = ('Name', 'Type', 'Endpoints') columns = ('Name', 'Type', 'Endpoints')
return (columns, return (
(utils.get_dict_properties( columns,
s, columns, (
utils.get_dict_properties(
s,
columns,
formatters={ formatters={
'Endpoints': EndpointsColumn, 'Endpoints': EndpointsColumn,
}, },
) for s in data)) )
for s in data
),
)
class ShowCatalog(command.ShowOne): class ShowCatalog(command.ShowOne):
@ -79,7 +84,6 @@ class ShowCatalog(command.ShowOne):
return parser return parser
def take_action(self, parsed_args): def take_action(self, parsed_args):
# Trigger auth if it has not happened yet # Trigger auth if it has not happened yet
auth_ref = self.app.client_manager.auth_ref auth_ref = self.app.client_manager.auth_ref
if not auth_ref: if not auth_ref:
@ -89,8 +93,10 @@ class ShowCatalog(command.ShowOne):
data = None data = None
for service in auth_ref.service_catalog.catalog: for service in auth_ref.service_catalog.catalog:
if (service.get('name') == parsed_args.service or if (
service.get('type') == parsed_args.service): service.get('name') == parsed_args.service
or service.get('type') == parsed_args.service
):
data = service.copy() data = service.copy()
data['endpoints'] = EndpointsColumn(data['endpoints']) data['endpoints'] = EndpointsColumn(data['endpoints'])
if 'endpoints_links' in data: if 'endpoints_links' in data:

View File

@ -77,9 +77,7 @@ class CreateEC2Creds(command.ShowOne):
info.update(creds._info) info.update(creds._info)
if 'tenant_id' in info: if 'tenant_id' in info:
info.update( info.update({'project_id': info.pop('tenant_id')})
{'project_id': info.pop('tenant_id')}
)
return zip(*sorted(info.items())) return zip(*sorted(info.items()))
@ -120,14 +118,19 @@ class DeleteEC2Creds(command.Command):
identity_client.ec2.delete(user, access_key) identity_client.ec2.delete(user, access_key)
except Exception as e: except Exception as e:
result += 1 result += 1
LOG.error(_("Failed to delete EC2 credentials with " LOG.error(
"access key '%(access_key)s': %(e)s"), _(
{'access_key': access_key, 'e': e}) "Failed to delete EC2 credentials with "
"access key '%(access_key)s': %(e)s"
),
{'access_key': access_key, 'e': e},
)
if result > 0: if result > 0:
total = len(parsed_args.access_keys) total = len(parsed_args.access_keys)
msg = (_("%(result)s of %(total)s EC2 keys failed " msg = _(
"to delete.") % {'result': result, 'total': total}) "%(result)s of %(total)s EC2 keys failed " "to delete."
) % {'result': result, 'total': total}
raise exceptions.CommandError(msg) raise exceptions.CommandError(msg)
@ -159,11 +162,17 @@ class ListEC2Creds(command.Lister):
column_headers = ('Access', 'Secret', 'Project ID', 'User ID') column_headers = ('Access', 'Secret', 'Project ID', 'User ID')
data = identity_client.ec2.list(user) data = identity_client.ec2.list(user)
return (column_headers, return (
(utils.get_item_properties( column_headers,
s, columns, (
utils.get_item_properties(
s,
columns,
formatters={}, formatters={},
) for s in data)) )
for s in data
),
)
class ShowEC2Creds(command.ShowOne): class ShowEC2Creds(command.ShowOne):
@ -201,8 +210,6 @@ class ShowEC2Creds(command.ShowOne):
info.update(creds._info) info.update(creds._info)
if 'tenant_id' in info: if 'tenant_id' in info:
info.update( info.update({'project_id': info.pop('tenant_id')})
{'project_id': info.pop('tenant_id')}
)
return zip(*sorted(info.items())) return zip(*sorted(info.items()))

View File

@ -69,7 +69,8 @@ class CreateEndpoint(command.ShowOne):
service.id, service.id,
parsed_args.publicurl, parsed_args.publicurl,
parsed_args.adminurl, parsed_args.adminurl,
parsed_args.internalurl,) parsed_args.internalurl,
)
info = {} info = {}
info.update(endpoint._info) info.update(endpoint._info)
@ -100,14 +101,19 @@ class DeleteEndpoint(command.Command):
identity_client.endpoints.delete(endpoint) identity_client.endpoints.delete(endpoint)
except Exception as e: except Exception as e:
result += 1 result += 1
LOG.error(_("Failed to delete endpoint with " LOG.error(
"ID '%(endpoint)s': %(e)s"), _(
{'endpoint': endpoint, 'e': e}) "Failed to delete endpoint with "
"ID '%(endpoint)s': %(e)s"
),
{'endpoint': endpoint, 'e': e},
)
if result > 0: if result > 0:
total = len(parsed_args.endpoints) total = len(parsed_args.endpoints)
msg = (_("%(result)s of %(total)s endpoints failed " msg = _(
"to delete.") % {'result': result, 'total': total}) "%(result)s of %(total)s endpoints failed " "to delete."
) % {'result': result, 'total': total}
raise exceptions.CommandError(msg) raise exceptions.CommandError(msg)
@ -127,8 +133,15 @@ class ListEndpoint(command.Lister):
def take_action(self, parsed_args): def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity identity_client = self.app.client_manager.identity
if parsed_args.long: if parsed_args.long:
columns = ('ID', 'Region', 'Service Name', 'Service Type', columns = (
'PublicURL', 'AdminURL', 'InternalURL') 'ID',
'Region',
'Service Name',
'Service Type',
'PublicURL',
'AdminURL',
'InternalURL',
)
else: else:
columns = ('ID', 'Region', 'Service Name', 'Service Type') columns = ('ID', 'Region', 'Service Name', 'Service Type')
data = identity_client.endpoints.list() data = identity_client.endpoints.list()
@ -137,11 +150,17 @@ class ListEndpoint(command.Lister):
service = common.find_service(identity_client, ep.service_id) service = common.find_service(identity_client, ep.service_id)
ep.service_name = service.name ep.service_name = service.name
ep.service_type = service.type ep.service_type = service.type
return (columns, return (
(utils.get_item_properties( columns,
s, columns, (
utils.get_item_properties(
s,
columns,
formatters={}, formatters={},
) for s in data)) )
for s in data
),
)
class ShowEndpoint(command.ShowOne): class ShowEndpoint(command.ShowOne):
@ -152,8 +171,10 @@ class ShowEndpoint(command.ShowOne):
parser.add_argument( parser.add_argument(
'endpoint_or_service', 'endpoint_or_service',
metavar='<endpoint>', metavar='<endpoint>',
help=_('Endpoint to display (endpoint ID, service ID,' help=_(
' service name, service type)'), 'Endpoint to display (endpoint ID, service ID,'
' service name, service type)'
),
) )
return parser return parser
@ -166,8 +187,9 @@ class ShowEndpoint(command.ShowOne):
match = ep match = ep
service = common.find_service(identity_client, ep.service_id) service = common.find_service(identity_client, ep.service_id)
if match is None: if match is None:
service = common.find_service(identity_client, service = common.find_service(
parsed_args.endpoint_or_service) identity_client, parsed_args.endpoint_or_service
)
for ep in data: for ep in data:
if ep.service_id == service.id: if ep.service_id == service.id:
match = ep match = ep

View File

@ -60,8 +60,10 @@ class CreateProject(command.ShowOne):
'--property', '--property',
metavar='<key=value>', metavar='<key=value>',
action=parseractions.KeyValueAction, action=parseractions.KeyValueAction,
help=_('Add a property to <name> ' help=_(
'(repeat option to set multiple properties)'), 'Add a property to <name> '
'(repeat option to set multiple properties)'
),
) )
parser.add_argument( parser.add_argument(
'--or-show', '--or-show',
@ -128,14 +130,19 @@ class DeleteProject(command.Command):
identity_client.tenants.delete(project_obj.id) identity_client.tenants.delete(project_obj.id)
except Exception as e: except Exception as e:
errors += 1 errors += 1
LOG.error(_("Failed to delete project with " LOG.error(
"name or ID '%(project)s': %(e)s"), _(
{'project': project, 'e': e}) "Failed to delete project with "
"name or ID '%(project)s': %(e)s"
),
{'project': project, 'e': e},
)
if errors > 0: if errors > 0:
total = len(parsed_args.projects) total = len(parsed_args.projects)
msg = (_("%(errors)s of %(total)s projects failed " msg = _(
"to delete.") % {'errors': errors, 'total': total}) "%(errors)s of %(total)s projects failed " "to delete."
) % {'errors': errors, 'total': total}
raise exceptions.CommandError(msg) raise exceptions.CommandError(msg)
@ -153,9 +160,11 @@ class ListProject(command.Lister):
parser.add_argument( parser.add_argument(
'--sort', '--sort',
metavar='<key>[:<direction>]', metavar='<key>[:<direction>]',
help=_('Sort output by selected keys and directions (asc or desc) ' help=_(
'Sort output by selected keys and directions (asc or desc) '
'(default: asc), repeat this option to specify multiple ' '(default: asc), repeat this option to specify multiple '
'keys and directions.'), 'keys and directions.'
),
) )
return parser return parser
@ -167,11 +176,17 @@ class ListProject(command.Lister):
data = self.app.client_manager.identity.tenants.list() data = self.app.client_manager.identity.tenants.list()
if parsed_args.sort: if parsed_args.sort:
data = utils.sort_items(data, parsed_args.sort) data = utils.sort_items(data, parsed_args.sort)
return (columns, return (
(utils.get_item_properties( columns,
s, columns, (
utils.get_item_properties(
s,
columns,
formatters={}, formatters={},
) for s in data)) )
for s in data
),
)
class SetProject(command.Command): class SetProject(command.Command):
@ -209,8 +224,10 @@ class SetProject(command.Command):
'--property', '--property',
metavar='<key=value>', metavar='<key=value>',
action=parseractions.KeyValueAction, action=parseractions.KeyValueAction,
help=_('Set a project property ' help=_(
'(repeat option to set multiple properties)'), 'Set a project property '
'(repeat option to set multiple properties)'
),
) )
return parser return parser
@ -268,8 +285,8 @@ class ShowProject(command.ShowOne):
except ks_exc.Forbidden: except ks_exc.Forbidden:
auth_ref = self.app.client_manager.auth_ref auth_ref = self.app.client_manager.auth_ref
if ( if (
parsed_args.project == auth_ref.project_id or parsed_args.project == auth_ref.project_id
parsed_args.project == auth_ref.project_name or parsed_args.project == auth_ref.project_name
): ):
# Ask for currently auth'ed project so return it # Ask for currently auth'ed project so return it
info = { info = {
@ -316,8 +333,10 @@ class UnsetProject(command.Command):
metavar='<key>', metavar='<key>',
action='append', action='append',
default=[], default=[],
help=_('Unset a project property ' help=_(
'(repeat option to unset multiple properties)'), 'Unset a project property '
'(repeat option to unset multiple properties)'
),
) )
return parser return parser

View File

@ -133,14 +133,20 @@ class DeleteRole(command.Command):
identity_client.roles.delete(role_obj.id) identity_client.roles.delete(role_obj.id)
except Exception as e: except Exception as e:
errors += 1 errors += 1
LOG.error(_("Failed to delete role with " LOG.error(
"name or ID '%(role)s': %(e)s"), _(
{'role': role, 'e': e}) "Failed to delete role with "
"name or ID '%(role)s': %(e)s"
),
{'role': role, 'e': e},
)
if errors > 0: if errors > 0:
total = len(parsed_args.roles) total = len(parsed_args.roles)
msg = (_("%(errors)s of %(total)s roles failed " msg = _("%(errors)s of %(total)s roles failed " "to delete.") % {
"to delete.") % {'errors': errors, 'total': total}) 'errors': errors,
'total': total,
}
raise exceptions.CommandError(msg) raise exceptions.CommandError(msg)
@ -153,11 +159,17 @@ class ListRole(command.Lister):
columns = ('ID', 'Name') columns = ('ID', 'Name')
data = identity_client.roles.list() data = identity_client.roles.list()
return (columns, return (
(utils.get_item_properties( columns,
s, columns, (
utils.get_item_properties(
s,
columns,
formatters={}, formatters={},
) for s in data)) )
for s in data
),
)
class RemoveRole(command.Command): class RemoveRole(command.Command):
@ -192,10 +204,7 @@ class RemoveRole(command.Command):
parsed_args.project, parsed_args.project,
) )
user = utils.find_resource(identity_client.users, parsed_args.user) user = utils.find_resource(identity_client.users, parsed_args.user)
identity_client.roles.remove_user_role( identity_client.roles.remove_user_role(user.id, role.id, project.id)
user.id,
role.id,
project.id)
class ShowRole(command.ShowOne): class ShowRole(command.ShowOne):

View File

@ -70,8 +70,7 @@ class ListRoleAssignment(command.Lister):
elif parsed_args.authuser: elif parsed_args.authuser:
if auth_ref: if auth_ref:
user = utils.find_resource( user = utils.find_resource(
identity_client.users, identity_client.users, auth_ref.user_id
auth_ref.user_id
) )
project = None project = None
@ -83,8 +82,7 @@ class ListRoleAssignment(command.Lister):
elif parsed_args.authproject: elif parsed_args.authproject:
if auth_ref: if auth_ref:
project = utils.find_resource( project = utils.find_resource(
identity_client.projects, identity_client.projects, auth_ref.project_id
auth_ref.project_id
) )
# If user or project is not specified, we would ideally list all # If user or project is not specified, we would ideally list all
@ -107,8 +105,14 @@ class ListRoleAssignment(command.Lister):
user_role.user = user.id user_role.user = user.id
user_role.project = project.id user_role.project = project.id
return (columns, return (
(utils.get_item_properties( columns,
s, columns, (
utils.get_item_properties(
s,
columns,
formatters={}, formatters={},
) for s in data)) )
for s in data
),
)

View File

@ -90,14 +90,19 @@ class DeleteService(command.Command):
identity_client.services.delete(service.id) identity_client.services.delete(service.id)
except Exception as e: except Exception as e:
result += 1 result += 1
LOG.error(_("Failed to delete service with " LOG.error(
"name or ID '%(service)s': %(e)s"), _(
{'service': service, 'e': e}) "Failed to delete service with "
"name or ID '%(service)s': %(e)s"
),
{'service': service, 'e': e},
)
if result > 0: if result > 0:
total = len(parsed_args.services) total = len(parsed_args.services)
msg = (_("%(result)s of %(total)s services failed " msg = _(
"to delete.") % {'result': result, 'total': total}) "%(result)s of %(total)s services failed " "to delete."
) % {'result': result, 'total': total}
raise exceptions.CommandError(msg) raise exceptions.CommandError(msg)
@ -115,7 +120,6 @@ class ListService(command.Lister):
return parser return parser
def take_action(self, parsed_args): def take_action(self, parsed_args):
if parsed_args.long: if parsed_args.long:
columns = ('ID', 'Name', 'Type', 'Description') columns = ('ID', 'Name', 'Type', 'Description')
else: else:
@ -151,15 +155,17 @@ class ShowService(command.ShowOne):
if parsed_args.catalog: if parsed_args.catalog:
endpoints = auth_ref.service_catalog.get_endpoints( endpoints = auth_ref.service_catalog.get_endpoints(
service_type=parsed_args.service) service_type=parsed_args.service
for (service, service_endpoints) in endpoints.items(): )
for service, service_endpoints in endpoints.items():
if service_endpoints: if service_endpoints:
info = {"type": service} info = {"type": service}
info.update(service_endpoints[0]) info.update(service_endpoints[0])
return zip(*sorted(info.items())) return zip(*sorted(info.items()))
msg = _("No service catalog with a type, name or ID of '%s' " msg = _(
"exists.") % (parsed_args.service) "No service catalog with a type, name or ID of '%s' " "exists."
) % (parsed_args.service)
raise exceptions.CommandError(msg) raise exceptions.CommandError(msg)
else: else:
service = common.find_service(identity_client, parsed_args.service) service = common.find_service(identity_client, parsed_args.service)

View File

@ -35,7 +35,8 @@ class IssueToken(command.ShowOne):
auth_ref = self.app.client_manager.auth_ref auth_ref = self.app.client_manager.auth_ref
if not auth_ref: if not auth_ref:
raise exceptions.AuthorizationFailure( raise exceptions.AuthorizationFailure(
"Only an authorized user may issue a new token.") "Only an authorized user may issue a new token."
)
data = {} data = {}
if auth_ref.auth_token: if auth_ref.auth_token:

View File

@ -122,8 +122,12 @@ class CreateUser(command.ShowOne):
parsed_args.password = utils.get_password(self.app.stdin) parsed_args.password = utils.get_password(self.app.stdin)
if not parsed_args.password: if not parsed_args.password:
LOG.warning(_("No password was supplied, authentication will fail " LOG.warning(
"when a user does not have a password.")) _(
"No password was supplied, authentication will fail "
"when a user does not have a password."
)
)
try: try:
user = identity_client.users.create( user = identity_client.users.create(
@ -147,9 +151,7 @@ class CreateUser(command.ShowOne):
# the returned resource has 'tenantId'. Sigh. # the returned resource has 'tenantId'. Sigh.
# We're using project_id now inside OSC so there. # We're using project_id now inside OSC so there.
if 'tenantId' in user._info: if 'tenantId' in user._info:
user._info.update( user._info.update({'project_id': user._info.pop('tenantId')})
{'project_id': user._info.pop('tenantId')}
)
info = {} info = {}
info.update(user._info) info.update(user._info)
@ -182,14 +184,20 @@ class DeleteUser(command.Command):
identity_client.users.delete(user_obj.id) identity_client.users.delete(user_obj.id)
except Exception as e: except Exception as e:
errors += 1 errors += 1
LOG.error(_("Failed to delete user with " LOG.error(
"name or ID '%(user)s': %(e)s"), _(
{'user': user, 'e': e}) "Failed to delete user with "
"name or ID '%(user)s': %(e)s"
),
{'user': user, 'e': e},
)
if errors > 0: if errors > 0:
total = len(parsed_args.users) total = len(parsed_args.users)
msg = (_("%(errors)s of %(total)s users failed " msg = _("%(errors)s of %(total)s users failed " "to delete.") % {
"to delete.") % {'errors': errors, 'total': total}) 'errors': errors,
'total': total,
}
raise exceptions.CommandError(msg) raise exceptions.CommandError(msg)
@ -246,7 +254,8 @@ class ListUser(command.Lister):
# Just forget it if there's any trouble # Just forget it if there's any trouble
pass pass
formatters['tenantId'] = functools.partial( formatters['tenantId'] = functools.partial(
ProjectColumn, project_cache=project_cache) ProjectColumn, project_cache=project_cache
)
else: else:
columns = column_headers = ('ID', 'Name') columns = column_headers = ('ID', 'Name')
data = identity_client.users.list(tenant_id=project) data = identity_client.users.list(tenant_id=project)
@ -267,12 +276,18 @@ class ListUser(command.Lister):
d._info['tenantId'] = d._info.pop('tenant_id') d._info['tenantId'] = d._info.pop('tenant_id')
d._add_details(d._info) d._add_details(d._info)
return (column_headers, return (
(utils.get_item_properties( column_headers,
s, columns, (
utils.get_item_properties(
s,
columns,
mixed_case_fields=('tenantId',), mixed_case_fields=('tenantId',),
formatters=formatters, formatters=formatters,
) for s in data)) )
for s in data
),
)
class SetUser(command.Command): class SetUser(command.Command):
@ -331,8 +346,12 @@ class SetUser(command.Command):
parsed_args.password = utils.get_password(self.app.stdin) parsed_args.password = utils.get_password(self.app.stdin)
if '' == parsed_args.password: if '' == parsed_args.password:
LOG.warning(_("No password was supplied, authentication will fail " LOG.warning(
"when a user does not have a password.")) _(
"No password was supplied, authentication will fail "
"when a user does not have a password."
)
)
user = utils.find_resource( user = utils.find_resource(
identity_client.users, identity_client.users,
@ -394,8 +413,8 @@ class ShowUser(command.ShowOne):
except ks_exc.Forbidden: except ks_exc.Forbidden:
auth_ref = self.app.client_manager.auth_ref auth_ref = self.app.client_manager.auth_ref
if ( if (
parsed_args.user == auth_ref.user_id or parsed_args.user == auth_ref.user_id
parsed_args.user == auth_ref.username or parsed_args.user == auth_ref.username
): ):
# Ask for currently auth'ed project so return it # Ask for currently auth'ed project so return it
info = { info = {
@ -409,12 +428,8 @@ class ShowUser(command.ShowOne):
raise raise
if 'tenantId' in info: if 'tenantId' in info:
info.update( info.update({'project_id': info.pop('tenantId')})
{'project_id': info.pop('tenantId')}
)
if 'tenant_id' in info: if 'tenant_id' in info:
info.update( info.update({'project_id': info.pop('tenant_id')})
{'project_id': info.pop('tenant_id')}
)
return zip(*sorted(info.items())) return zip(*sorted(info.items()))

View File

@ -48,18 +48,24 @@ class DeleteAccessRule(command.Command):
for ac in parsed_args.access_rule: for ac in parsed_args.access_rule:
try: try:
access_rule = utils.find_resource( access_rule = utils.find_resource(
identity_client.access_rules, ac) identity_client.access_rules, ac
)
identity_client.access_rules.delete(access_rule.id) identity_client.access_rules.delete(access_rule.id)
except Exception as e: except Exception as e:
errors += 1 errors += 1
LOG.error(_("Failed to delete access rule with " LOG.error(
"ID '%(ac)s': %(e)s"), _(
{'ac': ac, 'e': e}) "Failed to delete access rule with "
"ID '%(ac)s': %(e)s"
),
{'ac': ac, 'e': e},
)
if errors > 0: if errors > 0:
total = len(parsed_args.access_rule) total = len(parsed_args.access_rule)
msg = (_("%(errors)s of %(total)s access rules failed " msg = _(
"to delete.") % {'errors': errors, 'total': total}) "%(errors)s of %(total)s access rules failed " "to delete."
) % {'errors': errors, 'total': total}
raise exceptions.CommandError(msg) raise exceptions.CommandError(msg)
@ -79,20 +85,25 @@ class ListAccessRule(command.Lister):
def take_action(self, parsed_args): def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity identity_client = self.app.client_manager.identity
if parsed_args.user: if parsed_args.user:
user_id = common.find_user(identity_client, user_id = common.find_user(
parsed_args.user, identity_client, parsed_args.user, parsed_args.user_domain
parsed_args.user_domain).id ).id
else: else:
user_id = None user_id = None
columns = ('ID', 'Service', 'Method', 'Path') columns = ('ID', 'Service', 'Method', 'Path')
data = identity_client.access_rules.list( data = identity_client.access_rules.list(user=user_id)
user=user_id) return (
return (columns, columns,
(utils.get_item_properties( (
s, columns, utils.get_item_properties(
s,
columns,
formatters={}, formatters={},
) for s in data)) )
for s in data
),
)
class ShowAccessRule(command.ShowOne): class ShowAccessRule(command.ShowOne):
@ -109,8 +120,9 @@ class ShowAccessRule(command.ShowOne):
def take_action(self, parsed_args): def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity identity_client = self.app.client_manager.identity
access_rule = utils.find_resource(identity_client.access_rules, access_rule = utils.find_resource(
parsed_args.access_rule) identity_client.access_rules, parsed_args.access_rule
)
access_rule._info.pop('links', None) access_rule._info.pop('links', None)

View File

@ -43,23 +43,29 @@ class CreateApplicationCredential(command.ShowOne):
parser.add_argument( parser.add_argument(
'--secret', '--secret',
metavar='<secret>', metavar='<secret>',
help=_('Secret to use for authentication (if not provided, one' help=_(
' will be generated)'), 'Secret to use for authentication (if not provided, one'
' will be generated)'
),
) )
parser.add_argument( parser.add_argument(
'--role', '--role',
metavar='<role>', metavar='<role>',
action='append', action='append',
default=[], default=[],
help=_('Roles to authorize (name or ID) (repeat option to set' help=_(
' multiple values)'), 'Roles to authorize (name or ID) (repeat option to set'
' multiple values)'
),
) )
parser.add_argument( parser.add_argument(
'--expiration', '--expiration',
metavar='<expiration>', metavar='<expiration>',
help=_('Sets an expiration date for the application credential,' help=_(
'Sets an expiration date for the application credential,'
' format of YYYY-mm-ddTHH:MM:SS (if not provided, the' ' format of YYYY-mm-ddTHH:MM:SS (if not provided, the'
' application credential will not expire)'), ' application credential will not expire)'
),
) )
parser.add_argument( parser.add_argument(
'--description', '--description',
@ -69,27 +75,32 @@ class CreateApplicationCredential(command.ShowOne):
parser.add_argument( parser.add_argument(
'--unrestricted', '--unrestricted',
action="store_true", action="store_true",
help=_('Enable application credential to create and delete other' help=_(
'Enable application credential to create and delete other'
' application credentials and trusts (this is potentially' ' application credentials and trusts (this is potentially'
' dangerous behavior and is disabled by default)'), ' dangerous behavior and is disabled by default)'
),
) )
parser.add_argument( parser.add_argument(
'--restricted', '--restricted',
action="store_true", action="store_true",
help=_('Prohibit application credential from creating and deleting' help=_(
'Prohibit application credential from creating and deleting'
' other application credentials and trusts (this is the' ' other application credentials and trusts (this is the'
' default behavior)'), ' default behavior)'
),
) )
parser.add_argument( parser.add_argument(
'--access-rules', '--access-rules',
metavar='<access-rules>', metavar='<access-rules>',
help=_('Either a string or file path containing a JSON-formatted ' help=_(
'Either a string or file path containing a JSON-formatted '
'list of access rules, each containing a request method, ' 'list of access rules, each containing a request method, '
'path, and service, for example ' 'path, and service, for example '
'\'[{"method": "GET", ' '\'[{"method": "GET", '
'"path": "/v2.1/servers", ' '"path": "/v2.1/servers", '
'"service": "compute"}]\''), '"service": "compute"}]\''
),
) )
return parser return parser
@ -103,14 +114,16 @@ class CreateApplicationCredential(command.ShowOne):
# which they are currently scoped with a subset of the role # which they are currently scoped with a subset of the role
# assignments they have on that project. Don't bother trying to # assignments they have on that project. Don't bother trying to
# look up roles via keystone, just introspect the token. # look up roles via keystone, just introspect the token.
role_id = common._get_token_resource(identity_client, "roles", role_id = common._get_token_resource(
role) identity_client, "roles", role
)
role_ids.append(role_id) role_ids.append(role_id)
expires_at = None expires_at = None
if parsed_args.expiration: if parsed_args.expiration:
expires_at = datetime.datetime.strptime(parsed_args.expiration, expires_at = datetime.datetime.strptime(
'%Y-%m-%dT%H:%M:%S') parsed_args.expiration, '%Y-%m-%dT%H:%M:%S'
)
if parsed_args.restricted: if parsed_args.restricted:
unrestricted = False unrestricted = False
@ -125,9 +138,11 @@ class CreateApplicationCredential(command.ShowOne):
with open(parsed_args.access_rules) as f: with open(parsed_args.access_rules) as f:
access_rules = json.load(f) access_rules = json.load(f)
except IOError: except IOError:
raise exceptions.CommandError( msg = _(
_("Access rules is not valid JSON string or file does" "Access rules is not valid JSON string or file does"
" not exist.")) " not exist."
)
raise exceptions.CommandError(msg)
else: else:
access_rules = None access_rules = None
@ -172,18 +187,25 @@ class DeleteApplicationCredential(command.Command):
for ac in parsed_args.application_credential: for ac in parsed_args.application_credential:
try: try:
app_cred = utils.find_resource( app_cred = utils.find_resource(
identity_client.application_credentials, ac) identity_client.application_credentials, ac
)
identity_client.application_credentials.delete(app_cred.id) identity_client.application_credentials.delete(app_cred.id)
except Exception as e: except Exception as e:
errors += 1 errors += 1
LOG.error(_("Failed to delete application credential with " LOG.error(
"name or ID '%(ac)s': %(e)s"), _(
{'ac': ac, 'e': e}) "Failed to delete application credential with "
"name or ID '%(ac)s': %(e)s"
),
{'ac': ac, 'e': e},
)
if errors > 0: if errors > 0:
total = len(parsed_args.application_credential) total = len(parsed_args.application_credential)
msg = (_("%(errors)s of %(total)s application credentials failed " msg = _(
"to delete.") % {'errors': errors, 'total': total}) "%(errors)s of %(total)s application credentials failed "
"to delete."
) % {'errors': errors, 'total': total}
raise exceptions.CommandError(msg) raise exceptions.CommandError(msg)
@ -203,20 +225,25 @@ class ListApplicationCredential(command.Lister):
def take_action(self, parsed_args): def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity identity_client = self.app.client_manager.identity
if parsed_args.user: if parsed_args.user:
user_id = common.find_user(identity_client, user_id = common.find_user(
parsed_args.user, identity_client, parsed_args.user, parsed_args.user_domain
parsed_args.user_domain).id ).id
else: else:
user_id = None user_id = None
columns = ('ID', 'Name', 'Project ID', 'Description', 'Expires At') columns = ('ID', 'Name', 'Project ID', 'Description', 'Expires At')
data = identity_client.application_credentials.list( data = identity_client.application_credentials.list(user=user_id)
user=user_id) return (
return (columns, columns,
(utils.get_item_properties( (
s, columns, utils.get_item_properties(
s,
columns,
formatters={}, formatters={},
) for s in data)) )
for s in data
),
)
class ShowApplicationCredential(command.ShowOne): class ShowApplicationCredential(command.ShowOne):
@ -233,8 +260,10 @@ class ShowApplicationCredential(command.ShowOne):
def take_action(self, parsed_args): def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity identity_client = self.app.client_manager.identity
app_cred = utils.find_resource(identity_client.application_credentials, app_cred = utils.find_resource(
parsed_args.application_credential) identity_client.application_credentials,
parsed_args.application_credential,
)
app_cred._info.pop('links', None) app_cred._info.pop('links', None)

View File

@ -42,7 +42,6 @@ class ListCatalog(command.Lister):
_description = _("List services in the service catalog") _description = _("List services in the service catalog")
def take_action(self, parsed_args): def take_action(self, parsed_args):
# Trigger auth if it has not happened yet # Trigger auth if it has not happened yet
auth_ref = self.app.client_manager.auth_ref auth_ref = self.app.client_manager.auth_ref
if not auth_ref: if not auth_ref:
@ -52,13 +51,19 @@ class ListCatalog(command.Lister):
data = auth_ref.service_catalog.catalog data = auth_ref.service_catalog.catalog
columns = ('Name', 'Type', 'Endpoints') columns = ('Name', 'Type', 'Endpoints')
return (columns, return (
(utils.get_dict_properties( columns,
s, columns, (
utils.get_dict_properties(
s,
columns,
formatters={ formatters={
'Endpoints': EndpointsColumn, 'Endpoints': EndpointsColumn,
}, },
) for s in data)) )
for s in data
),
)
class ShowCatalog(command.ShowOne): class ShowCatalog(command.ShowOne):
@ -74,7 +79,6 @@ class ShowCatalog(command.ShowOne):
return parser return parser
def take_action(self, parsed_args): def take_action(self, parsed_args):
# Trigger auth if it has not happened yet # Trigger auth if it has not happened yet
auth_ref = self.app.client_manager.auth_ref auth_ref = self.app.client_manager.auth_ref
if not auth_ref: if not auth_ref:
@ -84,8 +88,10 @@ class ShowCatalog(command.ShowOne):
data = None data = None
for service in auth_ref.service_catalog.catalog: for service in auth_ref.service_catalog.catalog:
if (service.get('name') == parsed_args.service or if (
service.get('type') == parsed_args.service): service.get('name') == parsed_args.service
or service.get('type') == parsed_args.service
):
data = dict(service) data = dict(service)
data['endpoints'] = EndpointsColumn(data['endpoints']) data['endpoints'] = EndpointsColumn(data['endpoints'])
if 'links' in data: if 'links' in data:

View File

@ -67,17 +67,24 @@ class DeleteConsumer(command.Command):
for i in parsed_args.consumer: for i in parsed_args.consumer:
try: try:
consumer = utils.find_resource( consumer = utils.find_resource(
identity_client.oauth1.consumers, i) identity_client.oauth1.consumers, i
)
identity_client.oauth1.consumers.delete(consumer.id) identity_client.oauth1.consumers.delete(consumer.id)
except Exception as e: except Exception as e:
result += 1 result += 1
LOG.error(_("Failed to delete consumer with name or " LOG.error(
"ID '%(consumer)s': %(e)s"), {'consumer': i, 'e': e}) _(
"Failed to delete consumer with name or "
"ID '%(consumer)s': %(e)s"
),
{'consumer': i, 'e': e},
)
if result > 0: if result > 0:
total = len(parsed_args.consumer) total = len(parsed_args.consumer)
msg = (_("%(result)s of %(total)s consumers failed " msg = _(
"to delete.") % {'result': result, 'total': total}) "%(result)s of %(total)s consumers failed " "to delete."
) % {'result': result, 'total': total}
raise exceptions.CommandError(msg) raise exceptions.CommandError(msg)
@ -87,11 +94,17 @@ class ListConsumer(command.Lister):
def take_action(self, parsed_args): def take_action(self, parsed_args):
columns = ('ID', 'Description') columns = ('ID', 'Description')
data = self.app.client_manager.identity.oauth1.consumers.list() data = self.app.client_manager.identity.oauth1.consumers.list()
return (columns, return (
(utils.get_item_properties( columns,
s, columns, (
utils.get_item_properties(
s,
columns,
formatters={}, formatters={},
) for s in data)) )
for s in data
),
)
class SetConsumer(command.Command): class SetConsumer(command.Command):
@ -114,13 +127,15 @@ class SetConsumer(command.Command):
def take_action(self, parsed_args): def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity identity_client = self.app.client_manager.identity
consumer = utils.find_resource( consumer = utils.find_resource(
identity_client.oauth1.consumers, parsed_args.consumer) identity_client.oauth1.consumers, parsed_args.consumer
)
kwargs = {} kwargs = {}
if parsed_args.description: if parsed_args.description:
kwargs['description'] = parsed_args.description kwargs['description'] = parsed_args.description
consumer = identity_client.oauth1.consumers.update( consumer = identity_client.oauth1.consumers.update(
consumer.id, **kwargs) consumer.id, **kwargs
)
class ShowConsumer(command.ShowOne): class ShowConsumer(command.ShowOne):
@ -138,7 +153,8 @@ class ShowConsumer(command.ShowOne):
def take_action(self, parsed_args): def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity identity_client = self.app.client_manager.identity
consumer = utils.find_resource( consumer = utils.find_resource(
identity_client.oauth1.consumers, parsed_args.consumer) identity_client.oauth1.consumers, parsed_args.consumer
)
consumer._info.pop('links', None) consumer._info.pop('links', None)
return zip(*sorted(consumer._info.items())) return zip(*sorted(consumer._info.items()))

View File

@ -52,25 +52,30 @@ class CreateCredential(command.ShowOne):
parser.add_argument( parser.add_argument(
'--project', '--project',
metavar='<project>', metavar='<project>',
help=_('Project which limits the scope of ' help=_(
'the credential (name or ID)'), 'Project which limits the scope of '
'the credential (name or ID)'
),
) )
return parser return parser
def take_action(self, parsed_args): def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity identity_client = self.app.client_manager.identity
user_id = utils.find_resource(identity_client.users, user_id = utils.find_resource(
parsed_args.user).id identity_client.users, parsed_args.user
).id
if parsed_args.project: if parsed_args.project:
project = utils.find_resource(identity_client.projects, project = utils.find_resource(
parsed_args.project).id identity_client.projects, parsed_args.project
).id
else: else:
project = None project = None
credential = identity_client.credentials.create( credential = identity_client.credentials.create(
user=user_id, user=user_id,
type=parsed_args.type, type=parsed_args.type,
blob=parsed_args.data, blob=parsed_args.data,
project=project) project=project,
)
credential._info.pop('links') credential._info.pop('links')
return zip(*sorted(credential._info.items())) return zip(*sorted(credential._info.items()))
@ -97,14 +102,19 @@ class DeleteCredential(command.Command):
identity_client.credentials.delete(i) identity_client.credentials.delete(i)
except Exception as e: except Exception as e:
result += 1 result += 1
LOG.error(_("Failed to delete credentials with " LOG.error(
"ID '%(credential)s': %(e)s"), _(
{'credential': i, 'e': e}) "Failed to delete credentials with "
"ID '%(credential)s': %(e)s"
),
{'credential': i, 'e': e},
)
if result > 0: if result > 0:
total = len(parsed_args.credential) total = len(parsed_args.credential)
msg = (_("%(result)s of %(total)s credential failed " msg = _(
"to delete.") % {'result': result, 'total': total}) "%(result)s of %(total)s credential failed " "to delete."
) % {'result': result, 'total': total}
raise exceptions.CommandError(msg) raise exceptions.CommandError(msg)
@ -144,11 +154,17 @@ class ListCredential(command.Lister):
columns = ('ID', 'Type', 'User ID', 'Blob', 'Project ID') columns = ('ID', 'Type', 'User ID', 'Blob', 'Project ID')
column_headers = ('ID', 'Type', 'User ID', 'Data', 'Project ID') column_headers = ('ID', 'Type', 'User ID', 'Data', 'Project ID')
data = self.app.client_manager.identity.credentials.list(**kwargs) data = self.app.client_manager.identity.credentials.list(**kwargs)
return (column_headers, return (
(utils.get_item_properties( column_headers,
s, columns, (
utils.get_item_properties(
s,
columns,
formatters={}, formatters={},
) for s in data)) )
for s in data
),
)
class SetCredential(command.Command): class SetCredential(command.Command):
@ -182,28 +198,34 @@ class SetCredential(command.Command):
parser.add_argument( parser.add_argument(
'--project', '--project',
metavar='<project>', metavar='<project>',
help=_('Project which limits the scope of ' help=_(
'the credential (name or ID)'), 'Project which limits the scope of '
'the credential (name or ID)'
),
) )
return parser return parser
def take_action(self, parsed_args): def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity identity_client = self.app.client_manager.identity
user_id = utils.find_resource(identity_client.users, user_id = utils.find_resource(
parsed_args.user).id identity_client.users, parsed_args.user
).id
if parsed_args.project: if parsed_args.project:
project = utils.find_resource(identity_client.projects, project = utils.find_resource(
parsed_args.project).id identity_client.projects, parsed_args.project
).id
else: else:
project = None project = None
identity_client.credentials.update(parsed_args.credential, identity_client.credentials.update(
parsed_args.credential,
user=user_id, user=user_id,
type=parsed_args.type, type=parsed_args.type,
blob=parsed_args.data, blob=parsed_args.data,
project=project) project=project,
)
class ShowCredential(command.ShowOne): class ShowCredential(command.ShowOne):
@ -220,8 +242,9 @@ class ShowCredential(command.ShowOne):
def take_action(self, parsed_args): def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity identity_client = self.app.client_manager.identity
credential = utils.find_resource(identity_client.credentials, credential = utils.find_resource(
parsed_args.credential) identity_client.credentials, parsed_args.credential
)
credential._info.pop('links') credential._info.pop('links')
return zip(*sorted(credential._info.items())) return zip(*sorted(credential._info.items()))

View File

@ -81,8 +81,9 @@ class CreateDomain(command.ShowOne):
) )
except ks_exc.Conflict: except ks_exc.Conflict:
if parsed_args.or_show: if parsed_args.or_show:
domain = utils.find_resource(identity_client.domains, domain = utils.find_resource(
parsed_args.name) identity_client.domains, parsed_args.name
)
LOG.info(_('Returning existing domain %s'), domain.name) LOG.info(_('Returning existing domain %s'), domain.name)
else: else:
raise raise
@ -113,13 +114,20 @@ class DeleteDomain(command.Command):
identity_client.domains.delete(domain.id) identity_client.domains.delete(domain.id)
except Exception as e: except Exception as e:
result += 1 result += 1
LOG.error(_("Failed to delete domain with name or " LOG.error(
"ID '%(domain)s': %(e)s"), {'domain': i, 'e': e}) _(
"Failed to delete domain with name or "
"ID '%(domain)s': %(e)s"
),
{'domain': i, 'e': e},
)
if result > 0: if result > 0:
total = len(parsed_args.domain) total = len(parsed_args.domain)
msg = (_("%(result)s of %(total)s domains failed " msg = _("%(result)s of %(total)s domains failed " "to delete.") % {
"to delete.") % {'result': result, 'total': total}) 'result': result,
'total': total,
}
raise exceptions.CommandError(msg) raise exceptions.CommandError(msg)
@ -150,11 +158,17 @@ class ListDomain(command.Lister):
columns = ('ID', 'Name', 'Enabled', 'Description') columns = ('ID', 'Name', 'Enabled', 'Description')
data = self.app.client_manager.identity.domains.list(**kwargs) data = self.app.client_manager.identity.domains.list(**kwargs)
return (columns, return (
(utils.get_item_properties( columns,
s, columns, (
utils.get_item_properties(
s,
columns,
formatters={}, formatters={},
) for s in data)) )
for s in data
),
)
class SetDomain(command.Command): class SetDomain(command.Command):
@ -193,8 +207,9 @@ class SetDomain(command.Command):
def take_action(self, parsed_args): def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity identity_client = self.app.client_manager.identity
domain = utils.find_resource(identity_client.domains, domain = utils.find_resource(
parsed_args.domain) identity_client.domains, parsed_args.domain
)
kwargs = {} kwargs = {}
if parsed_args.name: if parsed_args.name:
kwargs['name'] = parsed_args.name kwargs['name'] = parsed_args.name
@ -228,11 +243,11 @@ class ShowDomain(command.ShowOne):
def take_action(self, parsed_args): def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity identity_client = self.app.client_manager.identity
domain_str = common._get_token_resource(identity_client, 'domain', domain_str = common._get_token_resource(
parsed_args.domain) identity_client, 'domain', parsed_args.domain
)
domain = utils.find_resource(identity_client.domains, domain = utils.find_resource(identity_client.domains, domain_str)
domain_str)
domain._info.pop('links') domain._info.pop('links')
return zip(*sorted(domain._info.items())) return zip(*sorted(domain._info.items()))

View File

@ -36,17 +36,20 @@ def _determine_ec2_user(parsed_args, client_manager):
user_domain = None user_domain = None
if parsed_args.user_domain: if parsed_args.user_domain:
user_domain = common.find_domain(client_manager.identity, user_domain = common.find_domain(
parsed_args.user_domain) client_manager.identity, parsed_args.user_domain
)
if parsed_args.user: if parsed_args.user:
if user_domain is not None: if user_domain is not None:
user = utils.find_resource(client_manager.identity.users,
parsed_args.user,
domain_id=user_domain.id).id
else:
user = utils.find_resource( user = utils.find_resource(
client_manager.identity.users, client_manager.identity.users,
parsed_args.user).id parsed_args.user,
domain_id=user_domain.id,
).id
else:
user = utils.find_resource(
client_manager.identity.users, parsed_args.user
).id
else: else:
# Get the user from the current auth # Get the user from the current auth
user = client_manager.auth_ref.user_id user = client_manager.auth_ref.user_id
@ -61,14 +64,18 @@ class CreateEC2Creds(command.ShowOne):
parser.add_argument( parser.add_argument(
'--project', '--project',
metavar='<project>', metavar='<project>',
help=_('Create credentials in project ' help=_(
'(name or ID; default: current authenticated project)'), 'Create credentials in project '
'(name or ID; default: current authenticated project)'
),
) )
parser.add_argument( parser.add_argument(
'--user', '--user',
metavar='<user>', metavar='<user>',
help=_('Create credentials for user ' help=_(
'(name or ID; default: current authenticated user)'), 'Create credentials for user '
'(name or ID; default: current authenticated user)'
),
) )
common.add_user_domain_option_to_parser(parser) common.add_user_domain_option_to_parser(parser)
common.add_project_domain_option_to_parser(parser) common.add_project_domain_option_to_parser(parser)
@ -81,18 +88,21 @@ class CreateEC2Creds(command.ShowOne):
project_domain = None project_domain = None
if parsed_args.project_domain: if parsed_args.project_domain:
project_domain = common.find_domain(identity_client, project_domain = common.find_domain(
parsed_args.project_domain) identity_client, parsed_args.project_domain
)
if parsed_args.project: if parsed_args.project:
if project_domain is not None: if project_domain is not None:
project = utils.find_resource(identity_client.projects,
parsed_args.project,
domain_id=project_domain.id).id
else:
project = utils.find_resource( project = utils.find_resource(
identity_client.projects, identity_client.projects,
parsed_args.project).id parsed_args.project,
domain_id=project_domain.id,
).id
else:
project = utils.find_resource(
identity_client.projects, parsed_args.project
).id
else: else:
# Get the project from the current auth # Get the project from the current auth
project = self.app.client_manager.auth_ref.project_id project = self.app.client_manager.auth_ref.project_id
@ -103,9 +113,7 @@ class CreateEC2Creds(command.ShowOne):
info.update(creds._info) info.update(creds._info)
if 'tenant_id' in info: if 'tenant_id' in info:
info.update( info.update({'project_id': info.pop('tenant_id')})
{'project_id': info.pop('tenant_id')}
)
return zip(*sorted(info.items())) return zip(*sorted(info.items()))
@ -138,14 +146,19 @@ class DeleteEC2Creds(command.Command):
client_manager.identity.ec2.delete(user, i) client_manager.identity.ec2.delete(user, i)
except Exception as e: except Exception as e:
result += 1 result += 1
LOG.error(_("Failed to delete EC2 credentials with " LOG.error(
"access key '%(access_key)s': %(e)s"), _(
{'access_key': i, 'e': e}) "Failed to delete EC2 credentials with "
"access key '%(access_key)s': %(e)s"
),
{'access_key': i, 'e': e},
)
if result > 0: if result > 0:
total = len(parsed_args.access_key) total = len(parsed_args.access_key)
msg = (_("%(result)s of %(total)s EC2 keys failed " msg = _(
"to delete.") % {'result': result, 'total': total}) "%(result)s of %(total)s EC2 keys failed " "to delete."
) % {'result': result, 'total': total}
raise exceptions.CommandError(msg) raise exceptions.CommandError(msg)
@ -170,11 +183,17 @@ class ListEC2Creds(command.Lister):
column_headers = ('Access', 'Secret', 'Project ID', 'User ID') column_headers = ('Access', 'Secret', 'Project ID', 'User ID')
data = client_manager.identity.ec2.list(user) data = client_manager.identity.ec2.list(user)
return (column_headers, return (
(utils.get_item_properties( column_headers,
s, columns, (
utils.get_item_properties(
s,
columns,
formatters={}, formatters={},
) for s in data)) )
for s in data
),
)
class ShowEC2Creds(command.ShowOne): class ShowEC2Creds(command.ShowOne):
@ -204,8 +223,6 @@ class ShowEC2Creds(command.ShowOne):
info.update(creds._info) info.update(creds._info)
if 'tenant_id' in info: if 'tenant_id' in info:
info.update( info.update({'project_id': info.pop('tenant_id')})
{'project_id': info.pop('tenant_id')}
)
return zip(*sorted(info.items())) return zip(*sorted(info.items()))

View File

@ -39,19 +39,20 @@ class AddProjectToEndpoint(command.Command):
_description = _("Associate a project to an endpoint") _description = _("Associate a project to an endpoint")
def get_parser(self, prog_name): def get_parser(self, prog_name):
parser = super( parser = super(AddProjectToEndpoint, self).get_parser(prog_name)
AddProjectToEndpoint, self).get_parser(prog_name)
parser.add_argument( parser.add_argument(
'endpoint', 'endpoint',
metavar='<endpoint>', metavar='<endpoint>',
help=_('Endpoint to associate with ' help=_(
'specified project (name or ID)'), 'Endpoint to associate with ' 'specified project (name or ID)'
),
) )
parser.add_argument( parser.add_argument(
'project', 'project',
metavar='<project>', metavar='<project>',
help=_('Project to associate with ' help=_(
'specified endpoint name or ID)'), 'Project to associate with ' 'specified endpoint name or ID)'
),
) )
common.add_project_domain_option_to_parser(parser) common.add_project_domain_option_to_parser(parser)
return parser return parser
@ -59,16 +60,15 @@ class AddProjectToEndpoint(command.Command):
def take_action(self, parsed_args): def take_action(self, parsed_args):
client = self.app.client_manager.identity client = self.app.client_manager.identity
endpoint = utils.find_resource(client.endpoints, endpoint = utils.find_resource(client.endpoints, parsed_args.endpoint)
parsed_args.endpoint)
project = common.find_project(client, project = common.find_project(
parsed_args.project, client, parsed_args.project, parsed_args.project_domain
parsed_args.project_domain) )
client.endpoint_filter.add_endpoint_to_project( client.endpoint_filter.add_endpoint_to_project(
project=project.id, project=project.id, endpoint=endpoint.id
endpoint=endpoint.id) )
class CreateEndpoint(command.ShowOne): class CreateEndpoint(command.ShowOne):
@ -122,7 +122,7 @@ class CreateEndpoint(command.ShowOne):
url=parsed_args.url, url=parsed_args.url,
interface=parsed_args.interface, interface=parsed_args.interface,
region=parsed_args.region, region=parsed_args.region,
enabled=parsed_args.enabled enabled=parsed_args.enabled,
) )
info = {} info = {}
@ -152,17 +152,24 @@ class DeleteEndpoint(command.Command):
for i in parsed_args.endpoint: for i in parsed_args.endpoint:
try: try:
endpoint_id = utils.find_resource( endpoint_id = utils.find_resource(
identity_client.endpoints, i).id identity_client.endpoints, i
).id
identity_client.endpoints.delete(endpoint_id) identity_client.endpoints.delete(endpoint_id)
except Exception as e: except Exception as e:
result += 1 result += 1
LOG.error(_("Failed to delete endpoint with " LOG.error(
"ID '%(endpoint)s': %(e)s"), {'endpoint': i, 'e': e}) _(
"Failed to delete endpoint with "
"ID '%(endpoint)s': %(e)s"
),
{'endpoint': i, 'e': e},
)
if result > 0: if result > 0:
total = len(parsed_args.endpoint) total = len(parsed_args.endpoint)
msg = (_("%(result)s of %(total)s endpoints failed " msg = _(
"to delete.") % {'result': result, 'total': total}) "%(result)s of %(total)s endpoints failed " "to delete."
) % {'result': result, 'total': total}
raise exceptions.CommandError(msg) raise exceptions.CommandError(msg)
@ -206,27 +213,37 @@ class ListEndpoint(command.Lister):
endpoint = None endpoint = None
if parsed_args.endpoint: if parsed_args.endpoint:
endpoint = utils.find_resource(identity_client.endpoints, endpoint = utils.find_resource(
parsed_args.endpoint) identity_client.endpoints, parsed_args.endpoint
)
project = None project = None
if parsed_args.project: if parsed_args.project:
project = common.find_project(identity_client, project = common.find_project(
identity_client,
parsed_args.project, parsed_args.project,
parsed_args.project_domain) parsed_args.project_domain,
)
if endpoint: if endpoint:
columns = ('ID', 'Name') columns = ('ID', 'Name')
data = ( data = identity_client.endpoint_filter.list_projects_for_endpoint(
identity_client.endpoint_filter endpoint=endpoint.id
.list_projects_for_endpoint(endpoint=endpoint.id)
) )
else: else:
columns = ('ID', 'Region', 'Service Name', 'Service Type', columns = (
'Enabled', 'Interface', 'URL') 'ID',
'Region',
'Service Name',
'Service Type',
'Enabled',
'Interface',
'URL',
)
kwargs = {} kwargs = {}
if parsed_args.service: if parsed_args.service:
service = common.find_service(identity_client, service = common.find_service(
parsed_args.service) identity_client, parsed_args.service
)
kwargs['service'] = service.id kwargs['service'] = service.id
if parsed_args.interface: if parsed_args.interface:
kwargs['interface'] = parsed_args.interface kwargs['interface'] = parsed_args.interface
@ -235,8 +252,9 @@ class ListEndpoint(command.Lister):
if project: if project:
data = ( data = (
identity_client.endpoint_filter identity_client.endpoint_filter.list_endpoints_for_project(
.list_endpoints_for_project(project=project.id) project=project.id
)
) )
else: else:
data = identity_client.endpoints.list(**kwargs) data = identity_client.endpoints.list(**kwargs)
@ -244,35 +262,43 @@ class ListEndpoint(command.Lister):
service_list = identity_client.services.list() service_list = identity_client.services.list()
for ep in data: for ep in data:
service = common.find_service_in_list(service_list, service = common.find_service_in_list(
ep.service_id) service_list, ep.service_id
)
ep.service_name = get_service_name(service) ep.service_name = get_service_name(service)
ep.service_type = service.type ep.service_type = service.type
return (columns, return (
(utils.get_item_properties( columns,
s, columns, (
utils.get_item_properties(
s,
columns,
formatters={}, formatters={},
) for s in data)) )
for s in data
),
)
class RemoveProjectFromEndpoint(command.Command): class RemoveProjectFromEndpoint(command.Command):
_description = _("Dissociate a project from an endpoint") _description = _("Dissociate a project from an endpoint")
def get_parser(self, prog_name): def get_parser(self, prog_name):
parser = super( parser = super(RemoveProjectFromEndpoint, self).get_parser(prog_name)
RemoveProjectFromEndpoint, self).get_parser(prog_name)
parser.add_argument( parser.add_argument(
'endpoint', 'endpoint',
metavar='<endpoint>', metavar='<endpoint>',
help=_('Endpoint to dissociate from ' help=_(
'specified project (name or ID)'), 'Endpoint to dissociate from ' 'specified project (name or ID)'
),
) )
parser.add_argument( parser.add_argument(
'project', 'project',
metavar='<project>', metavar='<project>',
help=_('Project to dissociate from ' help=_(
'specified endpoint name or ID)'), 'Project to dissociate from ' 'specified endpoint name or ID)'
),
) )
common.add_project_domain_option_to_parser(parser) common.add_project_domain_option_to_parser(parser)
return parser return parser
@ -280,16 +306,15 @@ class RemoveProjectFromEndpoint(command.Command):
def take_action(self, parsed_args): def take_action(self, parsed_args):
client = self.app.client_manager.identity client = self.app.client_manager.identity
endpoint = utils.find_resource(client.endpoints, endpoint = utils.find_resource(client.endpoints, parsed_args.endpoint)
parsed_args.endpoint)
project = common.find_project(client, project = common.find_project(
parsed_args.project, client, parsed_args.project, parsed_args.project_domain
parsed_args.project_domain) )
client.endpoint_filter.delete_endpoint_from_project( client.endpoint_filter.delete_endpoint_from_project(
project=project.id, project=project.id, endpoint=endpoint.id
endpoint=endpoint.id) )
class SetEndpoint(command.Command): class SetEndpoint(command.Command):
@ -340,8 +365,9 @@ class SetEndpoint(command.Command):
def take_action(self, parsed_args): def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity identity_client = self.app.client_manager.identity
endpoint = utils.find_resource(identity_client.endpoints, endpoint = utils.find_resource(
parsed_args.endpoint) identity_client.endpoints, parsed_args.endpoint
)
service_id = None service_id = None
if parsed_args.service: if parsed_args.service:
@ -359,7 +385,7 @@ class SetEndpoint(command.Command):
url=parsed_args.url, url=parsed_args.url,
interface=parsed_args.interface, interface=parsed_args.interface,
region=parsed_args.region, region=parsed_args.region,
enabled=enabled enabled=enabled,
) )
@ -371,15 +397,18 @@ class ShowEndpoint(command.ShowOne):
parser.add_argument( parser.add_argument(
'endpoint', 'endpoint',
metavar='<endpoint>', metavar='<endpoint>',
help=_('Endpoint to display (endpoint ID, service ID,' help=_(
' service name, service type)'), 'Endpoint to display (endpoint ID, service ID,'
' service name, service type)'
),
) )
return parser return parser
def take_action(self, parsed_args): def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity identity_client = self.app.client_manager.identity
endpoint = utils.find_resource(identity_client.endpoints, endpoint = utils.find_resource(
parsed_args.endpoint) identity_client.endpoints, parsed_args.endpoint
)
service = common.find_service(identity_client, endpoint.service_id) service = common.find_service(identity_client, endpoint.service_id)

View File

@ -50,8 +50,10 @@ class _FiltersReader(object):
try: try:
rules = json.loads(blob) rules = json.loads(blob)
except ValueError as e: except ValueError as e:
msg = _("An error occurred when reading filters from file " msg = _(
"%(path)s: %(error)s") % {"path": path, "error": e} "An error occurred when reading filters from file "
"%(path)s: %(error)s"
) % {"path": path, "error": e}
raise exceptions.CommandError(msg) raise exceptions.CommandError(msg)
else: else:
return rules return rules
@ -61,8 +63,7 @@ class AddProjectToEndpointGroup(command.Command):
_description = _("Add a project to an endpoint group") _description = _("Add a project to an endpoint group")
def get_parser(self, prog_name): def get_parser(self, prog_name):
parser = super( parser = super(AddProjectToEndpointGroup, self).get_parser(prog_name)
AddProjectToEndpointGroup, self).get_parser(prog_name)
parser.add_argument( parser.add_argument(
'endpointgroup', 'endpointgroup',
metavar='<endpoint-group>', metavar='<endpoint-group>',
@ -79,16 +80,17 @@ class AddProjectToEndpointGroup(command.Command):
def take_action(self, parsed_args): def take_action(self, parsed_args):
client = self.app.client_manager.identity client = self.app.client_manager.identity
endpointgroup = utils.find_resource(client.endpoint_groups, endpointgroup = utils.find_resource(
parsed_args.endpointgroup) client.endpoint_groups, parsed_args.endpointgroup
)
project = common.find_project(client, project = common.find_project(
parsed_args.project, client, parsed_args.project, parsed_args.project_domain
parsed_args.project_domain) )
client.endpoint_filter.add_endpoint_group_to_project( client.endpoint_filter.add_endpoint_group_to_project(
endpoint_group=endpointgroup.id, endpoint_group=endpointgroup.id, project=project.id
project=project.id) )
class CreateEndpointGroup(command.ShowOne, _FiltersReader): class CreateEndpointGroup(command.ShowOne, _FiltersReader):
@ -122,7 +124,7 @@ class CreateEndpointGroup(command.ShowOne, _FiltersReader):
endpoint_group = identity_client.endpoint_groups.create( endpoint_group = identity_client.endpoint_groups.create(
name=parsed_args.name, name=parsed_args.name,
filters=filters, filters=filters,
description=parsed_args.description description=parsed_args.description,
) )
info = {} info = {}
@ -150,18 +152,24 @@ class DeleteEndpointGroup(command.Command):
for i in parsed_args.endpointgroup: for i in parsed_args.endpointgroup:
try: try:
endpoint_id = utils.find_resource( endpoint_id = utils.find_resource(
identity_client.endpoint_groups, i).id identity_client.endpoint_groups, i
).id
identity_client.endpoint_groups.delete(endpoint_id) identity_client.endpoint_groups.delete(endpoint_id)
except Exception as e: except Exception as e:
result += 1 result += 1
LOG.error(_("Failed to delete endpoint group with " LOG.error(
"ID '%(endpointgroup)s': %(e)s"), _(
{'endpointgroup': i, 'e': e}) "Failed to delete endpoint group with "
"ID '%(endpointgroup)s': %(e)s"
),
{'endpointgroup': i, 'e': e},
)
if result > 0: if result > 0:
total = len(parsed_args.endpointgroup) total = len(parsed_args.endpointgroup)
msg = (_("%(result)s of %(total)s endpointgroups failed " msg = _(
"to delete.") % {'result': result, 'total': total}) "%(result)s of %(total)s endpointgroups failed " "to delete."
) % {'result': result, 'total': total}
raise exceptions.CommandError(msg) raise exceptions.CommandError(msg)
@ -193,40 +201,50 @@ class ListEndpointGroup(command.Lister):
endpointgroup = None endpointgroup = None
if parsed_args.endpointgroup: if parsed_args.endpointgroup:
endpointgroup = utils.find_resource(client.endpoint_groups, endpointgroup = utils.find_resource(
parsed_args.endpointgroup) client.endpoint_groups, parsed_args.endpointgroup
)
project = None project = None
if parsed_args.project: if parsed_args.project:
project = common.find_project(client, project = common.find_project(
parsed_args.project, client, parsed_args.project, parsed_args.domain
parsed_args.domain) )
if endpointgroup: if endpointgroup:
# List projects associated to the endpoint group # List projects associated to the endpoint group
columns = ('ID', 'Name', 'Description') columns = ('ID', 'Name', 'Description')
data = client.endpoint_filter.list_projects_for_endpoint_group( data = client.endpoint_filter.list_projects_for_endpoint_group(
endpoint_group=endpointgroup.id) endpoint_group=endpointgroup.id
)
elif project: elif project:
columns = ('ID', 'Name', 'Description') columns = ('ID', 'Name', 'Description')
data = client.endpoint_filter.list_endpoint_groups_for_project( data = client.endpoint_filter.list_endpoint_groups_for_project(
project=project.id) project=project.id
)
else: else:
columns = ('ID', 'Name', 'Description') columns = ('ID', 'Name', 'Description')
data = client.endpoint_groups.list() data = client.endpoint_groups.list()
return (columns, return (
(utils.get_item_properties( columns,
s, columns, (
utils.get_item_properties(
s,
columns,
formatters={}, formatters={},
) for s in data)) )
for s in data
),
)
class RemoveProjectFromEndpointGroup(command.Command): class RemoveProjectFromEndpointGroup(command.Command):
_description = _("Remove project from endpoint group") _description = _("Remove project from endpoint group")
def get_parser(self, prog_name): def get_parser(self, prog_name):
parser = super( parser = super(RemoveProjectFromEndpointGroup, self).get_parser(
RemoveProjectFromEndpointGroup, self).get_parser(prog_name) prog_name
)
parser.add_argument( parser.add_argument(
'endpointgroup', 'endpointgroup',
metavar='<endpoint-group>', metavar='<endpoint-group>',
@ -243,16 +261,17 @@ class RemoveProjectFromEndpointGroup(command.Command):
def take_action(self, parsed_args): def take_action(self, parsed_args):
client = self.app.client_manager.identity client = self.app.client_manager.identity
endpointgroup = utils.find_resource(client.endpoint_groups, endpointgroup = utils.find_resource(
parsed_args.endpointgroup) client.endpoint_groups, parsed_args.endpointgroup
)
project = common.find_project(client, project = common.find_project(
parsed_args.project, client, parsed_args.project, parsed_args.project_domain
parsed_args.project_domain) )
client.endpoint_filter.delete_endpoint_group_from_project( client.endpoint_filter.delete_endpoint_group_from_project(
endpoint_group=endpointgroup.id, endpoint_group=endpointgroup.id, project=project.id
project=project.id) )
class SetEndpointGroup(command.Command, _FiltersReader): class SetEndpointGroup(command.Command, _FiltersReader):
@ -285,8 +304,9 @@ class SetEndpointGroup(command.Command, _FiltersReader):
def take_action(self, parsed_args): def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity identity_client = self.app.client_manager.identity
endpointgroup = utils.find_resource(identity_client.endpoint_groups, endpointgroup = utils.find_resource(
parsed_args.endpointgroup) identity_client.endpoint_groups, parsed_args.endpointgroup
)
filters = None filters = None
if parsed_args.filters: if parsed_args.filters:
@ -296,7 +316,7 @@ class SetEndpointGroup(command.Command, _FiltersReader):
endpointgroup.id, endpointgroup.id,
name=parsed_args.name, name=parsed_args.name,
filters=filters, filters=filters,
description=parsed_args.description description=parsed_args.description,
) )
@ -314,8 +334,9 @@ class ShowEndpointGroup(command.ShowOne):
def take_action(self, parsed_args): def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity identity_client = self.app.client_manager.identity
endpoint_group = utils.find_resource(identity_client.endpoint_groups, endpoint_group = utils.find_resource(
parsed_args.endpointgroup) identity_client.endpoint_groups, parsed_args.endpointgroup
)
info = {} info = {}
endpoint_group._info.pop('links') endpoint_group._info.pop('links')

View File

@ -34,15 +34,19 @@ class CreateProtocol(command.ShowOne):
parser.add_argument( parser.add_argument(
'federation_protocol', 'federation_protocol',
metavar='<name>', metavar='<name>',
help=_('New federation protocol name (must be unique ' help=_(
'per identity provider)'), 'New federation protocol name (must be unique '
'per identity provider)'
),
) )
parser.add_argument( parser.add_argument(
'--identity-provider', '--identity-provider',
metavar='<identity-provider>', metavar='<identity-provider>',
required=True, required=True,
help=_('Identity provider that will support the new federation ' help=_(
' protocol (name or ID) (required)'), 'Identity provider that will support the new federation '
' protocol (name or ID) (required)'
),
) )
parser.add_argument( parser.add_argument(
'--mapping', '--mapping',
@ -58,7 +62,8 @@ class CreateProtocol(command.ShowOne):
protocol = identity_client.federation.protocols.create( protocol = identity_client.federation.protocols.create(
protocol_id=parsed_args.federation_protocol, protocol_id=parsed_args.federation_protocol,
identity_provider=parsed_args.identity_provider, identity_provider=parsed_args.identity_provider,
mapping=parsed_args.mapping) mapping=parsed_args.mapping,
)
info = dict(protocol._info) info = dict(protocol._info)
# NOTE(marek-denis): Identity provider is not included in a response # NOTE(marek-denis): Identity provider is not included in a response
# from Keystone, however it should be listed to the user. Add it # from Keystone, however it should be listed to the user. Add it
@ -85,8 +90,10 @@ class DeleteProtocol(command.Command):
'--identity-provider', '--identity-provider',
metavar='<identity-provider>', metavar='<identity-provider>',
required=True, required=True,
help=_('Identity provider that supports <federation-protocol> ' help=_(
'(name or ID) (required)'), 'Identity provider that supports <federation-protocol> '
'(name or ID) (required)'
),
) )
return parser return parser
@ -97,17 +104,24 @@ class DeleteProtocol(command.Command):
for i in parsed_args.federation_protocol: for i in parsed_args.federation_protocol:
try: try:
identity_client.federation.protocols.delete( identity_client.federation.protocols.delete(
parsed_args.identity_provider, i) parsed_args.identity_provider, i
)
except Exception as e: except Exception as e:
result += 1 result += 1
LOG.error(_("Failed to delete federation protocol " LOG.error(
"with name or ID '%(protocol)s': %(e)s"), _(
{'protocol': i, 'e': e}) "Failed to delete federation protocol "
"with name or ID '%(protocol)s': %(e)s"
),
{'protocol': i, 'e': e},
)
if result > 0: if result > 0:
total = len(parsed_args.federation_protocol) total = len(parsed_args.federation_protocol)
msg = (_("%(result)s of %(total)s federation protocols failed" msg = _(
" to delete.") % {'result': result, 'total': total}) "%(result)s of %(total)s federation protocols failed"
" to delete."
) % {'result': result, 'total': total}
raise exceptions.CommandError(msg) raise exceptions.CommandError(msg)
@ -129,11 +143,14 @@ class ListProtocols(command.Lister):
identity_client = self.app.client_manager.identity identity_client = self.app.client_manager.identity
protocols = identity_client.federation.protocols.list( protocols = identity_client.federation.protocols.list(
parsed_args.identity_provider) parsed_args.identity_provider
)
columns = ('id', 'mapping') columns = ('id', 'mapping')
response_attributes = ('id', 'mapping_id') response_attributes = ('id', 'mapping_id')
items = [utils.get_item_properties(s, response_attributes) items = [
for s in protocols] utils.get_item_properties(s, response_attributes)
for s in protocols
]
return (columns, items) return (columns, items)
@ -151,8 +168,10 @@ class SetProtocol(command.Command):
'--identity-provider', '--identity-provider',
metavar='<identity-provider>', metavar='<identity-provider>',
required=True, required=True,
help=_('Identity provider that supports <federation-protocol> ' help=_(
'(name or ID) (required)'), 'Identity provider that supports <federation-protocol> '
'(name or ID) (required)'
),
) )
parser.add_argument( parser.add_argument(
'--mapping', '--mapping',
@ -165,8 +184,10 @@ class SetProtocol(command.Command):
identity_client = self.app.client_manager.identity identity_client = self.app.client_manager.identity
protocol = identity_client.federation.protocols.update( protocol = identity_client.federation.protocols.update(
parsed_args.identity_provider, parsed_args.federation_protocol, parsed_args.identity_provider,
parsed_args.mapping) parsed_args.federation_protocol,
parsed_args.mapping,
)
info = dict(protocol._info) info = dict(protocol._info)
# NOTE(marek-denis): Identity provider is not included in a response # NOTE(marek-denis): Identity provider is not included in a response
# from Keystone, however it should be listed to the user. Add it # from Keystone, however it should be listed to the user. Add it
@ -191,8 +212,10 @@ class ShowProtocol(command.ShowOne):
'--identity-provider', '--identity-provider',
metavar='<identity-provider>', metavar='<identity-provider>',
required=True, required=True,
help=_('Identity provider that supports <federation-protocol> ' help=_(
'(name or ID) (required)'), 'Identity provider that supports <federation-protocol> '
'(name or ID) (required)'
),
) )
return parser return parser
@ -200,7 +223,8 @@ class ShowProtocol(command.ShowOne):
identity_client = self.app.client_manager.identity identity_client = self.app.client_manager.identity
protocol = identity_client.federation.protocols.get( protocol = identity_client.federation.protocols.get(
parsed_args.identity_provider, parsed_args.federation_protocol) parsed_args.identity_provider, parsed_args.federation_protocol
)
info = dict(protocol._info) info = dict(protocol._info)
info['mapping'] = info.pop('mapping_id') info['mapping'] = info.pop('mapping_id')
info.pop('links', None) info.pop('links', None)

View File

@ -43,8 +43,10 @@ class AddUserToGroup(command.Command):
'user', 'user',
metavar='<user>', metavar='<user>',
nargs='+', nargs='+',
help=_('User(s) to add to <group> (name or ID) ' help=_(
'(repeat option to add multiple users)'), 'User(s) to add to <group> (name or ID) '
'(repeat option to add multiple users)'
),
) )
common.add_group_domain_option_to_parser(parser) common.add_group_domain_option_to_parser(parser)
common.add_user_domain_option_to_parser(parser) common.add_user_domain_option_to_parser(parser)
@ -53,16 +55,16 @@ class AddUserToGroup(command.Command):
def take_action(self, parsed_args): def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity identity_client = self.app.client_manager.identity
group_id = common.find_group(identity_client, group_id = common.find_group(
parsed_args.group, identity_client, parsed_args.group, parsed_args.group_domain
parsed_args.group_domain).id ).id
result = 0 result = 0
for i in parsed_args.user: for i in parsed_args.user:
try: try:
user_id = common.find_user(identity_client, user_id = common.find_user(
i, identity_client, i, parsed_args.user_domain
parsed_args.user_domain).id ).id
identity_client.users.add_to_group(user_id, group_id) identity_client.users.add_to_group(user_id, group_id)
except Exception as e: except Exception as e:
result += 1 result += 1
@ -74,8 +76,12 @@ class AddUserToGroup(command.Command):
LOG.error(msg) LOG.error(msg)
if result > 0: if result > 0:
total = len(parsed_args.user) total = len(parsed_args.user)
msg = (_("%(result)s of %(total)s users not added to group " msg = (
"%(group)s.")) % { _(
"%(result)s of %(total)s users not added to group "
"%(group)s."
)
) % {
'result': result, 'result': result,
'total': total, 'total': total,
'group': parsed_args.group, 'group': parsed_args.group,
@ -105,12 +111,12 @@ class CheckUserInGroup(command.Command):
def take_action(self, parsed_args): def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity identity_client = self.app.client_manager.identity
user_id = common.find_user(identity_client, user_id = common.find_user(
parsed_args.user, identity_client, parsed_args.user, parsed_args.user_domain
parsed_args.user_domain).id ).id
group_id = common.find_group(identity_client, group_id = common.find_group(
parsed_args.group, identity_client, parsed_args.group, parsed_args.group_domain
parsed_args.group_domain).id ).id
try: try:
identity_client.users.check_in_group(user_id, group_id) identity_client.users.check_in_group(user_id, group_id)
@ -163,19 +169,19 @@ class CreateGroup(command.ShowOne):
domain = None domain = None
if parsed_args.domain: if parsed_args.domain:
domain = common.find_domain(identity_client, domain = common.find_domain(identity_client, parsed_args.domain).id
parsed_args.domain).id
try: try:
group = identity_client.groups.create( group = identity_client.groups.create(
name=parsed_args.name, name=parsed_args.name,
domain=domain, domain=domain,
description=parsed_args.description) description=parsed_args.description,
)
except ks_exc.Conflict: except ks_exc.Conflict:
if parsed_args.or_show: if parsed_args.or_show:
group = utils.find_resource(identity_client.groups, group = utils.find_resource(
parsed_args.name, identity_client.groups, parsed_args.name, domain_id=domain
domain_id=domain) )
LOG.info(_('Returning existing group %s'), group.name) LOG.info(_('Returning existing group %s'), group.name)
else: else:
raise raise
@ -208,20 +214,26 @@ class DeleteGroup(command.Command):
errors = 0 errors = 0
for group in parsed_args.groups: for group in parsed_args.groups:
try: try:
group_obj = common.find_group(identity_client, group_obj = common.find_group(
group, identity_client, group, parsed_args.domain
parsed_args.domain) )
identity_client.groups.delete(group_obj.id) identity_client.groups.delete(group_obj.id)
except Exception as e: except Exception as e:
errors += 1 errors += 1
LOG.error(_("Failed to delete group with " LOG.error(
"name or ID '%(group)s': %(e)s"), _(
{'group': group, 'e': e}) "Failed to delete group with "
"name or ID '%(group)s': %(e)s"
),
{'group': group, 'e': e},
)
if errors > 0: if errors > 0:
total = len(parsed_args.groups) total = len(parsed_args.groups)
msg = (_("%(errors)s of %(total)s groups failed " msg = _("%(errors)s of %(total)s groups failed " "to delete.") % {
"to delete.") % {'errors': errors, 'total': total}) 'errors': errors,
'total': total,
}
raise exceptions.CommandError(msg) raise exceptions.CommandError(msg)
@ -254,8 +266,7 @@ class ListGroup(command.Lister):
domain = None domain = None
if parsed_args.domain: if parsed_args.domain:
domain = common.find_domain(identity_client, domain = common.find_domain(identity_client, parsed_args.domain).id
parsed_args.domain).id
if parsed_args.user: if parsed_args.user:
user = common.find_user( user = common.find_user(
@ -278,10 +289,14 @@ class ListGroup(command.Lister):
return ( return (
columns, columns,
(utils.get_item_properties( (
s, columns, utils.get_item_properties(
s,
columns,
formatters={}, formatters={},
) for s in data) )
for s in data
),
) )
@ -299,8 +314,10 @@ class RemoveUserFromGroup(command.Command):
'user', 'user',
metavar='<user>', metavar='<user>',
nargs='+', nargs='+',
help=_('User(s) to remove from <group> (name or ID) ' help=_(
'(repeat option to remove multiple users)'), 'User(s) to remove from <group> (name or ID) '
'(repeat option to remove multiple users)'
),
) )
common.add_group_domain_option_to_parser(parser) common.add_group_domain_option_to_parser(parser)
common.add_user_domain_option_to_parser(parser) common.add_user_domain_option_to_parser(parser)
@ -309,16 +326,16 @@ class RemoveUserFromGroup(command.Command):
def take_action(self, parsed_args): def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity identity_client = self.app.client_manager.identity
group_id = common.find_group(identity_client, group_id = common.find_group(
parsed_args.group, identity_client, parsed_args.group, parsed_args.group_domain
parsed_args.group_domain).id ).id
result = 0 result = 0
for i in parsed_args.user: for i in parsed_args.user:
try: try:
user_id = common.find_user(identity_client, user_id = common.find_user(
i, identity_client, i, parsed_args.user_domain
parsed_args.user_domain).id ).id
identity_client.users.remove_from_group(user_id, group_id) identity_client.users.remove_from_group(user_id, group_id)
except Exception as e: except Exception as e:
result += 1 result += 1
@ -330,8 +347,12 @@ class RemoveUserFromGroup(command.Command):
LOG.error(msg) LOG.error(msg)
if result > 0: if result > 0:
total = len(parsed_args.user) total = len(parsed_args.user)
msg = (_("%(result)s of %(total)s users not removed from group " msg = (
"%(group)s.")) % { _(
"%(result)s of %(total)s users not removed from group "
"%(group)s."
)
) % {
'result': result, 'result': result,
'total': total, 'total': total,
'group': parsed_args.group, 'group': parsed_args.group,
@ -368,8 +389,9 @@ class SetGroup(command.Command):
def take_action(self, parsed_args): def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity identity_client = self.app.client_manager.identity
group = common.find_group(identity_client, parsed_args.group, group = common.find_group(
parsed_args.domain) identity_client, parsed_args.group, parsed_args.domain
)
kwargs = {} kwargs = {}
if parsed_args.name: if parsed_args.name:
kwargs['name'] = parsed_args.name kwargs['name'] = parsed_args.name
@ -399,9 +421,11 @@ class ShowGroup(command.ShowOne):
def take_action(self, parsed_args): def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity identity_client = self.app.client_manager.identity
group = common.find_group(identity_client, group = common.find_group(
identity_client,
parsed_args.group, parsed_args.group,
domain_name_or_id=parsed_args.domain) domain_name_or_id=parsed_args.domain,
)
group._info.pop('links') group._info.pop('links')
return zip(*sorted(group._info.items())) return zip(*sorted(group._info.items()))

View File

@ -42,14 +42,18 @@ class CreateIdentityProvider(command.ShowOne):
'--remote-id', '--remote-id',
metavar='<remote-id>', metavar='<remote-id>',
action='append', action='append',
help=_('Remote IDs to associate with the Identity Provider ' help=_(
'(repeat option to provide multiple values)'), 'Remote IDs to associate with the Identity Provider '
'(repeat option to provide multiple values)'
),
) )
identity_remote_id_provider.add_argument( identity_remote_id_provider.add_argument(
'--remote-id-file', '--remote-id-file',
metavar='<file-name>', metavar='<file-name>',
help=_('Name of a file that contains many remote IDs to associate ' help=_(
'with the identity provider, one per line'), 'Name of a file that contains many remote IDs to associate '
'with the identity provider, one per line'
),
) )
parser.add_argument( parser.add_argument(
'--description', '--description',
@ -59,19 +63,23 @@ class CreateIdentityProvider(command.ShowOne):
parser.add_argument( parser.add_argument(
'--domain', '--domain',
metavar='<domain>', metavar='<domain>',
help=_('Domain to associate with the identity provider. If not ' help=_(
'Domain to associate with the identity provider. If not '
'specified, a domain will be created automatically. ' 'specified, a domain will be created automatically. '
'(Name or ID)'), '(Name or ID)'
),
) )
parser.add_argument( parser.add_argument(
'--authorization-ttl', '--authorization-ttl',
metavar='<authorization-ttl>', metavar='<authorization-ttl>',
type=int, type=int,
help=_('Time to keep the role assignments for users ' help=_(
'Time to keep the role assignments for users '
'authenticating via this identity provider. ' 'authenticating via this identity provider. '
'When not provided, global default configured in the ' 'When not provided, global default configured in the '
'Identity service will be used. ' 'Identity service will be used. '
'Available since Identity API version 3.14 (Ussuri).'), 'Available since Identity API version 3.14 (Ussuri).'
),
) )
enable_identity_provider = parser.add_mutually_exclusive_group() enable_identity_provider = parser.add_mutually_exclusive_group()
enable_identity_provider.add_argument( enable_identity_provider.add_argument(
@ -93,25 +101,29 @@ class CreateIdentityProvider(command.ShowOne):
identity_client = self.app.client_manager.identity identity_client = self.app.client_manager.identity
if parsed_args.remote_id_file: if parsed_args.remote_id_file:
file_content = utils.read_blob_file_contents( file_content = utils.read_blob_file_contents(
parsed_args.remote_id_file) parsed_args.remote_id_file
)
remote_ids = file_content.splitlines() remote_ids = file_content.splitlines()
remote_ids = list(map(str.strip, remote_ids)) remote_ids = list(map(str.strip, remote_ids))
else: else:
remote_ids = (parsed_args.remote_id remote_ids = (
if parsed_args.remote_id else None) parsed_args.remote_id if parsed_args.remote_id else None
)
domain_id = None domain_id = None
if parsed_args.domain: if parsed_args.domain:
domain_id = common.find_domain(identity_client, domain_id = common.find_domain(
parsed_args.domain).id identity_client, parsed_args.domain
).id
# TODO(pas-ha) actually check for 3.14 microversion # TODO(pas-ha) actually check for 3.14 microversion
kwargs = {} kwargs = {}
auth_ttl = parsed_args.authorization_ttl auth_ttl = parsed_args.authorization_ttl
if auth_ttl is not None: if auth_ttl is not None:
if auth_ttl < 0: if auth_ttl < 0:
msg = (_("%(param)s must be positive integer or zero." msg = _("%(param)s must be positive integer or zero.") % {
) % {"param": "authorization-ttl"}) "param": "authorization-ttl"
}
raise exceptions.CommandError(msg) raise exceptions.CommandError(msg)
kwargs['authorization_ttl'] = auth_ttl kwargs['authorization_ttl'] = auth_ttl
@ -121,7 +133,8 @@ class CreateIdentityProvider(command.ShowOne):
description=parsed_args.description, description=parsed_args.description,
domain_id=domain_id, domain_id=domain_id,
enabled=parsed_args.enabled, enabled=parsed_args.enabled,
**kwargs) **kwargs
)
idp._info.pop('links', None) idp._info.pop('links', None)
remote_ids = format_columns.ListColumn(idp._info.pop('remote_ids', [])) remote_ids = format_columns.ListColumn(idp._info.pop('remote_ids', []))
@ -150,14 +163,20 @@ class DeleteIdentityProvider(command.Command):
identity_client.federation.identity_providers.delete(i) identity_client.federation.identity_providers.delete(i)
except Exception as e: except Exception as e:
result += 1 result += 1
LOG.error(_("Failed to delete identity providers with " LOG.error(
"name or ID '%(provider)s': %(e)s"), _(
{'provider': i, 'e': e}) "Failed to delete identity providers with "
"name or ID '%(provider)s': %(e)s"
),
{'provider': i, 'e': e},
)
if result > 0: if result > 0:
total = len(parsed_args.identity_provider) total = len(parsed_args.identity_provider)
msg = (_("%(result)s of %(total)s identity providers failed" msg = _(
" to delete.") % {'result': result, 'total': total}) "%(result)s of %(total)s identity providers failed"
" to delete."
) % {'result': result, 'total': total}
raise exceptions.CommandError(msg) raise exceptions.CommandError(msg)
@ -190,11 +209,17 @@ class ListIdentityProvider(command.Lister):
kwargs['enabled'] = True kwargs['enabled'] = True
data = identity_client.federation.identity_providers.list(**kwargs) data = identity_client.federation.identity_providers.list(**kwargs)
return (columns, return (
(utils.get_item_properties( columns,
s, columns, (
utils.get_item_properties(
s,
columns,
formatters={}, formatters={},
) for s in data)) )
for s in data
),
)
class SetIdentityProvider(command.Command): class SetIdentityProvider(command.Command):
@ -217,22 +242,28 @@ class SetIdentityProvider(command.Command):
'--remote-id', '--remote-id',
metavar='<remote-id>', metavar='<remote-id>',
action='append', action='append',
help=_('Remote IDs to associate with the Identity Provider ' help=_(
'(repeat option to provide multiple values)'), 'Remote IDs to associate with the Identity Provider '
'(repeat option to provide multiple values)'
),
) )
identity_remote_id_provider.add_argument( identity_remote_id_provider.add_argument(
'--remote-id-file', '--remote-id-file',
metavar='<file-name>', metavar='<file-name>',
help=_('Name of a file that contains many remote IDs to associate ' help=_(
'with the identity provider, one per line'), 'Name of a file that contains many remote IDs to associate '
'with the identity provider, one per line'
),
) )
parser.add_argument( parser.add_argument(
'--authorization-ttl', '--authorization-ttl',
metavar='<authorization-ttl>', metavar='<authorization-ttl>',
type=int, type=int,
help=_('Time to keep the role assignments for users ' help=_(
'Time to keep the role assignments for users '
'authenticating via this identity provider. ' 'authenticating via this identity provider. '
'Available since Identity API version 3.14 (Ussuri).'), 'Available since Identity API version 3.14 (Ussuri).'
),
) )
enable_identity_provider = parser.add_mutually_exclusive_group() enable_identity_provider = parser.add_mutually_exclusive_group()
enable_identity_provider.add_argument( enable_identity_provider.add_argument(
@ -253,7 +284,8 @@ class SetIdentityProvider(command.Command):
# Always set remote_ids if either is passed in # Always set remote_ids if either is passed in
if parsed_args.remote_id_file: if parsed_args.remote_id_file:
file_content = utils.read_blob_file_contents( file_content = utils.read_blob_file_contents(
parsed_args.remote_id_file) parsed_args.remote_id_file
)
remote_ids = file_content.splitlines() remote_ids = file_content.splitlines()
remote_ids = list(map(str.strip, remote_ids)) remote_ids = list(map(str.strip, remote_ids))
elif parsed_args.remote_id: elif parsed_args.remote_id:
@ -279,14 +311,14 @@ class SetIdentityProvider(command.Command):
auth_ttl = parsed_args.authorization_ttl auth_ttl = parsed_args.authorization_ttl
if auth_ttl is not None: if auth_ttl is not None:
if auth_ttl < 0: if auth_ttl < 0:
msg = (_("%(param)s must be positive integer or zero." msg = _("%(param)s must be positive integer or zero.") % {
) % {"param": "authorization-ttl"}) "param": "authorization-ttl"
}
raise exceptions.CommandError(msg) raise exceptions.CommandError(msg)
kwargs['authorization_ttl'] = auth_ttl kwargs['authorization_ttl'] = auth_ttl
federation_client.identity_providers.update( federation_client.identity_providers.update(
parsed_args.identity_provider, parsed_args.identity_provider, **kwargs
**kwargs
) )
@ -307,7 +339,8 @@ class ShowIdentityProvider(command.ShowOne):
idp = utils.find_resource( idp = utils.find_resource(
identity_client.federation.identity_providers, identity_client.federation.identity_providers,
parsed_args.identity_provider, parsed_args.identity_provider,
id=parsed_args.identity_provider) id=parsed_args.identity_provider,
)
idp._info.pop('links', None) idp._info.pop('links', None)
remote_ids = format_columns.ListColumn(idp._info.pop('remote_ids', [])) remote_ids = format_columns.ListColumn(idp._info.pop('remote_ids', []))

View File

@ -48,7 +48,6 @@ def _get_role_ids(identity_client, parsed_args):
class CreateImpliedRole(command.ShowOne): class CreateImpliedRole(command.ShowOne):
_description = _("Creates an association between prior and implied roles") _description = _("Creates an association between prior and implied roles")
def get_parser(self, prog_name): def get_parser(self, prog_name):
@ -69,16 +68,16 @@ class CreateImpliedRole(command.ShowOne):
def take_action(self, parsed_args): def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity identity_client = self.app.client_manager.identity
(prior_role_id, implied_role_id) = _get_role_ids( (prior_role_id, implied_role_id) = _get_role_ids(
identity_client, parsed_args) identity_client, parsed_args
)
response = identity_client.inference_rules.create( response = identity_client.inference_rules.create(
prior_role_id, implied_role_id) prior_role_id, implied_role_id
)
response._info.pop('links', None) response._info.pop('links', None)
return zip(*sorted([(k, v['id']) return zip(*sorted([(k, v['id']) for k, v in response._info.items()]))
for k, v in response._info.items()]))
class DeleteImpliedRole(command.Command): class DeleteImpliedRole(command.Command):
_description = _("Deletes an association between prior and implied roles") _description = _("Deletes an association between prior and implied roles")
def get_parser(self, prog_name): def get_parser(self, prog_name):
@ -99,16 +98,19 @@ class DeleteImpliedRole(command.Command):
def take_action(self, parsed_args): def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity identity_client = self.app.client_manager.identity
(prior_role_id, implied_role_id) = _get_role_ids( (prior_role_id, implied_role_id) = _get_role_ids(
identity_client, parsed_args) identity_client, parsed_args
identity_client.inference_rules.delete( )
prior_role_id, implied_role_id) identity_client.inference_rules.delete(prior_role_id, implied_role_id)
class ListImpliedRole(command.Lister): class ListImpliedRole(command.Lister):
_description = _("List implied roles") _description = _("List implied roles")
_COLUMNS = ['Prior Role ID', 'Prior Role Name', _COLUMNS = [
'Implied Role ID', 'Implied Role Name'] 'Prior Role ID',
'Prior Role Name',
'Implied Role ID',
'Implied Role Name',
]
def get_parser(self, prog_name): def get_parser(self, prog_name):
parser = super(ListImpliedRole, self).get_parser(prog_name) parser = super(ListImpliedRole, self).get_parser(prog_name)
@ -118,10 +120,12 @@ class ListImpliedRole(command.Lister):
def _list_implied(response): def _list_implied(response):
for rule in response: for rule in response:
for implies in rule.implies: for implies in rule.implies:
yield (rule.prior_role['id'], yield (
rule.prior_role['id'],
rule.prior_role['name'], rule.prior_role['name'],
implies['id'], implies['id'],
implies['name']) implies['name'],
)
identity_client = self.app.client_manager.identity identity_client = self.app.client_manager.identity
response = identity_client.inference_rules.list_inference_roles() response = identity_client.inference_rules.list_inference_roles()

View File

@ -97,7 +97,7 @@ class CreateLimit(command.ShowOne):
parsed_args.resource_name, parsed_args.resource_name,
parsed_args.resource_limit, parsed_args.resource_limit,
description=parsed_args.description, description=parsed_args.description,
region=region region=region,
) )
limit._info.pop('links', None) limit._info.pop('links', None)
@ -168,12 +168,17 @@ class ListLimit(command.Lister):
service=service, service=service,
resource_name=parsed_args.resource_name, resource_name=parsed_args.resource_name,
region=region, region=region,
project=project project=project,
) )
columns = ( columns = (
'ID', 'Project ID', 'Service ID', 'Resource Name', 'ID',
'Resource Limit', 'Description', 'Region ID' 'Project ID',
'Service ID',
'Resource Name',
'Resource Limit',
'Description',
'Region ID',
) )
return ( return (
columns, columns,
@ -230,7 +235,7 @@ class SetLimit(command.ShowOne):
limit = identity_client.limits.update( limit = identity_client.limits.update(
parsed_args.limit_id, parsed_args.limit_id,
description=parsed_args.description, description=parsed_args.description,
resource_limit=parsed_args.resource_limit resource_limit=parsed_args.resource_limit,
) )
limit._info.pop('links', None) limit._info.pop('links', None)
@ -260,12 +265,15 @@ class DeleteLimit(command.Command):
identity_client.limits.delete(limit_id) identity_client.limits.delete(limit_id)
except Exception as e: except Exception as e:
errors += 1 errors += 1
LOG.error(_("Failed to delete limit with ID " LOG.error(
"'%(id)s': %(e)s"), _("Failed to delete limit with ID " "'%(id)s': %(e)s"),
{'id': limit_id, 'e': e}) {'id': limit_id, 'e': e},
)
if errors > 0: if errors > 0:
total = len(parsed_args.limit_id) total = len(parsed_args.limit_id)
msg = (_("%(errors)s of %(total)s limits failed to " msg = _("%(errors)s of %(total)s limits failed to " "delete.") % {
"delete.") % {'errors': errors, 'total': total}) 'errors': errors,
'total': total,
}
raise exceptions.CommandError(msg) raise exceptions.CommandError(msg)

View File

@ -73,8 +73,10 @@ class _RulesReader(object):
try: try:
rules = json.loads(blob) rules = json.loads(blob)
except ValueError as e: except ValueError as e:
msg = _("An error occurred when reading rules from file " msg = _(
"%(path)s: %(error)s") % {"path": path, "error": e} "An error occurred when reading rules from file "
"%(path)s: %(error)s"
) % {"path": path, "error": e}
raise exceptions.CommandError(msg) raise exceptions.CommandError(msg)
else: else:
return rules return rules
@ -92,7 +94,8 @@ class CreateMapping(command.ShowOne, _RulesReader):
) )
parser.add_argument( parser.add_argument(
'--rules', '--rules',
metavar='<filename>', required=True, metavar='<filename>',
required=True,
help=_('Filename that contains a set of mapping rules (required)'), help=_('Filename that contains a set of mapping rules (required)'),
) )
return parser return parser
@ -102,8 +105,8 @@ class CreateMapping(command.ShowOne, _RulesReader):
rules = self._read_rules(parsed_args.rules) rules = self._read_rules(parsed_args.rules)
mapping = identity_client.federation.mappings.create( mapping = identity_client.federation.mappings.create(
mapping_id=parsed_args.mapping, mapping_id=parsed_args.mapping, rules=rules
rules=rules) )
mapping._info.pop('links', None) mapping._info.pop('links', None)
return zip(*sorted(mapping._info.items())) return zip(*sorted(mapping._info.items()))
@ -130,13 +133,19 @@ class DeleteMapping(command.Command):
identity_client.federation.mappings.delete(i) identity_client.federation.mappings.delete(i)
except Exception as e: except Exception as e:
result += 1 result += 1
LOG.error(_("Failed to delete mapping with name or " LOG.error(
"ID '%(mapping)s': %(e)s"), {'mapping': i, 'e': e}) _(
"Failed to delete mapping with name or "
"ID '%(mapping)s': %(e)s"
),
{'mapping': i, 'e': e},
)
if result > 0: if result > 0:
total = len(parsed_args.mapping) total = len(parsed_args.mapping)
msg = (_("%(result)s of %(total)s mappings failed " msg = _(
"to delete.") % {'result': result, 'total': total}) "%(result)s of %(total)s mappings failed " "to delete."
) % {'result': result, 'total': total}
raise exceptions.CommandError(msg) raise exceptions.CommandError(msg)
@ -177,8 +186,8 @@ class SetMapping(command.Command, _RulesReader):
rules = self._read_rules(parsed_args.rules) rules = self._read_rules(parsed_args.rules)
mapping = identity_client.federation.mappings.update( mapping = identity_client.federation.mappings.update(
mapping=parsed_args.mapping, mapping=parsed_args.mapping, rules=rules
rules=rules) )
mapping._info.pop('links', None) mapping._info.pop('links', None)

View File

@ -36,8 +36,10 @@ class CreatePolicy(command.ShowOne):
'--type', '--type',
metavar='<type>', metavar='<type>',
default="application/json", default="application/json",
help=_('New MIME type of the policy rules file ' help=_(
'(defaults to application/json)'), 'New MIME type of the policy rules file '
'(defaults to application/json)'
),
) )
parser.add_argument( parser.add_argument(
'rules', 'rules',
@ -80,13 +82,20 @@ class DeletePolicy(command.Command):
identity_client.policies.delete(i) identity_client.policies.delete(i)
except Exception as e: except Exception as e:
result += 1 result += 1
LOG.error(_("Failed to delete policy with name or " LOG.error(
"ID '%(policy)s': %(e)s"), {'policy': i, 'e': e}) _(
"Failed to delete policy with name or "
"ID '%(policy)s': %(e)s"
),
{'policy': i, 'e': e},
)
if result > 0: if result > 0:
total = len(parsed_args.policy) total = len(parsed_args.policy)
msg = (_("%(result)s of %(total)s policys failed " msg = _("%(result)s of %(total)s policys failed " "to delete.") % {
"to delete.") % {'result': result, 'total': total}) 'result': result,
'total': total,
}
raise exceptions.CommandError(msg) raise exceptions.CommandError(msg)
@ -111,11 +120,17 @@ class ListPolicy(command.Lister):
columns = ('ID', 'Type') columns = ('ID', 'Type')
column_headers = columns column_headers = columns
data = self.app.client_manager.identity.policies.list() data = self.app.client_manager.identity.policies.list()
return (column_headers, return (
(utils.get_item_properties( column_headers,
s, columns, (
utils.get_item_properties(
s,
columns,
formatters={}, formatters={},
) for s in data)) )
for s in data
),
)
class SetPolicy(command.Command): class SetPolicy(command.Command):
@ -170,8 +185,9 @@ class ShowPolicy(command.ShowOne):
def take_action(self, parsed_args): def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity identity_client = self.app.client_manager.identity
policy = utils.find_resource(identity_client.policies, policy = utils.find_resource(
parsed_args.policy) identity_client.policies, parsed_args.policy
)
policy._info.pop('links') policy._info.pop('links')
policy._info.update({'rules': policy._info.pop('blob')}) policy._info.update({'rules': policy._info.pop('blob')})

View File

@ -70,8 +70,10 @@ class CreateProject(command.ShowOne):
'--property', '--property',
metavar='<key=value>', metavar='<key=value>',
action=parseractions.KeyValueAction, action=parseractions.KeyValueAction,
help=_('Add a property to <name> ' help=_(
'(repeat option to set multiple properties)'), 'Add a property to <name> '
'(repeat option to set multiple properties)'
),
) )
parser.add_argument( parser.add_argument(
'--or-show', '--or-show',
@ -87,8 +89,7 @@ class CreateProject(command.ShowOne):
domain = None domain = None
if parsed_args.domain: if parsed_args.domain:
domain = common.find_domain(identity_client, domain = common.find_domain(identity_client, parsed_args.domain).id
parsed_args.domain).id
parent = None parent = None
if parsed_args.parent: if parsed_args.parent:
@ -128,9 +129,11 @@ class CreateProject(command.ShowOne):
) )
except ks_exc.Conflict: except ks_exc.Conflict:
if parsed_args.or_show: if parsed_args.or_show:
project = utils.find_resource(identity_client.projects, project = utils.find_resource(
identity_client.projects,
parsed_args.name, parsed_args.name,
domain_id=domain) domain_id=domain,
)
LOG.info(_('Returning existing project %s'), project.name) LOG.info(_('Returning existing project %s'), project.name)
else: else:
raise raise
@ -167,23 +170,29 @@ class DeleteProject(command.Command):
for project in parsed_args.projects: for project in parsed_args.projects:
try: try:
if domain is not None: if domain is not None:
project_obj = utils.find_resource(identity_client.projects, project_obj = utils.find_resource(
project, identity_client.projects, project, domain_id=domain.id
domain_id=domain.id) )
else: else:
project_obj = utils.find_resource(identity_client.projects, project_obj = utils.find_resource(
project) identity_client.projects, project
)
identity_client.projects.delete(project_obj.id) identity_client.projects.delete(project_obj.id)
except Exception as e: except Exception as e:
errors += 1 errors += 1
LOG.error(_("Failed to delete project with " LOG.error(
"name or ID '%(project)s': %(e)s"), _(
{'project': project, 'e': e}) "Failed to delete project with "
"name or ID '%(project)s': %(e)s"
),
{'project': project, 'e': e},
)
if errors > 0: if errors > 0:
total = len(parsed_args.projects) total = len(parsed_args.projects)
msg = (_("%(errors)s of %(total)s projects failed " msg = _(
"to delete.") % {'errors': errors, 'total': total}) "%(errors)s of %(total)s projects failed " "to delete."
) % {'errors': errors, 'total': total}
raise exceptions.CommandError(msg) raise exceptions.CommandError(msg)
@ -210,8 +219,10 @@ class ListProject(command.Lister):
parser.add_argument( parser.add_argument(
'--my-projects', '--my-projects',
action='store_true', action='store_true',
help=_('List projects for the authenticated user. ' help=_(
'Supersedes other filters.'), 'List projects for the authenticated user. '
'Supersedes other filters.'
),
) )
parser.add_argument( parser.add_argument(
'--long', '--long',
@ -222,9 +233,11 @@ class ListProject(command.Lister):
parser.add_argument( parser.add_argument(
'--sort', '--sort',
metavar='<key>[:<direction>]', metavar='<key>[:<direction>]',
help=_('Sort output by selected keys and directions (asc or desc) ' help=_(
'Sort output by selected keys and directions (asc or desc) '
'(default: asc), repeat this option to specify multiple ' '(default: asc), repeat this option to specify multiple '
'keys and directions.'), 'keys and directions.'
),
) )
tag.add_tag_filtering_option_to_parser(parser, _('projects')) tag.add_tag_filtering_option_to_parser(parser, _('projects'))
return parser return parser
@ -239,23 +252,28 @@ class ListProject(command.Lister):
domain_id = None domain_id = None
if parsed_args.domain: if parsed_args.domain:
domain_id = common.find_domain(identity_client, domain_id = common.find_domain(
parsed_args.domain).id identity_client, parsed_args.domain
).id
kwargs['domain'] = domain_id kwargs['domain'] = domain_id
if parsed_args.parent: if parsed_args.parent:
parent_id = common.find_project(identity_client, parent_id = common.find_project(
parsed_args.parent).id identity_client, parsed_args.parent
).id
kwargs['parent'] = parent_id kwargs['parent'] = parent_id
if parsed_args.user: if parsed_args.user:
if parsed_args.domain: if parsed_args.domain:
user_id = utils.find_resource(identity_client.users, user_id = utils.find_resource(
identity_client.users,
parsed_args.user, parsed_args.user,
domain_id=domain_id).id domain_id=domain_id,
).id
else: else:
user_id = utils.find_resource(identity_client.users, user_id = utils.find_resource(
parsed_args.user).id identity_client.users, parsed_args.user
).id
kwargs['user'] = user_id kwargs['user'] = user_id
@ -272,19 +290,24 @@ class ListProject(command.Lister):
# wanting their own project list. # wanting their own project list.
if not kwargs: if not kwargs:
user = self.app.client_manager.auth_ref.user_id user = self.app.client_manager.auth_ref.user_id
data = identity_client.projects.list( data = identity_client.projects.list(user=user)
user=user)
else: else:
raise raise
if parsed_args.sort: if parsed_args.sort:
data = utils.sort_items(data, parsed_args.sort) data = utils.sort_items(data, parsed_args.sort)
return (columns, return (
(utils.get_item_properties( columns,
s, columns, (
utils.get_item_properties(
s,
columns,
formatters={}, formatters={},
) for s in data)) )
for s in data
),
)
class SetProject(command.Command): class SetProject(command.Command):
@ -327,8 +350,10 @@ class SetProject(command.Command):
'--property', '--property',
metavar='<key=value>', metavar='<key=value>',
action=parseractions.KeyValueAction, action=parseractions.KeyValueAction,
help=_('Set a property on <project> ' help=_(
'(repeat option to set multiple properties)'), 'Set a property on <project> '
'(repeat option to set multiple properties)'
),
) )
common.add_resource_option_to_parser(parser) common.add_resource_option_to_parser(parser)
tag.add_tag_option_to_parser_for_set(parser, _('project')) tag.add_tag_option_to_parser_for_set(parser, _('project'))
@ -337,9 +362,9 @@ class SetProject(command.Command):
def take_action(self, parsed_args): def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity identity_client = self.app.client_manager.identity
project = common.find_project(identity_client, project = common.find_project(
parsed_args.project, identity_client, parsed_args.project, parsed_args.domain
parsed_args.domain) )
kwargs = {} kwargs = {}
if parsed_args.name: if parsed_args.name:
@ -392,20 +417,19 @@ class ShowProject(command.ShowOne):
def take_action(self, parsed_args): def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity identity_client = self.app.client_manager.identity
project_str = common._get_token_resource(identity_client, 'project', project_str = common._get_token_resource(
parsed_args.project, identity_client, 'project', parsed_args.project, parsed_args.domain
parsed_args.domain) )
if parsed_args.domain: if parsed_args.domain:
domain = common.find_domain(identity_client, parsed_args.domain) domain = common.find_domain(identity_client, parsed_args.domain)
project = utils.find_resource( project = utils.find_resource(
identity_client.projects, identity_client.projects, project_str, domain_id=domain.id
project_str, )
domain_id=domain.id)
else: else:
project = utils.find_resource( project = utils.find_resource(
identity_client.projects, identity_client.projects, project_str
project_str) )
if parsed_args.parents or parsed_args.children: if parsed_args.parents or parsed_args.children:
# NOTE(RuiChen): utils.find_resource() can't pass kwargs, # NOTE(RuiChen): utils.find_resource() can't pass kwargs,
@ -414,7 +438,8 @@ class ShowProject(command.ShowOne):
project = identity_client.projects.get( project = identity_client.projects.get(
project.id, project.id,
parents_as_ids=parsed_args.parents, parents_as_ids=parsed_args.parents,
subtree_as_ids=parsed_args.children) subtree_as_ids=parsed_args.children,
)
project._info.pop('links') project._info.pop('links')
return zip(*sorted(project._info.items())) return zip(*sorted(project._info.items()))

View File

@ -85,13 +85,20 @@ class DeleteRegion(command.Command):
identity_client.regions.delete(i) identity_client.regions.delete(i)
except Exception as e: except Exception as e:
result += 1 result += 1
LOG.error(_("Failed to delete region with " LOG.error(
"ID '%(region)s': %(e)s"), {'region': i, 'e': e}) _(
"Failed to delete region with "
"ID '%(region)s': %(e)s"
),
{'region': i, 'e': e},
)
if result > 0: if result > 0:
total = len(parsed_args.region) total = len(parsed_args.region)
msg = (_("%(result)s of %(total)s regions failed " msg = _("%(result)s of %(total)s regions failed " "to delete.") % {
"to delete.") % {'result': result, 'total': total}) 'result': result,
'total': total,
}
raise exceptions.CommandError(msg) raise exceptions.CommandError(msg)
@ -118,11 +125,17 @@ class ListRegion(command.Lister):
columns = ('ID', 'Parent Region Id', 'Description') columns = ('ID', 'Parent Region Id', 'Description')
data = identity_client.regions.list(**kwargs) data = identity_client.regions.list(**kwargs)
return (columns_headers, return (
(utils.get_item_properties( columns_headers,
s, columns, (
utils.get_item_properties(
s,
columns,
formatters={}, formatters={},
) for s in data)) )
for s in data
),
)
class SetRegion(command.Command): class SetRegion(command.Command):
@ -174,8 +187,9 @@ class ShowRegion(command.ShowOne):
def take_action(self, parsed_args): def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity identity_client = self.app.client_manager.identity
region = utils.find_resource(identity_client.regions, region = utils.find_resource(
parsed_args.region) identity_client.regions, parsed_args.region
)
region._info['region'] = region._info.pop('id') region._info['region'] = region._info.pop('id')
region._info['parent_region'] = region._info.pop('parent_region_id') region._info['parent_region'] = region._info.pop('parent_region_id')

View File

@ -87,7 +87,7 @@ class CreateRegisteredLimit(command.ShowOne):
parsed_args.resource_name, parsed_args.resource_name,
parsed_args.default_limit, parsed_args.default_limit,
description=parsed_args.description, description=parsed_args.description,
region=region region=region,
) )
registered_limit._info.pop('links', None) registered_limit._info.pop('links', None)
@ -117,15 +117,22 @@ class DeleteRegisteredLimit(command.Command):
except Exception as e: except Exception as e:
errors += 1 errors += 1
from pprint import pprint from pprint import pprint
pprint(type(e)) pprint(type(e))
LOG.error(_("Failed to delete registered limit with ID " LOG.error(
"'%(id)s': %(e)s"), _(
{'id': registered_limit_id, 'e': e}) "Failed to delete registered limit with ID "
"'%(id)s': %(e)s"
),
{'id': registered_limit_id, 'e': e},
)
if errors > 0: if errors > 0:
total = len(parsed_args.registered_limit_id) total = len(parsed_args.registered_limit_id)
msg = (_("%(errors)s of %(total)s registered limits failed to " msg = _(
"delete.") % {'errors': errors, 'total': total}) "%(errors)s of %(total)s registered limits failed to "
"delete."
) % {'errors': errors, 'total': total}
raise exceptions.CommandError(msg) raise exceptions.CommandError(msg)
@ -179,12 +186,16 @@ class ListRegisteredLimit(command.Lister):
registered_limits = identity_client.registered_limits.list( registered_limits = identity_client.registered_limits.list(
service=service, service=service,
resource_name=parsed_args.resource_name, resource_name=parsed_args.resource_name,
region=region region=region,
) )
columns = ( columns = (
'ID', 'Service ID', 'Resource Name', 'Default Limit', 'ID',
'Description', 'Region ID' 'Service ID',
'Resource Name',
'Default Limit',
'Description',
'Region ID',
) )
return ( return (
columns, columns,
@ -205,18 +216,22 @@ class SetRegisteredLimit(command.ShowOne):
parser.add_argument( parser.add_argument(
'--service', '--service',
metavar='<service>', metavar='<service>',
help=_('Service to be updated responsible for the resource to ' help=_(
'Service to be updated responsible for the resource to '
'limit. Either --service, --resource-name or --region must ' 'limit. Either --service, --resource-name or --region must '
'be different than existing value otherwise it will be ' 'be different than existing value otherwise it will be '
'duplicate entry') 'duplicate entry'
),
) )
parser.add_argument( parser.add_argument(
'--resource-name', '--resource-name',
metavar='<resource-name>', metavar='<resource-name>',
help=_('Resource to be updated responsible for the resource to ' help=_(
'Resource to be updated responsible for the resource to '
'limit. Either --service, --resource-name or --region must ' 'limit. Either --service, --resource-name or --region must '
'be different than existing value otherwise it will be ' 'be different than existing value otherwise it will be '
'duplicate entry'), 'duplicate entry'
),
) )
parser.add_argument( parser.add_argument(
'--default-limit', '--default-limit',
@ -232,10 +247,12 @@ class SetRegisteredLimit(command.ShowOne):
parser.add_argument( parser.add_argument(
'--region', '--region',
metavar='<region>', metavar='<region>',
help=_('Region for the registered limit to affect. Either ' help=_(
'Region for the registered limit to affect. Either '
'--service, --resource-name or --region must be ' '--service, --resource-name or --region must be '
'different than existing value otherwise it will be ' 'different than existing value otherwise it will be '
'duplicate entry'), 'duplicate entry'
),
) )
return parser return parser
@ -270,7 +287,7 @@ class SetRegisteredLimit(command.ShowOne):
resource_name=parsed_args.resource_name, resource_name=parsed_args.resource_name,
default_limit=parsed_args.default_limit, default_limit=parsed_args.default_limit,
description=parsed_args.description, description=parsed_args.description,
region=region region=region,
) )
registered_limit._info.pop('links', None) registered_limit._info.pop('links', None)

View File

@ -63,16 +63,15 @@ def _add_identity_and_resource_options_to_parser(parser):
common.add_inherited_option_to_parser(parser) common.add_inherited_option_to_parser(parser)
def _process_identity_and_resource_options(parsed_args, def _process_identity_and_resource_options(
identity_client_manager, parsed_args, identity_client_manager, validate_actor_existence=True
validate_actor_existence=True): ):
def _find_user(): def _find_user():
try: try:
return common.find_user( return common.find_user(
identity_client_manager, identity_client_manager,
parsed_args.user, parsed_args.user,
parsed_args.user_domain parsed_args.user_domain,
).id ).id
except exceptions.CommandError: except exceptions.CommandError:
if not validate_actor_existence: if not validate_actor_existence:
@ -84,7 +83,7 @@ def _process_identity_and_resource_options(parsed_args,
return common.find_group( return common.find_group(
identity_client_manager, identity_client_manager,
parsed_args.group, parsed_args.group,
parsed_args.group_domain parsed_args.group_domain,
).id ).id
except exceptions.CommandError: except exceptions.CommandError:
if not validate_actor_existence: if not validate_actor_existence:
@ -129,8 +128,10 @@ def _process_identity_and_resource_options(parsed_args,
class AddRole(command.Command): class AddRole(command.Command):
_description = _("Adds a role assignment to a user or group on the " _description = _(
"system, a domain, or a project") "Adds a role assignment to a user or group on the "
"system, a domain, or a project"
)
def get_parser(self, prog_name): def get_parser(self, prog_name):
parser = super(AddRole, self).get_parser(prog_name) parser = super(AddRole, self).get_parser(prog_name)
@ -146,24 +147,30 @@ class AddRole(command.Command):
def take_action(self, parsed_args): def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity identity_client = self.app.client_manager.identity
if (not parsed_args.user and not parsed_args.domain and if (
not parsed_args.group and not parsed_args.project): not parsed_args.user
msg = _("Role not added, incorrect set of arguments " and not parsed_args.domain
"provided. See openstack --help for more details") and not parsed_args.group
and not parsed_args.project
):
msg = _(
"Role not added, incorrect set of arguments "
"provided. See openstack --help for more details"
)
raise exceptions.CommandError(msg) raise exceptions.CommandError(msg)
domain_id = None domain_id = None
if parsed_args.role_domain: if parsed_args.role_domain:
domain_id = common.find_domain(identity_client, domain_id = common.find_domain(
parsed_args.role_domain).id identity_client, parsed_args.role_domain
).id
role = utils.find_resource( role = utils.find_resource(
identity_client.roles, identity_client.roles, parsed_args.role, domain_id=domain_id
parsed_args.role,
domain_id=domain_id
) )
kwargs = _process_identity_and_resource_options( kwargs = _process_identity_and_resource_options(
parsed_args, self.app.client_manager.identity) parsed_args, self.app.client_manager.identity
)
identity_client.roles.grant(role.id, **kwargs) identity_client.roles.grant(role.id, **kwargs)
@ -201,21 +208,27 @@ class CreateRole(command.ShowOne):
domain_id = None domain_id = None
if parsed_args.domain: if parsed_args.domain:
domain_id = common.find_domain(identity_client, domain_id = common.find_domain(
parsed_args.domain).id identity_client, parsed_args.domain
).id
options = common.get_immutable_options(parsed_args) options = common.get_immutable_options(parsed_args)
try: try:
role = identity_client.roles.create( role = identity_client.roles.create(
name=parsed_args.name, domain=domain_id, name=parsed_args.name,
description=parsed_args.description, options=options) domain=domain_id,
description=parsed_args.description,
options=options,
)
except ks_exc.Conflict: except ks_exc.Conflict:
if parsed_args.or_show: if parsed_args.or_show:
role = utils.find_resource(identity_client.roles, role = utils.find_resource(
identity_client.roles,
parsed_args.name, parsed_args.name,
domain_id=domain_id) domain_id=domain_id,
)
LOG.info(_('Returning existing role %s'), role.name) LOG.info(_('Returning existing role %s'), role.name)
else: else:
raise raise
@ -247,27 +260,32 @@ class DeleteRole(command.Command):
domain_id = None domain_id = None
if parsed_args.domain: if parsed_args.domain:
domain_id = common.find_domain(identity_client, domain_id = common.find_domain(
parsed_args.domain).id identity_client, parsed_args.domain
).id
errors = 0 errors = 0
for role in parsed_args.roles: for role in parsed_args.roles:
try: try:
role_obj = utils.find_resource( role_obj = utils.find_resource(
identity_client.roles, identity_client.roles, role, domain_id=domain_id
role,
domain_id=domain_id
) )
identity_client.roles.delete(role_obj.id) identity_client.roles.delete(role_obj.id)
except Exception as e: except Exception as e:
errors += 1 errors += 1
LOG.error(_("Failed to delete role with " LOG.error(
"name or ID '%(role)s': %(e)s"), _(
{'role': role, 'e': e}) "Failed to delete role with "
"name or ID '%(role)s': %(e)s"
),
{'role': role, 'e': e},
)
if errors > 0: if errors > 0:
total = len(parsed_args.roles) total = len(parsed_args.roles)
msg = (_("%(errors)s of %(total)s roles failed " msg = _("%(errors)s of %(total)s roles failed " "to delete.") % {
"to delete.") % {'errors': errors, 'total': total}) 'errors': errors,
'total': total,
}
raise exceptions.CommandError(msg) raise exceptions.CommandError(msg)
@ -299,16 +317,23 @@ class ListRole(command.Lister):
columns = ('ID', 'Name') columns = ('ID', 'Name')
data = identity_client.roles.list() data = identity_client.roles.list()
return (columns, return (
(utils.get_item_properties( columns,
s, columns, (
utils.get_item_properties(
s,
columns,
formatters={}, formatters={},
) for s in data)) )
for s in data
),
)
class RemoveRole(command.Command): class RemoveRole(command.Command):
_description = _("Removes a role assignment from system/domain/project : " _description = _(
"user/group") "Removes a role assignment from system/domain/project : " "user/group"
)
def get_parser(self, prog_name): def get_parser(self, prog_name):
parser = super(RemoveRole, self).get_parser(prog_name) parser = super(RemoveRole, self).get_parser(prog_name)
@ -325,25 +350,31 @@ class RemoveRole(command.Command):
def take_action(self, parsed_args): def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity identity_client = self.app.client_manager.identity
if (not parsed_args.user and not parsed_args.domain and if (
not parsed_args.group and not parsed_args.project): not parsed_args.user
msg = _("Incorrect set of arguments provided. " and not parsed_args.domain
"See openstack --help for more details") and not parsed_args.group
and not parsed_args.project
):
msg = _(
"Incorrect set of arguments provided. "
"See openstack --help for more details"
)
raise exceptions.CommandError(msg) raise exceptions.CommandError(msg)
domain_id = None domain_id = None
if parsed_args.role_domain: if parsed_args.role_domain:
domain_id = common.find_domain(identity_client, domain_id = common.find_domain(
parsed_args.role_domain).id identity_client, parsed_args.role_domain
).id
role = utils.find_resource( role = utils.find_resource(
identity_client.roles, identity_client.roles, parsed_args.role, domain_id=domain_id
parsed_args.role,
domain_id=domain_id
) )
kwargs = _process_identity_and_resource_options( kwargs = _process_identity_and_resource_options(
parsed_args, self.app.client_manager.identity, parsed_args,
validate_actor_existence=False self.app.client_manager.identity,
validate_actor_existence=False,
) )
identity_client.roles.revoke(role.id, **kwargs) identity_client.roles.revoke(role.id, **kwargs)
@ -381,17 +412,21 @@ class SetRole(command.Command):
domain_id = None domain_id = None
if parsed_args.domain: if parsed_args.domain:
domain_id = common.find_domain(identity_client, domain_id = common.find_domain(
parsed_args.domain).id identity_client, parsed_args.domain
).id
options = common.get_immutable_options(parsed_args) options = common.get_immutable_options(parsed_args)
role = utils.find_resource(identity_client.roles, role = utils.find_resource(
parsed_args.role, identity_client.roles, parsed_args.role, domain_id=domain_id
domain_id=domain_id) )
identity_client.roles.update(role.id, name=parsed_args.name, identity_client.roles.update(
role.id,
name=parsed_args.name,
description=parsed_args.description, description=parsed_args.description,
options=options) options=options,
)
class ShowRole(command.ShowOne): class ShowRole(command.ShowOne):
@ -416,12 +451,13 @@ class ShowRole(command.ShowOne):
domain_id = None domain_id = None
if parsed_args.domain: if parsed_args.domain:
domain_id = common.find_domain(identity_client, domain_id = common.find_domain(
parsed_args.domain).id identity_client, parsed_args.domain
).id
role = utils.find_resource(identity_client.roles, role = utils.find_resource(
parsed_args.role, identity_client.roles, parsed_args.role, domain_id=domain_id
domain_id=domain_id) )
role._info.pop('links') role._info.pop('links')
return zip(*sorted(role._info.items())) return zip(*sorted(role._info.items()))

View File

@ -89,9 +89,15 @@ class ListRoleAssignment(command.Lister):
return parser return parser
def _as_tuple(self, assignment): def _as_tuple(self, assignment):
return (assignment.role, assignment.user, assignment.group, return (
assignment.project, assignment.domain, assignment.system, assignment.role,
assignment.inherited) assignment.user,
assignment.group,
assignment.project,
assignment.domain,
assignment.system,
assignment.inherited,
)
def take_action(self, parsed_args): def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity identity_client = self.app.client_manager.identity
@ -100,13 +106,14 @@ class ListRoleAssignment(command.Lister):
role = None role = None
role_domain_id = None role_domain_id = None
if parsed_args.role_domain: if parsed_args.role_domain:
role_domain_id = common.find_domain(identity_client, role_domain_id = common.find_domain(
parsed_args.role_domain).id identity_client, parsed_args.role_domain
).id
if parsed_args.role: if parsed_args.role:
role = utils.find_resource( role = utils.find_resource(
identity_client.roles, identity_client.roles,
parsed_args.role, parsed_args.role,
domain_id=role_domain_id domain_id=role_domain_id,
) )
user = None user = None
@ -118,10 +125,7 @@ class ListRoleAssignment(command.Lister):
) )
elif parsed_args.authuser: elif parsed_args.authuser:
if auth_ref: if auth_ref:
user = common.find_user( user = common.find_user(identity_client, auth_ref.user_id)
identity_client,
auth_ref.user_id
)
system = None system = None
if parsed_args.system: if parsed_args.system:
@ -138,15 +142,15 @@ class ListRoleAssignment(command.Lister):
if parsed_args.project: if parsed_args.project:
project = common.find_project( project = common.find_project(
identity_client, identity_client,
common._get_token_resource(identity_client, 'project', common._get_token_resource(
parsed_args.project), identity_client, 'project', parsed_args.project
),
parsed_args.project_domain, parsed_args.project_domain,
) )
elif parsed_args.authproject: elif parsed_args.authproject:
if auth_ref: if auth_ref:
project = common.find_project( project = common.find_project(
identity_client, identity_client, auth_ref.project_id
auth_ref.project_id
) )
group = None group = None
@ -160,7 +164,13 @@ class ListRoleAssignment(command.Lister):
include_names = True if parsed_args.names else False include_names = True if parsed_args.names else False
effective = True if parsed_args.effective else False effective = True if parsed_args.effective else False
columns = ( columns = (
'Role', 'User', 'Group', 'Project', 'Domain', 'System', 'Inherited' 'Role',
'User',
'Group',
'Project',
'Domain',
'System',
'Inherited',
) )
inherited_to = 'projects' if parsed_args.inherited else None inherited_to = 'projects' if parsed_args.inherited else None
@ -173,7 +183,8 @@ class ListRoleAssignment(command.Lister):
role=role, role=role,
effective=effective, effective=effective,
os_inherit_extension_inherited_to=inherited_to, os_inherit_extension_inherited_to=inherited_to,
include_names=include_names) include_names=include_names,
)
data_parsed = [] data_parsed = []
for assignment in data: for assignment in data:
@ -181,8 +192,12 @@ class ListRoleAssignment(command.Lister):
scope = assignment.scope scope = assignment.scope
if 'project' in scope: if 'project' in scope:
if include_names: if include_names:
prj = '@'.join([scope['project']['name'], prj = '@'.join(
scope['project']['domain']['name']]) [
scope['project']['name'],
scope['project']['domain']['name'],
]
)
setattr(assignment, 'project', prj) setattr(assignment, 'project', prj)
else: else:
setattr(assignment, 'project', scope['project']['id']) setattr(assignment, 'project', scope['project']['id'])
@ -215,16 +230,24 @@ class ListRoleAssignment(command.Lister):
if hasattr(assignment, 'user'): if hasattr(assignment, 'user'):
if include_names: if include_names:
usr = '@'.join([assignment.user['name'], usr = '@'.join(
assignment.user['domain']['name']]) [
assignment.user['name'],
assignment.user['domain']['name'],
]
)
setattr(assignment, 'user', usr) setattr(assignment, 'user', usr)
else: else:
setattr(assignment, 'user', assignment.user['id']) setattr(assignment, 'user', assignment.user['id'])
assignment.group = '' assignment.group = ''
elif hasattr(assignment, 'group'): elif hasattr(assignment, 'group'):
if include_names: if include_names:
grp = '@'.join([assignment.group['name'], grp = '@'.join(
assignment.group['domain']['name']]) [
assignment.group['name'],
assignment.group['domain']['name'],
]
)
setattr(assignment, 'group', grp) setattr(assignment, 'group', grp)
else: else:
setattr(assignment, 'group', assignment.group['id']) setattr(assignment, 'group', assignment.group['id'])

View File

@ -101,14 +101,19 @@ class DeleteService(command.Command):
identity_client.services.delete(service.id) identity_client.services.delete(service.id)
except Exception as e: except Exception as e:
result += 1 result += 1
LOG.error(_("Failed to delete consumer with type, " LOG.error(
"name or ID '%(service)s': %(e)s"), _(
{'service': i, 'e': e}) "Failed to delete consumer with type, "
"name or ID '%(service)s': %(e)s"
),
{'service': i, 'e': e},
)
if result > 0: if result > 0:
total = len(parsed_args.service) total = len(parsed_args.service)
msg = (_("%(result)s of %(total)s services failed " msg = _(
"to delete.") % {'result': result, 'total': total}) "%(result)s of %(total)s services failed " "to delete."
) % {'result': result, 'total': total}
raise exceptions.CommandError(msg) raise exceptions.CommandError(msg)
@ -126,7 +131,6 @@ class ListService(command.Lister):
return parser return parser
def take_action(self, parsed_args): def take_action(self, parsed_args):
if parsed_args.long: if parsed_args.long:
columns = ('ID', 'Name', 'Type', 'Description', 'Enabled') columns = ('ID', 'Name', 'Type', 'Description', 'Enabled')
else: else:
@ -179,8 +183,7 @@ class SetService(command.Command):
def take_action(self, parsed_args): def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity identity_client = self.app.client_manager.identity
service = common.find_service(identity_client, service = common.find_service(identity_client, parsed_args.service)
parsed_args.service)
kwargs = {} kwargs = {}
if parsed_args.type: if parsed_args.type:
kwargs['type'] = parsed_args.type kwargs['type'] = parsed_args.type
@ -193,10 +196,7 @@ class SetService(command.Command):
if parsed_args.disable: if parsed_args.disable:
kwargs['enabled'] = False kwargs['enabled'] = False
identity_client.services.update( identity_client.services.update(service.id, **kwargs)
service.id,
**kwargs
)
class ShowService(command.ShowOne): class ShowService(command.ShowOne):

View File

@ -39,8 +39,10 @@ class CreateServiceProvider(command.ShowOne):
'--auth-url', '--auth-url',
metavar='<auth-url>', metavar='<auth-url>',
required=True, required=True,
help=_('Authentication URL of remote federated service provider ' help=_(
'(required)'), 'Authentication URL of remote federated service provider '
'(required)'
),
) )
parser.add_argument( parser.add_argument(
'--description', '--description',
@ -51,8 +53,10 @@ class CreateServiceProvider(command.ShowOne):
'--service-provider-url', '--service-provider-url',
metavar='<sp-url>', metavar='<sp-url>',
required=True, required=True,
help=_('A service URL where SAML assertions are being sent ' help=_(
'(required)'), 'A service URL where SAML assertions are being sent '
'(required)'
),
) )
enable_service_provider = parser.add_mutually_exclusive_group() enable_service_provider = parser.add_mutually_exclusive_group()
@ -79,7 +83,8 @@ class CreateServiceProvider(command.ShowOne):
auth_url=parsed_args.auth_url, auth_url=parsed_args.auth_url,
description=parsed_args.description, description=parsed_args.description,
enabled=parsed_args.enabled, enabled=parsed_args.enabled,
sp_url=parsed_args.service_provider_url) sp_url=parsed_args.service_provider_url,
)
sp._info.pop('links', None) sp._info.pop('links', None)
return zip(*sorted(sp._info.items())) return zip(*sorted(sp._info.items()))
@ -106,14 +111,20 @@ class DeleteServiceProvider(command.Command):
service_client.federation.service_providers.delete(i) service_client.federation.service_providers.delete(i)
except Exception as e: except Exception as e:
result += 1 result += 1
LOG.error(_("Failed to delete service provider with " LOG.error(
"name or ID '%(provider)s': %(e)s"), _(
{'provider': i, 'e': e}) "Failed to delete service provider with "
"name or ID '%(provider)s': %(e)s"
),
{'provider': i, 'e': e},
)
if result > 0: if result > 0:
total = len(parsed_args.service_provider) total = len(parsed_args.service_provider)
msg = (_("%(result)s of %(total)s service providers failed" msg = _(
" to delete.") % {'result': result, 'total': total}) "%(result)s of %(total)s service providers failed"
" to delete."
) % {'result': result, 'total': total}
raise exceptions.CommandError(msg) raise exceptions.CommandError(msg)
@ -125,11 +136,17 @@ class ListServiceProvider(command.Lister):
data = service_client.federation.service_providers.list() data = service_client.federation.service_providers.list()
column_headers = ('ID', 'Enabled', 'Description', 'Auth URL') column_headers = ('ID', 'Enabled', 'Description', 'Auth URL')
return (column_headers, return (
(utils.get_item_properties( column_headers,
s, column_headers, (
utils.get_item_properties(
s,
column_headers,
formatters={}, formatters={},
) for s in data)) )
for s in data
),
)
class SetServiceProvider(command.Command): class SetServiceProvider(command.Command):
@ -145,8 +162,10 @@ class SetServiceProvider(command.Command):
parser.add_argument( parser.add_argument(
'--auth-url', '--auth-url',
metavar='<auth-url>', metavar='<auth-url>',
help=_('New Authentication URL of remote ' help=_(
'federated service provider'), 'New Authentication URL of remote '
'federated service provider'
),
) )
parser.add_argument( parser.add_argument(
@ -207,7 +226,8 @@ class ShowServiceProvider(command.ShowOne):
service_provider = utils.find_resource( service_provider = utils.find_resource(
service_client.federation.service_providers, service_client.federation.service_providers,
parsed_args.service_provider, parsed_args.service_provider,
id=parsed_args.service_provider) id=parsed_args.service_provider,
)
service_provider._info.pop('links', None) service_provider._info.pop('links', None)
return zip(*sorted(service_provider._info.items())) return zip(*sorted(service_provider._info.items()))

View File

@ -16,7 +16,6 @@ from openstackclient.i18n import _
class _CommaListAction(argparse.Action): class _CommaListAction(argparse.Action):
def __call__(self, parser, namespace, values, option_string=None): def __call__(self, parser, namespace, values, option_string=None):
setattr(namespace, self.dest, values.split(',')) setattr(namespace, self.dest, values.split(','))
@ -26,29 +25,41 @@ def add_tag_filtering_option_to_parser(parser, collection_name):
'--tags', '--tags',
metavar='<tag>[,<tag>,...]', metavar='<tag>[,<tag>,...]',
action=_CommaListAction, action=_CommaListAction,
help=_('List %s which have all given tag(s) ' help=_(
'(Comma-separated list of tags)') % collection_name 'List %s which have all given tag(s) '
'(Comma-separated list of tags)'
)
% collection_name,
) )
parser.add_argument( parser.add_argument(
'--tags-any', '--tags-any',
metavar='<tag>[,<tag>,...]', metavar='<tag>[,<tag>,...]',
action=_CommaListAction, action=_CommaListAction,
help=_('List %s which have any given tag(s) ' help=_(
'(Comma-separated list of tags)') % collection_name 'List %s which have any given tag(s) '
'(Comma-separated list of tags)'
)
% collection_name,
) )
parser.add_argument( parser.add_argument(
'--not-tags', '--not-tags',
metavar='<tag>[,<tag>,...]', metavar='<tag>[,<tag>,...]',
action=_CommaListAction, action=_CommaListAction,
help=_('Exclude %s which have all given tag(s) ' help=_(
'(Comma-separated list of tags)') % collection_name 'Exclude %s which have all given tag(s) '
'(Comma-separated list of tags)'
)
% collection_name,
) )
parser.add_argument( parser.add_argument(
'--not-tags-any', '--not-tags-any',
metavar='<tag>[,<tag>,...]', metavar='<tag>[,<tag>,...]',
action=_CommaListAction, action=_CommaListAction,
help=_('Exclude %s which have any given tag(s) ' help=_(
'(Comma-separated list of tags)') % collection_name 'Exclude %s which have any given tag(s) '
'(Comma-separated list of tags)'
)
% collection_name,
) )
@ -71,8 +82,10 @@ def add_tag_option_to_parser_for_create(parser, resource_name):
dest='tags', dest='tags',
metavar='<tag>', metavar='<tag>',
default=[], default=[],
help=_('Tag to be added to the %s ' help=_(
'(repeat option to set multiple tags)') % resource_name 'Tag to be added to the %s ' '(repeat option to set multiple tags)'
)
% resource_name,
) )
@ -83,22 +96,30 @@ def add_tag_option_to_parser_for_set(parser, resource_name):
dest='tags', dest='tags',
metavar='<tag>', metavar='<tag>',
default=[], default=[],
help=_('Tag to be added to the %s ' help=_(
'(repeat option to set multiple tags)') % resource_name 'Tag to be added to the %s ' '(repeat option to set multiple tags)'
)
% resource_name,
) )
parser.add_argument( parser.add_argument(
'--clear-tags', '--clear-tags',
action='store_true', action='store_true',
help=_('Clear tags associated with the %s. Specify ' help=_(
'Clear tags associated with the %s. Specify '
'both --tag and --clear-tags to overwrite ' 'both --tag and --clear-tags to overwrite '
'current tags') % resource_name 'current tags'
)
% resource_name,
) )
parser.add_argument( parser.add_argument(
'--remove-tag', '--remove-tag',
metavar='<tag>', metavar='<tag>',
default=[], default=[],
help=_('Tag to be deleted from the %s ' help=_(
'(repeat option to delete multiple tags)') % resource_name 'Tag to be deleted from the %s '
'(repeat option to delete multiple tags)'
)
% resource_name,
) )
@ -112,5 +133,4 @@ def update_tags_in_args(parsed_args, obj, args):
args['tags'] = list(set(obj.tags)) args['tags'] = list(set(obj.tags))
return return
if parsed_args.tags: if parsed_args.tags:
args['tags'] = list(set(obj.tags).union( args['tags'] = list(set(obj.tags).union(set(parsed_args.tags)))
set(parsed_args.tags)))

View File

@ -40,8 +40,10 @@ class AuthorizeRequestToken(command.ShowOne):
action='append', action='append',
default=[], default=[],
required=True, required=True,
help=_('Roles to authorize (name or ID) ' help=_(
'(repeat option to set multiple values) (required)'), 'Roles to authorize (name or ID) '
'(repeat option to set multiple values) (required)'
),
) )
return parser return parser
@ -58,8 +60,8 @@ class AuthorizeRequestToken(command.ShowOne):
roles.append(role_id) roles.append(role_id)
verifier_pin = identity_client.oauth1.request_tokens.authorize( verifier_pin = identity_client.oauth1.request_tokens.authorize(
parsed_args.request_key, parsed_args.request_key, roles
roles) )
return zip(*sorted(verifier_pin._info.items())) return zip(*sorted(verifier_pin._info.items()))
@ -73,40 +75,43 @@ class CreateAccessToken(command.ShowOne):
'--consumer-key', '--consumer-key',
metavar='<consumer-key>', metavar='<consumer-key>',
help=_('Consumer key (required)'), help=_('Consumer key (required)'),
required=True required=True,
) )
parser.add_argument( parser.add_argument(
'--consumer-secret', '--consumer-secret',
metavar='<consumer-secret>', metavar='<consumer-secret>',
help=_('Consumer secret (required)'), help=_('Consumer secret (required)'),
required=True required=True,
) )
parser.add_argument( parser.add_argument(
'--request-key', '--request-key',
metavar='<request-key>', metavar='<request-key>',
help=_('Request token to exchange for access token (required)'), help=_('Request token to exchange for access token (required)'),
required=True required=True,
) )
parser.add_argument( parser.add_argument(
'--request-secret', '--request-secret',
metavar='<request-secret>', metavar='<request-secret>',
help=_('Secret associated with <request-key> (required)'), help=_('Secret associated with <request-key> (required)'),
required=True required=True,
) )
parser.add_argument( parser.add_argument(
'--verifier', '--verifier',
metavar='<verifier>', metavar='<verifier>',
help=_('Verifier associated with <request-key> (required)'), help=_('Verifier associated with <request-key> (required)'),
required=True required=True,
) )
return parser return parser
def take_action(self, parsed_args): def take_action(self, parsed_args):
token_client = self.app.client_manager.identity.oauth1.access_tokens token_client = self.app.client_manager.identity.oauth1.access_tokens
access_token = token_client.create( access_token = token_client.create(
parsed_args.consumer_key, parsed_args.consumer_secret, parsed_args.consumer_key,
parsed_args.request_key, parsed_args.request_secret, parsed_args.consumer_secret,
parsed_args.verifier) parsed_args.request_key,
parsed_args.request_secret,
parsed_args.verifier,
)
return zip(*sorted(access_token._info.items())) return zip(*sorted(access_token._info.items()))
@ -119,20 +124,22 @@ class CreateRequestToken(command.ShowOne):
'--consumer-key', '--consumer-key',
metavar='<consumer-key>', metavar='<consumer-key>',
help=_('Consumer key (required)'), help=_('Consumer key (required)'),
required=True required=True,
) )
parser.add_argument( parser.add_argument(
'--consumer-secret', '--consumer-secret',
metavar='<consumer-secret>', metavar='<consumer-secret>',
help=_('Consumer secret (required)'), help=_('Consumer secret (required)'),
required=True required=True,
) )
parser.add_argument( parser.add_argument(
'--project', '--project',
metavar='<project>', metavar='<project>',
help=_('Project that consumer wants to access (name or ID)' help=_(
' (required)'), 'Project that consumer wants to access (name or ID)'
required=True ' (required)'
),
required=True,
) )
parser.add_argument( parser.add_argument(
'--domain', '--domain',
@ -146,19 +153,21 @@ class CreateRequestToken(command.ShowOne):
if parsed_args.domain: if parsed_args.domain:
domain = common.find_domain(identity_client, parsed_args.domain) domain = common.find_domain(identity_client, parsed_args.domain)
project = utils.find_resource(identity_client.projects, project = utils.find_resource(
identity_client.projects,
parsed_args.project, parsed_args.project,
domain_id=domain.id) domain_id=domain.id,
)
else: else:
project = utils.find_resource(identity_client.projects, project = utils.find_resource(
parsed_args.project) identity_client.projects, parsed_args.project
)
token_client = identity_client.oauth1.request_tokens token_client = identity_client.oauth1.request_tokens
request_token = token_client.create( request_token = token_client.create(
parsed_args.consumer_key, parsed_args.consumer_key, parsed_args.consumer_secret, project.id
parsed_args.consumer_secret, )
project.id)
return zip(*sorted(request_token._info.items())) return zip(*sorted(request_token._info.items()))
@ -176,7 +185,8 @@ class IssueToken(command.ShowOne):
auth_ref = self.app.client_manager.auth_ref auth_ref = self.app.client_manager.auth_ref
if not auth_ref: if not auth_ref:
raise exceptions.AuthorizationFailure( raise exceptions.AuthorizationFailure(
_("Only an authorized user may issue a new token.")) _("Only an authorized user may issue a new token.")
)
data = {} data = {}
if auth_ref.auth_token: if auth_ref.auth_token:

View File

@ -54,23 +54,29 @@ class CreateTrust(command.ShowOne):
metavar='<role>', metavar='<role>',
action='append', action='append',
default=[], default=[],
help=_('Roles to authorize (name or ID) ' help=_(
'(repeat option to set multiple values, required)'), 'Roles to authorize (name or ID) '
required=True '(repeat option to set multiple values, required)'
),
required=True,
) )
parser.add_argument( parser.add_argument(
'--impersonate', '--impersonate',
dest='impersonate', dest='impersonate',
action='store_true', action='store_true',
default=False, default=False,
help=_('Tokens generated from the trust will represent <trustor>' help=_(
' (defaults to False)'), 'Tokens generated from the trust will represent <trustor>'
' (defaults to False)'
),
) )
parser.add_argument( parser.add_argument(
'--expiration', '--expiration',
metavar='<expiration>', metavar='<expiration>',
help=_('Sets an expiration date for the trust' help=_(
' (format of YYYY-mm-ddTHH:MM:SS)'), 'Sets an expiration date for the trust'
' (format of YYYY-mm-ddTHH:MM:SS)'
),
) )
common.add_project_domain_option_to_parser(parser) common.add_project_domain_option_to_parser(parser)
parser.add_argument( parser.add_argument(
@ -93,15 +99,15 @@ class CreateTrust(command.ShowOne):
# trustee, project and role are optional, but that makes the trust # trustee, project and role are optional, but that makes the trust
# pointless, and trusts are immutable, so let's enforce it at the # pointless, and trusts are immutable, so let's enforce it at the
# client level. # client level.
trustor_id = common.find_user(identity_client, trustor_id = common.find_user(
parsed_args.trustor, identity_client, parsed_args.trustor, parsed_args.trustor_domain
parsed_args.trustor_domain).id ).id
trustee_id = common.find_user(identity_client, trustee_id = common.find_user(
parsed_args.trustee, identity_client, parsed_args.trustee, parsed_args.trustee_domain
parsed_args.trustee_domain).id ).id
project_id = common.find_project(identity_client, project_id = common.find_project(
parsed_args.project, identity_client, parsed_args.project, parsed_args.project_domain
parsed_args.project_domain).id ).id
role_ids = [] role_ids = []
for role in parsed_args.role: for role in parsed_args.role:
@ -116,11 +122,13 @@ class CreateTrust(command.ShowOne):
expires_at = None expires_at = None
if parsed_args.expiration: if parsed_args.expiration:
expires_at = datetime.datetime.strptime(parsed_args.expiration, expires_at = datetime.datetime.strptime(
'%Y-%m-%dT%H:%M:%S') parsed_args.expiration, '%Y-%m-%dT%H:%M:%S'
)
trust = identity_client.trusts.create( trust = identity_client.trusts.create(
trustee_id, trustor_id, trustee_id,
trustor_id,
impersonation=parsed_args.impersonate, impersonation=parsed_args.impersonate,
project=project_id, project=project_id,
role_ids=role_ids, role_ids=role_ids,
@ -157,19 +165,24 @@ class DeleteTrust(command.Command):
errors = 0 errors = 0
for trust in parsed_args.trust: for trust in parsed_args.trust:
try: try:
trust_obj = utils.find_resource(identity_client.trusts, trust_obj = utils.find_resource(identity_client.trusts, trust)
trust)
identity_client.trusts.delete(trust_obj.id) identity_client.trusts.delete(trust_obj.id)
except Exception as e: except Exception as e:
errors += 1 errors += 1
LOG.error(_("Failed to delete trust with " LOG.error(
"name or ID '%(trust)s': %(e)s"), _(
{'trust': trust, 'e': e}) "Failed to delete trust with "
"name or ID '%(trust)s': %(e)s"
),
{'trust': trust, 'e': e},
)
if errors > 0: if errors > 0:
total = len(parsed_args.trust) total = len(parsed_args.trust)
msg = (_("%(errors)s of %(total)s trusts failed " msg = _("%(errors)s of %(total)s trusts failed " "to delete.") % {
"to delete.") % {'errors': errors, 'total': total}) 'errors': errors,
'total': total,
}
raise exceptions.CommandError(msg) raise exceptions.CommandError(msg)
@ -210,12 +223,14 @@ class ListTrust(command.Lister):
identity_client = self.app.client_manager.identity identity_client = self.app.client_manager.identity
auth_ref = self.app.client_manager.auth_ref auth_ref = self.app.client_manager.auth_ref
if parsed_args.authuser and any([ if parsed_args.authuser and any(
[
parsed_args.trustor, parsed_args.trustor,
parsed_args.trustor_domain, parsed_args.trustor_domain,
parsed_args.trustee, parsed_args.trustee,
parsed_args.trustee_domain, parsed_args.trustee_domain,
]): ]
):
msg = _("--authuser cannot be used with --trustee or --trustor") msg = _("--authuser cannot be used with --trustee or --trustor")
raise exceptions.CommandError(msg) raise exceptions.CommandError(msg)
@ -229,10 +244,7 @@ class ListTrust(command.Lister):
if parsed_args.authuser: if parsed_args.authuser:
if auth_ref: if auth_ref:
user = common.find_user( user = common.find_user(identity_client, auth_ref.user_id)
identity_client,
auth_ref.user_id
)
# We need two calls here as we want trusts with # We need two calls here as we want trusts with
# either the trustor or the trustee set to current user # either the trustor or the trustee set to current user
# using a single call would give us trusts with both # using a single call would give us trusts with both
@ -262,14 +274,26 @@ class ListTrust(command.Lister):
trustee_user=trustee, trustee_user=trustee,
) )
columns = ('ID', 'Expires At', 'Impersonation', 'Project ID', columns = (
'Trustee User ID', 'Trustor User ID') 'ID',
'Expires At',
'Impersonation',
'Project ID',
'Trustee User ID',
'Trustor User ID',
)
return (columns, return (
(utils.get_item_properties( columns,
s, columns, (
utils.get_item_properties(
s,
columns,
formatters={}, formatters={},
) for s in data)) )
for s in data
),
)
class ShowTrust(command.ShowOne): class ShowTrust(command.ShowOne):
@ -286,8 +310,7 @@ class ShowTrust(command.ShowOne):
def take_action(self, parsed_args): def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity identity_client = self.app.client_manager.identity
trust = utils.find_resource(identity_client.trusts, trust = utils.find_resource(identity_client.trusts, parsed_args.trust)
parsed_args.trust)
trust._info.pop('roles_links', None) trust._info.pop('roles_links', None)
trust._info.pop('links', None) trust._info.pop('links', None)

View File

@ -30,11 +30,17 @@ class ListAccessibleDomains(command.Lister):
columns = ('ID', 'Enabled', 'Name', 'Description') columns = ('ID', 'Enabled', 'Name', 'Description')
identity_client = self.app.client_manager.identity identity_client = self.app.client_manager.identity
data = identity_client.federation.domains.list() data = identity_client.federation.domains.list()
return (columns, return (
(utils.get_item_properties( columns,
s, columns, (
utils.get_item_properties(
s,
columns,
formatters={}, formatters={},
) for s in data)) )
for s in data
),
)
class ListAccessibleProjects(command.Lister): class ListAccessibleProjects(command.Lister):
@ -44,8 +50,14 @@ class ListAccessibleProjects(command.Lister):
columns = ('ID', 'Domain ID', 'Enabled', 'Name') columns = ('ID', 'Domain ID', 'Enabled', 'Name')
identity_client = self.app.client_manager.identity identity_client = self.app.client_manager.identity
data = identity_client.federation.projects.list() data = identity_client.federation.projects.list()
return (columns, return (
(utils.get_item_properties( columns,
s, columns, (
utils.get_item_properties(
s,
columns,
formatters={}, formatters={},
) for s in data)) )
for s in data
),
)

View File

@ -53,8 +53,9 @@ def _get_options_for_user(identity_client, parsed_args):
if parsed_args.disable_multi_factor_auth: if parsed_args.disable_multi_factor_auth:
options['multi_factor_auth_enabled'] = False options['multi_factor_auth_enabled'] = False
if parsed_args.multi_factor_auth_rule: if parsed_args.multi_factor_auth_rule:
auth_rules = [rule.split(",") for rule in auth_rules = [
parsed_args.multi_factor_auth_rule] rule.split(",") for rule in parsed_args.multi_factor_auth_rule
]
if auth_rules: if auth_rules:
options['multi_factor_auth_rules'] = auth_rules options['multi_factor_auth_rules'] = auth_rules
return options return options
@ -66,54 +67,70 @@ def _add_user_options(parser):
parser.add_argument( parser.add_argument(
'--ignore-lockout-failure-attempts', '--ignore-lockout-failure-attempts',
action="store_true", action="store_true",
help=_('Opt into ignoring the number of times a user has ' help=_(
'authenticated and locking out the user as a result'), 'Opt into ignoring the number of times a user has '
'authenticated and locking out the user as a result'
),
) )
parser.add_argument( parser.add_argument(
'--no-ignore-lockout-failure-attempts', '--no-ignore-lockout-failure-attempts',
action="store_true", action="store_true",
help=_('Opt out of ignoring the number of times a user has ' help=_(
'authenticated and locking out the user as a result'), 'Opt out of ignoring the number of times a user has '
'authenticated and locking out the user as a result'
),
) )
parser.add_argument( parser.add_argument(
'--ignore-password-expiry', '--ignore-password-expiry',
action="store_true", action="store_true",
help=_('Opt into allowing user to continue using passwords that ' help=_(
'may be expired'), 'Opt into allowing user to continue using passwords that '
'may be expired'
),
) )
parser.add_argument( parser.add_argument(
'--no-ignore-password-expiry', '--no-ignore-password-expiry',
action="store_true", action="store_true",
help=_('Opt out of allowing user to continue using passwords ' help=_(
'that may be expired'), 'Opt out of allowing user to continue using passwords '
'that may be expired'
),
) )
parser.add_argument( parser.add_argument(
'--ignore-change-password-upon-first-use', '--ignore-change-password-upon-first-use',
action="store_true", action="store_true",
help=_('Control if a user should be forced to change their password ' help=_(
'Control if a user should be forced to change their password '
'immediately after they log into keystone for the first time. ' 'immediately after they log into keystone for the first time. '
'Opt into ignoring the user to change their password during ' 'Opt into ignoring the user to change their password during '
'first time login in keystone'), 'first time login in keystone'
),
) )
parser.add_argument( parser.add_argument(
'--no-ignore-change-password-upon-first-use', '--no-ignore-change-password-upon-first-use',
action="store_true", action="store_true",
help=_('Control if a user should be forced to change their password ' help=_(
'Control if a user should be forced to change their password '
'immediately after they log into keystone for the first time. ' 'immediately after they log into keystone for the first time. '
'Opt out of ignoring the user to change their password during ' 'Opt out of ignoring the user to change their password during '
'first time login in keystone'), 'first time login in keystone'
),
) )
parser.add_argument( parser.add_argument(
'--enable-lock-password', '--enable-lock-password',
action="store_true", action="store_true",
help=_('Disables the ability for a user to change its password ' help=_(
'through self-service APIs'), 'Disables the ability for a user to change its password '
'through self-service APIs'
),
) )
parser.add_argument( parser.add_argument(
'--disable-lock-password', '--disable-lock-password',
action="store_true", action="store_true",
help=_('Enables the ability for a user to change its password ' help=_(
'through self-service APIs'), 'Enables the ability for a user to change its password '
'through self-service APIs'
),
) )
parser.add_argument( parser.add_argument(
'--enable-multi-factor-auth', '--enable-multi-factor-auth',
@ -130,11 +147,13 @@ def _add_user_options(parser):
metavar='<rule>', metavar='<rule>',
action="append", action="append",
default=[], default=[],
help=_('Set multi-factor auth rules. For example, to set a rule ' help=_(
'Set multi-factor auth rules. For example, to set a rule '
'requiring the "password" and "totp" auth methods to be ' 'requiring the "password" and "totp" auth methods to be '
'provided, use: "--multi-factor-auth-rule password,totp". ' 'provided, use: "--multi-factor-auth-rule password,totp". '
'May be provided multiple times to set different rule ' 'May be provided multiple times to set different rule '
'combinations.') 'combinations.'
),
) )
@ -205,14 +224,17 @@ class CreateUser(command.ShowOne):
project_id = None project_id = None
if parsed_args.project: if parsed_args.project:
project_id = common.find_project(identity_client, project_id = common.find_project(
identity_client,
parsed_args.project, parsed_args.project,
parsed_args.project_domain).id parsed_args.project_domain,
).id
domain_id = None domain_id = None
if parsed_args.domain: if parsed_args.domain:
domain_id = common.find_domain(identity_client, domain_id = common.find_domain(
parsed_args.domain).id identity_client, parsed_args.domain
).id
enabled = True enabled = True
if parsed_args.disable: if parsed_args.disable:
@ -221,8 +243,12 @@ class CreateUser(command.ShowOne):
parsed_args.password = utils.get_password(self.app.stdin) parsed_args.password = utils.get_password(self.app.stdin)
if not parsed_args.password: if not parsed_args.password:
LOG.warning(_("No password was supplied, authentication will fail " LOG.warning(
"when a user does not have a password.")) _(
"No password was supplied, authentication will fail "
"when a user does not have a password."
)
)
options = _get_options_for_user(identity_client, parsed_args) options = _get_options_for_user(identity_client, parsed_args)
try: try:
@ -238,9 +264,11 @@ class CreateUser(command.ShowOne):
) )
except ks_exc.Conflict: except ks_exc.Conflict:
if parsed_args.or_show: if parsed_args.or_show:
user = utils.find_resource(identity_client.users, user = utils.find_resource(
identity_client.users,
parsed_args.name, parsed_args.name,
domain_id=domain_id) domain_id=domain_id,
)
LOG.info(_('Returning existing user %s'), user.name) LOG.info(_('Returning existing user %s'), user.name)
else: else:
raise raise
@ -277,23 +305,28 @@ class DeleteUser(command.Command):
for user in parsed_args.users: for user in parsed_args.users:
try: try:
if domain is not None: if domain is not None:
user_obj = utils.find_resource(identity_client.users, user_obj = utils.find_resource(
user, identity_client.users, user, domain_id=domain.id
domain_id=domain.id) )
else: else:
user_obj = utils.find_resource(identity_client.users, user_obj = utils.find_resource(identity_client.users, user)
user)
identity_client.users.delete(user_obj.id) identity_client.users.delete(user_obj.id)
except Exception as e: except Exception as e:
errors += 1 errors += 1
LOG.error(_("Failed to delete user with " LOG.error(
"name or ID '%(user)s': %(e)s"), _(
{'user': user, 'e': e}) "Failed to delete user with "
"name or ID '%(user)s': %(e)s"
),
{'user': user, 'e': e},
)
if errors > 0: if errors > 0:
total = len(parsed_args.users) total = len(parsed_args.users)
msg = (_("%(errors)s of %(total)s users failed " msg = _("%(errors)s of %(total)s users failed " "to delete.") % {
"to delete.") % {'errors': errors, 'total': total}) 'errors': errors,
'total': total,
}
raise exceptions.CommandError(msg) raise exceptions.CommandError(msg)
@ -331,21 +364,20 @@ class ListUser(command.Lister):
domain = None domain = None
if parsed_args.domain: if parsed_args.domain:
domain = common.find_domain(identity_client, domain = common.find_domain(identity_client, parsed_args.domain).id
parsed_args.domain).id
group = None group = None
if parsed_args.group: if parsed_args.group:
group = common.find_group(identity_client, group = common.find_group(
parsed_args.group, identity_client, parsed_args.group, parsed_args.domain
parsed_args.domain).id ).id
if parsed_args.project: if parsed_args.project:
if domain is not None: if domain is not None:
project = utils.find_resource( project = utils.find_resource(
identity_client.projects, identity_client.projects,
parsed_args.project, parsed_args.project,
domain_id=domain domain_id=domain,
).id ).id
else: else:
project = utils.find_resource( project = utils.find_resource(
@ -354,7 +386,8 @@ class ListUser(command.Lister):
).id ).id
assignments = identity_client.role_assignments.list( assignments = identity_client.role_assignments.list(
project=project) project=project
)
# NOTE(stevemar): If a user has more than one role on a project # NOTE(stevemar): If a user has more than one role on a project
# then they will have two entries in the returned data. Since we # then they will have two entries in the returned data. Since we
@ -379,8 +412,15 @@ class ListUser(command.Lister):
# Column handling # Column handling
if parsed_args.long: if parsed_args.long:
columns = ['ID', 'Name', 'Default Project Id', 'Domain Id', columns = [
'Description', 'Email', 'Enabled'] 'ID',
'Name',
'Default Project Id',
'Domain Id',
'Description',
'Email',
'Enabled',
]
column_headers = copy.deepcopy(columns) column_headers = copy.deepcopy(columns)
column_headers[2] = 'Project' column_headers[2] = 'Project'
column_headers[3] = 'Domain' column_headers[3] = 'Domain'
@ -390,10 +430,14 @@ class ListUser(command.Lister):
return ( return (
column_headers, column_headers,
(utils.get_item_properties( (
s, columns, utils.get_item_properties(
s,
columns,
formatters={}, formatters={},
) for s in data) )
for s in data
),
) )
@ -415,8 +459,10 @@ class SetUser(command.Command):
parser.add_argument( parser.add_argument(
'--domain', '--domain',
metavar='<domain>', metavar='<domain>',
help=_('Domain the user belongs to (name or ID). This can be ' help=_(
'used in case collisions between user names exist.'), 'Domain the user belongs to (name or ID). This can be '
'used in case collisions between user names exist.'
),
) )
parser.add_argument( parser.add_argument(
'--project', '--project',
@ -467,17 +513,21 @@ class SetUser(command.Command):
parsed_args.password = utils.get_password(self.app.stdin) parsed_args.password = utils.get_password(self.app.stdin)
if '' == parsed_args.password: if '' == parsed_args.password:
LOG.warning(_("No password was supplied, authentication will fail " LOG.warning(
"when a user does not have a password.")) _(
"No password was supplied, authentication will fail "
"when a user does not have a password."
)
)
user_str = common._get_token_resource(identity_client, 'user', user_str = common._get_token_resource(
parsed_args.user, identity_client, 'user', parsed_args.user, parsed_args.domain
parsed_args.domain) )
if parsed_args.domain: if parsed_args.domain:
domain = common.find_domain(identity_client, parsed_args.domain) domain = common.find_domain(identity_client, parsed_args.domain)
user = utils.find_resource(identity_client.users, user = utils.find_resource(
user_str, identity_client.users, user_str, domain_id=domain.id
domain_id=domain.id) )
else: else:
user = utils.find_resource( user = utils.find_resource(
identity_client.users, identity_client.users,
@ -494,9 +544,11 @@ class SetUser(command.Command):
if parsed_args.description: if parsed_args.description:
kwargs['description'] = parsed_args.description kwargs['description'] = parsed_args.description
if parsed_args.project: if parsed_args.project:
project_id = common.find_project(identity_client, project_id = common.find_project(
identity_client,
parsed_args.project, parsed_args.project,
parsed_args.project_domain).id parsed_args.project_domain,
).id
kwargs['default_project'] = project_id kwargs['default_project'] = project_id
kwargs['enabled'] = user.enabled kwargs['enabled'] = user.enabled
if parsed_args.enable: if parsed_args.enable:
@ -556,16 +608,22 @@ class SetPasswordUser(command.Command):
current_password = parsed_args.original_password current_password = parsed_args.original_password
if current_password is None: if current_password is None:
current_password = utils.get_password( current_password = utils.get_password(
self.app.stdin, prompt="Current Password:", confirm=False) self.app.stdin, prompt="Current Password:", confirm=False
)
password = parsed_args.password password = parsed_args.password
if password is None: if password is None:
password = utils.get_password( password = utils.get_password(
self.app.stdin, prompt="New Password:") self.app.stdin, prompt="New Password:"
)
if '' == password: if '' == password:
LOG.warning(_("No password was supplied, authentication will fail " LOG.warning(
"when a user does not have a password.")) _(
"No password was supplied, authentication will fail "
"when a user does not have a password."
)
)
identity_client.users.update_password(current_password, password) identity_client.users.update_password(current_password, password)
@ -590,17 +648,16 @@ class ShowUser(command.ShowOne):
def take_action(self, parsed_args): def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity identity_client = self.app.client_manager.identity
user_str = common._get_token_resource(identity_client, 'user', user_str = common._get_token_resource(
parsed_args.user, identity_client, 'user', parsed_args.user, parsed_args.domain
parsed_args.domain) )
if parsed_args.domain: if parsed_args.domain:
domain = common.find_domain(identity_client, parsed_args.domain) domain = common.find_domain(identity_client, parsed_args.domain)
user = utils.find_resource(identity_client.users, user = utils.find_resource(
user_str, identity_client.users, user_str, domain_id=domain.id
domain_id=domain.id) )
else: else:
user = utils.find_resource(identity_client.users, user = utils.find_resource(identity_client.users, user_str)
user_str)
user._info.pop('links') user._info.pop('links')
return zip(*sorted(user._info.items())) return zip(*sorted(user._info.items()))

View File

@ -23,21 +23,37 @@ BASIC_LIST_HEADERS = ['ID', 'Name']
class IdentityTests(base.TestCase): class IdentityTests(base.TestCase):
"""Functional tests for Identity commands. """ """Functional tests for Identity commands."""
USER_FIELDS = ['email', 'enabled', 'id', 'name', 'project_id', 'username'] USER_FIELDS = ['email', 'enabled', 'id', 'name', 'project_id', 'username']
PROJECT_FIELDS = ['enabled', 'id', 'name', 'description'] PROJECT_FIELDS = ['enabled', 'id', 'name', 'description']
TOKEN_FIELDS = ['expires', 'id', 'project_id', 'user_id'] TOKEN_FIELDS = ['expires', 'id', 'project_id', 'user_id']
ROLE_FIELDS = ['id', 'name', 'domain_id'] ROLE_FIELDS = ['id', 'name', 'domain_id']
SERVICE_FIELDS = ['id', 'enabled', 'name', 'type', 'description'] SERVICE_FIELDS = ['id', 'enabled', 'name', 'type', 'description']
ENDPOINT_FIELDS = ['id', 'region', 'service_id', 'service_name', ENDPOINT_FIELDS = [
'service_type', 'publicurl', 'id',
'adminurl', 'internalurl'] 'region',
'service_id',
'service_name',
'service_type',
'publicurl',
'adminurl',
'internalurl',
]
EC2_CREDENTIALS_FIELDS = ['access', 'project_id', 'secret', EC2_CREDENTIALS_FIELDS = [
'trust_id', 'user_id'] 'access',
EC2_CREDENTIALS_LIST_HEADERS = ['Access', 'Secret', 'project_id',
'Project ID', 'User ID'] 'secret',
'trust_id',
'user_id',
]
EC2_CREDENTIALS_LIST_HEADERS = [
'Access',
'Secret',
'Project ID',
'User ID',
]
CATALOG_LIST_HEADERS = ['Name', 'Type', 'Endpoints'] CATALOG_LIST_HEADERS = ['Name', 'Type', 'Endpoints']
ENDPOINT_LIST_HEADERS = ['ID', 'Region', 'Service Name', 'Service Type'] ENDPOINT_LIST_HEADERS = ['ID', 'Region', 'Service Name', 'Service Type']
@ -53,7 +69,8 @@ class IdentityTests(base.TestCase):
'project create ' 'project create '
'--description %(description)s ' '--description %(description)s '
'--enable ' '--enable '
'%(name)s' % { '%(name)s'
% {
'description': cls.project_description, 'description': cls.project_description,
'name': cls.project_name, 'name': cls.project_name,
} }
@ -70,7 +87,8 @@ class IdentityTests(base.TestCase):
try: try:
cls.openstack( cls.openstack(
'--os-identity-api-version 2 ' '--os-identity-api-version 2 '
'project delete %s' % cls.project_name) 'project delete %s' % cls.project_name
)
finally: finally:
super(IdentityTests, cls).tearDownClass() super(IdentityTests, cls).tearDownClass()
@ -78,7 +96,8 @@ class IdentityTests(base.TestCase):
super(IdentityTests, self).setUp() super(IdentityTests, self).setUp()
# prepare v2 env # prepare v2 env
ver_fixture = fixtures.EnvironmentVariable( ver_fixture = fixtures.EnvironmentVariable(
'OS_IDENTITY_API_VERSION', '2.0') 'OS_IDENTITY_API_VERSION', '2.0'
)
self.useFixture(ver_fixture) self.useFixture(ver_fixture)
auth_url = os.environ.get('OS_AUTH_URL') auth_url = os.environ.get('OS_AUTH_URL')
if auth_url: if auth_url:
@ -93,13 +112,14 @@ class IdentityTests(base.TestCase):
raw_output = self.openstack( raw_output = self.openstack(
'project create ' 'project create '
'--description %(description)s ' '--description %(description)s '
'--enable %(name)s' % {'description': project_description, '--enable %(name)s'
'name': project_name}) % {'description': project_description, 'name': project_name}
)
project = self.parse_show_as_object(raw_output) project = self.parse_show_as_object(raw_output)
if add_clean_up: if add_clean_up:
self.addCleanup( self.addCleanup(
self.openstack, self.openstack, 'project delete %s' % project['id']
'project delete %s' % project['id']) )
items = self.parse_show(raw_output) items = self.parse_show(raw_output)
self.assert_show_fields(items, self.PROJECT_FIELDS) self.assert_show_fields(items, self.PROJECT_FIELDS)
return project_name return project_name
@ -114,14 +134,19 @@ class IdentityTests(base.TestCase):
'--password %(password)s ' '--password %(password)s '
'--email %(email)s ' '--email %(email)s '
'--enable ' '--enable '
'%(name)s' % {'project': self.project_name, '%(name)s'
% {
'project': self.project_name,
'email': email, 'email': email,
'password': password, 'password': password,
'name': username}) 'name': username,
}
)
if add_clean_up: if add_clean_up:
self.addCleanup( self.addCleanup(
self.openstack, self.openstack,
'user delete %s' % self.parse_show_as_object(raw_output)['id']) 'user delete %s' % self.parse_show_as_object(raw_output)['id'],
)
items = self.parse_show(raw_output) items = self.parse_show(raw_output)
self.assert_show_fields(items, self.USER_FIELDS) self.assert_show_fields(items, self.USER_FIELDS)
return username return username
@ -131,9 +156,7 @@ class IdentityTests(base.TestCase):
raw_output = self.openstack('role create %s' % role_name) raw_output = self.openstack('role create %s' % role_name)
role = self.parse_show_as_object(raw_output) role = self.parse_show_as_object(raw_output)
if add_clean_up: if add_clean_up:
self.addCleanup( self.addCleanup(self.openstack, 'role delete %s' % role['id'])
self.openstack,
'role delete %s' % role['id'])
items = self.parse_show(raw_output) items = self.parse_show(raw_output)
self.assert_show_fields(items, self.ROLE_FIELDS) self.assert_show_fields(items, self.ROLE_FIELDS)
self.assertEqual(role_name, role['name']) self.assertEqual(role_name, role['name'])
@ -145,8 +168,8 @@ class IdentityTests(base.TestCase):
access_key = ec2_credentials['access'] access_key = ec2_credentials['access']
if add_clean_up: if add_clean_up:
self.addCleanup( self.addCleanup(
self.openstack, self.openstack, 'ec2 credentials delete %s' % access_key
'ec2 credentials delete %s' % access_key) )
items = self.parse_show(raw_output) items = self.parse_show(raw_output)
self.assert_show_fields(items, self.EC2_CREDENTIALS_FIELDS) self.assert_show_fields(items, self.EC2_CREDENTIALS_FIELDS)
return access_key return access_key
@ -155,8 +178,7 @@ class IdentityTests(base.TestCase):
raw_output = self.openstack('token issue') raw_output = self.openstack('token issue')
token = self.parse_show_as_object(raw_output) token = self.parse_show_as_object(raw_output)
if add_clean_up: if add_clean_up:
self.addCleanup(self.openstack, self.addCleanup(self.openstack, 'token revoke %s' % token['id'])
'token revoke %s' % token['id'])
items = self.parse_show(raw_output) items = self.parse_show(raw_output)
self.assert_show_fields(items, self.TOKEN_FIELDS) self.assert_show_fields(items, self.TOKEN_FIELDS)
return token['id'] return token['id']
@ -169,13 +191,18 @@ class IdentityTests(base.TestCase):
'service create ' 'service create '
'--name %(name)s ' '--name %(name)s '
'--description %(description)s ' '--description %(description)s '
'%(type)s' % {'name': service_name, '%(type)s'
% {
'name': service_name,
'description': description, 'description': description,
'type': type_name}) 'type': type_name,
}
)
if add_clean_up: if add_clean_up:
service = self.parse_show_as_object(raw_output) service = self.parse_show_as_object(raw_output)
self.addCleanup(self.openstack, self.addCleanup(
'service delete %s' % service['id']) self.openstack, 'service delete %s' % service['id']
)
items = self.parse_show(raw_output) items = self.parse_show(raw_output)
self.assert_show_fields(items, self.SERVICE_FIELDS) self.assert_show_fields(items, self.SERVICE_FIELDS)
return service_name return service_name
@ -192,16 +219,20 @@ class IdentityTests(base.TestCase):
'--adminurl %(adminurl)s ' '--adminurl %(adminurl)s '
'--internalurl %(internalurl)s ' '--internalurl %(internalurl)s '
'--region %(region)s ' '--region %(region)s '
'%(service)s' % {'publicurl': public_url, '%(service)s'
% {
'publicurl': public_url,
'adminurl': admin_url, 'adminurl': admin_url,
'internalurl': internal_url, 'internalurl': internal_url,
'region': region_id, 'region': region_id,
'service': service_name}) 'service': service_name,
}
)
endpoint = self.parse_show_as_object(raw_output) endpoint = self.parse_show_as_object(raw_output)
if add_clean_up: if add_clean_up:
self.addCleanup( self.addCleanup(
self.openstack, self.openstack, 'endpoint delete %s' % endpoint['id']
'endpoint delete %s' % endpoint['id']) )
items = self.parse_show(raw_output) items = self.parse_show(raw_output)
self.assert_show_fields(items, self.ENDPOINT_FIELDS) self.assert_show_fields(items, self.ENDPOINT_FIELDS)
return endpoint['id'] return endpoint['id']

View File

@ -14,7 +14,6 @@ from openstackclient.tests.functional.identity.v2 import common
class CatalogTests(common.IdentityTests): class CatalogTests(common.IdentityTests):
def test_catalog_list(self): def test_catalog_list(self):
raw_output = self.openstack('catalog list') raw_output = self.openstack('catalog list')
items = self.parse_listing(raw_output) items = self.parse_listing(raw_output)

View File

@ -14,7 +14,6 @@ from openstackclient.tests.functional.identity.v2 import common
class EC2CredentialsTests(common.IdentityTests): class EC2CredentialsTests(common.IdentityTests):
def test_ec2_credentials_create(self): def test_ec2_credentials_create(self):
self._create_dummy_ec2_credentials() self._create_dummy_ec2_credentials()

View File

@ -14,21 +14,20 @@ from openstackclient.tests.functional.identity.v2 import common
class EndpointTests(common.IdentityTests): class EndpointTests(common.IdentityTests):
def test_endpoint_create(self): def test_endpoint_create(self):
self._create_dummy_endpoint() self._create_dummy_endpoint()
def test_endpoint_delete(self): def test_endpoint_delete(self):
endpoint_id = self._create_dummy_endpoint(add_clean_up=False) endpoint_id = self._create_dummy_endpoint(add_clean_up=False)
raw_output = self.openstack( raw_output = self.openstack('endpoint delete %s' % endpoint_id)
'endpoint delete %s' % endpoint_id)
self.assertEqual(0, len(raw_output)) self.assertEqual(0, len(raw_output))
def test_endpoint_multi_delete(self): def test_endpoint_multi_delete(self):
endpoint_id_1 = self._create_dummy_endpoint(add_clean_up=False) endpoint_id_1 = self._create_dummy_endpoint(add_clean_up=False)
endpoint_id_2 = self._create_dummy_endpoint(add_clean_up=False) endpoint_id_2 = self._create_dummy_endpoint(add_clean_up=False)
raw_output = self.openstack( raw_output = self.openstack(
'endpoint delete ' + endpoint_id_1 + ' ' + endpoint_id_2) 'endpoint delete ' + endpoint_id_1 + ' ' + endpoint_id_2
)
self.assertEqual(0, len(raw_output)) self.assertEqual(0, len(raw_output))
def test_endpoint_list(self): def test_endpoint_list(self):

View File

@ -16,7 +16,6 @@ from openstackclient.tests.functional.identity.v2 import common
class ProjectTests(common.IdentityTests): class ProjectTests(common.IdentityTests):
def test_project_create(self): def test_project_create(self):
project_name = data_utils.rand_name('TestProject') project_name = data_utils.rand_name('TestProject')
description = data_utils.rand_name('description') description = data_utils.rand_name('description')
@ -26,12 +25,9 @@ class ProjectTests(common.IdentityTests):
'--enable ' '--enable '
'--property k1=v1 ' '--property k1=v1 '
'--property k2=v2 ' '--property k2=v2 '
'%(name)s' % {'description': description, '%(name)s' % {'description': description, 'name': project_name}
'name': project_name})
self.addCleanup(
self.openstack,
'project delete %s' % project_name
) )
self.addCleanup(self.openstack, 'project delete %s' % project_name)
items = self.parse_show(raw_output) items = self.parse_show(raw_output)
show_fields = list(self.PROJECT_FIELDS) show_fields = list(self.PROJECT_FIELDS)
show_fields.extend(['k1', 'k2']) show_fields.extend(['k1', 'k2'])
@ -42,8 +38,7 @@ class ProjectTests(common.IdentityTests):
def test_project_delete(self): def test_project_delete(self):
project_name = self._create_dummy_project(add_clean_up=False) project_name = self._create_dummy_project(add_clean_up=False)
raw_output = self.openstack( raw_output = self.openstack('project delete %s' % project_name)
'project delete %s' % project_name)
self.assertEqual(0, len(raw_output)) self.assertEqual(0, len(raw_output))
def test_project_list(self): def test_project_list(self):
@ -59,13 +54,11 @@ class ProjectTests(common.IdentityTests):
'--name %(new_name)s ' '--name %(new_name)s '
'--disable ' '--disable '
'--property k0=v0 ' '--property k0=v0 '
'%(name)s' % {'new_name': new_project_name, '%(name)s' % {'new_name': new_project_name, 'name': project_name}
'name': project_name}) )
self.assertEqual(0, len(raw_output)) self.assertEqual(0, len(raw_output))
# check project details # check project details
raw_output = self.openstack( raw_output = self.openstack('project show %s' % new_project_name)
'project show %s' % new_project_name
)
items = self.parse_show(raw_output) items = self.parse_show(raw_output)
fields = list(self.PROJECT_FIELDS) fields = list(self.PROJECT_FIELDS)
fields.extend(['properties']) fields.extend(['properties'])
@ -77,9 +70,7 @@ class ProjectTests(common.IdentityTests):
def test_project_show(self): def test_project_show(self):
project_name = self._create_dummy_project() project_name = self._create_dummy_project()
raw_output = self.openstack( raw_output = self.openstack('project show %s' % project_name)
'project show %s' % project_name
)
items = self.parse_show(raw_output) items = self.parse_show(raw_output)
fields = list(self.PROJECT_FIELDS) fields = list(self.PROJECT_FIELDS)
fields.extend(['properties']) fields.extend(['properties'])

View File

@ -14,7 +14,6 @@ from openstackclient.tests.functional.identity.v2 import common
class RoleTests(common.IdentityTests): class RoleTests(common.IdentityTests):
def test_role_create(self): def test_role_create(self):
self._create_dummy_role() self._create_dummy_role()
@ -42,17 +41,25 @@ class RoleTests(common.IdentityTests):
'role add ' 'role add '
'--project %(project)s ' '--project %(project)s '
'--user %(user)s ' '--user %(user)s '
'%(role)s' % {'project': self.project_name, '%(role)s'
% {
'project': self.project_name,
'user': username, 'user': username,
'role': role_name}) 'role': role_name,
}
)
self.addCleanup( self.addCleanup(
self.openstack, self.openstack,
'role remove ' 'role remove '
'--project %(project)s ' '--project %(project)s '
'--user %(user)s ' '--user %(user)s '
'%(role)s' % {'project': self.project_name, '%(role)s'
% {
'project': self.project_name,
'user': username, 'user': username,
'role': role_name}) 'role': role_name,
},
)
items = self.parse_show(raw_output) items = self.parse_show(raw_output)
self.assert_show_fields(items, self.ROLE_FIELDS) self.assert_show_fields(items, self.ROLE_FIELDS)
@ -63,16 +70,24 @@ class RoleTests(common.IdentityTests):
'role add ' 'role add '
'--project %(project)s ' '--project %(project)s '
'--user %(user)s ' '--user %(user)s '
'%(role)s' % {'project': self.project_name, '%(role)s'
% {
'project': self.project_name,
'user': username, 'user': username,
'role': role_name}) 'role': role_name,
}
)
del_raw_output = self.openstack( del_raw_output = self.openstack(
'role remove ' 'role remove '
'--project %(project)s ' '--project %(project)s '
'--user %(user)s ' '--user %(user)s '
'%(role)s' % {'project': self.project_name, '%(role)s'
% {
'project': self.project_name,
'user': username, 'user': username,
'role': role_name}) 'role': role_name,
}
)
items = self.parse_show(add_raw_output) items = self.parse_show(add_raw_output)
self.assert_show_fields(items, self.ROLE_FIELDS) self.assert_show_fields(items, self.ROLE_FIELDS)
self.assertEqual(0, len(del_raw_output)) self.assertEqual(0, len(del_raw_output))

View File

@ -14,7 +14,6 @@ from openstackclient.tests.functional.identity.v2 import common
class ServiceTests(common.IdentityTests): class ServiceTests(common.IdentityTests):
def test_service_create(self): def test_service_create(self):
self._create_dummy_service() self._create_dummy_service()
@ -27,7 +26,8 @@ class ServiceTests(common.IdentityTests):
service_name_1 = self._create_dummy_service(add_clean_up=False) service_name_1 = self._create_dummy_service(add_clean_up=False)
service_name_2 = self._create_dummy_service(add_clean_up=False) service_name_2 = self._create_dummy_service(add_clean_up=False)
raw_output = self.openstack( raw_output = self.openstack(
'service delete ' + service_name_1 + ' ' + service_name_2) 'service delete ' + service_name_1 + ' ' + service_name_2
)
self.assertEqual(0, len(raw_output)) self.assertEqual(0, len(raw_output))
def test_service_list(self): def test_service_list(self):
@ -38,7 +38,6 @@ class ServiceTests(common.IdentityTests):
def test_service_show(self): def test_service_show(self):
service_name = self._create_dummy_service() service_name = self._create_dummy_service()
raw_output = self.openstack( raw_output = self.openstack('service show %s' % service_name)
'service show %s' % service_name)
items = self.parse_show(raw_output) items = self.parse_show(raw_output)
self.assert_show_fields(items, self.SERVICE_FIELDS) self.assert_show_fields(items, self.SERVICE_FIELDS)

View File

@ -14,7 +14,6 @@ from openstackclient.tests.functional.identity.v2 import common
class TokenTests(common.IdentityTests): class TokenTests(common.IdentityTests):
def test_token_issue(self): def test_token_issue(self):
self._create_dummy_token() self._create_dummy_token()

View File

@ -17,7 +17,6 @@ from openstackclient.tests.functional.identity.v2 import common
class UserTests(common.IdentityTests): class UserTests(common.IdentityTests):
def test_user_create(self): def test_user_create(self):
self._create_dummy_user() self._create_dummy_user()
@ -37,12 +36,13 @@ class UserTests(common.IdentityTests):
user = self.parse_show_as_object(raw_output) user = self.parse_show_as_object(raw_output)
new_username = data_utils.rand_name('NewTestUser') new_username = data_utils.rand_name('NewTestUser')
new_email = data_utils.rand_name() + '@example.com' new_email = data_utils.rand_name() + '@example.com'
raw_output = self.openstack('user set ' raw_output = self.openstack(
'user set '
'--email %(email)s ' '--email %(email)s '
'--name %(new_name)s ' '--name %(new_name)s '
'%(id)s' % {'email': new_email, '%(id)s'
'new_name': new_username, % {'email': new_email, 'new_name': new_username, 'id': user['id']}
'id': user['id']}) )
self.assertEqual(0, len(raw_output)) self.assertEqual(0, len(raw_output))
raw_output = self.openstack('user show %s' % new_username) raw_output = self.openstack('user show %s' % new_username)
new_user = self.parse_show_as_object(raw_output) new_user = self.parse_show_as_object(raw_output)
@ -56,5 +56,6 @@ class UserTests(common.IdentityTests):
self.assert_show_fields(items, self.USER_FIELDS) self.assert_show_fields(items, self.USER_FIELDS)
def test_bad_user_command(self): def test_bad_user_command(self):
self.assertRaises(exceptions.CommandFailed, self.assertRaises(
self.openstack, 'user unlist') exceptions.CommandFailed, self.openstack, 'user unlist'
)

View File

@ -23,47 +23,121 @@ SYSTEM_CLOUD = os.environ.get('OS_SYSTEM_CLOUD', 'devstack-system-admin')
class IdentityTests(base.TestCase): class IdentityTests(base.TestCase):
"""Functional tests for Identity commands. """ """Functional tests for Identity commands."""
DOMAIN_FIELDS = ['description', 'enabled', 'id', 'name'] DOMAIN_FIELDS = ['description', 'enabled', 'id', 'name']
GROUP_FIELDS = ['description', 'domain_id', 'id', 'name'] GROUP_FIELDS = ['description', 'domain_id', 'id', 'name']
TOKEN_FIELDS = ['expires', 'id', 'project_id', 'user_id'] TOKEN_FIELDS = ['expires', 'id', 'project_id', 'user_id']
USER_FIELDS = ['email', 'enabled', 'id', 'name', 'name', USER_FIELDS = [
'domain_id', 'default_project_id', 'description', 'email',
'password_expires_at'] 'enabled',
PROJECT_FIELDS = ['description', 'id', 'domain_id', 'is_domain', 'id',
'enabled', 'name', 'parent_id'] 'name',
'name',
'domain_id',
'default_project_id',
'description',
'password_expires_at',
]
PROJECT_FIELDS = [
'description',
'id',
'domain_id',
'is_domain',
'enabled',
'name',
'parent_id',
]
ROLE_FIELDS = ['id', 'name', 'domain_id', 'description'] ROLE_FIELDS = ['id', 'name', 'domain_id', 'description']
SERVICE_FIELDS = ['id', 'enabled', 'name', 'type', 'description'] SERVICE_FIELDS = ['id', 'enabled', 'name', 'type', 'description']
REGION_FIELDS = ['description', 'enabled', 'parent_region', 'region'] REGION_FIELDS = ['description', 'enabled', 'parent_region', 'region']
ENDPOINT_FIELDS = ['id', 'region', 'region_id', 'service_id', ENDPOINT_FIELDS = [
'service_name', 'service_type', 'enabled', 'id',
'interface', 'url'] 'region',
'region_id',
'service_id',
'service_name',
'service_type',
'enabled',
'interface',
'url',
]
REGION_LIST_HEADERS = ['Region', 'Parent Region', 'Description'] REGION_LIST_HEADERS = ['Region', 'Parent Region', 'Description']
ENDPOINT_LIST_HEADERS = ['ID', 'Region', 'Service Name', 'Service Type', ENDPOINT_LIST_HEADERS = [
'Enabled', 'Interface', 'URL'] 'ID',
'Region',
'Service Name',
'Service Type',
'Enabled',
'Interface',
'URL',
]
ENDPOINT_LIST_PROJECT_HEADERS = ['ID', 'Name'] ENDPOINT_LIST_PROJECT_HEADERS = ['ID', 'Name']
IDENTITY_PROVIDER_FIELDS = ['description', 'enabled', 'id', 'remote_ids', IDENTITY_PROVIDER_FIELDS = [
'domain_id'] 'description',
'enabled',
'id',
'remote_ids',
'domain_id',
]
IDENTITY_PROVIDER_LIST_HEADERS = ['ID', 'Enabled', 'Description'] IDENTITY_PROVIDER_LIST_HEADERS = ['ID', 'Enabled', 'Description']
SERVICE_PROVIDER_FIELDS = ['auth_url', 'description', 'enabled', SERVICE_PROVIDER_FIELDS = [
'id', 'relay_state_prefix', 'sp_url'] 'auth_url',
SERVICE_PROVIDER_LIST_HEADERS = ['ID', 'Enabled', 'Description', 'description',
'Auth URL'] 'enabled',
IMPLIED_ROLE_LIST_HEADERS = ['Prior Role ID', 'Prior Role Name', 'id',
'Implied Role ID', 'Implied Role Name'] 'relay_state_prefix',
REGISTERED_LIMIT_FIELDS = ['id', 'service_id', 'resource_name', 'sp_url',
'default_limit', 'description', 'region_id'] ]
REGISTERED_LIMIT_LIST_HEADERS = ['ID', 'Service ID', 'Resource Name', SERVICE_PROVIDER_LIST_HEADERS = [
'Default Limit', 'Description', 'ID',
'Region ID'] 'Enabled',
LIMIT_FIELDS = ['id', 'project_id', 'service_id', 'resource_name', 'Description',
'resource_limit', 'description', 'region_id'] 'Auth URL',
LIMIT_LIST_HEADERS = ['ID', 'Project ID', 'Service ID', 'Resource Name', ]
'Resource Limit', 'Description', 'Region ID'] IMPLIED_ROLE_LIST_HEADERS = [
'Prior Role ID',
'Prior Role Name',
'Implied Role ID',
'Implied Role Name',
]
REGISTERED_LIMIT_FIELDS = [
'id',
'service_id',
'resource_name',
'default_limit',
'description',
'region_id',
]
REGISTERED_LIMIT_LIST_HEADERS = [
'ID',
'Service ID',
'Resource Name',
'Default Limit',
'Description',
'Region ID',
]
LIMIT_FIELDS = [
'id',
'project_id',
'service_id',
'resource_name',
'resource_limit',
'description',
'region_id',
]
LIMIT_LIST_HEADERS = [
'ID',
'Project ID',
'Service ID',
'Resource Name',
'Resource Limit',
'Description',
'Region ID',
]
@classmethod @classmethod
def setUpClass(cls): def setUpClass(cls):
@ -76,8 +150,9 @@ class IdentityTests(base.TestCase):
'domain create ' 'domain create '
'--description %(description)s ' '--description %(description)s '
'--enable ' '--enable '
'%(name)s' % {'description': cls.domain_description, '%(name)s'
'name': cls.domain_name}) % {'description': cls.domain_description, 'name': cls.domain_name}
)
# create dummy project # create dummy project
cls.project_name = data_utils.rand_name('TestProject') cls.project_name = data_utils.rand_name('TestProject')
@ -88,21 +163,31 @@ class IdentityTests(base.TestCase):
'--domain %(domain)s ' '--domain %(domain)s '
'--description %(description)s ' '--description %(description)s '
'--enable ' '--enable '
'%(name)s' % {'domain': cls.domain_name, '%(name)s'
% {
'domain': cls.domain_name,
'description': cls.project_description, 'description': cls.project_description,
'name': cls.project_name}) 'name': cls.project_name,
}
)
@classmethod @classmethod
def tearDownClass(cls): def tearDownClass(cls):
try: try:
# delete dummy project # delete dummy project
cls.openstack('--os-identity-api-version 3 ' cls.openstack(
'project delete %s' % cls.project_name) '--os-identity-api-version 3 '
'project delete %s' % cls.project_name
)
# disable and delete dummy domain # disable and delete dummy domain
cls.openstack('--os-identity-api-version 3 ' cls.openstack(
'domain set --disable %s' % cls.domain_name) '--os-identity-api-version 3 '
cls.openstack('--os-identity-api-version 3 ' 'domain set --disable %s' % cls.domain_name
'domain delete %s' % cls.domain_name) )
cls.openstack(
'--os-identity-api-version 3 '
'domain delete %s' % cls.domain_name
)
finally: finally:
super(IdentityTests, cls).tearDownClass() super(IdentityTests, cls).tearDownClass()
@ -110,7 +195,8 @@ class IdentityTests(base.TestCase):
super(IdentityTests, self).setUp() super(IdentityTests, self).setUp()
# prepare v3 env # prepare v3 env
ver_fixture = fixtures.EnvironmentVariable( ver_fixture = fixtures.EnvironmentVariable(
'OS_IDENTITY_API_VERSION', '3') 'OS_IDENTITY_API_VERSION', '3'
)
self.useFixture(ver_fixture) self.useFixture(ver_fixture)
auth_url = os.environ.get('OS_AUTH_URL') auth_url = os.environ.get('OS_AUTH_URL')
if auth_url: if auth_url:
@ -133,17 +219,22 @@ class IdentityTests(base.TestCase):
'--email %(email)s ' '--email %(email)s '
'--description %(description)s ' '--description %(description)s '
'--enable ' '--enable '
'%(name)s' % {'domain': self.domain_name, '%(name)s'
% {
'domain': self.domain_name,
'project': self.project_name, 'project': self.project_name,
'project_domain': self.domain_name, 'project_domain': self.domain_name,
'email': email, 'email': email,
'password': password, 'password': password,
'description': description, 'description': description,
'name': username}) 'name': username,
}
)
if add_clean_up: if add_clean_up:
self.addCleanup( self.addCleanup(
self.openstack, self.openstack,
'user delete %s' % self.parse_show_as_object(raw_output)['id']) 'user delete %s' % self.parse_show_as_object(raw_output)['id'],
)
items = self.parse_show(raw_output) items = self.parse_show(raw_output)
self.assert_show_fields(items, self.USER_FIELDS) self.assert_show_fields(items, self.USER_FIELDS)
return username return username
@ -153,9 +244,7 @@ class IdentityTests(base.TestCase):
raw_output = self.openstack('role create %s' % role_name) raw_output = self.openstack('role create %s' % role_name)
role = self.parse_show_as_object(raw_output) role = self.parse_show_as_object(raw_output)
if add_clean_up: if add_clean_up:
self.addCleanup( self.addCleanup(self.openstack, 'role delete %s' % role['id'])
self.openstack,
'role delete %s' % role['id'])
items = self.parse_show(raw_output) items = self.parse_show(raw_output)
self.assert_show_fields(items, self.ROLE_FIELDS) self.assert_show_fields(items, self.ROLE_FIELDS)
self.assertEqual(role_name, role['name']) self.assertEqual(role_name, role['name'])
@ -167,8 +256,8 @@ class IdentityTests(base.TestCase):
self.openstack( self.openstack(
'implied role create ' 'implied role create '
'--implied-role %(implied_role)s ' '--implied-role %(implied_role)s '
'%(role)s' % {'implied_role': implied_role_name, '%(role)s' % {'implied_role': implied_role_name, 'role': role_name}
'role': role_name}) )
return implied_role_name, role_name return implied_role_name, role_name
@ -179,16 +268,20 @@ class IdentityTests(base.TestCase):
'group create ' 'group create '
'--domain %(domain)s ' '--domain %(domain)s '
'--description %(description)s ' '--description %(description)s '
'%(name)s' % {'domain': self.domain_name, '%(name)s'
% {
'domain': self.domain_name,
'description': description, 'description': description,
'name': group_name}) 'name': group_name,
}
)
if add_clean_up: if add_clean_up:
self.addCleanup( self.addCleanup(
self.openstack, self.openstack,
'group delete ' 'group delete '
'--domain %(domain)s ' '--domain %(domain)s '
'%(name)s' % {'domain': self.domain_name, '%(name)s' % {'domain': self.domain_name, 'name': group_name},
'name': group_name}) )
items = self.parse_show(raw_output) items = self.parse_show(raw_output)
self.assert_show_fields(items, self.GROUP_FIELDS) self.assert_show_fields(items, self.GROUP_FIELDS)
return group_name return group_name
@ -199,16 +292,13 @@ class IdentityTests(base.TestCase):
self.openstack( self.openstack(
'domain create ' 'domain create '
'--description %(description)s ' '--description %(description)s '
'--enable %(name)s' % {'description': domain_description, '--enable %(name)s'
'name': domain_name}) % {'description': domain_description, 'name': domain_name}
if add_clean_up:
self.addCleanup(
self.openstack,
'domain delete %s' % domain_name
) )
if add_clean_up:
self.addCleanup(self.openstack, 'domain delete %s' % domain_name)
self.addCleanup( self.addCleanup(
self.openstack, self.openstack, 'domain set --disable %s' % domain_name
'domain set --disable %s' % domain_name
) )
return domain_name return domain_name
@ -219,16 +309,21 @@ class IdentityTests(base.TestCase):
'project create ' 'project create '
'--domain %(domain)s ' '--domain %(domain)s '
'--description %(description)s ' '--description %(description)s '
'--enable %(name)s' % {'domain': self.domain_name, '--enable %(name)s'
% {
'domain': self.domain_name,
'description': project_description, 'description': project_description,
'name': project_name}) 'name': project_name,
}
)
if add_clean_up: if add_clean_up:
self.addCleanup( self.addCleanup(
self.openstack, self.openstack,
'project delete ' 'project delete '
'--domain %(domain)s ' '--domain %(domain)s '
'%(name)s' % {'domain': self.domain_name, '%(name)s'
'name': project_name}) % {'domain': self.domain_name, 'name': project_name},
)
return project_name return project_name
def _create_dummy_region(self, parent_region=None, add_clean_up=True): def _create_dummy_region(self, parent_region=None, add_clean_up=True):
@ -241,12 +336,15 @@ class IdentityTests(base.TestCase):
'region create ' 'region create '
'%(parent_region_arg)s ' '%(parent_region_arg)s '
'--description %(description)s ' '--description %(description)s '
'%(id)s' % {'parent_region_arg': parent_region_arg, '%(id)s'
% {
'parent_region_arg': parent_region_arg,
'description': description, 'description': description,
'id': region_id}) 'id': region_id,
}
)
if add_clean_up: if add_clean_up:
self.addCleanup(self.openstack, self.addCleanup(self.openstack, 'region delete %s' % region_id)
'region delete %s' % region_id)
items = self.parse_show(raw_output) items = self.parse_show(raw_output)
self.assert_show_fields(items, self.REGION_FIELDS) self.assert_show_fields(items, self.REGION_FIELDS)
return region_id return region_id
@ -260,13 +358,18 @@ class IdentityTests(base.TestCase):
'--name %(name)s ' '--name %(name)s '
'--description %(description)s ' '--description %(description)s '
'--enable ' '--enable '
'%(type)s' % {'name': service_name, '%(type)s'
% {
'name': service_name,
'description': description, 'description': description,
'type': type_name}) 'type': type_name,
}
)
if add_clean_up: if add_clean_up:
service = self.parse_show_as_object(raw_output) service = self.parse_show_as_object(raw_output)
self.addCleanup(self.openstack, self.addCleanup(
'service delete %s' % service['id']) self.openstack, 'service delete %s' % service['id']
)
items = self.parse_show(raw_output) items = self.parse_show(raw_output)
self.assert_show_fields(items, self.SERVICE_FIELDS) self.assert_show_fields(items, self.SERVICE_FIELDS)
return service_name return service_name
@ -281,15 +384,19 @@ class IdentityTests(base.TestCase):
'--enable ' '--enable '
'%(service)s ' '%(service)s '
'%(interface)s ' '%(interface)s '
'%(url)s' % {'region': region_id, '%(url)s'
% {
'region': region_id,
'service': service_name, 'service': service_name,
'interface': interface, 'interface': interface,
'url': endpoint_url}) 'url': endpoint_url,
}
)
endpoint = self.parse_show_as_object(raw_output) endpoint = self.parse_show_as_object(raw_output)
if add_clean_up: if add_clean_up:
self.addCleanup( self.addCleanup(
self.openstack, self.openstack, 'endpoint delete %s' % endpoint['id']
'endpoint delete %s' % endpoint['id']) )
items = self.parse_show(raw_output) items = self.parse_show(raw_output)
self.assert_show_fields(items, self.ENDPOINT_FIELDS) self.assert_show_fields(items, self.ENDPOINT_FIELDS)
return endpoint['id'] return endpoint['id']
@ -301,12 +408,14 @@ class IdentityTests(base.TestCase):
'identity provider create ' 'identity provider create '
' %(name)s ' ' %(name)s '
'--description %(description)s ' '--description %(description)s '
'--enable ' % {'name': identity_provider, '--enable '
'description': description}) % {'name': identity_provider, 'description': description}
)
if add_clean_up: if add_clean_up:
self.addCleanup( self.addCleanup(
self.openstack, self.openstack,
'identity provider delete %s' % identity_provider) 'identity provider delete %s' % identity_provider,
)
items = self.parse_show(raw_output) items = self.parse_show(raw_output)
self.assert_show_fields(items, self.IDENTITY_PROVIDER_FIELDS) self.assert_show_fields(items, self.IDENTITY_PROVIDER_FIELDS)
return identity_provider return identity_provider
@ -320,12 +429,13 @@ class IdentityTests(base.TestCase):
'--description %(description)s ' '--description %(description)s '
'--auth-url https://sp.example.com:35357 ' '--auth-url https://sp.example.com:35357 '
'--service-provider-url https://sp.example.com:5000 ' '--service-provider-url https://sp.example.com:5000 '
'--enable ' % {'name': service_provider, '--enable '
'description': description}) % {'name': service_provider, 'description': description}
)
if add_clean_up: if add_clean_up:
self.addCleanup( self.addCleanup(
self.openstack, self.openstack, 'service provider delete %s' % service_provider
'service provider delete %s' % service_provider) )
items = self.parse_show(raw_output) items = self.parse_show(raw_output)
self.assert_show_fields(items, self.SERVICE_PROVIDER_FIELDS) self.assert_show_fields(items, self.SERVICE_PROVIDER_FIELDS)
return service_provider return service_provider
@ -336,14 +446,14 @@ class IdentityTests(base.TestCase):
params = { params = {
'service_name': service_name, 'service_name': service_name,
'default_limit': 10, 'default_limit': 10,
'resource_name': resource_name 'resource_name': resource_name,
} }
raw_output = self.openstack( raw_output = self.openstack(
'registered limit create' 'registered limit create'
' --service %(service_name)s' ' --service %(service_name)s'
' --default-limit %(default_limit)s' ' --default-limit %(default_limit)s'
' %(resource_name)s' % params, ' %(resource_name)s' % params,
cloud=SYSTEM_CLOUD cloud=SYSTEM_CLOUD,
) )
items = self.parse_show(raw_output) items = self.parse_show(raw_output)
registered_limit_id = self._extract_value_from_items('id', items) registered_limit_id = self._extract_value_from_items('id', items)
@ -352,7 +462,7 @@ class IdentityTests(base.TestCase):
self.addCleanup( self.addCleanup(
self.openstack, self.openstack,
'registered limit delete %s' % registered_limit_id, 'registered limit delete %s' % registered_limit_id,
cloud=SYSTEM_CLOUD cloud=SYSTEM_CLOUD,
) )
self.assert_show_fields(items, self.REGISTERED_LIMIT_FIELDS) self.assert_show_fields(items, self.REGISTERED_LIMIT_FIELDS)
@ -369,7 +479,7 @@ class IdentityTests(base.TestCase):
raw_output = self.openstack( raw_output = self.openstack(
'registered limit show %s' % registered_limit_id, 'registered limit show %s' % registered_limit_id,
cloud=SYSTEM_CLOUD cloud=SYSTEM_CLOUD,
) )
items = self.parse_show(raw_output) items = self.parse_show(raw_output)
resource_name = self._extract_value_from_items('resource_name', items) resource_name = self._extract_value_from_items('resource_name', items)
@ -385,7 +495,7 @@ class IdentityTests(base.TestCase):
'project_id': project_id, 'project_id': project_id,
'service_id': service_id, 'service_id': service_id,
'resource_name': resource_name, 'resource_name': resource_name,
'resource_limit': resource_limit 'resource_limit': resource_limit,
} }
raw_output = self.openstack( raw_output = self.openstack(
@ -394,15 +504,16 @@ class IdentityTests(base.TestCase):
' --service %(service_id)s' ' --service %(service_id)s'
' --resource-limit %(resource_limit)s' ' --resource-limit %(resource_limit)s'
' %(resource_name)s' % params, ' %(resource_name)s' % params,
cloud=SYSTEM_CLOUD cloud=SYSTEM_CLOUD,
) )
items = self.parse_show(raw_output) items = self.parse_show(raw_output)
limit_id = self._extract_value_from_items('id', items) limit_id = self._extract_value_from_items('id', items)
if add_clean_up: if add_clean_up:
self.addCleanup( self.addCleanup(
self.openstack, 'limit delete %s' % limit_id, self.openstack,
cloud=SYSTEM_CLOUD 'limit delete %s' % limit_id,
cloud=SYSTEM_CLOUD,
) )
self.assert_show_fields(items, self.LIMIT_FIELDS) self.assert_show_fields(items, self.LIMIT_FIELDS)

View File

@ -20,124 +20,164 @@ from openstackclient.tests.functional.identity.v3 import common
class ApplicationCredentialTests(common.IdentityTests): class ApplicationCredentialTests(common.IdentityTests):
APPLICATION_CREDENTIAL_FIELDS = [
APPLICATION_CREDENTIAL_FIELDS = ['id', 'name', 'project_id', 'id',
'description', 'roles', 'expires_at', 'name',
'unrestricted'] 'project_id',
APPLICATION_CREDENTIAL_LIST_HEADERS = ['ID', 'Name', 'Project ID', 'description',
'Description', 'Expires At'] 'roles',
'expires_at',
'unrestricted',
]
APPLICATION_CREDENTIAL_LIST_HEADERS = [
'ID',
'Name',
'Project ID',
'Description',
'Expires At',
]
def test_application_credential_create(self): def test_application_credential_create(self):
name = data_utils.rand_name('name') name = data_utils.rand_name('name')
raw_output = self.openstack('application credential create %(name)s' raw_output = self.openstack(
% {'name': name}) 'application credential create %(name)s' % {'name': name}
)
self.addCleanup( self.addCleanup(
self.openstack, self.openstack,
'application credential delete %(name)s' % {'name': name}) 'application credential delete %(name)s' % {'name': name},
)
items = self.parse_show(raw_output) items = self.parse_show(raw_output)
self.assert_show_fields(items, self.APPLICATION_CREDENTIAL_FIELDS) self.assert_show_fields(items, self.APPLICATION_CREDENTIAL_FIELDS)
def _create_role_assignments(self): def _create_role_assignments(self):
try: try:
user = self.openstack('configuration show -f value' user = self.openstack(
' -c auth.username') 'configuration show -f value' ' -c auth.username'
)
except Exception: except Exception:
user = self.openstack('configuration show -f value' user = self.openstack(
' -c auth.user_id') 'configuration show -f value' ' -c auth.user_id'
)
try: try:
user_domain = self.openstack('configuration show -f value' user_domain = self.openstack(
' -c auth.user_domain_name') 'configuration show -f value' ' -c auth.user_domain_name'
)
except Exception: except Exception:
user_domain = self.openstack('configuration show -f value' user_domain = self.openstack(
' -c auth.user_domain_id') 'configuration show -f value' ' -c auth.user_domain_id'
)
try: try:
project = self.openstack('configuration show -f value' project = self.openstack(
' -c auth.project_name') 'configuration show -f value' ' -c auth.project_name'
)
except Exception: except Exception:
project = self.openstack('configuration show -f value' project = self.openstack(
' -c auth.project_id') 'configuration show -f value' ' -c auth.project_id'
)
try: try:
project_domain = self.openstack('configuration show -f value' project_domain = self.openstack(
' -c auth.project_domain_name') 'configuration show -f value' ' -c auth.project_domain_name'
)
except Exception: except Exception:
project_domain = self.openstack('configuration show -f value' project_domain = self.openstack(
' -c auth.project_domain_id') 'configuration show -f value' ' -c auth.project_domain_id'
)
role1 = self._create_dummy_role() role1 = self._create_dummy_role()
role2 = self._create_dummy_role() role2 = self._create_dummy_role()
for role in role1, role2: for role in role1, role2:
self.openstack('role add' self.openstack(
'role add'
' --user %(user)s' ' --user %(user)s'
' --user-domain %(user_domain)s' ' --user-domain %(user_domain)s'
' --project %(project)s' ' --project %(project)s'
' --project-domain %(project_domain)s' ' --project-domain %(project_domain)s'
' %(role)s' ' %(role)s'
% {'user': user, % {
'user': user,
'user_domain': user_domain, 'user_domain': user_domain,
'project': project, 'project': project,
'project_domain': project_domain, 'project_domain': project_domain,
'role': role}) 'role': role,
self.addCleanup(self.openstack, }
)
self.addCleanup(
self.openstack,
'role remove' 'role remove'
' --user %(user)s' ' --user %(user)s'
' --user-domain %(user_domain)s' ' --user-domain %(user_domain)s'
' --project %(project)s' ' --project %(project)s'
' --project-domain %(project_domain)s' ' --project-domain %(project_domain)s'
' %(role)s' ' %(role)s'
% {'user': user, % {
'user': user,
'user_domain': user_domain, 'user_domain': user_domain,
'project': project, 'project': project,
'project_domain': project_domain, 'project_domain': project_domain,
'role': role}) 'role': role,
},
)
return role1, role2 return role1, role2
def test_application_credential_create_with_options(self): def test_application_credential_create_with_options(self):
name = data_utils.rand_name('name') name = data_utils.rand_name('name')
secret = data_utils.rand_name('secret') secret = data_utils.rand_name('secret')
description = data_utils.rand_name('description') description = data_utils.rand_name('description')
tomorrow = (datetime.datetime.utcnow() + tomorrow = (
datetime.timedelta(days=1)).strftime('%Y-%m-%dT%H:%M:%S%z') datetime.datetime.utcnow() + datetime.timedelta(days=1)
).strftime('%Y-%m-%dT%H:%M:%S%z')
role1, role2 = self._create_role_assignments() role1, role2 = self._create_role_assignments()
raw_output = self.openstack('application credential create %(name)s' raw_output = self.openstack(
'application credential create %(name)s'
' --secret %(secret)s' ' --secret %(secret)s'
' --description %(description)s' ' --description %(description)s'
' --expiration %(tomorrow)s' ' --expiration %(tomorrow)s'
' --role %(role1)s' ' --role %(role1)s'
' --role %(role2)s' ' --role %(role2)s'
' --unrestricted' ' --unrestricted'
% {'name': name, % {
'name': name,
'secret': secret, 'secret': secret,
'description': description, 'description': description,
'tomorrow': tomorrow, 'tomorrow': tomorrow,
'role1': role1, 'role1': role1,
'role2': role2}) 'role2': role2,
}
)
self.addCleanup( self.addCleanup(
self.openstack, self.openstack,
'application credential delete %(name)s' % {'name': name}) 'application credential delete %(name)s' % {'name': name},
)
items = self.parse_show(raw_output) items = self.parse_show(raw_output)
self.assert_show_fields(items, self.APPLICATION_CREDENTIAL_FIELDS) self.assert_show_fields(items, self.APPLICATION_CREDENTIAL_FIELDS)
def test_application_credential_delete(self): def test_application_credential_delete(self):
name = data_utils.rand_name('name') name = data_utils.rand_name('name')
self.openstack('application credential create %(name)s' self.openstack(
% {'name': name}) 'application credential create %(name)s' % {'name': name}
raw_output = self.openstack('application credential delete ' )
'%(name)s' % {'name': name}) raw_output = self.openstack(
'application credential delete ' '%(name)s' % {'name': name}
)
self.assertEqual(0, len(raw_output)) self.assertEqual(0, len(raw_output))
def test_application_credential_list(self): def test_application_credential_list(self):
raw_output = self.openstack('application credential list') raw_output = self.openstack('application credential list')
items = self.parse_listing(raw_output) items = self.parse_listing(raw_output)
self.assert_table_structure( self.assert_table_structure(
items, self.APPLICATION_CREDENTIAL_LIST_HEADERS) items, self.APPLICATION_CREDENTIAL_LIST_HEADERS
)
def test_application_credential_show(self): def test_application_credential_show(self):
name = data_utils.rand_name('name') name = data_utils.rand_name('name')
raw_output = self.openstack('application credential create %(name)s' raw_output = self.openstack(
% {'name': name}) 'application credential create %(name)s' % {'name': name}
)
self.addCleanup( self.addCleanup(
self.openstack, self.openstack,
'application credential delete %(name)s' % {'name': name}) 'application credential delete %(name)s' % {'name': name},
raw_output = self.openstack('application credential show ' )
'%(name)s' % {'name': name}) raw_output = self.openstack(
'application credential show ' '%(name)s' % {'name': name}
)
items = self.parse_show(raw_output) items = self.parse_show(raw_output)
self.assert_show_fields(items, self.APPLICATION_CREDENTIAL_FIELDS) self.assert_show_fields(items, self.APPLICATION_CREDENTIAL_FIELDS)

View File

@ -14,7 +14,6 @@ from openstackclient.tests.functional.identity.v3 import common
class CatalogTests(common.IdentityTests): class CatalogTests(common.IdentityTests):
def test_catalog_list(self): def test_catalog_list(self):
raw_output = self.openstack('catalog list') raw_output = self.openstack('catalog list')
items = self.parse_listing(raw_output) items = self.parse_listing(raw_output)

View File

@ -17,15 +17,14 @@ from openstackclient.tests.functional.identity.v3 import common
class DomainTests(common.IdentityTests): class DomainTests(common.IdentityTests):
def test_domain_create(self): def test_domain_create(self):
domain_name = data_utils.rand_name('TestDomain') domain_name = data_utils.rand_name('TestDomain')
raw_output = self.openstack('domain create %s' % domain_name) raw_output = self.openstack('domain create %s' % domain_name)
# disable domain first before deleting it # disable domain first before deleting it
self.addCleanup(self.openstack, self.addCleanup(self.openstack, 'domain delete %s' % domain_name)
'domain delete %s' % domain_name) self.addCleanup(
self.addCleanup(self.openstack, self.openstack, 'domain set --disable %s' % domain_name
'domain set --disable %s' % domain_name) )
items = self.parse_show(raw_output) items = self.parse_show(raw_output)
self.assert_show_fields(items, self.DOMAIN_FIELDS) self.assert_show_fields(items, self.DOMAIN_FIELDS)
@ -52,15 +51,18 @@ class DomainTests(common.IdentityTests):
raw_output = self.openstack('domain set --disable %s' % domain_2) raw_output = self.openstack('domain set --disable %s' % domain_2)
self.assertEqual(0, len(raw_output)) self.assertEqual(0, len(raw_output))
raw_output = self.openstack( raw_output = self.openstack(
'domain delete %s %s' % (domain_1, domain_2)) 'domain delete %s %s' % (domain_1, domain_2)
)
self.assertEqual(0, len(raw_output)) self.assertEqual(0, len(raw_output))
def test_domain_delete_failure(self): def test_domain_delete_failure(self):
domain_name = self._create_dummy_domain() domain_name = self._create_dummy_domain()
# cannot delete enabled domain # cannot delete enabled domain
self.assertRaises(exceptions.CommandFailed, self.assertRaises(
exceptions.CommandFailed,
self.openstack, self.openstack,
'domain delete %s' % domain_name) 'domain delete %s' % domain_name,
)
def test_domain_show(self): def test_domain_show(self):
domain_name = self._create_dummy_domain() domain_name = self._create_dummy_domain()

View File

@ -16,7 +16,6 @@ from openstackclient.tests.functional.identity.v3 import common
class EndpointTests(common.IdentityTests): class EndpointTests(common.IdentityTests):
def test_endpoint_create(self): def test_endpoint_create(self):
self._create_dummy_endpoint(interface='public') self._create_dummy_endpoint(interface='public')
self._create_dummy_endpoint(interface='admin') self._create_dummy_endpoint(interface='admin')
@ -24,15 +23,15 @@ class EndpointTests(common.IdentityTests):
def test_endpoint_delete(self): def test_endpoint_delete(self):
endpoint_id = self._create_dummy_endpoint(add_clean_up=False) endpoint_id = self._create_dummy_endpoint(add_clean_up=False)
raw_output = self.openstack( raw_output = self.openstack('endpoint delete %s' % endpoint_id)
'endpoint delete %s' % endpoint_id)
self.assertEqual(0, len(raw_output)) self.assertEqual(0, len(raw_output))
def test_endpoint_multi_delete(self): def test_endpoint_multi_delete(self):
endpoint_1 = self._create_dummy_endpoint(add_clean_up=False) endpoint_1 = self._create_dummy_endpoint(add_clean_up=False)
endpoint_2 = self._create_dummy_endpoint(add_clean_up=False) endpoint_2 = self._create_dummy_endpoint(add_clean_up=False)
raw_output = self.openstack( raw_output = self.openstack(
'endpoint delete %s %s' % (endpoint_1, endpoint_2)) 'endpoint delete %s %s' % (endpoint_1, endpoint_2)
)
self.assertEqual(0, len(raw_output)) self.assertEqual(0, len(raw_output))
def test_endpoint_list(self): def test_endpoint_list(self):
@ -48,19 +47,18 @@ class EndpointTests(common.IdentityTests):
raw_output = self.openstack( raw_output = self.openstack(
'endpoint add project ' 'endpoint add project '
'%(endpoint_id)s ' '%(endpoint_id)s '
'%(project_id)s' % { '%(project_id)s'
'project_id': project_id, % {'project_id': project_id, 'endpoint_id': endpoint_id}
'endpoint_id': endpoint_id}) )
self.assertEqual(0, len(raw_output)) self.assertEqual(0, len(raw_output))
raw_output = self.openstack( raw_output = self.openstack(
'endpoint list --endpoint %s' % endpoint_id) 'endpoint list --endpoint %s' % endpoint_id
)
self.assertIn(project_id, raw_output) self.assertIn(project_id, raw_output)
items = self.parse_listing(raw_output) items = self.parse_listing(raw_output)
self.assert_table_structure(items, self.assert_table_structure(items, self.ENDPOINT_LIST_PROJECT_HEADERS)
self.ENDPOINT_LIST_PROJECT_HEADERS)
raw_output = self.openstack( raw_output = self.openstack('endpoint list --project %s' % project_id)
'endpoint list --project %s' % project_id)
self.assertIn(endpoint_id, raw_output) self.assertIn(endpoint_id, raw_output)
items = self.parse_listing(raw_output) items = self.parse_listing(raw_output)
self.assert_table_structure(items, self.ENDPOINT_LIST_HEADERS) self.assert_table_structure(items, self.ENDPOINT_LIST_HEADERS)
@ -73,9 +71,13 @@ class EndpointTests(common.IdentityTests):
'--interface %(interface)s ' '--interface %(interface)s '
'--url %(url)s ' '--url %(url)s '
'--disable ' '--disable '
'%(endpoint_id)s' % {'interface': 'admin', '%(endpoint_id)s'
% {
'interface': 'admin',
'url': new_endpoint_url, 'url': new_endpoint_url,
'endpoint_id': endpoint_id}) 'endpoint_id': endpoint_id,
}
)
self.assertEqual(0, len(raw_output)) self.assertEqual(0, len(raw_output))
raw_output = self.openstack('endpoint show %s' % endpoint_id) raw_output = self.openstack('endpoint show %s' % endpoint_id)
endpoint = self.parse_show_as_object(raw_output) endpoint = self.parse_show_as_object(raw_output)
@ -95,15 +97,15 @@ class EndpointTests(common.IdentityTests):
raw_output = self.openstack( raw_output = self.openstack(
'endpoint add project ' 'endpoint add project '
'%(endpoint_id)s ' '%(endpoint_id)s '
'%(project_id)s' % { '%(project_id)s'
'project_id': project_id, % {'project_id': project_id, 'endpoint_id': endpoint_id}
'endpoint_id': endpoint_id}) )
self.assertEqual(0, len(raw_output)) self.assertEqual(0, len(raw_output))
raw_output = self.openstack( raw_output = self.openstack(
'endpoint remove project ' 'endpoint remove project '
'%(endpoint_id)s ' '%(endpoint_id)s '
'%(project_id)s' % { '%(project_id)s'
'project_id': project_id, % {'project_id': project_id, 'endpoint_id': endpoint_id}
'endpoint_id': endpoint_id}) )
self.assertEqual(0, len(raw_output)) self.assertEqual(0, len(raw_output))

View File

@ -16,7 +16,6 @@ from openstackclient.tests.functional.identity.v3 import common
class GroupTests(common.IdentityTests): class GroupTests(common.IdentityTests):
def test_group_create(self): def test_group_create(self):
self._create_dummy_group() self._create_dummy_group()
@ -30,7 +29,8 @@ class GroupTests(common.IdentityTests):
def test_group_list_with_domain(self): def test_group_list_with_domain(self):
group_name = self._create_dummy_group() group_name = self._create_dummy_group()
raw_output = self.openstack( raw_output = self.openstack(
'group list --domain %s' % self.domain_name) 'group list --domain %s' % self.domain_name
)
items = self.parse_listing(raw_output) items = self.parse_listing(raw_output)
self.assert_table_structure(items, common.BASIC_LIST_HEADERS) self.assert_table_structure(items, common.BASIC_LIST_HEADERS)
self.assertIn(group_name, raw_output) self.assertIn(group_name, raw_output)
@ -40,8 +40,8 @@ class GroupTests(common.IdentityTests):
raw_output = self.openstack( raw_output = self.openstack(
'group delete ' 'group delete '
'--domain %(domain)s ' '--domain %(domain)s '
'%(name)s' % {'domain': self.domain_name, '%(name)s' % {'domain': self.domain_name, 'name': group_name}
'name': group_name}) )
self.assertEqual(0, len(raw_output)) self.assertEqual(0, len(raw_output))
def test_group_show(self): def test_group_show(self):
@ -49,8 +49,8 @@ class GroupTests(common.IdentityTests):
raw_output = self.openstack( raw_output = self.openstack(
'group show ' 'group show '
'--domain %(domain)s ' '--domain %(domain)s '
'%(name)s' % {'domain': self.domain_name, '%(name)s' % {'domain': self.domain_name, 'name': group_name}
'name': group_name}) )
items = self.parse_show(raw_output) items = self.parse_show(raw_output)
self.assert_show_fields(items, self.GROUP_FIELDS) self.assert_show_fields(items, self.GROUP_FIELDS)
@ -61,15 +61,19 @@ class GroupTests(common.IdentityTests):
'group set ' 'group set '
'--domain %(domain)s ' '--domain %(domain)s '
'--name %(new_group)s ' '--name %(new_group)s '
'%(group)s' % {'domain': self.domain_name, '%(group)s'
% {
'domain': self.domain_name,
'new_group': new_group_name, 'new_group': new_group_name,
'group': group_name}) 'group': group_name,
}
)
self.assertEqual(0, len(raw_output)) self.assertEqual(0, len(raw_output))
raw_output = self.openstack( raw_output = self.openstack(
'group show ' 'group show '
'--domain %(domain)s ' '--domain %(domain)s '
'%(group)s' % {'domain': self.domain_name, '%(group)s' % {'domain': self.domain_name, 'group': new_group_name}
'group': new_group_name}) )
group = self.parse_show_as_object(raw_output) group = self.parse_show_as_object(raw_output)
self.assertEqual(new_group_name, group['name']) self.assertEqual(new_group_name, group['name'])
# reset group name to make sure it will be cleaned up # reset group name to make sure it will be cleaned up
@ -77,9 +81,13 @@ class GroupTests(common.IdentityTests):
'group set ' 'group set '
'--domain %(domain)s ' '--domain %(domain)s '
'--name %(new_group)s ' '--name %(new_group)s '
'%(group)s' % {'domain': self.domain_name, '%(group)s'
% {
'domain': self.domain_name,
'new_group': group_name, 'new_group': group_name,
'group': new_group_name}) 'group': new_group_name,
}
)
self.assertEqual(0, len(raw_output)) self.assertEqual(0, len(raw_output))
def test_group_add_user(self): def test_group_add_user(self):
@ -89,19 +97,27 @@ class GroupTests(common.IdentityTests):
'group add user ' 'group add user '
'--group-domain %(group_domain)s ' '--group-domain %(group_domain)s '
'--user-domain %(user_domain)s ' '--user-domain %(user_domain)s '
'%(group)s %(user)s' % {'group_domain': self.domain_name, '%(group)s %(user)s'
% {
'group_domain': self.domain_name,
'user_domain': self.domain_name, 'user_domain': self.domain_name,
'group': group_name, 'group': group_name,
'user': username}) 'user': username,
}
)
self.addCleanup( self.addCleanup(
self.openstack, self.openstack,
'group remove user ' 'group remove user '
'--group-domain %(group_domain)s ' '--group-domain %(group_domain)s '
'--user-domain %(user_domain)s ' '--user-domain %(user_domain)s '
'%(group)s %(user)s' % {'group_domain': self.domain_name, '%(group)s %(user)s'
% {
'group_domain': self.domain_name,
'user_domain': self.domain_name, 'user_domain': self.domain_name,
'group': group_name, 'group': group_name,
'user': username}) 'user': username,
},
)
self.assertOutput('', raw_output) self.assertOutput('', raw_output)
def test_group_contains_user(self): def test_group_contains_user(self):
@ -111,32 +127,45 @@ class GroupTests(common.IdentityTests):
'group add user ' 'group add user '
'--group-domain %(group_domain)s ' '--group-domain %(group_domain)s '
'--user-domain %(user_domain)s ' '--user-domain %(user_domain)s '
'%(group)s %(user)s' % {'group_domain': self.domain_name, '%(group)s %(user)s'
% {
'group_domain': self.domain_name,
'user_domain': self.domain_name, 'user_domain': self.domain_name,
'group': group_name, 'group': group_name,
'user': username}) 'user': username,
}
)
self.addCleanup( self.addCleanup(
self.openstack, self.openstack,
'group remove user ' 'group remove user '
'--group-domain %(group_domain)s ' '--group-domain %(group_domain)s '
'--user-domain %(user_domain)s ' '--user-domain %(user_domain)s '
'%(group)s %(user)s' % {'group_domain': self.domain_name, '%(group)s %(user)s'
% {
'group_domain': self.domain_name,
'user_domain': self.domain_name, 'user_domain': self.domain_name,
'group': group_name, 'group': group_name,
'user': username}) 'user': username,
},
)
self.assertOutput('', raw_output) self.assertOutput('', raw_output)
raw_output = self.openstack( raw_output = self.openstack(
'group contains user ' 'group contains user '
'--group-domain %(group_domain)s ' '--group-domain %(group_domain)s '
'--user-domain %(user_domain)s ' '--user-domain %(user_domain)s '
'%(group)s %(user)s' % {'group_domain': self.domain_name, '%(group)s %(user)s'
% {
'group_domain': self.domain_name,
'user_domain': self.domain_name, 'user_domain': self.domain_name,
'group': group_name, 'group': group_name,
'user': username}) 'user': username,
}
)
self.assertEqual( self.assertEqual(
'%(user)s in group %(group)s\n' % {'user': username, '%(user)s in group %(group)s\n'
'group': group_name}, % {'user': username, 'group': group_name},
raw_output) raw_output,
)
def test_group_remove_user(self): def test_group_remove_user(self):
group_name = self._create_dummy_group() group_name = self._create_dummy_group()
@ -145,17 +174,25 @@ class GroupTests(common.IdentityTests):
'group add user ' 'group add user '
'--group-domain %(group_domain)s ' '--group-domain %(group_domain)s '
'--user-domain %(user_domain)s ' '--user-domain %(user_domain)s '
'%(group)s %(user)s' % {'group_domain': self.domain_name, '%(group)s %(user)s'
% {
'group_domain': self.domain_name,
'user_domain': self.domain_name, 'user_domain': self.domain_name,
'group': group_name, 'group': group_name,
'user': username}) 'user': username,
}
)
remove_raw_output = self.openstack( remove_raw_output = self.openstack(
'group remove user ' 'group remove user '
'--group-domain %(group_domain)s ' '--group-domain %(group_domain)s '
'--user-domain %(user_domain)s ' '--user-domain %(user_domain)s '
'%(group)s %(user)s' % {'group_domain': self.domain_name, '%(group)s %(user)s'
% {
'group_domain': self.domain_name,
'user_domain': self.domain_name, 'user_domain': self.domain_name,
'group': group_name, 'group': group_name,
'user': username}) 'user': username,
}
)
self.assertOutput('', add_raw_output) self.assertOutput('', add_raw_output)
self.assertOutput('', remove_raw_output) self.assertOutput('', remove_raw_output)

View File

@ -23,21 +23,24 @@ class IdentityProviderTests(common.IdentityTests):
def test_idp_delete(self): def test_idp_delete(self):
identity_provider = self._create_dummy_idp(add_clean_up=False) identity_provider = self._create_dummy_idp(add_clean_up=False)
raw_output = self.openstack('identity provider delete %s' raw_output = self.openstack(
% identity_provider) 'identity provider delete %s' % identity_provider
)
self.assertEqual(0, len(raw_output)) self.assertEqual(0, len(raw_output))
def test_idp_multi_delete(self): def test_idp_multi_delete(self):
idp_1 = self._create_dummy_idp(add_clean_up=False) idp_1 = self._create_dummy_idp(add_clean_up=False)
idp_2 = self._create_dummy_idp(add_clean_up=False) idp_2 = self._create_dummy_idp(add_clean_up=False)
raw_output = self.openstack( raw_output = self.openstack(
'identity provider delete %s %s' % (idp_1, idp_2)) 'identity provider delete %s %s' % (idp_1, idp_2)
)
self.assertEqual(0, len(raw_output)) self.assertEqual(0, len(raw_output))
def test_idp_show(self): def test_idp_show(self):
identity_provider = self._create_dummy_idp(add_clean_up=True) identity_provider = self._create_dummy_idp(add_clean_up=True)
raw_output = self.openstack('identity provider show %s' raw_output = self.openstack(
% identity_provider) 'identity provider show %s' % identity_provider
)
items = self.parse_show(raw_output) items = self.parse_show(raw_output)
self.assert_show_fields(items, self.IDENTITY_PROVIDER_FIELDS) self.assert_show_fields(items, self.IDENTITY_PROVIDER_FIELDS)
@ -50,13 +53,18 @@ class IdentityProviderTests(common.IdentityTests):
def test_idp_set(self): def test_idp_set(self):
identity_provider = self._create_dummy_idp(add_clean_up=True) identity_provider = self._create_dummy_idp(add_clean_up=True)
new_remoteid = data_utils.rand_name('newRemoteId') new_remoteid = data_utils.rand_name('newRemoteId')
raw_output = self.openstack('identity provider set ' raw_output = self.openstack(
'identity provider set '
'%(identity-provider)s ' '%(identity-provider)s '
'--remote-id %(remote-id)s ' '--remote-id %(remote-id)s '
% {'identity-provider': identity_provider, % {
'remote-id': new_remoteid}) 'identity-provider': identity_provider,
'remote-id': new_remoteid,
}
)
self.assertEqual(0, len(raw_output)) self.assertEqual(0, len(raw_output))
raw_output = self.openstack('identity provider show %s' raw_output = self.openstack(
% identity_provider) 'identity provider show %s' % identity_provider
)
updated_value = self.parse_show_as_object(raw_output) updated_value = self.parse_show_as_object(raw_output)
self.assertIn(new_remoteid, updated_value['remote_ids']) self.assertIn(new_remoteid, updated_value['remote_ids'])

View File

@ -20,12 +20,11 @@ SYSTEM_CLOUD = os.environ.get('OS_SYSTEM_CLOUD', 'devstack-system-admin')
class LimitTestCase(common.IdentityTests): class LimitTestCase(common.IdentityTests):
def test_limit_create_with_service_name(self): def test_limit_create_with_service_name(self):
registered_limit_id = self._create_dummy_registered_limit() registered_limit_id = self._create_dummy_registered_limit()
raw_output = self.openstack( raw_output = self.openstack(
'registered limit show %s' % registered_limit_id, 'registered limit show %s' % registered_limit_id,
cloud=SYSTEM_CLOUD cloud=SYSTEM_CLOUD,
) )
items = self.parse_show(raw_output) items = self.parse_show(raw_output)
service_id = self._extract_value_from_items('service_id', items) service_id = self._extract_value_from_items('service_id', items)
@ -44,7 +43,7 @@ class LimitTestCase(common.IdentityTests):
'project_id': project_id, 'project_id': project_id,
'service_name': service_name, 'service_name': service_name,
'resource_name': resource_name, 'resource_name': resource_name,
'resource_limit': 15 'resource_limit': 15,
} }
raw_output = self.openstack( raw_output = self.openstack(
'limit create' 'limit create'
@ -52,14 +51,12 @@ class LimitTestCase(common.IdentityTests):
' --service %(service_name)s' ' --service %(service_name)s'
' --resource-limit %(resource_limit)s' ' --resource-limit %(resource_limit)s'
' %(resource_name)s' % params, ' %(resource_name)s' % params,
cloud=SYSTEM_CLOUD cloud=SYSTEM_CLOUD,
) )
items = self.parse_show(raw_output) items = self.parse_show(raw_output)
limit_id = self._extract_value_from_items('id', items) limit_id = self._extract_value_from_items('id', items)
self.addCleanup( self.addCleanup(
self.openstack, self.openstack, 'limit delete %s' % limit_id, cloud=SYSTEM_CLOUD
'limit delete %s' % limit_id,
cloud=SYSTEM_CLOUD
) )
self.assert_show_fields(items, self.LIMIT_FIELDS) self.assert_show_fields(items, self.LIMIT_FIELDS)
@ -68,7 +65,7 @@ class LimitTestCase(common.IdentityTests):
registered_limit_id = self._create_dummy_registered_limit() registered_limit_id = self._create_dummy_registered_limit()
raw_output = self.openstack( raw_output = self.openstack(
'registered limit show %s' % registered_limit_id, 'registered limit show %s' % registered_limit_id,
cloud=SYSTEM_CLOUD cloud=SYSTEM_CLOUD,
) )
items = self.parse_show(raw_output) items = self.parse_show(raw_output)
service_id = self._extract_value_from_items('service_id', items) service_id = self._extract_value_from_items('service_id', items)
@ -84,7 +81,7 @@ class LimitTestCase(common.IdentityTests):
'project_name': project_name, 'project_name': project_name,
'service_name': service_name, 'service_name': service_name,
'resource_name': resource_name, 'resource_name': resource_name,
'resource_limit': 15 'resource_limit': 15,
} }
raw_output = self.openstack( raw_output = self.openstack(
'limit create' 'limit create'
@ -92,14 +89,12 @@ class LimitTestCase(common.IdentityTests):
' --service %(service_name)s' ' --service %(service_name)s'
' --resource-limit %(resource_limit)s' ' --resource-limit %(resource_limit)s'
' %(resource_name)s' % params, ' %(resource_name)s' % params,
cloud=SYSTEM_CLOUD cloud=SYSTEM_CLOUD,
) )
items = self.parse_show(raw_output) items = self.parse_show(raw_output)
limit_id = self._extract_value_from_items('id', items) limit_id = self._extract_value_from_items('id', items)
self.addCleanup( self.addCleanup(
self.openstack, self.openstack, 'limit delete %s' % limit_id, cloud=SYSTEM_CLOUD
'limit delete %s' % limit_id,
cloud=SYSTEM_CLOUD
) )
self.assert_show_fields(items, self.LIMIT_FIELDS) self.assert_show_fields(items, self.LIMIT_FIELDS)
@ -117,14 +112,14 @@ class LimitTestCase(common.IdentityTests):
params = { params = {
'region_id': region_id, 'region_id': region_id,
'registered_limit_id': registered_limit_id 'registered_limit_id': registered_limit_id,
} }
raw_output = self.openstack( raw_output = self.openstack(
'registered limit set' 'registered limit set'
' %(registered_limit_id)s' ' %(registered_limit_id)s'
' --region %(region_id)s' % params, ' --region %(region_id)s' % params,
cloud=SYSTEM_CLOUD cloud=SYSTEM_CLOUD,
) )
items = self.parse_show(raw_output) items = self.parse_show(raw_output)
service_id = self._extract_value_from_items('service_id', items) service_id = self._extract_value_from_items('service_id', items)
@ -142,7 +137,7 @@ class LimitTestCase(common.IdentityTests):
'resource_name': resource_name, 'resource_name': resource_name,
'resource_limit': 15, 'resource_limit': 15,
'region_id': region_id, 'region_id': region_id,
'description': description 'description': description,
} }
raw_output = self.openstack( raw_output = self.openstack(
'limit create' 'limit create'
@ -152,14 +147,12 @@ class LimitTestCase(common.IdentityTests):
' --region %(region_id)s' ' --region %(region_id)s'
' --description %(description)s' ' --description %(description)s'
' %(resource_name)s' % params, ' %(resource_name)s' % params,
cloud=SYSTEM_CLOUD cloud=SYSTEM_CLOUD,
) )
items = self.parse_show(raw_output) items = self.parse_show(raw_output)
limit_id = self._extract_value_from_items('id', items) limit_id = self._extract_value_from_items('id', items)
self.addCleanup( self.addCleanup(
self.openstack, self.openstack, 'limit delete %s' % limit_id, cloud=SYSTEM_CLOUD
'limit delete %s' % limit_id,
cloud=SYSTEM_CLOUD
) )
self.assert_show_fields(items, self.LIMIT_FIELDS) self.assert_show_fields(items, self.LIMIT_FIELDS)
@ -167,8 +160,7 @@ class LimitTestCase(common.IdentityTests):
def test_limit_show(self): def test_limit_show(self):
limit_id = self._create_dummy_limit() limit_id = self._create_dummy_limit()
raw_output = self.openstack( raw_output = self.openstack(
'limit show %s' % limit_id, 'limit show %s' % limit_id, cloud=SYSTEM_CLOUD
cloud=SYSTEM_CLOUD
) )
items = self.parse_show(raw_output) items = self.parse_show(raw_output)
self.assert_show_fields(items, self.LIMIT_FIELDS) self.assert_show_fields(items, self.LIMIT_FIELDS)
@ -178,14 +170,14 @@ class LimitTestCase(common.IdentityTests):
params = { params = {
'description': data_utils.arbitrary_string(), 'description': data_utils.arbitrary_string(),
'limit_id': limit_id 'limit_id': limit_id,
} }
raw_output = self.openstack( raw_output = self.openstack(
'limit set' 'limit set'
' --description %(description)s' ' --description %(description)s'
' %(limit_id)s' % params, ' %(limit_id)s' % params,
cloud=SYSTEM_CLOUD cloud=SYSTEM_CLOUD,
) )
items = self.parse_show(raw_output) items = self.parse_show(raw_output)
self.assert_show_fields(items, self.LIMIT_FIELDS) self.assert_show_fields(items, self.LIMIT_FIELDS)
@ -193,16 +185,13 @@ class LimitTestCase(common.IdentityTests):
def test_limit_set_resource_limit(self): def test_limit_set_resource_limit(self):
limit_id = self._create_dummy_limit() limit_id = self._create_dummy_limit()
params = { params = {'resource_limit': 5, 'limit_id': limit_id}
'resource_limit': 5,
'limit_id': limit_id
}
raw_output = self.openstack( raw_output = self.openstack(
'limit set' 'limit set'
' --resource-limit %(resource_limit)s' ' --resource-limit %(resource_limit)s'
' %(limit_id)s' % params, ' %(limit_id)s' % params,
cloud=SYSTEM_CLOUD cloud=SYSTEM_CLOUD,
) )
items = self.parse_show(raw_output) items = self.parse_show(raw_output)
self.assert_show_fields(items, self.LIMIT_FIELDS) self.assert_show_fields(items, self.LIMIT_FIELDS)
@ -216,6 +205,6 @@ class LimitTestCase(common.IdentityTests):
def test_limit_delete(self): def test_limit_delete(self):
limit_id = self._create_dummy_limit(add_clean_up=False) limit_id = self._create_dummy_limit(add_clean_up=False)
raw_output = self.openstack( raw_output = self.openstack(
'limit delete %s' % limit_id, 'limit delete %s' % limit_id, cloud=SYSTEM_CLOUD
cloud=SYSTEM_CLOUD) )
self.assertEqual(0, len(raw_output)) self.assertEqual(0, len(raw_output))

View File

@ -16,7 +16,6 @@ from openstackclient.tests.functional.identity.v3 import common
class ProjectTests(common.IdentityTests): class ProjectTests(common.IdentityTests):
def test_project_create(self): def test_project_create(self):
project_name = data_utils.rand_name('TestProject') project_name = data_utils.rand_name('TestProject')
description = data_utils.rand_name('description') description = data_utils.rand_name('description')
@ -27,15 +26,18 @@ class ProjectTests(common.IdentityTests):
'--enable ' '--enable '
'--property k1=v1 ' '--property k1=v1 '
'--property k2=v2 ' '--property k2=v2 '
'%(name)s' % {'domain': self.domain_name, '%(name)s'
% {
'domain': self.domain_name,
'description': description, 'description': description,
'name': project_name}) 'name': project_name,
}
)
self.addCleanup( self.addCleanup(
self.openstack, self.openstack,
'project delete ' 'project delete '
'--domain %(domain)s ' '--domain %(domain)s '
'%(name)s' % {'domain': self.domain_name, '%(name)s' % {'domain': self.domain_name, 'name': project_name},
'name': project_name}
) )
items = self.parse_show(raw_output) items = self.parse_show(raw_output)
show_fields = list(self.PROJECT_FIELDS) show_fields = list(self.PROJECT_FIELDS)
@ -50,8 +52,8 @@ class ProjectTests(common.IdentityTests):
raw_output = self.openstack( raw_output = self.openstack(
'project delete ' 'project delete '
'--domain %(domain)s ' '--domain %(domain)s '
'%(name)s' % {'domain': self.domain_name, '%(name)s' % {'domain': self.domain_name, 'name': project_name}
'name': project_name}) )
self.assertEqual(0, len(raw_output)) self.assertEqual(0, len(raw_output))
def test_project_list(self): def test_project_list(self):
@ -62,7 +64,8 @@ class ProjectTests(common.IdentityTests):
def test_project_list_with_domain(self): def test_project_list_with_domain(self):
project_name = self._create_dummy_project() project_name = self._create_dummy_project()
raw_output = self.openstack( raw_output = self.openstack(
'project list --domain %s' % self.domain_name) 'project list --domain %s' % self.domain_name
)
items = self.parse_listing(raw_output) items = self.parse_listing(raw_output)
self.assert_table_structure(items, common.BASIC_LIST_HEADERS) self.assert_table_structure(items, common.BASIC_LIST_HEADERS)
self.assertIn(project_name, raw_output) self.assertIn(project_name, raw_output)
@ -76,15 +79,14 @@ class ProjectTests(common.IdentityTests):
'--name %(new_name)s ' '--name %(new_name)s '
'--disable ' '--disable '
'--property k0=v0 ' '--property k0=v0 '
'%(name)s' % {'new_name': new_project_name, '%(name)s' % {'new_name': new_project_name, 'name': project_name}
'name': project_name}) )
self.assertEqual(0, len(raw_output)) self.assertEqual(0, len(raw_output))
# check project details # check project details
raw_output = self.openstack( raw_output = self.openstack(
'project show ' 'project show '
'--domain %(domain)s ' '--domain %(domain)s '
'%(name)s' % {'domain': self.domain_name, '%(name)s' % {'domain': self.domain_name, 'name': new_project_name}
'name': new_project_name}
) )
items = self.parse_show(raw_output) items = self.parse_show(raw_output)
fields = list(self.PROJECT_FIELDS) fields = list(self.PROJECT_FIELDS)
@ -99,15 +101,16 @@ class ProjectTests(common.IdentityTests):
'project set ' 'project set '
'--name %(new_name)s ' '--name %(new_name)s '
'--enable ' '--enable '
'%(name)s' % {'new_name': project_name, '%(name)s' % {'new_name': project_name, 'name': new_project_name}
'name': new_project_name}) )
def test_project_show(self): def test_project_show(self):
raw_output = self.openstack( raw_output = self.openstack(
'project show ' 'project show '
'--domain %(domain)s ' '--domain %(domain)s '
'%(name)s' % {'domain': self.domain_name, '%(name)s'
'name': self.project_name}) % {'domain': self.domain_name, 'name': self.project_name}
)
items = self.parse_show(raw_output) items = self.parse_show(raw_output)
self.assert_show_fields(items, self.PROJECT_FIELDS) self.assert_show_fields(items, self.PROJECT_FIELDS)
@ -116,10 +119,10 @@ class ProjectTests(common.IdentityTests):
'project show ' 'project show '
'--parents --children ' '--parents --children '
'--domain %(domain)s ' '--domain %(domain)s '
'%(name)s' % {'domain': self.domain_name, '%(name)s'
'name': self.project_name}, % {'domain': self.domain_name, 'name': self.project_name},
parse_output=True, parse_output=True,
) )
for attr_name in (self.PROJECT_FIELDS + ['parents', 'subtree']): for attr_name in self.PROJECT_FIELDS + ['parents', 'subtree']:
self.assertIn(attr_name, output) self.assertIn(attr_name, output)
self.assertEqual(self.project_name, output.get('name')) self.assertEqual(self.project_name, output.get('name'))

View File

@ -14,7 +14,6 @@ from openstackclient.tests.functional.identity.v3 import common
class RegionTests(common.IdentityTests): class RegionTests(common.IdentityTests):
def test_region_create(self): def test_region_create(self):
self._create_dummy_region() self._create_dummy_region()
@ -31,7 +30,8 @@ class RegionTests(common.IdentityTests):
region_1 = self._create_dummy_region(add_clean_up=False) region_1 = self._create_dummy_region(add_clean_up=False)
region_2 = self._create_dummy_region(add_clean_up=False) region_2 = self._create_dummy_region(add_clean_up=False)
raw_output = self.openstack( raw_output = self.openstack(
'region delete %s %s' % (region_1, region_2)) 'region delete %s %s' % (region_1, region_2)
)
self.assertEqual(0, len(raw_output)) self.assertEqual(0, len(raw_output))
def test_region_list(self): def test_region_list(self):
@ -53,8 +53,9 @@ class RegionTests(common.IdentityTests):
raw_output = self.openstack( raw_output = self.openstack(
'region set ' 'region set '
'--parent-region %(parent_region)s ' '--parent-region %(parent_region)s '
'%(region)s' % {'parent_region': new_parent_region_id, '%(region)s'
'region': region_id}) % {'parent_region': new_parent_region_id, 'region': region_id}
)
self.assertEqual(0, len(raw_output)) self.assertEqual(0, len(raw_output))
# check updated region details # check updated region details
raw_output = self.openstack('region show %s' % region_id) raw_output = self.openstack('region show %s' % region_id)

View File

@ -20,15 +20,13 @@ SYSTEM_CLOUD = os.environ.get('OS_SYSTEM_CLOUD', 'devstack-system-admin')
class RegisteredLimitTestCase(common.IdentityTests): class RegisteredLimitTestCase(common.IdentityTests):
def test_registered_limit_create_with_service_name(self): def test_registered_limit_create_with_service_name(self):
self._create_dummy_registered_limit() self._create_dummy_registered_limit()
def test_registered_limit_create_with_service_id(self): def test_registered_limit_create_with_service_id(self):
service_name = self._create_dummy_service() service_name = self._create_dummy_service()
raw_output = self.openstack( raw_output = self.openstack(
'service show' 'service show' ' %(service_name)s' % {'service_name': service_name}
' %(service_name)s' % {'service_name': service_name}
) )
service_items = self.parse_show(raw_output) service_items = self.parse_show(raw_output)
service_id = self._extract_value_from_items('id', service_items) service_id = self._extract_value_from_items('id', service_items)
@ -37,22 +35,22 @@ class RegisteredLimitTestCase(common.IdentityTests):
'registered limit create' 'registered limit create'
' --service %(service_id)s' ' --service %(service_id)s'
' --default-limit %(default_limit)s' ' --default-limit %(default_limit)s'
' %(resource_name)s' % { ' %(resource_name)s'
% {
'service_id': service_id, 'service_id': service_id,
'default_limit': 10, 'default_limit': 10,
'resource_name': 'cores' 'resource_name': 'cores',
}, },
cloud=SYSTEM_CLOUD cloud=SYSTEM_CLOUD,
) )
items = self.parse_show(raw_output) items = self.parse_show(raw_output)
registered_limit_id = self._extract_value_from_items('id', items) registered_limit_id = self._extract_value_from_items('id', items)
self.addCleanup( self.addCleanup(
self.openstack, self.openstack,
'registered limit delete' 'registered limit delete'
' %(registered_limit_id)s' % { ' %(registered_limit_id)s'
'registered_limit_id': registered_limit_id % {'registered_limit_id': registered_limit_id},
}, cloud=SYSTEM_CLOUD,
cloud=SYSTEM_CLOUD
) )
self.assert_show_fields(items, self.REGISTERED_LIMIT_FIELDS) self.assert_show_fields(items, self.REGISTERED_LIMIT_FIELDS)
@ -65,7 +63,7 @@ class RegisteredLimitTestCase(common.IdentityTests):
'resource_name': 'cores', 'resource_name': 'cores',
'default_limit': 10, 'default_limit': 10,
'description': 'default limit for cores', 'description': 'default limit for cores',
'region_id': region_id 'region_id': region_id,
} }
raw_output = self.openstack( raw_output = self.openstack(
@ -75,16 +73,15 @@ class RegisteredLimitTestCase(common.IdentityTests):
' --service %(service_name)s' ' --service %(service_name)s'
' --default-limit %(default_limit)s' ' --default-limit %(default_limit)s'
' %(resource_name)s' % params, ' %(resource_name)s' % params,
cloud=SYSTEM_CLOUD cloud=SYSTEM_CLOUD,
) )
items = self.parse_show(raw_output) items = self.parse_show(raw_output)
registered_limit_id = self._extract_value_from_items('id', items) registered_limit_id = self._extract_value_from_items('id', items)
self.addCleanup( self.addCleanup(
self.openstack, self.openstack,
'registered limit delete %(registered_limit_id)s' % { 'registered limit delete %(registered_limit_id)s'
'registered_limit_id': registered_limit_id % {'registered_limit_id': registered_limit_id},
}, cloud=SYSTEM_CLOUD,
cloud=SYSTEM_CLOUD
) )
self.assert_show_fields(items, self.REGISTERED_LIMIT_FIELDS) self.assert_show_fields(items, self.REGISTERED_LIMIT_FIELDS)
@ -92,9 +89,8 @@ class RegisteredLimitTestCase(common.IdentityTests):
def test_registered_limit_show(self): def test_registered_limit_show(self):
registered_limit_id = self._create_dummy_registered_limit() registered_limit_id = self._create_dummy_registered_limit()
raw_output = self.openstack( raw_output = self.openstack(
'registered limit show %(registered_limit_id)s' % { 'registered limit show %(registered_limit_id)s'
'registered_limit_id': registered_limit_id % {'registered_limit_id': registered_limit_id}
}
) )
items = self.parse_show(raw_output) items = self.parse_show(raw_output)
self.assert_show_fields(items, self.REGISTERED_LIMIT_FIELDS) self.assert_show_fields(items, self.REGISTERED_LIMIT_FIELDS)
@ -105,13 +101,13 @@ class RegisteredLimitTestCase(common.IdentityTests):
params = { params = {
'registered_limit_id': registered_limit_id, 'registered_limit_id': registered_limit_id,
'region_id': region_id 'region_id': region_id,
} }
raw_output = self.openstack( raw_output = self.openstack(
'registered limit set' 'registered limit set'
' %(registered_limit_id)s' ' %(registered_limit_id)s'
' --region %(region_id)s' % params, ' --region %(region_id)s' % params,
cloud=SYSTEM_CLOUD cloud=SYSTEM_CLOUD,
) )
items = self.parse_show(raw_output) items = self.parse_show(raw_output)
self.assert_show_fields(items, self.REGISTERED_LIMIT_FIELDS) self.assert_show_fields(items, self.REGISTERED_LIMIT_FIELDS)
@ -120,13 +116,13 @@ class RegisteredLimitTestCase(common.IdentityTests):
registered_limit_id = self._create_dummy_registered_limit() registered_limit_id = self._create_dummy_registered_limit()
params = { params = {
'registered_limit_id': registered_limit_id, 'registered_limit_id': registered_limit_id,
'description': 'updated description' 'description': 'updated description',
} }
raw_output = self.openstack( raw_output = self.openstack(
'registered limit set' 'registered limit set'
' %(registered_limit_id)s' ' %(registered_limit_id)s'
' --description \'%(description)s\'' % params, ' --description \'%(description)s\'' % params,
cloud=SYSTEM_CLOUD cloud=SYSTEM_CLOUD,
) )
items = self.parse_show(raw_output) items = self.parse_show(raw_output)
self.assert_show_fields(items, self.REGISTERED_LIMIT_FIELDS) self.assert_show_fields(items, self.REGISTERED_LIMIT_FIELDS)
@ -136,13 +132,13 @@ class RegisteredLimitTestCase(common.IdentityTests):
service_name = self._create_dummy_service() service_name = self._create_dummy_service()
params = { params = {
'registered_limit_id': registered_limit_id, 'registered_limit_id': registered_limit_id,
'service': service_name 'service': service_name,
} }
raw_output = self.openstack( raw_output = self.openstack(
'registered limit set' 'registered limit set'
' %(registered_limit_id)s' ' %(registered_limit_id)s'
' --service %(service)s' % params, ' --service %(service)s' % params,
cloud=SYSTEM_CLOUD cloud=SYSTEM_CLOUD,
) )
items = self.parse_show(raw_output) items = self.parse_show(raw_output)
self.assert_show_fields(items, self.REGISTERED_LIMIT_FIELDS) self.assert_show_fields(items, self.REGISTERED_LIMIT_FIELDS)
@ -151,13 +147,13 @@ class RegisteredLimitTestCase(common.IdentityTests):
registered_limit_id = self._create_dummy_registered_limit() registered_limit_id = self._create_dummy_registered_limit()
params = { params = {
'registered_limit_id': registered_limit_id, 'registered_limit_id': registered_limit_id,
'default_limit': 20 'default_limit': 20,
} }
raw_output = self.openstack( raw_output = self.openstack(
'registered limit set' 'registered limit set'
' %(registered_limit_id)s' ' %(registered_limit_id)s'
' --default-limit %(default_limit)s' % params, ' --default-limit %(default_limit)s' % params,
cloud=SYSTEM_CLOUD cloud=SYSTEM_CLOUD,
) )
items = self.parse_show(raw_output) items = self.parse_show(raw_output)
self.assert_show_fields(items, self.REGISTERED_LIMIT_FIELDS) self.assert_show_fields(items, self.REGISTERED_LIMIT_FIELDS)
@ -167,13 +163,13 @@ class RegisteredLimitTestCase(common.IdentityTests):
resource_name = data_utils.rand_name('resource_name') resource_name = data_utils.rand_name('resource_name')
params = { params = {
'registered_limit_id': registered_limit_id, 'registered_limit_id': registered_limit_id,
'resource_name': resource_name 'resource_name': resource_name,
} }
raw_output = self.openstack( raw_output = self.openstack(
'registered limit set' 'registered limit set'
' %(registered_limit_id)s' ' %(registered_limit_id)s'
' --resource-name %(resource_name)s' % params, ' --resource-name %(resource_name)s' % params,
cloud=SYSTEM_CLOUD cloud=SYSTEM_CLOUD,
) )
items = self.parse_show(raw_output) items = self.parse_show(raw_output)
self.assert_show_fields(items, self.REGISTERED_LIMIT_FIELDS) self.assert_show_fields(items, self.REGISTERED_LIMIT_FIELDS)
@ -190,9 +186,8 @@ class RegisteredLimitTestCase(common.IdentityTests):
) )
raw_output = self.openstack( raw_output = self.openstack(
'registered limit delete' 'registered limit delete'
' %(registered_limit_id)s' % { ' %(registered_limit_id)s'
'registered_limit_id': registered_limit_id % {'registered_limit_id': registered_limit_id},
}, cloud=SYSTEM_CLOUD,
cloud=SYSTEM_CLOUD
) )
self.assertEqual(0, len(raw_output)) self.assertEqual(0, len(raw_output))

View File

@ -16,7 +16,6 @@ from openstackclient.tests.functional.identity.v3 import common
class RoleTests(common.IdentityTests): class RoleTests(common.IdentityTests):
def test_role_create(self): def test_role_create(self):
self._create_dummy_role() self._create_dummy_role()
@ -26,8 +25,8 @@ class RoleTests(common.IdentityTests):
raw_output = self.openstack( raw_output = self.openstack(
'role create ' 'role create '
'--description %(description)s ' '--description %(description)s '
'%(name)s' % {'description': description, '%(name)s' % {'description': description, 'name': role_name}
'name': role_name}) )
role = self.parse_show_as_object(raw_output) role = self.parse_show_as_object(raw_output)
self.addCleanup(self.openstack, 'role delete %s' % role['id']) self.addCleanup(self.openstack, 'role delete %s' % role['id'])
items = self.parse_show(raw_output) items = self.parse_show(raw_output)
@ -56,7 +55,8 @@ class RoleTests(common.IdentityTests):
role_name = self._create_dummy_role() role_name = self._create_dummy_role()
new_role_name = data_utils.rand_name('NewTestRole') new_role_name = data_utils.rand_name('NewTestRole')
raw_output = self.openstack( raw_output = self.openstack(
'role set --name %s %s' % (new_role_name, role_name)) 'role set --name %s %s' % (new_role_name, role_name)
)
self.assertEqual(0, len(raw_output)) self.assertEqual(0, len(raw_output))
raw_output = self.openstack('role show %s' % new_role_name) raw_output = self.openstack('role show %s' % new_role_name)
role = self.parse_show_as_object(raw_output) role = self.parse_show_as_object(raw_output)
@ -65,8 +65,9 @@ class RoleTests(common.IdentityTests):
def test_role_set_description(self): def test_role_set_description(self):
role_name = self._create_dummy_role() role_name = self._create_dummy_role()
description = data_utils.rand_name("NewDescription") description = data_utils.rand_name("NewDescription")
raw_output = self.openstack('role set --description %s %s' raw_output = self.openstack(
% (description, role_name)) 'role set --description %s %s' % (description, role_name)
)
self.assertEqual(0, len(raw_output)) self.assertEqual(0, len(raw_output))
raw_output = self.openstack('role show %s' % role_name) raw_output = self.openstack('role show %s' % role_name)
role = self.parse_show_as_object(raw_output) role = self.parse_show_as_object(raw_output)
@ -81,11 +82,15 @@ class RoleTests(common.IdentityTests):
'--project-domain %(project_domain)s ' '--project-domain %(project_domain)s '
'--user %(user)s ' '--user %(user)s '
'--user-domain %(user_domain)s ' '--user-domain %(user_domain)s '
'%(role)s' % {'project': self.project_name, '%(role)s'
% {
'project': self.project_name,
'project_domain': self.domain_name, 'project_domain': self.domain_name,
'user': username, 'user': username,
'user_domain': self.domain_name, 'user_domain': self.domain_name,
'role': role_name}) 'role': role_name,
}
)
self.addCleanup( self.addCleanup(
self.openstack, self.openstack,
'role remove ' 'role remove '
@ -93,11 +98,15 @@ class RoleTests(common.IdentityTests):
'--project-domain %(project_domain)s ' '--project-domain %(project_domain)s '
'--user %(user)s ' '--user %(user)s '
'--user-domain %(user_domain)s ' '--user-domain %(user_domain)s '
'%(role)s' % {'project': self.project_name, '%(role)s'
% {
'project': self.project_name,
'project_domain': self.domain_name, 'project_domain': self.domain_name,
'user': username, 'user': username,
'user_domain': self.domain_name, 'user_domain': self.domain_name,
'role': role_name}) 'role': role_name,
},
)
self.assertEqual(0, len(raw_output)) self.assertEqual(0, len(raw_output))
def test_role_remove(self): def test_role_remove(self):
@ -109,22 +118,30 @@ class RoleTests(common.IdentityTests):
'--project-domain %(project_domain)s ' '--project-domain %(project_domain)s '
'--user %(user)s ' '--user %(user)s '
'--user-domain %(user_domain)s ' '--user-domain %(user_domain)s '
'%(role)s' % {'project': self.project_name, '%(role)s'
% {
'project': self.project_name,
'project_domain': self.domain_name, 'project_domain': self.domain_name,
'user': username, 'user': username,
'user_domain': self.domain_name, 'user_domain': self.domain_name,
'role': role_name}) 'role': role_name,
}
)
remove_raw_output = self.openstack( remove_raw_output = self.openstack(
'role remove ' 'role remove '
'--project %(project)s ' '--project %(project)s '
'--project-domain %(project_domain)s ' '--project-domain %(project_domain)s '
'--user %(user)s ' '--user %(user)s '
'--user-domain %(user_domain)s ' '--user-domain %(user_domain)s '
'%(role)s' % {'project': self.project_name, '%(role)s'
% {
'project': self.project_name,
'project_domain': self.domain_name, 'project_domain': self.domain_name,
'user': username, 'user': username,
'user_domain': self.domain_name, 'user_domain': self.domain_name,
'role': role_name}) 'role': role_name,
}
)
self.assertEqual(0, len(add_raw_output)) self.assertEqual(0, len(add_raw_output))
self.assertEqual(0, len(remove_raw_output)) self.assertEqual(0, len(remove_raw_output))
@ -141,14 +158,14 @@ class RoleTests(common.IdentityTests):
self.openstack( self.openstack(
'implied role create ' 'implied role create '
'--implied-role %(implied_role)s ' '--implied-role %(implied_role)s '
'%(role)s' % {'implied_role': implied_role_name, '%(role)s' % {'implied_role': implied_role_name, 'role': role_name}
'role': role_name}) )
def test_implied_role_delete(self): def test_implied_role_delete(self):
implied_role_name, role_name = self._create_dummy_implied_role() implied_role_name, role_name = self._create_dummy_implied_role()
raw_output = self.openstack( raw_output = self.openstack(
'implied role delete ' 'implied role delete '
'--implied-role %(implied_role)s ' '--implied-role %(implied_role)s '
'%(role)s' % {'implied_role': implied_role_name, '%(role)s' % {'implied_role': implied_role_name, 'role': role_name}
'role': role_name}) )
self.assertEqual(0, len(raw_output)) self.assertEqual(0, len(raw_output))

View File

@ -16,7 +16,6 @@ from openstackclient.tests.functional.identity.v3 import common
class ServiceTests(common.IdentityTests): class ServiceTests(common.IdentityTests):
def test_service_create(self): def test_service_create(self):
self._create_dummy_service() self._create_dummy_service()
@ -29,7 +28,8 @@ class ServiceTests(common.IdentityTests):
service_1 = self._create_dummy_service(add_clean_up=False) service_1 = self._create_dummy_service(add_clean_up=False)
service_2 = self._create_dummy_service(add_clean_up=False) service_2 = self._create_dummy_service(add_clean_up=False)
raw_output = self.openstack( raw_output = self.openstack(
'service delete %s %s' % (service_1, service_2)) 'service delete %s %s' % (service_1, service_2)
)
self.assertEqual(0, len(raw_output)) self.assertEqual(0, len(raw_output))
def test_service_list(self): def test_service_list(self):
@ -50,10 +50,14 @@ class ServiceTests(common.IdentityTests):
'--name %(name)s ' '--name %(name)s '
'--description %(description)s ' '--description %(description)s '
'--disable ' '--disable '
'%(service)s' % {'type': new_service_type, '%(service)s'
% {
'type': new_service_type,
'name': new_service_name, 'name': new_service_name,
'description': new_service_description, 'description': new_service_description,
'service': service_name}) 'service': service_name,
}
)
self.assertEqual(0, len(raw_output)) self.assertEqual(0, len(raw_output))
# get service details # get service details
raw_output = self.openstack('service show %s' % new_service_name) raw_output = self.openstack('service show %s' % new_service_name)
@ -65,7 +69,6 @@ class ServiceTests(common.IdentityTests):
def test_service_show(self): def test_service_show(self):
service_name = self._create_dummy_service() service_name = self._create_dummy_service()
raw_output = self.openstack( raw_output = self.openstack('service show %s' % service_name)
'service show %s' % service_name)
items = self.parse_show(raw_output) items = self.parse_show(raw_output)
self.assert_show_fields(items, self.SERVICE_FIELDS) self.assert_show_fields(items, self.SERVICE_FIELDS)

View File

@ -23,21 +23,24 @@ class ServiceProviderTests(common.IdentityTests):
def test_sp_delete(self): def test_sp_delete(self):
service_provider = self._create_dummy_sp(add_clean_up=False) service_provider = self._create_dummy_sp(add_clean_up=False)
raw_output = self.openstack('service provider delete %s' raw_output = self.openstack(
% service_provider) 'service provider delete %s' % service_provider
)
self.assertEqual(0, len(raw_output)) self.assertEqual(0, len(raw_output))
def test_sp_multi_delete(self): def test_sp_multi_delete(self):
sp1 = self._create_dummy_sp(add_clean_up=False) sp1 = self._create_dummy_sp(add_clean_up=False)
sp2 = self._create_dummy_sp(add_clean_up=False) sp2 = self._create_dummy_sp(add_clean_up=False)
raw_output = self.openstack( raw_output = self.openstack(
'service provider delete %s %s' % (sp1, sp2)) 'service provider delete %s %s' % (sp1, sp2)
)
self.assertEqual(0, len(raw_output)) self.assertEqual(0, len(raw_output))
def test_sp_show(self): def test_sp_show(self):
service_provider = self._create_dummy_sp(add_clean_up=True) service_provider = self._create_dummy_sp(add_clean_up=True)
raw_output = self.openstack('service provider show %s' raw_output = self.openstack(
% service_provider) 'service provider show %s' % service_provider
)
items = self.parse_show(raw_output) items = self.parse_show(raw_output)
self.assert_show_fields(items, self.SERVICE_PROVIDER_FIELDS) self.assert_show_fields(items, self.SERVICE_PROVIDER_FIELDS)
@ -50,13 +53,18 @@ class ServiceProviderTests(common.IdentityTests):
def test_sp_set(self): def test_sp_set(self):
service_provider = self._create_dummy_sp(add_clean_up=True) service_provider = self._create_dummy_sp(add_clean_up=True)
new_description = data_utils.rand_name('newDescription') new_description = data_utils.rand_name('newDescription')
raw_output = self.openstack('service provider set ' raw_output = self.openstack(
'service provider set '
'%(service-provider)s ' '%(service-provider)s '
'--description %(description)s ' '--description %(description)s '
% {'service-provider': service_provider, % {
'description': new_description}) 'service-provider': service_provider,
'description': new_description,
}
)
self.assertEqual(0, len(raw_output)) self.assertEqual(0, len(raw_output))
raw_output = self.openstack('service provider show %s' raw_output = self.openstack(
% service_provider) 'service provider show %s' % service_provider
)
updated_value = self.parse_show_as_object(raw_output) updated_value = self.parse_show_as_object(raw_output)
self.assertIn(new_description, updated_value['description']) self.assertIn(new_description, updated_value['description'])

View File

@ -14,7 +14,6 @@ from openstackclient.tests.functional.identity.v3 import common
class TokenTests(common.IdentityTests): class TokenTests(common.IdentityTests):
def test_token_issue(self): def test_token_issue(self):
raw_output = self.openstack('token issue') raw_output = self.openstack('token issue')
items = self.parse_show(raw_output) items = self.parse_show(raw_output)

View File

@ -16,16 +16,16 @@ from openstackclient.tests.functional.identity.v3 import common
class UserTests(common.IdentityTests): class UserTests(common.IdentityTests):
def test_user_create(self): def test_user_create(self):
self._create_dummy_user() self._create_dummy_user()
def test_user_delete(self): def test_user_delete(self):
username = self._create_dummy_user(add_clean_up=False) username = self._create_dummy_user(add_clean_up=False)
raw_output = self.openstack('user delete ' raw_output = self.openstack(
'user delete '
'--domain %(domain)s ' '--domain %(domain)s '
'%(name)s' % {'domain': self.domain_name, '%(name)s' % {'domain': self.domain_name, 'name': username}
'name': username}) )
self.assertEqual(0, len(raw_output)) self.assertEqual(0, len(raw_output))
def test_user_list(self): def test_user_list(self):
@ -35,24 +35,27 @@ class UserTests(common.IdentityTests):
def test_user_set(self): def test_user_set(self):
username = self._create_dummy_user() username = self._create_dummy_user()
raw_output = self.openstack('user show ' raw_output = self.openstack(
'user show '
'--domain %(domain)s ' '--domain %(domain)s '
'%(name)s' % {'domain': self.domain_name, '%(name)s' % {'domain': self.domain_name, 'name': username}
'name': username}) )
user = self.parse_show_as_object(raw_output) user = self.parse_show_as_object(raw_output)
new_username = data_utils.rand_name('NewTestUser') new_username = data_utils.rand_name('NewTestUser')
new_email = data_utils.rand_name() + '@example.com' new_email = data_utils.rand_name() + '@example.com'
raw_output = self.openstack('user set ' raw_output = self.openstack(
'user set '
'--email %(email)s ' '--email %(email)s '
'--name %(new_name)s ' '--name %(new_name)s '
'%(id)s' % {'email': new_email, '%(id)s'
'new_name': new_username, % {'email': new_email, 'new_name': new_username, 'id': user['id']}
'id': user['id']}) )
self.assertEqual(0, len(raw_output)) self.assertEqual(0, len(raw_output))
raw_output = self.openstack('user show ' raw_output = self.openstack(
'user show '
'--domain %(domain)s ' '--domain %(domain)s '
'%(name)s' % {'domain': self.domain_name, '%(name)s' % {'domain': self.domain_name, 'name': new_username}
'name': new_username}) )
updated_user = self.parse_show_as_object(raw_output) updated_user = self.parse_show_as_object(raw_output)
self.assertEqual(user['id'], updated_user['id']) self.assertEqual(user['id'], updated_user['id'])
self.assertEqual(new_email, updated_user['email']) self.assertEqual(new_email, updated_user['email'])
@ -61,31 +64,38 @@ class UserTests(common.IdentityTests):
username = self._create_dummy_user() username = self._create_dummy_user()
project_name = self._create_dummy_project() project_name = self._create_dummy_project()
# get original user details # get original user details
raw_output = self.openstack('user show ' raw_output = self.openstack(
'user show '
'--domain %(domain)s ' '--domain %(domain)s '
'%(name)s' % {'domain': self.domain_name, '%(name)s' % {'domain': self.domain_name, 'name': username}
'name': username}) )
user = self.parse_show_as_object(raw_output) user = self.parse_show_as_object(raw_output)
# update user # update user
raw_output = self.openstack('user set ' raw_output = self.openstack(
'user set '
'--project %(project)s ' '--project %(project)s '
'--project-domain %(project_domain)s ' '--project-domain %(project_domain)s '
'%(id)s' % {'project': project_name, '%(id)s'
'project_domain': % {
self.domain_name, 'project': project_name,
'id': user['id']}) 'project_domain': self.domain_name,
'id': user['id'],
}
)
self.assertEqual(0, len(raw_output)) self.assertEqual(0, len(raw_output))
# get updated user details # get updated user details
raw_output = self.openstack('user show ' raw_output = self.openstack(
'user show '
'--domain %(domain)s ' '--domain %(domain)s '
'%(name)s' % {'domain': self.domain_name, '%(name)s' % {'domain': self.domain_name, 'name': username}
'name': username}) )
updated_user = self.parse_show_as_object(raw_output) updated_user = self.parse_show_as_object(raw_output)
# get project details # get project details
raw_output = self.openstack('project show ' raw_output = self.openstack(
'project show '
'--domain %(domain)s ' '--domain %(domain)s '
'%(name)s' % {'domain': self.domain_name, '%(name)s' % {'domain': self.domain_name, 'name': project_name}
'name': project_name}) )
project = self.parse_show_as_object(raw_output) project = self.parse_show_as_object(raw_output)
# check updated user details # check updated user details
self.assertEqual(user['id'], updated_user['id']) self.assertEqual(user['id'], updated_user['id'])
@ -93,9 +103,10 @@ class UserTests(common.IdentityTests):
def test_user_show(self): def test_user_show(self):
username = self._create_dummy_user() username = self._create_dummy_user()
raw_output = self.openstack('user show ' raw_output = self.openstack(
'user show '
'--domain %(domain)s ' '--domain %(domain)s '
'%(name)s' % {'domain': self.domain_name, '%(name)s' % {'domain': self.domain_name, 'name': username}
'name': username}) )
items = self.parse_show(raw_output) items = self.parse_show(raw_output)
self.assert_show_fields(items, self.USER_FIELDS) self.assert_show_fields(items, self.USER_FIELDS)

View File

@ -155,7 +155,6 @@ def fake_auth_ref(fake_token, fake_service=None):
class FakeIdentityv2Client(object): class FakeIdentityv2Client(object):
def __init__(self, **kwargs): def __init__(self, **kwargs):
self.roles = mock.Mock() self.roles = mock.Mock()
self.roles.resource_class = fakes.FakeResource(None, {}) self.roles.resource_class = fakes.FakeResource(None, {})
@ -185,7 +184,6 @@ class FakeIdentityv2Client(object):
class TestIdentityv2(utils.TestCommand): class TestIdentityv2(utils.TestCommand):
def setUp(self): def setUp(self):
super(TestIdentityv2, self).setUp() super(TestIdentityv2, self).setUp()
@ -212,22 +210,25 @@ class FakeExtension(object):
# Set default attributes. # Set default attributes.
extension_info = { extension_info = {
'name': 'name-' + uuid.uuid4().hex, 'name': 'name-' + uuid.uuid4().hex,
'namespace': ('http://docs.openstack.org/identity/' 'namespace': (
'api/ext/OS-KSCRUD/v1.0'), 'http://docs.openstack.org/identity/' 'api/ext/OS-KSCRUD/v1.0'
),
'description': 'description-' + uuid.uuid4().hex, 'description': 'description-' + uuid.uuid4().hex,
'updated': '2013-07-07T12:00:0-00:00', 'updated': '2013-07-07T12:00:0-00:00',
'alias': 'OS-KSCRUD', 'alias': 'OS-KSCRUD',
'links': ('[{"href":' 'links': (
'[{"href":'
'"https://github.com/openstack/identity-api", "type":' '"https://github.com/openstack/identity-api", "type":'
' "text/html", "rel": "describedby"}]') ' "text/html", "rel": "describedby"}]'
),
} }
# Overwrite default attributes. # Overwrite default attributes.
extension_info.update(attrs) extension_info.update(attrs)
extension = fakes.FakeResource( extension = fakes.FakeResource(
info=copy.deepcopy(extension_info), info=copy.deepcopy(extension_info), loaded=True
loaded=True) )
return extension return extension
@ -275,8 +276,8 @@ class FakeCatalog(object):
catalog_info.update(attrs) catalog_info.update(attrs)
catalog = fakes.FakeResource( catalog = fakes.FakeResource(
info=copy.deepcopy(catalog_info), info=copy.deepcopy(catalog_info), loaded=True
loaded=True) )
return catalog return catalog
@ -305,8 +306,9 @@ class FakeProject(object):
} }
project_info.update(attrs) project_info.update(attrs)
project = fakes.FakeResource(info=copy.deepcopy(project_info), project = fakes.FakeResource(
loaded=True) info=copy.deepcopy(project_info), loaded=True
)
return project return project
@staticmethod @staticmethod
@ -352,12 +354,12 @@ class FakeEndpoint(object):
'id': 'endpoint-id-' + uuid.uuid4().hex, 'id': 'endpoint-id-' + uuid.uuid4().hex,
'publicurl': 'http://endpoint_publicurl', 'publicurl': 'http://endpoint_publicurl',
'service_id': 'service-name-' + uuid.uuid4().hex, 'service_id': 'service-name-' + uuid.uuid4().hex,
} }
endpoint_info.update(attrs) endpoint_info.update(attrs)
endpoint = fakes.FakeResource(info=copy.deepcopy(endpoint_info), endpoint = fakes.FakeResource(
loaded=True) info=copy.deepcopy(endpoint_info), loaded=True
)
return endpoint return endpoint
@staticmethod @staticmethod
@ -399,12 +401,12 @@ class FakeService(object):
'name': 'service-name-' + uuid.uuid4().hex, 'name': 'service-name-' + uuid.uuid4().hex,
'description': 'service_description', 'description': 'service_description',
'type': 'service_type', 'type': 'service_type',
} }
service_info.update(attrs) service_info.update(attrs)
service = fakes.FakeResource(info=copy.deepcopy(service_info), service = fakes.FakeResource(
loaded=True) info=copy.deepcopy(service_info), loaded=True
)
return service return service
@staticmethod @staticmethod
@ -447,8 +449,7 @@ class FakeRole(object):
} }
role_info.update(attrs) role_info.update(attrs)
role = fakes.FakeResource(info=copy.deepcopy(role_info), role = fakes.FakeResource(info=copy.deepcopy(role_info), loaded=True)
loaded=True)
return role return role
@staticmethod @staticmethod
@ -493,8 +494,7 @@ class FakeUser(object):
} }
user_info.update(attrs) user_info.update(attrs)
user = fakes.FakeResource(info=copy.deepcopy(user_info), user = fakes.FakeResource(info=copy.deepcopy(user_info), loaded=True)
loaded=True)
return user return user
@staticmethod @staticmethod

View File

@ -19,7 +19,6 @@ from openstackclient.tests.unit import utils
class TestCatalog(utils.TestCommand): class TestCatalog(utils.TestCommand):
service_catalog = identity_fakes.FakeCatalog.create_catalog() service_catalog = identity_fakes.FakeCatalog.create_catalog()
def setUp(self): def setUp(self):
@ -37,7 +36,6 @@ class TestCatalog(utils.TestCommand):
class TestCatalogList(TestCatalog): class TestCatalogList(TestCatalog):
columns = ( columns = (
'Name', 'Name',
'Type', 'Type',
@ -68,12 +66,15 @@ class TestCatalogList(TestCatalog):
columns, data = self.cmd.take_action(parsed_args) columns, data = self.cmd.take_action(parsed_args)
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
datalist = (( datalist = (
(
'supernova', 'supernova',
'compute', 'compute',
catalog.EndpointsColumn( catalog.EndpointsColumn(
auth_ref.service_catalog.catalog[0]['endpoints']), auth_ref.service_catalog.catalog[0]['endpoints']
), ) ),
),
)
self.assertCountEqual(datalist, tuple(data)) self.assertCountEqual(datalist, tuple(data))
def test_catalog_list_with_endpoint_url(self): def test_catalog_list_with_endpoint_url(self):
@ -111,17 +112,19 @@ class TestCatalogList(TestCatalog):
columns, data = self.cmd.take_action(parsed_args) columns, data = self.cmd.take_action(parsed_args)
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
datalist = (( datalist = (
(
'supernova', 'supernova',
'compute', 'compute',
catalog.EndpointsColumn( catalog.EndpointsColumn(
auth_ref.service_catalog.catalog[0]['endpoints']), auth_ref.service_catalog.catalog[0]['endpoints']
), ) ),
),
)
self.assertCountEqual(datalist, tuple(data)) self.assertCountEqual(datalist, tuple(data))
class TestCatalogShow(TestCatalog): class TestCatalogShow(TestCatalog):
def setUp(self): def setUp(self):
super(TestCatalogShow, self).setUp() super(TestCatalogShow, self).setUp()
@ -153,7 +156,8 @@ class TestCatalogShow(TestCatalog):
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
datalist = ( datalist = (
catalog.EndpointsColumn( catalog.EndpointsColumn(
auth_ref.service_catalog.catalog[0]['endpoints']), auth_ref.service_catalog.catalog[0]['endpoints']
),
self.service_catalog.id, self.service_catalog.id,
'supernova', 'supernova',
'compute', 'compute',
@ -174,7 +178,8 @@ class TestFormatColumns(TestCatalog):
'<none>\n publicURL: https://public.none.example.com\n ' '<none>\n publicURL: https://public.none.example.com\n '
'internalURL: https://internal.none.example.com\n ' 'internalURL: https://internal.none.example.com\n '
'adminURL: https://admin.none.example.com\n', 'adminURL: https://admin.none.example.com\n',
col.human_readable()) col.human_readable(),
)
def test_endpoints_column_human_readable_with_partial_endpoint_urls(self): def test_endpoints_column_human_readable_with_partial_endpoint_urls(self):
endpoints = [ endpoints = [
@ -193,4 +198,5 @@ class TestFormatColumns(TestCatalog):
'one\n publicURL: https://public.one.example.com\n' 'one\n publicURL: https://public.one.example.com\n'
'two\n publicURL: https://public.two.example.com\n ' 'two\n publicURL: https://public.two.example.com\n '
'internalURL: https://internal.two.example.com\n', 'internalURL: https://internal.two.example.com\n',
col.human_readable()) col.human_readable(),
)

View File

@ -16,7 +16,6 @@ from openstackclient.tests.unit.identity.v2_0 import fakes as identity_fakes
class TestEndpoint(identity_fakes.TestIdentityv2): class TestEndpoint(identity_fakes.TestIdentityv2):
fake_service = identity_fakes.FakeService.create_one_service() fake_service = identity_fakes.FakeService.create_one_service()
attr = { attr = {
'service_name': fake_service.name, 'service_name': fake_service.name,
@ -37,7 +36,6 @@ class TestEndpoint(identity_fakes.TestIdentityv2):
class TestEndpointCreate(TestEndpoint): class TestEndpointCreate(TestEndpoint):
def setUp(self): def setUp(self):
super(TestEndpointCreate, self).setUp() super(TestEndpointCreate, self).setUp()
@ -50,10 +48,14 @@ class TestEndpointCreate(TestEndpoint):
def test_endpoint_create(self): def test_endpoint_create(self):
arglist = [ arglist = [
'--publicurl', self.fake_endpoint.publicurl, '--publicurl',
'--internalurl', self.fake_endpoint.internalurl, self.fake_endpoint.publicurl,
'--adminurl', self.fake_endpoint.adminurl, '--internalurl',
'--region', self.fake_endpoint.region, self.fake_endpoint.internalurl,
'--adminurl',
self.fake_endpoint.adminurl,
'--region',
self.fake_endpoint.region,
self.fake_service.id, self.fake_service.id,
] ]
verifylist = [ verifylist = [
@ -80,8 +82,16 @@ class TestEndpointCreate(TestEndpoint):
self.fake_endpoint.internalurl, self.fake_endpoint.internalurl,
) )
collist = ('adminurl', 'id', 'internalurl', 'publicurl', collist = (
'region', 'service_id', 'service_name', 'service_type') 'adminurl',
'id',
'internalurl',
'publicurl',
'region',
'service_id',
'service_name',
'service_type',
)
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
datalist = ( datalist = (
self.fake_endpoint.adminurl, self.fake_endpoint.adminurl,
@ -98,7 +108,6 @@ class TestEndpointCreate(TestEndpoint):
class TestEndpointDelete(TestEndpoint): class TestEndpointDelete(TestEndpoint):
def setUp(self): def setUp(self):
super(TestEndpointDelete, self).setUp() super(TestEndpointDelete, self).setUp()
@ -126,7 +135,6 @@ class TestEndpointDelete(TestEndpoint):
class TestEndpointList(TestEndpoint): class TestEndpointList(TestEndpoint):
def setUp(self): def setUp(self):
super(TestEndpointList, self).setUp() super(TestEndpointList, self).setUp()
@ -151,12 +159,14 @@ class TestEndpointList(TestEndpoint):
collist = ('ID', 'Region', 'Service Name', 'Service Type') collist = ('ID', 'Region', 'Service Name', 'Service Type')
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
datalist = (( datalist = (
(
self.fake_endpoint.id, self.fake_endpoint.id,
self.fake_endpoint.region, self.fake_endpoint.region,
self.fake_endpoint.service_name, self.fake_endpoint.service_name,
self.fake_endpoint.service_type, self.fake_endpoint.service_type,
), ) ),
)
self.assertEqual(datalist, tuple(data)) self.assertEqual(datalist, tuple(data))
def test_endpoint_list_long(self): def test_endpoint_list_long(self):
@ -175,10 +185,18 @@ class TestEndpointList(TestEndpoint):
self.endpoints_mock.list.assert_called_with() self.endpoints_mock.list.assert_called_with()
collist = ('ID', 'Region', 'Service Name', 'Service Type', collist = (
'PublicURL', 'AdminURL', 'InternalURL') 'ID',
'Region',
'Service Name',
'Service Type',
'PublicURL',
'AdminURL',
'InternalURL',
)
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
datalist = (( datalist = (
(
self.fake_endpoint.id, self.fake_endpoint.id,
self.fake_endpoint.region, self.fake_endpoint.region,
self.fake_endpoint.service_name, self.fake_endpoint.service_name,
@ -186,12 +204,12 @@ class TestEndpointList(TestEndpoint):
self.fake_endpoint.publicurl, self.fake_endpoint.publicurl,
self.fake_endpoint.adminurl, self.fake_endpoint.adminurl,
self.fake_endpoint.internalurl, self.fake_endpoint.internalurl,
), ) ),
)
self.assertEqual(datalist, tuple(data)) self.assertEqual(datalist, tuple(data))
class TestEndpointShow(TestEndpoint): class TestEndpointShow(TestEndpoint):
def setUp(self): def setUp(self):
super(TestEndpointShow, self).setUp() super(TestEndpointShow, self).setUp()
@ -223,8 +241,16 @@ class TestEndpointShow(TestEndpoint):
self.fake_endpoint.service_id, self.fake_endpoint.service_id,
) )
collist = ('adminurl', 'id', 'internalurl', 'publicurl', collist = (
'region', 'service_id', 'service_name', 'service_type') 'adminurl',
'id',
'internalurl',
'publicurl',
'region',
'service_id',
'service_name',
'service_type',
)
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
datalist = ( datalist = (
self.fake_endpoint.adminurl, self.fake_endpoint.adminurl,

View File

@ -25,7 +25,6 @@ from openstackclient.tests.unit.identity.v2_0 import fakes as identity_fakes
class TestProject(identity_fakes.TestIdentityv2): class TestProject(identity_fakes.TestIdentityv2):
fake_project = identity_fakes.FakeProject.create_one_project() fake_project = identity_fakes.FakeProject.create_one_project()
fake_projects = identity_fakes.FakeProject.create_projects() fake_projects = identity_fakes.FakeProject.create_projects()
@ -42,10 +41,18 @@ class TestProject(identity_fakes.TestIdentityv2):
fake_project.name, fake_project.name,
) )
datalists = ( datalists = (
(fake_projects[0].description, True, (
fake_projects[0].id, fake_projects[0].name,), fake_projects[0].description,
(fake_projects[1].description, True, True,
fake_projects[1].id, fake_projects[1].name,), fake_projects[0].id,
fake_projects[0].name,
),
(
fake_projects[1].description,
True,
fake_projects[1].id,
fake_projects[1].name,
),
) )
def setUp(self): def setUp(self):
@ -57,7 +64,6 @@ class TestProject(identity_fakes.TestIdentityv2):
class TestProjectCreate(TestProject): class TestProjectCreate(TestProject):
def setUp(self): def setUp(self):
super(TestProjectCreate, self).setUp() super(TestProjectCreate, self).setUp()
@ -88,15 +94,15 @@ class TestProjectCreate(TestProject):
'enabled': True, 'enabled': True,
} }
self.projects_mock.create.assert_called_with( self.projects_mock.create.assert_called_with(
self.fake_project.name, self.fake_project.name, **kwargs
**kwargs
) )
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
self.assertEqual(self.datalist, data) self.assertEqual(self.datalist, data)
def test_project_create_description(self): def test_project_create_description(self):
arglist = [ arglist = [
'--description', 'new desc', '--description',
'new desc',
self.fake_project.name, self.fake_project.name,
] ]
verifylist = [ verifylist = [
@ -116,8 +122,7 @@ class TestProjectCreate(TestProject):
'enabled': True, 'enabled': True,
} }
self.projects_mock.create.assert_called_with( self.projects_mock.create.assert_called_with(
self.fake_project.name, self.fake_project.name, **kwargs
**kwargs
) )
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
@ -146,8 +151,7 @@ class TestProjectCreate(TestProject):
'enabled': True, 'enabled': True,
} }
self.projects_mock.create.assert_called_with( self.projects_mock.create.assert_called_with(
self.fake_project.name, self.fake_project.name, **kwargs
**kwargs
) )
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
@ -176,8 +180,7 @@ class TestProjectCreate(TestProject):
'enabled': False, 'enabled': False,
} }
self.projects_mock.create.assert_called_with( self.projects_mock.create.assert_called_with(
self.fake_project.name, self.fake_project.name, **kwargs
**kwargs
) )
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
@ -185,8 +188,10 @@ class TestProjectCreate(TestProject):
def test_project_create_property(self): def test_project_create_property(self):
arglist = [ arglist = [
'--property', 'fee=fi', '--property',
'--property', 'fo=fum', 'fee=fi',
'--property',
'fo=fum',
self.fake_project.name, self.fake_project.name,
] ]
verifylist = [ verifylist = [
@ -208,8 +213,7 @@ class TestProjectCreate(TestProject):
'fo': 'fum', 'fo': 'fum',
} }
self.projects_mock.create.assert_called_with( self.projects_mock.create.assert_called_with(
self.fake_project.name, self.fake_project.name, **kwargs
**kwargs
) )
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
@ -248,8 +252,7 @@ class TestProjectCreate(TestProject):
'enabled': True, 'enabled': True,
} }
self.projects_mock.create.assert_called_with( self.projects_mock.create.assert_called_with(
self.fake_project.name, self.fake_project.name, **kwargs
**kwargs
) )
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
@ -277,8 +280,7 @@ class TestProjectCreate(TestProject):
'enabled': True, 'enabled': True,
} }
self.projects_mock.create.assert_called_with( self.projects_mock.create.assert_called_with(
self.fake_project.name, self.fake_project.name, **kwargs
**kwargs
) )
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
@ -286,7 +288,6 @@ class TestProjectCreate(TestProject):
class TestProjectDelete(TestProject): class TestProjectDelete(TestProject):
def setUp(self): def setUp(self):
super(TestProjectDelete, self).setUp() super(TestProjectDelete, self).setUp()
@ -315,8 +316,7 @@ class TestProjectDelete(TestProject):
@mock.patch.object(utils, 'find_resource') @mock.patch.object(utils, 'find_resource')
def test_delete_multi_projects_with_exception(self, find_mock): def test_delete_multi_projects_with_exception(self, find_mock):
find_mock.side_effect = [self.fake_project, find_mock.side_effect = [self.fake_project, exceptions.CommandError]
exceptions.CommandError]
arglist = [ arglist = [
self.fake_project.id, self.fake_project.id,
'unexist_project', 'unexist_project',
@ -330,8 +330,7 @@ class TestProjectDelete(TestProject):
self.cmd.take_action(parsed_args) self.cmd.take_action(parsed_args)
self.fail('CommandError should be raised.') self.fail('CommandError should be raised.')
except exceptions.CommandError as e: except exceptions.CommandError as e:
self.assertEqual('1 of 2 projects failed to delete.', self.assertEqual('1 of 2 projects failed to delete.', str(e))
str(e))
find_mock.assert_any_call(self.projects_mock, self.fake_project.id) find_mock.assert_any_call(self.projects_mock, self.fake_project.id)
find_mock.assert_any_call(self.projects_mock, 'unexist_project') find_mock.assert_any_call(self.projects_mock, 'unexist_project')
@ -341,7 +340,6 @@ class TestProjectDelete(TestProject):
class TestProjectList(TestProject): class TestProjectList(TestProject):
def setUp(self): def setUp(self):
super(TestProjectList, self).setUp() super(TestProjectList, self).setUp()
@ -363,10 +361,12 @@ class TestProjectList(TestProject):
collist = ('ID', 'Name') collist = ('ID', 'Name')
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
datalist = (( datalist = (
(
self.fake_project.id, self.fake_project.id,
self.fake_project.name, self.fake_project.name,
), ) ),
)
self.assertEqual(datalist, tuple(data)) self.assertEqual(datalist, tuple(data))
def test_project_list_long(self): def test_project_list_long(self):
@ -386,18 +386,23 @@ class TestProjectList(TestProject):
collist = ('ID', 'Name', 'Description', 'Enabled') collist = ('ID', 'Name', 'Description', 'Enabled')
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
datalist = (( datalist = (
(
self.fake_project.id, self.fake_project.id,
self.fake_project.name, self.fake_project.name,
self.fake_project.description, self.fake_project.description,
True, True,
), ) ),
)
self.assertEqual(datalist, tuple(data)) self.assertEqual(datalist, tuple(data))
def test_project_list_sort(self): def test_project_list_sort(self):
self.projects_mock.list.return_value = self.fake_projects self.projects_mock.list.return_value = self.fake_projects
arglist = ['--sort', 'name:asc', ] arglist = [
'--sort',
'name:asc',
]
verifylist = [] verifylist = []
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@ -425,7 +430,6 @@ class TestProjectList(TestProject):
class TestProjectSet(TestProject): class TestProjectSet(TestProject):
def setUp(self): def setUp(self):
super(TestProjectSet, self).setUp() super(TestProjectSet, self).setUp()
@ -468,11 +472,13 @@ class TestProjectSet(TestProject):
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
self.assertRaises( self.assertRaises(
exceptions.CommandError, self.cmd.take_action, parsed_args) exceptions.CommandError, self.cmd.take_action, parsed_args
)
def test_project_set_name(self): def test_project_set_name(self):
arglist = [ arglist = [
'--name', self.fake_project.name, '--name',
self.fake_project.name,
self.fake_project.name, self.fake_project.name,
] ]
verifylist = [ verifylist = [
@ -492,14 +498,14 @@ class TestProjectSet(TestProject):
'tenant_name': self.fake_project.name, 'tenant_name': self.fake_project.name,
} }
self.projects_mock.update.assert_called_with( self.projects_mock.update.assert_called_with(
self.fake_project.id, self.fake_project.id, **kwargs
**kwargs
) )
self.assertIsNone(result) self.assertIsNone(result)
def test_project_set_description(self): def test_project_set_description(self):
arglist = [ arglist = [
'--description', self.fake_project.description, '--description',
self.fake_project.description,
self.fake_project.name, self.fake_project.name,
] ]
verifylist = [ verifylist = [
@ -519,8 +525,7 @@ class TestProjectSet(TestProject):
'tenant_name': self.fake_project.name, 'tenant_name': self.fake_project.name,
} }
self.projects_mock.update.assert_called_with( self.projects_mock.update.assert_called_with(
self.fake_project.id, self.fake_project.id, **kwargs
**kwargs
) )
self.assertIsNone(result) self.assertIsNone(result)
@ -545,8 +550,7 @@ class TestProjectSet(TestProject):
'tenant_name': self.fake_project.name, 'tenant_name': self.fake_project.name,
} }
self.projects_mock.update.assert_called_with( self.projects_mock.update.assert_called_with(
self.fake_project.id, self.fake_project.id, **kwargs
**kwargs
) )
self.assertIsNone(result) self.assertIsNone(result)
@ -571,15 +575,16 @@ class TestProjectSet(TestProject):
'tenant_name': self.fake_project.name, 'tenant_name': self.fake_project.name,
} }
self.projects_mock.update.assert_called_with( self.projects_mock.update.assert_called_with(
self.fake_project.id, self.fake_project.id, **kwargs
**kwargs
) )
self.assertIsNone(result) self.assertIsNone(result)
def test_project_set_property(self): def test_project_set_property(self):
arglist = [ arglist = [
'--property', 'fee=fi', '--property',
'--property', 'fo=fum', 'fee=fi',
'--property',
'fo=fum',
self.fake_project.name, self.fake_project.name,
] ]
verifylist = [ verifylist = [
@ -599,14 +604,12 @@ class TestProjectSet(TestProject):
'fo': 'fum', 'fo': 'fum',
} }
self.projects_mock.update.assert_called_with( self.projects_mock.update.assert_called_with(
self.fake_project.id, self.fake_project.id, **kwargs
**kwargs
) )
self.assertIsNone(result) self.assertIsNone(result)
class TestProjectShow(TestProject): class TestProjectShow(TestProject):
fake_proj_show = identity_fakes.FakeProject.create_one_project() fake_proj_show = identity_fakes.FakeProject.create_one_project()
def setUp(self): def setUp(self):
@ -647,7 +650,6 @@ class TestProjectShow(TestProject):
class TestProjectUnset(TestProject): class TestProjectUnset(TestProject):
attr = {'fee': 'fi', 'fo': 'fum'} attr = {'fee': 'fi', 'fo': 'fum'}
fake_proj = identity_fakes.FakeProject.create_one_project(attr) fake_proj = identity_fakes.FakeProject.create_one_project(attr)
@ -674,8 +676,10 @@ class TestProjectUnset(TestProject):
def test_project_unset_key(self): def test_project_unset_key(self):
arglist = [ arglist = [
'--property', 'fee', '--property',
'--property', 'fo', 'fee',
'--property',
'fo',
self.fake_proj.name, self.fake_proj.name,
] ]
verifylist = [ verifylist = [
@ -695,7 +699,6 @@ class TestProjectUnset(TestProject):
} }
self.projects_mock.update.assert_called_with( self.projects_mock.update.assert_called_with(
self.fake_proj.id, self.fake_proj.id, **kwargs
**kwargs
) )
self.assertIsNone(result) self.assertIsNone(result)

View File

@ -24,7 +24,6 @@ from openstackclient.tests.unit.identity.v2_0 import fakes as identity_fakes
class TestRole(identity_fakes.TestIdentityv2): class TestRole(identity_fakes.TestIdentityv2):
attr = {} attr = {}
attr['endpoints'] = [ attr['endpoints'] = [
{ {
@ -64,7 +63,6 @@ class TestRole(identity_fakes.TestIdentityv2):
class TestRoleAdd(TestRole): class TestRoleAdd(TestRole):
def setUp(self): def setUp(self):
super(TestRoleAdd, self).setUp() super(TestRoleAdd, self).setUp()
@ -80,8 +78,10 @@ class TestRoleAdd(TestRole):
def test_role_add(self): def test_role_add(self):
arglist = [ arglist = [
'--project', self.fake_project.name, '--project',
'--user', self.fake_user.name, self.fake_project.name,
'--user',
self.fake_user.name,
self.fake_role.name, self.fake_role.name,
] ]
verifylist = [ verifylist = [
@ -113,12 +113,8 @@ class TestRoleAdd(TestRole):
class TestRoleCreate(TestRole): class TestRoleCreate(TestRole):
fake_role_c = identity_fakes.FakeRole.create_one_role() fake_role_c = identity_fakes.FakeRole.create_one_role()
columns = ( columns = ('id', 'name')
'id',
'name'
)
datalist = ( datalist = (
fake_role_c.id, fake_role_c.id,
fake_role_c.name, fake_role_c.name,
@ -215,7 +211,6 @@ class TestRoleCreate(TestRole):
class TestRoleDelete(TestRole): class TestRoleDelete(TestRole):
def setUp(self): def setUp(self):
super(TestRoleDelete, self).setUp() super(TestRoleDelete, self).setUp()
@ -243,8 +238,7 @@ class TestRoleDelete(TestRole):
@mock.patch.object(utils, 'find_resource') @mock.patch.object(utils, 'find_resource')
def test_delete_multi_roles_with_exception(self, find_mock): def test_delete_multi_roles_with_exception(self, find_mock):
find_mock.side_effect = [self.fake_role, find_mock.side_effect = [self.fake_role, exceptions.CommandError]
exceptions.CommandError]
arglist = [ arglist = [
self.fake_role.id, self.fake_role.id,
'unexist_role', 'unexist_role',
@ -258,8 +252,7 @@ class TestRoleDelete(TestRole):
self.cmd.take_action(parsed_args) self.cmd.take_action(parsed_args)
self.fail('CommandError should be raised.') self.fail('CommandError should be raised.')
except exceptions.CommandError as e: except exceptions.CommandError as e:
self.assertEqual('1 of 2 roles failed to delete.', self.assertEqual('1 of 2 roles failed to delete.', str(e))
str(e))
find_mock.assert_any_call(self.roles_mock, self.fake_role.id) find_mock.assert_any_call(self.roles_mock, self.fake_role.id)
find_mock.assert_any_call(self.roles_mock, 'unexist_role') find_mock.assert_any_call(self.roles_mock, 'unexist_role')
@ -269,7 +262,6 @@ class TestRoleDelete(TestRole):
class TestRoleList(TestRole): class TestRoleList(TestRole):
def setUp(self): def setUp(self):
super(TestRoleList, self).setUp() super(TestRoleList, self).setUp()
@ -292,15 +284,16 @@ class TestRoleList(TestRole):
collist = ('ID', 'Name') collist = ('ID', 'Name')
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
datalist = (( datalist = (
(
self.fake_role.id, self.fake_role.id,
self.fake_role.name, self.fake_role.name,
), ) ),
)
self.assertEqual(datalist, tuple(data)) self.assertEqual(datalist, tuple(data))
class TestRoleRemove(TestRole): class TestRoleRemove(TestRole):
def setUp(self): def setUp(self):
super(TestRoleRemove, self).setUp() super(TestRoleRemove, self).setUp()
@ -316,8 +309,10 @@ class TestRoleRemove(TestRole):
def test_role_remove(self): def test_role_remove(self):
arglist = [ arglist = [
'--project', self.fake_project.name, '--project',
'--user', self.fake_user.name, self.fake_project.name,
'--user',
self.fake_user.name,
self.fake_role.name, self.fake_role.name,
] ]
verifylist = [ verifylist = [
@ -339,7 +334,6 @@ class TestRoleRemove(TestRole):
class TestRoleShow(TestRole): class TestRoleShow(TestRole):
def setUp(self): def setUp(self):
super(TestRoleShow, self).setUp() super(TestRoleShow, self).setUp()

View File

@ -22,13 +22,11 @@ from openstackclient.tests.unit.identity.v2_0 import fakes as identity_fakes
class TestRoleAssignment(identity_fakes.TestIdentityv2): class TestRoleAssignment(identity_fakes.TestIdentityv2):
def setUp(self): def setUp(self):
super(TestRoleAssignment, self).setUp() super(TestRoleAssignment, self).setUp()
class TestRoleAssignmentList(TestRoleAssignment): class TestRoleAssignmentList(TestRoleAssignment):
columns = ( columns = (
'Role', 'Role',
'User', 'User',
@ -74,7 +72,6 @@ class TestRoleAssignmentList(TestRoleAssignment):
self.cmd = role_assignment.ListRoleAssignment(self.app, None) self.cmd = role_assignment.ListRoleAssignment(self.app, None)
def test_role_assignment_list_no_filters(self): def test_role_assignment_list_no_filters(self):
arglist = [] arglist = []
verifylist = [] verifylist = []
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@ -87,9 +84,9 @@ class TestRoleAssignmentList(TestRoleAssignment):
) )
def test_role_assignment_list_only_project_filter(self): def test_role_assignment_list_only_project_filter(self):
arglist = [ arglist = [
'--project', identity_fakes.project_name, '--project',
identity_fakes.project_name,
] ]
verifylist = [ verifylist = [
('project', identity_fakes.project_name), ('project', identity_fakes.project_name),
@ -104,9 +101,9 @@ class TestRoleAssignmentList(TestRoleAssignment):
) )
def test_role_assignment_list_only_user_filter(self): def test_role_assignment_list_only_user_filter(self):
arglist = [ arglist = [
'--user', identity_fakes.user_name, '--user',
identity_fakes.user_name,
] ]
verifylist = [ verifylist = [
('user', identity_fakes.user_name), ('user', identity_fakes.user_name),
@ -121,25 +118,24 @@ class TestRoleAssignmentList(TestRoleAssignment):
) )
def test_role_assignment_list_project_and_user(self): def test_role_assignment_list_project_and_user(self):
self.roles_mock.roles_for_user.return_value = [ self.roles_mock.roles_for_user.return_value = [
fakes.FakeResource( fakes.FakeResource(
None, None,
copy.deepcopy( copy.deepcopy(identity_fakes.ROLE),
identity_fakes.ROLE),
loaded=True, loaded=True,
), ),
fakes.FakeResource( fakes.FakeResource(
None, None,
copy.deepcopy( copy.deepcopy(identity_fakes.ROLE_2),
identity_fakes.ROLE_2),
loaded=True, loaded=True,
), ),
] ]
arglist = [ arglist = [
'--project', identity_fakes.project_name, '--project',
'--user', identity_fakes.user_name, identity_fakes.project_name,
'--user',
identity_fakes.user_name,
] ]
verifylist = [ verifylist = [
('user', identity_fakes.user_name), ('user', identity_fakes.user_name),
@ -158,18 +154,21 @@ class TestRoleAssignmentList(TestRoleAssignment):
) )
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
datalist = (( datalist = (
(
identity_fakes.role_id, identity_fakes.role_id,
identity_fakes.user_id, identity_fakes.user_id,
identity_fakes.project_id, identity_fakes.project_id,
), (identity_fakes.ROLE_2['id'], ),
(
identity_fakes.ROLE_2['id'],
identity_fakes.user_id, identity_fakes.user_id,
identity_fakes.project_id, identity_fakes.project_id,
),) ),
)
self.assertEqual(datalist, tuple(data)) self.assertEqual(datalist, tuple(data))
def test_role_assignment_list_def_creds(self): def test_role_assignment_list_def_creds(self):
auth_ref = self.app.client_manager.auth_ref = mock.Mock() auth_ref = self.app.client_manager.auth_ref = mock.Mock()
auth_ref.project_id.return_value = identity_fakes.project_id auth_ref.project_id.return_value = identity_fakes.project_id
auth_ref.user_id.return_value = identity_fakes.user_id auth_ref.user_id.return_value = identity_fakes.user_id
@ -177,14 +176,12 @@ class TestRoleAssignmentList(TestRoleAssignment):
self.roles_mock.roles_for_user.return_value = [ self.roles_mock.roles_for_user.return_value = [
fakes.FakeResource( fakes.FakeResource(
None, None,
copy.deepcopy( copy.deepcopy(identity_fakes.ROLE),
identity_fakes.ROLE),
loaded=True, loaded=True,
), ),
fakes.FakeResource( fakes.FakeResource(
None, None,
copy.deepcopy( copy.deepcopy(identity_fakes.ROLE_2),
identity_fakes.ROLE_2),
loaded=True, loaded=True,
), ),
] ]
@ -210,37 +207,40 @@ class TestRoleAssignmentList(TestRoleAssignment):
) )
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
datalist = (( datalist = (
(
identity_fakes.role_id, identity_fakes.role_id,
identity_fakes.user_id, identity_fakes.user_id,
identity_fakes.project_id, identity_fakes.project_id,
), (identity_fakes.ROLE_2['id'], ),
(
identity_fakes.ROLE_2['id'],
identity_fakes.user_id, identity_fakes.user_id,
identity_fakes.project_id, identity_fakes.project_id,
),) ),
)
self.assertEqual(datalist, tuple(data)) self.assertEqual(datalist, tuple(data))
def test_role_assignment_list_by_name_project_and_user(self): def test_role_assignment_list_by_name_project_and_user(self):
self.roles_mock.roles_for_user.return_value = [ self.roles_mock.roles_for_user.return_value = [
fakes.FakeResource( fakes.FakeResource(
None, None,
copy.deepcopy( copy.deepcopy(identity_fakes.ROLE),
identity_fakes.ROLE),
loaded=True, loaded=True,
), ),
fakes.FakeResource( fakes.FakeResource(
None, None,
copy.deepcopy( copy.deepcopy(identity_fakes.ROLE_2),
identity_fakes.ROLE_2),
loaded=True, loaded=True,
), ),
] ]
arglist = [ arglist = [
'--project', identity_fakes.project_name, '--project',
'--user', identity_fakes.user_name, identity_fakes.project_name,
'--names' '--user',
identity_fakes.user_name,
'--names',
] ]
verifylist = [ verifylist = [
('user', identity_fakes.user_name), ('user', identity_fakes.user_name),
@ -260,12 +260,16 @@ class TestRoleAssignmentList(TestRoleAssignment):
) )
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
datalist = (( datalist = (
(
identity_fakes.role_name, identity_fakes.role_name,
identity_fakes.user_name, identity_fakes.user_name,
identity_fakes.project_name, identity_fakes.project_name,
), (identity_fakes.ROLE_2['name'], ),
(
identity_fakes.ROLE_2['name'],
identity_fakes.user_name, identity_fakes.user_name,
identity_fakes.project_name, identity_fakes.project_name,
),) ),
)
self.assertEqual(datalist, tuple(data)) self.assertEqual(datalist, tuple(data))

View File

@ -32,7 +32,6 @@ class TestService(identity_fakes.TestIdentityv2):
class TestServiceCreate(TestService): class TestServiceCreate(TestService):
fake_service_c = identity_fakes.FakeService.create_one_service() fake_service_c = identity_fakes.FakeService.create_one_service()
columns = ( columns = (
'description', 'description',
@ -83,7 +82,8 @@ class TestServiceCreate(TestService):
def test_service_create_with_name_option(self): def test_service_create_with_name_option(self):
arglist = [ arglist = [
'--name', self.fake_service_c.name, '--name',
self.fake_service_c.name,
self.fake_service_c.type, self.fake_service_c.type,
] ]
verifylist = [ verifylist = [
@ -110,8 +110,10 @@ class TestServiceCreate(TestService):
def test_service_create_description(self): def test_service_create_description(self):
arglist = [ arglist = [
'--name', self.fake_service_c.name, '--name',
'--description', self.fake_service_c.description, self.fake_service_c.name,
'--description',
self.fake_service_c.description,
self.fake_service_c.type, self.fake_service_c.type,
] ]
verifylist = [ verifylist = [
@ -138,7 +140,6 @@ class TestServiceCreate(TestService):
class TestServiceDelete(TestService): class TestServiceDelete(TestService):
def setUp(self): def setUp(self):
super(TestServiceDelete, self).setUp() super(TestServiceDelete, self).setUp()
@ -167,7 +168,6 @@ class TestServiceDelete(TestService):
class TestServiceList(TestService): class TestServiceList(TestService):
def setUp(self): def setUp(self):
super(TestServiceList, self).setUp() super(TestServiceList, self).setUp()
@ -190,11 +190,13 @@ class TestServiceList(TestService):
collist = ('ID', 'Name', 'Type') collist = ('ID', 'Name', 'Type')
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
datalist = (( datalist = (
(
self.fake_service.id, self.fake_service.id,
self.fake_service.name, self.fake_service.name,
self.fake_service.type, self.fake_service.type,
), ) ),
)
self.assertEqual(datalist, tuple(data)) self.assertEqual(datalist, tuple(data))
def test_service_list_long(self): def test_service_list_long(self):
@ -215,17 +217,18 @@ class TestServiceList(TestService):
collist = ('ID', 'Name', 'Type', 'Description') collist = ('ID', 'Name', 'Type', 'Description')
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
datalist = (( datalist = (
(
self.fake_service.id, self.fake_service.id,
self.fake_service.name, self.fake_service.name,
self.fake_service.type, self.fake_service.type,
self.fake_service.description, self.fake_service.description,
), ) ),
)
self.assertEqual(datalist, tuple(data)) self.assertEqual(datalist, tuple(data))
class TestServiceShow(TestService): class TestServiceShow(TestService):
fake_service_s = identity_fakes.FakeService.create_one_service() fake_service_s = identity_fakes.FakeService.create_one_service()
def setUp(self): def setUp(self):
@ -282,4 +285,6 @@ class TestServiceShow(TestService):
except exceptions.CommandError as e: except exceptions.CommandError as e:
self.assertEqual( self.assertEqual(
"Multiple service matches found for 'nounique_service'," "Multiple service matches found for 'nounique_service',"
" use an ID to be more specific.", str(e)) " use an ID to be more specific.",
str(e),
)

View File

@ -20,7 +20,6 @@ from openstackclient.tests.unit.identity.v2_0 import fakes as identity_fakes
class TestToken(identity_fakes.TestIdentityv2): class TestToken(identity_fakes.TestIdentityv2):
fake_user = identity_fakes.FakeUser.create_one_user() fake_user = identity_fakes.FakeUser.create_one_user()
fake_project = identity_fakes.FakeProject.create_one_project() fake_project = identity_fakes.FakeProject.create_one_project()
@ -33,7 +32,6 @@ class TestToken(identity_fakes.TestIdentityv2):
class TestTokenIssue(TestToken): class TestTokenIssue(TestToken):
def setUp(self): def setUp(self):
super(TestTokenIssue, self).setUp() super(TestTokenIssue, self).setUp()
@ -94,7 +92,6 @@ class TestTokenIssue(TestToken):
class TestTokenRevoke(TestToken): class TestTokenRevoke(TestToken):
TOKEN = 'fob' TOKEN = 'fob'
def setUp(self): def setUp(self):

View File

@ -24,7 +24,6 @@ from openstackclient.tests.unit.identity.v2_0 import fakes as identity_fakes
class TestUser(identity_fakes.TestIdentityv2): class TestUser(identity_fakes.TestIdentityv2):
fake_project = identity_fakes.FakeProject.create_one_project() fake_project = identity_fakes.FakeProject.create_one_project()
attr = { attr = {
'tenantId': fake_project.id, 'tenantId': fake_project.id,
@ -44,7 +43,6 @@ class TestUser(identity_fakes.TestIdentityv2):
class TestUserCreate(TestUser): class TestUserCreate(TestUser):
fake_project_c = identity_fakes.FakeProject.create_one_project() fake_project_c = identity_fakes.FakeProject.create_one_project()
attr = { attr = {
'tenantId': fake_project_c.id, 'tenantId': fake_project_c.id,
@ -99,10 +97,7 @@ class TestUserCreate(TestUser):
} }
# UserManager.create(name, password, email, tenant_id=, enabled=) # UserManager.create(name, password, email, tenant_id=, enabled=)
self.users_mock.create.assert_called_with( self.users_mock.create.assert_called_with(
self.fake_user_c.name, self.fake_user_c.name, None, None, **kwargs
None,
None,
**kwargs
) )
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
@ -110,13 +105,14 @@ class TestUserCreate(TestUser):
def test_user_create_password(self): def test_user_create_password(self):
arglist = [ arglist = [
'--password', 'secret', '--password',
'secret',
self.fake_user_c.name, self.fake_user_c.name,
] ]
verifylist = [ verifylist = [
('name', self.fake_user_c.name), ('name', self.fake_user_c.name),
('password_prompt', False), ('password_prompt', False),
('password', 'secret') ('password', 'secret'),
] ]
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@ -132,10 +128,7 @@ class TestUserCreate(TestUser):
} }
# UserManager.create(name, password, email, tenant_id=, enabled=) # UserManager.create(name, password, email, tenant_id=, enabled=)
self.users_mock.create.assert_called_with( self.users_mock.create.assert_called_with(
self.fake_user_c.name, self.fake_user_c.name, 'secret', None, **kwargs
'secret',
None,
**kwargs
) )
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
self.assertEqual(self.datalist, data) self.assertEqual(self.datalist, data)
@ -147,7 +140,7 @@ class TestUserCreate(TestUser):
] ]
verifylist = [ verifylist = [
('name', self.fake_user_c.name), ('name', self.fake_user_c.name),
('password_prompt', True) ('password_prompt', True),
] ]
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@ -166,10 +159,7 @@ class TestUserCreate(TestUser):
} }
# UserManager.create(name, password, email, tenant_id=, enabled=) # UserManager.create(name, password, email, tenant_id=, enabled=)
self.users_mock.create.assert_called_with( self.users_mock.create.assert_called_with(
self.fake_user_c.name, self.fake_user_c.name, 'abc123', None, **kwargs
'abc123',
None,
**kwargs
) )
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
@ -177,7 +167,8 @@ class TestUserCreate(TestUser):
def test_user_create_email(self): def test_user_create_email(self):
arglist = [ arglist = [
'--email', 'barney@example.com', '--email',
'barney@example.com',
self.fake_user_c.name, self.fake_user_c.name,
] ]
verifylist = [ verifylist = [
@ -198,10 +189,7 @@ class TestUserCreate(TestUser):
} }
# UserManager.create(name, password, email, tenant_id=, enabled=) # UserManager.create(name, password, email, tenant_id=, enabled=)
self.users_mock.create.assert_called_with( self.users_mock.create.assert_called_with(
self.fake_user_c.name, self.fake_user_c.name, None, 'barney@example.com', **kwargs
None,
'barney@example.com',
**kwargs
) )
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
@ -219,7 +207,8 @@ class TestUserCreate(TestUser):
self.users_mock.create.return_value = user_2 self.users_mock.create.return_value = user_2
arglist = [ arglist = [
'--project', self.fake_project_c.name, '--project',
self.fake_project_c.name,
user_2.name, user_2.name,
] ]
verifylist = [ verifylist = [
@ -240,10 +229,7 @@ class TestUserCreate(TestUser):
} }
# UserManager.create(name, password, email, tenant_id=, enabled=) # UserManager.create(name, password, email, tenant_id=, enabled=)
self.users_mock.create.assert_called_with( self.users_mock.create.assert_called_with(
user_2.name, user_2.name, None, None, **kwargs
None,
None,
**kwargs
) )
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
@ -280,10 +266,7 @@ class TestUserCreate(TestUser):
} }
# UserManager.create(name, password, email, tenant_id=, enabled=) # UserManager.create(name, password, email, tenant_id=, enabled=)
self.users_mock.create.assert_called_with( self.users_mock.create.assert_called_with(
self.fake_user_c.name, self.fake_user_c.name, None, None, **kwargs
None,
None,
**kwargs
) )
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
@ -313,10 +296,7 @@ class TestUserCreate(TestUser):
} }
# UserManager.create(name, password, email, tenant_id=, enabled=) # UserManager.create(name, password, email, tenant_id=, enabled=)
self.users_mock.create.assert_called_with( self.users_mock.create.assert_called_with(
self.fake_user_c.name, self.fake_user_c.name, None, None, **kwargs
None,
None,
**kwargs
) )
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
@ -375,17 +355,13 @@ class TestUserCreate(TestUser):
} }
# UserManager.create(name, password, email, tenant_id=, enabled=) # UserManager.create(name, password, email, tenant_id=, enabled=)
self.users_mock.create.assert_called_with( self.users_mock.create.assert_called_with(
self.fake_user_c.name, self.fake_user_c.name, None, None, **kwargs
None,
None,
**kwargs
) )
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
self.assertEqual(self.datalist, data) self.assertEqual(self.datalist, data)
class TestUserDelete(TestUser): class TestUserDelete(TestUser):
def setUp(self): def setUp(self):
super(TestUserDelete, self).setUp() super(TestUserDelete, self).setUp()
@ -414,8 +390,7 @@ class TestUserDelete(TestUser):
@mock.patch.object(utils, 'find_resource') @mock.patch.object(utils, 'find_resource')
def test_delete_multi_users_with_exception(self, find_mock): def test_delete_multi_users_with_exception(self, find_mock):
find_mock.side_effect = [self.fake_user, find_mock.side_effect = [self.fake_user, exceptions.CommandError]
exceptions.CommandError]
arglist = [ arglist = [
self.fake_user.id, self.fake_user.id,
'unexist_user', 'unexist_user',
@ -429,8 +404,7 @@ class TestUserDelete(TestUser):
self.cmd.take_action(parsed_args) self.cmd.take_action(parsed_args)
self.fail('CommandError should be raised.') self.fail('CommandError should be raised.')
except exceptions.CommandError as e: except exceptions.CommandError as e:
self.assertEqual('1 of 2 users failed to delete.', self.assertEqual('1 of 2 users failed to delete.', str(e))
str(e))
find_mock.assert_any_call(self.users_mock, self.fake_user.id) find_mock.assert_any_call(self.users_mock, self.fake_user.id)
find_mock.assert_any_call(self.users_mock, 'unexist_user') find_mock.assert_any_call(self.users_mock, 'unexist_user')
@ -440,7 +414,6 @@ class TestUserDelete(TestUser):
class TestUserList(TestUser): class TestUserList(TestUser):
fake_project_l = identity_fakes.FakeProject.create_one_project() fake_project_l = identity_fakes.FakeProject.create_one_project()
attr = { attr = {
'tenantId': fake_project_l.id, 'tenantId': fake_project_l.id,
@ -486,7 +459,8 @@ class TestUserList(TestUser):
def test_user_list_project(self): def test_user_list_project(self):
arglist = [ arglist = [
'--project', self.fake_project_l.id, '--project',
self.fake_project_l.id,
] ]
verifylist = [ verifylist = [
('project', self.fake_project_l.id), ('project', self.fake_project_l.id),
@ -522,20 +496,22 @@ class TestUserList(TestUser):
collist = ('ID', 'Name', 'Project', 'Email', 'Enabled') collist = ('ID', 'Name', 'Project', 'Email', 'Enabled')
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
datalist = (( datalist = (
(
self.fake_user_l.id, self.fake_user_l.id,
self.fake_user_l.name, self.fake_user_l.name,
user.ProjectColumn( user.ProjectColumn(
self.fake_project_l.id, self.fake_project_l.id,
{self.fake_project_l.id: self.fake_project_l}), {self.fake_project_l.id: self.fake_project_l},
),
self.fake_user_l.email, self.fake_user_l.email,
True, True,
), ) ),
)
self.assertCountEqual(datalist, tuple(data)) self.assertCountEqual(datalist, tuple(data))
class TestUserSet(TestUser): class TestUserSet(TestUser):
def setUp(self): def setUp(self):
super(TestUserSet, self).setUp() super(TestUserSet, self).setUp()
@ -583,11 +559,13 @@ class TestUserSet(TestUser):
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
self.assertRaises( self.assertRaises(
exceptions.CommandError, self.cmd.take_action, parsed_args) exceptions.CommandError, self.cmd.take_action, parsed_args
)
def test_user_set_name(self): def test_user_set_name(self):
arglist = [ arglist = [
'--name', 'qwerty', '--name',
'qwerty',
self.fake_user.name, self.fake_user.name,
] ]
verifylist = [ verifylist = [
@ -609,15 +587,13 @@ class TestUserSet(TestUser):
'name': 'qwerty', 'name': 'qwerty',
} }
# UserManager.update(user, **kwargs) # UserManager.update(user, **kwargs)
self.users_mock.update.assert_called_with( self.users_mock.update.assert_called_with(self.fake_user.id, **kwargs)
self.fake_user.id,
**kwargs
)
self.assertIsNone(result) self.assertIsNone(result)
def test_user_set_password(self): def test_user_set_password(self):
arglist = [ arglist = [
'--password', 'secret', '--password',
'secret',
self.fake_user.name, self.fake_user.name,
] ]
verifylist = [ verifylist = [
@ -672,7 +648,8 @@ class TestUserSet(TestUser):
def test_user_set_email(self): def test_user_set_email(self):
arglist = [ arglist = [
'--email', 'barney@example.com', '--email',
'barney@example.com',
self.fake_user.name, self.fake_user.name,
] ]
verifylist = [ verifylist = [
@ -694,15 +671,13 @@ class TestUserSet(TestUser):
'enabled': True, 'enabled': True,
} }
# UserManager.update(user, **kwargs) # UserManager.update(user, **kwargs)
self.users_mock.update.assert_called_with( self.users_mock.update.assert_called_with(self.fake_user.id, **kwargs)
self.fake_user.id,
**kwargs
)
self.assertIsNone(result) self.assertIsNone(result)
def test_user_set_project(self): def test_user_set_project(self):
arglist = [ arglist = [
'--project', self.fake_project.id, '--project',
self.fake_project.id,
self.fake_user.name, self.fake_user.name,
] ]
verifylist = [ verifylist = [
@ -748,10 +723,7 @@ class TestUserSet(TestUser):
'enabled': True, 'enabled': True,
} }
# UserManager.update(user, **kwargs) # UserManager.update(user, **kwargs)
self.users_mock.update.assert_called_with( self.users_mock.update.assert_called_with(self.fake_user.id, **kwargs)
self.fake_user.id,
**kwargs
)
self.assertIsNone(result) self.assertIsNone(result)
def test_user_set_disable(self): def test_user_set_disable(self):
@ -777,15 +749,11 @@ class TestUserSet(TestUser):
'enabled': False, 'enabled': False,
} }
# UserManager.update(user, **kwargs) # UserManager.update(user, **kwargs)
self.users_mock.update.assert_called_with( self.users_mock.update.assert_called_with(self.fake_user.id, **kwargs)
self.fake_user.id,
**kwargs
)
self.assertIsNone(result) self.assertIsNone(result)
class TestUserShow(TestUser): class TestUserShow(TestUser):
def setUp(self): def setUp(self):
super(TestUserShow, self).setUp() super(TestUserShow, self).setUp()

View File

@ -58,55 +58,24 @@ EMPLOYEE_GROUP_ID = "0cd5e9"
DEVELOPER_GROUP_ID = "xyz" DEVELOPER_GROUP_ID = "xyz"
MAPPING_RULES = [ MAPPING_RULES = [
{ {
"local": [ "local": [{"group": {"id": EMPLOYEE_GROUP_ID}}],
{
"group": {
"id": EMPLOYEE_GROUP_ID
}
}
],
"remote": [ "remote": [
{ {"type": "orgPersonType", "not_any_of": ["Contractor", "Guest"]}
"type": "orgPersonType", ],
"not_any_of": [
"Contractor",
"Guest"
]
}
]
} }
] ]
MAPPING_RULES_2 = [ MAPPING_RULES_2 = [
{ {
"local": [ "local": [{"group": {"id": DEVELOPER_GROUP_ID}}],
{ "remote": [{"type": "orgPersonType", "any_one_of": ["Contractor"]}],
"group": {
"id": DEVELOPER_GROUP_ID
}
}
],
"remote": [
{
"type": "orgPersonType",
"any_one_of": [
"Contractor"
]
}
]
} }
] ]
MAPPING_RESPONSE = { MAPPING_RESPONSE = {"id": mapping_id, "rules": MAPPING_RULES}
"id": mapping_id,
"rules": MAPPING_RULES
}
MAPPING_RESPONSE_2 = { MAPPING_RESPONSE_2 = {"id": mapping_id, "rules": MAPPING_RULES_2}
"id": mapping_id,
"rules": MAPPING_RULES_2
}
mfa_opt1 = 'password,totp' mfa_opt1 = 'password,totp'
mfa_opt2 = 'password' mfa_opt2 = 'password'
@ -270,7 +239,7 @@ USER = {
trust_id = 't-456' trust_id = 't-456'
trust_expires = None trust_expires = None
trust_impersonation = False trust_impersonation = False
trust_roles = {"id": role_id, "name": role_name}, trust_roles = ({"id": role_id, "name": role_name},)
TRUST = { TRUST = {
'expires_at': trust_expires, 'expires_at': trust_expires,
@ -327,32 +296,31 @@ mapping_id_updated = 'prod_mapping'
sp_id = 'BETA' sp_id = 'BETA'
sp_description = 'Service Provider to burst into' sp_description = 'Service Provider to burst into'
service_provider_url = 'https://beta.example.com/Shibboleth.sso/POST/SAML' service_provider_url = 'https://beta.example.com/Shibboleth.sso/POST/SAML'
sp_auth_url = ('https://beta.example.com/v3/OS-FEDERATION/identity_providers/' sp_auth_url = (
'idp/protocol/saml2/auth') 'https://beta.example.com/v3/OS-FEDERATION/identity_providers/'
'idp/protocol/saml2/auth'
)
SERVICE_PROVIDER = { SERVICE_PROVIDER = {
'id': sp_id, 'id': sp_id,
'enabled': True, 'enabled': True,
'description': sp_description, 'description': sp_description,
'sp_url': service_provider_url, 'sp_url': service_provider_url,
'auth_url': sp_auth_url 'auth_url': sp_auth_url,
} }
PROTOCOL_ID_MAPPING = { PROTOCOL_ID_MAPPING = {'id': protocol_id, 'mapping': mapping_id}
'id': protocol_id,
'mapping': mapping_id
}
PROTOCOL_OUTPUT = { PROTOCOL_OUTPUT = {
'id': protocol_id, 'id': protocol_id,
'mapping_id': mapping_id, 'mapping_id': mapping_id,
'identity_provider': idp_id 'identity_provider': idp_id,
} }
PROTOCOL_OUTPUT_UPDATED = { PROTOCOL_OUTPUT_UPDATED = {
'id': protocol_id, 'id': protocol_id,
'mapping_id': mapping_id_updated, 'mapping_id': mapping_id_updated,
'identity_provider': idp_id 'identity_provider': idp_id,
} }
# Assignments # Assignments
@ -366,22 +334,24 @@ ASSIGNMENT_WITH_PROJECT_ID_AND_USER_ID = {
ASSIGNMENT_WITH_PROJECT_ID_AND_USER_ID_INCLUDE_NAMES = { ASSIGNMENT_WITH_PROJECT_ID_AND_USER_ID_INCLUDE_NAMES = {
'scope': { 'scope': {
'project': { 'project': {
'domain': {'id': domain_id, 'domain': {'id': domain_id, 'name': domain_name},
'name': domain_name},
'id': project_id, 'id': project_id,
'name': project_name}}, 'name': project_name,
}
},
'user': { 'user': {
'domain': {'id': domain_id, 'domain': {'id': domain_id, 'name': domain_name},
'name': domain_name},
'id': user_id, 'id': user_id,
'name': user_name}, 'name': user_name,
'role': {'id': role_id, },
'name': role_name}, 'role': {'id': role_id, 'name': role_name},
} }
ASSIGNMENT_WITH_PROJECT_ID_AND_USER_ID_INHERITED = { ASSIGNMENT_WITH_PROJECT_ID_AND_USER_ID_INHERITED = {
'scope': {'project': {'id': project_id}, 'scope': {
'OS-INHERIT:inherited_to': 'projects'}, 'project': {'id': project_id},
'OS-INHERIT:inherited_to': 'projects',
},
'user': {'id': user_id}, 'user': {'id': user_id},
'role': {'id': role_id}, 'role': {'id': role_id},
} }
@ -405,21 +375,20 @@ ASSIGNMENT_WITH_DOMAIN_ROLE = {
} }
ASSIGNMENT_WITH_DOMAIN_ID_AND_USER_ID_INCLUDE_NAMES = { ASSIGNMENT_WITH_DOMAIN_ID_AND_USER_ID_INCLUDE_NAMES = {
'scope': { 'scope': {'domain': {'id': domain_id, 'name': domain_name}},
'domain': {'id': domain_id,
'name': domain_name}},
'user': { 'user': {
'domain': {'id': domain_id, 'domain': {'id': domain_id, 'name': domain_name},
'name': domain_name},
'id': user_id, 'id': user_id,
'name': user_name}, 'name': user_name,
'role': {'id': role_id, },
'name': role_name}, 'role': {'id': role_id, 'name': role_name},
} }
ASSIGNMENT_WITH_DOMAIN_ID_AND_USER_ID_INHERITED = { ASSIGNMENT_WITH_DOMAIN_ID_AND_USER_ID_INHERITED = {
'scope': {'domain': {'id': domain_id}, 'scope': {
'OS-INHERIT:inherited_to': 'projects'}, 'domain': {'id': domain_id},
'OS-INHERIT:inherited_to': 'projects',
},
'user': {'id': user_id}, 'user': {'id': user_id},
'role': {'id': role_id}, 'role': {'id': role_id},
} }
@ -437,7 +406,7 @@ consumer_secret = 'test consumer secret'
OAUTH_CONSUMER = { OAUTH_CONSUMER = {
'id': consumer_id, 'id': consumer_id,
'secret': consumer_secret, 'secret': consumer_secret,
'description': consumer_description 'description': consumer_description,
} }
access_token_id = 'test access token id' access_token_id = 'test access token id'
@ -448,7 +417,7 @@ OAUTH_ACCESS_TOKEN = {
'id': access_token_id, 'id': access_token_id,
'expires': access_token_expires, 'expires': access_token_expires,
'key': access_token_id, 'key': access_token_id,
'secret': access_token_secret 'secret': access_token_secret,
} }
request_token_id = 'test request token id' request_token_id = 'test request token id'
@ -459,17 +428,15 @@ OAUTH_REQUEST_TOKEN = {
'id': request_token_id, 'id': request_token_id,
'expires': request_token_expires, 'expires': request_token_expires,
'key': request_token_id, 'key': request_token_id,
'secret': request_token_secret 'secret': request_token_secret,
} }
oauth_verifier_pin = '6d74XaDS' oauth_verifier_pin = '6d74XaDS'
OAUTH_VERIFIER = { OAUTH_VERIFIER = {'oauth_verifier': oauth_verifier_pin}
'oauth_verifier': oauth_verifier_pin
}
app_cred_id = 'app-cred-id' app_cred_id = 'app-cred-id'
app_cred_name = 'testing_app_cred' app_cred_name = 'testing_app_cred'
app_cred_role = {"id": role_id, "name": role_name, "domain": None}, app_cred_role = ({"id": role_id, "name": role_name, "domain": None},)
app_cred_description = 'app credential for testing' app_cred_description = 'app credential for testing'
app_cred_expires = datetime.datetime(2022, 1, 1, 0, 0) app_cred_expires = datetime.datetime(2022, 1, 1, 0, 0)
app_cred_expires_str = app_cred_expires.strftime('%Y-%m-%dT%H:%M:%S%z') app_cred_expires_str = app_cred_expires.strftime('%Y-%m-%dT%H:%M:%S%z')
@ -491,7 +458,7 @@ APP_CRED_BASIC = {
'expires_at': None, 'expires_at': None,
'unrestricted': False, 'unrestricted': False,
'secret': app_cred_secret, 'secret': app_cred_secret,
'access_rules': None 'access_rules': None,
} }
APP_CRED_OPTIONS = { APP_CRED_OPTIONS = {
'id': app_cred_id, 'id': app_cred_id,
@ -519,7 +486,7 @@ APP_CRED_ACCESS_RULES = {
'expires_at': None, 'expires_at': None,
'unrestricted': False, 'unrestricted': False,
'secret': app_cred_secret, 'secret': app_cred_secret,
'access_rules': app_cred_access_rules 'access_rules': app_cred_access_rules,
} }
registered_limit_id = 'registered-limit-id' registered_limit_id = 'registered-limit-id'
@ -532,7 +499,7 @@ REGISTERED_LIMIT = {
'resource_name': registered_limit_resource_name, 'resource_name': registered_limit_resource_name,
'service_id': service_id, 'service_id': service_id,
'description': None, 'description': None,
'region_id': None 'region_id': None,
} }
REGISTERED_LIMIT_OPTIONS = { REGISTERED_LIMIT_OPTIONS = {
'id': registered_limit_id, 'id': registered_limit_id,
@ -540,7 +507,7 @@ REGISTERED_LIMIT_OPTIONS = {
'resource_name': registered_limit_resource_name, 'resource_name': registered_limit_resource_name,
'service_id': service_id, 'service_id': service_id,
'description': registered_limit_description, 'description': registered_limit_description,
'region_id': region_id 'region_id': region_id,
} }
limit_id = 'limit-id' limit_id = 'limit-id'
@ -554,7 +521,7 @@ LIMIT = {
'resource_name': limit_resource_name, 'resource_name': limit_resource_name,
'service_id': service_id, 'service_id': service_id,
'description': None, 'description': None,
'region_id': None 'region_id': None,
} }
LIMIT_OPTIONS = { LIMIT_OPTIONS = {
'id': limit_id, 'id': limit_id,
@ -563,7 +530,7 @@ LIMIT_OPTIONS = {
'resource_name': limit_resource_name, 'resource_name': limit_resource_name,
'service_id': service_id, 'service_id': service_id,
'description': limit_description, 'description': limit_description,
'region_id': region_id 'region_id': region_id,
} }
@ -598,7 +565,6 @@ def fake_auth_ref(fake_token, fake_service=None):
class FakeAuth(object): class FakeAuth(object):
def __init__(self, auth_method_class=None): def __init__(self, auth_method_class=None):
self._auth_method_class = auth_method_class self._auth_method_class = auth_method_class
@ -607,13 +573,11 @@ class FakeAuth(object):
class FakeSession(object): class FakeSession(object):
def __init__(self, **kwargs): def __init__(self, **kwargs):
self.auth = FakeAuth() self.auth = FakeAuth()
class FakeIdentityv3Client(object): class FakeIdentityv3Client(object):
def __init__(self, **kwargs): def __init__(self, **kwargs):
self.domains = mock.Mock() self.domains = mock.Mock()
self.domains.resource_class = fakes.FakeResource(None, {}) self.domains.resource_class = fakes.FakeResource(None, {})
@ -638,8 +602,9 @@ class FakeIdentityv3Client(object):
self.services = mock.Mock() self.services = mock.Mock()
self.services.resource_class = fakes.FakeResource(None, {}) self.services.resource_class = fakes.FakeResource(None, {})
self.session = mock.Mock() self.session = mock.Mock()
self.session.auth.auth_ref.service_catalog.resource_class = \ self.session.auth.auth_ref.service_catalog.resource_class = (
fakes.FakeResource(None, {}) fakes.FakeResource(None, {})
)
self.tokens = mock.Mock() self.tokens = mock.Mock()
self.tokens.resource_class = fakes.FakeResource(None, {}) self.tokens.resource_class = fakes.FakeResource(None, {})
self.trusts = mock.Mock() self.trusts = mock.Mock()
@ -654,8 +619,9 @@ class FakeIdentityv3Client(object):
self.auth.client = mock.Mock() self.auth.client = mock.Mock()
self.auth.client.resource_class = fakes.FakeResource(None, {}) self.auth.client.resource_class = fakes.FakeResource(None, {})
self.application_credentials = mock.Mock() self.application_credentials = mock.Mock()
self.application_credentials.resource_class = fakes.FakeResource(None, self.application_credentials.resource_class = fakes.FakeResource(
{}) None, {}
)
self.access_rules = mock.Mock() self.access_rules = mock.Mock()
self.access_rules.resource_class = fakes.FakeResource(None, {}) self.access_rules.resource_class = fakes.FakeResource(None, {})
self.inference_rules = mock.Mock() self.inference_rules = mock.Mock()
@ -667,7 +633,6 @@ class FakeIdentityv3Client(object):
class FakeFederationManager(object): class FakeFederationManager(object):
def __init__(self, **kwargs): def __init__(self, **kwargs):
self.identity_providers = mock.Mock() self.identity_providers = mock.Mock()
self.identity_providers.resource_class = fakes.FakeResource(None, {}) self.identity_providers.resource_class = fakes.FakeResource(None, {})
@ -684,14 +649,12 @@ class FakeFederationManager(object):
class FakeFederatedClient(FakeIdentityv3Client): class FakeFederatedClient(FakeIdentityv3Client):
def __init__(self, **kwargs): def __init__(self, **kwargs):
super(FakeFederatedClient, self).__init__(**kwargs) super(FakeFederatedClient, self).__init__(**kwargs)
self.federation = FakeFederationManager() self.federation = FakeFederationManager()
class FakeOAuth1Client(FakeIdentityv3Client): class FakeOAuth1Client(FakeIdentityv3Client):
def __init__(self, **kwargs): def __init__(self, **kwargs):
super(FakeOAuth1Client, self).__init__(**kwargs) super(FakeOAuth1Client, self).__init__(**kwargs)
@ -704,7 +667,6 @@ class FakeOAuth1Client(FakeIdentityv3Client):
class TestIdentityv3(utils.TestCommand): class TestIdentityv3(utils.TestCommand):
def setUp(self): def setUp(self):
super(TestIdentityv3, self).setUp() super(TestIdentityv3, self).setUp()
@ -715,24 +677,20 @@ class TestIdentityv3(utils.TestCommand):
class TestFederatedIdentity(utils.TestCommand): class TestFederatedIdentity(utils.TestCommand):
def setUp(self): def setUp(self):
super(TestFederatedIdentity, self).setUp() super(TestFederatedIdentity, self).setUp()
self.app.client_manager.identity = FakeFederatedClient( self.app.client_manager.identity = FakeFederatedClient(
endpoint=fakes.AUTH_URL, endpoint=fakes.AUTH_URL, token=fakes.AUTH_TOKEN
token=fakes.AUTH_TOKEN
) )
class TestOAuth1(utils.TestCommand): class TestOAuth1(utils.TestCommand):
def setUp(self): def setUp(self):
super(TestOAuth1, self).setUp() super(TestOAuth1, self).setUp()
self.app.client_manager.identity = FakeOAuth1Client( self.app.client_manager.identity = FakeOAuth1Client(
endpoint=fakes.AUTH_URL, endpoint=fakes.AUTH_URL, token=fakes.AUTH_TOKEN
token=fakes.AUTH_TOKEN
) )
@ -765,8 +723,9 @@ class FakeProject(object):
} }
project_info.update(attrs) project_info.update(attrs)
project = fakes.FakeResource(info=copy.deepcopy(project_info), project = fakes.FakeResource(
loaded=True) info=copy.deepcopy(project_info), loaded=True
)
return project return project
@staticmethod @staticmethod
@ -813,8 +772,9 @@ class FakeDomain(object):
} }
domain_info.update(attrs) domain_info.update(attrs)
domain = fakes.FakeResource(info=copy.deepcopy(domain_info), domain = fakes.FakeResource(
loaded=True) info=copy.deepcopy(domain_info), loaded=True
)
return domain return domain
@ -845,7 +805,8 @@ class FakeCredential(object):
credential_info.update(attrs) credential_info.update(attrs)
credential = fakes.FakeResource( credential = fakes.FakeResource(
info=copy.deepcopy(credential_info), loaded=True) info=copy.deepcopy(credential_info), loaded=True
)
return credential return credential
@staticmethod @staticmethod
@ -914,8 +875,7 @@ class FakeUser(object):
} }
user_info.update(attrs) user_info.update(attrs)
user = fakes.FakeResource(info=copy.deepcopy(user_info), user = fakes.FakeResource(info=copy.deepcopy(user_info), loaded=True)
loaded=True)
return user return user
@staticmethod @staticmethod
@ -982,8 +942,7 @@ class FakeGroup(object):
} }
group_info.update(attrs) group_info.update(attrs)
group = fakes.FakeResource(info=copy.deepcopy(group_info), group = fakes.FakeResource(info=copy.deepcopy(group_info), loaded=True)
loaded=True)
return group return group
@staticmethod @staticmethod
@ -1052,8 +1011,9 @@ class FakeEndpoint(object):
} }
endpoint_info.update(attrs) endpoint_info.update(attrs)
endpoint = fakes.FakeResource(info=copy.deepcopy(endpoint_info), endpoint = fakes.FakeResource(
loaded=True) info=copy.deepcopy(endpoint_info), loaded=True
)
return endpoint return endpoint
@staticmethod @staticmethod
@ -1076,8 +1036,7 @@ class FakeEndpoint(object):
# Overwrite default attributes if there are some attributes set # Overwrite default attributes if there are some attributes set
endpoint_filter_info.update(attrs) endpoint_filter_info.update(attrs)
endpoint_filter = fakes.FakeModel( endpoint_filter = fakes.FakeModel(copy.deepcopy(endpoint_filter_info))
copy.deepcopy(endpoint_filter_info))
return endpoint_filter return endpoint_filter
@ -1110,8 +1069,9 @@ class FakeEndpointGroup(object):
} }
endpointgroup_info.update(attrs) endpointgroup_info.update(attrs)
endpoint = fakes.FakeResource(info=copy.deepcopy(endpointgroup_info), endpoint = fakes.FakeResource(
loaded=True) info=copy.deepcopy(endpointgroup_info), loaded=True
)
return endpoint return endpoint
@staticmethod @staticmethod
@ -1135,7 +1095,8 @@ class FakeEndpointGroup(object):
endpointgroup_filter_info.update(attrs) endpointgroup_filter_info.update(attrs)
endpointgroup_filter = fakes.FakeModel( endpointgroup_filter = fakes.FakeModel(
copy.deepcopy(endpointgroup_filter_info)) copy.deepcopy(endpointgroup_filter_info)
)
return endpointgroup_filter return endpointgroup_filter
@ -1166,8 +1127,9 @@ class FakeService(object):
} }
service_info.update(attrs) service_info.update(attrs)
service = fakes.FakeResource(info=copy.deepcopy(service_info), service = fakes.FakeResource(
loaded=True) info=copy.deepcopy(service_info), loaded=True
)
return service return service
@ -1195,13 +1157,15 @@ class FakeRoleAssignment(object):
role_assignment_info.update(attrs) role_assignment_info.update(attrs)
role_assignment = fakes.FakeResource( role_assignment = fakes.FakeResource(
info=copy.deepcopy(role_assignment_info), loaded=True) info=copy.deepcopy(role_assignment_info), loaded=True
)
return role_assignment return role_assignment
class FakeImpliedRoleResponse(object): class FakeImpliedRoleResponse(object):
"""Fake one or more role assignment.""" """Fake one or more role assignment."""
def __init__(self, prior_role, implied_roles): def __init__(self, prior_role, implied_roles):
self.prior_role = prior_role self.prior_role = prior_role
self.implies = [role for role in implied_roles] self.implies = [role for role in implied_roles]
@ -1215,8 +1179,6 @@ class FakeImpliedRoleResponse(object):
""" """
# set default attributes. # set default attributes.
implied_roles = [ implied_roles = [FakeImpliedRoleResponse(ROLES[0], [ROLES[1]])]
FakeImpliedRoleResponse(ROLES[0], [ROLES[1]])
]
return implied_roles return implied_roles

View File

@ -25,7 +25,6 @@ from openstackclient.tests.unit.identity.v3 import fakes as identity_fakes
class TestAccessRule(identity_fakes.TestIdentityv3): class TestAccessRule(identity_fakes.TestIdentityv3):
def setUp(self): def setUp(self):
super(TestAccessRule, self).setUp() super(TestAccessRule, self).setUp()
@ -37,7 +36,6 @@ class TestAccessRule(identity_fakes.TestIdentityv3):
class TestAccessRuleDelete(TestAccessRule): class TestAccessRuleDelete(TestAccessRule):
def setUp(self): def setUp(self):
super(TestAccessRuleDelete, self).setUp() super(TestAccessRuleDelete, self).setUp()
@ -50,16 +48,13 @@ class TestAccessRuleDelete(TestAccessRule):
self.access_rules_mock.delete.return_value = None self.access_rules_mock.delete.return_value = None
# Get the command object to test # Get the command object to test
self.cmd = access_rule.DeleteAccessRule( self.cmd = access_rule.DeleteAccessRule(self.app, None)
self.app, None)
def test_access_rule_delete(self): def test_access_rule_delete(self):
arglist = [ arglist = [
identity_fakes.access_rule_id, identity_fakes.access_rule_id,
] ]
verifylist = [ verifylist = [('access_rule', [identity_fakes.access_rule_id])]
('access_rule', [identity_fakes.access_rule_id])
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
result = self.cmd.take_action(parsed_args) result = self.cmd.take_action(parsed_args)
@ -71,8 +66,10 @@ class TestAccessRuleDelete(TestAccessRule):
@mock.patch.object(utils, 'find_resource') @mock.patch.object(utils, 'find_resource')
def test_delete_multi_access_rules_with_exception(self, find_mock): def test_delete_multi_access_rules_with_exception(self, find_mock):
find_mock.side_effect = [self.access_rules_mock.get.return_value, find_mock.side_effect = [
exceptions.CommandError] self.access_rules_mock.get.return_value,
exceptions.CommandError,
]
arglist = [ arglist = [
identity_fakes.access_rule_id, identity_fakes.access_rule_id,
'nonexistent_access_rule', 'nonexistent_access_rule',
@ -86,21 +83,24 @@ class TestAccessRuleDelete(TestAccessRule):
self.cmd.take_action(parsed_args) self.cmd.take_action(parsed_args)
self.fail('CommandError should be raised.') self.fail('CommandError should be raised.')
except exceptions.CommandError as e: except exceptions.CommandError as e:
self.assertEqual('1 of 2 access rules failed to' self.assertEqual(
' delete.', str(e)) '1 of 2 access rules failed to' ' delete.', str(e)
)
find_mock.assert_any_call(self.access_rules_mock, find_mock.assert_any_call(
identity_fakes.access_rule_id) self.access_rules_mock, identity_fakes.access_rule_id
find_mock.assert_any_call(self.access_rules_mock, )
'nonexistent_access_rule') find_mock.assert_any_call(
self.access_rules_mock, 'nonexistent_access_rule'
)
self.assertEqual(2, find_mock.call_count) self.assertEqual(2, find_mock.call_count)
self.access_rules_mock.delete.assert_called_once_with( self.access_rules_mock.delete.assert_called_once_with(
identity_fakes.access_rule_id) identity_fakes.access_rule_id
)
class TestAccessRuleList(TestAccessRule): class TestAccessRuleList(TestAccessRule):
def setUp(self): def setUp(self):
super(TestAccessRuleList, self).setUp() super(TestAccessRuleList, self).setUp()
@ -126,17 +126,18 @@ class TestAccessRuleList(TestAccessRule):
collist = ('ID', 'Service', 'Method', 'Path') collist = ('ID', 'Service', 'Method', 'Path')
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
datalist = (( datalist = (
(
identity_fakes.access_rule_id, identity_fakes.access_rule_id,
identity_fakes.access_rule_service, identity_fakes.access_rule_service,
identity_fakes.access_rule_method, identity_fakes.access_rule_method,
identity_fakes.access_rule_path, identity_fakes.access_rule_path,
), ) ),
)
self.assertEqual(datalist, tuple(data)) self.assertEqual(datalist, tuple(data))
class TestAccessRuleShow(TestAccessRule): class TestAccessRuleShow(TestAccessRule):
def setUp(self): def setUp(self):
super(TestAccessRuleShow, self).setUp() super(TestAccessRuleShow, self).setUp()
@ -161,7 +162,8 @@ class TestAccessRuleShow(TestAccessRule):
columns, data = self.cmd.take_action(parsed_args) columns, data = self.cmd.take_action(parsed_args)
self.access_rules_mock.get.assert_called_with( self.access_rules_mock.get.assert_called_with(
identity_fakes.access_rule_id) identity_fakes.access_rule_id
)
collist = ('id', 'method', 'path', 'service') collist = ('id', 'method', 'path', 'service')
self.assertEqual(collist, columns) self.assertEqual(collist, columns)

View File

@ -26,7 +26,6 @@ from openstackclient.tests.unit.identity.v3 import fakes as identity_fakes
class TestApplicationCredential(identity_fakes.TestIdentityv3): class TestApplicationCredential(identity_fakes.TestIdentityv3):
def setUp(self): def setUp(self):
super(TestApplicationCredential, self).setUp() super(TestApplicationCredential, self).setUp()
@ -38,7 +37,6 @@ class TestApplicationCredential(identity_fakes.TestIdentityv3):
class TestApplicationCredentialCreate(TestApplicationCredential): class TestApplicationCredentialCreate(TestApplicationCredential):
def setUp(self): def setUp(self):
super(TestApplicationCredentialCreate, self).setUp() super(TestApplicationCredentialCreate, self).setUp()
@ -50,7 +48,8 @@ class TestApplicationCredentialCreate(TestApplicationCredential):
# Get the command object to test # Get the command object to test
self.cmd = application_credential.CreateApplicationCredential( self.cmd = application_credential.CreateApplicationCredential(
self.app, None) self.app, None
)
def test_application_credential_create_basic(self): def test_application_credential_create_basic(self):
self.app_creds_mock.create.return_value = fakes.FakeResource( self.app_creds_mock.create.return_value = fakes.FakeResource(
@ -60,12 +59,8 @@ class TestApplicationCredentialCreate(TestApplicationCredential):
) )
name = identity_fakes.app_cred_name name = identity_fakes.app_cred_name
arglist = [ arglist = [name]
name verifylist = [('name', identity_fakes.app_cred_name)]
]
verifylist = [
('name', identity_fakes.app_cred_name)
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
# In base command class ShowOne in cliff, abstract method take_action() # In base command class ShowOne in cliff, abstract method take_action()
@ -82,13 +77,19 @@ class TestApplicationCredentialCreate(TestApplicationCredential):
'unrestricted': False, 'unrestricted': False,
'access_rules': None, 'access_rules': None,
} }
self.app_creds_mock.create.assert_called_with( self.app_creds_mock.create.assert_called_with(name, **kwargs)
name,
**kwargs
)
collist = ('access_rules', 'description', 'expires_at', 'id', 'name', collist = (
'project_id', 'roles', 'secret', 'unrestricted') 'access_rules',
'description',
'expires_at',
'id',
'name',
'project_id',
'roles',
'secret',
'unrestricted',
)
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
datalist = ( datalist = (
None, None,
@ -113,17 +114,21 @@ class TestApplicationCredentialCreate(TestApplicationCredential):
arglist = [ arglist = [
name, name,
'--secret', 'moresecuresecret', '--secret',
'--role', identity_fakes.role_id, 'moresecuresecret',
'--expiration', identity_fakes.app_cred_expires_str, '--role',
'--description', 'credential for testing' identity_fakes.role_id,
'--expiration',
identity_fakes.app_cred_expires_str,
'--description',
'credential for testing',
] ]
verifylist = [ verifylist = [
('name', identity_fakes.app_cred_name), ('name', identity_fakes.app_cred_name),
('secret', 'moresecuresecret'), ('secret', 'moresecuresecret'),
('role', [identity_fakes.role_id]), ('role', [identity_fakes.role_id]),
('expiration', identity_fakes.app_cred_expires_str), ('expiration', identity_fakes.app_cred_expires_str),
('description', 'credential for testing') ('description', 'credential for testing'),
] ]
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@ -141,13 +146,19 @@ class TestApplicationCredentialCreate(TestApplicationCredential):
'unrestricted': False, 'unrestricted': False,
'access_rules': None, 'access_rules': None,
} }
self.app_creds_mock.create.assert_called_with( self.app_creds_mock.create.assert_called_with(name, **kwargs)
name,
**kwargs
)
collist = ('access_rules', 'description', 'expires_at', 'id', 'name', collist = (
'project_id', 'roles', 'secret', 'unrestricted') 'access_rules',
'description',
'expires_at',
'id',
'name',
'project_id',
'roles',
'secret',
'unrestricted',
)
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
datalist = ( datalist = (
None, None,
@ -172,7 +183,8 @@ class TestApplicationCredentialCreate(TestApplicationCredential):
arglist = [ arglist = [
name, name,
'--access-rules', identity_fakes.app_cred_access_rules, '--access-rules',
identity_fakes.app_cred_access_rules,
] ]
verifylist = [ verifylist = [
('name', identity_fakes.app_cred_name), ('name', identity_fakes.app_cred_name),
@ -189,15 +201,21 @@ class TestApplicationCredentialCreate(TestApplicationCredential):
'expires_at': None, 'expires_at': None,
'description': None, 'description': None,
'unrestricted': False, 'unrestricted': False,
'access_rules': json.loads(identity_fakes.app_cred_access_rules) 'access_rules': json.loads(identity_fakes.app_cred_access_rules),
} }
self.app_creds_mock.create.assert_called_with( self.app_creds_mock.create.assert_called_with(name, **kwargs)
name,
**kwargs
)
collist = ('access_rules', 'description', 'expires_at', 'id', 'name', collist = (
'project_id', 'roles', 'secret', 'unrestricted') 'access_rules',
'description',
'expires_at',
'id',
'name',
'project_id',
'roles',
'secret',
'unrestricted',
)
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
datalist = ( datalist = (
identity_fakes.app_cred_access_rules, identity_fakes.app_cred_access_rules,
@ -215,7 +233,8 @@ class TestApplicationCredentialCreate(TestApplicationCredential):
@mock.patch('openstackclient.identity.v3.application_credential.json.load') @mock.patch('openstackclient.identity.v3.application_credential.json.load')
@mock.patch('openstackclient.identity.v3.application_credential.open') @mock.patch('openstackclient.identity.v3.application_credential.open')
def test_application_credential_create_with_access_rules_file( def test_application_credential_create_with_access_rules_file(
self, _, mock_json_load): self, _, mock_json_load
):
mock_json_load.return_value = identity_fakes.app_cred_access_rules mock_json_load.return_value = identity_fakes.app_cred_access_rules
name = identity_fakes.app_cred_name name = identity_fakes.app_cred_name
@ -227,7 +246,8 @@ class TestApplicationCredentialCreate(TestApplicationCredential):
arglist = [ arglist = [
name, name,
'--access-rules', identity_fakes.app_cred_access_rules_path, '--access-rules',
identity_fakes.app_cred_access_rules_path,
] ]
verifylist = [ verifylist = [
('name', identity_fakes.app_cred_name), ('name', identity_fakes.app_cred_name),
@ -244,15 +264,21 @@ class TestApplicationCredentialCreate(TestApplicationCredential):
'expires_at': None, 'expires_at': None,
'description': None, 'description': None,
'unrestricted': False, 'unrestricted': False,
'access_rules': identity_fakes.app_cred_access_rules 'access_rules': identity_fakes.app_cred_access_rules,
} }
self.app_creds_mock.create.assert_called_with( self.app_creds_mock.create.assert_called_with(name, **kwargs)
name,
**kwargs
)
collist = ('access_rules', 'description', 'expires_at', 'id', 'name', collist = (
'project_id', 'roles', 'secret', 'unrestricted') 'access_rules',
'description',
'expires_at',
'id',
'name',
'project_id',
'roles',
'secret',
'unrestricted',
)
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
datalist = ( datalist = (
identity_fakes.app_cred_access_rules, identity_fakes.app_cred_access_rules,
@ -269,7 +295,6 @@ class TestApplicationCredentialCreate(TestApplicationCredential):
class TestApplicationCredentialDelete(TestApplicationCredential): class TestApplicationCredentialDelete(TestApplicationCredential):
def setUp(self): def setUp(self):
super(TestApplicationCredentialDelete, self).setUp() super(TestApplicationCredentialDelete, self).setUp()
@ -283,15 +308,14 @@ class TestApplicationCredentialDelete(TestApplicationCredential):
# Get the command object to test # Get the command object to test
self.cmd = application_credential.DeleteApplicationCredential( self.cmd = application_credential.DeleteApplicationCredential(
self.app, None) self.app, None
)
def test_application_credential_delete(self): def test_application_credential_delete(self):
arglist = [ arglist = [
identity_fakes.app_cred_id, identity_fakes.app_cred_id,
] ]
verifylist = [ verifylist = [('application_credential', [identity_fakes.app_cred_id])]
('application_credential', [identity_fakes.app_cred_id])
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
result = self.cmd.take_action(parsed_args) result = self.cmd.take_action(parsed_args)
@ -303,8 +327,10 @@ class TestApplicationCredentialDelete(TestApplicationCredential):
@mock.patch.object(utils, 'find_resource') @mock.patch.object(utils, 'find_resource')
def test_delete_multi_app_creds_with_exception(self, find_mock): def test_delete_multi_app_creds_with_exception(self, find_mock):
find_mock.side_effect = [self.app_creds_mock.get.return_value, find_mock.side_effect = [
exceptions.CommandError] self.app_creds_mock.get.return_value,
exceptions.CommandError,
]
arglist = [ arglist = [
identity_fakes.app_cred_id, identity_fakes.app_cred_id,
'nonexistent_app_cred', 'nonexistent_app_cred',
@ -318,21 +344,22 @@ class TestApplicationCredentialDelete(TestApplicationCredential):
self.cmd.take_action(parsed_args) self.cmd.take_action(parsed_args)
self.fail('CommandError should be raised.') self.fail('CommandError should be raised.')
except exceptions.CommandError as e: except exceptions.CommandError as e:
self.assertEqual('1 of 2 application credentials failed to' self.assertEqual(
' delete.', str(e)) '1 of 2 application credentials failed to' ' delete.', str(e)
)
find_mock.assert_any_call(self.app_creds_mock, find_mock.assert_any_call(
identity_fakes.app_cred_id) self.app_creds_mock, identity_fakes.app_cred_id
find_mock.assert_any_call(self.app_creds_mock, )
'nonexistent_app_cred') find_mock.assert_any_call(self.app_creds_mock, 'nonexistent_app_cred')
self.assertEqual(2, find_mock.call_count) self.assertEqual(2, find_mock.call_count)
self.app_creds_mock.delete.assert_called_once_with( self.app_creds_mock.delete.assert_called_once_with(
identity_fakes.app_cred_id) identity_fakes.app_cred_id
)
class TestApplicationCredentialList(TestApplicationCredential): class TestApplicationCredentialList(TestApplicationCredential):
def setUp(self): def setUp(self):
super(TestApplicationCredentialList, self).setUp() super(TestApplicationCredentialList, self).setUp()
@ -345,8 +372,9 @@ class TestApplicationCredentialList(TestApplicationCredential):
] ]
# Get the command object to test # Get the command object to test
self.cmd = application_credential.ListApplicationCredential(self.app, self.cmd = application_credential.ListApplicationCredential(
None) self.app, None
)
def test_application_credential_list(self): def test_application_credential_list(self):
arglist = [] arglist = []
@ -362,18 +390,19 @@ class TestApplicationCredentialList(TestApplicationCredential):
collist = ('ID', 'Name', 'Project ID', 'Description', 'Expires At') collist = ('ID', 'Name', 'Project ID', 'Description', 'Expires At')
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
datalist = (( datalist = (
(
identity_fakes.app_cred_id, identity_fakes.app_cred_id,
identity_fakes.app_cred_name, identity_fakes.app_cred_name,
identity_fakes.project_id, identity_fakes.project_id,
None, None,
None None,
), ) ),
)
self.assertEqual(datalist, tuple(data)) self.assertEqual(datalist, tuple(data))
class TestApplicationCredentialShow(TestApplicationCredential): class TestApplicationCredentialShow(TestApplicationCredential):
def setUp(self): def setUp(self):
super(TestApplicationCredentialShow, self).setUp() super(TestApplicationCredentialShow, self).setUp()
@ -384,8 +413,9 @@ class TestApplicationCredentialShow(TestApplicationCredential):
) )
# Get the command object to test # Get the command object to test
self.cmd = application_credential.ShowApplicationCredential(self.app, self.cmd = application_credential.ShowApplicationCredential(
None) self.app, None
)
def test_application_credential_show(self): def test_application_credential_show(self):
arglist = [ arglist = [
@ -403,8 +433,17 @@ class TestApplicationCredentialShow(TestApplicationCredential):
self.app_creds_mock.get.assert_called_with(identity_fakes.app_cred_id) self.app_creds_mock.get.assert_called_with(identity_fakes.app_cred_id)
collist = ('access_rules', 'description', 'expires_at', 'id', 'name', collist = (
'project_id', 'roles', 'secret', 'unrestricted') 'access_rules',
'description',
'expires_at',
'id',
'name',
'project_id',
'roles',
'secret',
'unrestricted',
)
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
datalist = ( datalist = (
None, None,

View File

@ -19,7 +19,6 @@ from openstackclient.tests.unit import utils
class TestCatalog(utils.TestCommand): class TestCatalog(utils.TestCommand):
fake_service = { fake_service = {
'id': 'qwertyuiop', 'id': 'qwertyuiop',
'type': 'compute', 'type': 'compute',
@ -62,7 +61,6 @@ class TestCatalog(utils.TestCommand):
class TestCatalogList(TestCatalog): class TestCatalogList(TestCatalog):
def setUp(self): def setUp(self):
super(TestCatalogList, self).setUp() super(TestCatalogList, self).setUp()
@ -88,17 +86,19 @@ class TestCatalogList(TestCatalog):
collist = ('Name', 'Type', 'Endpoints') collist = ('Name', 'Type', 'Endpoints')
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
datalist = (( datalist = (
(
'supernova', 'supernova',
'compute', 'compute',
catalog.EndpointsColumn( catalog.EndpointsColumn(
auth_ref.service_catalog.catalog[0]['endpoints']), auth_ref.service_catalog.catalog[0]['endpoints']
), ) ),
),
)
self.assertCountEqual(datalist, tuple(data)) self.assertCountEqual(datalist, tuple(data))
class TestCatalogShow(TestCatalog): class TestCatalogShow(TestCatalog):
def setUp(self): def setUp(self):
super(TestCatalogShow, self).setUp() super(TestCatalogShow, self).setUp()
@ -130,7 +130,8 @@ class TestCatalogShow(TestCatalog):
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
datalist = ( datalist = (
catalog.EndpointsColumn( catalog.EndpointsColumn(
auth_ref.service_catalog.catalog[0]['endpoints']), auth_ref.service_catalog.catalog[0]['endpoints']
),
'qwertyuiop', 'qwertyuiop',
'supernova', 'supernova',
'compute', 'compute',
@ -146,4 +147,5 @@ class TestFormatColumns(TestCatalog):
'onlyone\n admin: https://admin.example.com\n' 'onlyone\n admin: https://admin.example.com\n'
'<none>\n internal: https://internal.example.com\n' '<none>\n internal: https://internal.example.com\n'
'<none>\n none: https://none.example.com\n', '<none>\n none: https://none.example.com\n',
col.human_readable()) col.human_readable(),
)

View File

@ -18,7 +18,6 @@ from openstackclient.tests.unit.identity.v3 import fakes as identity_fakes
class TestOAuth1(identity_fakes.TestOAuth1): class TestOAuth1(identity_fakes.TestOAuth1):
def setUp(self): def setUp(self):
super(TestOAuth1, self).setUp() super(TestOAuth1, self).setUp()
identity_client = self.app.client_manager.identity identity_client = self.app.client_manager.identity
@ -27,7 +26,6 @@ class TestOAuth1(identity_fakes.TestOAuth1):
class TestConsumerCreate(TestOAuth1): class TestConsumerCreate(TestOAuth1):
def setUp(self): def setUp(self):
super(TestConsumerCreate, self).setUp() super(TestConsumerCreate, self).setUp()
@ -41,7 +39,8 @@ class TestConsumerCreate(TestOAuth1):
def test_create_consumer(self): def test_create_consumer(self):
arglist = [ arglist = [
'--description', identity_fakes.consumer_description, '--description',
identity_fakes.consumer_description,
] ]
verifylist = [ verifylist = [
('description', identity_fakes.consumer_description), ('description', identity_fakes.consumer_description),
@ -64,7 +63,6 @@ class TestConsumerCreate(TestOAuth1):
class TestConsumerDelete(TestOAuth1): class TestConsumerDelete(TestOAuth1):
def setUp(self): def setUp(self):
super(TestConsumerDelete, self).setUp() super(TestConsumerDelete, self).setUp()
@ -96,7 +94,6 @@ class TestConsumerDelete(TestOAuth1):
class TestConsumerList(TestOAuth1): class TestConsumerList(TestOAuth1):
def setUp(self): def setUp(self):
super(TestConsumerList, self).setUp() super(TestConsumerList, self).setUp()
@ -129,15 +126,16 @@ class TestConsumerList(TestOAuth1):
collist = ('ID', 'Description') collist = ('ID', 'Description')
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
datalist = (( datalist = (
(
identity_fakes.consumer_id, identity_fakes.consumer_id,
identity_fakes.consumer_description, identity_fakes.consumer_description,
), ) ),
)
self.assertEqual(datalist, tuple(data)) self.assertEqual(datalist, tuple(data))
class TestConsumerSet(TestOAuth1): class TestConsumerSet(TestOAuth1):
def setUp(self): def setUp(self):
super(TestConsumerSet, self).setUp() super(TestConsumerSet, self).setUp()
@ -161,7 +159,8 @@ class TestConsumerSet(TestOAuth1):
new_description = "consumer new description" new_description = "consumer new description"
arglist = [ arglist = [
'--description', new_description, '--description',
new_description,
identity_fakes.consumer_id, identity_fakes.consumer_id,
] ]
verifylist = [ verifylist = [
@ -174,14 +173,12 @@ class TestConsumerSet(TestOAuth1):
kwargs = {'description': new_description} kwargs = {'description': new_description}
self.consumers_mock.update.assert_called_with( self.consumers_mock.update.assert_called_with(
identity_fakes.consumer_id, identity_fakes.consumer_id, **kwargs
**kwargs
) )
self.assertIsNone(result) self.assertIsNone(result)
class TestConsumerShow(TestOAuth1): class TestConsumerShow(TestOAuth1):
def setUp(self): def setUp(self):
super(TestConsumerShow, self).setUp() super(TestConsumerShow, self).setUp()

View File

@ -21,7 +21,6 @@ from openstackclient.tests.unit import utils
class TestCredential(identity_fakes.TestIdentityv3): class TestCredential(identity_fakes.TestIdentityv3):
def setUp(self): def setUp(self):
super(TestCredential, self).setUp() super(TestCredential, self).setUp()
@ -39,7 +38,6 @@ class TestCredential(identity_fakes.TestIdentityv3):
class TestCredentialCreate(TestCredential): class TestCredentialCreate(TestCredential):
user = identity_fakes.FakeUser.create_one_user() user = identity_fakes.FakeUser.create_one_user()
project = identity_fakes.FakeProject.create_one_project() project = identity_fakes.FakeProject.create_one_project()
columns = ( columns = (
@ -54,7 +52,8 @@ class TestCredentialCreate(TestCredential):
super(TestCredentialCreate, self).setUp() super(TestCredentialCreate, self).setUp()
self.credential = identity_fakes.FakeCredential.create_one_credential( self.credential = identity_fakes.FakeCredential.create_one_credential(
attrs={'user_id': self.user.id, 'project_id': self.project.id}) attrs={'user_id': self.user.id, 'project_id': self.project.id}
)
self.credentials_mock.create.return_value = self.credential self.credentials_mock.create.return_value = self.credential
self.users_mock.get.return_value = self.user self.users_mock.get.return_value = self.user
self.projects_mock.get.return_value = self.project self.projects_mock.get.return_value = self.project
@ -87,9 +86,7 @@ class TestCredentialCreate(TestCredential):
'blob': self.credential.blob, 'blob': self.credential.blob,
'project': None, 'project': None,
} }
self.credentials_mock.create.assert_called_once_with( self.credentials_mock.create.assert_called_once_with(**kwargs)
**kwargs
)
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
self.assertEqual(self.data, data) self.assertEqual(self.data, data)
@ -98,8 +95,10 @@ class TestCredentialCreate(TestCredential):
arglist = [ arglist = [
self.credential.user_id, self.credential.user_id,
self.credential.blob, self.credential.blob,
'--type', self.credential.type, '--type',
'--project', self.credential.project_id, self.credential.type,
'--project',
self.credential.project_id,
] ]
verifylist = [ verifylist = [
('user', self.credential.user_id), ('user', self.credential.user_id),
@ -117,16 +116,13 @@ class TestCredentialCreate(TestCredential):
'blob': self.credential.blob, 'blob': self.credential.blob,
'project': self.credential.project_id, 'project': self.credential.project_id,
} }
self.credentials_mock.create.assert_called_once_with( self.credentials_mock.create.assert_called_once_with(**kwargs)
**kwargs
)
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
self.assertEqual(self.data, data) self.assertEqual(self.data, data)
class TestCredentialDelete(TestCredential): class TestCredentialDelete(TestCredential):
credentials = identity_fakes.FakeCredential.create_credentials(count=2) credentials = identity_fakes.FakeCredential.create_credentials(count=2)
def setUp(self): def setUp(self):
@ -181,8 +177,8 @@ class TestCredentialDelete(TestCredential):
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
delete_mock_result = [None, exceptions.CommandError] delete_mock_result = [None, exceptions.CommandError]
self.credentials_mock.delete = ( self.credentials_mock.delete = mock.Mock(
mock.Mock(side_effect=delete_mock_result) side_effect=delete_mock_result
) )
try: try:
@ -196,17 +192,18 @@ class TestCredentialDelete(TestCredential):
class TestCredentialList(TestCredential): class TestCredentialList(TestCredential):
credential = identity_fakes.FakeCredential.create_one_credential() credential = identity_fakes.FakeCredential.create_one_credential()
columns = ('ID', 'Type', 'User ID', 'Data', 'Project ID') columns = ('ID', 'Type', 'User ID', 'Data', 'Project ID')
data = (( data = (
(
credential.id, credential.id,
credential.type, credential.type,
credential.user_id, credential.user_id,
credential.blob, credential.blob,
credential.project_id, credential.project_id,
), ) ),
)
def setUp(self): def setUp(self):
super(TestCredentialList, self).setUp() super(TestCredentialList, self).setUp()
@ -232,8 +229,10 @@ class TestCredentialList(TestCredential):
def test_credential_list_with_options(self): def test_credential_list_with_options(self):
arglist = [ arglist = [
'--user', self.credential.user_id, '--user',
'--type', self.credential.type, self.credential.user_id,
'--type',
self.credential.type,
] ]
verifylist = [ verifylist = [
('user', self.credential.user_id), ('user', self.credential.user_id),
@ -248,16 +247,13 @@ class TestCredentialList(TestCredential):
'type': self.credential.type, 'type': self.credential.type,
} }
self.users_mock.get.assert_called_with(self.credential.user_id) self.users_mock.get.assert_called_with(self.credential.user_id)
self.credentials_mock.list.assert_called_with( self.credentials_mock.list.assert_called_with(**kwargs)
**kwargs
)
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
self.assertEqual(self.data, tuple(data)) self.assertEqual(self.data, tuple(data))
class TestCredentialSet(TestCredential): class TestCredentialSet(TestCredential):
credential = identity_fakes.FakeCredential.create_one_credential() credential = identity_fakes.FakeCredential.create_one_credential()
def setUp(self): def setUp(self):
@ -269,44 +265,57 @@ class TestCredentialSet(TestCredential):
self.credential.id, self.credential.id,
] ]
self.assertRaises(utils.ParserException, self.assertRaises(
self.check_parser, self.cmd, arglist, []) utils.ParserException, self.check_parser, self.cmd, arglist, []
)
def test_credential_set_missing_user(self): def test_credential_set_missing_user(self):
arglist = [ arglist = [
'--type', 'ec2', '--type',
'--data', self.credential.blob, 'ec2',
'--data',
self.credential.blob,
self.credential.id, self.credential.id,
] ]
self.assertRaises(utils.ParserException, self.assertRaises(
self.check_parser, self.cmd, arglist, []) utils.ParserException, self.check_parser, self.cmd, arglist, []
)
def test_credential_set_missing_type(self): def test_credential_set_missing_type(self):
arglist = [ arglist = [
'--user', self.credential.user_id, '--user',
'--data', self.credential.blob, self.credential.user_id,
'--data',
self.credential.blob,
self.credential.id, self.credential.id,
] ]
self.assertRaises(utils.ParserException, self.assertRaises(
self.check_parser, self.cmd, arglist, []) utils.ParserException, self.check_parser, self.cmd, arglist, []
)
def test_credential_set_missing_data(self): def test_credential_set_missing_data(self):
arglist = [ arglist = [
'--user', self.credential.user_id, '--user',
'--type', 'ec2', self.credential.user_id,
'--type',
'ec2',
self.credential.id, self.credential.id,
] ]
self.assertRaises(utils.ParserException, self.assertRaises(
self.check_parser, self.cmd, arglist, []) utils.ParserException, self.check_parser, self.cmd, arglist, []
)
def test_credential_set_valid(self): def test_credential_set_valid(self):
arglist = [ arglist = [
'--user', self.credential.user_id, '--user',
'--type', 'ec2', self.credential.user_id,
'--data', self.credential.blob, '--type',
'ec2',
'--data',
self.credential.blob,
self.credential.id, self.credential.id,
] ]
parsed_args = self.check_parser(self.cmd, arglist, []) parsed_args = self.check_parser(self.cmd, arglist, [])
@ -317,10 +326,14 @@ class TestCredentialSet(TestCredential):
def test_credential_set_valid_with_project(self): def test_credential_set_valid_with_project(self):
arglist = [ arglist = [
'--user', self.credential.user_id, '--user',
'--type', 'ec2', self.credential.user_id,
'--data', self.credential.blob, '--type',
'--project', self.credential.project_id, 'ec2',
'--data',
self.credential.blob,
'--project',
self.credential.project_id,
self.credential.id, self.credential.id,
] ]
parsed_args = self.check_parser(self.cmd, arglist, []) parsed_args = self.check_parser(self.cmd, arglist, [])
@ -331,7 +344,6 @@ class TestCredentialSet(TestCredential):
class TestCredentialShow(TestCredential): class TestCredentialShow(TestCredential):
columns = ( columns = (
'blob', 'blob',
'id', 'id',

View File

@ -15,7 +15,6 @@ from openstackclient.tests.unit.identity.v3 import fakes as identity_fakes
class TestDomain(identity_fakes.TestIdentityv3): class TestDomain(identity_fakes.TestIdentityv3):
def setUp(self): def setUp(self):
super(TestDomain, self).setUp() super(TestDomain, self).setUp()
@ -25,14 +24,7 @@ class TestDomain(identity_fakes.TestIdentityv3):
class TestDomainCreate(TestDomain): class TestDomainCreate(TestDomain):
columns = ('description', 'enabled', 'id', 'name', 'tags')
columns = (
'description',
'enabled',
'id',
'name',
'tags'
)
def setUp(self): def setUp(self):
super(TestDomainCreate, self).setUp() super(TestDomainCreate, self).setUp()
@ -44,7 +36,7 @@ class TestDomainCreate(TestDomain):
True, True,
self.domain.id, self.domain.id,
self.domain.name, self.domain.name,
self.domain.tags self.domain.tags,
) )
# Get the command object to test # Get the command object to test
@ -71,16 +63,15 @@ class TestDomainCreate(TestDomain):
'options': {}, 'options': {},
'enabled': True, 'enabled': True,
} }
self.domains_mock.create.assert_called_with( self.domains_mock.create.assert_called_with(**kwargs)
**kwargs
)
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
self.assertEqual(self.datalist, data) self.assertEqual(self.datalist, data)
def test_domain_create_description(self): def test_domain_create_description(self):
arglist = [ arglist = [
'--description', 'new desc', '--description',
'new desc',
self.domain.name, self.domain.name,
] ]
verifylist = [ verifylist = [
@ -101,9 +92,7 @@ class TestDomainCreate(TestDomain):
'options': {}, 'options': {},
'enabled': True, 'enabled': True,
} }
self.domains_mock.create.assert_called_with( self.domains_mock.create.assert_called_with(**kwargs)
**kwargs
)
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
self.assertEqual(self.datalist, data) self.assertEqual(self.datalist, data)
@ -131,9 +120,7 @@ class TestDomainCreate(TestDomain):
'options': {}, 'options': {},
'enabled': True, 'enabled': True,
} }
self.domains_mock.create.assert_called_with( self.domains_mock.create.assert_called_with(**kwargs)
**kwargs
)
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
self.assertEqual(self.datalist, data) self.assertEqual(self.datalist, data)
@ -161,9 +148,7 @@ class TestDomainCreate(TestDomain):
'options': {}, 'options': {},
'enabled': False, 'enabled': False,
} }
self.domains_mock.create.assert_called_with( self.domains_mock.create.assert_called_with(**kwargs)
**kwargs
)
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
self.assertEqual(self.datalist, data) self.assertEqual(self.datalist, data)
@ -191,9 +176,7 @@ class TestDomainCreate(TestDomain):
'options': {'immutable': True}, 'options': {'immutable': True},
'enabled': True, 'enabled': True,
} }
self.domains_mock.create.assert_called_with( self.domains_mock.create.assert_called_with(**kwargs)
**kwargs
)
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
self.assertEqual(self.datalist, data) self.assertEqual(self.datalist, data)
@ -221,16 +204,13 @@ class TestDomainCreate(TestDomain):
'options': {'immutable': False}, 'options': {'immutable': False},
'enabled': True, 'enabled': True,
} }
self.domains_mock.create.assert_called_with( self.domains_mock.create.assert_called_with(**kwargs)
**kwargs
)
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
self.assertEqual(self.datalist, data) self.assertEqual(self.datalist, data)
class TestDomainDelete(TestDomain): class TestDomainDelete(TestDomain):
domain = identity_fakes.FakeDomain.create_one_domain() domain = identity_fakes.FakeDomain.create_one_domain()
def setUp(self): def setUp(self):
@ -261,7 +241,6 @@ class TestDomainDelete(TestDomain):
class TestDomainList(TestDomain): class TestDomainList(TestDomain):
domain = identity_fakes.FakeDomain.create_one_domain() domain = identity_fakes.FakeDomain.create_one_domain()
def setUp(self): def setUp(self):
@ -285,20 +264,19 @@ class TestDomainList(TestDomain):
collist = ('ID', 'Name', 'Enabled', 'Description') collist = ('ID', 'Name', 'Enabled', 'Description')
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
datalist = (( datalist = (
(
self.domain.id, self.domain.id,
self.domain.name, self.domain.name,
True, True,
self.domain.description, self.domain.description,
), ) ),
)
self.assertEqual(datalist, tuple(data)) self.assertEqual(datalist, tuple(data))
def test_domain_list_with_option_name(self): def test_domain_list_with_option_name(self):
arglist = ['--name', arglist = ['--name', self.domain.name]
self.domain.name] verifylist = [('name', self.domain.name)]
verifylist = [
('name', self.domain.name)
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
# In base command class Lister in cliff, abstract method take_action() # In base command class Lister in cliff, abstract method take_action()
@ -306,26 +284,24 @@ class TestDomainList(TestDomain):
# containing the data to be listed. # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args) columns, data = self.cmd.take_action(parsed_args)
kwargs = { kwargs = {'name': self.domain.name}
'name': self.domain.name
}
self.domains_mock.list.assert_called_with(**kwargs) self.domains_mock.list.assert_called_with(**kwargs)
collist = ('ID', 'Name', 'Enabled', 'Description') collist = ('ID', 'Name', 'Enabled', 'Description')
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
datalist = (( datalist = (
(
self.domain.id, self.domain.id,
self.domain.name, self.domain.name,
True, True,
self.domain.description, self.domain.description,
), ) ),
)
self.assertEqual(datalist, tuple(data)) self.assertEqual(datalist, tuple(data))
def test_domain_list_with_option_enabled(self): def test_domain_list_with_option_enabled(self):
arglist = ['--enabled'] arglist = ['--enabled']
verifylist = [ verifylist = [('enabled', True)]
('enabled', True)
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
# In base command class Lister in cliff, abstract method take_action() # In base command class Lister in cliff, abstract method take_action()
@ -333,24 +309,23 @@ class TestDomainList(TestDomain):
# containing the data to be listed. # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args) columns, data = self.cmd.take_action(parsed_args)
kwargs = { kwargs = {'enabled': True}
'enabled': True
}
self.domains_mock.list.assert_called_with(**kwargs) self.domains_mock.list.assert_called_with(**kwargs)
collist = ('ID', 'Name', 'Enabled', 'Description') collist = ('ID', 'Name', 'Enabled', 'Description')
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
datalist = (( datalist = (
(
self.domain.id, self.domain.id,
self.domain.name, self.domain.name,
True, True,
self.domain.description, self.domain.description,
), ) ),
)
self.assertEqual(datalist, tuple(data)) self.assertEqual(datalist, tuple(data))
class TestDomainSet(TestDomain): class TestDomainSet(TestDomain):
domain = identity_fakes.FakeDomain.create_one_domain() domain = identity_fakes.FakeDomain.create_one_domain()
def setUp(self): def setUp(self):
@ -375,15 +350,13 @@ class TestDomainSet(TestDomain):
result = self.cmd.take_action(parsed_args) result = self.cmd.take_action(parsed_args)
kwargs = {} kwargs = {}
self.domains_mock.update.assert_called_with( self.domains_mock.update.assert_called_with(self.domain.id, **kwargs)
self.domain.id,
**kwargs
)
self.assertIsNone(result) self.assertIsNone(result)
def test_domain_set_name(self): def test_domain_set_name(self):
arglist = [ arglist = [
'--name', 'qwerty', '--name',
'qwerty',
self.domain.id, self.domain.id,
] ]
verifylist = [ verifylist = [
@ -398,15 +371,13 @@ class TestDomainSet(TestDomain):
kwargs = { kwargs = {
'name': 'qwerty', 'name': 'qwerty',
} }
self.domains_mock.update.assert_called_with( self.domains_mock.update.assert_called_with(self.domain.id, **kwargs)
self.domain.id,
**kwargs
)
self.assertIsNone(result) self.assertIsNone(result)
def test_domain_set_description(self): def test_domain_set_description(self):
arglist = [ arglist = [
'--description', 'new desc', '--description',
'new desc',
self.domain.id, self.domain.id,
] ]
verifylist = [ verifylist = [
@ -421,10 +392,7 @@ class TestDomainSet(TestDomain):
kwargs = { kwargs = {
'description': 'new desc', 'description': 'new desc',
} }
self.domains_mock.update.assert_called_with( self.domains_mock.update.assert_called_with(self.domain.id, **kwargs)
self.domain.id,
**kwargs
)
self.assertIsNone(result) self.assertIsNone(result)
def test_domain_set_enable(self): def test_domain_set_enable(self):
@ -444,10 +412,7 @@ class TestDomainSet(TestDomain):
kwargs = { kwargs = {
'enabled': True, 'enabled': True,
} }
self.domains_mock.update.assert_called_with( self.domains_mock.update.assert_called_with(self.domain.id, **kwargs)
self.domain.id,
**kwargs
)
self.assertIsNone(result) self.assertIsNone(result)
def test_domain_set_disable(self): def test_domain_set_disable(self):
@ -467,10 +432,7 @@ class TestDomainSet(TestDomain):
kwargs = { kwargs = {
'enabled': False, 'enabled': False,
} }
self.domains_mock.update.assert_called_with( self.domains_mock.update.assert_called_with(self.domain.id, **kwargs)
self.domain.id,
**kwargs
)
self.assertIsNone(result) self.assertIsNone(result)
def test_domain_set_immutable_option(self): def test_domain_set_immutable_option(self):
@ -490,10 +452,7 @@ class TestDomainSet(TestDomain):
kwargs = { kwargs = {
'options': {'immutable': True}, 'options': {'immutable': True},
} }
self.domains_mock.update.assert_called_with( self.domains_mock.update.assert_called_with(self.domain.id, **kwargs)
self.domain.id,
**kwargs
)
self.assertIsNone(result) self.assertIsNone(result)
def test_domain_set_no_immutable_option(self): def test_domain_set_no_immutable_option(self):
@ -513,15 +472,11 @@ class TestDomainSet(TestDomain):
kwargs = { kwargs = {
'options': {'immutable': False}, 'options': {'immutable': False},
} }
self.domains_mock.update.assert_called_with( self.domains_mock.update.assert_called_with(self.domain.id, **kwargs)
self.domain.id,
**kwargs
)
self.assertIsNone(result) self.assertIsNone(result)
class TestDomainShow(TestDomain): class TestDomainShow(TestDomain):
def setUp(self): def setUp(self):
super(TestDomainShow, self).setUp() super(TestDomainShow, self).setUp()
@ -538,15 +493,8 @@ class TestDomainShow(TestDomain):
('domain', self.domain.id), ('domain', self.domain.id),
] ]
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
self.app.client_manager.identity.tokens.get_token_data.return_value = \ self.app.client_manager.identity.tokens.get_token_data.return_value = {
{'token': 'token': {'project': {'domain': {'id': 'd1', 'name': 'd1'}}}
{'project':
{'domain':
{'id': 'd1',
'name': 'd1'
}
}
}
} }
# In base command class ShowOne in cliff, abstract method take_action() # In base command class ShowOne in cliff, abstract method take_action()
@ -564,6 +512,6 @@ class TestDomainShow(TestDomain):
True, True,
self.domain.id, self.domain.id,
self.domain.name, self.domain.name,
self.domain.tags self.domain.tags,
) )
self.assertEqual(datalist, data) self.assertEqual(datalist, data)

View File

@ -15,16 +15,13 @@ from openstackclient.tests.unit.identity.v3 import fakes as identity_fakes
class TestEndpoint(identity_fakes.TestIdentityv3): class TestEndpoint(identity_fakes.TestIdentityv3):
def setUp(self): def setUp(self):
super(TestEndpoint, self).setUp() super(TestEndpoint, self).setUp()
# Get a shortcut to the EndpointManager Mock # Get a shortcut to the EndpointManager Mock
self.endpoints_mock = self.app.client_manager.identity.endpoints self.endpoints_mock = self.app.client_manager.identity.endpoints
self.endpoints_mock.reset_mock() self.endpoints_mock.reset_mock()
self.ep_filter_mock = ( self.ep_filter_mock = self.app.client_manager.identity.endpoint_filter
self.app.client_manager.identity.endpoint_filter
)
self.ep_filter_mock.reset_mock() self.ep_filter_mock.reset_mock()
# Get a shortcut to the ServiceManager Mock # Get a shortcut to the ServiceManager Mock
@ -41,7 +38,6 @@ class TestEndpoint(identity_fakes.TestIdentityv3):
class TestEndpointCreate(TestEndpoint): class TestEndpointCreate(TestEndpoint):
service = identity_fakes.FakeService.create_one_service() service = identity_fakes.FakeService.create_one_service()
columns = ( columns = (
@ -59,7 +55,8 @@ class TestEndpointCreate(TestEndpoint):
super(TestEndpointCreate, self).setUp() super(TestEndpointCreate, self).setUp()
self.endpoint = identity_fakes.FakeEndpoint.create_one_endpoint( self.endpoint = identity_fakes.FakeEndpoint.create_one_endpoint(
attrs={'service_id': self.service.id}) attrs={'service_id': self.service.id}
)
self.endpoints_mock.create.return_value = self.endpoint self.endpoints_mock.create.return_value = self.endpoint
# This is the return value for common.find_resource(service) # This is the return value for common.find_resource(service)
@ -96,9 +93,7 @@ class TestEndpointCreate(TestEndpoint):
'region': None, 'region': None,
} }
self.endpoints_mock.create.assert_called_with( self.endpoints_mock.create.assert_called_with(**kwargs)
**kwargs
)
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
datalist = ( datalist = (
@ -118,7 +113,8 @@ class TestEndpointCreate(TestEndpoint):
self.service.id, self.service.id,
self.endpoint.interface, self.endpoint.interface,
self.endpoint.url, self.endpoint.url,
'--region', self.endpoint.region, '--region',
self.endpoint.region,
] ]
verifylist = [ verifylist = [
('enabled', True), ('enabled', True),
@ -143,9 +139,7 @@ class TestEndpointCreate(TestEndpoint):
'region': self.endpoint.region, 'region': self.endpoint.region,
} }
self.endpoints_mock.create.assert_called_with( self.endpoints_mock.create.assert_called_with(**kwargs)
**kwargs
)
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
datalist = ( datalist = (
@ -165,7 +159,7 @@ class TestEndpointCreate(TestEndpoint):
self.service.id, self.service.id,
self.endpoint.interface, self.endpoint.interface,
self.endpoint.url, self.endpoint.url,
'--enable' '--enable',
] ]
verifylist = [ verifylist = [
('enabled', True), ('enabled', True),
@ -189,9 +183,7 @@ class TestEndpointCreate(TestEndpoint):
'region': None, 'region': None,
} }
self.endpoints_mock.create.assert_called_with( self.endpoints_mock.create.assert_called_with(**kwargs)
**kwargs
)
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
datalist = ( datalist = (
@ -235,9 +227,7 @@ class TestEndpointCreate(TestEndpoint):
'region': None, 'region': None,
} }
self.endpoints_mock.create.assert_called_with( self.endpoints_mock.create.assert_called_with(**kwargs)
**kwargs
)
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
datalist = ( datalist = (
@ -254,7 +244,6 @@ class TestEndpointCreate(TestEndpoint):
class TestEndpointDelete(TestEndpoint): class TestEndpointDelete(TestEndpoint):
endpoint = identity_fakes.FakeEndpoint.create_one_endpoint() endpoint = identity_fakes.FakeEndpoint.create_one_endpoint()
def setUp(self): def setUp(self):
@ -285,10 +274,10 @@ class TestEndpointDelete(TestEndpoint):
class TestEndpointList(TestEndpoint): class TestEndpointList(TestEndpoint):
service = identity_fakes.FakeService.create_one_service() service = identity_fakes.FakeService.create_one_service()
endpoint = identity_fakes.FakeEndpoint.create_one_endpoint( endpoint = identity_fakes.FakeEndpoint.create_one_endpoint(
attrs={'service_id': service.id}) attrs={'service_id': service.id}
)
columns = ( columns = (
'ID', 'ID',
@ -339,7 +328,8 @@ class TestEndpointList(TestEndpoint):
def test_endpoint_list_service(self): def test_endpoint_list_service(self):
arglist = [ arglist = [
'--service', self.service.id, '--service',
self.service.id,
] ]
verifylist = [ verifylist = [
('service', self.service.id), ('service', self.service.id),
@ -373,7 +363,8 @@ class TestEndpointList(TestEndpoint):
def test_endpoint_list_interface(self): def test_endpoint_list_interface(self):
arglist = [ arglist = [
'--interface', self.endpoint.interface, '--interface',
self.endpoint.interface,
] ]
verifylist = [ verifylist = [
('interface', self.endpoint.interface), ('interface', self.endpoint.interface),
@ -407,7 +398,8 @@ class TestEndpointList(TestEndpoint):
def test_endpoint_list_region(self): def test_endpoint_list_region(self):
arglist = [ arglist = [
'--region', self.endpoint.region, '--region',
self.endpoint.region,
] ]
verifylist = [ verifylist = [
('region', self.endpoint.region), ('region', self.endpoint.region),
@ -448,10 +440,7 @@ class TestEndpointList(TestEndpoint):
] ]
self.projects_mock.get.return_value = project self.projects_mock.get.return_value = project
arglist = [ arglist = ['--project', project.name, '--project-domain', domain.name]
'--project', project.name,
'--project-domain', domain.name
]
verifylist = [ verifylist = [
('project', project.name), ('project', project.name),
('project_domain', domain.name), ('project_domain', domain.name),
@ -482,10 +471,10 @@ class TestEndpointList(TestEndpoint):
class TestEndpointSet(TestEndpoint): class TestEndpointSet(TestEndpoint):
service = identity_fakes.FakeService.create_one_service() service = identity_fakes.FakeService.create_one_service()
endpoint = identity_fakes.FakeEndpoint.create_one_endpoint( endpoint = identity_fakes.FakeEndpoint.create_one_endpoint(
attrs={'service_id': service.id}) attrs={'service_id': service.id}
)
def setUp(self): def setUp(self):
super(TestEndpointSet, self).setUp() super(TestEndpointSet, self).setUp()
@ -520,16 +509,12 @@ class TestEndpointSet(TestEndpoint):
'url': None, 'url': None,
} }
self.endpoints_mock.update.assert_called_with( self.endpoints_mock.update.assert_called_with(
self.endpoint.id, self.endpoint.id, **kwargs
**kwargs
) )
self.assertIsNone(result) self.assertIsNone(result)
def test_endpoint_set_interface(self): def test_endpoint_set_interface(self):
arglist = [ arglist = ['--interface', 'public', self.endpoint.id]
'--interface', 'public',
self.endpoint.id
]
verifylist = [ verifylist = [
('interface', 'public'), ('interface', 'public'),
('endpoint', self.endpoint.id), ('endpoint', self.endpoint.id),
@ -547,16 +532,12 @@ class TestEndpointSet(TestEndpoint):
'service': None, 'service': None,
} }
self.endpoints_mock.update.assert_called_with( self.endpoints_mock.update.assert_called_with(
self.endpoint.id, self.endpoint.id, **kwargs
**kwargs
) )
self.assertIsNone(result) self.assertIsNone(result)
def test_endpoint_set_url(self): def test_endpoint_set_url(self):
arglist = [ arglist = ['--url', 'http://localhost:5000', self.endpoint.id]
'--url', 'http://localhost:5000',
self.endpoint.id
]
verifylist = [ verifylist = [
('url', 'http://localhost:5000'), ('url', 'http://localhost:5000'),
('endpoint', self.endpoint.id), ('endpoint', self.endpoint.id),
@ -574,16 +555,12 @@ class TestEndpointSet(TestEndpoint):
'service': None, 'service': None,
} }
self.endpoints_mock.update.assert_called_with( self.endpoints_mock.update.assert_called_with(
self.endpoint.id, self.endpoint.id, **kwargs
**kwargs
) )
self.assertIsNone(result) self.assertIsNone(result)
def test_endpoint_set_service(self): def test_endpoint_set_service(self):
arglist = [ arglist = ['--service', self.service.id, self.endpoint.id]
'--service', self.service.id,
self.endpoint.id
]
verifylist = [ verifylist = [
('service', self.service.id), ('service', self.service.id),
('endpoint', self.endpoint.id), ('endpoint', self.endpoint.id),
@ -601,16 +578,12 @@ class TestEndpointSet(TestEndpoint):
'service': self.service.id, 'service': self.service.id,
} }
self.endpoints_mock.update.assert_called_with( self.endpoints_mock.update.assert_called_with(
self.endpoint.id, self.endpoint.id, **kwargs
**kwargs
) )
self.assertIsNone(result) self.assertIsNone(result)
def test_endpoint_set_region(self): def test_endpoint_set_region(self):
arglist = [ arglist = ['--region', 'e-rzzz', self.endpoint.id]
'--region', 'e-rzzz',
self.endpoint.id
]
verifylist = [ verifylist = [
('region', 'e-rzzz'), ('region', 'e-rzzz'),
('endpoint', self.endpoint.id), ('endpoint', self.endpoint.id),
@ -628,16 +601,12 @@ class TestEndpointSet(TestEndpoint):
'service': None, 'service': None,
} }
self.endpoints_mock.update.assert_called_with( self.endpoints_mock.update.assert_called_with(
self.endpoint.id, self.endpoint.id, **kwargs
**kwargs
) )
self.assertIsNone(result) self.assertIsNone(result)
def test_endpoint_set_enable(self): def test_endpoint_set_enable(self):
arglist = [ arglist = ['--enable', self.endpoint.id]
'--enable',
self.endpoint.id
]
verifylist = [ verifylist = [
('enabled', True), ('enabled', True),
('endpoint', self.endpoint.id), ('endpoint', self.endpoint.id),
@ -655,16 +624,12 @@ class TestEndpointSet(TestEndpoint):
'service': None, 'service': None,
} }
self.endpoints_mock.update.assert_called_with( self.endpoints_mock.update.assert_called_with(
self.endpoint.id, self.endpoint.id, **kwargs
**kwargs
) )
self.assertIsNone(result) self.assertIsNone(result)
def test_endpoint_set_disable(self): def test_endpoint_set_disable(self):
arglist = [ arglist = ['--disable', self.endpoint.id]
'--disable',
self.endpoint.id
]
verifylist = [ verifylist = [
('disabled', True), ('disabled', True),
('endpoint', self.endpoint.id), ('endpoint', self.endpoint.id),
@ -682,17 +647,16 @@ class TestEndpointSet(TestEndpoint):
'service': None, 'service': None,
} }
self.endpoints_mock.update.assert_called_with( self.endpoints_mock.update.assert_called_with(
self.endpoint.id, self.endpoint.id, **kwargs
**kwargs
) )
self.assertIsNone(result) self.assertIsNone(result)
class TestEndpointShow(TestEndpoint): class TestEndpointShow(TestEndpoint):
service = identity_fakes.FakeService.create_one_service() service = identity_fakes.FakeService.create_one_service()
endpoint = identity_fakes.FakeEndpoint.create_one_endpoint( endpoint = identity_fakes.FakeEndpoint.create_one_endpoint(
attrs={'service_id': service.id}) attrs={'service_id': service.id}
)
def setUp(self): def setUp(self):
super(TestEndpointShow, self).setUp() super(TestEndpointShow, self).setUp()
@ -747,15 +711,16 @@ class TestEndpointShow(TestEndpoint):
class TestEndpointCreateServiceWithoutName(TestEndpointCreate): class TestEndpointCreateServiceWithoutName(TestEndpointCreate):
service = identity_fakes.FakeService.create_one_service( service = identity_fakes.FakeService.create_one_service(
attrs={'service_name': ''}) attrs={'service_name': ''}
)
def setUp(self): def setUp(self):
super(TestEndpointCreate, self).setUp() super(TestEndpointCreate, self).setUp()
self.endpoint = identity_fakes.FakeEndpoint.create_one_endpoint( self.endpoint = identity_fakes.FakeEndpoint.create_one_endpoint(
attrs={'service_id': self.service.id}) attrs={'service_id': self.service.id}
)
self.endpoints_mock.create.return_value = self.endpoint self.endpoints_mock.create.return_value = self.endpoint
@ -767,11 +732,12 @@ class TestEndpointCreateServiceWithoutName(TestEndpointCreate):
class TestEndpointListServiceWithoutName(TestEndpointList): class TestEndpointListServiceWithoutName(TestEndpointList):
service = identity_fakes.FakeService.create_one_service( service = identity_fakes.FakeService.create_one_service(
attrs={'service_name': ''}) attrs={'service_name': ''}
)
endpoint = identity_fakes.FakeEndpoint.create_one_endpoint( endpoint = identity_fakes.FakeEndpoint.create_one_endpoint(
attrs={'service_id': service.id}) attrs={'service_id': service.id}
)
def setUp(self): def setUp(self):
super(TestEndpointList, self).setUp() super(TestEndpointList, self).setUp()
@ -787,11 +753,12 @@ class TestEndpointListServiceWithoutName(TestEndpointList):
class TestEndpointShowServiceWithoutName(TestEndpointShow): class TestEndpointShowServiceWithoutName(TestEndpointShow):
service = identity_fakes.FakeService.create_one_service( service = identity_fakes.FakeService.create_one_service(
attrs={'service_name': ''}) attrs={'service_name': ''}
)
endpoint = identity_fakes.FakeEndpoint.create_one_endpoint( endpoint = identity_fakes.FakeEndpoint.create_one_endpoint(
attrs={'service_id': service.id}) attrs={'service_id': service.id}
)
def setUp(self): def setUp(self):
super(TestEndpointShow, self).setUp() super(TestEndpointShow, self).setUp()
@ -806,16 +773,15 @@ class TestEndpointShowServiceWithoutName(TestEndpointShow):
class TestAddProjectToEndpoint(TestEndpoint): class TestAddProjectToEndpoint(TestEndpoint):
project = identity_fakes.FakeProject.create_one_project() project = identity_fakes.FakeProject.create_one_project()
domain = identity_fakes.FakeDomain.create_one_domain() domain = identity_fakes.FakeDomain.create_one_domain()
service = identity_fakes.FakeService.create_one_service() service = identity_fakes.FakeService.create_one_service()
endpoint = identity_fakes.FakeEndpoint.create_one_endpoint( endpoint = identity_fakes.FakeEndpoint.create_one_endpoint(
attrs={'service_id': service.id}) attrs={'service_id': service.id}
)
new_ep_filter = identity_fakes.FakeEndpoint.create_one_endpoint_filter( new_ep_filter = identity_fakes.FakeEndpoint.create_one_endpoint_filter(
attrs={'endpoint': endpoint.id, attrs={'endpoint': endpoint.id, 'project': project.id}
'project': project.id}
) )
def setUp(self): def setUp(self):
@ -844,8 +810,7 @@ class TestAddProjectToEndpoint(TestEndpoint):
result = self.cmd.take_action(parsed_args) result = self.cmd.take_action(parsed_args)
self.ep_filter_mock.add_endpoint_to_project.assert_called_with( self.ep_filter_mock.add_endpoint_to_project.assert_called_with(
project=self.project.id, project=self.project.id, endpoint=self.endpoint.id
endpoint=self.endpoint.id
) )
self.assertIsNone(result) self.assertIsNone(result)
@ -853,7 +818,8 @@ class TestAddProjectToEndpoint(TestEndpoint):
arglist = [ arglist = [
self.endpoint.id, self.endpoint.id,
self.project.id, self.project.id,
'--project-domain', self.domain.id, '--project-domain',
self.domain.id,
] ]
verifylist = [ verifylist = [
('endpoint', self.endpoint.id), ('endpoint', self.endpoint.id),
@ -864,19 +830,18 @@ class TestAddProjectToEndpoint(TestEndpoint):
result = self.cmd.take_action(parsed_args) result = self.cmd.take_action(parsed_args)
self.ep_filter_mock.add_endpoint_to_project.assert_called_with( self.ep_filter_mock.add_endpoint_to_project.assert_called_with(
project=self.project.id, project=self.project.id, endpoint=self.endpoint.id
endpoint=self.endpoint.id
) )
self.assertIsNone(result) self.assertIsNone(result)
class TestRemoveProjectEndpoint(TestEndpoint): class TestRemoveProjectEndpoint(TestEndpoint):
project = identity_fakes.FakeProject.create_one_project() project = identity_fakes.FakeProject.create_one_project()
domain = identity_fakes.FakeDomain.create_one_domain() domain = identity_fakes.FakeDomain.create_one_domain()
service = identity_fakes.FakeService.create_one_service() service = identity_fakes.FakeService.create_one_service()
endpoint = identity_fakes.FakeEndpoint.create_one_endpoint( endpoint = identity_fakes.FakeEndpoint.create_one_endpoint(
attrs={'service_id': service.id}) attrs={'service_id': service.id}
)
def setUp(self): def setUp(self):
super(TestRemoveProjectEndpoint, self).setUp() super(TestRemoveProjectEndpoint, self).setUp()
@ -914,7 +879,8 @@ class TestRemoveProjectEndpoint(TestEndpoint):
arglist = [ arglist = [
self.endpoint.id, self.endpoint.id,
self.project.id, self.project.id,
'--project-domain', self.domain.id, '--project-domain',
self.domain.id,
] ]
verifylist = [ verifylist = [
('endpoint', self.endpoint.id), ('endpoint', self.endpoint.id),

View File

@ -18,7 +18,6 @@ from openstackclient.tests.unit.identity.v3 import fakes as identity_fakes
class TestEndpointGroup(identity_fakes.TestIdentityv3): class TestEndpointGroup(identity_fakes.TestIdentityv3):
def setUp(self): def setUp(self):
super(TestEndpointGroup, self).setUp() super(TestEndpointGroup, self).setUp()
@ -27,9 +26,7 @@ class TestEndpointGroup(identity_fakes.TestIdentityv3):
self.app.client_manager.identity.endpoint_groups self.app.client_manager.identity.endpoint_groups
) )
self.endpoint_groups_mock.reset_mock() self.endpoint_groups_mock.reset_mock()
self.epf_mock = ( self.epf_mock = self.app.client_manager.identity.endpoint_filter
self.app.client_manager.identity.endpoint_filter
)
self.epf_mock.reset_mock() self.epf_mock.reset_mock()
# Get a shortcut to the ServiceManager Mock # Get a shortcut to the ServiceManager Mock
@ -46,7 +43,6 @@ class TestEndpointGroup(identity_fakes.TestIdentityv3):
class TestEndpointGroupCreate(TestEndpointGroup): class TestEndpointGroupCreate(TestEndpointGroup):
columns = ( columns = (
'description', 'description',
'filters', 'filters',
@ -59,7 +55,9 @@ class TestEndpointGroupCreate(TestEndpointGroup):
self.endpoint_group = ( self.endpoint_group = (
identity_fakes.FakeEndpointGroup.create_one_endpointgroup( identity_fakes.FakeEndpointGroup.create_one_endpointgroup(
attrs={'filters': identity_fakes.endpoint_group_filters})) attrs={'filters': identity_fakes.endpoint_group_filters}
)
)
self.endpoint_groups_mock.create.return_value = self.endpoint_group self.endpoint_groups_mock.create.return_value = self.endpoint_group
@ -68,7 +66,8 @@ class TestEndpointGroupCreate(TestEndpointGroup):
def test_endpointgroup_create_no_options(self): def test_endpointgroup_create_no_options(self):
arglist = [ arglist = [
'--description', self.endpoint_group.description, '--description',
self.endpoint_group.description,
self.endpoint_group.name, self.endpoint_group.name,
identity_fakes.endpoint_group_file_path, identity_fakes.endpoint_group_file_path,
] ]
@ -81,8 +80,11 @@ class TestEndpointGroupCreate(TestEndpointGroup):
mocker = mock.Mock() mocker = mock.Mock()
mocker.return_value = identity_fakes.endpoint_group_filters mocker.return_value = identity_fakes.endpoint_group_filters
with mock.patch("openstackclient.identity.v3.endpoint_group." with mock.patch(
"CreateEndpointGroup._read_filters", mocker): "openstackclient.identity.v3.endpoint_group."
"CreateEndpointGroup._read_filters",
mocker,
):
columns, data = self.cmd.take_action(parsed_args) columns, data = self.cmd.take_action(parsed_args)
# Set expected values # Set expected values
@ -92,9 +94,7 @@ class TestEndpointGroupCreate(TestEndpointGroup):
'description': self.endpoint_group.description, 'description': self.endpoint_group.description,
} }
self.endpoint_groups_mock.create.assert_called_with( self.endpoint_groups_mock.create.assert_called_with(**kwargs)
**kwargs
)
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
datalist = ( datalist = (
@ -107,9 +107,9 @@ class TestEndpointGroupCreate(TestEndpointGroup):
class TestEndpointGroupDelete(TestEndpointGroup): class TestEndpointGroupDelete(TestEndpointGroup):
endpoint_group = ( endpoint_group = (
identity_fakes.FakeEndpointGroup.create_one_endpointgroup()) identity_fakes.FakeEndpointGroup.create_one_endpointgroup()
)
def setUp(self): def setUp(self):
super(TestEndpointGroupDelete, self).setUp() super(TestEndpointGroupDelete, self).setUp()
@ -139,9 +139,9 @@ class TestEndpointGroupDelete(TestEndpointGroup):
class TestEndpointGroupList(TestEndpointGroup): class TestEndpointGroupList(TestEndpointGroup):
endpoint_group = ( endpoint_group = (
identity_fakes.FakeEndpointGroup.create_one_endpointgroup()) identity_fakes.FakeEndpointGroup.create_one_endpointgroup()
)
project = identity_fakes.FakeProject.create_one_project() project = identity_fakes.FakeProject.create_one_project()
domain = identity_fakes.FakeDomain.create_one_domain() domain = identity_fakes.FakeDomain.create_one_domain()
@ -157,9 +157,11 @@ class TestEndpointGroupList(TestEndpointGroup):
self.endpoint_groups_mock.list.return_value = [self.endpoint_group] self.endpoint_groups_mock.list.return_value = [self.endpoint_group]
self.endpoint_groups_mock.get.return_value = self.endpoint_group self.endpoint_groups_mock.get.return_value = self.endpoint_group
self.epf_mock.list_projects_for_endpoint_group.return_value = [ self.epf_mock.list_projects_for_endpoint_group.return_value = [
self.project] self.project
]
self.epf_mock.list_endpoint_groups_for_project.return_value = [ self.epf_mock.list_endpoint_groups_for_project.return_value = [
self.endpoint_group] self.endpoint_group
]
# Get the command object to test # Get the command object to test
self.cmd = endpoint_group.ListEndpointGroup(self.app, None) self.cmd = endpoint_group.ListEndpointGroup(self.app, None)
@ -187,7 +189,8 @@ class TestEndpointGroupList(TestEndpointGroup):
def test_endpoint_group_list_projects_by_endpoint_group(self): def test_endpoint_group_list_projects_by_endpoint_group(self):
arglist = [ arglist = [
'--endpointgroup', self.endpoint_group.id, '--endpointgroup',
self.endpoint_group.id,
] ]
verifylist = [ verifylist = [
('endpointgroup', self.endpoint_group.id), ('endpointgroup', self.endpoint_group.id),
@ -219,8 +222,10 @@ class TestEndpointGroupList(TestEndpointGroup):
self.projects_mock.get.return_value = self.project self.projects_mock.get.return_value = self.project
arglist = [ arglist = [
'--project', self.project.name, '--project',
'--domain', self.domain.name self.project.name,
'--domain',
self.domain.name,
] ]
verifylist = [ verifylist = [
('project', self.project.name), ('project', self.project.name),
@ -248,9 +253,9 @@ class TestEndpointGroupList(TestEndpointGroup):
class TestEndpointGroupSet(TestEndpointGroup): class TestEndpointGroupSet(TestEndpointGroup):
endpoint_group = ( endpoint_group = (
identity_fakes.FakeEndpointGroup.create_one_endpointgroup()) identity_fakes.FakeEndpointGroup.create_one_endpointgroup()
)
def setUp(self): def setUp(self):
super(TestEndpointGroupSet, self).setUp() super(TestEndpointGroupSet, self).setUp()
@ -274,22 +279,14 @@ class TestEndpointGroupSet(TestEndpointGroup):
result = self.cmd.take_action(parsed_args) result = self.cmd.take_action(parsed_args)
kwargs = { kwargs = {'name': None, 'filters': None, 'description': ''}
'name': None,
'filters': None,
'description': ''
}
self.endpoint_groups_mock.update.assert_called_with( self.endpoint_groups_mock.update.assert_called_with(
self.endpoint_group.id, self.endpoint_group.id, **kwargs
**kwargs
) )
self.assertIsNone(result) self.assertIsNone(result)
def test_endpoint_group_set_name(self): def test_endpoint_group_set_name(self):
arglist = [ arglist = ['--name', 'qwerty', self.endpoint_group.id]
'--name', 'qwerty',
self.endpoint_group.id
]
verifylist = [ verifylist = [
('name', 'qwerty'), ('name', 'qwerty'),
('endpointgroup', self.endpoint_group.id), ('endpointgroup', self.endpoint_group.id),
@ -299,20 +296,16 @@ class TestEndpointGroupSet(TestEndpointGroup):
result = self.cmd.take_action(parsed_args) result = self.cmd.take_action(parsed_args)
# Set expected values # Set expected values
kwargs = { kwargs = {'name': 'qwerty', 'filters': None, 'description': ''}
'name': 'qwerty',
'filters': None,
'description': ''
}
self.endpoint_groups_mock.update.assert_called_with( self.endpoint_groups_mock.update.assert_called_with(
self.endpoint_group.id, self.endpoint_group.id, **kwargs
**kwargs
) )
self.assertIsNone(result) self.assertIsNone(result)
def test_endpoint_group_set_filters(self): def test_endpoint_group_set_filters(self):
arglist = [ arglist = [
'--filters', identity_fakes.endpoint_group_file_path, '--filters',
identity_fakes.endpoint_group_file_path,
self.endpoint_group.id, self.endpoint_group.id,
] ]
verifylist = [ verifylist = [
@ -324,8 +317,11 @@ class TestEndpointGroupSet(TestEndpointGroup):
mocker = mock.Mock() mocker = mock.Mock()
mocker.return_value = identity_fakes.endpoint_group_filters_2 mocker.return_value = identity_fakes.endpoint_group_filters_2
with mock.patch("openstackclient.identity.v3.endpoint_group." with mock.patch(
"SetEndpointGroup._read_filters", mocker): "openstackclient.identity.v3.endpoint_group."
"SetEndpointGroup._read_filters",
mocker,
):
result = self.cmd.take_action(parsed_args) result = self.cmd.take_action(parsed_args)
# Set expected values # Set expected values
@ -336,17 +332,13 @@ class TestEndpointGroupSet(TestEndpointGroup):
} }
self.endpoint_groups_mock.update.assert_called_with( self.endpoint_groups_mock.update.assert_called_with(
self.endpoint_group.id, self.endpoint_group.id, **kwargs
**kwargs
) )
self.assertIsNone(result) self.assertIsNone(result)
def test_endpoint_group_set_description(self): def test_endpoint_group_set_description(self):
arglist = [ arglist = ['--description', 'qwerty', self.endpoint_group.id]
'--description', 'qwerty',
self.endpoint_group.id
]
verifylist = [ verifylist = [
('description', 'qwerty'), ('description', 'qwerty'),
('endpointgroup', self.endpoint_group.id), ('endpointgroup', self.endpoint_group.id),
@ -362,23 +354,23 @@ class TestEndpointGroupSet(TestEndpointGroup):
'description': 'qwerty', 'description': 'qwerty',
} }
self.endpoint_groups_mock.update.assert_called_with( self.endpoint_groups_mock.update.assert_called_with(
self.endpoint_group.id, self.endpoint_group.id, **kwargs
**kwargs
) )
self.assertIsNone(result) self.assertIsNone(result)
class TestAddProjectToEndpointGroup(TestEndpointGroup): class TestAddProjectToEndpointGroup(TestEndpointGroup):
project = identity_fakes.FakeProject.create_one_project() project = identity_fakes.FakeProject.create_one_project()
domain = identity_fakes.FakeDomain.create_one_domain() domain = identity_fakes.FakeDomain.create_one_domain()
endpoint_group = ( endpoint_group = (
identity_fakes.FakeEndpointGroup.create_one_endpointgroup()) identity_fakes.FakeEndpointGroup.create_one_endpointgroup()
)
new_ep_filter = ( new_ep_filter = (
identity_fakes.FakeEndpointGroup.create_one_endpointgroup_filter( identity_fakes.FakeEndpointGroup.create_one_endpointgroup_filter(
attrs={'endpointgroup': endpoint_group.id, attrs={'endpointgroup': endpoint_group.id, 'project': project.id}
'project': project.id})) )
)
def setUp(self): def setUp(self):
super(TestAddProjectToEndpointGroup, self).setUp() super(TestAddProjectToEndpointGroup, self).setUp()
@ -416,7 +408,8 @@ class TestAddProjectToEndpointGroup(TestEndpointGroup):
arglist = [ arglist = [
self.endpoint_group.id, self.endpoint_group.id,
self.project.id, self.project.id,
'--project-domain', self.domain.id, '--project-domain',
self.domain.id,
] ]
verifylist = [ verifylist = [
('endpointgroup', self.endpoint_group.id), ('endpointgroup', self.endpoint_group.id),
@ -434,11 +427,11 @@ class TestAddProjectToEndpointGroup(TestEndpointGroup):
class TestRemoveProjectEndpointGroup(TestEndpointGroup): class TestRemoveProjectEndpointGroup(TestEndpointGroup):
project = identity_fakes.FakeProject.create_one_project() project = identity_fakes.FakeProject.create_one_project()
domain = identity_fakes.FakeDomain.create_one_domain() domain = identity_fakes.FakeDomain.create_one_domain()
endpoint_group = ( endpoint_group = (
identity_fakes.FakeEndpointGroup.create_one_endpointgroup()) identity_fakes.FakeEndpointGroup.create_one_endpointgroup()
)
def setUp(self): def setUp(self):
super(TestRemoveProjectEndpointGroup, self).setUp() super(TestRemoveProjectEndpointGroup, self).setUp()
@ -452,7 +445,8 @@ class TestRemoveProjectEndpointGroup(TestEndpointGroup):
# Get the command object to test # Get the command object to test
self.cmd = endpoint_group.RemoveProjectFromEndpointGroup( self.cmd = endpoint_group.RemoveProjectFromEndpointGroup(
self.app, None) self.app, None
)
def test_remove_project_endpoint_no_options(self): def test_remove_project_endpoint_no_options(self):
arglist = [ arglist = [
@ -477,7 +471,8 @@ class TestRemoveProjectEndpointGroup(TestEndpointGroup):
arglist = [ arglist = [
self.endpoint_group.id, self.endpoint_group.id,
self.project.id, self.project.id,
'--project-domain', self.domain.id, '--project-domain',
self.domain.id,
] ]
verifylist = [ verifylist = [
('endpointgroup', self.endpoint_group.id), ('endpointgroup', self.endpoint_group.id),

View File

@ -23,7 +23,6 @@ from openstackclient.tests.unit.identity.v3 import fakes as identity_fakes
class TestGroup(identity_fakes.TestIdentityv3): class TestGroup(identity_fakes.TestIdentityv3):
def setUp(self): def setUp(self):
super(TestGroup, self).setUp() super(TestGroup, self).setUp()
@ -41,7 +40,6 @@ class TestGroup(identity_fakes.TestIdentityv3):
class TestGroupAddUser(TestGroup): class TestGroupAddUser(TestGroup):
_group = identity_fakes.FakeGroup.create_one_group() _group = identity_fakes.FakeGroup.create_one_group()
users = identity_fakes.FakeUser.create_users(count=2) users = identity_fakes.FakeUser.create_users(count=2)
@ -49,8 +47,7 @@ class TestGroupAddUser(TestGroup):
super(TestGroupAddUser, self).setUp() super(TestGroupAddUser, self).setUp()
self.groups_mock.get.return_value = self._group self.groups_mock.get.return_value = self._group
self.users_mock.get = ( self.users_mock.get = identity_fakes.FakeUser.get_users(self.users)
identity_fakes.FakeUser.get_users(self.users))
self.users_mock.add_to_group.return_value = None self.users_mock.add_to_group.return_value = None
self.cmd = group.AddUserToGroup(self.app, None) self.cmd = group.AddUserToGroup(self.app, None)
@ -68,7 +65,8 @@ class TestGroupAddUser(TestGroup):
result = self.cmd.take_action(parsed_args) result = self.cmd.take_action(parsed_args)
self.users_mock.add_to_group.assert_called_once_with( self.users_mock.add_to_group.assert_called_once_with(
self.users[0].id, self._group.id) self.users[0].id, self._group.id
)
self.assertIsNone(result) self.assertIsNone(result)
def test_group_add_multi_users(self): def test_group_add_multi_users(self):
@ -84,15 +82,19 @@ class TestGroupAddUser(TestGroup):
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
result = self.cmd.take_action(parsed_args) result = self.cmd.take_action(parsed_args)
calls = [call(self.users[0].id, self._group.id), calls = [
call(self.users[1].id, self._group.id)] call(self.users[0].id, self._group.id),
call(self.users[1].id, self._group.id),
]
self.users_mock.add_to_group.assert_has_calls(calls) self.users_mock.add_to_group.assert_has_calls(calls)
self.assertIsNone(result) self.assertIsNone(result)
@mock.patch.object(group.LOG, 'error') @mock.patch.object(group.LOG, 'error')
def test_group_add_user_with_error(self, mock_error): def test_group_add_user_with_error(self, mock_error):
self.users_mock.add_to_group.side_effect = [ self.users_mock.add_to_group.side_effect = [
exceptions.CommandError(), None] exceptions.CommandError(),
None,
]
arglist = [ arglist = [
self._group.name, self._group.name,
self.users[0].name, self.users[0].name,
@ -117,7 +119,6 @@ class TestGroupAddUser(TestGroup):
class TestGroupCheckUser(TestGroup): class TestGroupCheckUser(TestGroup):
group = identity_fakes.FakeGroup.create_one_group() group = identity_fakes.FakeGroup.create_one_group()
user = identity_fakes.FakeUser.create_one_user() user = identity_fakes.FakeUser.create_one_user()
@ -143,12 +144,14 @@ class TestGroupCheckUser(TestGroup):
result = self.cmd.take_action(parsed_args) result = self.cmd.take_action(parsed_args)
self.users_mock.check_in_group.assert_called_once_with( self.users_mock.check_in_group.assert_called_once_with(
self.user.id, self.group.id) self.user.id, self.group.id
)
self.assertIsNone(result) self.assertIsNone(result)
def test_group_check_user_server_error(self): def test_group_check_user_server_error(self):
def server_error(*args): def server_error(*args):
raise ks_exc.http.InternalServerError raise ks_exc.http.InternalServerError
self.users_mock.check_in_group.side_effect = server_error self.users_mock.check_in_group.side_effect = server_error
arglist = [ arglist = [
self.group.name, self.group.name,
@ -160,12 +163,12 @@ class TestGroupCheckUser(TestGroup):
] ]
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
self.assertRaises(ks_exc.http.InternalServerError, self.assertRaises(
self.cmd.take_action, parsed_args) ks_exc.http.InternalServerError, self.cmd.take_action, parsed_args
)
class TestGroupCreate(TestGroup): class TestGroupCreate(TestGroup):
domain = identity_fakes.FakeDomain.create_one_domain() domain = identity_fakes.FakeDomain.create_one_domain()
columns = ( columns = (
@ -178,7 +181,8 @@ class TestGroupCreate(TestGroup):
def setUp(self): def setUp(self):
super(TestGroupCreate, self).setUp() super(TestGroupCreate, self).setUp()
self.group = identity_fakes.FakeGroup.create_one_group( self.group = identity_fakes.FakeGroup.create_one_group(
attrs={'domain_id': self.domain.id}) attrs={'domain_id': self.domain.id}
)
self.data = ( self.data = (
self.group.description, self.group.description,
self.group.domain_id, self.group.domain_id,
@ -212,8 +216,10 @@ class TestGroupCreate(TestGroup):
def test_group_create_with_options(self): def test_group_create_with_options(self):
arglist = [ arglist = [
'--domain', self.domain.name, '--domain',
'--description', self.group.description, self.domain.name,
'--description',
self.group.description,
self.group.name, self.group.name,
] ]
verifylist = [ verifylist = [
@ -251,16 +257,15 @@ class TestGroupCreate(TestGroup):
class TestGroupDelete(TestGroup): class TestGroupDelete(TestGroup):
domain = identity_fakes.FakeDomain.create_one_domain() domain = identity_fakes.FakeDomain.create_one_domain()
groups = identity_fakes.FakeGroup.create_groups( groups = identity_fakes.FakeGroup.create_groups(
attrs={'domain_id': domain.id}, count=2) attrs={'domain_id': domain.id}, count=2
)
def setUp(self): def setUp(self):
super(TestGroupDelete, self).setUp() super(TestGroupDelete, self).setUp()
self.groups_mock.get = ( self.groups_mock.get = identity_fakes.FakeGroup.get_groups(self.groups)
identity_fakes.FakeGroup.get_groups(self.groups))
self.groups_mock.delete.return_value = None self.groups_mock.delete.return_value = None
self.domains_mock.get.return_value = self.domain self.domains_mock.get.return_value = self.domain
@ -301,11 +306,11 @@ class TestGroupDelete(TestGroup):
def test_group_delete_with_domain(self): def test_group_delete_with_domain(self):
get_mock_result = [exceptions.CommandError, self.groups[0]] get_mock_result = [exceptions.CommandError, self.groups[0]]
self.groups_mock.get = ( self.groups_mock.get = mock.Mock(side_effect=get_mock_result)
mock.Mock(side_effect=get_mock_result))
arglist = [ arglist = [
'--domain', self.domain.id, '--domain',
self.domain.id,
self.groups[0].id, self.groups[0].id,
] ]
verifylist = [ verifylist = [
@ -316,14 +321,14 @@ class TestGroupDelete(TestGroup):
result = self.cmd.take_action(parsed_args) result = self.cmd.take_action(parsed_args)
self.groups_mock.get.assert_any_call( self.groups_mock.get.assert_any_call(
self.groups[0].id, domain_id=self.domain.id) self.groups[0].id, domain_id=self.domain.id
)
self.groups_mock.delete.assert_called_once_with(self.groups[0].id) self.groups_mock.delete.assert_called_once_with(self.groups[0].id)
self.assertIsNone(result) self.assertIsNone(result)
@mock.patch.object(utils, 'find_resource') @mock.patch.object(utils, 'find_resource')
def test_delete_multi_groups_with_exception(self, find_mock): def test_delete_multi_groups_with_exception(self, find_mock):
find_mock.side_effect = [self.groups[0], find_mock.side_effect = [self.groups[0], exceptions.CommandError]
exceptions.CommandError]
arglist = [ arglist = [
self.groups[0].id, self.groups[0].id,
'unexist_group', 'unexist_group',
@ -337,8 +342,7 @@ class TestGroupDelete(TestGroup):
self.cmd.take_action(parsed_args) self.cmd.take_action(parsed_args)
self.fail('CommandError should be raised.') self.fail('CommandError should be raised.')
except exceptions.CommandError as e: except exceptions.CommandError as e:
self.assertEqual('1 of 2 groups failed to delete.', self.assertEqual('1 of 2 groups failed to delete.', str(e))
str(e))
find_mock.assert_any_call(self.groups_mock, self.groups[0].id) find_mock.assert_any_call(self.groups_mock, self.groups[0].id)
find_mock.assert_any_call(self.groups_mock, 'unexist_group') find_mock.assert_any_call(self.groups_mock, 'unexist_group')
@ -348,7 +352,6 @@ class TestGroupDelete(TestGroup):
class TestGroupList(TestGroup): class TestGroupList(TestGroup):
domain = identity_fakes.FakeDomain.create_one_domain() domain = identity_fakes.FakeDomain.create_one_domain()
group = identity_fakes.FakeGroup.create_one_group() group = identity_fakes.FakeGroup.create_one_group()
user = identity_fakes.FakeUser.create_one_user() user = identity_fakes.FakeUser.create_one_user()
@ -393,16 +396,15 @@ class TestGroupList(TestGroup):
'user': None, 'user': None,
} }
self.groups_mock.list.assert_called_with( self.groups_mock.list.assert_called_with(**kwargs)
**kwargs
)
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
self.assertEqual(self.datalist, tuple(data)) self.assertEqual(self.datalist, tuple(data))
def test_group_list_domain(self): def test_group_list_domain(self):
arglist = [ arglist = [
'--domain', self.domain.id, '--domain',
self.domain.id,
] ]
verifylist = [ verifylist = [
('domain', self.domain.id), ('domain', self.domain.id),
@ -420,16 +422,15 @@ class TestGroupList(TestGroup):
'user': None, 'user': None,
} }
self.groups_mock.list.assert_called_with( self.groups_mock.list.assert_called_with(**kwargs)
**kwargs
)
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
self.assertEqual(self.datalist, tuple(data)) self.assertEqual(self.datalist, tuple(data))
def test_group_list_user(self): def test_group_list_user(self):
arglist = [ arglist = [
'--user', self.user.name, '--user',
self.user.name,
] ]
verifylist = [ verifylist = [
('user', self.user.name), ('user', self.user.name),
@ -447,9 +448,7 @@ class TestGroupList(TestGroup):
'user': self.user.id, 'user': self.user.id,
} }
self.groups_mock.list.assert_called_with( self.groups_mock.list.assert_called_with(**kwargs)
**kwargs
)
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
self.assertEqual(self.datalist, tuple(data)) self.assertEqual(self.datalist, tuple(data))
@ -474,26 +473,25 @@ class TestGroupList(TestGroup):
'user': None, 'user': None,
} }
self.groups_mock.list.assert_called_with( self.groups_mock.list.assert_called_with(**kwargs)
**kwargs
)
columns = self.columns + ( columns = self.columns + (
'Domain ID', 'Domain ID',
'Description', 'Description',
) )
datalist = (( datalist = (
(
self.group.id, self.group.id,
self.group.name, self.group.name,
self.group.domain_id, self.group.domain_id,
self.group.description, self.group.description,
), ) ),
)
self.assertEqual(columns, columns) self.assertEqual(columns, columns)
self.assertEqual(datalist, tuple(data)) self.assertEqual(datalist, tuple(data))
class TestGroupRemoveUser(TestGroup): class TestGroupRemoveUser(TestGroup):
_group = identity_fakes.FakeGroup.create_one_group() _group = identity_fakes.FakeGroup.create_one_group()
users = identity_fakes.FakeUser.create_users(count=2) users = identity_fakes.FakeUser.create_users(count=2)
@ -501,8 +499,7 @@ class TestGroupRemoveUser(TestGroup):
super(TestGroupRemoveUser, self).setUp() super(TestGroupRemoveUser, self).setUp()
self.groups_mock.get.return_value = self._group self.groups_mock.get.return_value = self._group
self.users_mock.get = ( self.users_mock.get = identity_fakes.FakeUser.get_users(self.users)
identity_fakes.FakeUser.get_users(self.users))
self.users_mock.remove_from_group.return_value = None self.users_mock.remove_from_group.return_value = None
self.cmd = group.RemoveUserFromGroup(self.app, None) self.cmd = group.RemoveUserFromGroup(self.app, None)
@ -520,7 +517,8 @@ class TestGroupRemoveUser(TestGroup):
result = self.cmd.take_action(parsed_args) result = self.cmd.take_action(parsed_args)
self.users_mock.remove_from_group.assert_called_once_with( self.users_mock.remove_from_group.assert_called_once_with(
self.users[0].id, self._group.id) self.users[0].id, self._group.id
)
self.assertIsNone(result) self.assertIsNone(result)
def test_group_remove_multi_users(self): def test_group_remove_multi_users(self):
@ -536,15 +534,19 @@ class TestGroupRemoveUser(TestGroup):
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
result = self.cmd.take_action(parsed_args) result = self.cmd.take_action(parsed_args)
calls = [call(self.users[0].id, self._group.id), calls = [
call(self.users[1].id, self._group.id)] call(self.users[0].id, self._group.id),
call(self.users[1].id, self._group.id),
]
self.users_mock.remove_from_group.assert_has_calls(calls) self.users_mock.remove_from_group.assert_has_calls(calls)
self.assertIsNone(result) self.assertIsNone(result)
@mock.patch.object(group.LOG, 'error') @mock.patch.object(group.LOG, 'error')
def test_group_remove_user_with_error(self, mock_error): def test_group_remove_user_with_error(self, mock_error):
self.users_mock.remove_from_group.side_effect = [ self.users_mock.remove_from_group.side_effect = [
exceptions.CommandError(), None] exceptions.CommandError(),
None,
]
arglist = [ arglist = [
self._group.id, self._group.id,
self.users[0].id, self.users[0].id,
@ -569,10 +571,10 @@ class TestGroupRemoveUser(TestGroup):
class TestGroupSet(TestGroup): class TestGroupSet(TestGroup):
domain = identity_fakes.FakeDomain.create_one_domain() domain = identity_fakes.FakeDomain.create_one_domain()
group = identity_fakes.FakeGroup.create_one_group( group = identity_fakes.FakeGroup.create_one_group(
attrs={'domain_id': domain.id}) attrs={'domain_id': domain.id}
)
def setUp(self): def setUp(self):
super(TestGroupSet, self).setUp() super(TestGroupSet, self).setUp()
@ -598,8 +600,10 @@ class TestGroupSet(TestGroup):
def test_group_set_name_and_description(self): def test_group_set_name_and_description(self):
arglist = [ arglist = [
'--name', 'new_name', '--name',
'--description', 'new_description', 'new_name',
'--description',
'new_description',
self.group.id, self.group.id,
] ]
verifylist = [ verifylist = [
@ -615,16 +619,17 @@ class TestGroupSet(TestGroup):
'description': 'new_description', 'description': 'new_description',
} }
self.groups_mock.update.assert_called_once_with( self.groups_mock.update.assert_called_once_with(
self.group.id, **kwargs) self.group.id, **kwargs
)
self.assertIsNone(result) self.assertIsNone(result)
def test_group_set_with_domain(self): def test_group_set_with_domain(self):
get_mock_result = [exceptions.CommandError, self.group] get_mock_result = [exceptions.CommandError, self.group]
self.groups_mock.get = ( self.groups_mock.get = mock.Mock(side_effect=get_mock_result)
mock.Mock(side_effect=get_mock_result))
arglist = [ arglist = [
'--domain', self.domain.id, '--domain',
self.domain.id,
self.group.id, self.group.id,
] ]
verifylist = [ verifylist = [
@ -635,13 +640,13 @@ class TestGroupSet(TestGroup):
result = self.cmd.take_action(parsed_args) result = self.cmd.take_action(parsed_args)
self.groups_mock.get.assert_any_call( self.groups_mock.get.assert_any_call(
self.group.id, domain_id=self.domain.id) self.group.id, domain_id=self.domain.id
)
self.groups_mock.update.assert_called_once_with(self.group.id) self.groups_mock.update.assert_called_once_with(self.group.id)
self.assertIsNone(result) self.assertIsNone(result)
class TestGroupShow(TestGroup): class TestGroupShow(TestGroup):
domain = identity_fakes.FakeDomain.create_one_domain() domain = identity_fakes.FakeDomain.create_one_domain()
columns = ( columns = (
@ -654,7 +659,8 @@ class TestGroupShow(TestGroup):
def setUp(self): def setUp(self):
super(TestGroupShow, self).setUp() super(TestGroupShow, self).setUp()
self.group = identity_fakes.FakeGroup.create_one_group( self.group = identity_fakes.FakeGroup.create_one_group(
attrs={'domain_id': self.domain.id}) attrs={'domain_id': self.domain.id}
)
self.data = ( self.data = (
self.group.description, self.group.description,
self.group.domain_id, self.group.domain_id,
@ -683,11 +689,11 @@ class TestGroupShow(TestGroup):
def test_group_show_with_domain(self): def test_group_show_with_domain(self):
get_mock_result = [exceptions.CommandError, self.group] get_mock_result = [exceptions.CommandError, self.group]
self.groups_mock.get = ( self.groups_mock.get = mock.Mock(side_effect=get_mock_result)
mock.Mock(side_effect=get_mock_result))
arglist = [ arglist = [
'--domain', self.domain.id, '--domain',
self.domain.id,
self.group.id, self.group.id,
] ]
verifylist = [ verifylist = [
@ -698,6 +704,7 @@ class TestGroupShow(TestGroup):
columns, data = self.cmd.take_action(parsed_args) columns, data = self.cmd.take_action(parsed_args)
self.groups_mock.get.assert_any_call( self.groups_mock.get.assert_any_call(
self.group.id, domain_id=self.domain.id) self.group.id, domain_id=self.domain.id
)
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
self.assertEqual(self.data, data) self.assertEqual(self.data, data)

View File

@ -24,7 +24,6 @@ from openstackclient.tests.unit import utils as test_utils
class TestIdentityProvider(identity_fakes.TestFederatedIdentity): class TestIdentityProvider(identity_fakes.TestFederatedIdentity):
def setUp(self): def setUp(self):
super(TestIdentityProvider, self).setUp() super(TestIdentityProvider, self).setUp()
@ -44,7 +43,6 @@ class TestIdentityProvider(identity_fakes.TestFederatedIdentity):
class TestIdentityProviderCreate(TestIdentityProvider): class TestIdentityProviderCreate(TestIdentityProvider):
columns = ( columns = (
'description', 'description',
'domain_id', 'domain_id',
@ -87,8 +85,7 @@ class TestIdentityProviderCreate(TestIdentityProvider):
} }
self.identity_providers_mock.create.assert_called_with( self.identity_providers_mock.create.assert_called_with(
id=identity_fakes.idp_id, id=identity_fakes.idp_id, **kwargs
**kwargs
) )
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
@ -96,7 +93,8 @@ class TestIdentityProviderCreate(TestIdentityProvider):
def test_create_identity_provider_description(self): def test_create_identity_provider_description(self):
arglist = [ arglist = [
'--description', identity_fakes.idp_description, '--description',
identity_fakes.idp_description,
identity_fakes.idp_id, identity_fakes.idp_id,
] ]
verifylist = [ verifylist = [
@ -115,8 +113,7 @@ class TestIdentityProviderCreate(TestIdentityProvider):
} }
self.identity_providers_mock.create.assert_called_with( self.identity_providers_mock.create.assert_called_with(
id=identity_fakes.idp_id, id=identity_fakes.idp_id, **kwargs
**kwargs
) )
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
@ -125,7 +122,8 @@ class TestIdentityProviderCreate(TestIdentityProvider):
def test_create_identity_provider_remote_id(self): def test_create_identity_provider_remote_id(self):
arglist = [ arglist = [
identity_fakes.idp_id, identity_fakes.idp_id,
'--remote-id', identity_fakes.idp_remote_ids[0] '--remote-id',
identity_fakes.idp_remote_ids[0],
] ]
verifylist = [ verifylist = [
('identity_provider_id', identity_fakes.idp_id), ('identity_provider_id', identity_fakes.idp_id),
@ -143,8 +141,7 @@ class TestIdentityProviderCreate(TestIdentityProvider):
} }
self.identity_providers_mock.create.assert_called_with( self.identity_providers_mock.create.assert_called_with(
id=identity_fakes.idp_id, id=identity_fakes.idp_id, **kwargs
**kwargs
) )
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
@ -152,9 +149,11 @@ class TestIdentityProviderCreate(TestIdentityProvider):
def test_create_identity_provider_remote_ids_multiple(self): def test_create_identity_provider_remote_ids_multiple(self):
arglist = [ arglist = [
'--remote-id', identity_fakes.idp_remote_ids[0], '--remote-id',
'--remote-id', identity_fakes.idp_remote_ids[1], identity_fakes.idp_remote_ids[0],
identity_fakes.idp_id '--remote-id',
identity_fakes.idp_remote_ids[1],
identity_fakes.idp_id,
] ]
verifylist = [ verifylist = [
('identity_provider_id', identity_fakes.idp_id), ('identity_provider_id', identity_fakes.idp_id),
@ -172,8 +171,7 @@ class TestIdentityProviderCreate(TestIdentityProvider):
} }
self.identity_providers_mock.create.assert_called_with( self.identity_providers_mock.create.assert_called_with(
id=identity_fakes.idp_id, id=identity_fakes.idp_id, **kwargs
**kwargs
) )
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
@ -181,7 +179,8 @@ class TestIdentityProviderCreate(TestIdentityProvider):
def test_create_identity_provider_remote_ids_file(self): def test_create_identity_provider_remote_ids_file(self):
arglist = [ arglist = [
'--remote-id-file', '/tmp/file_name', '--remote-id-file',
'/tmp/file_name',
identity_fakes.idp_id, identity_fakes.idp_id,
] ]
verifylist = [ verifylist = [
@ -192,8 +191,11 @@ class TestIdentityProviderCreate(TestIdentityProvider):
mocker = mock.Mock() mocker = mock.Mock()
mocker.return_value = "\n".join(identity_fakes.idp_remote_ids) mocker.return_value = "\n".join(identity_fakes.idp_remote_ids)
with mock.patch("openstackclient.identity.v3.identity_provider." with mock.patch(
"utils.read_blob_file_contents", mocker): "openstackclient.identity.v3.identity_provider."
"utils.read_blob_file_contents",
mocker,
):
columns, data = self.cmd.take_action(parsed_args) columns, data = self.cmd.take_action(parsed_args)
# Set expected values # Set expected values
@ -205,15 +207,13 @@ class TestIdentityProviderCreate(TestIdentityProvider):
} }
self.identity_providers_mock.create.assert_called_with( self.identity_providers_mock.create.assert_called_with(
id=identity_fakes.idp_id, id=identity_fakes.idp_id, **kwargs
**kwargs
) )
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
self.assertCountEqual(self.datalist, data) self.assertCountEqual(self.datalist, data)
def test_create_identity_provider_disabled(self): def test_create_identity_provider_disabled(self):
# Prepare FakeResource object # Prepare FakeResource object
IDENTITY_PROVIDER = copy.deepcopy(identity_fakes.IDENTITY_PROVIDER) IDENTITY_PROVIDER = copy.deepcopy(identity_fakes.IDENTITY_PROVIDER)
IDENTITY_PROVIDER['enabled'] = False IDENTITY_PROVIDER['enabled'] = False
@ -241,8 +241,7 @@ class TestIdentityProviderCreate(TestIdentityProvider):
} }
self.identity_providers_mock.create.assert_called_with( self.identity_providers_mock.create.assert_called_with(
id=identity_fakes.idp_id, id=identity_fakes.idp_id, **kwargs
**kwargs
) )
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
@ -251,13 +250,14 @@ class TestIdentityProviderCreate(TestIdentityProvider):
identity_fakes.domain_id, identity_fakes.domain_id,
False, False,
identity_fakes.idp_id, identity_fakes.idp_id,
identity_fakes.formatted_idp_remote_ids identity_fakes.formatted_idp_remote_ids,
) )
self.assertCountEqual(datalist, data) self.assertCountEqual(datalist, data)
def test_create_identity_provider_domain_name(self): def test_create_identity_provider_domain_name(self):
arglist = [ arglist = [
'--domain', identity_fakes.domain_name, '--domain',
identity_fakes.domain_name,
identity_fakes.idp_id, identity_fakes.idp_id,
] ]
verifylist = [ verifylist = [
@ -276,8 +276,7 @@ class TestIdentityProviderCreate(TestIdentityProvider):
} }
self.identity_providers_mock.create.assert_called_with( self.identity_providers_mock.create.assert_called_with(
id=identity_fakes.idp_id, id=identity_fakes.idp_id, **kwargs
**kwargs
) )
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
@ -285,7 +284,8 @@ class TestIdentityProviderCreate(TestIdentityProvider):
def test_create_identity_provider_domain_id(self): def test_create_identity_provider_domain_id(self):
arglist = [ arglist = [
'--domain', identity_fakes.domain_id, '--domain',
identity_fakes.domain_id,
identity_fakes.idp_id, identity_fakes.idp_id,
] ]
verifylist = [ verifylist = [
@ -304,8 +304,7 @@ class TestIdentityProviderCreate(TestIdentityProvider):
} }
self.identity_providers_mock.create.assert_called_with( self.identity_providers_mock.create.assert_called_with(
id=identity_fakes.idp_id, id=identity_fakes.idp_id, **kwargs
**kwargs
) )
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
@ -313,7 +312,8 @@ class TestIdentityProviderCreate(TestIdentityProvider):
def test_create_identity_provider_authttl_positive(self): def test_create_identity_provider_authttl_positive(self):
arglist = [ arglist = [
'--authorization-ttl', '60', '--authorization-ttl',
'60',
identity_fakes.idp_id, identity_fakes.idp_id,
] ]
verifylist = [ verifylist = [
@ -333,8 +333,7 @@ class TestIdentityProviderCreate(TestIdentityProvider):
} }
self.identity_providers_mock.create.assert_called_with( self.identity_providers_mock.create.assert_called_with(
id=identity_fakes.idp_id, id=identity_fakes.idp_id, **kwargs
**kwargs
) )
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
@ -342,7 +341,8 @@ class TestIdentityProviderCreate(TestIdentityProvider):
def test_create_identity_provider_authttl_zero(self): def test_create_identity_provider_authttl_zero(self):
arglist = [ arglist = [
'--authorization-ttl', '0', '--authorization-ttl',
'0',
identity_fakes.idp_id, identity_fakes.idp_id,
] ]
verifylist = [ verifylist = [
@ -362,8 +362,7 @@ class TestIdentityProviderCreate(TestIdentityProvider):
} }
self.identity_providers_mock.create.assert_called_with( self.identity_providers_mock.create.assert_called_with(
id=identity_fakes.idp_id, id=identity_fakes.idp_id, **kwargs
**kwargs
) )
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
@ -371,7 +370,8 @@ class TestIdentityProviderCreate(TestIdentityProvider):
def test_create_identity_provider_authttl_negative(self): def test_create_identity_provider_authttl_negative(self):
arglist = [ arglist = [
'--authorization-ttl', '-60', '--authorization-ttl',
'-60',
identity_fakes.idp_id, identity_fakes.idp_id,
] ]
verifylist = [ verifylist = [
@ -379,21 +379,27 @@ class TestIdentityProviderCreate(TestIdentityProvider):
('authorization_ttl', -60), ('authorization_ttl', -60),
] ]
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
self.assertRaises(exceptions.CommandError, self.cmd.take_action, self.assertRaises(
parsed_args) exceptions.CommandError, self.cmd.take_action, parsed_args
)
def test_create_identity_provider_authttl_not_int(self): def test_create_identity_provider_authttl_not_int(self):
arglist = [ arglist = [
'--authorization-ttl', 'spam', '--authorization-ttl',
'spam',
identity_fakes.idp_id, identity_fakes.idp_id,
] ]
verifylist = [] verifylist = []
self.assertRaises(test_utils.ParserException, self.check_parser, self.assertRaises(
self.cmd, arglist, verifylist) test_utils.ParserException,
self.check_parser,
self.cmd,
arglist,
verifylist,
)
class TestIdentityProviderDelete(TestIdentityProvider): class TestIdentityProviderDelete(TestIdentityProvider):
def setUp(self): def setUp(self):
super(TestIdentityProviderDelete, self).setUp() super(TestIdentityProviderDelete, self).setUp()
@ -425,7 +431,6 @@ class TestIdentityProviderDelete(TestIdentityProvider):
class TestIdentityProviderList(TestIdentityProvider): class TestIdentityProviderList(TestIdentityProvider):
def setUp(self): def setUp(self):
super(TestIdentityProviderList, self).setUp() super(TestIdentityProviderList, self).setUp()
@ -459,20 +464,19 @@ class TestIdentityProviderList(TestIdentityProvider):
collist = ('ID', 'Enabled', 'Domain ID', 'Description') collist = ('ID', 'Enabled', 'Domain ID', 'Description')
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
datalist = (( datalist = (
(
identity_fakes.idp_id, identity_fakes.idp_id,
True, True,
identity_fakes.domain_id, identity_fakes.domain_id,
identity_fakes.idp_description, identity_fakes.idp_description,
), ) ),
)
self.assertCountEqual(datalist, tuple(data)) self.assertCountEqual(datalist, tuple(data))
def test_identity_provider_list_ID_option(self): def test_identity_provider_list_ID_option(self):
arglist = ['--id', arglist = ['--id', identity_fakes.idp_id]
identity_fakes.idp_id] verifylist = [('id', identity_fakes.idp_id)]
verifylist = [
('id', identity_fakes.idp_id)
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
# In base command class Lister in cliff, abstract method take_action() # In base command class Lister in cliff, abstract method take_action()
@ -480,26 +484,24 @@ class TestIdentityProviderList(TestIdentityProvider):
# containing the data to be listed. # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args) columns, data = self.cmd.take_action(parsed_args)
kwargs = { kwargs = {'id': identity_fakes.idp_id}
'id': identity_fakes.idp_id
}
self.identity_providers_mock.list.assert_called_with(**kwargs) self.identity_providers_mock.list.assert_called_with(**kwargs)
collist = ('ID', 'Enabled', 'Domain ID', 'Description') collist = ('ID', 'Enabled', 'Domain ID', 'Description')
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
datalist = (( datalist = (
(
identity_fakes.idp_id, identity_fakes.idp_id,
True, True,
identity_fakes.domain_id, identity_fakes.domain_id,
identity_fakes.idp_description, identity_fakes.idp_description,
), ) ),
)
self.assertCountEqual(datalist, tuple(data)) self.assertCountEqual(datalist, tuple(data))
def test_identity_provider_list_enabled_option(self): def test_identity_provider_list_enabled_option(self):
arglist = ['--enabled'] arglist = ['--enabled']
verifylist = [ verifylist = [('enabled', True)]
('enabled', True)
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
# In base command class Lister in cliff, abstract method take_action() # In base command class Lister in cliff, abstract method take_action()
@ -507,24 +509,23 @@ class TestIdentityProviderList(TestIdentityProvider):
# containing the data to be listed. # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args) columns, data = self.cmd.take_action(parsed_args)
kwargs = { kwargs = {'enabled': True}
'enabled': True
}
self.identity_providers_mock.list.assert_called_with(**kwargs) self.identity_providers_mock.list.assert_called_with(**kwargs)
collist = ('ID', 'Enabled', 'Domain ID', 'Description') collist = ('ID', 'Enabled', 'Domain ID', 'Description')
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
datalist = (( datalist = (
(
identity_fakes.idp_id, identity_fakes.idp_id,
True, True,
identity_fakes.domain_id, identity_fakes.domain_id,
identity_fakes.idp_description, identity_fakes.idp_description,
), ) ),
)
self.assertCountEqual(datalist, tuple(data)) self.assertCountEqual(datalist, tuple(data))
class TestIdentityProviderSet(TestIdentityProvider): class TestIdentityProviderSet(TestIdentityProvider):
columns = ( columns = (
'description', 'description',
'enabled', 'enabled',
@ -543,31 +544,24 @@ class TestIdentityProviderSet(TestIdentityProvider):
self.cmd = identity_provider.SetIdentityProvider(self.app, None) self.cmd = identity_provider.SetIdentityProvider(self.app, None)
def test_identity_provider_set_description(self): def test_identity_provider_set_description(self):
"""Set Identity Provider's description. """ """Set Identity Provider's description."""
def prepare(self): def prepare(self):
"""Prepare fake return objects before the test is executed""" """Prepare fake return objects before the test is executed"""
updated_idp = copy.deepcopy(identity_fakes.IDENTITY_PROVIDER) updated_idp = copy.deepcopy(identity_fakes.IDENTITY_PROVIDER)
updated_idp['enabled'] = False updated_idp['enabled'] = False
resources = fakes.FakeResource( resources = fakes.FakeResource(None, updated_idp, loaded=True)
None,
updated_idp,
loaded=True
)
self.identity_providers_mock.update.return_value = resources self.identity_providers_mock.update.return_value = resources
prepare(self) prepare(self)
new_description = 'new desc' new_description = 'new desc'
arglist = [ arglist = ['--description', new_description, identity_fakes.idp_id]
'--description', new_description,
identity_fakes.idp_id
]
verifylist = [ verifylist = [
('identity_provider', identity_fakes.idp_id), ('identity_provider', identity_fakes.idp_id),
('description', new_description), ('description', new_description),
('enable', False), ('enable', False),
('disable', False), ('disable', False),
('remote_id', None) ('remote_id', None),
] ]
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
self.cmd.take_action(parsed_args) self.cmd.take_action(parsed_args)
@ -586,25 +580,24 @@ class TestIdentityProviderSet(TestIdentityProvider):
"""Prepare fake return objects before the test is executed""" """Prepare fake return objects before the test is executed"""
updated_idp = copy.deepcopy(identity_fakes.IDENTITY_PROVIDER) updated_idp = copy.deepcopy(identity_fakes.IDENTITY_PROVIDER)
updated_idp['enabled'] = False updated_idp['enabled'] = False
resources = fakes.FakeResource( resources = fakes.FakeResource(None, updated_idp, loaded=True)
None,
updated_idp,
loaded=True
)
self.identity_providers_mock.update.return_value = resources self.identity_providers_mock.update.return_value = resources
prepare(self) prepare(self)
arglist = [ arglist = [
'--disable', identity_fakes.idp_id, '--disable',
'--remote-id', identity_fakes.idp_remote_ids[0], identity_fakes.idp_id,
'--remote-id', identity_fakes.idp_remote_ids[1] '--remote-id',
identity_fakes.idp_remote_ids[0],
'--remote-id',
identity_fakes.idp_remote_ids[1],
] ]
verifylist = [ verifylist = [
('identity_provider', identity_fakes.idp_id), ('identity_provider', identity_fakes.idp_id),
('description', None), ('description', None),
('enable', False), ('enable', False),
('disable', True), ('disable', True),
('remote_id', identity_fakes.idp_remote_ids) ('remote_id', identity_fakes.idp_remote_ids),
] ]
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@ -612,7 +605,7 @@ class TestIdentityProviderSet(TestIdentityProvider):
self.identity_providers_mock.update.assert_called_with( self.identity_providers_mock.update.assert_called_with(
identity_fakes.idp_id, identity_fakes.idp_id,
enabled=False, enabled=False,
remote_ids=identity_fakes.idp_remote_ids remote_ids=identity_fakes.idp_remote_ids,
) )
def test_identity_provider_enable(self): def test_identity_provider_enable(self):
@ -626,29 +619,34 @@ class TestIdentityProviderSet(TestIdentityProvider):
resources = fakes.FakeResource( resources = fakes.FakeResource(
None, None,
copy.deepcopy(identity_fakes.IDENTITY_PROVIDER), copy.deepcopy(identity_fakes.IDENTITY_PROVIDER),
loaded=True loaded=True,
) )
self.identity_providers_mock.update.return_value = resources self.identity_providers_mock.update.return_value = resources
prepare(self) prepare(self)
arglist = [ arglist = [
'--enable', identity_fakes.idp_id, '--enable',
'--remote-id', identity_fakes.idp_remote_ids[0], identity_fakes.idp_id,
'--remote-id', identity_fakes.idp_remote_ids[1] '--remote-id',
identity_fakes.idp_remote_ids[0],
'--remote-id',
identity_fakes.idp_remote_ids[1],
] ]
verifylist = [ verifylist = [
('identity_provider', identity_fakes.idp_id), ('identity_provider', identity_fakes.idp_id),
('description', None), ('description', None),
('enable', True), ('enable', True),
('disable', False), ('disable', False),
('remote_id', identity_fakes.idp_remote_ids) ('remote_id', identity_fakes.idp_remote_ids),
] ]
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
self.cmd.take_action(parsed_args) self.cmd.take_action(parsed_args)
self.identity_providers_mock.update.assert_called_with( self.identity_providers_mock.update.assert_called_with(
identity_fakes.idp_id, enabled=True, identity_fakes.idp_id,
remote_ids=identity_fakes.idp_remote_ids) enabled=True,
remote_ids=identity_fakes.idp_remote_ids,
)
def test_identity_provider_replace_remote_ids(self): def test_identity_provider_replace_remote_ids(self):
"""Enable Identity Provider. """Enable Identity Provider.
@ -662,31 +660,31 @@ class TestIdentityProviderSet(TestIdentityProvider):
updated_idp = copy.deepcopy(identity_fakes.IDENTITY_PROVIDER) updated_idp = copy.deepcopy(identity_fakes.IDENTITY_PROVIDER)
updated_idp['remote_ids'] = [self.new_remote_id] updated_idp['remote_ids'] = [self.new_remote_id]
resources = fakes.FakeResource( resources = fakes.FakeResource(None, updated_idp, loaded=True)
None,
updated_idp,
loaded=True
)
self.identity_providers_mock.update.return_value = resources self.identity_providers_mock.update.return_value = resources
prepare(self) prepare(self)
arglist = [ arglist = [
'--enable', identity_fakes.idp_id, '--enable',
'--remote-id', self.new_remote_id identity_fakes.idp_id,
'--remote-id',
self.new_remote_id,
] ]
verifylist = [ verifylist = [
('identity_provider', identity_fakes.idp_id), ('identity_provider', identity_fakes.idp_id),
('description', None), ('description', None),
('enable', True), ('enable', True),
('disable', False), ('disable', False),
('remote_id', [self.new_remote_id]) ('remote_id', [self.new_remote_id]),
] ]
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
self.cmd.take_action(parsed_args) self.cmd.take_action(parsed_args)
self.identity_providers_mock.update.assert_called_with( self.identity_providers_mock.update.assert_called_with(
identity_fakes.idp_id, enabled=True, identity_fakes.idp_id,
remote_ids=[self.new_remote_id]) enabled=True,
remote_ids=[self.new_remote_id],
)
def test_identity_provider_replace_remote_ids_file(self): def test_identity_provider_replace_remote_ids_file(self):
"""Enable Identity Provider. """Enable Identity Provider.
@ -700,17 +698,15 @@ class TestIdentityProviderSet(TestIdentityProvider):
updated_idp = copy.deepcopy(identity_fakes.IDENTITY_PROVIDER) updated_idp = copy.deepcopy(identity_fakes.IDENTITY_PROVIDER)
updated_idp['remote_ids'] = [self.new_remote_id] updated_idp['remote_ids'] = [self.new_remote_id]
resources = fakes.FakeResource( resources = fakes.FakeResource(None, updated_idp, loaded=True)
None,
updated_idp,
loaded=True
)
self.identity_providers_mock.update.return_value = resources self.identity_providers_mock.update.return_value = resources
prepare(self) prepare(self)
arglist = [ arglist = [
'--enable', identity_fakes.idp_id, '--enable',
'--remote-id-file', self.new_remote_id, identity_fakes.idp_id,
'--remote-id-file',
self.new_remote_id,
] ]
verifylist = [ verifylist = [
('identity_provider', identity_fakes.idp_id), ('identity_provider', identity_fakes.idp_id),
@ -723,12 +719,17 @@ class TestIdentityProviderSet(TestIdentityProvider):
mocker = mock.Mock() mocker = mock.Mock()
mocker.return_value = self.new_remote_id mocker.return_value = self.new_remote_id
with mock.patch("openstackclient.identity.v3.identity_provider." with mock.patch(
"utils.read_blob_file_contents", mocker): "openstackclient.identity.v3.identity_provider."
"utils.read_blob_file_contents",
mocker,
):
self.cmd.take_action(parsed_args) self.cmd.take_action(parsed_args)
self.identity_providers_mock.update.assert_called_with( self.identity_providers_mock.update.assert_called_with(
identity_fakes.idp_id, enabled=True, identity_fakes.idp_id,
remote_ids=[self.new_remote_id]) enabled=True,
remote_ids=[self.new_remote_id],
)
def test_identity_provider_no_options(self): def test_identity_provider_no_options(self):
def prepare(self): def prepare(self):
@ -736,7 +737,7 @@ class TestIdentityProviderSet(TestIdentityProvider):
resources = fakes.FakeResource( resources = fakes.FakeResource(
None, None,
copy.deepcopy(identity_fakes.IDENTITY_PROVIDER), copy.deepcopy(identity_fakes.IDENTITY_PROVIDER),
loaded=True loaded=True,
) )
self.identity_providers_mock.get.return_value = resources self.identity_providers_mock.get.return_value = resources
@ -755,7 +756,7 @@ class TestIdentityProviderSet(TestIdentityProvider):
('identity_provider', identity_fakes.idp_id), ('identity_provider', identity_fakes.idp_id),
('enable', False), ('enable', False),
('disable', False), ('disable', False),
('remote_id', None) ('remote_id', None),
] ]
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@ -766,18 +767,11 @@ class TestIdentityProviderSet(TestIdentityProvider):
"""Prepare fake return objects before the test is executed""" """Prepare fake return objects before the test is executed"""
updated_idp = copy.deepcopy(identity_fakes.IDENTITY_PROVIDER) updated_idp = copy.deepcopy(identity_fakes.IDENTITY_PROVIDER)
updated_idp['authorization_ttl'] = 60 updated_idp['authorization_ttl'] = 60
resources = fakes.FakeResource( resources = fakes.FakeResource(None, updated_idp, loaded=True)
None,
updated_idp,
loaded=True
)
self.identity_providers_mock.update.return_value = resources self.identity_providers_mock.update.return_value = resources
prepare(self) prepare(self)
arglist = [ arglist = ['--authorization-ttl', '60', identity_fakes.idp_id]
'--authorization-ttl', '60',
identity_fakes.idp_id
]
verifylist = [ verifylist = [
('identity_provider', identity_fakes.idp_id), ('identity_provider', identity_fakes.idp_id),
('enable', False), ('enable', False),
@ -797,18 +791,11 @@ class TestIdentityProviderSet(TestIdentityProvider):
"""Prepare fake return objects before the test is executed""" """Prepare fake return objects before the test is executed"""
updated_idp = copy.deepcopy(identity_fakes.IDENTITY_PROVIDER) updated_idp = copy.deepcopy(identity_fakes.IDENTITY_PROVIDER)
updated_idp['authorization_ttl'] = 0 updated_idp['authorization_ttl'] = 0
resources = fakes.FakeResource( resources = fakes.FakeResource(None, updated_idp, loaded=True)
None,
updated_idp,
loaded=True
)
self.identity_providers_mock.update.return_value = resources self.identity_providers_mock.update.return_value = resources
prepare(self) prepare(self)
arglist = [ arglist = ['--authorization-ttl', '0', identity_fakes.idp_id]
'--authorization-ttl', '0',
identity_fakes.idp_id
]
verifylist = [ verifylist = [
('identity_provider', identity_fakes.idp_id), ('identity_provider', identity_fakes.idp_id),
('enable', False), ('enable', False),
@ -824,10 +811,7 @@ class TestIdentityProviderSet(TestIdentityProvider):
) )
def test_identity_provider_set_authttl_negative(self): def test_identity_provider_set_authttl_negative(self):
arglist = [ arglist = ['--authorization-ttl', '-1', identity_fakes.idp_id]
'--authorization-ttl', '-1',
identity_fakes.idp_id
]
verifylist = [ verifylist = [
('identity_provider', identity_fakes.idp_id), ('identity_provider', identity_fakes.idp_id),
('enable', False), ('enable', False),
@ -836,21 +820,23 @@ class TestIdentityProviderSet(TestIdentityProvider):
('authorization_ttl', -1), ('authorization_ttl', -1),
] ]
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
self.assertRaises(exceptions.CommandError, self.cmd.take_action, self.assertRaises(
parsed_args) exceptions.CommandError, self.cmd.take_action, parsed_args
)
def test_identity_provider_set_authttl_not_int(self): def test_identity_provider_set_authttl_not_int(self):
arglist = [ arglist = ['--authorization-ttl', 'spam', identity_fakes.idp_id]
'--authorization-ttl', 'spam',
identity_fakes.idp_id
]
verifylist = [] verifylist = []
self.assertRaises(test_utils.ParserException, self.check_parser, self.assertRaises(
self.cmd, arglist, verifylist) test_utils.ParserException,
self.check_parser,
self.cmd,
arglist,
verifylist,
)
class TestIdentityProviderShow(TestIdentityProvider): class TestIdentityProviderShow(TestIdentityProvider):
def setUp(self): def setUp(self):
super(TestIdentityProviderShow, self).setUp() super(TestIdentityProviderShow, self).setUp()
@ -860,8 +846,10 @@ class TestIdentityProviderShow(TestIdentityProvider):
loaded=True, loaded=True,
) )
self.identity_providers_mock.get.side_effect = [Exception("Not found"), self.identity_providers_mock.get.side_effect = [
ret] Exception("Not found"),
ret,
]
self.identity_providers_mock.get.return_value = ret self.identity_providers_mock.get.return_value = ret
# Get the command object to test # Get the command object to test
@ -879,8 +867,7 @@ class TestIdentityProviderShow(TestIdentityProvider):
columns, data = self.cmd.take_action(parsed_args) columns, data = self.cmd.take_action(parsed_args)
self.identity_providers_mock.get.assert_called_with( self.identity_providers_mock.get.assert_called_with(
identity_fakes.idp_id, identity_fakes.idp_id, id='test_idp'
id='test_idp'
) )
collist = ('description', 'domain_id', 'enabled', 'id', 'remote_ids') collist = ('description', 'domain_id', 'enabled', 'id', 'remote_ids')
@ -890,6 +877,6 @@ class TestIdentityProviderShow(TestIdentityProvider):
identity_fakes.domain_id, identity_fakes.domain_id,
True, True,
identity_fakes.idp_id, identity_fakes.idp_id,
identity_fakes.formatted_idp_remote_ids identity_fakes.formatted_idp_remote_ids,
) )
self.assertCountEqual(datalist, data) self.assertCountEqual(datalist, data)

View File

@ -21,7 +21,6 @@ from openstackclient.tests.unit.identity.v3 import fakes as identity_fakes
class TestRole(identity_fakes.TestIdentityv3): class TestRole(identity_fakes.TestIdentityv3):
def setUp(self): def setUp(self):
super(TestRole, self).setUp() super(TestRole, self).setUp()
@ -56,7 +55,6 @@ class TestRole(identity_fakes.TestIdentityv3):
class TestImpliedRoleCreate(TestRole): class TestImpliedRoleCreate(TestRole):
def setUp(self): def setUp(self):
super(TestImpliedRoleCreate, self).setUp() super(TestImpliedRoleCreate, self).setUp()
@ -75,8 +73,10 @@ class TestImpliedRoleCreate(TestRole):
fake_resource = fakes.FakeResource( fake_resource = fakes.FakeResource(
None, None,
{'prior_role': copy.deepcopy(identity_fakes.ROLES[0]), {
'implied': copy.deepcopy(identity_fakes.ROLES[1]), }, 'prior_role': copy.deepcopy(identity_fakes.ROLES[0]),
'implied': copy.deepcopy(identity_fakes.ROLES[1]),
},
loaded=True, loaded=True,
) )
self.inference_rules_mock.create.return_value = fake_resource self.inference_rules_mock.create.return_value = fake_resource
@ -84,10 +84,10 @@ class TestImpliedRoleCreate(TestRole):
self.cmd = implied_role.CreateImpliedRole(self.app, None) self.cmd = implied_role.CreateImpliedRole(self.app, None)
def test_implied_role_create(self): def test_implied_role_create(self):
arglist = [ arglist = [
identity_fakes.ROLES[0]['id'], identity_fakes.ROLES[0]['id'],
'--implied-role', identity_fakes.ROLES[1]['id'], '--implied-role',
identity_fakes.ROLES[1]['id'],
] ]
verifylist = [ verifylist = [
('role', identity_fakes.ROLES[0]['id']), ('role', identity_fakes.ROLES[0]['id']),
@ -102,21 +102,19 @@ class TestImpliedRoleCreate(TestRole):
# InferenceRuleManager.create(prior, implied) # InferenceRuleManager.create(prior, implied)
self.inference_rules_mock.create.assert_called_with( self.inference_rules_mock.create.assert_called_with(
identity_fakes.ROLES[0]['id'], identity_fakes.ROLES[0]['id'], identity_fakes.ROLES[1]['id']
identity_fakes.ROLES[1]['id']
) )
collist = ('implied', 'prior_role') collist = ('implied', 'prior_role')
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
datalist = ( datalist = (
identity_fakes.ROLES[1]['id'], identity_fakes.ROLES[1]['id'],
identity_fakes.ROLES[0]['id'] identity_fakes.ROLES[0]['id'],
) )
self.assertEqual(datalist, data) self.assertEqual(datalist, data)
class TestImpliedRoleDelete(TestRole): class TestImpliedRoleDelete(TestRole):
def setUp(self): def setUp(self):
super(TestImpliedRoleDelete, self).setUp() super(TestImpliedRoleDelete, self).setUp()
@ -135,8 +133,10 @@ class TestImpliedRoleDelete(TestRole):
fake_resource = fakes.FakeResource( fake_resource = fakes.FakeResource(
None, None,
{'prior-role': copy.deepcopy(identity_fakes.ROLES[0]), {
'implied': copy.deepcopy(identity_fakes.ROLES[1]), }, 'prior-role': copy.deepcopy(identity_fakes.ROLES[0]),
'implied': copy.deepcopy(identity_fakes.ROLES[1]),
},
loaded=True, loaded=True,
) )
self.inference_rules_mock.delete.return_value = fake_resource self.inference_rules_mock.delete.return_value = fake_resource
@ -146,7 +146,8 @@ class TestImpliedRoleDelete(TestRole):
def test_implied_role_delete(self): def test_implied_role_delete(self):
arglist = [ arglist = [
identity_fakes.ROLES[0]['id'], identity_fakes.ROLES[0]['id'],
'--implied-role', identity_fakes.ROLES[1]['id'], '--implied-role',
identity_fakes.ROLES[1]['id'],
] ]
verifylist = [ verifylist = [
('role', identity_fakes.ROLES[0]['id']), ('role', identity_fakes.ROLES[0]['id']),
@ -156,18 +157,17 @@ class TestImpliedRoleDelete(TestRole):
self.cmd.take_action(parsed_args) self.cmd.take_action(parsed_args)
self.inference_rules_mock.delete.assert_called_with( self.inference_rules_mock.delete.assert_called_with(
identity_fakes.ROLES[0]['id'], identity_fakes.ROLES[0]['id'], identity_fakes.ROLES[1]['id']
identity_fakes.ROLES[1]['id']
) )
class TestImpliedRoleList(TestRole): class TestImpliedRoleList(TestRole):
def setUp(self): def setUp(self):
super(TestImpliedRoleList, self).setUp() super(TestImpliedRoleList, self).setUp()
self.inference_rules_mock.list_inference_roles.return_value = ( self.inference_rules_mock.list_inference_roles.return_value = (
identity_fakes.FakeImpliedRoleResponse.create_list()) identity_fakes.FakeImpliedRoleResponse.create_list()
)
self.cmd = implied_role.ListImpliedRole(self.app, None) self.cmd = implied_role.ListImpliedRole(self.app, None)
@ -178,12 +178,20 @@ class TestImpliedRoleList(TestRole):
columns, data = self.cmd.take_action(parsed_args) columns, data = self.cmd.take_action(parsed_args)
self.inference_rules_mock.list_inference_roles.assert_called_with() self.inference_rules_mock.list_inference_roles.assert_called_with()
collist = ['Prior Role ID', 'Prior Role Name', collist = [
'Implied Role ID', 'Implied Role Name'] 'Prior Role ID',
'Prior Role Name',
'Implied Role ID',
'Implied Role Name',
]
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
datalist = [ datalist = [
(identity_fakes.ROLES[0]['id'], identity_fakes.ROLES[0]['name'], (
identity_fakes.ROLES[1]['id'], identity_fakes.ROLES[1]['name']) identity_fakes.ROLES[0]['id'],
identity_fakes.ROLES[0]['name'],
identity_fakes.ROLES[1]['id'],
identity_fakes.ROLES[1]['name'],
)
] ]
x = [d for d in data] x = [d for d in data]
self.assertEqual(datalist, x) self.assertEqual(datalist, x)

View File

@ -21,7 +21,6 @@ from openstackclient.tests.unit.identity.v3 import fakes as identity_fakes
class TestLimit(identity_fakes.TestIdentityv3): class TestLimit(identity_fakes.TestIdentityv3):
def setUp(self): def setUp(self):
super(TestLimit, self).setUp() super(TestLimit, self).setUp()
@ -40,28 +39,21 @@ class TestLimit(identity_fakes.TestIdentityv3):
class TestLimitCreate(TestLimit): class TestLimitCreate(TestLimit):
def setUp(self): def setUp(self):
super(TestLimitCreate, self).setUp() super(TestLimitCreate, self).setUp()
self.service = fakes.FakeResource( self.service = fakes.FakeResource(
None, None, copy.deepcopy(identity_fakes.SERVICE), loaded=True
copy.deepcopy(identity_fakes.SERVICE),
loaded=True
) )
self.services_mock.get.return_value = self.service self.services_mock.get.return_value = self.service
self.project = fakes.FakeResource( self.project = fakes.FakeResource(
None, None, copy.deepcopy(identity_fakes.PROJECT), loaded=True
copy.deepcopy(identity_fakes.PROJECT),
loaded=True
) )
self.projects_mock.get.return_value = self.project self.projects_mock.get.return_value = self.project
self.region = fakes.FakeResource( self.region = fakes.FakeResource(
None, None, copy.deepcopy(identity_fakes.REGION), loaded=True
copy.deepcopy(identity_fakes.REGION),
loaded=True
) )
self.regions_mock.get.return_value = self.region self.regions_mock.get.return_value = self.region
@ -69,23 +61,24 @@ class TestLimitCreate(TestLimit):
def test_limit_create_without_options(self): def test_limit_create_without_options(self):
self.limit_mock.create.return_value = fakes.FakeResource( self.limit_mock.create.return_value = fakes.FakeResource(
None, None, copy.deepcopy(identity_fakes.LIMIT), loaded=True
copy.deepcopy(identity_fakes.LIMIT),
loaded=True
) )
resource_limit = 15 resource_limit = 15
arglist = [ arglist = [
'--project', identity_fakes.project_id, '--project',
'--service', identity_fakes.service_id, identity_fakes.project_id,
'--resource-limit', str(resource_limit), '--service',
identity_fakes.limit_resource_name identity_fakes.service_id,
'--resource-limit',
str(resource_limit),
identity_fakes.limit_resource_name,
] ]
verifylist = [ verifylist = [
('project', identity_fakes.project_id), ('project', identity_fakes.project_id),
('service', identity_fakes.service_id), ('service', identity_fakes.service_id),
('resource_name', identity_fakes.limit_resource_name), ('resource_name', identity_fakes.limit_resource_name),
('resource_limit', resource_limit) ('resource_limit', resource_limit),
] ]
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@ -100,8 +93,15 @@ class TestLimitCreate(TestLimit):
**kwargs **kwargs
) )
collist = ('description', 'id', 'project_id', 'region_id', collist = (
'resource_limit', 'resource_name', 'service_id') 'description',
'id',
'project_id',
'region_id',
'resource_limit',
'resource_name',
'service_id',
)
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
datalist = ( datalist = (
None, None,
@ -110,25 +110,28 @@ class TestLimitCreate(TestLimit):
None, None,
resource_limit, resource_limit,
identity_fakes.limit_resource_name, identity_fakes.limit_resource_name,
identity_fakes.service_id identity_fakes.service_id,
) )
self.assertEqual(datalist, data) self.assertEqual(datalist, data)
def test_limit_create_with_options(self): def test_limit_create_with_options(self):
self.limit_mock.create.return_value = fakes.FakeResource( self.limit_mock.create.return_value = fakes.FakeResource(
None, None, copy.deepcopy(identity_fakes.LIMIT_OPTIONS), loaded=True
copy.deepcopy(identity_fakes.LIMIT_OPTIONS),
loaded=True
) )
resource_limit = 15 resource_limit = 15
arglist = [ arglist = [
'--project', identity_fakes.project_id, '--project',
'--service', identity_fakes.service_id, identity_fakes.project_id,
'--resource-limit', str(resource_limit), '--service',
'--region', identity_fakes.region_id, identity_fakes.service_id,
'--description', identity_fakes.limit_description, '--resource-limit',
identity_fakes.limit_resource_name str(resource_limit),
'--region',
identity_fakes.region_id,
'--description',
identity_fakes.limit_description,
identity_fakes.limit_resource_name,
] ]
verifylist = [ verifylist = [
('project', identity_fakes.project_id), ('project', identity_fakes.project_id),
@ -136,7 +139,7 @@ class TestLimitCreate(TestLimit):
('resource_name', identity_fakes.limit_resource_name), ('resource_name', identity_fakes.limit_resource_name),
('resource_limit', resource_limit), ('resource_limit', resource_limit),
('region', identity_fakes.region_id), ('region', identity_fakes.region_id),
('description', identity_fakes.limit_description) ('description', identity_fakes.limit_description),
] ]
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@ -144,7 +147,7 @@ class TestLimitCreate(TestLimit):
kwargs = { kwargs = {
'description': identity_fakes.limit_description, 'description': identity_fakes.limit_description,
'region': self.region 'region': self.region,
} }
self.limit_mock.create.assert_called_with( self.limit_mock.create.assert_called_with(
self.project, self.project,
@ -154,8 +157,15 @@ class TestLimitCreate(TestLimit):
**kwargs **kwargs
) )
collist = ('description', 'id', 'project_id', 'region_id', collist = (
'resource_limit', 'resource_name', 'service_id') 'description',
'id',
'project_id',
'region_id',
'resource_limit',
'resource_name',
'service_id',
)
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
datalist = ( datalist = (
identity_fakes.limit_description, identity_fakes.limit_description,
@ -164,13 +174,12 @@ class TestLimitCreate(TestLimit):
identity_fakes.region_id, identity_fakes.region_id,
resource_limit, resource_limit,
identity_fakes.limit_resource_name, identity_fakes.limit_resource_name,
identity_fakes.service_id identity_fakes.service_id,
) )
self.assertEqual(datalist, data) self.assertEqual(datalist, data)
class TestLimitDelete(TestLimit): class TestLimitDelete(TestLimit):
def setUp(self): def setUp(self):
super(TestLimitDelete, self).setUp() super(TestLimitDelete, self).setUp()
self.cmd = limit.DeleteLimit(self.app, None) self.cmd = limit.DeleteLimit(self.app, None)
@ -179,16 +188,12 @@ class TestLimitDelete(TestLimit):
self.limit_mock.delete.return_value = None self.limit_mock.delete.return_value = None
arglist = [identity_fakes.limit_id] arglist = [identity_fakes.limit_id]
verifylist = [ verifylist = [('limit_id', [identity_fakes.limit_id])]
('limit_id', [identity_fakes.limit_id])
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
result = self.cmd.take_action(parsed_args) result = self.cmd.take_action(parsed_args)
self.limit_mock.delete.assert_called_with( self.limit_mock.delete.assert_called_with(identity_fakes.limit_id)
identity_fakes.limit_id
)
self.assertIsNone(result) self.assertIsNone(result)
def test_limit_delete_with_exception(self): def test_limit_delete_with_exception(self):
@ -196,29 +201,22 @@ class TestLimitDelete(TestLimit):
self.limit_mock.delete.side_effect = return_value self.limit_mock.delete.side_effect = return_value
arglist = ['fake-limit-id'] arglist = ['fake-limit-id']
verifylist = [ verifylist = [('limit_id', ['fake-limit-id'])]
('limit_id', ['fake-limit-id'])
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
try: try:
self.cmd.take_action(parsed_args) self.cmd.take_action(parsed_args)
self.fail('CommandError should be raised.') self.fail('CommandError should be raised.')
except exceptions.CommandError as e: except exceptions.CommandError as e:
self.assertEqual( self.assertEqual('1 of 1 limits failed to delete.', str(e))
'1 of 1 limits failed to delete.', str(e)
)
class TestLimitShow(TestLimit): class TestLimitShow(TestLimit):
def setUp(self): def setUp(self):
super(TestLimitShow, self).setUp() super(TestLimitShow, self).setUp()
self.limit_mock.get.return_value = fakes.FakeResource( self.limit_mock.get.return_value = fakes.FakeResource(
None, None, copy.deepcopy(identity_fakes.LIMIT), loaded=True
copy.deepcopy(identity_fakes.LIMIT),
loaded=True
) )
self.cmd = limit.ShowLimit(self.app, None) self.cmd = limit.ShowLimit(self.app, None)
@ -233,8 +231,13 @@ class TestLimitShow(TestLimit):
self.limit_mock.get.assert_called_with(identity_fakes.limit_id) self.limit_mock.get.assert_called_with(identity_fakes.limit_id)
collist = ( collist = (
'description', 'id', 'project_id', 'region_id', 'resource_limit', 'description',
'resource_name', 'service_id' 'id',
'project_id',
'region_id',
'resource_limit',
'resource_name',
'service_id',
) )
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
datalist = ( datalist = (
@ -244,13 +247,12 @@ class TestLimitShow(TestLimit):
None, None,
identity_fakes.limit_resource_limit, identity_fakes.limit_resource_limit,
identity_fakes.limit_resource_name, identity_fakes.limit_resource_name,
identity_fakes.service_id identity_fakes.service_id,
) )
self.assertEqual(datalist, data) self.assertEqual(datalist, data)
class TestLimitSet(TestLimit): class TestLimitSet(TestLimit):
def setUp(self): def setUp(self):
super(TestLimitSet, self).setUp() super(TestLimitSet, self).setUp()
self.cmd = limit.SetLimit(self.app, None) self.cmd = limit.SetLimit(self.app, None)
@ -263,12 +265,13 @@ class TestLimitSet(TestLimit):
) )
arglist = [ arglist = [
'--description', identity_fakes.limit_description, '--description',
identity_fakes.limit_id identity_fakes.limit_description,
identity_fakes.limit_id,
] ]
verifylist = [ verifylist = [
('description', identity_fakes.limit_description), ('description', identity_fakes.limit_description),
('limit_id', identity_fakes.limit_id) ('limit_id', identity_fakes.limit_id),
] ]
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@ -277,12 +280,17 @@ class TestLimitSet(TestLimit):
self.limit_mock.update.assert_called_with( self.limit_mock.update.assert_called_with(
identity_fakes.limit_id, identity_fakes.limit_id,
description=identity_fakes.limit_description, description=identity_fakes.limit_description,
resource_limit=None resource_limit=None,
) )
collist = ( collist = (
'description', 'id', 'project_id', 'region_id', 'resource_limit', 'description',
'resource_name', 'service_id' 'id',
'project_id',
'region_id',
'resource_limit',
'resource_name',
'service_id',
) )
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
datalist = ( datalist = (
@ -292,7 +300,7 @@ class TestLimitSet(TestLimit):
None, None,
identity_fakes.limit_resource_limit, identity_fakes.limit_resource_limit,
identity_fakes.limit_resource_name, identity_fakes.limit_resource_name,
identity_fakes.service_id identity_fakes.service_id,
) )
self.assertEqual(datalist, data) self.assertEqual(datalist, data)
@ -305,12 +313,13 @@ class TestLimitSet(TestLimit):
) )
arglist = [ arglist = [
'--resource-limit', str(resource_limit), '--resource-limit',
identity_fakes.limit_id str(resource_limit),
identity_fakes.limit_id,
] ]
verifylist = [ verifylist = [
('resource_limit', resource_limit), ('resource_limit', resource_limit),
('limit_id', identity_fakes.limit_id) ('limit_id', identity_fakes.limit_id),
] ]
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@ -319,12 +328,17 @@ class TestLimitSet(TestLimit):
self.limit_mock.update.assert_called_with( self.limit_mock.update.assert_called_with(
identity_fakes.limit_id, identity_fakes.limit_id,
description=None, description=None,
resource_limit=resource_limit resource_limit=resource_limit,
) )
collist = ( collist = (
'description', 'id', 'project_id', 'region_id', 'resource_limit', 'description',
'resource_name', 'service_id' 'id',
'project_id',
'region_id',
'resource_limit',
'resource_name',
'service_id',
) )
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
datalist = ( datalist = (
@ -334,21 +348,18 @@ class TestLimitSet(TestLimit):
None, None,
resource_limit, resource_limit,
identity_fakes.limit_resource_name, identity_fakes.limit_resource_name,
identity_fakes.service_id identity_fakes.service_id,
) )
self.assertEqual(datalist, data) self.assertEqual(datalist, data)
class TestLimitList(TestLimit): class TestLimitList(TestLimit):
def setUp(self): def setUp(self):
super(TestLimitList, self).setUp() super(TestLimitList, self).setUp()
self.limit_mock.list.return_value = [ self.limit_mock.list.return_value = [
fakes.FakeResource( fakes.FakeResource(
None, None, copy.deepcopy(identity_fakes.LIMIT), loaded=True
copy.deepcopy(identity_fakes.LIMIT),
loaded=True
) )
] ]
@ -362,22 +373,28 @@ class TestLimitList(TestLimit):
columns, data = self.cmd.take_action(parsed_args) columns, data = self.cmd.take_action(parsed_args)
self.limit_mock.list.assert_called_with( self.limit_mock.list.assert_called_with(
service=None, resource_name=None, region=None, service=None, resource_name=None, region=None, project=None
project=None
) )
collist = ( collist = (
'ID', 'Project ID', 'Service ID', 'Resource Name', 'ID',
'Resource Limit', 'Description', 'Region ID' 'Project ID',
'Service ID',
'Resource Name',
'Resource Limit',
'Description',
'Region ID',
) )
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
datalist = (( datalist = (
(
identity_fakes.limit_id, identity_fakes.limit_id,
identity_fakes.project_id, identity_fakes.project_id,
identity_fakes.service_id, identity_fakes.service_id,
identity_fakes.limit_resource_name, identity_fakes.limit_resource_name,
identity_fakes.limit_resource_limit, identity_fakes.limit_resource_limit,
None, None,
None None,
), ) ),
)
self.assertEqual(datalist, tuple(data)) self.assertEqual(datalist, tuple(data))

View File

@ -23,7 +23,6 @@ from openstackclient.tests.unit.identity.v3 import fakes as identity_fakes
class TestMapping(identity_fakes.TestFederatedIdentity): class TestMapping(identity_fakes.TestFederatedIdentity):
def setUp(self): def setUp(self):
super(TestMapping, self).setUp() super(TestMapping, self).setUp()
@ -33,82 +32,73 @@ class TestMapping(identity_fakes.TestFederatedIdentity):
class TestMappingCreate(TestMapping): class TestMappingCreate(TestMapping):
def setUp(self): def setUp(self):
super(TestMappingCreate, self).setUp() super(TestMappingCreate, self).setUp()
self.mapping_mock.create.return_value = fakes.FakeResource( self.mapping_mock.create.return_value = fakes.FakeResource(
None, None, copy.deepcopy(identity_fakes.MAPPING_RESPONSE), loaded=True
copy.deepcopy(identity_fakes.MAPPING_RESPONSE),
loaded=True
) )
self.cmd = mapping.CreateMapping(self.app, None) self.cmd = mapping.CreateMapping(self.app, None)
def test_create_mapping(self): def test_create_mapping(self):
arglist = [ arglist = [
'--rules', identity_fakes.mapping_rules_file_path, '--rules',
identity_fakes.mapping_id identity_fakes.mapping_rules_file_path,
identity_fakes.mapping_id,
] ]
verifylist = [ verifylist = [
('mapping', identity_fakes.mapping_id), ('mapping', identity_fakes.mapping_id),
('rules', identity_fakes.mapping_rules_file_path) ('rules', identity_fakes.mapping_rules_file_path),
] ]
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
mocker = mock.Mock() mocker = mock.Mock()
mocker.return_value = identity_fakes.MAPPING_RULES mocker.return_value = identity_fakes.MAPPING_RULES
with mock.patch("openstackclient.identity.v3.mapping." with mock.patch(
"CreateMapping._read_rules", mocker): "openstackclient.identity.v3.mapping." "CreateMapping._read_rules",
mocker,
):
columns, data = self.cmd.take_action(parsed_args) columns, data = self.cmd.take_action(parsed_args)
self.mapping_mock.create.assert_called_with( self.mapping_mock.create.assert_called_with(
mapping_id=identity_fakes.mapping_id, mapping_id=identity_fakes.mapping_id,
rules=identity_fakes.MAPPING_RULES) rules=identity_fakes.MAPPING_RULES,
)
collist = ('id', 'rules') collist = ('id', 'rules')
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
datalist = (identity_fakes.mapping_id, datalist = (identity_fakes.mapping_id, identity_fakes.MAPPING_RULES)
identity_fakes.MAPPING_RULES)
self.assertEqual(datalist, data) self.assertEqual(datalist, data)
class TestMappingDelete(TestMapping): class TestMappingDelete(TestMapping):
def setUp(self): def setUp(self):
super(TestMappingDelete, self).setUp() super(TestMappingDelete, self).setUp()
self.mapping_mock.get.return_value = fakes.FakeResource( self.mapping_mock.get.return_value = fakes.FakeResource(
None, None, copy.deepcopy(identity_fakes.MAPPING_RESPONSE), loaded=True
copy.deepcopy(identity_fakes.MAPPING_RESPONSE), )
loaded=True)
self.mapping_mock.delete.return_value = None self.mapping_mock.delete.return_value = None
self.cmd = mapping.DeleteMapping(self.app, None) self.cmd = mapping.DeleteMapping(self.app, None)
def test_delete_mapping(self): def test_delete_mapping(self):
arglist = [ arglist = [identity_fakes.mapping_id]
identity_fakes.mapping_id verifylist = [('mapping', [identity_fakes.mapping_id])]
]
verifylist = [
('mapping', [identity_fakes.mapping_id])
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
result = self.cmd.take_action(parsed_args) result = self.cmd.take_action(parsed_args)
self.mapping_mock.delete.assert_called_with( self.mapping_mock.delete.assert_called_with(identity_fakes.mapping_id)
identity_fakes.mapping_id)
self.assertIsNone(result) self.assertIsNone(result)
class TestMappingList(TestMapping): class TestMappingList(TestMapping):
def setUp(self): def setUp(self):
super(TestMappingList, self).setUp() super(TestMappingList, self).setUp()
self.mapping_mock.get.return_value = fakes.FakeResource( self.mapping_mock.get.return_value = fakes.FakeResource(
None, None, {'id': identity_fakes.mapping_id}, loaded=True
{'id': identity_fakes.mapping_id}, )
loaded=True)
# Pretend list command returns list of two mappings. # Pretend list command returns list of two mappings.
# NOTE(marek-denis): We are returning FakeResources with mapping id # NOTE(marek-denis): We are returning FakeResources with mapping id
# only as ShowMapping class is implemented in a way where rules will # only as ShowMapping class is implemented in a way where rules will
@ -146,20 +136,15 @@ class TestMappingList(TestMapping):
class TestMappingSet(TestMapping): class TestMappingSet(TestMapping):
def setUp(self): def setUp(self):
super(TestMappingSet, self).setUp() super(TestMappingSet, self).setUp()
self.mapping_mock.get.return_value = fakes.FakeResource( self.mapping_mock.get.return_value = fakes.FakeResource(
None, None, copy.deepcopy(identity_fakes.MAPPING_RESPONSE), loaded=True
copy.deepcopy(identity_fakes.MAPPING_RESPONSE),
loaded=True
) )
self.mapping_mock.update.return_value = fakes.FakeResource( self.mapping_mock.update.return_value = fakes.FakeResource(
None, None, identity_fakes.MAPPING_RESPONSE_2, loaded=True
identity_fakes.MAPPING_RESPONSE_2,
loaded=True
) )
# Get the command object to test # Get the command object to test
@ -167,74 +152,69 @@ class TestMappingSet(TestMapping):
def test_set_new_rules(self): def test_set_new_rules(self):
arglist = [ arglist = [
'--rules', identity_fakes.mapping_rules_file_path, '--rules',
identity_fakes.mapping_id identity_fakes.mapping_rules_file_path,
identity_fakes.mapping_id,
] ]
verifylist = [ verifylist = [
('mapping', identity_fakes.mapping_id), ('mapping', identity_fakes.mapping_id),
('rules', identity_fakes.mapping_rules_file_path) ('rules', identity_fakes.mapping_rules_file_path),
] ]
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
mocker = mock.Mock() mocker = mock.Mock()
mocker.return_value = identity_fakes.MAPPING_RULES_2 mocker.return_value = identity_fakes.MAPPING_RULES_2
with mock.patch("openstackclient.identity.v3.mapping." with mock.patch(
"SetMapping._read_rules", mocker): "openstackclient.identity.v3.mapping." "SetMapping._read_rules",
mocker,
):
result = self.cmd.take_action(parsed_args) result = self.cmd.take_action(parsed_args)
self.mapping_mock.update.assert_called_with( self.mapping_mock.update.assert_called_with(
mapping=identity_fakes.mapping_id, mapping=identity_fakes.mapping_id,
rules=identity_fakes.MAPPING_RULES_2) rules=identity_fakes.MAPPING_RULES_2,
)
self.assertIsNone(result) self.assertIsNone(result)
def test_set_rules_wrong_file_path(self): def test_set_rules_wrong_file_path(self):
arglist = [ arglist = [
'--rules', identity_fakes.mapping_rules_file_path, '--rules',
identity_fakes.mapping_id identity_fakes.mapping_rules_file_path,
identity_fakes.mapping_id,
] ]
verifylist = [ verifylist = [
('mapping', identity_fakes.mapping_id), ('mapping', identity_fakes.mapping_id),
('rules', identity_fakes.mapping_rules_file_path) ('rules', identity_fakes.mapping_rules_file_path),
] ]
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
self.assertRaises( self.assertRaises(
exceptions.CommandError, exceptions.CommandError, self.cmd.take_action, parsed_args
self.cmd.take_action, )
parsed_args)
class TestMappingShow(TestMapping): class TestMappingShow(TestMapping):
def setUp(self): def setUp(self):
super(TestMappingShow, self).setUp() super(TestMappingShow, self).setUp()
self.mapping_mock.get.return_value = fakes.FakeResource( self.mapping_mock.get.return_value = fakes.FakeResource(
None, None, copy.deepcopy(identity_fakes.MAPPING_RESPONSE), loaded=True
copy.deepcopy(identity_fakes.MAPPING_RESPONSE),
loaded=True
) )
self.cmd = mapping.ShowMapping(self.app, None) self.cmd = mapping.ShowMapping(self.app, None)
def test_mapping_show(self): def test_mapping_show(self):
arglist = [ arglist = [identity_fakes.mapping_id]
identity_fakes.mapping_id verifylist = [('mapping', identity_fakes.mapping_id)]
]
verifylist = [
('mapping', identity_fakes.mapping_id)
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
columns, data = self.cmd.take_action(parsed_args) columns, data = self.cmd.take_action(parsed_args)
self.mapping_mock.get.assert_called_with( self.mapping_mock.get.assert_called_with(identity_fakes.mapping_id)
identity_fakes.mapping_id)
collist = ('id', 'rules') collist = ('id', 'rules')
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
datalist = (identity_fakes.mapping_id, datalist = (identity_fakes.mapping_id, identity_fakes.MAPPING_RULES)
identity_fakes.MAPPING_RULES)
self.assertEqual(datalist, data) self.assertEqual(datalist, data)

View File

@ -18,7 +18,6 @@ from openstackclient.tests.unit.identity.v3 import fakes as identity_fakes
class TestOAuth1(identity_fakes.TestOAuth1): class TestOAuth1(identity_fakes.TestOAuth1):
def setUp(self): def setUp(self):
super(TestOAuth1, self).setUp() super(TestOAuth1, self).setUp()
identity_client = self.app.client_manager.identity identity_client = self.app.client_manager.identity
@ -33,7 +32,6 @@ class TestOAuth1(identity_fakes.TestOAuth1):
class TestAccessTokenCreate(TestOAuth1): class TestAccessTokenCreate(TestOAuth1):
def setUp(self): def setUp(self):
super(TestAccessTokenCreate, self).setUp() super(TestAccessTokenCreate, self).setUp()
@ -47,11 +45,16 @@ class TestAccessTokenCreate(TestOAuth1):
def test_create_access_tokens(self): def test_create_access_tokens(self):
arglist = [ arglist = [
'--consumer-key', identity_fakes.consumer_id, '--consumer-key',
'--consumer-secret', identity_fakes.consumer_secret, identity_fakes.consumer_id,
'--request-key', identity_fakes.request_token_id, '--consumer-secret',
'--request-secret', identity_fakes.request_token_secret, identity_fakes.consumer_secret,
'--verifier', identity_fakes.oauth_verifier_pin, '--request-key',
identity_fakes.request_token_id,
'--request-secret',
identity_fakes.request_token_secret,
'--verifier',
identity_fakes.oauth_verifier_pin,
] ]
verifylist = [ verifylist = [
('consumer_key', identity_fakes.consumer_id), ('consumer_key', identity_fakes.consumer_id),
@ -83,7 +86,6 @@ class TestAccessTokenCreate(TestOAuth1):
class TestRequestTokenAuthorize(TestOAuth1): class TestRequestTokenAuthorize(TestOAuth1):
def setUp(self): def setUp(self):
super(TestRequestTokenAuthorize, self).setUp() super(TestRequestTokenAuthorize, self).setUp()
@ -100,8 +102,10 @@ class TestRequestTokenAuthorize(TestOAuth1):
def test_authorize_request_tokens(self): def test_authorize_request_tokens(self):
arglist = [ arglist = [
'--request-key', identity_fakes.request_token_id, '--request-key',
'--role', identity_fakes.role_name, identity_fakes.request_token_id,
'--role',
identity_fakes.role_name,
] ]
verifylist = [ verifylist = [
('request_key', identity_fakes.request_token_id), ('request_key', identity_fakes.request_token_id),
@ -117,14 +121,11 @@ class TestRequestTokenAuthorize(TestOAuth1):
collist = ('oauth_verifier',) collist = ('oauth_verifier',)
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
datalist = ( datalist = (identity_fakes.oauth_verifier_pin,)
identity_fakes.oauth_verifier_pin,
)
self.assertEqual(datalist, data) self.assertEqual(datalist, data)
class TestRequestTokenCreate(TestOAuth1): class TestRequestTokenCreate(TestOAuth1):
def setUp(self): def setUp(self):
super(TestRequestTokenCreate, self).setUp() super(TestRequestTokenCreate, self).setUp()
@ -144,9 +145,12 @@ class TestRequestTokenCreate(TestOAuth1):
def test_create_request_tokens(self): def test_create_request_tokens(self):
arglist = [ arglist = [
'--consumer-key', identity_fakes.consumer_id, '--consumer-key',
'--consumer-secret', identity_fakes.consumer_secret, identity_fakes.consumer_id,
'--project', identity_fakes.project_id, '--consumer-secret',
identity_fakes.consumer_secret,
'--project',
identity_fakes.project_id,
] ]
verifylist = [ verifylist = [
('consumer_key', identity_fakes.consumer_id), ('consumer_key', identity_fakes.consumer_id),

File diff suppressed because it is too large Load Diff

View File

@ -20,7 +20,6 @@ from openstackclient.tests.unit.identity.v3 import fakes as identity_fakes
class TestProtocol(identity_fakes.TestFederatedIdentity): class TestProtocol(identity_fakes.TestFederatedIdentity):
def setUp(self): def setUp(self):
super(TestProtocol, self).setUp() super(TestProtocol, self).setUp()
@ -30,7 +29,6 @@ class TestProtocol(identity_fakes.TestFederatedIdentity):
class TestProtocolCreate(TestProtocol): class TestProtocolCreate(TestProtocol):
def setUp(self): def setUp(self):
super(TestProtocolCreate, self).setUp() super(TestProtocolCreate, self).setUp()
@ -42,33 +40,37 @@ class TestProtocolCreate(TestProtocol):
def test_create_protocol(self): def test_create_protocol(self):
argslist = [ argslist = [
identity_fakes.protocol_id, identity_fakes.protocol_id,
'--identity-provider', identity_fakes.idp_id, '--identity-provider',
'--mapping', identity_fakes.mapping_id identity_fakes.idp_id,
'--mapping',
identity_fakes.mapping_id,
] ]
verifylist = [ verifylist = [
('federation_protocol', identity_fakes.protocol_id), ('federation_protocol', identity_fakes.protocol_id),
('identity_provider', identity_fakes.idp_id), ('identity_provider', identity_fakes.idp_id),
('mapping', identity_fakes.mapping_id) ('mapping', identity_fakes.mapping_id),
] ]
parsed_args = self.check_parser(self.cmd, argslist, verifylist) parsed_args = self.check_parser(self.cmd, argslist, verifylist)
columns, data = self.cmd.take_action(parsed_args) columns, data = self.cmd.take_action(parsed_args)
self.protocols_mock.create.assert_called_with( self.protocols_mock.create.assert_called_with(
protocol_id=identity_fakes.protocol_id, protocol_id=identity_fakes.protocol_id,
identity_provider=identity_fakes.idp_id, identity_provider=identity_fakes.idp_id,
mapping=identity_fakes.mapping_id) mapping=identity_fakes.mapping_id,
)
collist = ('id', 'identity_provider', 'mapping') collist = ('id', 'identity_provider', 'mapping')
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
datalist = (identity_fakes.protocol_id, datalist = (
identity_fakes.protocol_id,
identity_fakes.idp_id, identity_fakes.idp_id,
identity_fakes.mapping_id) identity_fakes.mapping_id,
)
self.assertEqual(datalist, data) self.assertEqual(datalist, data)
class TestProtocolDelete(TestProtocol): class TestProtocolDelete(TestProtocol):
def setUp(self): def setUp(self):
super(TestProtocolDelete, self).setUp() super(TestProtocolDelete, self).setUp()
@ -84,8 +86,9 @@ class TestProtocolDelete(TestProtocol):
def test_delete_identity_provider(self): def test_delete_identity_provider(self):
arglist = [ arglist = [
'--identity-provider', identity_fakes.idp_id, '--identity-provider',
identity_fakes.protocol_id identity_fakes.idp_id,
identity_fakes.protocol_id,
] ]
verifylist = [ verifylist = [
('federation_protocol', [identity_fakes.protocol_id]), ('federation_protocol', [identity_fakes.protocol_id]),
@ -96,20 +99,24 @@ class TestProtocolDelete(TestProtocol):
result = self.cmd.take_action(parsed_args) result = self.cmd.take_action(parsed_args)
self.protocols_mock.delete.assert_called_with( self.protocols_mock.delete.assert_called_with(
identity_fakes.idp_id, identity_fakes.protocol_id) identity_fakes.idp_id, identity_fakes.protocol_id
)
self.assertIsNone(result) self.assertIsNone(result)
class TestProtocolList(TestProtocol): class TestProtocolList(TestProtocol):
def setUp(self): def setUp(self):
super(TestProtocolList, self).setUp() super(TestProtocolList, self).setUp()
self.protocols_mock.get.return_value = fakes.FakeResource( self.protocols_mock.get.return_value = fakes.FakeResource(
None, identity_fakes.PROTOCOL_ID_MAPPING, loaded=True) None, identity_fakes.PROTOCOL_ID_MAPPING, loaded=True
)
self.protocols_mock.list.return_value = [fakes.FakeResource( self.protocols_mock.list.return_value = [
None, identity_fakes.PROTOCOL_ID_MAPPING, loaded=True)] fakes.FakeResource(
None, identity_fakes.PROTOCOL_ID_MAPPING, loaded=True
)
]
self.cmd = federation_protocol.ListProtocols(self.app, None) self.cmd = federation_protocol.ListProtocols(self.app, None)
@ -124,65 +131,83 @@ class TestProtocolList(TestProtocol):
class TestProtocolSet(TestProtocol): class TestProtocolSet(TestProtocol):
def setUp(self): def setUp(self):
super(TestProtocolSet, self).setUp() super(TestProtocolSet, self).setUp()
self.protocols_mock.get.return_value = fakes.FakeResource( self.protocols_mock.get.return_value = fakes.FakeResource(
None, identity_fakes.PROTOCOL_OUTPUT, loaded=True) None, identity_fakes.PROTOCOL_OUTPUT, loaded=True
)
self.protocols_mock.update.return_value = fakes.FakeResource( self.protocols_mock.update.return_value = fakes.FakeResource(
None, identity_fakes.PROTOCOL_OUTPUT_UPDATED, loaded=True) None, identity_fakes.PROTOCOL_OUTPUT_UPDATED, loaded=True
)
self.cmd = federation_protocol.SetProtocol(self.app, None) self.cmd = federation_protocol.SetProtocol(self.app, None)
def test_set_new_mapping(self): def test_set_new_mapping(self):
arglist = [ arglist = [
identity_fakes.protocol_id, identity_fakes.protocol_id,
'--identity-provider', identity_fakes.idp_id, '--identity-provider',
'--mapping', identity_fakes.mapping_id identity_fakes.idp_id,
'--mapping',
identity_fakes.mapping_id,
] ]
verifylist = [('identity_provider', identity_fakes.idp_id), verifylist = [
('identity_provider', identity_fakes.idp_id),
('federation_protocol', identity_fakes.protocol_id), ('federation_protocol', identity_fakes.protocol_id),
('mapping', identity_fakes.mapping_id)] ('mapping', identity_fakes.mapping_id),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
columns, data = self.cmd.take_action(parsed_args) columns, data = self.cmd.take_action(parsed_args)
self.protocols_mock.update.assert_called_with( self.protocols_mock.update.assert_called_with(
identity_fakes.idp_id, identity_fakes.protocol_id, identity_fakes.idp_id,
identity_fakes.mapping_id) identity_fakes.protocol_id,
identity_fakes.mapping_id,
)
collist = ('id', 'identity_provider', 'mapping') collist = ('id', 'identity_provider', 'mapping')
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
datalist = (identity_fakes.protocol_id, identity_fakes.idp_id, datalist = (
identity_fakes.mapping_id_updated) identity_fakes.protocol_id,
identity_fakes.idp_id,
identity_fakes.mapping_id_updated,
)
self.assertEqual(datalist, data) self.assertEqual(datalist, data)
class TestProtocolShow(TestProtocol): class TestProtocolShow(TestProtocol):
def setUp(self): def setUp(self):
super(TestProtocolShow, self).setUp() super(TestProtocolShow, self).setUp()
self.protocols_mock.get.return_value = fakes.FakeResource( self.protocols_mock.get.return_value = fakes.FakeResource(
None, identity_fakes.PROTOCOL_OUTPUT, loaded=False) None, identity_fakes.PROTOCOL_OUTPUT, loaded=False
)
self.cmd = federation_protocol.ShowProtocol(self.app, None) self.cmd = federation_protocol.ShowProtocol(self.app, None)
def test_show_protocol(self): def test_show_protocol(self):
arglist = [identity_fakes.protocol_id, '--identity-provider', arglist = [
identity_fakes.idp_id] identity_fakes.protocol_id,
verifylist = [('federation_protocol', identity_fakes.protocol_id), '--identity-provider',
('identity_provider', identity_fakes.idp_id)] identity_fakes.idp_id,
]
verifylist = [
('federation_protocol', identity_fakes.protocol_id),
('identity_provider', identity_fakes.idp_id),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
columns, data = self.cmd.take_action(parsed_args) columns, data = self.cmd.take_action(parsed_args)
self.protocols_mock.get.assert_called_with(identity_fakes.idp_id, self.protocols_mock.get.assert_called_with(
identity_fakes.protocol_id) identity_fakes.idp_id, identity_fakes.protocol_id
)
collist = ('id', 'identity_provider', 'mapping') collist = ('id', 'identity_provider', 'mapping')
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
datalist = (identity_fakes.protocol_id, datalist = (
identity_fakes.protocol_id,
identity_fakes.idp_id, identity_fakes.idp_id,
identity_fakes.mapping_id) identity_fakes.mapping_id,
)
self.assertEqual(datalist, data) self.assertEqual(datalist, data)

View File

@ -19,7 +19,6 @@ from openstackclient.tests.unit.identity.v3 import fakes as identity_fakes
class TestRegion(identity_fakes.TestIdentityv3): class TestRegion(identity_fakes.TestIdentityv3):
def setUp(self): def setUp(self):
super(TestRegion, self).setUp() super(TestRegion, self).setUp()
@ -29,7 +28,6 @@ class TestRegion(identity_fakes.TestIdentityv3):
class TestRegionCreate(TestRegion): class TestRegionCreate(TestRegion):
columns = ( columns = (
'description', 'description',
'parent_region', 'parent_region',
@ -56,11 +54,12 @@ class TestRegionCreate(TestRegion):
def test_region_create_description(self): def test_region_create_description(self):
arglist = [ arglist = [
identity_fakes.region_id, identity_fakes.region_id,
'--description', identity_fakes.region_description, '--description',
identity_fakes.region_description,
] ]
verifylist = [ verifylist = [
('region', identity_fakes.region_id), ('region', identity_fakes.region_id),
('description', identity_fakes.region_description) ('description', identity_fakes.region_description),
] ]
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@ -75,9 +74,7 @@ class TestRegionCreate(TestRegion):
'id': identity_fakes.region_id, 'id': identity_fakes.region_id,
'parent_region': None, 'parent_region': None,
} }
self.regions_mock.create.assert_called_with( self.regions_mock.create.assert_called_with(**kwargs)
**kwargs
)
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
self.assertEqual(self.datalist, data) self.assertEqual(self.datalist, data)
@ -102,9 +99,7 @@ class TestRegionCreate(TestRegion):
'id': identity_fakes.region_id, 'id': identity_fakes.region_id,
'parent_region': None, 'parent_region': None,
} }
self.regions_mock.create.assert_called_with( self.regions_mock.create.assert_called_with(**kwargs)
**kwargs
)
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
self.assertEqual(self.datalist, data) self.assertEqual(self.datalist, data)
@ -112,7 +107,8 @@ class TestRegionCreate(TestRegion):
def test_region_create_parent_region_id(self): def test_region_create_parent_region_id(self):
arglist = [ arglist = [
identity_fakes.region_id, identity_fakes.region_id,
'--parent-region', identity_fakes.region_parent_region_id, '--parent-region',
identity_fakes.region_parent_region_id,
] ]
verifylist = [ verifylist = [
('region', identity_fakes.region_id), ('region', identity_fakes.region_id),
@ -131,15 +127,12 @@ class TestRegionCreate(TestRegion):
'id': identity_fakes.region_id, 'id': identity_fakes.region_id,
'parent_region': identity_fakes.region_parent_region_id, 'parent_region': identity_fakes.region_parent_region_id,
} }
self.regions_mock.create.assert_called_with( self.regions_mock.create.assert_called_with(**kwargs)
**kwargs
)
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
self.assertEqual(self.datalist, data) self.assertEqual(self.datalist, data)
class TestRegionDelete(TestRegion): class TestRegionDelete(TestRegion):
def setUp(self): def setUp(self):
super(TestRegionDelete, self).setUp() super(TestRegionDelete, self).setUp()
@ -166,7 +159,6 @@ class TestRegionDelete(TestRegion):
class TestRegionList(TestRegion): class TestRegionList(TestRegion):
columns = ( columns = (
'Region', 'Region',
'Parent Region', 'Parent Region',
@ -210,7 +202,8 @@ class TestRegionList(TestRegion):
def test_region_list_parent_region_id(self): def test_region_list_parent_region_id(self):
arglist = [ arglist = [
'--parent-region', identity_fakes.region_parent_region_id, '--parent-region',
identity_fakes.region_parent_region_id,
] ]
verifylist = [ verifylist = [
('parent_region', identity_fakes.region_parent_region_id), ('parent_region', identity_fakes.region_parent_region_id),
@ -222,14 +215,14 @@ class TestRegionList(TestRegion):
# containing the data to be listed. # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args) columns, data = self.cmd.take_action(parsed_args)
self.regions_mock.list.assert_called_with( self.regions_mock.list.assert_called_with(
parent_region_id=identity_fakes.region_parent_region_id) parent_region_id=identity_fakes.region_parent_region_id
)
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
self.assertEqual(self.datalist, tuple(data)) self.assertEqual(self.datalist, tuple(data))
class TestRegionSet(TestRegion): class TestRegionSet(TestRegion):
def setUp(self): def setUp(self):
super(TestRegionSet, self).setUp() super(TestRegionSet, self).setUp()
@ -255,14 +248,14 @@ class TestRegionSet(TestRegion):
kwargs = {} kwargs = {}
self.regions_mock.update.assert_called_with( self.regions_mock.update.assert_called_with(
identity_fakes.region_id, identity_fakes.region_id, **kwargs
**kwargs
) )
self.assertIsNone(result) self.assertIsNone(result)
def test_region_set_description(self): def test_region_set_description(self):
arglist = [ arglist = [
'--description', 'qwerty', '--description',
'qwerty',
identity_fakes.region_id, identity_fakes.region_id,
] ]
verifylist = [ verifylist = [
@ -278,14 +271,14 @@ class TestRegionSet(TestRegion):
'description': 'qwerty', 'description': 'qwerty',
} }
self.regions_mock.update.assert_called_with( self.regions_mock.update.assert_called_with(
identity_fakes.region_id, identity_fakes.region_id, **kwargs
**kwargs
) )
self.assertIsNone(result) self.assertIsNone(result)
def test_region_set_parent_region_id(self): def test_region_set_parent_region_id(self):
arglist = [ arglist = [
'--parent-region', 'new_parent', '--parent-region',
'new_parent',
identity_fakes.region_id, identity_fakes.region_id,
] ]
verifylist = [ verifylist = [
@ -301,14 +294,12 @@ class TestRegionSet(TestRegion):
'parent_region': 'new_parent', 'parent_region': 'new_parent',
} }
self.regions_mock.update.assert_called_with( self.regions_mock.update.assert_called_with(
identity_fakes.region_id, identity_fakes.region_id, **kwargs
**kwargs
) )
self.assertIsNone(result) self.assertIsNone(result)
class TestRegionShow(TestRegion): class TestRegionShow(TestRegion):
def setUp(self): def setUp(self):
super(TestRegionShow, self).setUp() super(TestRegionShow, self).setUp()

View File

@ -21,7 +21,6 @@ from openstackclient.tests.unit.identity.v3 import fakes as identity_fakes
class TestRegisteredLimit(identity_fakes.TestIdentityv3): class TestRegisteredLimit(identity_fakes.TestIdentityv3):
def setUp(self): def setUp(self):
super(TestRegisteredLimit, self).setUp() super(TestRegisteredLimit, self).setUp()
@ -36,21 +35,16 @@ class TestRegisteredLimit(identity_fakes.TestIdentityv3):
class TestRegisteredLimitCreate(TestRegisteredLimit): class TestRegisteredLimitCreate(TestRegisteredLimit):
def setUp(self): def setUp(self):
super(TestRegisteredLimitCreate, self).setUp() super(TestRegisteredLimitCreate, self).setUp()
self.service = fakes.FakeResource( self.service = fakes.FakeResource(
None, None, copy.deepcopy(identity_fakes.SERVICE), loaded=True
copy.deepcopy(identity_fakes.SERVICE),
loaded=True
) )
self.services_mock.get.return_value = self.service self.services_mock.get.return_value = self.service
self.region = fakes.FakeResource( self.region = fakes.FakeResource(
None, None, copy.deepcopy(identity_fakes.REGION), loaded=True
copy.deepcopy(identity_fakes.REGION),
loaded=True
) )
self.regions_mock.get.return_value = self.region self.regions_mock.get.return_value = self.region
@ -58,23 +52,23 @@ class TestRegisteredLimitCreate(TestRegisteredLimit):
def test_registered_limit_create_without_options(self): def test_registered_limit_create_without_options(self):
self.registered_limit_mock.create.return_value = fakes.FakeResource( self.registered_limit_mock.create.return_value = fakes.FakeResource(
None, None, copy.deepcopy(identity_fakes.REGISTERED_LIMIT), loaded=True
copy.deepcopy(identity_fakes.REGISTERED_LIMIT),
loaded=True
) )
resource_name = identity_fakes.registered_limit_resource_name resource_name = identity_fakes.registered_limit_resource_name
default_limit = identity_fakes.registered_limit_default_limit default_limit = identity_fakes.registered_limit_default_limit
arglist = [ arglist = [
'--service', identity_fakes.service_id, '--service',
'--default-limit', '10', identity_fakes.service_id,
'--default-limit',
'10',
resource_name, resource_name,
] ]
verifylist = [ verifylist = [
('service', identity_fakes.service_id), ('service', identity_fakes.service_id),
('default_limit', default_limit), ('default_limit', default_limit),
('resource_name', resource_name) ('resource_name', resource_name),
] ]
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@ -85,8 +79,14 @@ class TestRegisteredLimitCreate(TestRegisteredLimit):
self.service, resource_name, default_limit, **kwargs self.service, resource_name, default_limit, **kwargs
) )
collist = ('default_limit', 'description', 'id', 'region_id', collist = (
'resource_name', 'service_id') 'default_limit',
'description',
'id',
'region_id',
'resource_name',
'service_id',
)
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
datalist = ( datalist = (
@ -95,7 +95,7 @@ class TestRegisteredLimitCreate(TestRegisteredLimit):
identity_fakes.registered_limit_id, identity_fakes.registered_limit_id,
None, None,
identity_fakes.registered_limit_resource_name, identity_fakes.registered_limit_resource_name,
identity_fakes.service_id identity_fakes.service_id,
) )
self.assertEqual(datalist, data) self.assertEqual(datalist, data)
@ -103,18 +103,22 @@ class TestRegisteredLimitCreate(TestRegisteredLimit):
self.registered_limit_mock.create.return_value = fakes.FakeResource( self.registered_limit_mock.create.return_value = fakes.FakeResource(
None, None,
copy.deepcopy(identity_fakes.REGISTERED_LIMIT_OPTIONS), copy.deepcopy(identity_fakes.REGISTERED_LIMIT_OPTIONS),
loaded=True loaded=True,
) )
resource_name = identity_fakes.registered_limit_resource_name resource_name = identity_fakes.registered_limit_resource_name
default_limit = identity_fakes.registered_limit_default_limit default_limit = identity_fakes.registered_limit_default_limit
description = identity_fakes.registered_limit_description description = identity_fakes.registered_limit_description
arglist = [ arglist = [
'--region', identity_fakes.region_id, '--region',
'--description', description, identity_fakes.region_id,
'--service', identity_fakes.service_id, '--description',
'--default-limit', '10', description,
resource_name '--service',
identity_fakes.service_id,
'--default-limit',
'10',
resource_name,
] ]
verifylist = [ verifylist = [
@ -122,7 +126,7 @@ class TestRegisteredLimitCreate(TestRegisteredLimit):
('description', description), ('description', description),
('service', identity_fakes.service_id), ('service', identity_fakes.service_id),
('default_limit', default_limit), ('default_limit', default_limit),
('resource_name', resource_name) ('resource_name', resource_name),
] ]
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@ -133,8 +137,14 @@ class TestRegisteredLimitCreate(TestRegisteredLimit):
self.service, resource_name, default_limit, **kwargs self.service, resource_name, default_limit, **kwargs
) )
collist = ('default_limit', 'description', 'id', 'region_id', collist = (
'resource_name', 'service_id') 'default_limit',
'description',
'id',
'region_id',
'resource_name',
'service_id',
)
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
datalist = ( datalist = (
@ -143,13 +153,12 @@ class TestRegisteredLimitCreate(TestRegisteredLimit):
identity_fakes.registered_limit_id, identity_fakes.registered_limit_id,
identity_fakes.region_id, identity_fakes.region_id,
identity_fakes.registered_limit_resource_name, identity_fakes.registered_limit_resource_name,
identity_fakes.service_id identity_fakes.service_id,
) )
self.assertEqual(datalist, data) self.assertEqual(datalist, data)
class TestRegisteredLimitDelete(TestRegisteredLimit): class TestRegisteredLimitDelete(TestRegisteredLimit):
def setUp(self): def setUp(self):
super(TestRegisteredLimitDelete, self).setUp() super(TestRegisteredLimitDelete, self).setUp()
@ -176,9 +185,7 @@ class TestRegisteredLimitDelete(TestRegisteredLimit):
self.registered_limit_mock.delete.side_effect = return_value self.registered_limit_mock.delete.side_effect = return_value
arglist = ['fake-registered-limit-id'] arglist = ['fake-registered-limit-id']
verifylist = [ verifylist = [('registered_limit_id', ['fake-registered-limit-id'])]
('registered_limit_id', ['fake-registered-limit-id'])
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
try: try:
@ -191,14 +198,11 @@ class TestRegisteredLimitDelete(TestRegisteredLimit):
class TestRegisteredLimitShow(TestRegisteredLimit): class TestRegisteredLimitShow(TestRegisteredLimit):
def setUp(self): def setUp(self):
super(TestRegisteredLimitShow, self).setUp() super(TestRegisteredLimitShow, self).setUp()
self.registered_limit_mock.get.return_value = fakes.FakeResource( self.registered_limit_mock.get.return_value = fakes.FakeResource(
None, None, copy.deepcopy(identity_fakes.REGISTERED_LIMIT), loaded=True
copy.deepcopy(identity_fakes.REGISTERED_LIMIT),
loaded=True
) )
self.cmd = registered_limit.ShowRegisteredLimit(self.app, None) self.cmd = registered_limit.ShowRegisteredLimit(self.app, None)
@ -217,8 +221,12 @@ class TestRegisteredLimitShow(TestRegisteredLimit):
) )
collist = ( collist = (
'default_limit', 'description', 'id', 'region_id', 'resource_name', 'default_limit',
'service_id' 'description',
'id',
'region_id',
'resource_name',
'service_id',
) )
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
datalist = ( datalist = (
@ -227,33 +235,33 @@ class TestRegisteredLimitShow(TestRegisteredLimit):
identity_fakes.registered_limit_id, identity_fakes.registered_limit_id,
None, None,
identity_fakes.registered_limit_resource_name, identity_fakes.registered_limit_resource_name,
identity_fakes.service_id identity_fakes.service_id,
) )
self.assertEqual(datalist, data) self.assertEqual(datalist, data)
class TestRegisteredLimitSet(TestRegisteredLimit): class TestRegisteredLimitSet(TestRegisteredLimit):
def setUp(self): def setUp(self):
super(TestRegisteredLimitSet, self).setUp() super(TestRegisteredLimitSet, self).setUp()
self.cmd = registered_limit.SetRegisteredLimit(self.app, None) self.cmd = registered_limit.SetRegisteredLimit(self.app, None)
def test_registered_limit_set_description(self): def test_registered_limit_set_description(self):
registered_limit = copy.deepcopy(identity_fakes.REGISTERED_LIMIT) registered_limit = copy.deepcopy(identity_fakes.REGISTERED_LIMIT)
registered_limit['description'] = ( registered_limit[
identity_fakes.registered_limit_description 'description'
) ] = identity_fakes.registered_limit_description
self.registered_limit_mock.update.return_value = fakes.FakeResource( self.registered_limit_mock.update.return_value = fakes.FakeResource(
None, registered_limit, loaded=True None, registered_limit, loaded=True
) )
arglist = [ arglist = [
'--description', identity_fakes.registered_limit_description, '--description',
identity_fakes.registered_limit_id identity_fakes.registered_limit_description,
identity_fakes.registered_limit_id,
] ]
verifylist = [ verifylist = [
('description', identity_fakes.registered_limit_description), ('description', identity_fakes.registered_limit_description),
('registered_limit_id', identity_fakes.registered_limit_id) ('registered_limit_id', identity_fakes.registered_limit_id),
] ]
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@ -265,12 +273,16 @@ class TestRegisteredLimitSet(TestRegisteredLimit):
resource_name=None, resource_name=None,
default_limit=None, default_limit=None,
description=identity_fakes.registered_limit_description, description=identity_fakes.registered_limit_description,
region=None region=None,
) )
collist = ( collist = (
'default_limit', 'description', 'id', 'region_id', 'resource_name', 'default_limit',
'service_id' 'description',
'id',
'region_id',
'resource_name',
'service_id',
) )
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
datalist = ( datalist = (
@ -279,7 +291,7 @@ class TestRegisteredLimitSet(TestRegisteredLimit):
identity_fakes.registered_limit_id, identity_fakes.registered_limit_id,
None, None,
identity_fakes.registered_limit_resource_name, identity_fakes.registered_limit_resource_name,
identity_fakes.service_id identity_fakes.service_id,
) )
self.assertEqual(datalist, data) self.assertEqual(datalist, data)
@ -292,12 +304,13 @@ class TestRegisteredLimitSet(TestRegisteredLimit):
) )
arglist = [ arglist = [
'--default-limit', str(default_limit), '--default-limit',
identity_fakes.registered_limit_id str(default_limit),
identity_fakes.registered_limit_id,
] ]
verifylist = [ verifylist = [
('default_limit', default_limit), ('default_limit', default_limit),
('registered_limit_id', identity_fakes.registered_limit_id) ('registered_limit_id', identity_fakes.registered_limit_id),
] ]
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@ -309,12 +322,16 @@ class TestRegisteredLimitSet(TestRegisteredLimit):
resource_name=None, resource_name=None,
default_limit=default_limit, default_limit=default_limit,
description=None, description=None,
region=None region=None,
) )
collist = ( collist = (
'default_limit', 'description', 'id', 'region_id', 'resource_name', 'default_limit',
'service_id' 'description',
'id',
'region_id',
'resource_name',
'service_id',
) )
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
datalist = ( datalist = (
@ -323,7 +340,7 @@ class TestRegisteredLimitSet(TestRegisteredLimit):
identity_fakes.registered_limit_id, identity_fakes.registered_limit_id,
None, None,
identity_fakes.registered_limit_resource_name, identity_fakes.registered_limit_resource_name,
identity_fakes.service_id identity_fakes.service_id,
) )
self.assertEqual(datalist, data) self.assertEqual(datalist, data)
@ -336,12 +353,13 @@ class TestRegisteredLimitSet(TestRegisteredLimit):
) )
arglist = [ arglist = [
'--resource-name', resource_name, '--resource-name',
identity_fakes.registered_limit_id resource_name,
identity_fakes.registered_limit_id,
] ]
verifylist = [ verifylist = [
('resource_name', resource_name), ('resource_name', resource_name),
('registered_limit_id', identity_fakes.registered_limit_id) ('registered_limit_id', identity_fakes.registered_limit_id),
] ]
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@ -353,12 +371,16 @@ class TestRegisteredLimitSet(TestRegisteredLimit):
resource_name=resource_name, resource_name=resource_name,
default_limit=None, default_limit=None,
description=None, description=None,
region=None region=None,
) )
collist = ( collist = (
'default_limit', 'description', 'id', 'region_id', 'resource_name', 'default_limit',
'service_id' 'description',
'id',
'region_id',
'resource_name',
'service_id',
) )
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
datalist = ( datalist = (
@ -367,7 +389,7 @@ class TestRegisteredLimitSet(TestRegisteredLimit):
identity_fakes.registered_limit_id, identity_fakes.registered_limit_id,
None, None,
resource_name, resource_name,
identity_fakes.service_id identity_fakes.service_id,
) )
self.assertEqual(datalist, data) self.assertEqual(datalist, data)
@ -380,13 +402,10 @@ class TestRegisteredLimitSet(TestRegisteredLimit):
) )
self.services_mock.get.return_value = service self.services_mock.get.return_value = service
arglist = [ arglist = ['--service', service.id, identity_fakes.registered_limit_id]
'--service', service.id,
identity_fakes.registered_limit_id
]
verifylist = [ verifylist = [
('service', service.id), ('service', service.id),
('registered_limit_id', identity_fakes.registered_limit_id) ('registered_limit_id', identity_fakes.registered_limit_id),
] ]
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@ -398,12 +417,16 @@ class TestRegisteredLimitSet(TestRegisteredLimit):
resource_name=None, resource_name=None,
default_limit=None, default_limit=None,
description=None, description=None,
region=None region=None,
) )
collist = ( collist = (
'default_limit', 'description', 'id', 'region_id', 'resource_name', 'default_limit',
'service_id' 'description',
'id',
'region_id',
'resource_name',
'service_id',
) )
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
datalist = ( datalist = (
@ -412,7 +435,7 @@ class TestRegisteredLimitSet(TestRegisteredLimit):
identity_fakes.registered_limit_id, identity_fakes.registered_limit_id,
None, None,
identity_fakes.registered_limit_resource_name, identity_fakes.registered_limit_resource_name,
service.id service.id,
) )
self.assertEqual(datalist, data) self.assertEqual(datalist, data)
@ -420,24 +443,17 @@ class TestRegisteredLimitSet(TestRegisteredLimit):
registered_limit = copy.deepcopy(identity_fakes.REGISTERED_LIMIT) registered_limit = copy.deepcopy(identity_fakes.REGISTERED_LIMIT)
region = identity_fakes.REGION region = identity_fakes.REGION
region['id'] = 'RegionTwo' region['id'] = 'RegionTwo'
region = fakes.FakeResource( region = fakes.FakeResource(None, copy.deepcopy(region), loaded=True)
None,
copy.deepcopy(region),
loaded=True
)
registered_limit['region_id'] = region.id registered_limit['region_id'] = region.id
self.registered_limit_mock.update.return_value = fakes.FakeResource( self.registered_limit_mock.update.return_value = fakes.FakeResource(
None, registered_limit, loaded=True None, registered_limit, loaded=True
) )
self.regions_mock.get.return_value = region self.regions_mock.get.return_value = region
arglist = [ arglist = ['--region', region.id, identity_fakes.registered_limit_id]
'--region', region.id,
identity_fakes.registered_limit_id
]
verifylist = [ verifylist = [
('region', region.id), ('region', region.id),
('registered_limit_id', identity_fakes.registered_limit_id) ('registered_limit_id', identity_fakes.registered_limit_id),
] ]
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@ -449,12 +465,16 @@ class TestRegisteredLimitSet(TestRegisteredLimit):
resource_name=None, resource_name=None,
default_limit=None, default_limit=None,
description=None, description=None,
region=region region=region,
) )
collist = ( collist = (
'default_limit', 'description', 'id', 'region_id', 'resource_name', 'default_limit',
'service_id' 'description',
'id',
'region_id',
'resource_name',
'service_id',
) )
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
datalist = ( datalist = (
@ -463,20 +483,17 @@ class TestRegisteredLimitSet(TestRegisteredLimit):
identity_fakes.registered_limit_id, identity_fakes.registered_limit_id,
region.id, region.id,
identity_fakes.registered_limit_resource_name, identity_fakes.registered_limit_resource_name,
identity_fakes.service_id identity_fakes.service_id,
) )
self.assertEqual(datalist, data) self.assertEqual(datalist, data)
class TestRegisteredLimitList(TestRegisteredLimit): class TestRegisteredLimitList(TestRegisteredLimit):
def setUp(self): def setUp(self):
super(TestRegisteredLimitList, self).setUp() super(TestRegisteredLimitList, self).setUp()
self.registered_limit_mock.get.return_value = fakes.FakeResource( self.registered_limit_mock.get.return_value = fakes.FakeResource(
None, None, copy.deepcopy(identity_fakes.REGISTERED_LIMIT), loaded=True
copy.deepcopy(identity_fakes.REGISTERED_LIMIT),
loaded=True
) )
self.cmd = registered_limit.ShowRegisteredLimit(self.app, None) self.cmd = registered_limit.ShowRegisteredLimit(self.app, None)
@ -495,8 +512,12 @@ class TestRegisteredLimitList(TestRegisteredLimit):
) )
collist = ( collist = (
'default_limit', 'description', 'id', 'region_id', 'resource_name', 'default_limit',
'service_id' 'description',
'id',
'region_id',
'resource_name',
'service_id',
) )
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
datalist = ( datalist = (
@ -505,6 +526,6 @@ class TestRegisteredLimitList(TestRegisteredLimit):
identity_fakes.registered_limit_id, identity_fakes.registered_limit_id,
None, None,
identity_fakes.registered_limit_resource_name, identity_fakes.registered_limit_resource_name,
identity_fakes.service_id identity_fakes.service_id,
) )
self.assertEqual(datalist, data) self.assertEqual(datalist, data)

View File

@ -26,7 +26,6 @@ from openstackclient.tests.unit.identity.v3 import fakes as identity_fakes
class TestRole(identity_fakes.TestIdentityv3): class TestRole(identity_fakes.TestIdentityv3):
def setUp(self): def setUp(self):
super(TestRole, self).setUp() super(TestRole, self).setUp()
@ -55,13 +54,11 @@ class TestRole(identity_fakes.TestIdentityv3):
class TestRoleInherited(TestRole): class TestRoleInherited(TestRole):
def _is_inheritance_testcase(self): def _is_inheritance_testcase(self):
return True return True
class TestRoleAdd(TestRole): class TestRoleAdd(TestRole):
def setUp(self): def setUp(self):
super(TestRoleAdd, self).setUp() super(TestRoleAdd, self).setUp()
@ -105,8 +102,10 @@ class TestRoleAdd(TestRole):
def test_role_add_user_system(self): def test_role_add_user_system(self):
arglist = [ arglist = [
'--user', identity_fakes.user_name, '--user',
'--system', 'all', identity_fakes.user_name,
'--system',
'all',
identity_fakes.role_name, identity_fakes.role_name,
] ]
if self._is_inheritance_testcase(): if self._is_inheritance_testcase():
@ -132,15 +131,16 @@ class TestRoleAdd(TestRole):
} }
# RoleManager.grant(role, user=, group=, domain=, project=) # RoleManager.grant(role, user=, group=, domain=, project=)
self.roles_mock.grant.assert_called_with( self.roles_mock.grant.assert_called_with(
identity_fakes.role_id, identity_fakes.role_id, **kwargs
**kwargs
) )
self.assertIsNone(result) self.assertIsNone(result)
def test_role_add_user_domain(self): def test_role_add_user_domain(self):
arglist = [ arglist = [
'--user', identity_fakes.user_name, '--user',
'--domain', identity_fakes.domain_name, identity_fakes.user_name,
'--domain',
identity_fakes.domain_name,
identity_fakes.role_name, identity_fakes.role_name,
] ]
if self._is_inheritance_testcase(): if self._is_inheritance_testcase():
@ -165,15 +165,16 @@ class TestRoleAdd(TestRole):
} }
# RoleManager.grant(role, user=, group=, domain=, project=) # RoleManager.grant(role, user=, group=, domain=, project=)
self.roles_mock.grant.assert_called_with( self.roles_mock.grant.assert_called_with(
identity_fakes.role_id, identity_fakes.role_id, **kwargs
**kwargs
) )
self.assertIsNone(result) self.assertIsNone(result)
def test_role_add_user_project(self): def test_role_add_user_project(self):
arglist = [ arglist = [
'--user', identity_fakes.user_name, '--user',
'--project', identity_fakes.project_name, identity_fakes.user_name,
'--project',
identity_fakes.project_name,
identity_fakes.role_name, identity_fakes.role_name,
] ]
if self._is_inheritance_testcase(): if self._is_inheritance_testcase():
@ -198,15 +199,16 @@ class TestRoleAdd(TestRole):
} }
# RoleManager.grant(role, user=, group=, domain=, project=) # RoleManager.grant(role, user=, group=, domain=, project=)
self.roles_mock.grant.assert_called_with( self.roles_mock.grant.assert_called_with(
identity_fakes.role_id, identity_fakes.role_id, **kwargs
**kwargs
) )
self.assertIsNone(result) self.assertIsNone(result)
def test_role_add_group_system(self): def test_role_add_group_system(self):
arglist = [ arglist = [
'--group', identity_fakes.group_name, '--group',
'--system', 'all', identity_fakes.group_name,
'--system',
'all',
identity_fakes.role_name, identity_fakes.role_name,
] ]
if self._is_inheritance_testcase(): if self._is_inheritance_testcase():
@ -232,15 +234,16 @@ class TestRoleAdd(TestRole):
} }
# RoleManager.grant(role, user=, group=, domain=, project=) # RoleManager.grant(role, user=, group=, domain=, project=)
self.roles_mock.grant.assert_called_with( self.roles_mock.grant.assert_called_with(
identity_fakes.role_id, identity_fakes.role_id, **kwargs
**kwargs
) )
self.assertIsNone(result) self.assertIsNone(result)
def test_role_add_group_domain(self): def test_role_add_group_domain(self):
arglist = [ arglist = [
'--group', identity_fakes.group_name, '--group',
'--domain', identity_fakes.domain_name, identity_fakes.group_name,
'--domain',
identity_fakes.domain_name,
identity_fakes.role_name, identity_fakes.role_name,
] ]
if self._is_inheritance_testcase(): if self._is_inheritance_testcase():
@ -265,15 +268,16 @@ class TestRoleAdd(TestRole):
} }
# RoleManager.grant(role, user=, group=, domain=, project=) # RoleManager.grant(role, user=, group=, domain=, project=)
self.roles_mock.grant.assert_called_with( self.roles_mock.grant.assert_called_with(
identity_fakes.role_id, identity_fakes.role_id, **kwargs
**kwargs
) )
self.assertIsNone(result) self.assertIsNone(result)
def test_role_add_group_project(self): def test_role_add_group_project(self):
arglist = [ arglist = [
'--group', identity_fakes.group_name, '--group',
'--project', identity_fakes.project_name, identity_fakes.group_name,
'--project',
identity_fakes.project_name,
identity_fakes.role_name, identity_fakes.role_name,
] ]
if self._is_inheritance_testcase(): if self._is_inheritance_testcase():
@ -298,8 +302,7 @@ class TestRoleAdd(TestRole):
} }
# RoleManager.grant(role, user=, group=, domain=, project=) # RoleManager.grant(role, user=, group=, domain=, project=)
self.roles_mock.grant.assert_called_with( self.roles_mock.grant.assert_called_with(
identity_fakes.role_id, identity_fakes.role_id, **kwargs
**kwargs
) )
self.assertIsNone(result) self.assertIsNone(result)
@ -310,9 +313,12 @@ class TestRoleAdd(TestRole):
loaded=True, loaded=True,
) )
arglist = [ arglist = [
'--user', identity_fakes.user_name, '--user',
'--project', identity_fakes.project_name, identity_fakes.user_name,
'--role-domain', identity_fakes.domain_name, '--project',
identity_fakes.project_name,
'--role-domain',
identity_fakes.domain_name,
identity_fakes.ROLE_2['name'], identity_fakes.ROLE_2['name'],
] ]
if self._is_inheritance_testcase(): if self._is_inheritance_testcase():
@ -337,8 +343,7 @@ class TestRoleAdd(TestRole):
} }
# RoleManager.grant(role, user=, group=, domain=, project=) # RoleManager.grant(role, user=, group=, domain=, project=)
self.roles_mock.grant.assert_called_with( self.roles_mock.grant.assert_called_with(
identity_fakes.ROLE_2['id'], identity_fakes.ROLE_2['id'], **kwargs
**kwargs
) )
self.assertIsNone(result) self.assertIsNone(result)
@ -355,8 +360,9 @@ class TestRoleAdd(TestRole):
('inherited', False), ('inherited', False),
] ]
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
self.assertRaises(exceptions.CommandError, self.assertRaises(
self.cmd.take_action, parsed_args) exceptions.CommandError, self.cmd.take_action, parsed_args
)
class TestRoleAddInherited(TestRoleAdd, TestRoleInherited): class TestRoleAddInherited(TestRoleAdd, TestRoleInherited):
@ -364,7 +370,6 @@ class TestRoleAddInherited(TestRoleAdd, TestRoleInherited):
class TestRoleCreate(TestRole): class TestRoleCreate(TestRole):
def setUp(self): def setUp(self):
super(TestRoleCreate, self).setUp() super(TestRoleCreate, self).setUp()
@ -406,9 +411,7 @@ class TestRoleCreate(TestRole):
} }
# RoleManager.create(name=, domain=) # RoleManager.create(name=, domain=)
self.roles_mock.create.assert_called_with( self.roles_mock.create.assert_called_with(**kwargs)
**kwargs
)
collist = ('domain', 'id', 'name') collist = ('domain', 'id', 'name')
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
@ -420,7 +423,6 @@ class TestRoleCreate(TestRole):
self.assertEqual(datalist, data) self.assertEqual(datalist, data)
def test_role_create_with_domain(self): def test_role_create_with_domain(self):
self.roles_mock.create.return_value = fakes.FakeResource( self.roles_mock.create.return_value = fakes.FakeResource(
None, None,
copy.deepcopy(identity_fakes.ROLE_2), copy.deepcopy(identity_fakes.ROLE_2),
@ -428,7 +430,8 @@ class TestRoleCreate(TestRole):
) )
arglist = [ arglist = [
'--domain', identity_fakes.domain_name, '--domain',
identity_fakes.domain_name,
identity_fakes.ROLE_2['name'], identity_fakes.ROLE_2['name'],
] ]
verifylist = [ verifylist = [
@ -451,9 +454,7 @@ class TestRoleCreate(TestRole):
} }
# RoleManager.create(name=, domain=) # RoleManager.create(name=, domain=)
self.roles_mock.create.assert_called_with( self.roles_mock.create.assert_called_with(**kwargs)
**kwargs
)
collist = ('domain', 'id', 'name') collist = ('domain', 'id', 'name')
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
@ -465,14 +466,14 @@ class TestRoleCreate(TestRole):
self.assertEqual(datalist, data) self.assertEqual(datalist, data)
def test_role_create_with_description(self): def test_role_create_with_description(self):
self.roles_mock.create.return_value = fakes.FakeResource( self.roles_mock.create.return_value = fakes.FakeResource(
None, None,
copy.deepcopy(identity_fakes.ROLE_2), copy.deepcopy(identity_fakes.ROLE_2),
loaded=True, loaded=True,
) )
arglist = [ arglist = [
'--description', identity_fakes.role_description, '--description',
identity_fakes.role_description,
identity_fakes.ROLE_2['name'], identity_fakes.ROLE_2['name'],
] ]
verifylist = [ verifylist = [
@ -495,9 +496,7 @@ class TestRoleCreate(TestRole):
} }
# RoleManager.create(name=, domain=) # RoleManager.create(name=, domain=)
self.roles_mock.create.assert_called_with( self.roles_mock.create.assert_called_with(**kwargs)
**kwargs
)
collist = ('domain', 'id', 'name') collist = ('domain', 'id', 'name')
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
@ -509,7 +508,6 @@ class TestRoleCreate(TestRole):
self.assertEqual(datalist, data) self.assertEqual(datalist, data)
def test_role_create_with_immutable_option(self): def test_role_create_with_immutable_option(self):
self.roles_mock.create.return_value = fakes.FakeResource( self.roles_mock.create.return_value = fakes.FakeResource(
None, None,
copy.deepcopy(identity_fakes.ROLE_2), copy.deepcopy(identity_fakes.ROLE_2),
@ -532,7 +530,6 @@ class TestRoleCreate(TestRole):
# Set expected values # Set expected values
kwargs = { kwargs = {
'options': {'immutable': True}, 'options': {'immutable': True},
'description': None, 'description': None,
'name': identity_fakes.ROLE_2['name'], 'name': identity_fakes.ROLE_2['name'],
@ -540,9 +537,7 @@ class TestRoleCreate(TestRole):
} }
# RoleManager.create(name=, domain=) # RoleManager.create(name=, domain=)
self.roles_mock.create.assert_called_with( self.roles_mock.create.assert_called_with(**kwargs)
**kwargs
)
collist = ('domain', 'id', 'name') collist = ('domain', 'id', 'name')
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
@ -554,7 +549,6 @@ class TestRoleCreate(TestRole):
self.assertEqual(datalist, data) self.assertEqual(datalist, data)
def test_role_create_with_no_immutable_option(self): def test_role_create_with_no_immutable_option(self):
self.roles_mock.create.return_value = fakes.FakeResource( self.roles_mock.create.return_value = fakes.FakeResource(
None, None,
copy.deepcopy(identity_fakes.ROLE_2), copy.deepcopy(identity_fakes.ROLE_2),
@ -577,7 +571,6 @@ class TestRoleCreate(TestRole):
# Set expected values # Set expected values
kwargs = { kwargs = {
'options': {'immutable': False}, 'options': {'immutable': False},
'description': None, 'description': None,
'name': identity_fakes.ROLE_2['name'], 'name': identity_fakes.ROLE_2['name'],
@ -585,9 +578,7 @@ class TestRoleCreate(TestRole):
} }
# RoleManager.create(name=, domain=) # RoleManager.create(name=, domain=)
self.roles_mock.create.assert_called_with( self.roles_mock.create.assert_called_with(**kwargs)
**kwargs
)
collist = ('domain', 'id', 'name') collist = ('domain', 'id', 'name')
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
@ -600,7 +591,6 @@ class TestRoleCreate(TestRole):
class TestRoleDelete(TestRole): class TestRoleDelete(TestRole):
def setUp(self): def setUp(self):
super(TestRoleDelete, self).setUp() super(TestRoleDelete, self).setUp()
@ -639,7 +629,8 @@ class TestRoleDelete(TestRole):
self.roles_mock.delete.return_value = None self.roles_mock.delete.return_value = None
arglist = [ arglist = [
'--domain', identity_fakes.domain_name, '--domain',
identity_fakes.domain_name,
identity_fakes.ROLE_2['name'], identity_fakes.ROLE_2['name'],
] ]
verifylist = [ verifylist = [
@ -657,8 +648,10 @@ class TestRoleDelete(TestRole):
@mock.patch.object(utils, 'find_resource') @mock.patch.object(utils, 'find_resource')
def test_delete_multi_roles_with_exception(self, find_mock): def test_delete_multi_roles_with_exception(self, find_mock):
find_mock.side_effect = [self.roles_mock.get.return_value, find_mock.side_effect = [
exceptions.CommandError] self.roles_mock.get.return_value,
exceptions.CommandError,
]
arglist = [ arglist = [
identity_fakes.role_name, identity_fakes.role_name,
'unexist_role', 'unexist_role',
@ -672,22 +665,20 @@ class TestRoleDelete(TestRole):
self.cmd.take_action(parsed_args) self.cmd.take_action(parsed_args)
self.fail('CommandError should be raised.') self.fail('CommandError should be raised.')
except exceptions.CommandError as e: except exceptions.CommandError as e:
self.assertEqual('1 of 2 roles failed to delete.', self.assertEqual('1 of 2 roles failed to delete.', str(e))
str(e))
find_mock.assert_any_call(self.roles_mock, find_mock.assert_any_call(
identity_fakes.role_name, self.roles_mock, identity_fakes.role_name, domain_id=None
domain_id=None) )
find_mock.assert_any_call(self.roles_mock, find_mock.assert_any_call(
'unexist_role', self.roles_mock, 'unexist_role', domain_id=None
domain_id=None) )
self.assertEqual(2, find_mock.call_count) self.assertEqual(2, find_mock.call_count)
self.roles_mock.delete.assert_called_once_with(identity_fakes.role_id) self.roles_mock.delete.assert_called_once_with(identity_fakes.role_id)
class TestRoleList(TestRole): class TestRoleList(TestRole):
columns = ( columns = (
'ID', 'ID',
'Name', 'Name',
@ -743,7 +734,8 @@ class TestRoleList(TestRole):
), ),
] ]
arglist = [ arglist = [
'--domain', identity_fakes.domain_name, '--domain',
identity_fakes.domain_name,
] ]
verifylist = [ verifylist = [
('domain', identity_fakes.domain_name), ('domain', identity_fakes.domain_name),
@ -756,26 +748,23 @@ class TestRoleList(TestRole):
columns, data = self.cmd.take_action(parsed_args) columns, data = self.cmd.take_action(parsed_args)
# Set expected values # Set expected values
kwargs = { kwargs = {'domain_id': identity_fakes.domain_id}
'domain_id': identity_fakes.domain_id
}
# RoleManager.list(user=, group=, domain=, project=, **kwargs) # RoleManager.list(user=, group=, domain=, project=, **kwargs)
self.roles_mock.list.assert_called_with( self.roles_mock.list.assert_called_with(**kwargs)
**kwargs
)
collist = ('ID', 'Name', 'Domain') collist = ('ID', 'Name', 'Domain')
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
datalist = (( datalist = (
(
identity_fakes.ROLE_2['id'], identity_fakes.ROLE_2['id'],
identity_fakes.ROLE_2['name'], identity_fakes.ROLE_2['name'],
identity_fakes.domain_name, identity_fakes.domain_name,
), ) ),
)
self.assertEqual(datalist, tuple(data)) self.assertEqual(datalist, tuple(data))
class TestRoleRemove(TestRole): class TestRoleRemove(TestRole):
def setUp(self): def setUp(self):
super(TestRoleRemove, self).setUp() super(TestRoleRemove, self).setUp()
@ -815,9 +804,11 @@ class TestRoleRemove(TestRole):
def test_role_remove_user_system(self): def test_role_remove_user_system(self):
arglist = [ arglist = [
'--user', identity_fakes.user_name, '--user',
'--system', 'all', identity_fakes.user_name,
identity_fakes.role_name '--system',
'all',
identity_fakes.role_name,
] ]
if self._is_inheritance_testcase(): if self._is_inheritance_testcase():
arglist.append('--inherited') arglist.append('--inherited')
@ -842,8 +833,7 @@ class TestRoleRemove(TestRole):
} }
# RoleManager.revoke(role, user=, group=, domain=, project=) # RoleManager.revoke(role, user=, group=, domain=, project=)
self.roles_mock.revoke.assert_called_with( self.roles_mock.revoke.assert_called_with(
identity_fakes.role_id, identity_fakes.role_id, **kwargs
**kwargs
) )
self.assertIsNone(result) self.assertIsNone(result)
@ -856,9 +846,11 @@ class TestRoleRemove(TestRole):
find_mock.side_effect = exceptions.CommandError find_mock.side_effect = exceptions.CommandError
arglist = [ arglist = [
'--user', identity_fakes.user_id, '--user',
'--system', 'all', identity_fakes.user_id,
identity_fakes.role_name '--system',
'all',
identity_fakes.role_name,
] ]
if self._is_inheritance_testcase(): if self._is_inheritance_testcase():
arglist.append('--inherited') arglist.append('--inherited')
@ -883,15 +875,16 @@ class TestRoleRemove(TestRole):
} }
# RoleManager.revoke(role, user=, group=, domain=, project=) # RoleManager.revoke(role, user=, group=, domain=, project=)
self.roles_mock.revoke.assert_called_with( self.roles_mock.revoke.assert_called_with(
identity_fakes.role_id, identity_fakes.role_id, **kwargs
**kwargs
) )
self.assertIsNone(result) self.assertIsNone(result)
def test_role_remove_user_domain(self): def test_role_remove_user_domain(self):
arglist = [ arglist = [
'--user', identity_fakes.user_name, '--user',
'--domain', identity_fakes.domain_name, identity_fakes.user_name,
'--domain',
identity_fakes.domain_name,
identity_fakes.role_name, identity_fakes.role_name,
] ]
if self._is_inheritance_testcase(): if self._is_inheritance_testcase():
@ -916,8 +909,7 @@ class TestRoleRemove(TestRole):
} }
# RoleManager.revoke(role, user=, group=, domain=, project=) # RoleManager.revoke(role, user=, group=, domain=, project=)
self.roles_mock.revoke.assert_called_with( self.roles_mock.revoke.assert_called_with(
identity_fakes.role_id, identity_fakes.role_id, **kwargs
**kwargs
) )
self.assertIsNone(result) self.assertIsNone(result)
@ -929,9 +921,11 @@ class TestRoleRemove(TestRole):
find_mock.side_effect = exceptions.CommandError find_mock.side_effect = exceptions.CommandError
arglist = [ arglist = [
'--user', identity_fakes.user_id, '--user',
'--domain', identity_fakes.domain_name, identity_fakes.user_id,
identity_fakes.role_name '--domain',
identity_fakes.domain_name,
identity_fakes.role_name,
] ]
if self._is_inheritance_testcase(): if self._is_inheritance_testcase():
arglist.append('--inherited') arglist.append('--inherited')
@ -956,15 +950,16 @@ class TestRoleRemove(TestRole):
} }
# RoleManager.revoke(role, user=, group=, domain=, project=) # RoleManager.revoke(role, user=, group=, domain=, project=)
self.roles_mock.revoke.assert_called_with( self.roles_mock.revoke.assert_called_with(
identity_fakes.role_id, identity_fakes.role_id, **kwargs
**kwargs
) )
self.assertIsNone(result) self.assertIsNone(result)
def test_role_remove_user_project(self): def test_role_remove_user_project(self):
arglist = [ arglist = [
'--user', identity_fakes.user_name, '--user',
'--project', identity_fakes.project_name, identity_fakes.user_name,
'--project',
identity_fakes.project_name,
identity_fakes.role_name, identity_fakes.role_name,
] ]
if self._is_inheritance_testcase(): if self._is_inheritance_testcase():
@ -989,8 +984,7 @@ class TestRoleRemove(TestRole):
} }
# RoleManager.revoke(role, user=, group=, domain=, project=) # RoleManager.revoke(role, user=, group=, domain=, project=)
self.roles_mock.revoke.assert_called_with( self.roles_mock.revoke.assert_called_with(
identity_fakes.role_id, identity_fakes.role_id, **kwargs
**kwargs
) )
self.assertIsNone(result) self.assertIsNone(result)
@ -1002,9 +996,11 @@ class TestRoleRemove(TestRole):
find_mock.side_effect = exceptions.CommandError find_mock.side_effect = exceptions.CommandError
arglist = [ arglist = [
'--user', identity_fakes.user_id, '--user',
'--project', identity_fakes.project_name, identity_fakes.user_id,
identity_fakes.role_name '--project',
identity_fakes.project_name,
identity_fakes.role_name,
] ]
if self._is_inheritance_testcase(): if self._is_inheritance_testcase():
arglist.append('--inherited') arglist.append('--inherited')
@ -1029,15 +1025,16 @@ class TestRoleRemove(TestRole):
} }
# RoleManager.revoke(role, user=, group=, domain=, project=) # RoleManager.revoke(role, user=, group=, domain=, project=)
self.roles_mock.revoke.assert_called_with( self.roles_mock.revoke.assert_called_with(
identity_fakes.role_id, identity_fakes.role_id, **kwargs
**kwargs
) )
self.assertIsNone(result) self.assertIsNone(result)
def test_role_remove_group_system(self): def test_role_remove_group_system(self):
arglist = [ arglist = [
'--group', identity_fakes.group_name, '--group',
'--system', 'all', identity_fakes.group_name,
'--system',
'all',
identity_fakes.role_name, identity_fakes.role_name,
] ]
if self._is_inheritance_testcase(): if self._is_inheritance_testcase():
@ -1064,8 +1061,7 @@ class TestRoleRemove(TestRole):
} }
# RoleManager.revoke(role, user=, group=, domain=, project=) # RoleManager.revoke(role, user=, group=, domain=, project=)
self.roles_mock.revoke.assert_called_with( self.roles_mock.revoke.assert_called_with(
identity_fakes.role_id, identity_fakes.role_id, **kwargs
**kwargs
) )
self.assertIsNone(result) self.assertIsNone(result)
@ -1077,9 +1073,11 @@ class TestRoleRemove(TestRole):
find_mock.side_effect = exceptions.CommandError find_mock.side_effect = exceptions.CommandError
arglist = [ arglist = [
'--group', identity_fakes.group_id, '--group',
'--system', 'all', identity_fakes.group_id,
identity_fakes.role_name '--system',
'all',
identity_fakes.role_name,
] ]
if self._is_inheritance_testcase(): if self._is_inheritance_testcase():
arglist.append('--inherited') arglist.append('--inherited')
@ -1104,15 +1102,16 @@ class TestRoleRemove(TestRole):
} }
# RoleManager.revoke(role, user=, group=, domain=, project=) # RoleManager.revoke(role, user=, group=, domain=, project=)
self.roles_mock.revoke.assert_called_with( self.roles_mock.revoke.assert_called_with(
identity_fakes.role_id, identity_fakes.role_id, **kwargs
**kwargs
) )
self.assertIsNone(result) self.assertIsNone(result)
def test_role_remove_group_domain(self): def test_role_remove_group_domain(self):
arglist = [ arglist = [
'--group', identity_fakes.group_name, '--group',
'--domain', identity_fakes.domain_name, identity_fakes.group_name,
'--domain',
identity_fakes.domain_name,
identity_fakes.role_name, identity_fakes.role_name,
] ]
if self._is_inheritance_testcase(): if self._is_inheritance_testcase():
@ -1138,8 +1137,7 @@ class TestRoleRemove(TestRole):
} }
# RoleManager.revoke(role, user=, group=, domain=, project=) # RoleManager.revoke(role, user=, group=, domain=, project=)
self.roles_mock.revoke.assert_called_with( self.roles_mock.revoke.assert_called_with(
identity_fakes.role_id, identity_fakes.role_id, **kwargs
**kwargs
) )
self.assertIsNone(result) self.assertIsNone(result)
@ -1151,9 +1149,11 @@ class TestRoleRemove(TestRole):
find_mock.side_effect = exceptions.CommandError find_mock.side_effect = exceptions.CommandError
arglist = [ arglist = [
'--group', identity_fakes.group_id, '--group',
'--domain', identity_fakes.domain_name, identity_fakes.group_id,
identity_fakes.role_name '--domain',
identity_fakes.domain_name,
identity_fakes.role_name,
] ]
if self._is_inheritance_testcase(): if self._is_inheritance_testcase():
arglist.append('--inherited') arglist.append('--inherited')
@ -1178,15 +1178,16 @@ class TestRoleRemove(TestRole):
} }
# RoleManager.revoke(role, user=, group=, domain=, project=) # RoleManager.revoke(role, user=, group=, domain=, project=)
self.roles_mock.revoke.assert_called_with( self.roles_mock.revoke.assert_called_with(
identity_fakes.role_id, identity_fakes.role_id, **kwargs
**kwargs
) )
self.assertIsNone(result) self.assertIsNone(result)
def test_role_remove_group_project(self): def test_role_remove_group_project(self):
arglist = [ arglist = [
'--group', identity_fakes.group_name, '--group',
'--project', identity_fakes.project_name, identity_fakes.group_name,
'--project',
identity_fakes.project_name,
identity_fakes.role_name, identity_fakes.role_name,
] ]
if self._is_inheritance_testcase(): if self._is_inheritance_testcase():
@ -1211,8 +1212,7 @@ class TestRoleRemove(TestRole):
} }
# RoleManager.revoke(role, user=, group=, domain=, project=) # RoleManager.revoke(role, user=, group=, domain=, project=)
self.roles_mock.revoke.assert_called_with( self.roles_mock.revoke.assert_called_with(
identity_fakes.role_id, identity_fakes.role_id, **kwargs
**kwargs
) )
self.assertIsNone(result) self.assertIsNone(result)
@ -1224,9 +1224,11 @@ class TestRoleRemove(TestRole):
find_mock.side_effect = exceptions.CommandError find_mock.side_effect = exceptions.CommandError
arglist = [ arglist = [
'--group', identity_fakes.group_id, '--group',
'--project', identity_fakes.project_name, identity_fakes.group_id,
identity_fakes.role_name '--project',
identity_fakes.project_name,
identity_fakes.role_name,
] ]
if self._is_inheritance_testcase(): if self._is_inheritance_testcase():
arglist.append('--inherited') arglist.append('--inherited')
@ -1251,8 +1253,7 @@ class TestRoleRemove(TestRole):
} }
# RoleManager.revoke(role, user=, group=, domain=, project=) # RoleManager.revoke(role, user=, group=, domain=, project=)
self.roles_mock.revoke.assert_called_with( self.roles_mock.revoke.assert_called_with(
identity_fakes.role_id, identity_fakes.role_id, **kwargs
**kwargs
) )
self.assertIsNone(result) self.assertIsNone(result)
@ -1263,8 +1264,10 @@ class TestRoleRemove(TestRole):
loaded=True, loaded=True,
) )
arglist = [ arglist = [
'--group', identity_fakes.group_name, '--group',
'--domain', identity_fakes.domain_name, identity_fakes.group_name,
'--domain',
identity_fakes.domain_name,
identity_fakes.ROLE_2['name'], identity_fakes.ROLE_2['name'],
] ]
if self._is_inheritance_testcase(): if self._is_inheritance_testcase():
@ -1289,8 +1292,7 @@ class TestRoleRemove(TestRole):
} }
# RoleManager.revoke(role, user=, group=, domain=, project=) # RoleManager.revoke(role, user=, group=, domain=, project=)
self.roles_mock.revoke.assert_called_with( self.roles_mock.revoke.assert_called_with(
identity_fakes.ROLE_2['id'], identity_fakes.ROLE_2['id'], **kwargs
**kwargs
) )
self.assertIsNone(result) self.assertIsNone(result)
@ -1307,12 +1309,12 @@ class TestRoleRemove(TestRole):
('inherited', False), ('inherited', False),
] ]
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
self.assertRaises(exceptions.CommandError, self.assertRaises(
self.cmd.take_action, parsed_args) exceptions.CommandError, self.cmd.take_action, parsed_args
)
class TestRoleSet(TestRole): class TestRoleSet(TestRole):
def setUp(self): def setUp(self):
super(TestRoleSet, self).setUp() super(TestRoleSet, self).setUp()
@ -1328,7 +1330,8 @@ class TestRoleSet(TestRole):
def test_role_set_no_options(self): def test_role_set_no_options(self):
arglist = [ arglist = [
'--name', 'over', '--name',
'over',
identity_fakes.role_name, identity_fakes.role_name,
] ]
verifylist = [ verifylist = [
@ -1347,8 +1350,7 @@ class TestRoleSet(TestRole):
} }
# RoleManager.update(role, name=) # RoleManager.update(role, name=)
self.roles_mock.update.assert_called_with( self.roles_mock.update.assert_called_with(
identity_fakes.role_id, identity_fakes.role_id, **kwargs
**kwargs
) )
self.assertIsNone(result) self.assertIsNone(result)
@ -1359,8 +1361,10 @@ class TestRoleSet(TestRole):
loaded=True, loaded=True,
) )
arglist = [ arglist = [
'--name', 'over', '--name',
'--domain', identity_fakes.domain_name, 'over',
'--domain',
identity_fakes.domain_name,
identity_fakes.ROLE_2['name'], identity_fakes.ROLE_2['name'],
] ]
verifylist = [ verifylist = [
@ -1380,8 +1384,7 @@ class TestRoleSet(TestRole):
} }
# RoleManager.update(role, name=) # RoleManager.update(role, name=)
self.roles_mock.update.assert_called_with( self.roles_mock.update.assert_called_with(
identity_fakes.ROLE_2['id'], identity_fakes.ROLE_2['id'], **kwargs
**kwargs
) )
self.assertIsNone(result) self.assertIsNone(result)
@ -1392,8 +1395,10 @@ class TestRoleSet(TestRole):
loaded=True, loaded=True,
) )
arglist = [ arglist = [
'--name', 'over', '--name',
'--description', identity_fakes.role_description, 'over',
'--description',
identity_fakes.role_description,
identity_fakes.ROLE_2['name'], identity_fakes.ROLE_2['name'],
] ]
verifylist = [ verifylist = [
@ -1413,8 +1418,7 @@ class TestRoleSet(TestRole):
} }
# RoleManager.update(role, name=) # RoleManager.update(role, name=)
self.roles_mock.update.assert_called_with( self.roles_mock.update.assert_called_with(
identity_fakes.ROLE_2['id'], identity_fakes.ROLE_2['id'], **kwargs
**kwargs
) )
self.assertIsNone(result) self.assertIsNone(result)
@ -1425,7 +1429,8 @@ class TestRoleSet(TestRole):
loaded=True, loaded=True,
) )
arglist = [ arglist = [
'--name', 'over', '--name',
'over',
'--immutable', '--immutable',
identity_fakes.ROLE_2['name'], identity_fakes.ROLE_2['name'],
] ]
@ -1446,8 +1451,7 @@ class TestRoleSet(TestRole):
} }
# RoleManager.update(role, name=) # RoleManager.update(role, name=)
self.roles_mock.update.assert_called_with( self.roles_mock.update.assert_called_with(
identity_fakes.ROLE_2['id'], identity_fakes.ROLE_2['id'], **kwargs
**kwargs
) )
self.assertIsNone(result) self.assertIsNone(result)
@ -1458,7 +1462,8 @@ class TestRoleSet(TestRole):
loaded=True, loaded=True,
) )
arglist = [ arglist = [
'--name', 'over', '--name',
'over',
'--no-immutable', '--no-immutable',
identity_fakes.ROLE_2['name'], identity_fakes.ROLE_2['name'],
] ]
@ -1479,14 +1484,12 @@ class TestRoleSet(TestRole):
} }
# RoleManager.update(role, name=) # RoleManager.update(role, name=)
self.roles_mock.update.assert_called_with( self.roles_mock.update.assert_called_with(
identity_fakes.ROLE_2['id'], identity_fakes.ROLE_2['id'], **kwargs
**kwargs
) )
self.assertIsNone(result) self.assertIsNone(result)
class TestRoleShow(TestRole): class TestRoleShow(TestRole):
def setUp(self): def setUp(self):
super(TestRoleShow, self).setUp() super(TestRoleShow, self).setUp()
@ -1534,7 +1537,8 @@ class TestRoleShow(TestRole):
loaded=True, loaded=True,
) )
arglist = [ arglist = [
'--domain', identity_fakes.domain_name, '--domain',
identity_fakes.domain_name,
identity_fakes.ROLE_2['name'], identity_fakes.ROLE_2['name'],
] ]
verifylist = [ verifylist = [

View File

@ -20,13 +20,11 @@ from openstackclient.tests.unit.identity.v3 import fakes as identity_fakes
class TestRoleAssignment(identity_fakes.TestIdentityv3): class TestRoleAssignment(identity_fakes.TestIdentityv3):
def setUp(self): def setUp(self):
super(TestRoleAssignment, self).setUp() super(TestRoleAssignment, self).setUp()
class TestRoleAssignmentList(TestRoleAssignment): class TestRoleAssignmentList(TestRoleAssignment):
columns = ( columns = (
'Role', 'Role',
'User', 'User',
@ -60,26 +58,28 @@ class TestRoleAssignmentList(TestRoleAssignment):
self.roles_mock = self.app.client_manager.identity.roles self.roles_mock = self.app.client_manager.identity.roles
self.roles_mock.reset_mock() self.roles_mock.reset_mock()
self.role_assignments_mock = self.app.client_manager.identity.\ self.role_assignments_mock = (
role_assignments self.app.client_manager.identity.role_assignments
)
self.role_assignments_mock.reset_mock() self.role_assignments_mock.reset_mock()
# Get the command object to test # Get the command object to test
self.cmd = role_assignment.ListRoleAssignment(self.app, None) self.cmd = role_assignment.ListRoleAssignment(self.app, None)
def test_role_assignment_list_no_filters(self): def test_role_assignment_list_no_filters(self):
self.role_assignments_mock.list.return_value = [ self.role_assignments_mock.list.return_value = [
fakes.FakeResource( fakes.FakeResource(
None, None,
copy.deepcopy( copy.deepcopy(
identity_fakes.ASSIGNMENT_WITH_PROJECT_ID_AND_USER_ID), identity_fakes.ASSIGNMENT_WITH_PROJECT_ID_AND_USER_ID
),
loaded=True, loaded=True,
), ),
fakes.FakeResource( fakes.FakeResource(
None, None,
copy.deepcopy( copy.deepcopy(
identity_fakes.ASSIGNMENT_WITH_PROJECT_ID_AND_GROUP_ID), identity_fakes.ASSIGNMENT_WITH_PROJECT_ID_AND_GROUP_ID
),
loaded=True, loaded=True,
), ),
] ]
@ -102,47 +102,51 @@ class TestRoleAssignmentList(TestRoleAssignment):
user=None, user=None,
project=None, project=None,
os_inherit_extension_inherited_to=None, os_inherit_extension_inherited_to=None,
include_names=False) include_names=False,
)
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
datalist = (( datalist = (
(
identity_fakes.role_id, identity_fakes.role_id,
identity_fakes.user_id, identity_fakes.user_id,
'', '',
identity_fakes.project_id, identity_fakes.project_id,
'', '',
'', '',
False False,
), (identity_fakes.role_id, ),
(
identity_fakes.role_id,
'', '',
identity_fakes.group_id, identity_fakes.group_id,
identity_fakes.project_id, identity_fakes.project_id,
'', '',
'', '',
False False,
),) ),
)
self.assertEqual(datalist, tuple(data)) self.assertEqual(datalist, tuple(data))
def test_role_assignment_list_user(self): def test_role_assignment_list_user(self):
self.role_assignments_mock.list.return_value = [ self.role_assignments_mock.list.return_value = [
fakes.FakeResource( fakes.FakeResource(
None, None,
copy.deepcopy( copy.deepcopy(
identity_fakes.ASSIGNMENT_WITH_DOMAIN_ID_AND_USER_ID), identity_fakes.ASSIGNMENT_WITH_DOMAIN_ID_AND_USER_ID
),
loaded=True, loaded=True,
), ),
fakes.FakeResource( fakes.FakeResource(
None, None,
copy.deepcopy( copy.deepcopy(
identity_fakes.ASSIGNMENT_WITH_PROJECT_ID_AND_USER_ID), identity_fakes.ASSIGNMENT_WITH_PROJECT_ID_AND_USER_ID
),
loaded=True, loaded=True,
), ),
] ]
arglist = [ arglist = ['--user', identity_fakes.user_name]
'--user', identity_fakes.user_name
]
verifylist = [ verifylist = [
('user', identity_fakes.user_name), ('user', identity_fakes.user_name),
('group', None), ('group', None),
@ -170,47 +174,51 @@ class TestRoleAssignmentList(TestRoleAssignment):
role=None, role=None,
effective=False, effective=False,
os_inherit_extension_inherited_to=None, os_inherit_extension_inherited_to=None,
include_names=False) include_names=False,
)
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
datalist = (( datalist = (
(
identity_fakes.role_id, identity_fakes.role_id,
identity_fakes.user_id, identity_fakes.user_id,
'', '',
'', '',
identity_fakes.domain_id, identity_fakes.domain_id,
'', '',
False False,
), (identity_fakes.role_id, ),
(
identity_fakes.role_id,
identity_fakes.user_id, identity_fakes.user_id,
'', '',
identity_fakes.project_id, identity_fakes.project_id,
'', '',
'', '',
False False,
),) ),
)
self.assertEqual(datalist, tuple(data)) self.assertEqual(datalist, tuple(data))
def test_role_assignment_list_group(self): def test_role_assignment_list_group(self):
self.role_assignments_mock.list.return_value = [ self.role_assignments_mock.list.return_value = [
fakes.FakeResource( fakes.FakeResource(
None, None,
copy.deepcopy( copy.deepcopy(
identity_fakes.ASSIGNMENT_WITH_DOMAIN_ID_AND_GROUP_ID), identity_fakes.ASSIGNMENT_WITH_DOMAIN_ID_AND_GROUP_ID
),
loaded=True, loaded=True,
), ),
fakes.FakeResource( fakes.FakeResource(
None, None,
copy.deepcopy( copy.deepcopy(
identity_fakes.ASSIGNMENT_WITH_PROJECT_ID_AND_GROUP_ID), identity_fakes.ASSIGNMENT_WITH_PROJECT_ID_AND_GROUP_ID
),
loaded=True, loaded=True,
), ),
] ]
arglist = [ arglist = ['--group', identity_fakes.group_name]
'--group', identity_fakes.group_name
]
verifylist = [ verifylist = [
('user', None), ('user', None),
('group', identity_fakes.group_name), ('group', identity_fakes.group_name),
@ -238,47 +246,51 @@ class TestRoleAssignmentList(TestRoleAssignment):
role=None, role=None,
user=None, user=None,
os_inherit_extension_inherited_to=None, os_inherit_extension_inherited_to=None,
include_names=False) include_names=False,
)
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
datalist = (( datalist = (
(
identity_fakes.role_id, identity_fakes.role_id,
'', '',
identity_fakes.group_id, identity_fakes.group_id,
'', '',
identity_fakes.domain_id, identity_fakes.domain_id,
'', '',
False False,
), (identity_fakes.role_id, ),
(
identity_fakes.role_id,
'', '',
identity_fakes.group_id, identity_fakes.group_id,
identity_fakes.project_id, identity_fakes.project_id,
'', '',
'', '',
False False,
),) ),
)
self.assertEqual(datalist, tuple(data)) self.assertEqual(datalist, tuple(data))
def test_role_assignment_list_domain(self): def test_role_assignment_list_domain(self):
self.role_assignments_mock.list.return_value = [ self.role_assignments_mock.list.return_value = [
fakes.FakeResource( fakes.FakeResource(
None, None,
copy.deepcopy( copy.deepcopy(
identity_fakes.ASSIGNMENT_WITH_DOMAIN_ID_AND_USER_ID), identity_fakes.ASSIGNMENT_WITH_DOMAIN_ID_AND_USER_ID
),
loaded=True, loaded=True,
), ),
fakes.FakeResource( fakes.FakeResource(
None, None,
copy.deepcopy( copy.deepcopy(
identity_fakes.ASSIGNMENT_WITH_DOMAIN_ID_AND_GROUP_ID), identity_fakes.ASSIGNMENT_WITH_DOMAIN_ID_AND_GROUP_ID
),
loaded=True, loaded=True,
), ),
] ]
arglist = [ arglist = ['--domain', identity_fakes.domain_name]
'--domain', identity_fakes.domain_name
]
verifylist = [ verifylist = [
('user', None), ('user', None),
('group', None), ('group', None),
@ -306,47 +318,51 @@ class TestRoleAssignmentList(TestRoleAssignment):
role=None, role=None,
user=None, user=None,
os_inherit_extension_inherited_to=None, os_inherit_extension_inherited_to=None,
include_names=False) include_names=False,
)
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
datalist = (( datalist = (
(
identity_fakes.role_id, identity_fakes.role_id,
identity_fakes.user_id, identity_fakes.user_id,
'', '',
'', '',
identity_fakes.domain_id, identity_fakes.domain_id,
'', '',
False False,
), (identity_fakes.role_id, ),
(
identity_fakes.role_id,
'', '',
identity_fakes.group_id, identity_fakes.group_id,
'', '',
identity_fakes.domain_id, identity_fakes.domain_id,
'', '',
False False,
),) ),
)
self.assertEqual(datalist, tuple(data)) self.assertEqual(datalist, tuple(data))
def test_role_assignment_list_project(self): def test_role_assignment_list_project(self):
self.role_assignments_mock.list.return_value = [ self.role_assignments_mock.list.return_value = [
fakes.FakeResource( fakes.FakeResource(
None, None,
copy.deepcopy( copy.deepcopy(
identity_fakes.ASSIGNMENT_WITH_PROJECT_ID_AND_USER_ID), identity_fakes.ASSIGNMENT_WITH_PROJECT_ID_AND_USER_ID
),
loaded=True, loaded=True,
), ),
fakes.FakeResource( fakes.FakeResource(
None, None,
copy.deepcopy( copy.deepcopy(
identity_fakes.ASSIGNMENT_WITH_PROJECT_ID_AND_GROUP_ID), identity_fakes.ASSIGNMENT_WITH_PROJECT_ID_AND_GROUP_ID
),
loaded=True, loaded=True,
), ),
] ]
arglist = [ arglist = ['--project', identity_fakes.project_name]
'--project', identity_fakes.project_name
]
verifylist = [ verifylist = [
('user', None), ('user', None),
('group', None), ('group', None),
@ -374,29 +390,33 @@ class TestRoleAssignmentList(TestRoleAssignment):
role=None, role=None,
user=None, user=None,
os_inherit_extension_inherited_to=None, os_inherit_extension_inherited_to=None,
include_names=False) include_names=False,
)
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
datalist = (( datalist = (
(
identity_fakes.role_id, identity_fakes.role_id,
identity_fakes.user_id, identity_fakes.user_id,
'', '',
identity_fakes.project_id, identity_fakes.project_id,
'', '',
'', '',
False False,
), (identity_fakes.role_id, ),
(
identity_fakes.role_id,
'', '',
identity_fakes.group_id, identity_fakes.group_id,
identity_fakes.project_id, identity_fakes.project_id,
'', '',
'', '',
False False,
),) ),
)
self.assertEqual(datalist, tuple(data)) self.assertEqual(datalist, tuple(data))
def test_role_assignment_list_def_creds(self): def test_role_assignment_list_def_creds(self):
auth_ref = self.app.client_manager.auth_ref = mock.Mock() auth_ref = self.app.client_manager.auth_ref = mock.Mock()
auth_ref.project_id.return_value = identity_fakes.project_id auth_ref.project_id.return_value = identity_fakes.project_id
auth_ref.user_id.return_value = identity_fakes.user_id auth_ref.user_id.return_value = identity_fakes.user_id
@ -405,7 +425,8 @@ class TestRoleAssignmentList(TestRoleAssignment):
fakes.FakeResource( fakes.FakeResource(
None, None,
copy.deepcopy( copy.deepcopy(
identity_fakes.ASSIGNMENT_WITH_PROJECT_ID_AND_USER_ID), identity_fakes.ASSIGNMENT_WITH_PROJECT_ID_AND_USER_ID
),
loaded=True, loaded=True,
), ),
] ]
@ -443,33 +464,37 @@ class TestRoleAssignmentList(TestRoleAssignment):
role=None, role=None,
effective=False, effective=False,
os_inherit_extension_inherited_to=None, os_inherit_extension_inherited_to=None,
include_names=False) include_names=False,
)
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
datalist = (( datalist = (
(
identity_fakes.role_id, identity_fakes.role_id,
identity_fakes.user_id, identity_fakes.user_id,
'', '',
identity_fakes.project_id, identity_fakes.project_id,
'', '',
'', '',
False False,
),) ),
)
self.assertEqual(datalist, tuple(data)) self.assertEqual(datalist, tuple(data))
def test_role_assignment_list_effective(self): def test_role_assignment_list_effective(self):
self.role_assignments_mock.list.return_value = [ self.role_assignments_mock.list.return_value = [
fakes.FakeResource( fakes.FakeResource(
None, None,
copy.deepcopy( copy.deepcopy(
identity_fakes.ASSIGNMENT_WITH_PROJECT_ID_AND_USER_ID), identity_fakes.ASSIGNMENT_WITH_PROJECT_ID_AND_USER_ID
),
loaded=True, loaded=True,
), ),
fakes.FakeResource( fakes.FakeResource(
None, None,
copy.deepcopy( copy.deepcopy(
identity_fakes.ASSIGNMENT_WITH_DOMAIN_ID_AND_USER_ID), identity_fakes.ASSIGNMENT_WITH_DOMAIN_ID_AND_USER_ID
),
loaded=True, loaded=True,
), ),
] ]
@ -502,44 +527,42 @@ class TestRoleAssignmentList(TestRoleAssignment):
role=None, role=None,
user=None, user=None,
os_inherit_extension_inherited_to=None, os_inherit_extension_inherited_to=None,
include_names=False) include_names=False,
)
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
datalist = (( datalist = (
(
identity_fakes.role_id, identity_fakes.role_id,
identity_fakes.user_id, identity_fakes.user_id,
'', '',
identity_fakes.project_id, identity_fakes.project_id,
'', '',
'', '',
False False,
), (identity_fakes.role_id, ),
(
identity_fakes.role_id,
identity_fakes.user_id, identity_fakes.user_id,
'', '',
'', '',
identity_fakes.domain_id, identity_fakes.domain_id,
'', '',
False False,
),) ),
)
self.assertEqual(tuple(data), datalist) self.assertEqual(tuple(data), datalist)
def test_role_assignment_list_inherited(self): def test_role_assignment_list_inherited(self):
fake_assignment_a = copy.deepcopy(
identity_fakes.ASSIGNMENT_WITH_PROJECT_ID_AND_USER_ID_INHERITED
)
fake_assignment_b = copy.deepcopy(
identity_fakes.ASSIGNMENT_WITH_DOMAIN_ID_AND_USER_ID_INHERITED
)
self.role_assignments_mock.list.return_value = [ self.role_assignments_mock.list.return_value = [
fakes.FakeResource( fakes.FakeResource(None, fake_assignment_a, loaded=True),
None, fakes.FakeResource(None, fake_assignment_b, loaded=True),
copy.deepcopy(
(identity_fakes.
ASSIGNMENT_WITH_PROJECT_ID_AND_USER_ID_INHERITED)),
loaded=True,
),
fakes.FakeResource(
None,
copy.deepcopy(
(identity_fakes.
ASSIGNMENT_WITH_DOMAIN_ID_AND_USER_ID_INHERITED)),
loaded=True,
),
] ]
arglist = ['--inherited'] arglist = ['--inherited']
@ -570,44 +593,42 @@ class TestRoleAssignmentList(TestRoleAssignment):
role=None, role=None,
user=None, user=None,
os_inherit_extension_inherited_to='projects', os_inherit_extension_inherited_to='projects',
include_names=False) include_names=False,
)
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
datalist = (( datalist = (
(
identity_fakes.role_id, identity_fakes.role_id,
identity_fakes.user_id, identity_fakes.user_id,
'', '',
identity_fakes.project_id, identity_fakes.project_id,
'', '',
'', '',
True True,
), (identity_fakes.role_id, ),
(
identity_fakes.role_id,
identity_fakes.user_id, identity_fakes.user_id,
'', '',
'', '',
identity_fakes.domain_id, identity_fakes.domain_id,
'', '',
True True,
),) ),
)
self.assertEqual(datalist, tuple(data)) self.assertEqual(datalist, tuple(data))
def test_role_assignment_list_include_names(self): def test_role_assignment_list_include_names(self):
fake_role_assignment_a = copy.deepcopy(
identity_fakes.ASSIGNMENT_WITH_PROJECT_ID_AND_USER_ID_INCLUDE_NAMES
)
fake_role_assignment_b = copy.deepcopy(
identity_fakes.ASSIGNMENT_WITH_DOMAIN_ID_AND_USER_ID_INCLUDE_NAMES
)
self.role_assignments_mock.list.return_value = [ self.role_assignments_mock.list.return_value = [
fakes.FakeResource( fakes.FakeResource(None, fake_role_assignment_a, loaded=True),
None, fakes.FakeResource(None, fake_role_assignment_b, loaded=True),
copy.deepcopy(
identity_fakes
.ASSIGNMENT_WITH_PROJECT_ID_AND_USER_ID_INCLUDE_NAMES),
loaded=True,
),
fakes.FakeResource(
None,
copy.deepcopy(
identity_fakes
.ASSIGNMENT_WITH_DOMAIN_ID_AND_USER_ID_INCLUDE_NAMES),
loaded=True,
),
] ]
arglist = ['--names'] arglist = ['--names']
@ -640,46 +661,62 @@ class TestRoleAssignmentList(TestRoleAssignment):
role=None, role=None,
user=None, user=None,
os_inherit_extension_inherited_to=None, os_inherit_extension_inherited_to=None,
include_names=True) include_names=True,
)
collist = ( collist = (
'Role', 'User', 'Group', 'Project', 'Domain', 'System', 'Inherited' 'Role',
'User',
'Group',
'Project',
'Domain',
'System',
'Inherited',
) )
self.assertEqual(columns, collist) self.assertEqual(columns, collist)
datalist1 = (( datalist1 = (
(
identity_fakes.role_name, identity_fakes.role_name,
'@'.join([identity_fakes.user_name, identity_fakes.domain_name]), '@'.join(
[identity_fakes.user_name, identity_fakes.domain_name]
),
'', '',
'@'.join([identity_fakes.project_name, '@'.join(
identity_fakes.domain_name]), [identity_fakes.project_name, identity_fakes.domain_name]
),
'', '',
'', '',
False False,
), (identity_fakes.role_name, ),
'@'.join([identity_fakes.user_name, identity_fakes.domain_name]), (
identity_fakes.role_name,
'@'.join(
[identity_fakes.user_name, identity_fakes.domain_name]
),
'', '',
'', '',
identity_fakes.domain_name, identity_fakes.domain_name,
'', '',
False False,
),) ),
)
self.assertEqual(tuple(data), datalist1) self.assertEqual(tuple(data), datalist1)
def test_role_assignment_list_domain_role(self): def test_role_assignment_list_domain_role(self):
self.role_assignments_mock.list.return_value = [ self.role_assignments_mock.list.return_value = [
fakes.FakeResource( fakes.FakeResource(
None, None,
copy.deepcopy( copy.deepcopy(identity_fakes.ASSIGNMENT_WITH_DOMAIN_ROLE),
identity_fakes.ASSIGNMENT_WITH_DOMAIN_ROLE),
loaded=True, loaded=True,
), ),
] ]
arglist = [ arglist = [
'--role', identity_fakes.ROLE_2['name'], '--role',
'--role-domain', identity_fakes.domain_name identity_fakes.ROLE_2['name'],
'--role-domain',
identity_fakes.domain_name,
] ]
verifylist = [ verifylist = [
('user', None), ('user', None),
@ -708,16 +745,19 @@ class TestRoleAssignmentList(TestRoleAssignment):
role=self.roles_mock.get(), role=self.roles_mock.get(),
effective=False, effective=False,
os_inherit_extension_inherited_to=None, os_inherit_extension_inherited_to=None,
include_names=False) include_names=False,
)
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
datalist = (( datalist = (
(
identity_fakes.ROLE_2['id'], identity_fakes.ROLE_2['id'],
identity_fakes.user_id, identity_fakes.user_id,
'', '',
'', '',
identity_fakes.domain_id, identity_fakes.domain_id,
'', '',
False False,
),) ),
)
self.assertEqual(datalist, tuple(data)) self.assertEqual(datalist, tuple(data))

View File

@ -21,7 +21,6 @@ from openstackclient.tests.unit.identity.v3 import fakes as identity_fakes
class TestService(identity_fakes.TestIdentityv3): class TestService(identity_fakes.TestIdentityv3):
def setUp(self): def setUp(self):
super(TestService, self).setUp() super(TestService, self).setUp()
@ -31,7 +30,6 @@ class TestService(identity_fakes.TestIdentityv3):
class TestServiceCreate(TestService): class TestServiceCreate(TestService):
columns = ( columns = (
'description', 'description',
'enabled', 'enabled',
@ -58,7 +56,8 @@ class TestServiceCreate(TestService):
def test_service_create_name(self): def test_service_create_name(self):
arglist = [ arglist = [
'--name', self.service.name, '--name',
self.service.name,
self.service.type, self.service.type,
] ]
verifylist = [ verifylist = [
@ -88,7 +87,8 @@ class TestServiceCreate(TestService):
def test_service_create_description(self): def test_service_create_description(self):
arglist = [ arglist = [
'--description', self.service.description, '--description',
self.service.description,
self.service.type, self.service.type,
] ]
verifylist = [ verifylist = [
@ -178,7 +178,6 @@ class TestServiceCreate(TestService):
class TestServiceDelete(TestService): class TestServiceDelete(TestService):
service = identity_fakes.FakeService.create_one_service() service = identity_fakes.FakeService.create_one_service()
def setUp(self): def setUp(self):
@ -209,7 +208,6 @@ class TestServiceDelete(TestService):
class TestServiceList(TestService): class TestServiceList(TestService):
service = identity_fakes.FakeService.create_one_service() service = identity_fakes.FakeService.create_one_service()
def setUp(self): def setUp(self):
@ -234,11 +232,13 @@ class TestServiceList(TestService):
collist = ('ID', 'Name', 'Type') collist = ('ID', 'Name', 'Type')
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
datalist = (( datalist = (
(
self.service.id, self.service.id,
self.service.name, self.service.name,
self.service.type, self.service.type,
), ) ),
)
self.assertEqual(datalist, tuple(data)) self.assertEqual(datalist, tuple(data))
def test_service_list_long(self): def test_service_list_long(self):
@ -259,18 +259,19 @@ class TestServiceList(TestService):
collist = ('ID', 'Name', 'Type', 'Description', 'Enabled') collist = ('ID', 'Name', 'Type', 'Description', 'Enabled')
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
datalist = (( datalist = (
(
self.service.id, self.service.id,
self.service.name, self.service.name,
self.service.type, self.service.type,
self.service.description, self.service.description,
True, True,
), ) ),
)
self.assertEqual(datalist, tuple(data)) self.assertEqual(datalist, tuple(data))
class TestServiceSet(TestService): class TestServiceSet(TestService):
service = identity_fakes.FakeService.create_one_service() service = identity_fakes.FakeService.create_one_service()
def setUp(self): def setUp(self):
@ -303,7 +304,8 @@ class TestServiceSet(TestService):
def test_service_set_type(self): def test_service_set_type(self):
arglist = [ arglist = [
'--type', self.service.type, '--type',
self.service.type,
self.service.name, self.service.name,
] ]
verifylist = [ verifylist = [
@ -323,15 +325,13 @@ class TestServiceSet(TestService):
'type': self.service.type, 'type': self.service.type,
} }
# ServiceManager.update(service, name=, type=, enabled=, **kwargs) # ServiceManager.update(service, name=, type=, enabled=, **kwargs)
self.services_mock.update.assert_called_with( self.services_mock.update.assert_called_with(self.service.id, **kwargs)
self.service.id,
**kwargs
)
self.assertIsNone(result) self.assertIsNone(result)
def test_service_set_name(self): def test_service_set_name(self):
arglist = [ arglist = [
'--name', self.service.name, '--name',
self.service.name,
self.service.name, self.service.name,
] ]
verifylist = [ verifylist = [
@ -351,15 +351,13 @@ class TestServiceSet(TestService):
'name': self.service.name, 'name': self.service.name,
} }
# ServiceManager.update(service, name=, type=, enabled=, **kwargs) # ServiceManager.update(service, name=, type=, enabled=, **kwargs)
self.services_mock.update.assert_called_with( self.services_mock.update.assert_called_with(self.service.id, **kwargs)
self.service.id,
**kwargs
)
self.assertIsNone(result) self.assertIsNone(result)
def test_service_set_description(self): def test_service_set_description(self):
arglist = [ arglist = [
'--description', self.service.description, '--description',
self.service.description,
self.service.name, self.service.name,
] ]
verifylist = [ verifylist = [
@ -379,10 +377,7 @@ class TestServiceSet(TestService):
'description': self.service.description, 'description': self.service.description,
} }
# ServiceManager.update(service, name=, type=, enabled=, **kwargs) # ServiceManager.update(service, name=, type=, enabled=, **kwargs)
self.services_mock.update.assert_called_with( self.services_mock.update.assert_called_with(self.service.id, **kwargs)
self.service.id,
**kwargs
)
self.assertIsNone(result) self.assertIsNone(result)
def test_service_set_enable(self): def test_service_set_enable(self):
@ -407,10 +402,7 @@ class TestServiceSet(TestService):
'enabled': True, 'enabled': True,
} }
# ServiceManager.update(service, name=, type=, enabled=, **kwargs) # ServiceManager.update(service, name=, type=, enabled=, **kwargs)
self.services_mock.update.assert_called_with( self.services_mock.update.assert_called_with(self.service.id, **kwargs)
self.service.id,
**kwargs
)
self.assertIsNone(result) self.assertIsNone(result)
def test_service_set_disable(self): def test_service_set_disable(self):
@ -435,15 +427,11 @@ class TestServiceSet(TestService):
'enabled': False, 'enabled': False,
} }
# ServiceManager.update(service, name=, type=, enabled=, **kwargs) # ServiceManager.update(service, name=, type=, enabled=, **kwargs)
self.services_mock.update.assert_called_with( self.services_mock.update.assert_called_with(self.service.id, **kwargs)
self.service.id,
**kwargs
)
self.assertIsNone(result) self.assertIsNone(result)
class TestServiceShow(TestService): class TestServiceShow(TestService):
service = identity_fakes.FakeService.create_one_service() service = identity_fakes.FakeService.create_one_service()
def setUp(self): def setUp(self):
@ -470,9 +458,7 @@ class TestServiceShow(TestService):
columns, data = self.cmd.take_action(parsed_args) columns, data = self.cmd.take_action(parsed_args)
# ServiceManager.get(id) # ServiceManager.get(id)
self.services_mock.find.assert_called_with( self.services_mock.find.assert_called_with(name=self.service.name)
name=self.service.name
)
collist = ('description', 'enabled', 'id', 'name', 'type') collist = ('description', 'enabled', 'id', 'name', 'type')
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
@ -501,4 +487,6 @@ class TestServiceShow(TestService):
except exceptions.CommandError as e: except exceptions.CommandError as e:
self.assertEqual( self.assertEqual(
"Multiple service matches found for 'nounique_service'," "Multiple service matches found for 'nounique_service',"
" use an ID to be more specific.", str(e)) " use an ID to be more specific.",
str(e),
)

View File

@ -20,7 +20,6 @@ from openstackclient.tests.unit.identity.v3 import fakes as service_fakes
class TestServiceProvider(service_fakes.TestFederatedIdentity): class TestServiceProvider(service_fakes.TestFederatedIdentity):
def setUp(self): def setUp(self):
super(TestServiceProvider, self).setUp() super(TestServiceProvider, self).setUp()
@ -30,7 +29,6 @@ class TestServiceProvider(service_fakes.TestFederatedIdentity):
class TestServiceProviderCreate(TestServiceProvider): class TestServiceProviderCreate(TestServiceProvider):
columns = ( columns = (
'auth_url', 'auth_url',
'description', 'description',
@ -43,7 +41,7 @@ class TestServiceProviderCreate(TestServiceProvider):
service_fakes.sp_description, service_fakes.sp_description,
True, True,
service_fakes.sp_id, service_fakes.sp_id,
service_fakes.service_provider_url service_fakes.service_provider_url,
) )
def setUp(self): def setUp(self):
@ -56,15 +54,16 @@ class TestServiceProviderCreate(TestServiceProvider):
def test_create_service_provider_required_options_only(self): def test_create_service_provider_required_options_only(self):
arglist = [ arglist = [
'--auth-url', service_fakes.sp_auth_url, '--auth-url',
'--service-provider-url', service_fakes.service_provider_url, service_fakes.sp_auth_url,
'--service-provider-url',
service_fakes.service_provider_url,
service_fakes.sp_id, service_fakes.sp_id,
] ]
verifylist = [ verifylist = [
('auth_url', service_fakes.sp_auth_url), ('auth_url', service_fakes.sp_auth_url),
('service_provider_url', service_fakes.service_provider_url), ('service_provider_url', service_fakes.service_provider_url),
('service_provider_id', service_fakes.sp_id), ('service_provider_id', service_fakes.sp_id),
] ]
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
columns, data = self.cmd.take_action(parsed_args) columns, data = self.cmd.take_action(parsed_args)
@ -74,23 +73,24 @@ class TestServiceProviderCreate(TestServiceProvider):
'enabled': True, 'enabled': True,
'description': None, 'description': None,
'auth_url': service_fakes.sp_auth_url, 'auth_url': service_fakes.sp_auth_url,
'sp_url': service_fakes.service_provider_url 'sp_url': service_fakes.service_provider_url,
} }
self.service_providers_mock.create.assert_called_with( self.service_providers_mock.create.assert_called_with(
id=service_fakes.sp_id, id=service_fakes.sp_id, **kwargs
**kwargs
) )
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
self.assertEqual(self.datalist, data) self.assertEqual(self.datalist, data)
def test_create_service_provider_description(self): def test_create_service_provider_description(self):
arglist = [ arglist = [
'--description', service_fakes.sp_description, '--description',
'--auth-url', service_fakes.sp_auth_url, service_fakes.sp_description,
'--service-provider-url', service_fakes.service_provider_url, '--auth-url',
service_fakes.sp_auth_url,
'--service-provider-url',
service_fakes.service_provider_url,
service_fakes.sp_id, service_fakes.sp_id,
] ]
verifylist = [ verifylist = [
@ -112,15 +112,13 @@ class TestServiceProviderCreate(TestServiceProvider):
} }
self.service_providers_mock.create.assert_called_with( self.service_providers_mock.create.assert_called_with(
id=service_fakes.sp_id, id=service_fakes.sp_id, **kwargs
**kwargs
) )
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
self.assertEqual(self.datalist, data) self.assertEqual(self.datalist, data)
def test_create_service_provider_disabled(self): def test_create_service_provider_disabled(self):
# Prepare FakeResource object # Prepare FakeResource object
service_provider = copy.deepcopy(service_fakes.SERVICE_PROVIDER) service_provider = copy.deepcopy(service_fakes.SERVICE_PROVIDER)
service_provider['enabled'] = False service_provider['enabled'] = False
@ -130,8 +128,10 @@ class TestServiceProviderCreate(TestServiceProvider):
self.service_providers_mock.create.return_value = resource self.service_providers_mock.create.return_value = resource
arglist = [ arglist = [
'--auth-url', service_fakes.sp_auth_url, '--auth-url',
'--service-provider-url', service_fakes.service_provider_url, service_fakes.sp_auth_url,
'--service-provider-url',
service_fakes.service_provider_url,
'--disable', '--disable',
service_fakes.sp_id, service_fakes.sp_id,
] ]
@ -151,8 +151,7 @@ class TestServiceProviderCreate(TestServiceProvider):
} }
self.service_providers_mock.create.assert_called_with( self.service_providers_mock.create.assert_called_with(
id=service_fakes.sp_id, id=service_fakes.sp_id, **kwargs
**kwargs
) )
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
datalist = ( datalist = (
@ -160,13 +159,12 @@ class TestServiceProviderCreate(TestServiceProvider):
None, None,
False, False,
service_fakes.sp_id, service_fakes.sp_id,
service_fakes.service_provider_url service_fakes.service_provider_url,
) )
self.assertEqual(datalist, data) self.assertEqual(datalist, data)
class TestServiceProviderDelete(TestServiceProvider): class TestServiceProviderDelete(TestServiceProvider):
def setUp(self): def setUp(self):
super(TestServiceProviderDelete, self).setUp() super(TestServiceProviderDelete, self).setUp()
@ -198,7 +196,6 @@ class TestServiceProviderDelete(TestServiceProvider):
class TestServiceProviderList(TestServiceProvider): class TestServiceProviderList(TestServiceProvider):
def setUp(self): def setUp(self):
super(TestServiceProviderList, self).setUp() super(TestServiceProviderList, self).setUp()
@ -232,17 +229,18 @@ class TestServiceProviderList(TestServiceProvider):
collist = ('ID', 'Enabled', 'Description', 'Auth URL') collist = ('ID', 'Enabled', 'Description', 'Auth URL')
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
datalist = (( datalist = (
(
service_fakes.sp_id, service_fakes.sp_id,
True, True,
service_fakes.sp_description, service_fakes.sp_description,
service_fakes.sp_auth_url service_fakes.sp_auth_url,
), ) ),
)
self.assertEqual(tuple(data), datalist) self.assertEqual(tuple(data), datalist)
class TestServiceProviderSet(TestServiceProvider): class TestServiceProviderSet(TestServiceProvider):
columns = ( columns = (
'auth_url', 'auth_url',
'description', 'description',
@ -272,16 +270,13 @@ class TestServiceProviderSet(TestServiceProvider):
"""Prepare fake return objects before the test is executed""" """Prepare fake return objects before the test is executed"""
updated_sp = copy.deepcopy(service_fakes.SERVICE_PROVIDER) updated_sp = copy.deepcopy(service_fakes.SERVICE_PROVIDER)
updated_sp['enabled'] = False updated_sp['enabled'] = False
resources = fakes.FakeResource( resources = fakes.FakeResource(None, updated_sp, loaded=True)
None,
updated_sp,
loaded=True
)
self.service_providers_mock.update.return_value = resources self.service_providers_mock.update.return_value = resources
prepare(self) prepare(self)
arglist = [ arglist = [
'--disable', service_fakes.sp_id, '--disable',
service_fakes.sp_id,
] ]
verifylist = [ verifylist = [
('service_provider', service_fakes.sp_id), ('service_provider', service_fakes.sp_id),
@ -295,7 +290,7 @@ class TestServiceProviderSet(TestServiceProvider):
enabled=False, enabled=False,
description=None, description=None,
auth_url=None, auth_url=None,
sp_url=None sp_url=None,
) )
def test_service_provider_enable(self): def test_service_provider_enable(self):
@ -309,13 +304,14 @@ class TestServiceProviderSet(TestServiceProvider):
resources = fakes.FakeResource( resources = fakes.FakeResource(
None, None,
copy.deepcopy(service_fakes.SERVICE_PROVIDER), copy.deepcopy(service_fakes.SERVICE_PROVIDER),
loaded=True loaded=True,
) )
self.service_providers_mock.update.return_value = resources self.service_providers_mock.update.return_value = resources
prepare(self) prepare(self)
arglist = [ arglist = [
'--enable', service_fakes.sp_id, '--enable',
service_fakes.sp_id,
] ]
verifylist = [ verifylist = [
('service_provider', service_fakes.sp_id), ('service_provider', service_fakes.sp_id),
@ -326,8 +322,12 @@ class TestServiceProviderSet(TestServiceProvider):
self.cmd.take_action(parsed_args) self.cmd.take_action(parsed_args)
self.service_providers_mock.update.assert_called_with( self.service_providers_mock.update.assert_called_with(
service_fakes.sp_id, enabled=True, description=None, service_fakes.sp_id,
auth_url=None, sp_url=None) enabled=True,
description=None,
auth_url=None,
sp_url=None,
)
def test_service_provider_no_options(self): def test_service_provider_no_options(self):
def prepare(self): def prepare(self):
@ -335,7 +335,7 @@ class TestServiceProviderSet(TestServiceProvider):
resources = fakes.FakeResource( resources = fakes.FakeResource(
None, None,
copy.deepcopy(service_fakes.SERVICE_PROVIDER), copy.deepcopy(service_fakes.SERVICE_PROVIDER),
loaded=True loaded=True,
) )
self.service_providers_mock.get.return_value = resources self.service_providers_mock.get.return_value = resources
@ -364,7 +364,6 @@ class TestServiceProviderSet(TestServiceProvider):
class TestServiceProviderShow(TestServiceProvider): class TestServiceProviderShow(TestServiceProvider):
def setUp(self): def setUp(self):
super(TestServiceProviderShow, self).setUp() super(TestServiceProviderShow, self).setUp()
@ -373,8 +372,10 @@ class TestServiceProviderShow(TestServiceProvider):
copy.deepcopy(service_fakes.SERVICE_PROVIDER), copy.deepcopy(service_fakes.SERVICE_PROVIDER),
loaded=True, loaded=True,
) )
self.service_providers_mock.get.side_effect = [Exception("Not found"), self.service_providers_mock.get.side_effect = [
ret] Exception("Not found"),
ret,
]
self.service_providers_mock.get.return_value = ret self.service_providers_mock.get.return_value = ret
# Get the command object to test # Get the command object to test
@ -392,8 +393,7 @@ class TestServiceProviderShow(TestServiceProvider):
columns, data = self.cmd.take_action(parsed_args) columns, data = self.cmd.take_action(parsed_args)
self.service_providers_mock.get.assert_called_with( self.service_providers_mock.get.assert_called_with(
service_fakes.sp_id, service_fakes.sp_id, id='BETA'
id='BETA'
) )
collist = ('auth_url', 'description', 'enabled', 'id', 'sp_url') collist = ('auth_url', 'description', 'enabled', 'id', 'sp_url')
@ -403,6 +403,6 @@ class TestServiceProviderShow(TestServiceProvider):
service_fakes.sp_description, service_fakes.sp_description,
True, True,
service_fakes.sp_id, service_fakes.sp_id,
service_fakes.service_provider_url service_fakes.service_provider_url,
) )
self.assertEqual(data, datalist) self.assertEqual(data, datalist)

View File

@ -20,7 +20,6 @@ from openstackclient.tests.unit.identity.v3 import fakes as identity_fakes
class TestToken(identity_fakes.TestIdentityv3): class TestToken(identity_fakes.TestIdentityv3):
def setUp(self): def setUp(self):
super(TestToken, self).setUp() super(TestToken, self).setUp()
@ -30,7 +29,6 @@ class TestToken(identity_fakes.TestIdentityv3):
class TestTokenIssue(TestToken): class TestTokenIssue(TestToken):
def setUp(self): def setUp(self):
super(TestTokenIssue, self).setUp() super(TestTokenIssue, self).setUp()
@ -117,7 +115,6 @@ class TestTokenIssue(TestToken):
class TestTokenRevoke(TestToken): class TestTokenRevoke(TestToken):
TOKEN = 'fob' TOKEN = 'fob'
def setUp(self): def setUp(self):

View File

@ -23,7 +23,6 @@ from openstackclient.tests.unit.identity.v3 import fakes as identity_fakes
class TestTrust(identity_fakes.TestIdentityv3): class TestTrust(identity_fakes.TestIdentityv3):
def setUp(self): def setUp(self):
super(TestTrust, self).setUp() super(TestTrust, self).setUp()
@ -38,7 +37,6 @@ class TestTrust(identity_fakes.TestIdentityv3):
class TestTrustCreate(TestTrust): class TestTrustCreate(TestTrust):
def setUp(self): def setUp(self):
super(TestTrustCreate, self).setUp() super(TestTrustCreate, self).setUp()
@ -71,10 +69,12 @@ class TestTrustCreate(TestTrust):
def test_trust_create_basic(self): def test_trust_create_basic(self):
arglist = [ arglist = [
'--project', identity_fakes.project_id, '--project',
'--role', identity_fakes.role_id, identity_fakes.project_id,
'--role',
identity_fakes.role_id,
identity_fakes.user_id,
identity_fakes.user_id, identity_fakes.user_id,
identity_fakes.user_id
] ]
verifylist = [ verifylist = [
('project', identity_fakes.project_id), ('project', identity_fakes.project_id),
@ -100,13 +100,18 @@ class TestTrustCreate(TestTrust):
# TrustManager.create(trustee_id, trustor_id, impersonation=, # TrustManager.create(trustee_id, trustor_id, impersonation=,
# project=, role_names=, expires_at=) # project=, role_names=, expires_at=)
self.trusts_mock.create.assert_called_with( self.trusts_mock.create.assert_called_with(
identity_fakes.user_id, identity_fakes.user_id, identity_fakes.user_id, **kwargs
identity_fakes.user_id,
**kwargs
) )
collist = ('expires_at', 'id', 'impersonation', 'project_id', collist = (
'roles', 'trustee_user_id', 'trustor_user_id') 'expires_at',
'id',
'impersonation',
'project_id',
'roles',
'trustee_user_id',
'trustor_user_id',
)
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
datalist = ( datalist = (
identity_fakes.trust_expires, identity_fakes.trust_expires,
@ -115,13 +120,12 @@ class TestTrustCreate(TestTrust):
identity_fakes.project_id, identity_fakes.project_id,
identity_fakes.role_name, identity_fakes.role_name,
identity_fakes.user_id, identity_fakes.user_id,
identity_fakes.user_id identity_fakes.user_id,
) )
self.assertEqual(datalist, data) self.assertEqual(datalist, data)
class TestTrustDelete(TestTrust): class TestTrustDelete(TestTrust):
def setUp(self): def setUp(self):
super(TestTrustDelete, self).setUp() super(TestTrustDelete, self).setUp()
@ -140,9 +144,7 @@ class TestTrustDelete(TestTrust):
arglist = [ arglist = [
identity_fakes.trust_id, identity_fakes.trust_id,
] ]
verifylist = [ verifylist = [('trust', [identity_fakes.trust_id])]
('trust', [identity_fakes.trust_id])
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
result = self.cmd.take_action(parsed_args) result = self.cmd.take_action(parsed_args)
@ -154,8 +156,10 @@ class TestTrustDelete(TestTrust):
@mock.patch.object(utils, 'find_resource') @mock.patch.object(utils, 'find_resource')
def test_delete_multi_trusts_with_exception(self, find_mock): def test_delete_multi_trusts_with_exception(self, find_mock):
find_mock.side_effect = [self.trusts_mock.get.return_value, find_mock.side_effect = [
exceptions.CommandError] self.trusts_mock.get.return_value,
exceptions.CommandError,
]
arglist = [ arglist = [
identity_fakes.trust_id, identity_fakes.trust_id,
'unexist_trust', 'unexist_trust',
@ -169,19 +173,18 @@ class TestTrustDelete(TestTrust):
self.cmd.take_action(parsed_args) self.cmd.take_action(parsed_args)
self.fail('CommandError should be raised.') self.fail('CommandError should be raised.')
except exceptions.CommandError as e: except exceptions.CommandError as e:
self.assertEqual('1 of 2 trusts failed to delete.', self.assertEqual('1 of 2 trusts failed to delete.', str(e))
str(e))
find_mock.assert_any_call(self.trusts_mock, identity_fakes.trust_id) find_mock.assert_any_call(self.trusts_mock, identity_fakes.trust_id)
find_mock.assert_any_call(self.trusts_mock, 'unexist_trust') find_mock.assert_any_call(self.trusts_mock, 'unexist_trust')
self.assertEqual(2, find_mock.call_count) self.assertEqual(2, find_mock.call_count)
self.trusts_mock.delete.assert_called_once_with( self.trusts_mock.delete.assert_called_once_with(
identity_fakes.trust_id) identity_fakes.trust_id
)
class TestTrustList(TestTrust): class TestTrustList(TestTrust):
def setUp(self): def setUp(self):
super(TestTrustList, self).setUp() super(TestTrustList, self).setUp()
@ -211,17 +214,25 @@ class TestTrustList(TestTrust):
trustee_user=None, trustee_user=None,
) )
collist = ('ID', 'Expires At', 'Impersonation', 'Project ID', collist = (
'Trustee User ID', 'Trustor User ID') 'ID',
'Expires At',
'Impersonation',
'Project ID',
'Trustee User ID',
'Trustor User ID',
)
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
datalist = (( datalist = (
(
identity_fakes.trust_id, identity_fakes.trust_id,
identity_fakes.trust_expires, identity_fakes.trust_expires,
identity_fakes.trust_impersonation, identity_fakes.trust_impersonation,
identity_fakes.project_id, identity_fakes.project_id,
identity_fakes.user_id, identity_fakes.user_id,
identity_fakes.user_id identity_fakes.user_id,
), ) ),
)
self.assertEqual(datalist, tuple(data)) self.assertEqual(datalist, tuple(data))
def test_trust_list_auth_user(self): def test_trust_list_auth_user(self):
@ -248,17 +259,25 @@ class TestTrustList(TestTrust):
trustee_user=self.users_mock.get() trustee_user=self.users_mock.get()
) )
collist = ('ID', 'Expires At', 'Impersonation', 'Project ID', collist = (
'Trustee User ID', 'Trustor User ID') 'ID',
'Expires At',
'Impersonation',
'Project ID',
'Trustee User ID',
'Trustor User ID',
)
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
datalist = (( datalist = (
(
identity_fakes.trust_id, identity_fakes.trust_id,
identity_fakes.trust_expires, identity_fakes.trust_expires,
identity_fakes.trust_impersonation, identity_fakes.trust_impersonation,
identity_fakes.project_id, identity_fakes.project_id,
identity_fakes.user_id, identity_fakes.user_id,
identity_fakes.user_id identity_fakes.user_id,
), ) ),
)
self.assertEqual(datalist, tuple(data)) self.assertEqual(datalist, tuple(data))
def test_trust_list_trustee(self): def test_trust_list_trustee(self):
@ -281,17 +300,25 @@ class TestTrustList(TestTrust):
trustor_user=None, trustor_user=None,
) )
collist = ('ID', 'Expires At', 'Impersonation', 'Project ID', collist = (
'Trustee User ID', 'Trustor User ID') 'ID',
'Expires At',
'Impersonation',
'Project ID',
'Trustee User ID',
'Trustor User ID',
)
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
datalist = (( datalist = (
(
identity_fakes.trust_id, identity_fakes.trust_id,
identity_fakes.trust_expires, identity_fakes.trust_expires,
identity_fakes.trust_impersonation, identity_fakes.trust_impersonation,
identity_fakes.project_id, identity_fakes.project_id,
identity_fakes.user_id, identity_fakes.user_id,
identity_fakes.user_id identity_fakes.user_id,
), ) ),
)
self.assertEqual(datalist, tuple(data)) self.assertEqual(datalist, tuple(data))
def test_trust_list_trustor(self): def test_trust_list_trustor(self):
@ -314,22 +341,29 @@ class TestTrustList(TestTrust):
trustee_user=None, trustee_user=None,
) )
collist = ('ID', 'Expires At', 'Impersonation', 'Project ID', collist = (
'Trustee User ID', 'Trustor User ID') 'ID',
'Expires At',
'Impersonation',
'Project ID',
'Trustee User ID',
'Trustor User ID',
)
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
datalist = (( datalist = (
(
identity_fakes.trust_id, identity_fakes.trust_id,
identity_fakes.trust_expires, identity_fakes.trust_expires,
identity_fakes.trust_impersonation, identity_fakes.trust_impersonation,
identity_fakes.project_id, identity_fakes.project_id,
identity_fakes.user_id, identity_fakes.user_id,
identity_fakes.user_id identity_fakes.user_id,
), ) ),
)
self.assertEqual(datalist, tuple(data)) self.assertEqual(datalist, tuple(data))
class TestTrustShow(TestTrust): class TestTrustShow(TestTrust):
def setUp(self): def setUp(self):
super(TestTrustShow, self).setUp() super(TestTrustShow, self).setUp()
@ -358,8 +392,15 @@ class TestTrustShow(TestTrust):
self.trusts_mock.get.assert_called_with(identity_fakes.trust_id) self.trusts_mock.get.assert_called_with(identity_fakes.trust_id)
collist = ('expires_at', 'id', 'impersonation', 'project_id', collist = (
'roles', 'trustee_user_id', 'trustor_user_id') 'expires_at',
'id',
'impersonation',
'project_id',
'roles',
'trustee_user_id',
'trustor_user_id',
)
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
datalist = ( datalist = (
identity_fakes.trust_expires, identity_fakes.trust_expires,
@ -368,6 +409,6 @@ class TestTrustShow(TestTrust):
identity_fakes.project_id, identity_fakes.project_id,
identity_fakes.role_name, identity_fakes.role_name,
identity_fakes.user_id, identity_fakes.user_id,
identity_fakes.user_id identity_fakes.user_id,
) )
self.assertEqual(datalist, data) self.assertEqual(datalist, data)

View File

@ -18,7 +18,6 @@ from openstackclient.tests.unit.identity.v3 import fakes as identity_fakes
class TestUnscopedSAML(identity_fakes.TestFederatedIdentity): class TestUnscopedSAML(identity_fakes.TestFederatedIdentity):
def setUp(self): def setUp(self):
super(TestUnscopedSAML, self).setUp() super(TestUnscopedSAML, self).setUp()
@ -30,7 +29,6 @@ class TestUnscopedSAML(identity_fakes.TestFederatedIdentity):
class TestDomainList(TestUnscopedSAML): class TestDomainList(TestUnscopedSAML):
def setUp(self): def setUp(self):
super(TestDomainList, self).setUp() super(TestDomainList, self).setUp()
@ -59,17 +57,18 @@ class TestDomainList(TestUnscopedSAML):
collist = ('ID', 'Enabled', 'Name', 'Description') collist = ('ID', 'Enabled', 'Name', 'Description')
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
datalist = (( datalist = (
(
identity_fakes.domain_id, identity_fakes.domain_id,
True, True,
identity_fakes.domain_name, identity_fakes.domain_name,
identity_fakes.domain_description, identity_fakes.domain_description,
), ) ),
)
self.assertEqual(datalist, tuple(data)) self.assertEqual(datalist, tuple(data))
class TestProjectList(TestUnscopedSAML): class TestProjectList(TestUnscopedSAML):
def setUp(self): def setUp(self):
super(TestProjectList, self).setUp() super(TestProjectList, self).setUp()
@ -98,10 +97,12 @@ class TestProjectList(TestUnscopedSAML):
collist = ('ID', 'Domain ID', 'Enabled', 'Name') collist = ('ID', 'Domain ID', 'Enabled', 'Name')
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
datalist = (( datalist = (
(
identity_fakes.project_id, identity_fakes.project_id,
identity_fakes.domain_id, identity_fakes.domain_id,
True, True,
identity_fakes.project_name, identity_fakes.project_name,
), ) ),
)
self.assertEqual(datalist, tuple(data)) self.assertEqual(datalist, tuple(data))

View File

@ -25,7 +25,6 @@ from openstackclient.tests.unit.identity.v3 import fakes as identity_fakes
class TestUser(identity_fakes.TestIdentityv3): class TestUser(identity_fakes.TestIdentityv3):
def setUp(self): def setUp(self):
super(TestUser, self).setUp() super(TestUser, self).setUp()
@ -46,13 +45,13 @@ class TestUser(identity_fakes.TestIdentityv3):
self.users_mock.reset_mock() self.users_mock.reset_mock()
# Shortcut for RoleAssignmentManager Mock # Shortcut for RoleAssignmentManager Mock
self.role_assignments_mock = self.app.client_manager.identity.\ self.role_assignments_mock = (
role_assignments self.app.client_manager.identity.role_assignments
)
self.role_assignments_mock.reset_mock() self.role_assignments_mock.reset_mock()
class TestUserCreate(TestUser): class TestUserCreate(TestUser):
domain = identity_fakes.FakeDomain.create_one_domain() domain = identity_fakes.FakeDomain.create_one_domain()
project = identity_fakes.FakeProject.create_one_project() project = identity_fakes.FakeProject.create_one_project()
@ -69,8 +68,10 @@ class TestUserCreate(TestUser):
super(TestUserCreate, self).setUp() super(TestUserCreate, self).setUp()
self.user = identity_fakes.FakeUser.create_one_user( self.user = identity_fakes.FakeUser.create_one_user(
attrs={'domain_id': self.domain.id, attrs={
'default_project_id': self.project.id} 'domain_id': self.domain.id,
'default_project_id': self.project.id,
}
) )
self.datalist = ( self.datalist = (
self.project.id, self.project.id,
@ -118,16 +119,15 @@ class TestUserCreate(TestUser):
# UserManager.create(name=, domain=, project=, password=, email=, # UserManager.create(name=, domain=, project=, password=, email=,
# description=, enabled=, default_project=) # description=, enabled=, default_project=)
self.users_mock.create.assert_called_with( self.users_mock.create.assert_called_with(**kwargs)
**kwargs
)
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
self.assertEqual(self.datalist, data) self.assertEqual(self.datalist, data)
def test_user_create_password(self): def test_user_create_password(self):
arglist = [ arglist = [
'--password', 'secret', '--password',
'secret',
self.user.name, self.user.name,
] ]
verifylist = [ verifylist = [
@ -157,9 +157,7 @@ class TestUserCreate(TestUser):
} }
# UserManager.create(name=, domain=, project=, password=, email=, # UserManager.create(name=, domain=, project=, password=, email=,
# description=, enabled=, default_project=) # description=, enabled=, default_project=)
self.users_mock.create.assert_called_with( self.users_mock.create.assert_called_with(**kwargs)
**kwargs
)
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
self.assertEqual(self.datalist, data) self.assertEqual(self.datalist, data)
@ -198,16 +196,15 @@ class TestUserCreate(TestUser):
} }
# UserManager.create(name=, domain=, project=, password=, email=, # UserManager.create(name=, domain=, project=, password=, email=,
# description=, enabled=, default_project=) # description=, enabled=, default_project=)
self.users_mock.create.assert_called_with( self.users_mock.create.assert_called_with(**kwargs)
**kwargs
)
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
self.assertEqual(self.datalist, data) self.assertEqual(self.datalist, data)
def test_user_create_email(self): def test_user_create_email(self):
arglist = [ arglist = [
'--email', 'barney@example.com', '--email',
'barney@example.com',
self.user.name, self.user.name,
] ]
verifylist = [ verifylist = [
@ -236,16 +233,15 @@ class TestUserCreate(TestUser):
} }
# UserManager.create(name=, domain=, project=, password=, email=, # UserManager.create(name=, domain=, project=, password=, email=,
# description=, enabled=, default_project=) # description=, enabled=, default_project=)
self.users_mock.create.assert_called_with( self.users_mock.create.assert_called_with(**kwargs)
**kwargs
)
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
self.assertEqual(self.datalist, data) self.assertEqual(self.datalist, data)
def test_user_create_project(self): def test_user_create_project(self):
arglist = [ arglist = [
'--project', self.project.name, '--project',
self.project.name,
self.user.name, self.user.name,
] ]
verifylist = [ verifylist = [
@ -274,9 +270,7 @@ class TestUserCreate(TestUser):
} }
# UserManager.create(name=, domain=, project=, password=, email=, # UserManager.create(name=, domain=, project=, password=, email=,
# description=, enabled=, default_project=) # description=, enabled=, default_project=)
self.users_mock.create.assert_called_with( self.users_mock.create.assert_called_with(**kwargs)
**kwargs
)
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
datalist = ( datalist = (
@ -291,8 +285,10 @@ class TestUserCreate(TestUser):
def test_user_create_project_domain(self): def test_user_create_project_domain(self):
arglist = [ arglist = [
'--project', self.project.name, '--project',
'--project-domain', self.project.domain_id, self.project.name,
'--project-domain',
self.project.domain_id,
self.user.name, self.user.name,
] ]
verifylist = [ verifylist = [
@ -322,9 +318,7 @@ class TestUserCreate(TestUser):
} }
# UserManager.create(name=, domain=, project=, password=, email=, # UserManager.create(name=, domain=, project=, password=, email=,
# description=, enabled=, default_project=) # description=, enabled=, default_project=)
self.users_mock.create.assert_called_with( self.users_mock.create.assert_called_with(**kwargs)
**kwargs
)
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
datalist = ( datalist = (
@ -339,7 +333,8 @@ class TestUserCreate(TestUser):
def test_user_create_domain(self): def test_user_create_domain(self):
arglist = [ arglist = [
'--domain', self.domain.name, '--domain',
self.domain.name,
self.user.name, self.user.name,
] ]
verifylist = [ verifylist = [
@ -368,9 +363,7 @@ class TestUserCreate(TestUser):
} }
# UserManager.create(name=, domain=, project=, password=, email=, # UserManager.create(name=, domain=, project=, password=, email=,
# description=, enabled=, default_project=) # description=, enabled=, default_project=)
self.users_mock.create.assert_called_with( self.users_mock.create.assert_called_with(**kwargs)
**kwargs
)
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
self.assertEqual(self.datalist, data) self.assertEqual(self.datalist, data)
@ -405,9 +398,7 @@ class TestUserCreate(TestUser):
} }
# UserManager.create(name=, domain=, project=, password=, email=, # UserManager.create(name=, domain=, project=, password=, email=,
# description=, enabled=, default_project=) # description=, enabled=, default_project=)
self.users_mock.create.assert_called_with( self.users_mock.create.assert_called_with(**kwargs)
**kwargs
)
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
self.assertEqual(self.datalist, data) self.assertEqual(self.datalist, data)
@ -441,9 +432,7 @@ class TestUserCreate(TestUser):
'password': None, 'password': None,
} }
# users.create(name=, password, email, tenant_id=None, enabled=True) # users.create(name=, password, email, tenant_id=None, enabled=True)
self.users_mock.create.assert_called_with( self.users_mock.create.assert_called_with(**kwargs)
**kwargs
)
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
self.assertEqual(self.datalist, data) self.assertEqual(self.datalist, data)
@ -478,9 +467,7 @@ class TestUserCreate(TestUser):
} }
# UserManager.create(name=, domain=, project=, password=, email=, # UserManager.create(name=, domain=, project=, password=, email=,
# description=, enabled=, default_project=) # description=, enabled=, default_project=)
self.users_mock.create.assert_called_with( self.users_mock.create.assert_called_with(**kwargs)
**kwargs
)
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
self.assertEqual(self.datalist, data) self.assertEqual(self.datalist, data)
@ -516,9 +503,7 @@ class TestUserCreate(TestUser):
} }
# UserManager.create(name=, domain=, project=, password=, email=, # UserManager.create(name=, domain=, project=, password=, email=,
# description=, enabled=, default_project=) # description=, enabled=, default_project=)
self.users_mock.create.assert_called_with( self.users_mock.create.assert_called_with(**kwargs)
**kwargs
)
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
self.assertEqual(self.datalist, data) self.assertEqual(self.datalist, data)
@ -554,9 +539,7 @@ class TestUserCreate(TestUser):
} }
# UserManager.create(name=, domain=, project=, password=, email=, # UserManager.create(name=, domain=, project=, password=, email=,
# description=, enabled=, default_project=) # description=, enabled=, default_project=)
self.users_mock.create.assert_called_with( self.users_mock.create.assert_called_with(**kwargs)
**kwargs
)
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
self.assertEqual(self.datalist, data) self.assertEqual(self.datalist, data)
@ -592,9 +575,7 @@ class TestUserCreate(TestUser):
} }
# UserManager.create(name=, domain=, project=, password=, email=, # UserManager.create(name=, domain=, project=, password=, email=,
# description=, enabled=, default_project=) # description=, enabled=, default_project=)
self.users_mock.create.assert_called_with( self.users_mock.create.assert_called_with(**kwargs)
**kwargs
)
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
self.assertEqual(self.datalist, data) self.assertEqual(self.datalist, data)
@ -630,9 +611,7 @@ class TestUserCreate(TestUser):
} }
# UserManager.create(name=, domain=, project=, password=, email=, # UserManager.create(name=, domain=, project=, password=, email=,
# description=, enabled=, default_project=) # description=, enabled=, default_project=)
self.users_mock.create.assert_called_with( self.users_mock.create.assert_called_with(**kwargs)
**kwargs
)
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
self.assertEqual(self.datalist, data) self.assertEqual(self.datalist, data)
@ -668,9 +647,7 @@ class TestUserCreate(TestUser):
} }
# UserManager.create(name=, domain=, project=, password=, email=, # UserManager.create(name=, domain=, project=, password=, email=,
# description=, enabled=, default_project=) # description=, enabled=, default_project=)
self.users_mock.create.assert_called_with( self.users_mock.create.assert_called_with(**kwargs)
**kwargs
)
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
self.assertEqual(self.datalist, data) self.assertEqual(self.datalist, data)
@ -706,9 +683,7 @@ class TestUserCreate(TestUser):
} }
# UserManager.create(name=, domain=, project=, password=, email=, # UserManager.create(name=, domain=, project=, password=, email=,
# description=, enabled=, default_project=) # description=, enabled=, default_project=)
self.users_mock.create.assert_called_with( self.users_mock.create.assert_called_with(**kwargs)
**kwargs
)
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
self.assertEqual(self.datalist, data) self.assertEqual(self.datalist, data)
@ -744,9 +719,7 @@ class TestUserCreate(TestUser):
} }
# UserManager.create(name=, domain=, project=, password=, email=, # UserManager.create(name=, domain=, project=, password=, email=,
# description=, enabled=, default_project=) # description=, enabled=, default_project=)
self.users_mock.create.assert_called_with( self.users_mock.create.assert_called_with(**kwargs)
**kwargs
)
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
self.assertEqual(self.datalist, data) self.assertEqual(self.datalist, data)
@ -782,9 +755,7 @@ class TestUserCreate(TestUser):
} }
# UserManager.create(name=, domain=, project=, password=, email=, # UserManager.create(name=, domain=, project=, password=, email=,
# description=, enabled=, default_project=) # description=, enabled=, default_project=)
self.users_mock.create.assert_called_with( self.users_mock.create.assert_called_with(**kwargs)
**kwargs
)
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
self.assertEqual(self.datalist, data) self.assertEqual(self.datalist, data)
@ -820,22 +791,24 @@ class TestUserCreate(TestUser):
} }
# UserManager.create(name=, domain=, project=, password=, email=, # UserManager.create(name=, domain=, project=, password=, email=,
# description=, enabled=, default_project=) # description=, enabled=, default_project=)
self.users_mock.create.assert_called_with( self.users_mock.create.assert_called_with(**kwargs)
**kwargs
)
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
self.assertEqual(self.datalist, data) self.assertEqual(self.datalist, data)
def test_user_create_option_with_multi_factor_auth_rule(self): def test_user_create_option_with_multi_factor_auth_rule(self):
arglist = [ arglist = [
'--multi-factor-auth-rule', identity_fakes.mfa_opt1, '--multi-factor-auth-rule',
'--multi-factor-auth-rule', identity_fakes.mfa_opt2, identity_fakes.mfa_opt1,
'--multi-factor-auth-rule',
identity_fakes.mfa_opt2,
self.user.name, self.user.name,
] ]
verifylist = [ verifylist = [
('multi_factor_auth_rule', [identity_fakes.mfa_opt1, (
identity_fakes.mfa_opt2]), 'multi_factor_auth_rule',
[identity_fakes.mfa_opt1, identity_fakes.mfa_opt2],
),
('enable', False), ('enable', False),
('disable', False), ('disable', False),
('name', self.user.name), ('name', self.user.name),
@ -855,15 +828,14 @@ class TestUserCreate(TestUser):
'domain': None, 'domain': None,
'email': None, 'email': None,
'enabled': True, 'enabled': True,
'options': {'multi_factor_auth_rules': [["password", "totp"], 'options': {
["password"]]}, 'multi_factor_auth_rules': [["password", "totp"], ["password"]]
},
'password': None, 'password': None,
} }
# UserManager.create(name=, domain=, project=, password=, email=, # UserManager.create(name=, domain=, project=, password=, email=,
# description=, enabled=, default_project=) # description=, enabled=, default_project=)
self.users_mock.create.assert_called_with( self.users_mock.create.assert_called_with(**kwargs)
**kwargs
)
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
self.assertEqual(self.datalist, data) self.assertEqual(self.datalist, data)
@ -872,7 +844,8 @@ class TestUserCreate(TestUser):
arglist = [ arglist = [
'--ignore-password-expiry', '--ignore-password-expiry',
'--disable-multi-factor-auth', '--disable-multi-factor-auth',
'--multi-factor-auth-rule', identity_fakes.mfa_opt1, '--multi-factor-auth-rule',
identity_fakes.mfa_opt1,
self.user.name, self.user.name,
] ]
verifylist = [ verifylist = [
@ -898,23 +871,22 @@ class TestUserCreate(TestUser):
'domain': None, 'domain': None,
'email': None, 'email': None,
'enabled': True, 'enabled': True,
'options': {'ignore_password_expiry': True, 'options': {
'ignore_password_expiry': True,
'multi_factor_auth_enabled': False, 'multi_factor_auth_enabled': False,
'multi_factor_auth_rules': [["password", "totp"]]}, 'multi_factor_auth_rules': [["password", "totp"]],
},
'password': None, 'password': None,
} }
# UserManager.create(name=, domain=, project=, password=, email=, # UserManager.create(name=, domain=, project=, password=, email=,
# description=, enabled=, default_project=) # description=, enabled=, default_project=)
self.users_mock.create.assert_called_with( self.users_mock.create.assert_called_with(**kwargs)
**kwargs
)
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
self.assertEqual(self.datalist, data) self.assertEqual(self.datalist, data)
class TestUserDelete(TestUser): class TestUserDelete(TestUser):
user = identity_fakes.FakeUser.create_one_user() user = identity_fakes.FakeUser.create_one_user()
def setUp(self): def setUp(self):
@ -945,8 +917,7 @@ class TestUserDelete(TestUser):
@mock.patch.object(utils, 'find_resource') @mock.patch.object(utils, 'find_resource')
def test_delete_multi_users_with_exception(self, find_mock): def test_delete_multi_users_with_exception(self, find_mock):
find_mock.side_effect = [self.user, find_mock.side_effect = [self.user, exceptions.CommandError]
exceptions.CommandError]
arglist = [ arglist = [
self.user.id, self.user.id,
'unexist_user', 'unexist_user',
@ -960,8 +931,7 @@ class TestUserDelete(TestUser):
self.cmd.take_action(parsed_args) self.cmd.take_action(parsed_args)
self.fail('CommandError should be raised.') self.fail('CommandError should be raised.')
except exceptions.CommandError as e: except exceptions.CommandError as e:
self.assertEqual('1 of 2 users failed to delete.', self.assertEqual('1 of 2 users failed to delete.', str(e))
str(e))
find_mock.assert_any_call(self.users_mock, self.user.id) find_mock.assert_any_call(self.users_mock, self.user.id)
find_mock.assert_any_call(self.users_mock, 'unexist_user') find_mock.assert_any_call(self.users_mock, 'unexist_user')
@ -971,22 +941,19 @@ class TestUserDelete(TestUser):
class TestUserList(TestUser): class TestUserList(TestUser):
domain = identity_fakes.FakeDomain.create_one_domain() domain = identity_fakes.FakeDomain.create_one_domain()
project = identity_fakes.FakeProject.create_one_project() project = identity_fakes.FakeProject.create_one_project()
user = identity_fakes.FakeUser.create_one_user( user = identity_fakes.FakeUser.create_one_user(
attrs={'domain_id': domain.id, attrs={'domain_id': domain.id, 'default_project_id': project.id}
'default_project_id': project.id}
) )
group = identity_fakes.FakeGroup.create_one_group() group = identity_fakes.FakeGroup.create_one_group()
role_assignment = ( role_assignment = (
identity_fakes.FakeRoleAssignment.create_one_role_assignment( identity_fakes.FakeRoleAssignment.create_one_role_assignment(
attrs={'user': {'id': user.id}})) attrs={'user': {'id': user.id}}
)
)
columns = [ columns = ['ID', 'Name']
'ID',
'Name'
]
datalist = ( datalist = (
( (
user.id, user.id,
@ -1023,16 +990,15 @@ class TestUserList(TestUser):
'group': None, 'group': None,
} }
self.users_mock.list.assert_called_with( self.users_mock.list.assert_called_with(**kwargs)
**kwargs
)
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
self.assertEqual(self.datalist, tuple(data)) self.assertEqual(self.datalist, tuple(data))
def test_user_list_domain(self): def test_user_list_domain(self):
arglist = [ arglist = [
'--domain', self.domain.id, '--domain',
self.domain.id,
] ]
verifylist = [ verifylist = [
('domain', self.domain.id), ('domain', self.domain.id),
@ -1050,16 +1016,15 @@ class TestUserList(TestUser):
'group': None, 'group': None,
} }
self.users_mock.list.assert_called_with( self.users_mock.list.assert_called_with(**kwargs)
**kwargs
)
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
self.assertEqual(self.datalist, tuple(data)) self.assertEqual(self.datalist, tuple(data))
def test_user_list_group(self): def test_user_list_group(self):
arglist = [ arglist = [
'--group', self.group.name, '--group',
self.group.name,
] ]
verifylist = [ verifylist = [
('group', self.group.name), ('group', self.group.name),
@ -1077,9 +1042,7 @@ class TestUserList(TestUser):
'group': self.group.id, 'group': self.group.id,
} }
self.users_mock.list.assert_called_with( self.users_mock.list.assert_called_with(**kwargs)
**kwargs
)
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
self.assertEqual(self.datalist, tuple(data)) self.assertEqual(self.datalist, tuple(data))
@ -1104,9 +1067,7 @@ class TestUserList(TestUser):
'group': None, 'group': None,
} }
self.users_mock.list.assert_called_with( self.users_mock.list.assert_called_with(**kwargs)
**kwargs
)
collist = [ collist = [
'ID', 'ID',
@ -1133,7 +1094,8 @@ class TestUserList(TestUser):
def test_user_list_project(self): def test_user_list_project(self):
arglist = [ arglist = [
'--project', self.project.name, '--project',
self.project.name,
] ]
verifylist = [ verifylist = [
('project', self.project.name), ('project', self.project.name),
@ -1157,15 +1119,13 @@ class TestUserList(TestUser):
class TestUserSet(TestUser): class TestUserSet(TestUser):
project = identity_fakes.FakeProject.create_one_project() project = identity_fakes.FakeProject.create_one_project()
domain = identity_fakes.FakeDomain.create_one_domain() domain = identity_fakes.FakeDomain.create_one_domain()
user = identity_fakes.FakeUser.create_one_user( user = identity_fakes.FakeUser.create_one_user(
attrs={'default_project_id': project.id} attrs={'default_project_id': project.id}
) )
user2 = identity_fakes.FakeUser.create_one_user( user2 = identity_fakes.FakeUser.create_one_user(
attrs={'default_project_id': project.id, attrs={'default_project_id': project.id, 'domain_id': domain.id}
'domain_id': domain.id}
) )
def setUp(self): def setUp(self):
@ -1199,7 +1159,8 @@ class TestUserSet(TestUser):
def test_user_set_name(self): def test_user_set_name(self):
arglist = [ arglist = [
'--name', 'qwerty', '--name',
'qwerty',
self.user.name, self.user.name,
] ]
verifylist = [ verifylist = [
@ -1222,17 +1183,16 @@ class TestUserSet(TestUser):
} }
# UserManager.update(user, name=, domain=, project=, password=, # UserManager.update(user, name=, domain=, project=, password=,
# email=, description=, enabled=, default_project=) # email=, description=, enabled=, default_project=)
self.users_mock.update.assert_called_with( self.users_mock.update.assert_called_with(self.user.id, **kwargs)
self.user.id,
**kwargs
)
self.assertIsNone(result) self.assertIsNone(result)
def test_user_set_specify_domain(self): def test_user_set_specify_domain(self):
arglist = [ arglist = [
'--name', 'qwerty', '--name',
'--domain', self.domain.id, 'qwerty',
self.user2.name '--domain',
self.domain.id,
self.user2.name,
] ]
verifylist = [ verifylist = [
('name', 'qwerty'), ('name', 'qwerty'),
@ -1248,20 +1208,15 @@ class TestUserSet(TestUser):
result = self.cmd.take_action(parsed_args) result = self.cmd.take_action(parsed_args)
kwargs = { kwargs = {'enabled': True, 'name': 'qwerty'}
'enabled': True,
'name': 'qwerty'
}
self.users_mock.update.assert_called_with( self.users_mock.update.assert_called_with(self.user.id, **kwargs)
self.user.id,
**kwargs
)
self.assertIsNone(result) self.assertIsNone(result)
def test_user_set_password(self): def test_user_set_password(self):
arglist = [ arglist = [
'--password', 'secret', '--password',
'secret',
self.user.name, self.user.name,
] ]
verifylist = [ verifylist = [
@ -1285,10 +1240,7 @@ class TestUserSet(TestUser):
} }
# UserManager.update(user, name=, domain=, project=, password=, # UserManager.update(user, name=, domain=, project=, password=,
# email=, description=, enabled=, default_project=) # email=, description=, enabled=, default_project=)
self.users_mock.update.assert_called_with( self.users_mock.update.assert_called_with(self.user.id, **kwargs)
self.user.id,
**kwargs
)
self.assertIsNone(result) self.assertIsNone(result)
def test_user_set_password_prompt(self): def test_user_set_password_prompt(self):
@ -1320,15 +1272,13 @@ class TestUserSet(TestUser):
} }
# UserManager.update(user, name=, domain=, project=, password=, # UserManager.update(user, name=, domain=, project=, password=,
# email=, description=, enabled=, default_project=) # email=, description=, enabled=, default_project=)
self.users_mock.update.assert_called_with( self.users_mock.update.assert_called_with(self.user.id, **kwargs)
self.user.id,
**kwargs
)
self.assertIsNone(result) self.assertIsNone(result)
def test_user_set_email(self): def test_user_set_email(self):
arglist = [ arglist = [
'--email', 'barney@example.com', '--email',
'barney@example.com',
self.user.name, self.user.name,
] ]
verifylist = [ verifylist = [
@ -1351,15 +1301,13 @@ class TestUserSet(TestUser):
} }
# UserManager.update(user, name=, domain=, project=, password=, # UserManager.update(user, name=, domain=, project=, password=,
# email=, description=, enabled=, default_project=) # email=, description=, enabled=, default_project=)
self.users_mock.update.assert_called_with( self.users_mock.update.assert_called_with(self.user.id, **kwargs)
self.user.id,
**kwargs
)
self.assertIsNone(result) self.assertIsNone(result)
def test_user_set_project(self): def test_user_set_project(self):
arglist = [ arglist = [
'--project', self.project.id, '--project',
self.project.id,
self.user.name, self.user.name,
] ]
verifylist = [ verifylist = [
@ -1382,16 +1330,15 @@ class TestUserSet(TestUser):
} }
# UserManager.update(user, name=, domain=, project=, password=, # UserManager.update(user, name=, domain=, project=, password=,
# email=, description=, enabled=, default_project=) # email=, description=, enabled=, default_project=)
self.users_mock.update.assert_called_with( self.users_mock.update.assert_called_with(self.user.id, **kwargs)
self.user.id,
**kwargs
)
self.assertIsNone(result) self.assertIsNone(result)
def test_user_set_project_domain(self): def test_user_set_project_domain(self):
arglist = [ arglist = [
'--project', self.project.id, '--project',
'--project-domain', self.project.domain_id, self.project.id,
'--project-domain',
self.project.domain_id,
self.user.name, self.user.name,
] ]
verifylist = [ verifylist = [
@ -1415,10 +1362,7 @@ class TestUserSet(TestUser):
} }
# UserManager.update(user, name=, domain=, project=, password=, # UserManager.update(user, name=, domain=, project=, password=,
# email=, description=, enabled=, default_project=) # email=, description=, enabled=, default_project=)
self.users_mock.update.assert_called_with( self.users_mock.update.assert_called_with(self.user.id, **kwargs)
self.user.id,
**kwargs
)
self.assertIsNone(result) self.assertIsNone(result)
def test_user_set_enable(self): def test_user_set_enable(self):
@ -1445,10 +1389,7 @@ class TestUserSet(TestUser):
} }
# UserManager.update(user, name=, domain=, project=, password=, # UserManager.update(user, name=, domain=, project=, password=,
# email=, description=, enabled=, default_project=) # email=, description=, enabled=, default_project=)
self.users_mock.update.assert_called_with( self.users_mock.update.assert_called_with(self.user.id, **kwargs)
self.user.id,
**kwargs
)
self.assertIsNone(result) self.assertIsNone(result)
def test_user_set_disable(self): def test_user_set_disable(self):
@ -1475,10 +1416,7 @@ class TestUserSet(TestUser):
} }
# UserManager.update(user, name=, domain=, project=, password=, # UserManager.update(user, name=, domain=, project=, password=,
# email=, description=, enabled=, default_project=) # email=, description=, enabled=, default_project=)
self.users_mock.update.assert_called_with( self.users_mock.update.assert_called_with(self.user.id, **kwargs)
self.user.id,
**kwargs
)
self.assertIsNone(result) self.assertIsNone(result)
def test_user_set_ignore_lockout_failure_attempts(self): def test_user_set_ignore_lockout_failure_attempts(self):
@ -1506,10 +1444,7 @@ class TestUserSet(TestUser):
} }
# UserManager.update(user, name=, domain=, project=, password=, # UserManager.update(user, name=, domain=, project=, password=,
# email=, description=, enabled=, default_project=) # email=, description=, enabled=, default_project=)
self.users_mock.update.assert_called_with( self.users_mock.update.assert_called_with(self.user.id, **kwargs)
self.user.id,
**kwargs
)
self.assertIsNone(result) self.assertIsNone(result)
def test_user_set_no_ignore_lockout_failure_attempts(self): def test_user_set_no_ignore_lockout_failure_attempts(self):
@ -1537,10 +1472,7 @@ class TestUserSet(TestUser):
} }
# UserManager.update(user, name=, domain=, project=, password=, # UserManager.update(user, name=, domain=, project=, password=,
# email=, description=, enabled=, default_project=) # email=, description=, enabled=, default_project=)
self.users_mock.update.assert_called_with( self.users_mock.update.assert_called_with(self.user.id, **kwargs)
self.user.id,
**kwargs
)
self.assertIsNone(result) self.assertIsNone(result)
def test_user_set_ignore_password_expiry(self): def test_user_set_ignore_password_expiry(self):
@ -1568,10 +1500,7 @@ class TestUserSet(TestUser):
} }
# UserManager.update(user, name=, domain=, project=, password=, # UserManager.update(user, name=, domain=, project=, password=,
# email=, description=, enabled=, default_project=) # email=, description=, enabled=, default_project=)
self.users_mock.update.assert_called_with( self.users_mock.update.assert_called_with(self.user.id, **kwargs)
self.user.id,
**kwargs
)
self.assertIsNone(result) self.assertIsNone(result)
def test_user_set_no_ignore_password_expiry(self): def test_user_set_no_ignore_password_expiry(self):
@ -1599,10 +1528,7 @@ class TestUserSet(TestUser):
} }
# UserManager.update(user, name=, domain=, project=, password=, # UserManager.update(user, name=, domain=, project=, password=,
# email=, description=, enabled=, default_project=) # email=, description=, enabled=, default_project=)
self.users_mock.update.assert_called_with( self.users_mock.update.assert_called_with(self.user.id, **kwargs)
self.user.id,
**kwargs
)
self.assertIsNone(result) self.assertIsNone(result)
def test_user_set_ignore_change_password_upon_first_use(self): def test_user_set_ignore_change_password_upon_first_use(self):
@ -1630,10 +1556,7 @@ class TestUserSet(TestUser):
} }
# UserManager.update(user, name=, domain=, project=, password=, # UserManager.update(user, name=, domain=, project=, password=,
# email=, description=, enabled=, default_project=) # email=, description=, enabled=, default_project=)
self.users_mock.update.assert_called_with( self.users_mock.update.assert_called_with(self.user.id, **kwargs)
self.user.id,
**kwargs
)
self.assertIsNone(result) self.assertIsNone(result)
def test_user_set_no_ignore_change_password_upon_first_use(self): def test_user_set_no_ignore_change_password_upon_first_use(self):
@ -1661,10 +1584,7 @@ class TestUserSet(TestUser):
} }
# UserManager.update(user, name=, domain=, project=, password=, # UserManager.update(user, name=, domain=, project=, password=,
# email=, description=, enabled=, default_project=) # email=, description=, enabled=, default_project=)
self.users_mock.update.assert_called_with( self.users_mock.update.assert_called_with(self.user.id, **kwargs)
self.user.id,
**kwargs
)
self.assertIsNone(result) self.assertIsNone(result)
def test_user_set_enable_lock_password(self): def test_user_set_enable_lock_password(self):
@ -1692,10 +1612,7 @@ class TestUserSet(TestUser):
} }
# UserManager.update(user, name=, domain=, project=, password=, # UserManager.update(user, name=, domain=, project=, password=,
# email=, description=, enabled=, default_project=) # email=, description=, enabled=, default_project=)
self.users_mock.update.assert_called_with( self.users_mock.update.assert_called_with(self.user.id, **kwargs)
self.user.id,
**kwargs
)
self.assertIsNone(result) self.assertIsNone(result)
def test_user_set_disable_lock_password(self): def test_user_set_disable_lock_password(self):
@ -1723,10 +1640,7 @@ class TestUserSet(TestUser):
} }
# UserManager.update(user, name=, domain=, project=, password=, # UserManager.update(user, name=, domain=, project=, password=,
# email=, description=, enabled=, default_project=) # email=, description=, enabled=, default_project=)
self.users_mock.update.assert_called_with( self.users_mock.update.assert_called_with(self.user.id, **kwargs)
self.user.id,
**kwargs
)
self.assertIsNone(result) self.assertIsNone(result)
def test_user_set_enable_multi_factor_auth(self): def test_user_set_enable_multi_factor_auth(self):
@ -1754,10 +1668,7 @@ class TestUserSet(TestUser):
} }
# UserManager.update(user, name=, domain=, project=, password=, # UserManager.update(user, name=, domain=, project=, password=,
# email=, description=, enabled=, default_project=) # email=, description=, enabled=, default_project=)
self.users_mock.update.assert_called_with( self.users_mock.update.assert_called_with(self.user.id, **kwargs)
self.user.id,
**kwargs
)
self.assertIsNone(result) self.assertIsNone(result)
def test_user_set_disable_multi_factor_auth(self): def test_user_set_disable_multi_factor_auth(self):
@ -1785,15 +1696,13 @@ class TestUserSet(TestUser):
} }
# UserManager.update(user, name=, domain=, project=, password=, # UserManager.update(user, name=, domain=, project=, password=,
# email=, description=, enabled=, default_project=) # email=, description=, enabled=, default_project=)
self.users_mock.update.assert_called_with( self.users_mock.update.assert_called_with(self.user.id, **kwargs)
self.user.id,
**kwargs
)
self.assertIsNone(result) self.assertIsNone(result)
def test_user_set_option_multi_factor_auth_rule(self): def test_user_set_option_multi_factor_auth_rule(self):
arglist = [ arglist = [
'--multi-factor-auth-rule', identity_fakes.mfa_opt1, '--multi-factor-auth-rule',
identity_fakes.mfa_opt1,
self.user.name, self.user.name,
] ]
verifylist = [ verifylist = [
@ -1812,21 +1721,20 @@ class TestUserSet(TestUser):
# Set expected values # Set expected values
kwargs = { kwargs = {
'enabled': True, 'enabled': True,
'options': {'multi_factor_auth_rules': [["password", "totp"]]}} 'options': {'multi_factor_auth_rules': [["password", "totp"]]},
}
# UserManager.update(user, name=, domain=, project=, password=, # UserManager.update(user, name=, domain=, project=, password=,
# email=, description=, enabled=, default_project=) # email=, description=, enabled=, default_project=)
self.users_mock.update.assert_called_with( self.users_mock.update.assert_called_with(self.user.id, **kwargs)
self.user.id,
**kwargs
)
self.assertIsNone(result) self.assertIsNone(result)
def test_user_set_with_multiple_options(self): def test_user_set_with_multiple_options(self):
arglist = [ arglist = [
'--ignore-password-expiry', '--ignore-password-expiry',
'--enable-multi-factor-auth', '--enable-multi-factor-auth',
'--multi-factor-auth-rule', identity_fakes.mfa_opt1, '--multi-factor-auth-rule',
identity_fakes.mfa_opt1,
self.user.name, self.user.name,
] ]
verifylist = [ verifylist = [
@ -1847,21 +1755,20 @@ class TestUserSet(TestUser):
# Set expected values # Set expected values
kwargs = { kwargs = {
'enabled': True, 'enabled': True,
'options': {'ignore_password_expiry': True, 'options': {
'ignore_password_expiry': True,
'multi_factor_auth_enabled': True, 'multi_factor_auth_enabled': True,
'multi_factor_auth_rules': [["password", "totp"]]}} 'multi_factor_auth_rules': [["password", "totp"]],
},
}
# UserManager.update(user, name=, domain=, project=, password=, # UserManager.update(user, name=, domain=, project=, password=,
# email=, description=, enabled=, default_project=) # email=, description=, enabled=, default_project=)
self.users_mock.update.assert_called_with( self.users_mock.update.assert_called_with(self.user.id, **kwargs)
self.user.id,
**kwargs
)
self.assertIsNone(result) self.assertIsNone(result)
class TestUserSetPassword(TestUser): class TestUserSetPassword(TestUser):
def setUp(self): def setUp(self):
super(TestUserSetPassword, self).setUp() super(TestUserSetPassword, self).setUp()
self.cmd = user.SetPasswordUser(self.app, None) self.cmd = user.SetPasswordUser(self.app, None)
@ -1877,7 +1784,8 @@ class TestUserSetPassword(TestUser):
current_pass = 'old_pass' current_pass = 'old_pass'
new_pass = 'new_pass' new_pass = 'new_pass'
arglist = [ arglist = [
'--password', new_pass, '--password',
new_pass,
] ]
verifylist = [ verifylist = [
('password', new_pass), ('password', new_pass),
@ -1911,8 +1819,10 @@ class TestUserSetPassword(TestUser):
current_pass = 'old_pass' current_pass = 'old_pass'
new_pass = 'new_pass' new_pass = 'new_pass'
arglist = [ arglist = [
'--password', new_pass, '--password',
'--original-password', current_pass, new_pass,
'--original-password',
current_pass,
] ]
verifylist = [ verifylist = [
('password', new_pass), ('password', new_pass),
@ -1929,7 +1839,6 @@ class TestUserSetPassword(TestUser):
class TestUserShow(TestUser): class TestUserShow(TestUser):
user = identity_fakes.FakeUser.create_one_user() user = identity_fakes.FakeUser.create_one_user()
def setUp(self): def setUp(self):
@ -1939,12 +1848,13 @@ class TestUserShow(TestUser):
# Get the command object to test # Get the command object to test
self.cmd = user.ShowUser(self.app, None) self.cmd = user.ShowUser(self.app, None)
self.app.client_manager.identity.auth.client.get_user_id.\ self.app.client_manager.identity.auth.client.get_user_id.return_value = ( # noqa: E501
return_value = self.user.id self.user.id
self.app.client_manager.identity.tokens.get_token_data.return_value = \ )
{'token': self.app.client_manager.identity.tokens.get_token_data.return_value = {
{'user': 'token': {
{'domain': {'id': self.user.domain_id}, 'user': {
'domain': {'id': self.user.domain_id},
'id': self.user.id, 'id': self.user.id,
'name': self.user.name, 'name': self.user.name,
} }
@ -1967,8 +1877,14 @@ class TestUserShow(TestUser):
self.users_mock.get.assert_called_with(self.user.id) self.users_mock.get.assert_called_with(self.user.id)
collist = ('default_project_id', 'domain_id', 'email', collist = (
'enabled', 'id', 'name') 'default_project_id',
'domain_id',
'email',
'enabled',
'id',
'name',
)
self.assertEqual(collist, columns) self.assertEqual(collist, columns)
datalist = ( datalist = (
self.user.default_project_id, self.user.default_project_id,
@ -1982,11 +1898,13 @@ class TestUserShow(TestUser):
def test_user_show_with_domain(self): def test_user_show_with_domain(self):
user = identity_fakes.FakeUser.create_one_user( user = identity_fakes.FakeUser.create_one_user(
{"name": self.user.name}) {"name": self.user.name}
)
identity_client = self.app.client_manager.identity identity_client = self.app.client_manager.identity
arglist = [ arglist = [
"--domain", self.user.domain_id, "--domain",
self.user.domain_id,
user.name, user.name,
] ]
verifylist = [ verifylist = [
@ -1995,13 +1913,14 @@ class TestUserShow(TestUser):
] ]
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
user_str = common._get_token_resource(identity_client, 'user', user_str = common._get_token_resource(
parsed_args.user, identity_client, 'user', parsed_args.user, parsed_args.domain
parsed_args.domain) )
self.assertEqual(self.user.id, user_str) self.assertEqual(self.user.id, user_str)
arglist = [ arglist = [
"--domain", user.domain_id, "--domain",
user.domain_id,
user.name, user.name,
] ]
verifylist = [ verifylist = [
@ -2010,7 +1929,7 @@ class TestUserShow(TestUser):
] ]
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
user_str = common._get_token_resource(identity_client, 'user', user_str = common._get_token_resource(
parsed_args.user, identity_client, 'user', parsed_args.user, parsed_args.domain
parsed_args.domain) )
self.assertEqual(user.name, user_str) self.assertEqual(user.name, user_str)