From d025cb8e68834ea60c727b3db21a63e2f97b6842 Mon Sep 17 00:00:00 2001
From: "Chris St. Pierre" <chris.a.st.pierre@gmail.com>
Date: Fri, 16 Oct 2015 07:46:25 -0500
Subject: [PATCH] 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
---
 rally-jobs/rally-mos.yaml                     | 19 ++---
 rally-jobs/rally.yaml                         | 26 +++----
 .../openstack/scenarios/keystone/basic.py     | 64 ++++++-----------
 .../openstack/scenarios/keystone/utils.py     | 40 +++++------
 .../keystone/create-and-delete-user.json      |  4 +-
 .../keystone/create-and-delete-user.yaml      |  3 +-
 .../keystone/create-and-list-tenants.json     |  4 +-
 .../keystone/create-and-list-tenants.yaml     |  3 +-
 .../keystone/create-and-list-users.json       |  4 +-
 .../keystone/create-and-list-users.yaml       |  3 +-
 .../keystone/create-tenant-with-users.json    |  1 -
 .../keystone/create-tenant-with-users.yaml    |  1 -
 .../scenarios/keystone/create-tenant.json     |  4 +-
 .../scenarios/keystone/create-tenant.yaml     |  3 +-
 .../create-update-and-delete-tenant.json      |  4 +-
 .../create-update-and-delete-tenant.yaml      |  3 +-
 .../tasks/scenarios/keystone/create-user.json |  4 +-
 .../tasks/scenarios/keystone/create-user.yaml |  3 +-
 samples/tasks/sla/create-and-delete-user.json |  4 +-
 samples/tasks/sla/create-and-delete-user.yaml |  3 +-
 tests/functional/test_cli_task.py             |  2 +-
 .../scenarios/keystone/test_basic.py          | 65 +++++++----------
 .../scenarios/keystone/test_utils.py          | 70 ++++++++-----------
 23 files changed, 119 insertions(+), 218 deletions(-)

diff --git a/rally-jobs/rally-mos.yaml b/rally-jobs/rally-mos.yaml
index f173e144..fb556093 100644
--- a/rally-jobs/rally-mos.yaml
+++ b/rally-jobs/rally-mos.yaml
@@ -2,8 +2,7 @@
 
   KeystoneBasic.create_user:
     -
-      args:
-        name_length: 10
+      args: {}
       runner:
         type: "constant"
         times: 1
@@ -14,8 +13,7 @@
 
   KeystoneBasic.create_delete_user:
     -
-      args:
-        name_length: 10
+      args: {}
       runner:
         type: "constant"
         times: 1
@@ -26,8 +24,7 @@
 
   KeystoneBasic.create_and_list_tenants:
     -
-      args:
-        name_length: 10
+      args: {}
       runner:
         type: "constant"
         times: 1
@@ -38,8 +35,7 @@
 
   KeystoneBasic.create_and_list_users:
     -
-      args:
-        name_length: 10
+      args: {}
       runner:
         type: "constant"
         times: 1
@@ -50,8 +46,7 @@
 
   KeystoneBasic.create_tenant:
     -
-      args:
-        name_length: 10
+      args: {}
       runner:
         type: "constant"
         times: 1
@@ -63,7 +58,6 @@
   KeystoneBasic.create_tenant_with_users:
     -
       args:
-        name_length: 10
         users_per_tenant: 10
       runner:
         type: "constant"
@@ -78,8 +72,7 @@
 
   KeystoneBasic.create_delete_user:
     -
-      args:
-        name_length: 10
+      args: {}
       runner:
         type: "constant"
         times: 1
diff --git a/rally-jobs/rally.yaml b/rally-jobs/rally.yaml
index 24168af5..3e5b7ddd 100644
--- a/rally-jobs/rally.yaml
+++ b/rally-jobs/rally.yaml
@@ -1,8 +1,7 @@
 ---
   KeystoneBasic.create_user:
     -
-      args:
-        name_length: 10
+      args: {}
       runner:
         type: "constant"
         times: 10
@@ -13,8 +12,7 @@
 
   KeystoneBasic.create_delete_user:
     -
-      args:
-        name_length: 10
+      args: {}
       runner:
         type: "constant"
         times: 10
