Add a rule for blocking "-" from rand_name call

data_utils.rand_name() appends randam charactors with a hypen like:

 def rand_name(name=''):
     randbits = str(random.randint(1, 0x7fffffff))
     if name:
         return name + '-' + randbits

So it is not necessary to specify a hypen in caller side.
This patch adds a hacking rule for blocking "-" at the end of argument
of rand_name() calls.

Change-Id: I9b9f25dbe5a3ef5ac5900113bcc46e0d911becc9
This commit is contained in:
Ken'ichi Ohmichi 2015-04-06 23:41:14 +00:00
parent b93e67690c
commit 80369a96a2
9 changed files with 33 additions and 8 deletions

View File

@ -14,6 +14,7 @@ Tempest Specific Commandments
- [T105] Tests cannot use setUpClass/tearDownClass
- [T106] vim configuration should not be kept in source files.
- [T107] Check that a service tag isn't in the module path
- [T108] Check no hyphen at the end of rand_name() argument
- [N322] Method's default argument shouldn't be mutable
Test Data/Configuration

View File

@ -101,7 +101,7 @@ class DomainsTestJSON(base.BaseIdentityV3AdminTest):
@test.idempotent_id('2abf8764-309a-4fa9-bc58-201b799817ad')
def test_create_domain_without_description(self):
# Create domain only with name
d_name = data_utils.rand_name('domain-')
d_name = data_utils.rand_name('domain')
domain = self.client.create_domain(d_name)
self.addCleanup(self._delete_domain, domain['id'])
self.assertIn('id', domain)

View File

@ -46,7 +46,7 @@ class BaseTrustsV3Test(base.BaseIdentityV3AdminTest):
def create_trustor_and_roles(self):
# create a project that trusts will be granted on
self.trustor_project_name = data_utils.rand_name(name='project-')
self.trustor_project_name = data_utils.rand_name(name='project')
project = self.client.create_project(self.trustor_project_name,
domain_id='default')
self.trustor_project_id = project['id']

View File

@ -33,7 +33,7 @@ class TestQueues(base.BaseMessagingTest):
@test.idempotent_id('9f1c4c72-80c5-4dac-acf3-188cef42e36c')
def test_create_delete_queue(self):
# Create & Delete Queue
queue_name = data_utils.rand_name('test-')
queue_name = data_utils.rand_name('test')
_, body = self.create_queue(queue_name)
self.addCleanup(self.client.delete_queue, queue_name)

View File

@ -827,8 +827,8 @@ class ObjectTest(base.BaseObjectTest):
resp, _ = self.object_client.create_object(src_container_name,
object_name, data)
# set object metadata
meta_key = data_utils.rand_name(name='test-')
meta_value = data_utils.rand_name(name='MetaValue-')
meta_key = data_utils.rand_name(name='test')
meta_value = data_utils.rand_name(name='MetaValue')
orig_metadata = {meta_key: meta_value}
resp, _ = self.object_client.update_object_metadata(src_container_name,
object_name,

View File

@ -98,7 +98,7 @@ class BaseVolumeQuotasAdminV2TestJSON(base.BaseVolumeAdminTest):
@test.idempotent_id('874b35a9-51f1-4258-bec5-cd561b6690d3')
def test_delete_quota(self):
# Admin can delete the resource quota set for a tenant
tenant_name = data_utils.rand_name('quota_tenant_')
tenant_name = data_utils.rand_name('quota_tenant')
identity_client = self.os_adm.identity_client
tenant = identity_client.create_tenant(tenant_name)
tenant_id = tenant['id']

View File

@ -27,6 +27,7 @@ TEST_DEFINITION = re.compile(r'^\s*def test.*')
SETUP_TEARDOWN_CLASS_DEFINITION = re.compile(r'^\s+def (setUp|tearDown)Class')
SCENARIO_DECORATOR = re.compile(r'\s*@.*services\((.*)\)')
VI_HEADER_RE = re.compile(r"^#\s+vim?:.+")
RAND_NAME_HYPHEN_RE = re.compile(r".*rand_name\(.+[\-\_][\"\']\)")
mutable_default_args = re.compile(r"^\s*def .+\((.+=\{\}|.+=\[\])")
@ -106,6 +107,21 @@ def service_tags_not_in_module_path(physical_line, filename):
"T107: service tag should not be in path")
def no_hyphen_at_end_of_rand_name(logical_line, filename):
"""Check no hyphen at the end of rand_name() argument
T108
"""
if './tempest/api/network/' in filename:
# Network API tests are migrating from Tempest to Neutron repo now.
# So here should avoid network API tests checks.
return
msg = "T108: hyphen should not be specified at the end of rand_name()"
if RAND_NAME_HYPHEN_RE.match(logical_line):
return 0, msg
def no_mutable_default_args(logical_line):
"""Check that mutable object isn't used as default argument
@ -122,4 +138,5 @@ def factory(register):
register(no_setup_teardown_class_for_tests)
register(no_vi_headers)
register(service_tags_not_in_module_path)
register(no_hyphen_at_end_of_rand_name)
register(no_mutable_default_args)

View File

@ -91,8 +91,8 @@ class FloatingStress(stressaction.StressAction):
def _create_sec_group(self):
sec_grp_cli = self.manager.security_groups_client
s_name = data_utils.rand_name('sec_grp-')
s_description = data_utils.rand_name('desc-')
s_name = data_utils.rand_name('sec_grp')
s_description = data_utils.rand_name('desc')
self.sec_grp = sec_grp_cli.create_security_group(s_name,
s_description)
create_rule = sec_grp_cli.create_security_group_rule

View File

@ -119,6 +119,13 @@ class HackingTestCase(base.TestCase):
self.assertFalse(checks.service_tags_not_in_module_path(
"@test.services('compute')", './tempest/api/image/fake_test.py'))
def test_no_hyphen_at_end_of_rand_name(self):
self.assertIsNone(checks.no_hyphen_at_end_of_rand_name(
'data_utils.rand_name("fake-resource")', './tempest/test_foo.py'))
self.assertEqual(2, len(list(checks.no_hyphen_at_end_of_rand_name(
'data_utils.rand_name("fake-resource-")', './tempest/test_foo.py')
)))
def test_no_mutable_default_args(self):
self.assertEqual(1, len(list(checks.no_mutable_default_args(
" def function1(para={}):"))))