Simplify credentials management

Refactor the way credentials/client managers are obtained by the test
classes so that it is clear which class attributes reference the client
managers with specific credentials.

Change-Id: I5e1c6c61406fc26f5b5f50dadf288d5359d2b3ec
This commit is contained in:
John Warren 2016-02-24 15:57:04 -05:00
parent 2d70762692
commit ae7567dc67
1 changed files with 106 additions and 0 deletions

View File

@ -0,0 +1,106 @@
::
This work is licensed under a Creative Commons Attribution 3.0 Unported
License.
http://creativecommons.org/licenses/by/3.0/legalcode
..
===============================
Simplify credentials management
===============================
https://blueprints.launchpad.net/tempest/+spec/simplify-credentials-management
Refactor the way credentials/client managers are obtained by the test
classes so that it is clear which class attributes reference the client
managers with specific credentials.
Problem description
===================
Credentials are allocated by defining an array that enumerates the needed
credentials for a given test class. For instance::
credentials = [['operator', CONF.object_storage.operator_role],
['operator_alt', CONF.object_storage.operator_role]]
When the ``setup_credentials`` class method of the base test class is called,
the client managers associated with credentials are mapped to class attributes
with the prefix ``os_roles``. Credentials can also be allocated in this
manner::
credentials = ['primary', 'alt', 'admin']
In this case the client managers are aliased to three class attributes, for
instance ``os``, ``manager``, ``os_primary`` are all set to the client
manager using the ``primary`` credentials. This can be confusing for someone
trying to understand a test case, because it is not intuitive for the setting
of a class variable to result in attributes being set and what the names of
those attributes are.
Proposed change
===============
The proposed change is to explicitly assign the attribute values in the given
class's ``setup_credentials`` class method; for instance::
cls.os_roles_operator = cls.get_client_manager(
roles=[CONF.object_storage.operator_role], force_new=True)
cls.os_roles_operator_alt = cls.get_client_manager(
roles=[CONF.object_storage.operator_role], force_new=True)
For classes that use the ``primary``, ``alt`` and/or ``admin`` credentials, the
logic would look like this::
cls.os_primary = cls.get_client_manager(credential_type='primary')
All aliasing would be removed.
In either case the credential de-allocation logic can remain the way it is.
Implementation
==============
Assignee(s)
-----------
John Warren <jswarren@us.ibm.com>
Milestones
----------
Work Items
----------
- tempest/scenario/test_server_multinode.py and subclasses
- tempest/scenario/test_security_groups_basic_ops.py and subclasses
- tempest/scenario/test_aggregates_basic_ops.py and subclasses
- tempest/scenario/manager.py and subclasses
- tempest/api/database/base.py and subclasses
- tempest/api/compute/base.py and subclasses
- tempest/api/compute/test_authorization.py and subclasses
- tempest/api/compute/servers/test_servers_negative.py and subclasses
- tempest/api/telemetry/base.py and subclasses
- tempest/api/baremetal/admin/base.py and subclasses
- tempest/api/object_storage/base.py and subclasses
- tempest/api/object_storage/test_object_services.py and subclasses
- tempest/api/object_storage/test_account_services.py and subclasses
- tempest/api/object_storage/test_account_quotas.py and subclasses
- tempest/api/object_storage/test_container_acl_negative.py and subclasses
- tempest/api/object_storage/test_account_services_negative.py and subclasses
- tempest/api/object_storage/test_container_sync.py and subclasses
- tempest/api/object_storage/test_container_acl.py and subclasses
- tempest/api/object_storage/test_account_quotas_negative.py and subclasses
- tempest/api/data_processing/base.py and subclasses
- tempest/api/network/admin/test_floating_ips_admin_actions.py and subclasses
- tempest/api/network/base.py and subclasses
- tempest/api/volume/base.py and subclasses
- tempest/api/volume/test_volume_transfers.py and subclasses
- tempest/api/identity/base.py and subclasses
- tempest/api/identity/v3/test_projects.py and subclasses
- tempest/api/identity/v2/test_tenants.py and subclasses
- tempest/api/image/base.py and subclasses
- tempest/api/orchestration/base.py and subclasses