Implement new random name generator for keystone scenarios

This switches keystone scenarios to using the new consistent random
name generator.

Implements blueprint: consistent-resource-names
Change-Id: Ie753b6c6b570ce40bd17df545df4a2cde2c4bc50
This commit is contained in:
Chris St. Pierre
2015-10-16 07:46:25 -05:00
parent 1dde5afbb4
commit d025cb8e68
23 changed files with 119 additions and 218 deletions

View File

@@ -2,8 +2,7 @@
KeystoneBasic.create_user: KeystoneBasic.create_user:
- -
args: args: {}
name_length: 10
runner: runner:
type: "constant" type: "constant"
times: 1 times: 1
@@ -14,8 +13,7 @@
KeystoneBasic.create_delete_user: KeystoneBasic.create_delete_user:
- -
args: args: {}
name_length: 10
runner: runner:
type: "constant" type: "constant"
times: 1 times: 1
@@ -26,8 +24,7 @@
KeystoneBasic.create_and_list_tenants: KeystoneBasic.create_and_list_tenants:
- -
args: args: {}
name_length: 10
runner: runner:
type: "constant" type: "constant"
times: 1 times: 1
@@ -38,8 +35,7 @@
KeystoneBasic.create_and_list_users: KeystoneBasic.create_and_list_users:
- -
args: args: {}
name_length: 10
runner: runner:
type: "constant" type: "constant"
times: 1 times: 1
@@ -50,8 +46,7 @@
KeystoneBasic.create_tenant: KeystoneBasic.create_tenant:
- -
args: args: {}
name_length: 10
runner: runner:
type: "constant" type: "constant"
times: 1 times: 1
@@ -63,7 +58,6 @@
KeystoneBasic.create_tenant_with_users: KeystoneBasic.create_tenant_with_users:
- -
args: args:
name_length: 10
users_per_tenant: 10 users_per_tenant: 10
runner: runner:
type: "constant" type: "constant"
@@ -78,8 +72,7 @@
KeystoneBasic.create_delete_user: KeystoneBasic.create_delete_user:
- -
args: args: {}
name_length: 10
runner: runner:
type: "constant" type: "constant"
times: 1 times: 1

View File

@@ -1,8 +1,7 @@
--- ---
KeystoneBasic.create_user: KeystoneBasic.create_user:
- -
args: args: {}
name_length: 10
runner: runner:
type: "constant" type: "constant"
times: 10 times: 10
@@ -13,8 +12,7 @@
KeystoneBasic.create_delete_user: KeystoneBasic.create_delete_user:
- -
args: args: {}
name_length: 10
runner: runner:
type: "constant" type: "constant"
times: 10 times: 10
@@ -47,8 +45,7 @@
KeystoneBasic.create_and_list_tenants: KeystoneBasic.create_and_list_tenants:
- -
args: args: {}
name_length: 10
runner: runner:
type: "constant" type: "constant"
times: 10 times: 10
@@ -127,8 +124,7 @@
KeystoneBasic.create_and_list_users: KeystoneBasic.create_and_list_users:
- -
args: args: {}
name_length: 10
runner: runner:
type: "constant" type: "constant"
times: 10 times: 10
@@ -139,8 +135,7 @@
KeystoneBasic.create_tenant: KeystoneBasic.create_tenant:
- -
args: args: {}
name_length: 10
runner: runner:
type: "constant" type: "constant"
times: 10 times: 10
@@ -152,7 +147,6 @@
KeystoneBasic.create_tenant_with_users: KeystoneBasic.create_tenant_with_users:
- -
args: args:
name_length: 10
users_per_tenant: 10 users_per_tenant: 10
runner: runner:
type: "constant" type: "constant"
@@ -167,9 +161,7 @@
KeystoneBasic.create_user_update_password: KeystoneBasic.create_user_update_password:
- -
args: args: {}
name_length: 10
password_length: 10
runner: runner:
type: "constant" type: "constant"
times: 10 times: 10
@@ -180,8 +172,7 @@
KeystoneBasic.create_update_and_delete_tenant: KeystoneBasic.create_update_and_delete_tenant:
- -
args: args: {}
name_length: 10
runner: runner:
type: "constant" type: "constant"
times: 10 times: 10
@@ -192,8 +183,7 @@
KeystoneBasic.create_delete_user: KeystoneBasic.create_delete_user:
- -
args: args: {}
name_length: 10
runner: runner:
type: "constant" type: "constant"
times: 10 times: 10

View File