@@ -47,8 +45,7 @@
 
   KeystoneBasic.create_and_list_tenants:
     -
-      args:
-        name_length: 10
+      args: {}
       runner:
         type: "constant"
         times: 10
@@ -127,8 +124,7 @@
 
   KeystoneBasic.create_and_list_users:
     -
-      args:
-        name_length: 10
+      args: {}
       runner:
         type: "constant"
         times: 10
@@ -139,8 +135,7 @@
 
   KeystoneBasic.create_tenant:
     -
-      args:
-        name_length: 10
+      args: {}
       runner:
         type: "constant"
         times: 10
@@ -152,7 +147,6 @@
   KeystoneBasic.create_tenant_with_users:
     -
       args:
-        name_length: 10
         users_per_tenant: 10
       runner:
         type: "constant"
@@ -167,9 +161,7 @@
 
   KeystoneBasic.create_user_update_password:
     -
-      args:
-        name_length: 10
-        password_length: 10
+      args: {}
       runner:
         type: "constant"
         times: 10
@@ -180,8 +172,7 @@
 
   KeystoneBasic.create_update_and_delete_tenant:
     -
-      args:
-        name_length: 10
+      args: {}
       runner:
         type: "constant"
         times: 10
@@ -192,8 +183,7 @@
 
   KeystoneBasic.create_delete_user:
     -
-      args:
-        name_length: 10
+      args: {}
       runner:
         type: "constant"
         times: 10
diff --git a/rally/plugins/openstack/scenarios/keystone/basic.py b/rally/plugins/openstack/scenarios/keystone/basic.py
index 38c37f37..074c0807 100644
--- a/rally/plugins/openstack/scenarios/keystone/basic.py
+++ b/rally/plugins/openstack/scenarios/keystone/basic.py
@@ -22,29 +22,25 @@ from rally.task import validation
 class KeystoneBasic(kutils.KeystoneScenario):
     """Basic benchmark scenarios for Keystone."""
 
-    @validation.number("name_length", minval=10)
     @validation.required_openstack(admin=True)
     @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.
 
-        :param name_length: length of the random part of user name
         :param kwargs: Other optional parameters to create users like
                          "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)
     @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.
 
-        :param name_length: length of the random part of user name
         :param kwargs: Other optional parameters to create users like
                          "tenant_id", "enabled".
         """
-        user = self._user_create(name_length=name_length, **kwargs)
+        user = self._user_create(**kwargs)
         self._resource_delete(user)
 
     @validation.required_openstack(admin=True)
@@ -61,57 +57,47 @@ class KeystoneBasic(kutils.KeystoneScenario):
         self._update_user_enabled(user, not enabled)
         self._resource_delete(user)
 
-    @validation.number("name_length", minval=10)
     @validation.required_openstack(admin=True)
     @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.
 
-        :param name_length: length of the random part of tenant name
         :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.required_openstack(admin=True)
     @scenario.configure(context={"admin_cleanup": ["keystone"]})
-    def create_tenant_with_users(self, users_per_tenant, name_length=10,
-                                 **kwargs):
+    def create_tenant_with_users(self, users_per_tenant, **kwargs):
         """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 kwargs: Other optional parameters for tenant creation
         :returns: keystone tenant instance
         """
-        tenant = self._tenant_create(name_length=name_length, **kwargs)
-        self._users_create(tenant, users_per_tenant=users_per_tenant,
-                           name_length=name_length)
+        tenant = self._tenant_create(**kwargs)
+        self._users_create(tenant, users_per_tenant=users_per_tenant)
 
-    @validation.number("name_length", minval=10)
     @validation.required_openstack(admin=True)
     @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.
 
-        :param name_length: length of the random part of user name
         :param kwargs: Other optional parameters to create users like
                          "tenant_id", "enabled".
         """
-        self._user_create(name_length=name_length, **kwargs)
+        self._user_create(**kwargs)
         self._list_users()
 
-    @validation.number("name_length", minval=10)
     @validation.required_openstack(admin=True)
     @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.
 
-        :param name_length: length of the random part of tenant name
         :param kwargs: Other optional parameters
         """
-        self._tenant_create(name_length=name_length, **kwargs)
+        self._tenant_create(**kwargs)
         self._list_tenants()
 
     @validation.required_openstack(admin=True, users=True)
@@ -157,8 +143,8 @@ class KeystoneBasic(kutils.KeystoneScenario):
                              None, to create an ephemeral service and
                              get it by ID.
         """
