Prepare tests to moving validators to 'openstack/validators.py'

Change-Id: I8ae17f57afdb2129fc39452f19b3c24bbabb53a9
This commit is contained in:
astaroverov 2017-04-17 13:02:16 +03:00 committed by Staroverov Anton
parent 3e66c8f2b0
commit 5f083986ad
5 changed files with 49 additions and 45 deletions

View File

@ -20,9 +20,12 @@ from rally.plugins.openstack.cleanup import manager
@validation.configure("check_cleanup_resources") @validation.configure("check_cleanup_resources")
class CheckCleanupResourcesValidator(validation.Validator): class CheckCleanupResourcesValidator(validation.Validator):
"""Validates that openstack resource managers exist"""
def __init__(self, admin_required): def __init__(self, admin_required):
"""Validates that openstack resource managers exist
:param admin_required: describes access level to resource
"""
super(CheckCleanupResourcesValidator, self).__init__() super(CheckCleanupResourcesValidator, self).__init__()
self.admin_required = admin_required self.admin_required = admin_required

View File

@ -24,6 +24,7 @@ LOG = logging.getLogger(__name__)
@context.configure(name="lbaas", order=360) @context.configure(name="lbaas", order=360)
class Lbaas(context.Context): class Lbaas(context.Context):
"""Creates a lb-pool for every subnet created in network context."""
CONFIG_SCHEMA = { CONFIG_SCHEMA = {
"type": "object", "type": "object",
"$schema": consts.JSON_SCHEMA, "$schema": consts.JSON_SCHEMA,

View File

@ -25,6 +25,7 @@ LOG = logging.getLogger(__name__)
@context.configure(name="keypair", order=310) @context.configure(name="keypair", order=310)
class Keypair(context.Context): class Keypair(context.Context):
"""Create Nova KeyPair for each user."""
# NOTE(andreykurilin): "type" != "null", since we need to support backward # NOTE(andreykurilin): "type" != "null", since we need to support backward
# compatibility(previously empty dict was valid) and I hope in near # compatibility(previously empty dict was valid) and I hope in near

View File

@ -25,6 +25,7 @@ LOG = logging.getLogger(__name__)
@context.configure(name="swift_objects", order=360) @context.configure(name="swift_objects", order=360)
class SwiftObjectGenerator(swift_utils.SwiftObjectMixin, context.Context): class SwiftObjectGenerator(swift_utils.SwiftObjectMixin, context.Context):
"""Create containers and objects in each tenant."""
CONFIG_SCHEMA = { CONFIG_SCHEMA = {
"type": "object", "type": "object",
"$schema": consts.JSON_SCHEMA, "$schema": consts.JSON_SCHEMA,

View File

@ -15,12 +15,11 @@
from rally.common.plugin import info from rally.common.plugin import info
from rally.common.plugin import plugin from rally.common.plugin import plugin
from rally.common import validation
from rally import plugins from rally import plugins
from rally.task import scenario
from tests.unit import test from tests.unit import test
EXCEPTIONS_DOCSTR = "missed_docstrings.txt"
EXCEPTIONS_FORMAT = "wrong_format.txt"
class DocstringsTestCase(test.TestCase): class DocstringsTestCase(test.TestCase):
@ -28,39 +27,13 @@ class DocstringsTestCase(test.TestCase):
super(DocstringsTestCase, self).setUp() super(DocstringsTestCase, self).setUp()
plugins.load() plugins.load()
self.exceptions = self._open_file( def _validate_code_block(self, plg_cls, code_block):
EXCEPTIONS_DOCSTR) + self._open_file(EXCEPTIONS_FORMAT)
def _open_file(self, filename):
with open("./tests/unit/doc/%s" % filename) as file:
return (file.read().lower().split())
def _check_docstrings(self, msg_buffer):
for plg_cls in plugin.Plugin.get_all():
if plg_cls.__module__.startswith("rally."):
if plg_cls.get_name().lower() not in self.exceptions:
doc = info.parse_docstring(plg_cls.__doc__)
short_description = doc["short_description"]
if short_description.startswith("Test"):
msg_buffer.append("One-line description for %s"
" should be declarative and not"
" start with 'Test(s) ...'"
% plg_cls.__name__)
if not plg_cls.get_info()["title"]:
msg = ("Class '{}' should have a docstring.")
inst_name = plg_cls.__name__
msg_buffer.append(msg.format(inst_name))
def _check_described_params(self, msg_buffer):
for plg_cls in plugin.Plugin.get_all():
if plg_cls.get_name().lower() not in self.exceptions:
ignored_params = ["self", "scenario_obj"] ignored_params = ["self", "scenario_obj"]
if hasattr(plg_cls, "run"):
code_block = plg_cls.run.__code__
params_count = code_block.co_argcount params_count = code_block.co_argcount
params = code_block.co_varnames[:params_count] params = code_block.co_varnames[:params_count]
param_data = plg_cls.get_info()["parameters"] param_data = plg_cls.get_info()["parameters"]
documented_params = [p["name"] for p in param_data] documented_params = [p["name"] for p in param_data]
result = []
for param in params: for param in params:
if param not in ignored_params: if param not in ignored_params:
if param not in documented_params: if param not in documented_params:
@ -71,16 +44,41 @@ class DocstringsTestCase(test.TestCase):
% {"class": plg_cls.__name__, % {"class": plg_cls.__name__,
"scenario": plg_cls.get_name(), "scenario": plg_cls.get_name(),
"param": param}) "param": param})
msg_buffer.append(msg) result.append(msg)
return result
def _check_docstrings(self, msg_buffer):
for plg_cls in plugin.Plugin.get_all():
if plg_cls.__module__.startswith("rally."):
doc = info.parse_docstring(plg_cls.__doc__)
short_description = doc["short_description"]
if short_description.startswith("Test"):
msg_buffer.append("One-line description for %s"
" should be declarative and not"
" start with 'Test(s) ...'"
% plg_cls.__name__)
if not plg_cls.get_info()["title"]:
msg = "Class '{}.{}' should have a docstring."
msg_buffer.append(msg.format(plg_cls.__module__,
plg_cls.__name__))
def _check_described_params(self, msg_buffer):
for plg_cls in plugin.Plugin.get_all():
msg = []
if hasattr(plg_cls, "run") and issubclass(
plg_cls, scenario.Scenario):
msg = self._validate_code_block(plg_cls,
plg_cls.run.__code__)
elif hasattr(plg_cls, "validate") and issubclass(
plg_cls, validation.Validator):
msg = self._validate_code_block(plg_cls,
plg_cls.__init__.__code__)
msg_buffer.extend(msg) if len(msg) else None
def test_all_plugins_have_docstrings(self): def test_all_plugins_have_docstrings(self):
msg_buffer = [] msg_buffer = []
self._check_docstrings(msg_buffer) self._check_docstrings(msg_buffer)
if msg_buffer:
self.fail("\n%s" % "\n".join(msg_buffer))
msg_buffer = []
self._check_described_params(msg_buffer) self._check_described_params(msg_buffer)
if msg_buffer: if msg_buffer:
self.fail("\n%s" % "\n".join(msg_buffer)) self.fail("\n%s" % "\n".join(msg_buffer))