@@ -22,29 +22,25 @@ from rally.task import validation
class KeystoneBasic(kutils.KeystoneScenario): class KeystoneBasic(kutils.KeystoneScenario):
"""Basic benchmark scenarios for Keystone.""" """Basic benchmark scenarios for Keystone."""
@validation.number("name_length", minval=10)
@validation.required_openstack(admin=True) @validation.required_openstack(admin=True)
@scenario.configure(context={"admin_cleanup": ["keystone"]}) @scenario.configure(context={"admin_cleanup": ["keystone"]})
def create_user(self, name_length=10, **kwargs): def create_user(self, **kwargs):
"""Create a keystone user with random name. """Create a keystone user with random name.
:param name_length: length of the random part of user name
:param kwargs: Other optional parameters to create users like :param kwargs: Other optional parameters to create users like
"tenant_id", "enabled". "tenant_id", "enabled".
""" """
self._user_create(name_length=name_length, **kwargs) self._user_create(**kwargs)
@validation.number("name_length", minval=10)
@validation.required_openstack(admin=True) @validation.required_openstack(admin=True)
@scenario.configure(context={"admin_cleanup": ["keystone"]}) @scenario.configure(context={"admin_cleanup": ["keystone"]})
def create_delete_user(self, name_length=10, **kwargs): def create_delete_user(self, **kwargs):
"""Create a keystone user with random name and then delete it. """Create a keystone user with random name and then delete it.
:param name_length: length of the random part of user name
:param kwargs: Other optional parameters to create users like :param kwargs: Other optional parameters to create users like
"tenant_id", "enabled". "tenant_id", "enabled".
""" """
user = self._user_create(name_length=name_length, **kwargs) user = self._user_create(**kwargs)
self._resource_delete(user) self._resource_delete(user)
@validation.required_openstack(admin=True) @validation.required_openstack(admin=True)
@@ -61,57 +57,47 @@ class KeystoneBasic(kutils.KeystoneScenario):
self._update_user_enabled(user, not enabled) self._update_user_enabled(user, not enabled)
self._resource_delete(user) self._resource_delete(user)
@validation.number("name_length", minval=10)
@validation.required_openstack(admin=True) @validation.required_openstack(admin=True)
@scenario.configure(context={"admin_cleanup": ["keystone"]}) @scenario.configure(context={"admin_cleanup": ["keystone"]})
def create_tenant(self, name_length=10, **kwargs): def create_tenant(self, **kwargs):
"""Create a keystone tenant with random name. """Create a keystone tenant with random name.
:param name_length: length of the random part of tenant name
:param kwargs: Other optional parameters :param kwargs: Other optional parameters
""" """
self._tenant_create(name_length=name_length, **kwargs) self._tenant_create(**kwargs)
@validation.number("name_length", minval=10)
@validation.number("users_per_tenant", minval=1) @validation.number("users_per_tenant", minval=1)
@validation.required_openstack(admin=True) @validation.required_openstack(admin=True)
@scenario.configure(context={"admin_cleanup": ["keystone"]}) @scenario.configure(context={"admin_cleanup": ["keystone"]})
def create_tenant_with_users(self, users_per_tenant, name_length=10, def create_tenant_with_users(self, users_per_tenant, **kwargs):
**kwargs):
"""Create a keystone tenant and several users belonging to it. """Create a keystone tenant and several users belonging to it.
:param name_length: length of the random part of tenant/user name
:param users_per_tenant: number of users to create for the tenant :param users_per_tenant: number of users to create for the tenant
:param kwargs: Other optional parameters for tenant creation :param kwargs: Other optional parameters for tenant creation
:returns: keystone tenant instance :returns: keystone tenant instance
""" """
tenant = self._tenant_create(name_length=name_length, **kwargs) tenant = self._tenant_create(**kwargs)
self._users_create(tenant, users_per_tenant=users_per_tenant, self._users_create(tenant, users_per_tenant=users_per_tenant)
name_length=name_length)
@validation.number("name_length", minval=10)
@validation.required_openstack(admin=True) @validation.required_openstack(admin=True)
@scenario.configure(context={"admin_cleanup": ["keystone"]}) @scenario.configure(context={"admin_cleanup": ["keystone"]})
def create_and_list_users(self, name_length=10, **kwargs): def create_and_list_users(self, **kwargs):
"""Create a keystone user with random name and list all users. """Create a keystone user with random name and list all users.
:param name_length: length of the random part of user name
:param kwargs: Other optional parameters to create users like :param kwargs: Other optional parameters to create users like
"tenant_id", "enabled". "tenant_id", "enabled".
""" """
self._user_create(name_length=name_length, **kwargs) self._user_create(**kwargs)
self._list_users() self._list_users()
@validation.number("name_length", minval=10)
@validation.required_openstack(admin=True) @validation.required_openstack(admin=True)
@scenario.configure(context={"admin_cleanup": ["keystone"]}) @scenario.configure(context={"admin_cleanup": ["keystone"]})
def create_and_list_tenants(self, name_length=10, **kwargs): def create_and_list_tenants(self, **kwargs):
"""Create a keystone tenant with random name and list all tenants. """Create a keystone tenant with random name and list all tenants.
:param name_length: length of the random part of tenant name
:param kwargs: Other optional parameters :param kwargs: Other optional parameters
""" """
self._tenant_create(name_length=name_length, **kwargs) self._tenant_create(**kwargs)
self._list_tenants() self._list_tenants()
@validation.required_openstack(admin=True, users=True) @validation.required_openstack(admin=True, users=True)
@@ -157,8 +143,8 @@ class KeystoneBasic(kutils.KeystoneScenario):
None, to create an ephemeral service and None, to create an ephemeral service and
get it by ID. get it by ID.
""" """
tenant = self._tenant_create(name_length=5) tenant = self._tenant_create()
user = self._user_create(name_length=10) user = self._user_create()
role = self._role_create() role = self._role_create()
self._get_tenant(tenant.id) self._get_tenant(tenant.id)
self._get_user(user.id) self._get_user(user.id)
@@ -184,31 +170,23 @@ class KeystoneBasic(kutils.KeystoneScenario):
service = self._service_create(service_type, description) service = self._service_create(service_type, description)
self._delete_service(service.id) self._delete_service(service.id)
@validation.number("name_length", minval=10)
@validation.required_openstack(admin=True) @validation.required_openstack(admin=True)
@scenario.configure(context={"admin_cleanup": ["keystone"]}) @scenario.configure(context={"admin_cleanup": ["keystone"]})
def create_update_and_delete_tenant(self, name_length=10, **kwargs): def create_update_and_delete_tenant(self, **kwargs):
"""Create, update and delete tenant. """Create, update and delete tenant.
:param name_length: length of the random part of tenant name
:param kwargs: Other optional parameters for tenant creation :param kwargs: Other optional parameters for tenant creation
""" """
tenant = self._tenant_create(name_length=name_length, **kwargs) tenant = self._tenant_create(**kwargs)
self._update_tenant(tenant) self._update_tenant(tenant)
self._resource_delete(tenant) self._resource_delete(tenant)
@validation.number("password_length", minval=10)
@validation.number("name_length", minval=10)
@validation.required_openstack(admin=True) @validation.required_openstack(admin=True)
@scenario.configure(context={"admin_cleanup": ["keystone"]}) @scenario.configure(context={"admin_cleanup": ["keystone"]})
def create_user_update_password(self, name_length=10, password_length=10): def create_user_update_password(self):
"""Create user and update password for that user. """Create user and update password for that user."""
password = self.generate_random_name()
:param name_length: length of the user name user = self._user_create()
:param password_length: length of the password
"""
password = self._generate_random_name(length=password_length)
user = self._user_create(name_length=name_length)
self._update_user_password(user.id, password) self._update_user_password(user.id, password)
@validation.required_openstack(admin=True) @validation.required_openstack(admin=True)