-        tenant = self._tenant_create(name_length=5)
-        user = self._user_create(name_length=10)
+        tenant = self._tenant_create()
+        user = self._user_create()
         role = self._role_create()
         self._get_tenant(tenant.id)
         self._get_user(user.id)
@@ -184,31 +170,23 @@ class KeystoneBasic(kutils.KeystoneScenario):
         service = self._service_create(service_type, description)
         self._delete_service(service.id)
 
-    @validation.number("name_length", minval=10)
     @validation.required_openstack(admin=True)
     @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.
 
-        :param name_length: length of the random part of tenant name
         :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._resource_delete(tenant)
 
-    @validation.number("password_length", minval=10)
-    @validation.number("name_length", minval=10)
     @validation.required_openstack(admin=True)
     @scenario.configure(context={"admin_cleanup": ["keystone"]})
-    def create_user_update_password(self, name_length=10, password_length=10):
-        """Create user and update password for that user.
-
-        :param name_length: length of the user name
-        :param password_length: length of the password
-        """
-        password = self._generate_random_name(length=password_length)
-        user = self._user_create(name_length=name_length)
+    def create_user_update_password(self):
+        """Create user and update password for that user."""
+        password = self.generate_random_name()
+        user = self._user_create()
         self._update_user_password(user.id, password)
 
     @validation.required_openstack(admin=True)
diff --git a/rally/plugins/openstack/scenarios/keystone/utils.py b/rally/plugins/openstack/scenarios/keystone/utils.py
index 94741b00..816345a6 100644
--- a/rally/plugins/openstack/scenarios/keystone/utils.py
+++ b/rally/plugins/openstack/scenarios/keystone/utils.py
@@ -15,29 +15,27 @@
 
 import uuid
 
+from rally.common import utils
 from rally.plugins.openstack import scenario
 from rally.task import atomic
 
 
 def is_temporary(resource):
-    return resource.name.startswith(KeystoneScenario.RESOURCE_NAME_PREFIX)
+    return utils.name_matches_object(resource.name, KeystoneScenario)
 
 
 class KeystoneScenario(scenario.OpenStackScenario):
     """Base class for Keystone scenarios with basic atomic actions."""
 
-    RESOURCE_NAME_PREFIX = "rally_keystone_"
-
     @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.
 
-        :param name_length: length of generated (random) part of name
         :param kwargs: Other optional parameters to create users like
                         "tenant_id", "enabled".
         :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
         #                 keystone client v2.0. This should be cleanuped
         #                 when we switch to v3.
@@ -63,14 +61,13 @@ class KeystoneScenario(scenario.OpenStackScenario):
             resource.delete()
 
     @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.
 
-        :param name_length: length of generated (random) part of name
         :param kwargs: Other optional parameters
         :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)
 
     @atomic.action_timer("keystone.create_service")
@@ -78,41 +75,37 @@ class KeystoneScenario(scenario.OpenStackScenario):
                         description=None):
         """Creates keystone service with random name.
 
-        :param name: name of the service
         :param service_type: type of the service
         :param description: description of the service
         :returns: keystone service instance
         """
-        description = description or self._generate_random_name(
-            prefix="rally_test_service_description_")
+        description = description or self.generate_random_name()
         return self.admin_clients("keystone").services.create(
-            self._generate_random_name(),
+            self.generate_random_name(),
             service_type, description)
 
     @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.
 
         :param tenant: tenant object
         :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):
-            name = self._generate_random_name(length=name_length)
+            name = self.generate_random_name()
             password = name
-            email = (name + "@rally.me")
+            email = name + "@rally.me"
             self.admin_clients("keystone").users.create(
                 name, password=password, email=email, tenant_id=tenant.id)
 
     @atomic.action_timer("keystone.create_role")
-    def _role_create(self, name_length=5):
+    def _role_create(self):
         """Creates keystone user role with random name.
 
-        :param name_length: length of generated (random) part of role name
         :returns: keystone user role instance
         """
         role = self.admin_clients("keystone").roles.create(
-            self._generate_random_name(length=name_length))
+            self.generate_random_name())
         return role
 
     @atomic.action_timer("keystone.list_users")
@@ -207,15 +200,14 @@ class KeystoneScenario(scenario.OpenStackScenario):
         self.admin_clients("keystone").services.delete(service_id)
 
     @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.
 
         :param tenant: tenant to be updated
-        :param name: tenant name to be set
         :param description: tenant description to be set
         """
-        name = name or (tenant.name + "_updated")
-        description = description or (tenant.name + "_description_updated")
+        name = self.generate_random_name()
+        description = description or self.generate_random_name()
         self.admin_clients("keystone").tenants.update(tenant.id,
                                                       name, description)
 
diff --git a/samples/tasks/scenarios/keystone/create-and-delete-user.json b/samples/tasks/scenarios/keystone/create-and-delete-user.json
index df19d5d7..c21b7327 100644
--- a/samples/tasks/scenarios/keystone/create-and-delete-user.json
+++ b/samples/tasks/scenarios/keystone/create-and-delete-user.json
@@ -1,9 +1,7 @@
 {
     "KeystoneBasic.create_delete_user": [
         {
-            "args": {
-                "name_length": 10
-            },
+            "args": {},
             "runner": {
                 "type": "constant",
                 "times": 100,
diff --git a/samples/tasks/scenarios/keystone/create-and-delete-user.yaml b/samples/tasks/scenarios/keystone/create-and-delete-user.yaml
index 1b69dfc8..c518fc09 100644
--- a/samples/tasks/scenarios/keystone/create-and-delete-user.yaml
+++ b/samples/tasks/scenarios/keystone/create-and-delete-user.yaml
@@ -1,8 +1,7 @@
 ---
   KeystoneBasic.create_delete_user:
     -
-      args:
-        name_length: 10
+      args: {}
       runner:
         type: "constant"
         times: 100
diff --git a/samples/tasks/scenarios/keystone/create-and-list-tenants.json b/samples/tasks/scenarios/keystone/create-and-list-tenants.json
index 6cb8bae7..b23fb49a 100644
--- a/samples/tasks/scenarios/keystone/create-and-list-tenants.json
+++ b/samples/tasks/scenarios/keystone/create-and-list-tenants.json
@@ -1,9 +1,7 @@
 {
     "KeystoneBasic.create_and_list_tenants": [
         {
-            "args": {
-                "name_length": 10
-            },
+            "args": {},
             "runner": {
                 "type": "constant",
                 "times": 10,
diff --git a/samples/tasks/scenarios/keystone/create-and-list-tenants.yaml b/samples/tasks/scenarios/keystone/create-and-list-tenants.yaml
index f1279465..d18c9eb9 100644
--- a/samples/tasks/scenarios/keystone/create-and-list-tenants.yaml
+++ b/samples/tasks/scenarios/keystone/create-and-list-tenants.yaml
@@ -1,8 +1,7 @@
 ---
   KeystoneBasic.create_and_list_tenants:
     -
-      args:
-        name_length: 10
+      args: {}
       runner:
         type: "constant"
         times: 10
diff --git a/samples/tasks/scenarios/keystone/create-and-list-users.json b/samples/tasks/scenarios/keystone/create-and-list-users.json
index e88e79e1..ed7532c9 100644
--- a/samples/tasks/scenarios/keystone/create-and-list-users.json
+++ b/samples/tasks/scenarios/keystone/create-and-list-users.json
@@ -1,9 +1,7 @@
 {
     "KeystoneBasic.create_and_list_users": [
         {
-            "args": {
-                "name_length": 10
-            },
+            "args": {},
             "runner": {
                 "type": "constant",
                 "times": 100,
diff --git a/samples/tasks/scenarios/keystone/create-and-list-users.yaml b/samples/tasks/scenarios/keystone/create-and-list-users.yaml
index 944a9f23..6bfd8791 100644
--- a/samples/tasks/scenarios/keystone/create-and-list-users.yaml
+++ b/samples/tasks/scenarios/keystone/create-and-list-users.yaml
@@ -1,8 +1,7 @@
 ---
   KeystoneBasic.create_and_list_users:
     -
-      args:
-        name_length: 10
+      args: {}
       runner:
         type: "constant"
         times: 100
diff --git a/samples/tasks/scenarios/keystone/create-tenant-with-users.json b/samples/tasks/scenarios/keystone/create-tenant-with-users.json
index 59fdbffe..2f63c29a 100644
--- a/samples/tasks/scenarios/keystone/create-tenant-with-users.json
+++ b/samples/tasks/scenarios/keystone/create-tenant-with-users.json
@@ -2,7 +2,6 @@
     "KeystoneBasic.create_tenant_with_users": [
         {
             "args": {
-                "name_length": 10,
                 "users_per_tenant": 10
             },
             "runner": {
diff --git a/samples/tasks/scenarios/keystone/create-tenant-with-users.yaml b/samples/tasks/scenarios/keystone/create-tenant-with-users.yaml
index 5ee52493..402e7fd3 100644
--- a/samples/tasks/scenarios/keystone/create-tenant-with-users.yaml
+++ b/samples/tasks/scenarios/keystone/create-tenant-with-users.yaml
@@ -2,7 +2,6 @@
   KeystoneBasic.create_tenant_with_users:
     -
       args:
-        name_length: 10
         users_per_tenant: 10
       runner:
         type: "constant"
diff --git a/samples/tasks/scenarios/keystone/create-tenant.json b/samples/tasks/scenarios/keystone/create-tenant.json
index 603c1dcd..dc3690e1 100644
--- a/samples/tasks/scenarios/keystone/create-tenant.json
+++ b/samples/tasks/scenarios/keystone/create-tenant.json
@@ -1,9 +1,7 @@
 {
     "KeystoneBasic.create_tenant": [
         {
-            "args": {
-                "name_length": 10
-            },
+            "args": {},
             "runner": {
                 "type": "constant",
                 "times": 100,
diff --git a/samples/tasks/scenarios/keystone/create-tenant.yaml b/samples/tasks/scenarios/keystone/create-tenant.yaml
index af52a575..bd60e8a1 100644
--- a/samples/tasks/scenarios/keystone/create-tenant.yaml
+++ b/samples/tasks/scenarios/keystone/create-tenant.yaml
@@ -1,8 +1,7 @@
 ---
   KeystoneBasic.create_tenant:
     -
-      args:
-        name_length: 10
+      args: {}
       runner:
         type: "constant"
         times: 100
diff --git a/samples/tasks/scenarios/keystone/create-update-and-delete-tenant.json b/samples/tasks/scenarios/keystone/create-update-and-delete-tenant.json
index a2b36f28..9562faaa 100644
--- a/samples/tasks/scenarios/keystone/create-update-and-delete-tenant.json
+++ b/samples/tasks/scenarios/keystone/create-update-and-delete-tenant.json
@@ -1,9 +1,7 @@
 {
     "KeystoneBasic.create_update_and_delete_tenant": [
     {
-            "args": {
-                "name_length": 10
-            },
+            "args": {},
             "runner": {
                 "type": "constant",
                 "times": 100,
diff --git a/samples/tasks/scenarios/keystone/create-update-and-delete-tenant.yaml b/samples/tasks/scenarios/keystone/create-update-and-delete-tenant.yaml
index 2cb33c83..bac1f44c 100644
--- a/samples/tasks/scenarios/keystone/create-update-and-delete-tenant.yaml
+++ b/samples/tasks/scenarios/keystone/create-update-and-delete-tenant.yaml
@@ -1,8 +1,7 @@
 ---
   KeystoneBasic.create_update_and_delete_tenant:
     -
-      args:
-        name_length: 10
+      args: {}
       runner:
         type: "constant"
         times: 100
diff --git a/samples/tasks/scenarios/keystone/create-user.json b/samples/tasks/scenarios/keystone/create-user.json
index b90642dd..8aa6bca2 100644
--- a/samples/tasks/scenarios/keystone/create-user.json
+++ b/samples/tasks/scenarios/keystone/create-user.json
@@ -1,9 +1,7 @@
 {
     "KeystoneBasic.create_user": [
         {
-            "args": {
-                "name_length": 10
-            },
+            "args": {},
             "runner": {
                 "type": "constant",
                 "times": 100,
diff --git a/samples/tasks/scenarios/keystone/create-user.yaml b/samples/tasks/scenarios/keystone/create-user.yaml
index 5e9f2dee..9ed26a24 100644
--- a/samples/tasks/scenarios/keystone/create-user.yaml
+++ b/samples/tasks/scenarios/keystone/create-user.yaml
@@ -1,8 +1,7 @@
 ---
   KeystoneBasic.create_user:
     -
-      args:
-        name_length: 10
+      args: {}
       runner:
         type: "constant"
         times: 100
diff --git a/samples/tasks/sla/create-and-delete-user.json b/samples/tasks/sla/create-and-delete-user.json
index 38d42755..534a097d 100644
--- a/samples/tasks/sla/create-and-delete-user.json
+++ b/samples/tasks/sla/create-and-delete-user.json
@@ -1,9 +1,7 @@
 {
     "KeystoneBasic.create_delete_user": [
         {
-            "args": {
-                "name_length": 10
-            },
+            "args": {},
             "runner": {
                 "type": "constant",
                 "times": 100,
diff --git a/samples/tasks/sla/create-and-delete-user.yaml b/samples/tasks/sla/create-and-delete-user.yaml
index 4d32ece4..e15bd8fb 100644
--- a/samples/tasks/sla/create-and-delete-user.yaml
+++ b/samples/tasks/sla/create-and-delete-user.yaml
@@ -1,8 +1,7 @@
 ---
   KeystoneBasic.create_delete_user:
     -
-      args:
-        name_length: 10
+      args: {}
       runner:
         type: "constant"
         times: 100
diff --git a/tests/functional/test_cli_task.py b/tests/functional/test_cli_task.py
index c8766c2b..574b2fe7 100644
--- a/tests/functional/test_cli_task.py
+++ b/tests/functional/test_cli_task.py
@@ -722,7 +722,7 @@ class SLATestCase(unittest.TestCase):
             "KeystoneBasic.create_and_list_users": [
                 {
                     "args": {
-                        "name_length": 10
+                        "enabled": True
                     },
                     "runner": {
                         "type": "constant",
diff --git a/tests/unit/plugins/openstack/scenarios/keystone/test_basic.py b/tests/unit/plugins/openstack/scenarios/keystone/test_basic.py
index 32d353ae..b05fcabe 100644
--- a/tests/unit/plugins/openstack/scenarios/keystone/test_basic.py
+++ b/tests/unit/plugins/openstack/scenarios/keystone/test_basic.py
@@ -36,27 +36,23 @@ class KeystoneBasicTestCase(test.ScenarioTestCase):
         })
         return context
 
-    @mock.patch("rally.common.utils.generate_random_name")
-    def test_create_user(self, mock_generate_random_name):
+    def test_create_user(self):
         scenario = basic.KeystoneBasic(self.context)
         scenario._user_create = mock.MagicMock()
-        scenario.create_user(name_length=20, password="tttt", tenant_id="id")
-        scenario._user_create.assert_called_once_with(name_length=20,
-                                                      password="tttt",
+        scenario.create_user(password="tttt", tenant_id="id")
+        scenario._user_create.assert_called_once_with(password="tttt",
                                                       tenant_id="id")
 
-    @mock.patch("rally.common.utils.generate_random_name")
-    def test_create_delete_user(self, mock_generate_random_name):
+    def test_create_delete_user(self):
         create_result = mock.MagicMock()
 
         scenario = basic.KeystoneBasic(self.context)
         scenario._user_create = mock.MagicMock(return_value=create_result)
         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,
-                                                      email="abcd",
+        scenario._user_create.assert_called_once_with(email="abcd",
                                                       enabled=True)
         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._user_create.return_value)
 
-    @mock.patch("rally.common.utils.generate_random_name")
-    def test_create_tenant(self, mock_generate_random_name):
+    def test_create_tenant(self):
         scenario = basic.KeystoneBasic(self.context)
         scenario._tenant_create = mock.MagicMock()
-        scenario.create_tenant(name_length=20, enabled=True)
-        scenario._tenant_create.assert_called_once_with(name_length=20,
-                                                        enabled=True)
+        scenario.create_tenant(enabled=True)
+        scenario._tenant_create.assert_called_once_with(enabled=True)
 
-    @mock.patch("rally.common.utils.generate_random_name")
-    def test_create_tenant_with_users(self, mock_generate_random_name):
+    def test_create_tenant_with_users(self):
         scenario = basic.KeystoneBasic(self.context)
         fake_tenant = mock.MagicMock()
         scenario._tenant_create = mock.MagicMock(return_value=fake_tenant)
         scenario._users_create = mock.MagicMock()
-        scenario.create_tenant_with_users(users_per_tenant=1, name_length=20,
-                                          enabled=True)
-        scenario._tenant_create.assert_called_once_with(name_length=20,
-                                                        enabled=True)
+        scenario.create_tenant_with_users(users_per_tenant=1, enabled=True)
+        scenario._tenant_create.assert_called_once_with(enabled=True)
         scenario._users_create.assert_called_once_with(fake_tenant,
-                                                       users_per_tenant=1,
-                                                       name_length=20)
+                                                       users_per_tenant=1)
 
-    @mock.patch("rally.common.utils.generate_random_name")
-    def test_create_and_list_users(self, mock_generate_random_name):
+    def test_create_and_list_users(self):
         scenario = basic.KeystoneBasic(self.context)
         scenario._user_create = mock.MagicMock()
         scenario._list_users = mock.MagicMock()
-        scenario.create_and_list_users(name_length=20, password="tttt",
-                                       tenant_id="id")
-        scenario._user_create.assert_called_once_with(name_length=20,
-                                                      password="tttt",
+        scenario.create_and_list_users(password="tttt", tenant_id="id")
+        scenario._user_create.assert_called_once_with(password="tttt",
                                                       tenant_id="id")
         scenario._list_users.assert_called_once_with()
 
-    @mock.patch("rally.common.utils.generate_random_name")
-    def test_create_and_list_tenants(self, mock_generate_random_name):
+    def test_create_and_list_tenants(self):
         scenario = basic.KeystoneBasic(self.context)
         scenario._tenant_create = mock.MagicMock()
         scenario._list_tenants = mock.MagicMock()
-        scenario.create_and_list_tenants(name_length=20, enabled=True)
-        scenario._tenant_create.assert_called_once_with(name_length=20,
-                                                        enabled=True)
+        scenario.create_and_list_tenants(enabled=True)
+        scenario._tenant_create.assert_called_once_with(enabled=True)
         scenario._list_tenants.assert_called_with()
 
     def test_assign_and_remove_user_role(self):
@@ -187,8 +172,8 @@ class KeystoneBasicTestCase(test.ScenarioTestCase):
 
         scenario.get_entities(service_name)
 
-        scenario._tenant_create.assert_called_once_with(name_length=5)
-        scenario._user_create.assert_called_once_with(name_length=10)
+        scenario._tenant_create.assert_called_once_with()
+        scenario._user_create.assert_called_once_with()
         scenario._role_create.assert_called_once_with()
 
         scenario._get_tenant.assert_called_once_with(fake_tenant.id)
@@ -240,13 +225,13 @@ class KeystoneBasicTestCase(test.ScenarioTestCase):
         fake_password = "pswd"
         fake_user = mock.MagicMock()
         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)
         scenario._update_user_password = mock.MagicMock()
 
-        scenario.create_user_update_password(name_length=9, password_length=9)
-        scenario._generate_random_name.assert_called_once_with(length=9)
-        scenario._user_create.assert_called_once_with(name_length=9)
+        scenario.create_user_update_password()
+        scenario.generate_random_name.assert_called_once_with()
+        scenario._user_create.assert_called_once_with()
         scenario._update_user_password.assert_called_once_with(fake_user.id,
                                                                fake_password)
 
diff --git a/tests/unit/plugins/openstack/scenarios/keystone/test_utils.py b/tests/unit/plugins/openstack/scenarios/keystone/test_utils.py
index 8f728aa0..069e4692 100644
--- a/tests/unit/plugins/openstack/scenarios/keystone/test_utils.py
+++ b/tests/unit/plugins/openstack/scenarios/keystone/test_utils.py
@@ -14,7 +14,6 @@
 #    under the License.
 
 import mock
-import six
 
 from rally.plugins.openstack.scenarios.keystone import utils
 from tests.unit import fakes
@@ -25,33 +24,21 @@ UTILS = "rally.plugins.openstack.scenarios.keystone.utils."
 
 class KeystoneUtilsTestCase(test.TestCase):
 
-    def test_RESOURCE_NAME_PREFIX(self):
-        self.assertIsInstance(utils.KeystoneScenario.RESOURCE_NAME_PREFIX,
-                              six.string_types)
-        # Prefix must be long enough to guarantee that resource
-        # to be recognized as created by rally
-        self.assertTrue(
-            len(utils.KeystoneScenario.RESOURCE_NAME_PREFIX) > 7)
-
-    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)
+    @mock.patch("rally.common.utils.name_matches_object")
+    def test_is_temporary(self, mock_name_matches_object):
+        resource = mock.Mock()
+        self.assertEqual(utils.is_temporary(resource),
+                         mock_name_matches_object.return_value)
+        mock_name_matches_object.assert_called_once_with(
+            resource.name, utils.KeystoneScenario)
 
 
 class KeystoneScenarioTestCase(test.ScenarioTestCase):
 
-    @mock.patch(UTILS + "uuid.uuid4", return_value="pwd")
-    @mock.patch("rally.common.utils.generate_random_name",
-                return_value="foobarov")
-    def test_user_create(self, mock_generate_random_name, mock_uuid4):
+    @mock.patch("uuid.uuid4", return_value="pwd")
+    def test_user_create(self, mock_uuid4):
         scenario = utils.KeystoneScenario(self.context)
+        scenario.generate_random_name = mock.Mock(return_value="foobarov")
         result = scenario._user_create()
 
         self.assertEqual(
@@ -77,15 +64,15 @@ class KeystoneScenarioTestCase(test.ScenarioTestCase):
         self._test_atomic_action_timer(scenario.atomic_actions(),
                                        "keystone.update_user_enabled")
 
-    @mock.patch("rally.common.utils.generate_random_name")
-    def test_role_create(self, mock_generate_random_name):
+    def test_role_create(self):
         scenario = utils.KeystoneScenario(self.context)
+        scenario.generate_random_name = mock.Mock()
         result = scenario._role_create()
 
         self.assertEqual(
             self.admin_clients("keystone").roles.create.return_value, result)
         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(),
                                        "keystone.create_role")
 
@@ -142,24 +129,23 @@ class KeystoneScenarioTestCase(test.ScenarioTestCase):
         self._test_atomic_action_timer(scenario.atomic_actions(),
                                        "keystone.remove_role")
 
-    @mock.patch("rally.common.utils.generate_random_name")
-    def test_tenant_create(self, mock_generate_random_name):
+    def test_tenant_create(self):
         scenario = utils.KeystoneScenario(self.context)
+        scenario.generate_random_name = mock.Mock()
         result = scenario._tenant_create()
 
         self.assertEqual(
             self.admin_clients("keystone").tenants.create.return_value, result)
         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(),
                                        "keystone.create_tenant")
 
     def test_service_create(self):
         service_type = "service_type"
-        description = "_description"
-
+        description = "description"
         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,
                                           description=description)
@@ -168,18 +154,17 @@ class KeystoneScenarioTestCase(test.ScenarioTestCase):
             self.admin_clients("keystone").services.create.return_value,
             result)
         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)
         self._test_atomic_action_timer(scenario.atomic_actions(),
                                        "keystone.create_service")
 
-    @mock.patch("rally.common.utils.generate_random_name",
-                return_value="foobarov")
-    def test_tenant_create_with_users(self, mock_generate_random_name):
+    def test_tenant_create_with_users(self):
         tenant = mock.MagicMock()
         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(
             "foobarov", password="foobarov", email="foobarov@rally.me",
@@ -261,14 +246,15 @@ class KeystoneScenarioTestCase(test.ScenarioTestCase):
 
     def test_update_tenant(self):
         tenant = mock.MagicMock()
-        description = tenant.name + "_description_updated_test"
-        name = tenant.name + "test_updated_test"
+        description = "new description"
+
         scenario = utils.KeystoneScenario(self.context)
-        scenario._update_tenant(tenant=tenant, name=name,
-                                description=description)
+        scenario.generate_random_name = mock.Mock()
+        scenario._update_tenant(tenant=tenant, description=description)
 
         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(),
                                        "keystone.update_tenant")