View File

@@ -15,29 +15,27 @@
import uuid import uuid
from rally.common import utils
from rally.plugins.openstack import scenario from rally.plugins.openstack import scenario
from rally.task import atomic from rally.task import atomic
def is_temporary(resource): def is_temporary(resource):
return resource.name.startswith(KeystoneScenario.RESOURCE_NAME_PREFIX) return utils.name_matches_object(resource.name, KeystoneScenario)
class KeystoneScenario(scenario.OpenStackScenario): class KeystoneScenario(scenario.OpenStackScenario):
"""Base class for Keystone scenarios with basic atomic actions.""" """Base class for Keystone scenarios with basic atomic actions."""
RESOURCE_NAME_PREFIX = "rally_keystone_"
@atomic.action_timer("keystone.create_user") @atomic.action_timer("keystone.create_user")
def _user_create(self, name_length=10, email=None, **kwargs): def _user_create(self, email=None, **kwargs):
"""Creates keystone user with random name. """Creates keystone user with random name.
:param name_length: length of generated (random) part of name
:param kwargs: Other optional parameters to create users like :param kwargs: Other optional parameters to create users like
"tenant_id", "enabled". "tenant_id", "enabled".
:returns: keystone user instance :returns: keystone user instance
""" """
name = self._generate_random_name(length=name_length) name = self.generate_random_name()
# NOTE(boris-42): password and email parameters are required by # NOTE(boris-42): password and email parameters are required by
# keystone client v2.0. This should be cleanuped # keystone client v2.0. This should be cleanuped
# when we switch to v3. # when we switch to v3.
@@ -63,14 +61,13 @@ class KeystoneScenario(scenario.OpenStackScenario):
resource.delete() resource.delete()
@atomic.action_timer("keystone.create_tenant") @atomic.action_timer("keystone.create_tenant")
def _tenant_create(self, name_length=10, **kwargs): def _tenant_create(self, **kwargs):
"""Creates keystone tenant with random name. """Creates keystone tenant with random name.
:param name_length: length of generated (random) part of name
:param kwargs: Other optional parameters :param kwargs: Other optional parameters
:returns: keystone tenant instance :returns: keystone tenant instance
""" """
name = self._generate_random_name(length=name_length) name = self.generate_random_name()
return self.admin_clients("keystone").tenants.create(name, **kwargs) return self.admin_clients("keystone").tenants.create(name, **kwargs)
@atomic.action_timer("keystone.create_service") @atomic.action_timer("keystone.create_service")
@@ -78,41 +75,37 @@ class KeystoneScenario(scenario.OpenStackScenario):
description=None): description=None):
"""Creates keystone service with random name. """Creates keystone service with random name.
:param name: name of the service
:param service_type: type of the service :param service_type: type of the service
:param description: description of the service :param description: description of the service
:returns: keystone service instance :returns: keystone service instance
""" """
description = description or self._generate_random_name( description = description or self.generate_random_name()
prefix="rally_test_service_description_")
return self.admin_clients("keystone").services.create( return self.admin_clients("keystone").services.create(
self._generate_random_name(), self.generate_random_name(),
service_type, description) service_type, description)
@atomic.action_timer("keystone.create_users") @atomic.action_timer("keystone.create_users")
def _users_create(self, tenant, users_per_tenant, name_length=10): def _users_create(self, tenant, users_per_tenant):
"""Adds users to a tenant. """Adds users to a tenant.
:param tenant: tenant object :param tenant: tenant object
:param users_per_tenant: number of users in per tenant :param users_per_tenant: number of users in per tenant
:param name_length: length of generated (random) part of name for user
""" """
for i in range(users_per_tenant): for i in range(users_per_tenant):
name = self._generate_random_name(length=name_length) name = self.generate_random_name()
password = name password = name
email = (name + "@rally.me") email = name + "@rally.me"
self.admin_clients("keystone").users.create( self.admin_clients("keystone").users.create(
name, password=password, email=email, tenant_id=tenant.id) name, password=password, email=email, tenant_id=tenant.id)
@atomic.action_timer("keystone.create_role") @atomic.action_timer("keystone.create_role")
def _role_create(self, name_length=5): def _role_create(self):
"""Creates keystone user role with random name. """Creates keystone user role with random name.
:param name_length: length of generated (random) part of role name
:returns: keystone user role instance :returns: keystone user role instance
""" """
role = self.admin_clients("keystone").roles.create( role = self.admin_clients("keystone").roles.create(
self._generate_random_name(length=name_length)) self.generate_random_name())
return role return role
@atomic.action_timer("keystone.list_users") @atomic.action_timer("keystone.list_users")
@@ -207,15 +200,14 @@ class KeystoneScenario(scenario.OpenStackScenario):
self.admin_clients("keystone").services.delete(service_id) self.admin_clients("keystone").services.delete(service_id)
@atomic.action_timer("keystone.update_tenant") @atomic.action_timer("keystone.update_tenant")
def _update_tenant(self, tenant, name=None, description=None): def _update_tenant(self, tenant, description=None):
"""Update tenant name and description. """Update tenant name and description.
:param tenant: tenant to be updated :param tenant: tenant to be updated
:param name: tenant name to be set
:param description: tenant description to be set :param description: tenant description to be set
""" """
name = name or (tenant.name + "_updated") name = self.generate_random_name()
description = description or (tenant.name + "_description_updated") description = description or self.generate_random_name()
self.admin_clients("keystone").tenants.update(tenant.id, self.admin_clients("keystone").tenants.update(tenant.id,
name, description) name, description)

View File

@@ -1,9 +1,7 @@
{ {
"KeystoneBasic.create_delete_user": [ "KeystoneBasic.create_delete_user": [
{ {
"args": { "args": {},
"name_length": 10
},
"runner": { "runner": {
"type": "constant", "type": "constant",
"times": 100, "times": 100,

View File

@@ -1,8 +1,7 @@
--- ---
KeystoneBasic.create_delete_user: KeystoneBasic.create_delete_user:
- -
args: args: {}
name_length: 10
runner: runner:
type: "constant" type: "constant"
times: 100 times: 100

View File

@@ -1,9 +1,7 @@
{ {
"KeystoneBasic.create_and_list_tenants": [ "KeystoneBasic.create_and_list_tenants": [
{ {
"args": { "args": {},
"name_length": 10
},
"runner": { "runner": {
"type": "constant", "type": "constant",
"times": 10, "times": 10,

View File

@@ -1,8 +1,7 @@
--- ---
KeystoneBasic.create_and_list_tenants: KeystoneBasic.create_and_list_tenants:
- -
args: args: {}
name_length: 10
runner: runner:
type: "constant" type: "constant"
times: 10 times: 10

View File

@@ -1,9 +1,7 @@
{ {
"KeystoneBasic.create_and_list_users": [ "KeystoneBasic.create_and_list_users": [
{ {
"args": { "args": {},
"name_length": 10
},
"runner": { "runner": {
"type": "constant", "type": "constant",
"times": 100, "times": 100,

View File

@@ -1,8 +1,7 @@
--- ---
KeystoneBasic.create_and_list_users: KeystoneBasic.create_and_list_users:
- -
args: args: {}
name_length: 10
runner: runner:
type: "constant" type: "constant"
times: 100 times: 100

View File

@@ -2,7 +2,6 @@
"KeystoneBasic.create_tenant_with_users": [ "KeystoneBasic.create_tenant_with_users": [
{ {
"args": { "args": {
"name_length": 10,
"users_per_tenant": 10 "users_per_tenant": 10
}, },
"runner": { "runner": {

View File

@@ -2,7 +2,6 @@
KeystoneBasic.create_tenant_with_users: KeystoneBasic.create_tenant_with_users:
- -
args: args:
name_length: 10
users_per_tenant: 10 users_per_tenant: 10
runner: runner:
type: "constant" type: "constant"

View File

@@ -1,9 +1,7 @@
{ {
"KeystoneBasic.create_tenant": [ "KeystoneBasic.create_tenant": [
{ {
"args": { "args": {},
"name_length": 10
},
"runner": { "runner": {
"type": "constant", "type": "constant",
"times": 100, "times": 100,

View File

@@ -1,8 +1,7 @@
--- ---
KeystoneBasic.create_tenant: KeystoneBasic.create_tenant:
- -
args: args: {}
name_length: 10
runner: runner:
type: "constant" type: "constant"
times: 100 times: 100

View File

@@ -1,9 +1,7 @@
{ {
"KeystoneBasic.create_update_and_delete_tenant": [ "KeystoneBasic.create_update_and_delete_tenant": [
{ {
"args": { "args": {},
"name_length": 10
},
"runner": { "runner": {
"type": "constant", "type": "constant",
"times": 100, "times": 100,

View File

@@ -1,8 +1,7 @@
--- ---
KeystoneBasic.create_update_and_delete_tenant: KeystoneBasic.create_update_and_delete_tenant:
- -
args: args: {}
name_length: 10
runner: runner:
type: "constant" type: "constant"
times: 100 times: 100

View File

@@ -1,9 +1,7 @@
{ {
"KeystoneBasic.create_user": [ "KeystoneBasic.create_user": [
{ {
"args": { "args": {},
"name_length": 10
},
"runner": { "runner": {
"type": "constant", "type": "constant",
"times": 100, "times": 100,

View File

@@ -1,8 +1,7 @@
--- ---
KeystoneBasic.create_user: KeystoneBasic.create_user:
- -
args: args: {}
name_length: 10
runner: runner:
type: "constant" type: "constant"
times: 100 times: 100

View File

@@ -1,9 +1,7 @@
{ {
"KeystoneBasic.create_delete_user": [ "KeystoneBasic.create_delete_user": [
{ {
"args": { "args": {},
"name_length": 10
},
"runner": { "runner": {
"type": "constant", "type": "constant",
"times": 100, "times": 100,

View File

@@ -1,8 +1,7 @@
--- ---
KeystoneBasic.create_delete_user: KeystoneBasic.create_delete_user:
- -
args: args: {}
name_length: 10
runner: runner:
type: "constant" type: "constant"
times: 100 times: 100

View File

@@ -722,7 +722,7 @@ class SLATestCase(unittest.TestCase):
"KeystoneBasic.create_and_list_users": [ "KeystoneBasic.create_and_list_users": [
{ {
"args": { "args": {
"name_length": 10 "enabled": True
}, },
"runner": { "runner": {
"type": "constant", "type": "constant",

View File

@@ -36,27 +36,23 @@ class KeystoneBasicTestCase(test.ScenarioTestCase):
}) })
return context return context
@mock.patch("rally.common.utils.generate_random_name") def test_create_user(self):
def test_create_user(self, mock_generate_random_name):
scenario = basic.KeystoneBasic(self.context) scenario = basic.KeystoneBasic(self.context)
scenario._user_create = mock.MagicMock() scenario._user_create = mock.MagicMock()
scenario.create_user(name_length=20, password="tttt", tenant_id="id") scenario.create_user(password="tttt", tenant_id="id")
scenario._user_create.assert_called_once_with(name_length=20, scenario._user_create.assert_called_once_with(password="tttt",
password="tttt",
tenant_id="id") tenant_id="id")
@mock.patch("rally.common.utils.generate_random_name") def test_create_delete_user(self):
def test_create_delete_user(self, mock_generate_random_name):
create_result = mock.MagicMock() create_result = mock.MagicMock()
scenario = basic.KeystoneBasic(self.context) scenario = basic.KeystoneBasic(self.context)
scenario._user_create = mock.MagicMock(return_value=create_result) scenario._user_create = mock.MagicMock(return_value=create_result)
scenario._resource_delete = mock.MagicMock() scenario._resource_delete = mock.MagicMock()
scenario.create_delete_user(name_length=30, email="abcd", enabled=True) scenario.create_delete_user(email="abcd", enabled=True)
scenario._user_create.assert_called_once_with(name_length=30, scenario._user_create.assert_called_once_with(email="abcd",
email="abcd",
enabled=True) enabled=True)
scenario._resource_delete.assert_called_once_with(create_result) scenario._resource_delete.assert_called_once_with(create_result)
@@ -75,48 +71,37 @@ class KeystoneBasicTestCase(test.ScenarioTestCase):
scenario._resource_delete.assert_called_once_with( scenario._resource_delete.assert_called_once_with(
scenario._user_create.return_value) scenario._user_create.return_value)
@mock.patch("rally.common.utils.generate_random_name") def test_create_tenant(self):
def test_create_tenant(self, mock_generate_random_name):
scenario = basic.KeystoneBasic(self.context) scenario = basic.KeystoneBasic(self.context)
scenario._tenant_create = mock.MagicMock() scenario._tenant_create = mock.MagicMock()
scenario.create_tenant(name_length=20, enabled=True) scenario.create_tenant(enabled=True)
scenario._tenant_create.assert_called_once_with(name_length=20, scenario._tenant_create.assert_called_once_with(enabled=True)
enabled=True)
@mock.patch("rally.common.utils.generate_random_name") def test_create_tenant_with_users(self):
def test_create_tenant_with_users(self, mock_generate_random_name):
scenario = basic.KeystoneBasic(self.context) scenario = basic.KeystoneBasic(self.context)
fake_tenant = mock.MagicMock() fake_tenant = mock.MagicMock()
scenario._tenant_create = mock.MagicMock(return_value=fake_tenant) scenario._tenant_create = mock.MagicMock(return_value=fake_tenant)
scenario._users_create = mock.MagicMock() scenario._users_create = mock.MagicMock()
scenario.create_tenant_with_users(users_per_tenant=1, name_length=20, scenario.create_tenant_with_users(users_per_tenant=1, enabled=True)
enabled=True) scenario._tenant_create.assert_called_once_with(enabled=True)
scenario._tenant_create.assert_called_once_with(name_length=20,
enabled=True)
scenario._users_create.assert_called_once_with(fake_tenant, scenario._users_create.assert_called_once_with(fake_tenant,
users_per_tenant=1, users_per_tenant=1)
name_length=20)
@mock.patch("rally.common.utils.generate_random_name") def test_create_and_list_users(self):
def test_create_and_list_users(self, mock_generate_random_name):
scenario = basic.KeystoneBasic(self.context) scenario = basic.KeystoneBasic(self.context)
scenario._user_create = mock.MagicMock() scenario._user_create = mock.MagicMock()
scenario._list_users = mock.MagicMock() scenario._list_users = mock.MagicMock()
scenario.create_and_list_users(name_length=20, password="tttt", scenario.create_and_list_users(password="tttt", tenant_id="id")
tenant_id="id") scenario._user_create.assert_called_once_with(password="tttt",
scenario._user_create.assert_called_once_with(name_length=20,
password="tttt",
tenant_id="id") tenant_id="id")
scenario._list_users.assert_called_once_with() scenario._list_users.assert_called_once_with()
@mock.patch("rally.common.utils.generate_random_name") def test_create_and_list_tenants(self):
def test_create_and_list_tenants(self, mock_generate_random_name):
scenario = basic.KeystoneBasic(self.context) scenario = basic.KeystoneBasic(self.context)
scenario._tenant_create = mock.MagicMock() scenario._tenant_create = mock.MagicMock()
scenario._list_tenants = mock.MagicMock() scenario._list_tenants = mock.MagicMock()
scenario.create_and_list_tenants(name_length=20, enabled=True) scenario.create_and_list_tenants(enabled=True)
scenario._tenant_create.assert_called_once_with(name_length=20, scenario._tenant_create.assert_called_once_with(enabled=True)
enabled=True)
scenario._list_tenants.assert_called_with() scenario._list_tenants.assert_called_with()
def test_assign_and_remove_user_role(self): def test_assign_and_remove_user_role(self):
@@ -187,8 +172,8 @@ class KeystoneBasicTestCase(test.ScenarioTestCase):
scenario.get_entities(service_name) scenario.get_entities(service_name)
scenario._tenant_create.assert_called_once_with(name_length=5) scenario._tenant_create.assert_called_once_with()
scenario._user_create.assert_called_once_with(name_length=10) scenario._user_create.assert_called_once_with()
scenario._role_create.assert_called_once_with() scenario._role_create.assert_called_once_with()
scenario._get_tenant.assert_called_once_with(fake_tenant.id) scenario._get_tenant.assert_called_once_with(fake_tenant.id)
@@ -240,13 +225,13 @@ class KeystoneBasicTestCase(test.ScenarioTestCase):
fake_password = "pswd" fake_password = "pswd"
fake_user = mock.MagicMock() fake_user = mock.MagicMock()
scenario._user_create = mock.MagicMock(return_value=fake_user) scenario._user_create = mock.MagicMock(return_value=fake_user)
scenario._generate_random_name = mock.MagicMock( scenario.generate_random_name = mock.MagicMock(
return_value=fake_password) return_value=fake_password)
scenario._update_user_password = mock.MagicMock() scenario._update_user_password = mock.MagicMock()
scenario.create_user_update_password(name_length=9, password_length=9) scenario.create_user_update_password()
scenario._generate_random_name.assert_called_once_with(length=9) scenario.generate_random_name.assert_called_once_with()
scenario._user_create.assert_called_once_with(name_length=9) scenario._user_create.assert_called_once_with()
scenario._update_user_password.assert_called_once_with(fake_user.id, scenario._update_user_password.assert_called_once_with(fake_user.id,
fake_password) fake_password)

View File

@@ -14,7 +14,6 @@
# under the License. # under the License.
import mock import mock
import six
from rally.plugins.openstack.scenarios.keystone import utils from rally.plugins.openstack.scenarios.keystone import utils
from tests.unit import fakes from tests.unit import fakes
@@ -25,33 +24,21 @@ UTILS = "rally.plugins.openstack.scenarios.keystone.utils."
class KeystoneUtilsTestCase(test.TestCase): class KeystoneUtilsTestCase(test.TestCase):
def test_RESOURCE_NAME_PREFIX(self): @mock.patch("rally.common.utils.name_matches_object")
self.assertIsInstance(utils.KeystoneScenario.RESOURCE_NAME_PREFIX, def test_is_temporary(self, mock_name_matches_object):
six.string_types) resource = mock.Mock()
# Prefix must be long enough to guarantee that resource self.assertEqual(utils.is_temporary(resource),
# to be recognized as created by rally mock_name_matches_object.return_value)
self.assertTrue( mock_name_matches_object.assert_called_once_with(
len(utils.KeystoneScenario.RESOURCE_NAME_PREFIX) > 7) resource.name, utils.KeystoneScenario)
def test_is_temporary(self):
prefix = utils.KeystoneScenario.RESOURCE_NAME_PREFIX
tests = [
(fakes.FakeResource(name=prefix + "abc"), True),
(fakes.FakeResource(name="another"), False),
(fakes.FakeResource(name=prefix[:-3] + "abc"), False)
]
for resource, is_valid in tests:
self.assertEqual(utils.is_temporary(resource), is_valid)
class KeystoneScenarioTestCase(test.ScenarioTestCase): class KeystoneScenarioTestCase(test.ScenarioTestCase):
@mock.patch(UTILS + "uuid.uuid4", return_value="pwd") @mock.patch("uuid.uuid4", return_value="pwd")
@mock.patch("rally.common.utils.generate_random_name", def test_user_create(self, mock_uuid4):
return_value="foobarov")
def test_user_create(self, mock_generate_random_name, mock_uuid4):
scenario = utils.KeystoneScenario(self.context) scenario = utils.KeystoneScenario(self.context)
scenario.generate_random_name = mock.Mock(return_value="foobarov")
result = scenario._user_create() result = scenario._user_create()
self.assertEqual( self.assertEqual(
@@ -77,15 +64,15 @@ class KeystoneScenarioTestCase(test.ScenarioTestCase):
self._test_atomic_action_timer(scenario.atomic_actions(), self._test_atomic_action_timer(scenario.atomic_actions(),
"keystone.update_user_enabled") "keystone.update_user_enabled")
@mock.patch("rally.common.utils.generate_random_name") def test_role_create(self):
def test_role_create(self, mock_generate_random_name):
scenario = utils.KeystoneScenario(self.context) scenario = utils.KeystoneScenario(self.context)
scenario.generate_random_name = mock.Mock()
result = scenario._role_create() result = scenario._role_create()
self.assertEqual( self.assertEqual(
self.admin_clients("keystone").roles.create.return_value, result) self.admin_clients("keystone").roles.create.return_value, result)
self.admin_clients("keystone").roles.create.assert_called_once_with( self.admin_clients("keystone").roles.create.assert_called_once_with(
mock_generate_random_name.return_value) scenario.generate_random_name.return_value)
self._test_atomic_action_timer(scenario.atomic_actions(), self._test_atomic_action_timer(scenario.atomic_actions(),
"keystone.create_role") "keystone.create_role")
@@ -142,24 +129,23 @@ class KeystoneScenarioTestCase(test.ScenarioTestCase):
self._test_atomic_action_timer(scenario.atomic_actions(), self._test_atomic_action_timer(scenario.atomic_actions(),
"keystone.remove_role") "keystone.remove_role")
@mock.patch("rally.common.utils.generate_random_name") def test_tenant_create(self):
def test_tenant_create(self, mock_generate_random_name):
scenario = utils.KeystoneScenario(self.context) scenario = utils.KeystoneScenario(self.context)
scenario.generate_random_name = mock.Mock()
result = scenario._tenant_create() result = scenario._tenant_create()
self.assertEqual( self.assertEqual(
self.admin_clients("keystone").tenants.create.return_value, result) self.admin_clients("keystone").tenants.create.return_value, result)
self.admin_clients("keystone").tenants.create.assert_called_once_with( self.admin_clients("keystone").tenants.create.assert_called_once_with(
mock_generate_random_name.return_value) scenario.generate_random_name.return_value)
self._test_atomic_action_timer(scenario.atomic_actions(), self._test_atomic_action_timer(scenario.atomic_actions(),
"keystone.create_tenant") "keystone.create_tenant")
def test_service_create(self): def test_service_create(self):
service_type = "service_type" service_type = "service_type"
description = "_description" description = "description"
scenario = utils.KeystoneScenario(self.context) scenario = utils.KeystoneScenario(self.context)
scenario._generate_random_name = mock.Mock() scenario.generate_random_name = mock.Mock()
result = scenario._service_create(service_type=service_type, result = scenario._service_create(service_type=service_type,
description=description) description=description)
@@ -168,18 +154,17 @@ class KeystoneScenarioTestCase(test.ScenarioTestCase):
self.admin_clients("keystone").services.create.return_value, self.admin_clients("keystone").services.create.return_value,
result) result)
self.admin_clients("keystone").services.create.assert_called_once_with( self.admin_clients("keystone").services.create.assert_called_once_with(
scenario._generate_random_name.return_value, scenario.generate_random_name.return_value,
service_type, description) service_type, description)
self._test_atomic_action_timer(scenario.atomic_actions(), self._test_atomic_action_timer(scenario.atomic_actions(),
"keystone.create_service") "keystone.create_service")
@mock.patch("rally.common.utils.generate_random_name", def test_tenant_create_with_users(self):
return_value="foobarov")
def test_tenant_create_with_users(self, mock_generate_random_name):
tenant = mock.MagicMock() tenant = mock.MagicMock()
scenario = utils.KeystoneScenario(self.context) scenario = utils.KeystoneScenario(self.context)
scenario.generate_random_name = mock.Mock(return_value="foobarov")
scenario._users_create(tenant, users_per_tenant=1, name_length=10) scenario._users_create(tenant, users_per_tenant=1)
self.admin_clients("keystone").users.create.assert_called_once_with( self.admin_clients("keystone").users.create.assert_called_once_with(
"foobarov", password="foobarov", email="foobarov@rally.me", "foobarov", password="foobarov", email="foobarov@rally.me",
@@ -261,14 +246,15 @@ class KeystoneScenarioTestCase(test.ScenarioTestCase):
def test_update_tenant(self): def test_update_tenant(self):
tenant = mock.MagicMock() tenant = mock.MagicMock()
description = tenant.name + "_description_updated_test" description = "new description"
name = tenant.name + "test_updated_test"
scenario = utils.KeystoneScenario(self.context) scenario = utils.KeystoneScenario(self.context)
scenario._update_tenant(tenant=tenant, name=name, scenario.generate_random_name = mock.Mock()
description=description) scenario._update_tenant(tenant=tenant, description=description)
self.admin_clients("keystone").tenants.update.assert_called_once_with( self.admin_clients("keystone").tenants.update.assert_called_once_with(
tenant.id, name, description) tenant.id, scenario.generate_random_name.return_value,
description)
self._test_atomic_action_timer(scenario.atomic_actions(), self._test_atomic_action_timer(scenario.atomic_actions(),
"keystone.update_tenant") "keystone.update_tenant")