diff --git a/doc/ext/cli_reference.py b/doc/ext/cli_reference.py index 932c2c9d71..5dc3f95352 100644 --- a/doc/ext/cli_reference.py +++ b/doc/ext/cli_reference.py @@ -18,9 +18,9 @@ import inspect from docutils.parsers import rst +from . import utils from rally.cli import cliutils from rally.cli import main -import utils class Parser(object): diff --git a/doc/ext/plugin_reference.py b/doc/ext/plugin_reference.py index 8da8fcad60..2c82a937f5 100644 --- a/doc/ext/plugin_reference.py +++ b/doc/ext/plugin_reference.py @@ -18,11 +18,11 @@ from docutils.parsers import rst import json import re +from . import utils from rally.common.plugin import discover from rally.common.plugin import plugin from rally.common import validation from rally import plugins -import utils JSON_SCHEMA_TYPES_MAP = {"boolean": "bool", diff --git a/doc/ext/utils.py b/doc/ext/utils.py index 25f38b3d8b..73aeba62e0 100644 --- a/doc/ext/utils.py +++ b/doc/ext/utils.py @@ -33,6 +33,7 @@ def parse_text(text): parser.parse(text, document) return document.children + paragraph = lambda text: parse_text(text)[0] note = lambda msg: nodes.note("", paragraph(msg)) hint = lambda msg: nodes.hint("", *parse_text(msg)) diff --git a/rally/api.py b/rally/api.py index 3053888e62..f22e89d668 100644 --- a/rally/api.py +++ b/rally/api.py @@ -275,8 +275,8 @@ class _Task(APIGroup): # declared in jinja2.Environment.globals for both types of undeclared # variables and successfully renders templates in both cases. required_kwargs = jinja2.meta.find_undeclared_variables(ast) - missing = (set(required_kwargs) - set(kwargs) - set(dir(builtins)) - - set(env.globals)) + missing = (set(required_kwargs) - set(kwargs) - set(dir(builtins)) + - set(env.globals)) real_missing = [mis for mis in missing if is_really_missing(mis, task_template)] if real_missing: @@ -745,8 +745,8 @@ class _Verifier(APIGroup): verifier, verifier.status, consts.VerifierStatus.INSTALLED) ) - system_wide_in_use = (system_wide or - (system_wide is None and verifier.system_wide)) + system_wide_in_use = ( + system_wide or (system_wide is None and verifier.system_wide)) if update_venv and system_wide_in_use: raise exceptions.RallyException( "It is impossible to update the virtual environment for " diff --git a/rally/cli/cliutils.py b/rally/cli/cliutils.py index 7e22bc9343..1132873e4f 100644 --- a/rally/cli/cliutils.py +++ b/rally/cli/cliutils.py @@ -195,8 +195,8 @@ def print_dict(obj, fields=None, formatters=None, mixed_case_fields=False, fields = sorted(obj.keys()) else: fields = [name for name in dir(obj) - if (not name.startswith("_") and - not callable(getattr(obj, name)))] + if (not name.startswith("_") + and not callable(getattr(obj, name)))] pt = prettytable.PrettyTable([property_label, value_label], caching=False) pt.align = "l" @@ -222,9 +222,8 @@ def print_dict(obj, fields=None, formatters=None, mixed_case_fields=False, data = textwrap.fill(six.text_type(data), wrap) # if value has a newline, add in multiple rows # e.g. fault with stacktrace - if (data and - isinstance(data, six.string_types) and - (r"\n" in data or "\r" in data)): + if (data and isinstance(data, six.string_types) + and (r"\n" in data or "\r" in data)): # "\r" would break the table, so remove it. if "\r" in data: data = data.replace("\r", "") @@ -729,7 +728,7 @@ _rally() local cur="${COMP_WORDS[COMP_CWORD]}" local prev="${COMP_WORDS[COMP_CWORD-1]}" - if [[ $cur =~ ^(\.|\~|\/) ]] || [[ $prev =~ ^--out(|put-file)$ ]] ; then + if [[ $cur =~ ^(\\.|\\~|\\/) ]] || [[ $prev =~ ^--out(|put-file)$ ]] ; then _rally_filedir elif [[ $prev =~ ^--(task|filename)$ ]] ; then _rally_filedir "\\.json|\\.yaml|\\.yml" diff --git a/rally/cli/commands/deployment.py b/rally/cli/commands/deployment.py index f79a74f11c..351319e029 100644 --- a/rally/cli/commands/deployment.py +++ b/rally/cli/commands/deployment.py @@ -237,17 +237,17 @@ class DeploymentCommands(object): info = api.deployment.check(deployment=deployment) for platform in info: - for i, credentials in enumerate(info[platform]): + for i, creds in enumerate(info[platform]): failed = False n = "" if len(info[platform]) == 1 else " #%s" % (i + 1) header = "Platform %s%s:" % (platform, n) print(cliutils.make_header(header)) - if "admin_error" in credentials: - print_error("admin", credentials["admin_error"]) + if "admin_error" in creds: + print_error("admin", creds["admin_error"]) failed = True - if "user_error" in credentials: - print_error("users", credentials["user_error"]) + if "user_error" in creds: + print_error("users", creds["user_error"]) failed = True if not failed: @@ -256,19 +256,19 @@ class DeploymentCommands(object): "Service": lambda x: x.get("name"), "Service Type": lambda x: x.get("type"), "Status": lambda x: x.get("status", "Available")} - if (is_field_there(credentials["services"], "type") and - is_field_there(credentials["services"], "name")): + if (is_field_there(creds["services"], "type") + and is_field_there(creds["services"], "name")): headers = ["Service", "Service Type", "Status"] else: headers = ["Service", "Status"] - if is_field_there(credentials["services"], "version"): + if is_field_there(creds["services"], "version"): headers.append("Version") - if is_field_there(credentials["services"], "description"): + if is_field_there(creds["services"], "description"): headers.append("Description") - cliutils.print_list(credentials["services"], headers, + cliutils.print_list(creds["services"], headers, normalize_field_names=True, formatters=formatters) else: diff --git a/rally/cli/commands/verify.py b/rally/cli/commands/verify.py index cebf0d2eef..03c6783738 100644 --- a/rally/cli/commands/verify.py +++ b/rally/cli/commands/verify.py @@ -630,10 +630,9 @@ class VerifyCommands(object): formatters = { "Started at": lambda v: v["created_at"].replace("T", " "), "Finished at": lambda v: v["updated_at"].replace("T", " "), - "Duration": lambda v: (dt.datetime.strptime(v["updated_at"], - TIME_FORMAT) - - dt.datetime.strptime(v["created_at"], - TIME_FORMAT)), + "Duration": lambda v: ( + dt.datetime.strptime(v["updated_at"], TIME_FORMAT) + - dt.datetime.strptime(v["created_at"], TIME_FORMAT)), "Run arguments": run_args_formatter, "Tags": lambda v: ", ".join(v["tags"]) or None, "Verifier name": lambda v: "%s (UUID: %s)" % (verifier["name"], @@ -700,10 +699,9 @@ class VerifyCommands(object): deployment=v["deployment_uuid"])["name"]), "Started at": lambda v: v["created_at"], "Finished at": lambda v: v["updated_at"], - "Duration": lambda v: (dt.datetime.strptime(v["updated_at"], - TIME_FORMAT) - - dt.datetime.strptime(v["created_at"], - TIME_FORMAT)) + "Duration": lambda v: + (dt.datetime.strptime(v["updated_at"], TIME_FORMAT) + - dt.datetime.strptime(v["created_at"], TIME_FORMAT)) } cliutils.print_list(verifications, fields, formatters=formatters, normalize_field_names=True, sortby_index=4) diff --git a/rally/common/db/migrations/versions/2016_04_4ef544102ba7_change_task_status_enum.py b/rally/common/db/migrations/versions/2016_04_4ef544102ba7_change_task_status_enum.py index 72a76f9949..296fe45288 100644 --- a/rally/common/db/migrations/versions/2016_04_4ef544102ba7_change_task_status_enum.py +++ b/rally/common/db/migrations/versions/2016_04_4ef544102ba7_change_task_status_enum.py @@ -137,13 +137,13 @@ def upgrade(): # validation failed op.execute( task.update().where( - (task.c.status == op.inline_literal("failed")) & - (task.c.validation_result == {})).values( + (task.c.status == op.inline_literal("failed")) + & (task.c.validation_result == {})).values( {"new_status": "crashed", "validation_result": {}})) op.execute( task.update().where( - (task.c.status == op.inline_literal("failed")) & - (task.c.validation_result != {})).values( + (task.c.status == op.inline_literal("failed")) + & (task.c.validation_result != {})).values( {"new_status": "validation_failed", "validation_result": task.c.validation_result})) diff --git a/rally/common/db/migrations/versions/2016_07_54e844ebfbc3_update_deployment_configs.py b/rally/common/db/migrations/versions/2016_07_54e844ebfbc3_update_deployment_configs.py index c52b249399..134ce0c33b 100644 --- a/rally/common/db/migrations/versions/2016_07_54e844ebfbc3_update_deployment_configs.py +++ b/rally/common/db/migrations/versions/2016_07_54e844ebfbc3_update_deployment_configs.py @@ -54,8 +54,8 @@ def _check_user_entry(user): keys = set(user.keys()) if keys == {"username", "password", "tenant_name", "project_domain_name", "user_domain_name"}: - if (user["user_domain_name"] == "" and - user["project_domain_name"] == ""): + if (user["user_domain_name"] == "" + and user["project_domain_name"] == ""): # it is credentials of keystone v2 and they were created # --fromenv del user["user_domain_name"] diff --git a/rally/common/io/subunit_v2.py b/rally/common/io/subunit_v2.py index 933aea14b1..d1121c7468 100644 --- a/rally/common/io/subunit_v2.py +++ b/rally/common/io/subunit_v2.py @@ -29,8 +29,8 @@ def prepare_input_args(func): if not test_id: return - if (test_id.startswith("setUpClass (") or - test_id.startswith("tearDown (")): + if (test_id.startswith("setUpClass (") + or test_id.startswith("tearDown (")): test_id = test_id[test_id.find("(") + 1:-1] tags = _parse_test_tags(test_id) @@ -81,8 +81,8 @@ class SubunitV2StreamResult(object): return test_id.split("[")[0] if test_id.find("[") > -1 else test_id def _check_expected_failure(self, test_id): - if (test_id in self._expected_failures or - self._get_test_name(test_id) in self._expected_failures): + if (test_id in self._expected_failures + or self._get_test_name(test_id) in self._expected_failures): if self._tests[test_id]["status"] == "fail": self._tests[test_id]["status"] = "xfail" if self._expected_failures[test_id]: @@ -113,9 +113,9 @@ class SubunitV2StreamResult(object): # failed, there is only one event with reason and status. So we should # modify all tests of test class manually. for test_id in self._unknown_entities: - known_test_ids = filter(lambda t: - t == test_id or t.startswith( - "%s." % test_id), self._tests) + known_test_ids = filter( + lambda t: t == test_id or t.startswith("%s." % test_id), + self._tests) for t_id in known_test_ids: if self._tests[t_id]["status"] == "init": self._tests[t_id]["status"] = ( diff --git a/rally/common/objects/verification.py b/rally/common/objects/verification.py index e40df33248..5a42aa08ab 100644 --- a/rally/common/objects/verification.py +++ b/rally/common/objects/verification.py @@ -76,8 +76,8 @@ class Verification(object): self._update(status=status) def finish(self, totals, tests): - if (totals.get("failures", 0) == 0 and - totals.get("unexpected_success", 0) == 0): + if (totals.get("failures", 0) == 0 + and totals.get("unexpected_success", 0) == 0): status = consts.VerificationStatus.FINISHED else: status = consts.VerificationStatus.FAILED diff --git a/rally/common/streaming_algorithms.py b/rally/common/streaming_algorithms.py index 5535112b92..7af312c775 100644 --- a/rally/common/streaming_algorithms.py +++ b/rally/common/streaming_algorithms.py @@ -102,9 +102,9 @@ class StdDevComputation(StreamingAlgorithm): self.mean = self.mean_computation.result() self.count += other.count - self.dev_sum = (dev_sum1 + count1 * mean1 ** 2 + - dev_sum2 + count2 * mean2 ** 2 - - self.count * self.mean ** 2) + self.dev_sum = (dev_sum1 + count1 * mean1 ** 2 + + dev_sum2 + count2 * mean2 ** 2 + - self.count * self.mean ** 2) def result(self): # NOTE(amaretskiy): Need at least two values to be processed diff --git a/rally/plugins/common/exporters/elastic/exporter.py b/rally/plugins/common/exporters/elastic/exporter.py index 7d3dbbcba8..6acdcf7934 100755 --- a/rally/plugins/common/exporters/elastic/exporter.py +++ b/rally/plugins/common/exporters/elastic/exporter.py @@ -265,11 +265,11 @@ class ElasticSearchExporter(exporter.TaskExporter): if itr["error"] and ( # the case when it is a top level of the scenario and the # first fails the item which is not wrapped by AtomicTimer - (not _parent and not atomic_actions) or + (not _parent and not atomic_actions) # the case when it is a top level of the scenario and and # the item fails after some atomic actions completed - (not _parent and atomic_actions and - not atomic_actions[-1].get("failed", False))): + or (not _parent and atomic_actions + and not atomic_actions[-1].get("failed", False))): act_id = act_id_tmpl % { "itr_id": itr["id"], "action_name": "no-name-action", @@ -278,8 +278,8 @@ class ElasticSearchExporter(exporter.TaskExporter): # Since the action had not be wrapped by AtomicTimer, we cannot # make any assumption about it's duration (start_time) so let's use # finished_at timestamp of iteration with 0 duration - timestamp = (itr["timestamp"] + itr["duration"] + - itr["idle_duration"]) + timestamp = (itr["timestamp"] + itr["duration"] + + itr["idle_duration"]) timestamp = dt.datetime.utcfromtimestamp(timestamp) timestamp = timestamp.strftime(consts.TimeFormat.ISO8601) action_report = self._make_action_report( diff --git a/rally/plugins/common/hook/triggers/periodic.py b/rally/plugins/common/hook/triggers/periodic.py index c590830042..b7bd720dc4 100644 --- a/rally/plugins/common/hook/triggers/periodic.py +++ b/rally/plugins/common/hook/triggers/periodic.py @@ -61,9 +61,9 @@ class PeriodicTrigger(hook.HookTrigger): return self.config["unit"] def on_event(self, event_type, value=None): - if not (event_type == self.get_listening_event() and - self.config["start"] <= value <= self.config["end"] and - (value - self.config["start"]) % self.config["step"] == 0): + if not (event_type == self.get_listening_event() + and self.config["start"] <= value <= self.config["end"] + and (value - self.config["start"]) % self.config["step"] == 0): # do nothing return super(PeriodicTrigger, self).on_event(event_type, value) diff --git a/rally/plugins/common/runners/rps.py b/rally/plugins/common/runners/rps.py index 65a4d47239..1c3944a31a 100644 --- a/rally/plugins/common/runners/rps.py +++ b/rally/plugins/common/runners/rps.py @@ -240,8 +240,8 @@ class RPSScenarioRunner(runner.ScenarioRunner): return float(rps_cfg) / number_of_processes stage_order = (time.time() - start_timer) / rps_cfg.get( "duration", 1) - 1 - rps = (float(rps_cfg["start"] + rps_cfg["step"] * stage_order) / - number_of_processes) + rps = (float(rps_cfg["start"] + rps_cfg["step"] * stage_order) + / number_of_processes) return min(rps, float(rps_cfg["end"])) diff --git a/rally/plugins/common/sla/outliers.py b/rally/plugins/common/sla/outliers.py index 08cfaeee6a..5104585c22 100644 --- a/rally/plugins/common/sla/outliers.py +++ b/rally/plugins/common/sla/outliers.py @@ -69,8 +69,8 @@ class Outliers(sla.SLA): self.iterations += 1 # NOTE(msdubov): First check if the current iteration is an outlier - if ((self.iterations >= self.min_iterations and self.threshold and - duration > self.threshold)): + if (self.iterations >= self.min_iterations + and self.threshold and duration > self.threshold): self.outliers += 1 # NOTE(msdubov): Then update the threshold value diff --git a/rally/task/engine.py b/rally/task/engine.py index bae630c703..654ed1d4e5 100644 --- a/rally/task/engine.py +++ b/rally/task/engine.py @@ -105,9 +105,9 @@ class ResultConsumer(object): self.load_finished_at = max(r["duration"] + r["timestamp"], self.load_finished_at) success = self.sla_checker.add_iteration(r) - if (self.abort_on_sla_failure and - not success and - not task_aborted): + if (self.abort_on_sla_failure + and not success + and not task_aborted): self.sla_checker.set_aborted_on_sla() self.runner.abort() self.task.update_status( diff --git a/rally/task/processing/plot.py b/rally/task/processing/plot.py index 0bf083ed86..f4091f0c87 100644 --- a/rally/task/processing/plot.py +++ b/rally/task/processing/plot.py @@ -305,8 +305,8 @@ class Trends(object): "config": workload_cfg} self._data[key]["tasks"].append(task_uuid) - if (self._data[key]["description"] and - self._data[key]["description"] != w_description): + if (self._data[key]["description"] + and self._data[key]["description"] != w_description): self._data[key]["description"] = None self._data[key]["sla_failures"] += not workload["pass_sla"] diff --git a/rally/task/processing/utils.py b/rally/task/processing/utils.py index 1b9f11cafc..2ab5572026 100644 --- a/rally/task/processing/utils.py +++ b/rally/task/processing/utils.py @@ -45,8 +45,8 @@ class GraphZipper(object): order = self.point_order - int(self.compression_ratio / 2.0) value = ( - sum(p[0] * p[1] for p in self.ratio_value_points) / - self.compression_ratio + sum(p[0] * p[1] for p in self.ratio_value_points) + / self.compression_ratio ) return [order, value] diff --git a/rally/task/service.py b/rally/task/service.py index ebde86affa..6db3c4d2e1 100644 --- a/rally/task/service.py +++ b/rally/task/service.py @@ -142,9 +142,9 @@ class ServiceMeta(type): # properties of parents not_implemented_apis = set() for name, obj in inspect.getmembers(cls): - if (getattr(obj, "require_impl", False) and + if (getattr(obj, "require_impl", False) # name in namespace means that object was introduced in cls - name not in namespaces): + and name not in namespaces): # it is not overridden... not_implemented_apis.add(name) @@ -307,8 +307,8 @@ class UnifiedService(Service): # find all classes with unified implementation impls = {cls: cls._meta_get("impl") for cls in discover.itersubclasses(self.__class__) - if (cls._meta_is_inited(raise_exc=False) and - cls._meta_get("impl"))} + if (cls._meta_is_inited(raise_exc=False) + and cls._meta_get("impl"))} service_names = {o._meta_get("name") for o in impls.values()} @@ -319,8 +319,8 @@ class UnifiedService(Service): enabled_services = list(self._clients.services().values()) for cls, impl in impls.items(): - if (enabled_services is not None and - impl._meta_get("name") not in enabled_services): + if (enabled_services is not None + and impl._meta_get("name") not in enabled_services): continue if cls.is_applicable(self._clients): return cls, impls @@ -356,8 +356,8 @@ class _Resource(object): def __eq__(self, other): self_id = getattr(self, self._id_property) - return (isinstance(other, self.__class__) and - self_id == getattr(other, self._id_property)) + return (isinstance(other, self.__class__) + and self_id == getattr(other, self._id_property)) def _as_dict(self): return dict((k, self[k]) for k in self.__slots__) diff --git a/rally/task/utils.py b/rally/task/utils.py index ce779bf14f..ce1902a828 100644 --- a/rally/task/utils.py +++ b/rally/task/utils.py @@ -46,8 +46,9 @@ def get_status(resource, status_attr="status"): return status.upper() # Dict case - if ((isinstance(resource, dict) and status_attr in resource.keys() and - isinstance(resource[status_attr], six.string_types))): + if (isinstance(resource, dict) + and status_attr in resource.keys() + and isinstance(resource[status_attr], six.string_types)): return resource[status_attr].upper() return "NONE" diff --git a/rally/utils/encodeutils.py b/rally/utils/encodeutils.py index 1f1ae819bc..ccd1559748 100644 --- a/rally/utils/encodeutils.py +++ b/rally/utils/encodeutils.py @@ -17,6 +17,10 @@ import sys import six +def _get_default_encoding(): + return sys.stdin.encoding or sys.getdefaultencoding() + + def safe_decode(text, incoming=None, errors="strict"): """Decodes incoming string using `incoming` if they're not already unicode. @@ -34,8 +38,7 @@ def safe_decode(text, incoming=None, errors="strict"): return text if not incoming: - incoming = (sys.stdin.encoding or - sys.getdefaultencoding()) + incoming = _get_default_encoding() try: return text.decode(incoming, errors) @@ -75,8 +78,7 @@ def safe_encode(text, incoming=None, encoding="utf-8", errors="strict"): raise TypeError("%s can't be encoded" % type(text)) if not incoming: - incoming = (sys.stdin.encoding or - sys.getdefaultencoding()) + incoming = _get_default_encoding() # Avoid case issues in comparisons if hasattr(incoming, "lower"): diff --git a/rally/verification/manager.py b/rally/verification/manager.py index a45deca69f..7e7c9ca17d 100644 --- a/rally/verification/manager.py +++ b/rally/verification/manager.py @@ -163,8 +163,8 @@ class VerifierManager(plugin.Plugin): raise exceptions.ValidationError( "'pattern' argument should be a string.") if "concurrency" in args: - if (not isinstance(args["concurrency"], int) or - args["concurrency"] < 0): + if (not isinstance(args["concurrency"], int) + or args["concurrency"] < 0): raise exceptions.ValidationError( "'concurrency' argument should be a positive integer or " "zero.") diff --git a/tests/ci/playbooks/rally-tox-base/pre-run.yaml b/tests/ci/playbooks/rally-tox-base/pre-run.yaml index 1038fecdab..b36dd5586f 100644 --- a/tests/ci/playbooks/rally-tox-base/pre-run.yaml +++ b/tests/ci/playbooks/rally-tox-base/pre-run.yaml @@ -48,15 +48,27 @@ become: True become_user: root shell: - executable: /bin/sh + executable: /bin/bash cmd: | set -e curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py - python{{ python_version.stdout }} get-pip.py + if [ "{{ python_version.stdout }}" == "3.4" ]; then + python{{ python_version.stdout }} get-pip.py --no-setuptools + pip{{ python_version.stdout }} install setuptools==43.0.0 + else + python{{ python_version.stdout }} get-pip.py + fi - name: Install python tox become: True become_user: root - command: pip{{ python_version.stdout }} install tox + shell: + executable: /bin/bash + cmd: | + if [ "{{ python_version.stdout }}" == "3.4" ]; then + pip{{ python_version.stdout }} install more-itertools==7.2.0 importlib-metadata==1.1.3 tox + else + pip{{ python_version.stdout }} install tox + fi roles: - bindep diff --git a/tests/ci/pytest_launcher.py b/tests/ci/pytest_launcher.py index 911acd44bd..a293902b7f 100755 --- a/tests/ci/pytest_launcher.py +++ b/tests/ci/pytest_launcher.py @@ -115,5 +115,6 @@ def main(args): if exit_code == 1: error("") + if __name__ == "__main__": sys.exit(main(sys.argv)) diff --git a/tests/ci/sync_requirements.py b/tests/ci/sync_requirements.py index 9be9d63a9e..f717c7a5b3 100644 --- a/tests/ci/sync_requirements.py +++ b/tests/ci/sync_requirements.py @@ -120,8 +120,8 @@ class PYPIPackage(object): return self._license def __eq__(self, other): - return (isinstance(other, PYPIPackage) and - self.package_name == other.package_name) + return (isinstance(other, PYPIPackage) + and self.package_name == other.package_name) class Requirement(PYPIPackage): @@ -180,9 +180,11 @@ class Requirement(PYPIPackage): min_equal_to_max = False if self.version["min"] and self.version["max"]: - if (self.version["min"].startswith(">=") and - self.version["max"].startswith("<=") and - self.version["min"][2:] == self.version["max"][2:]): + if ( + self.version["min"].startswith(">=") + and self.version["max"].startswith("<=") + and self.version["min"][2:] == self.version["max"][2:] + ): # min and max versions are equal there is no need to write # both of them min_equal_to_max = True @@ -220,8 +222,8 @@ class Requirement(PYPIPackage): return string def __eq__(self, other): - return (isinstance(other, self.__class__) and - self.package_name == other.package_name) + return (isinstance(other, self.__class__) + and self.package_name == other.package_name) def __ne__(self, other): return not self.__eq__(other) @@ -273,15 +275,15 @@ def parse_data(raw_data, include_comments=True, dependency_cls=Requirement): requirements[-1].finish_him() requirements.append(Comment(finished=True)) else: - if (isinstance(requirements[-1], Comment) and - not requirements[-1].is_finished): + if (isinstance(requirements[-1], Comment) + and not requirements[-1].is_finished): requirements[-1].finish_him() # parse_line dep = dependency_cls.parse_line(line) if dep: - if (isinstance(requirements[-1], Comment) and - DO_NOT_TOUCH_TAG in str(requirements[-1])): + if (isinstance(requirements[-1], Comment) + and DO_NOT_TOUCH_TAG in str(requirements[-1])): dep.do_not_touch = True requirements.append(dep) diff --git a/tests/ci/wip-rally-gate.py b/tests/ci/wip-rally-gate.py index 4baee40a6c..cb444bb54b 100755 --- a/tests/ci/wip-rally-gate.py +++ b/tests/ci/wip-rally-gate.py @@ -52,6 +52,7 @@ def use_keystone_v3(): "--name", "V3", "--file", cfg_file.name]) print(subprocess.check_output(["rally", "deployment", "check"])) + TAG_HANDLERS = {"v3": use_keystone_v3} diff --git a/tests/functional/test_cli_task.py b/tests/functional/test_cli_task.py index 312de19a0d..871f8b79d3 100644 --- a/tests/functional/test_cli_task.py +++ b/tests/functional/test_cli_task.py @@ -236,14 +236,14 @@ class TaskTestCase(testtools.TestCase): with open(json_report, "w+") as f: f.write(rally("task results", no_logs=True)) import_print = rally("task import --file %s" % json_report) - task_uuid = re.search("UUID:\s([a-z0-9\-]+)", import_print).group(1) + task_uuid = re.search(r"UUID:\s([a-z0-9\-]+)", import_print).group(1) self.assertIn("Dummy.dummy_random_fail_in_atomic", rally("task results --uuid %s" % task_uuid)) # new json report rally("task report --json --out %s" % json_report, no_logs=True) import_print = rally("task import --file %s" % json_report) - task_uuid = re.search("UUID:\s([a-z0-9\-]+)", import_print).group(1) + task_uuid = re.search(r"UUID:\s([a-z0-9\-]+)", import_print).group(1) self.assertIn("Dummy.dummy_random_fail_in_atomic", rally("task report --uuid %s --json" % task_uuid)) @@ -1453,7 +1453,7 @@ class HookTestCase(testtools.TestCase): with open(json_report, "w+") as f: f.write(rally("task results", no_logs=True)) import_print = rally("task import --file %s" % json_report) - task_uuid = re.search("UUID:\s([a-z0-9\-]+)", import_print).group(1) + task_uuid = re.search(r"UUID:\s([a-z0-9\-]+)", import_print).group(1) results = rally("task results --uuid %s" % task_uuid) self.assertIn("Dummy.dummy", results) self.assertIn("event_hook", results) diff --git a/tests/hacking/checks.py b/tests/hacking/checks.py index b940893740..03ecd68b18 100644 --- a/tests/hacking/checks.py +++ b/tests/hacking/checks.py @@ -244,8 +244,8 @@ def assert_equal_none(logical_line, physical_line, filename): N322 """ - res = (re_assert_equal_start_with_none.search(logical_line) or - re_assert_equal_end_with_none.search(logical_line)) + res = (re_assert_equal_start_with_none.search(logical_line) + or re_assert_equal_end_with_none.search(logical_line)) if res: yield (0, "N322 assertEqual(A, None) or assertEqual(None, A) " "sentences not allowed, you should use assertIsNone(A) " @@ -262,8 +262,9 @@ def assert_true_or_false_with_in(logical_line, physical_line, filename): N323 """ - res = (re_assert_true_false_with_in_or_not_in.search(logical_line) or - re_assert_true_false_with_in_or_not_in_spaces.search(logical_line)) + res = (re_assert_true_false_with_in_or_not_in.search(logical_line) + or re_assert_true_false_with_in_or_not_in_spaces.search( + logical_line)) if res: yield (0, "N323 assertTrue/assertFalse(A in/not in B)sentences not " "allowed, you should use assertIn(A, B) or assertNotIn(A, B)" @@ -280,8 +281,8 @@ def assert_equal_in(logical_line, physical_line, filename): N324 """ - res = (re_assert_equal_in_end_with_true_or_false.search(logical_line) or - re_assert_equal_in_start_with_true_or_false.search(logical_line)) + res = (re_assert_equal_in_end_with_true_or_false.search(logical_line) + or re_assert_equal_in_start_with_true_or_false.search(logical_line)) if res: yield (0, "N324: Use assertIn/NotIn(A, B) rather than " "assertEqual(A in/not in B, True/False) when checking " @@ -294,8 +295,8 @@ def assert_not_equal_none(logical_line, physical_line, filename): N325 """ - res = (re_assert_not_equal_start_with_none.search(logical_line) or - re_assert_not_equal_end_with_none.search(logical_line)) + res = (re_assert_not_equal_start_with_none.search(logical_line) + or re_assert_not_equal_end_with_none.search(logical_line)) if res: yield (0, "N325 assertNotEqual(A, None) or assertNotEqual(None, A) " "sentences not allowed, you should use assertIsNotNone(A) " @@ -311,8 +312,8 @@ def assert_equal_true_or_false(logical_line, physical_line, filename): N326 """ - res = (re_assert_equal_end_with_true_or_false.search(logical_line) or - re_assert_equal_start_with_true_or_false.search(logical_line)) + res = (re_assert_equal_end_with_true_or_false.search(logical_line) + or re_assert_equal_start_with_true_or_false.search(logical_line)) if res: yield (0, "N326 assertEqual(A, True/False) or " "assertEqual(True/False, A) sentences not allowed," @@ -371,8 +372,8 @@ def check_quotes(logical_line, physical_line, filename): check_tripple = ( lambda line, i, char: ( - i + 2 < len(line) and - (char == line[i] == line[i + 1] == line[i + 2]) + i + 2 < len(line) + and (char == line[i] == line[i + 1] == line[i + 2]) ) ) @@ -434,9 +435,9 @@ def check_dict_formatting_in_string(logical_line, tokens): # NOTE(stpierre): Can't use @skip_ignored_lines here because it's # a stupid decorator that only works on functions that take # (logical_line, filename) as arguments. - if (not logical_line or - logical_line.startswith("#") or - logical_line.endswith("# noqa")): + if (not logical_line + or logical_line.startswith("#") + or logical_line.endswith("# noqa")): return current_string = "" diff --git a/tests/samples/test_task_samples.py b/tests/samples/test_task_samples.py index 7fc9aef3b7..7b76a06609 100644 --- a/tests/samples/test_task_samples.py +++ b/tests/samples/test_task_samples.py @@ -153,8 +153,9 @@ class TaskSampleTestCase(test.TestCase): bad_filenames = [] for dirname, dirnames, filenames in os.walk(self.samples_path): for filename in filenames: - if "_" in filename and (filename.endswith(".yaml") or - filename.endswith(".json")): + if "_" in filename and ( + filename.endswith(".yaml") + or filename.endswith(".json")): full_path = os.path.join(dirname, filename) bad_filenames.append(full_path) diff --git a/tests/unit/common/db/test_migrations.py b/tests/unit/common/db/test_migrations.py index f10fea9995..b5d46f3ed0 100644 --- a/tests/unit/common/db/test_migrations.py +++ b/tests/unit/common/db/test_migrations.py @@ -144,7 +144,7 @@ class MigrationTestCase(rtest.DBTestCase, def include_object(self, object_, name, type_, reflected, compare_to): if type_ == "table" and name == "alembic_version": - return False + return False return super(MigrationTestCase, self).include_object( object_, name, type_, reflected, compare_to) @@ -641,8 +641,9 @@ class MigrationWalkTestCase(rtest.DBTestCase, subtasks_found = conn.execute( subtask_table.select(). - where(subtask_table.c.task_uuid == - self._e654a0648db0_task_uuid) + where( + subtask_table.c.task_uuid == self._e654a0648db0_task_uuid + ) ).fetchall() self.assertEqual(1, len(subtasks_found)) @@ -673,8 +674,8 @@ class MigrationWalkTestCase(rtest.DBTestCase, workloads_found = conn.execute( workload_table.select(). - where(workload_table.c.task_uuid == - self._e654a0648db0_task_uuid) + where( + workload_table.c.task_uuid == self._e654a0648db0_task_uuid) ).fetchall() self.assertEqual(1, len(workloads_found)) @@ -714,8 +715,8 @@ class MigrationWalkTestCase(rtest.DBTestCase, workloaddata_found = conn.execute( workloaddata_table.select(). - where(workloaddata_table.c.task_uuid == - self._e654a0648db0_task_uuid) + where(workloaddata_table.c.task_uuid + == self._e654a0648db0_task_uuid) ).fetchall() self.assertEqual(1, len(workloaddata_found)) @@ -754,19 +755,19 @@ class MigrationWalkTestCase(rtest.DBTestCase, conn.execute( workloaddata_table.delete(). - where(workloaddata_table.c.task_uuid == - self._e654a0648db0_task_uuid) + where(workloaddata_table.c.task_uuid + == self._e654a0648db0_task_uuid) ) conn.execute( workload_table.delete(). - where(workload_table.c.task_uuid == - self._e654a0648db0_task_uuid) + where( + workload_table.c.task_uuid == self._e654a0648db0_task_uuid) ) conn.execute( subtask_table.delete(). - where(subtask_table.c.task_uuid == - self._e654a0648db0_task_uuid) + where( + subtask_table.c.task_uuid == self._e654a0648db0_task_uuid) ) conn.execute( @@ -776,8 +777,8 @@ class MigrationWalkTestCase(rtest.DBTestCase, conn.execute( deployment_table.delete(). - where(deployment_table.c.uuid == - self._e654a0648db0_deployment_uuid) + where(deployment_table.c.uuid + == self._e654a0648db0_deployment_uuid) ) def _pre_upgrade_6ad4f426f005(self, engine): @@ -857,55 +858,55 @@ class MigrationWalkTestCase(rtest.DBTestCase, ) def _pre_upgrade_32fada9b2fde(self, engine): - self._32fada9b2fde_deployments = { - # right config which should not be changed after migration - "should-not-be-changed-1": { - "admin": {"username": "admin", - "password": "passwd", - "project_name": "admin"}, - "auth_url": "http://example.com:5000/v3", - "region_name": "RegionOne", - "type": "ExistingCloud"}, - # right config which should not be changed after migration - "should-not-be-changed-2": { - "admin": {"username": "admin", - "password": "passwd", - "tenant_name": "admin"}, - "users": [{"username": "admin", - "password": "passwd", - "tenant_name": "admin"}], - "auth_url": "http://example.com:5000/v2.0", - "region_name": "RegionOne", - "type": "ExistingCloud"}, - # not ExistingCloud config which should not be changed - "should-not-be-changed-3": { - "url": "example.com", - "type": "Something"}, - # with `admin_domain_name` field - "with_admin_domain_name": { - "admin": {"username": "admin", - "password": "passwd", - "project_name": "admin", - "admin_domain_name": "admin"}, - "auth_url": "http://example.com:5000/v3", - "region_name": "RegionOne", - "type": "ExistingCloud"}, - } - deployment_table = db_utils.get_table(engine, "deployments") + self._32fada9b2fde_deployments = { + # right config which should not be changed after migration + "should-not-be-changed-1": { + "admin": {"username": "admin", + "password": "passwd", + "project_name": "admin"}, + "auth_url": "http://example.com:5000/v3", + "region_name": "RegionOne", + "type": "ExistingCloud"}, + # right config which should not be changed after migration + "should-not-be-changed-2": { + "admin": {"username": "admin", + "password": "passwd", + "tenant_name": "admin"}, + "users": [{"username": "admin", + "password": "passwd", + "tenant_name": "admin"}], + "auth_url": "http://example.com:5000/v2.0", + "region_name": "RegionOne", + "type": "ExistingCloud"}, + # not ExistingCloud config which should not be changed + "should-not-be-changed-3": { + "url": "example.com", + "type": "Something"}, + # with `admin_domain_name` field + "with_admin_domain_name": { + "admin": {"username": "admin", + "password": "passwd", + "project_name": "admin", + "admin_domain_name": "admin"}, + "auth_url": "http://example.com:5000/v3", + "region_name": "RegionOne", + "type": "ExistingCloud"}, + } + deployment_table = db_utils.get_table(engine, "deployments") - deployment_status = consts.DeployStatus.DEPLOY_FINISHED - with engine.connect() as conn: - for deployment in self._32fada9b2fde_deployments: - conf = json.dumps( - self._32fada9b2fde_deployments[deployment]) - conn.execute( - deployment_table.insert(), - [{"uuid": deployment, "name": deployment, - "config": conf, - "enum_deployments_status": deployment_status, - "credentials": six.b(json.dumps([])), - "users": six.b(json.dumps([])) - }]) + deployment_status = consts.DeployStatus.DEPLOY_FINISHED + with engine.connect() as conn: + for deployment in self._32fada9b2fde_deployments: + conf = json.dumps( + self._32fada9b2fde_deployments[deployment]) + conn.execute( + deployment_table.insert(), + [{"uuid": deployment, "name": deployment, + "config": conf, + "enum_deployments_status": deployment_status, + "credentials": six.b(json.dumps([])), + "users": six.b(json.dumps([])) + }]) def _check_32fada9b2fde(self, engine, data): self.assertEqual("32fada9b2fde", @@ -956,75 +957,83 @@ class MigrationWalkTestCase(rtest.DBTestCase, ) def _pre_upgrade_484cd9413e66(self, engine): - self._484cd9413e66_deployment_uuid = "484cd9413e66-deploy" + self._484cd9413e66_deployment_uuid = "484cd9413e66-deploy" - self._484cd9413e66_verifications = [ - {"total": {"time": 1.0, - "failures": 2, - "skipped": 3, - "success": 4, - "errors": 0, - "tests": 2 - }, - "test_cases": {"test1": {"status": "OK"}, - "test2": {"status": "FAIL", - "failure": {"log": "trace"}}}, - "set_name": "full"}, - {"total": {"time": 2.0, - "failures": 3, - "skipped": 4, - "success": 5, - "unexpected_success": 6, - "expected_failures": 7, - "tests": 2 - }, - "test_cases": {"test1": {"status": "success"}, - "test2": {"status": "failed", "" - "traceback": "trace"}}, - "set_name": "smoke"} - ] - deployment_table = db_utils.get_table(engine, "deployments") - verifications_table = db_utils.get_table(engine, "verifications") - vresults_table = db_utils.get_table(engine, - "verification_results") + self._484cd9413e66_verifications = [ + { + "total": { + "time": 1.0, + "failures": 2, + "skipped": 3, + "success": 4, + "errors": 0, + "tests": 2 + }, + "test_cases": { + "test1": {"status": "OK"}, + "test2": {"status": "FAIL", "failure": {"log": "trace"}} + }, + "set_name": "full" + }, + { + "total": { + "time": 2.0, + "failures": 3, + "skipped": 4, + "success": 5, + "unexpected_success": 6, + "expected_failures": 7, + "tests": 2 + }, + "test_cases": { + "test1": {"status": "success"}, + "test2": {"status": "failed", "traceback": "trace"} + }, + "set_name": "smoke" + } + ] + deployment_table = db_utils.get_table(engine, "deployments") + verifications_table = db_utils.get_table(engine, "verifications") + vresults_table = db_utils.get_table(engine, + "verification_results") - deployment_status = consts.DeployStatus.DEPLOY_FINISHED - vstatus = consts.TaskStatus.FINISHED - with engine.connect() as conn: + deployment_status = consts.DeployStatus.DEPLOY_FINISHED + vstatus = consts.TaskStatus.FINISHED + with engine.connect() as conn: + conn.execute( + deployment_table.insert(), + [{"uuid": self._484cd9413e66_deployment_uuid, + "name": self._484cd9413e66_deployment_uuid, + "config": six.b(json.dumps([])), + "enum_deployments_status": deployment_status, + "credentials": six.b(json.dumps([])), + "users": six.b(json.dumps([])) + }]) + + for i in range(len(self._484cd9413e66_verifications)): + verification = self._484cd9413e66_verifications[i] + vuuid = "uuid-%s" % i conn.execute( - deployment_table.insert(), - [{"uuid": self._484cd9413e66_deployment_uuid, - "name": self._484cd9413e66_deployment_uuid, - "config": six.b(json.dumps([])), - "enum_deployments_status": deployment_status, - "credentials": six.b(json.dumps([])), - "users": six.b(json.dumps([])) + verifications_table.insert(), + [{"uuid": vuuid, + "deployment_uuid": + self._484cd9413e66_deployment_uuid, + "status": vstatus, + "set_name": verification["set_name"], + "tests": verification["total"]["tests"], + "failures": verification["total"]["failures"], + "time": verification["total"]["time"], + "errors": 0, + }]) + data = copy.deepcopy(verification) + data["total"]["test_cases"] = data["test_cases"] + data = data["total"] + conn.execute( + vresults_table.insert(), + [{"uuid": vuuid, + "verification_uuid": vuuid, + "data": json.dumps(data) }]) - - for i in range(len(self._484cd9413e66_verifications)): - verification = self._484cd9413e66_verifications[i] - vuuid = "uuid-%s" % i - conn.execute( - verifications_table.insert(), - [{"uuid": vuuid, - "deployment_uuid": - self._484cd9413e66_deployment_uuid, - "status": vstatus, - "set_name": verification["set_name"], - "tests": verification["total"]["tests"], - "failures": verification["total"]["failures"], - "time": verification["total"]["time"], - "errors": 0, - }]) - data = copy.deepcopy(verification) - data["total"]["test_cases"] = data["test_cases"] - data = data["total"] - conn.execute( - vresults_table.insert(), - [{"uuid": vuuid, - "verification_uuid": vuuid, - "data": json.dumps(data) - }]) def _check_484cd9413e66(self, engine, data): self.assertEqual("484cd9413e66", @@ -1086,80 +1095,80 @@ class MigrationWalkTestCase(rtest.DBTestCase, deployment_table = db_utils.get_table(engine, "deployments") conn.execute( deployment_table.delete().where( - deployment_table.c.uuid == - self._484cd9413e66_deployment_uuid) + deployment_table.c.uuid + == self._484cd9413e66_deployment_uuid) ) def _pre_upgrade_37fdbb373e8d(self, engine): - self._37fdbb373e8d_deployment_uuid = "37fdbb373e8d-deployment" - self._37fdbb373e8d_verifier_uuid = "37fdbb373e8d-verifier" - self._37fdbb373e8d_verifications_tests = [ - { - "test_1[smoke, negative]": { - "name": "test_1", - "time": 2.32, - "status": "success", - "tags": ["smoke", "negative"] - }, - "test_2[smoke, negative]": { - "name": "test_2", - "time": 4.32, - "status": "success", - "tags": ["smoke", "negative"] - } + self._37fdbb373e8d_deployment_uuid = "37fdbb373e8d-deployment" + self._37fdbb373e8d_verifier_uuid = "37fdbb373e8d-verifier" + self._37fdbb373e8d_verifications_tests = [ + { + "test_1[smoke, negative]": { + "name": "test_1", + "time": 2.32, + "status": "success", + "tags": ["smoke", "negative"] }, - { - "test_3[smoke, negative]": { - "name": "test_3", - "time": 6.32, - "status": "success", - "tags": ["smoke", "negative"] - }, - "test_4[smoke, negative]": { - "name": "test_4", - "time": 8.32, - "status": "success", - "tags": ["smoke", "negative"] - } + "test_2[smoke, negative]": { + "name": "test_2", + "time": 4.32, + "status": "success", + "tags": ["smoke", "negative"] } - ] + }, + { + "test_3[smoke, negative]": { + "name": "test_3", + "time": 6.32, + "status": "success", + "tags": ["smoke", "negative"] + }, + "test_4[smoke, negative]": { + "name": "test_4", + "time": 8.32, + "status": "success", + "tags": ["smoke", "negative"] + } + } + ] - deployment_table = db_utils.get_table(engine, "deployments") - verifiers_table = db_utils.get_table(engine, "verifiers") - verifications_table = db_utils.get_table(engine, "verifications") + deployment_table = db_utils.get_table(engine, "deployments") + verifiers_table = db_utils.get_table(engine, "verifiers") + verifications_table = db_utils.get_table(engine, "verifications") - deployment_status = consts.DeployStatus.DEPLOY_FINISHED - with engine.connect() as conn: + deployment_status = consts.DeployStatus.DEPLOY_FINISHED + with engine.connect() as conn: + conn.execute( + deployment_table.insert(), + [{"uuid": self._37fdbb373e8d_deployment_uuid, + "name": self._37fdbb373e8d_deployment_uuid, + "config": six.b(json.dumps([])), + "enum_deployments_status": deployment_status, + "credentials": six.b(json.dumps([])), + "users": six.b(json.dumps([])) + }]) + + conn.execute( + verifiers_table.insert(), + [{"uuid": self._37fdbb373e8d_verifier_uuid, + "name": self._37fdbb373e8d_verifier_uuid, + "type": "some-type", + "status": consts.VerifierStatus.INSTALLED + }]) + + for i in range(len(self._37fdbb373e8d_verifications_tests)): + tests = self._37fdbb373e8d_verifications_tests[i] conn.execute( - deployment_table.insert(), - [{"uuid": self._37fdbb373e8d_deployment_uuid, - "name": self._37fdbb373e8d_deployment_uuid, - "config": six.b(json.dumps([])), - "enum_deployments_status": deployment_status, - "credentials": six.b(json.dumps([])), - "users": six.b(json.dumps([])) + verifications_table.insert(), + [{"uuid": "verification-uuid-%s" % i, + "deployment_uuid": + self._37fdbb373e8d_deployment_uuid, + "verifier_uuid": self._37fdbb373e8d_verifier_uuid, + "status": consts.VerificationStatus.FINISHED, + "tests": json.dumps(tests) }]) - conn.execute( - verifiers_table.insert(), - [{"uuid": self._37fdbb373e8d_verifier_uuid, - "name": self._37fdbb373e8d_verifier_uuid, - "type": "some-type", - "status": consts.VerifierStatus.INSTALLED - }]) - - for i in range(len(self._37fdbb373e8d_verifications_tests)): - tests = self._37fdbb373e8d_verifications_tests[i] - conn.execute( - verifications_table.insert(), - [{"uuid": "verification-uuid-%s" % i, - "deployment_uuid": - self._37fdbb373e8d_deployment_uuid, - "verifier_uuid": self._37fdbb373e8d_verifier_uuid, - "status": consts.VerificationStatus.FINISHED, - "tests": json.dumps(tests) - }]) - def _check_37fdbb373e8d(self, engine, data): self.assertEqual("37fdbb373e8d", db.schema.schema_revision(engine=engine)) @@ -1189,8 +1198,8 @@ class MigrationWalkTestCase(rtest.DBTestCase, deployment_table = db_utils.get_table(engine, "deployments") conn.execute( deployment_table.delete().where( - deployment_table.c.uuid == - self._37fdbb373e8d_deployment_uuid) + deployment_table.c.uuid + == self._37fdbb373e8d_deployment_uuid) ) def _pre_upgrade_a6f364988fc2(self, engine): @@ -1319,8 +1328,8 @@ class MigrationWalkTestCase(rtest.DBTestCase, deployment_table = db_utils.get_table(engine, "deployments") conn.execute( deployment_table.delete().where( - deployment_table.c.uuid == - self._f33f4610dcda_deployment_uuid) + deployment_table.c.uuid + == self._f33f4610dcda_deployment_uuid) ) def _pre_upgrade_4ef544102ba7(self, engine): @@ -1437,8 +1446,8 @@ class MigrationWalkTestCase(rtest.DBTestCase, deployment_table = db_utils.get_table(engine, "deployments") conn.execute( deployment_table.delete().where( - deployment_table.c.uuid == - self._4ef544102ba7_deployment_uuid) + deployment_table.c.uuid + == self._4ef544102ba7_deployment_uuid) ) def _pre_upgrade_92aaaa2a6bb3(self, engine): diff --git a/tests/unit/common/objects/test_task.py b/tests/unit/common/objects/test_task.py index cf2185fbd3..1f0ba32e44 100644 --- a/tests/unit/common/objects/test_task.py +++ b/tests/unit/common/objects/test_task.py @@ -225,7 +225,6 @@ class TaskTestCase(test.TestCase): "soft": True, "status": consts.TaskStatus.INIT }, { - "soft": True, "status": consts.TaskStatus.VALIDATING, "soft": True, "status": consts.TaskStatus.ABORTED }, { diff --git a/tests/unit/common/test_streaming_algorithms.py b/tests/unit/common/test_streaming_algorithms.py index f5bc451f8a..e44f7a5dea 100644 --- a/tests/unit/common/test_streaming_algorithms.py +++ b/tests/unit/common/test_streaming_algorithms.py @@ -86,8 +86,8 @@ class StdDevComputationTestCase(test.TestCase): for value in stream: std_computation.add(value) mean = float(sum(stream)) / len(stream) - excepted_std = math.sqrt(sum((x - mean) ** 2 for x in stream) / - (len(stream) - 1)) + excepted_std = math.sqrt( + sum((x - mean) ** 2 for x in stream) / (len(stream) - 1)) self.assertEqual(excepted_std, std_computation.result()) def test_merge(self): diff --git a/tests/unit/common/test_utils.py b/tests/unit/common/test_utils.py index edcf0b92f1..b514652dd7 100644 --- a/tests/unit/common/test_utils.py +++ b/tests/unit/common/test_utils.py @@ -339,8 +339,8 @@ class RandomNameTestCase(test.TestCase): self.assertFalse(utils.name_matches_object(name, One, Two)) # ensure that exactly one of the two objects is checked self.assertItemsEqual( - One.name_matches_object.call_args_list + - Two.name_matches_object.call_args_list, + One.name_matches_object.call_args_list + + Two.name_matches_object.call_args_list, [mock.call(name)]) def test_name_matches_object_differing_list(self): diff --git a/tests/unit/doc/test_format.py b/tests/unit/doc/test_format.py index c14653922e..82a717bbd6 100644 --- a/tests/unit/doc/test_format.py +++ b/tests/unit/doc/test_format.py @@ -38,7 +38,7 @@ class TestFormat(testtools.TestCase): if "http://" in line or "https://" in line or ":ref:" in line: continue # Allow lines which do not contain any whitespace - if re.match("\s*[^\s]+$", line): + if re.match(r"\s*[^\s]+$", line): continue if not text_inside_simple_tables: self.assertTrue( diff --git a/tests/unit/plugins/common/runners/test_constant.py b/tests/unit/plugins/common/runners/test_constant.py index 1c6a031eba..bc236adcc3 100644 --- a/tests/unit/plugins/common/runners/test_constant.py +++ b/tests/unit/plugins/common/runners/test_constant.py @@ -149,8 +149,8 @@ class ConstantScenarioRunnerTestCase(test.TestCase): @mock.patch(RUNNERS + "constant.multiprocessing.Queue") @mock.patch(RUNNERS + "constant.multiprocessing.cpu_count") @mock.patch(RUNNERS + "constant.ConstantScenarioRunner._log_debug_info") - @mock.patch(RUNNERS + - "constant.ConstantScenarioRunner._create_process_pool") + @mock.patch( + RUNNERS + "constant.ConstantScenarioRunner._create_process_pool") @mock.patch(RUNNERS + "constant.ConstantScenarioRunner._join_processes") def test_that_cpu_count_is_adjusted_properly( self, diff --git a/tests/unit/plugins/common/runners/test_rps.py b/tests/unit/plugins/common/runners/test_rps.py index bf99a89086..533ce577a8 100644 --- a/tests/unit/plugins/common/runners/test_rps.py +++ b/tests/unit/plugins/common/runners/test_rps.py @@ -301,8 +301,7 @@ class RPSScenarioRunnerTestCase(test.TestCase): @mock.patch(RUNNERS + "constant.multiprocessing.Queue") @mock.patch(RUNNERS + "rps.multiprocessing.cpu_count") @mock.patch(RUNNERS + "rps.RPSScenarioRunner._log_debug_info") - @mock.patch(RUNNERS + - "rps.RPSScenarioRunner._create_process_pool") + @mock.patch(RUNNERS + "rps.RPSScenarioRunner._create_process_pool") @mock.patch(RUNNERS + "rps.RPSScenarioRunner._join_processes") def test_that_cpu_count_is_adjusted_properly( self, mock__join_processes, mock__create_process_pool, diff --git a/tests/unit/task/test_hook.py b/tests/unit/task/test_hook.py index 62171a80e2..d798f91898 100644 --- a/tests/unit/task/test_hook.py +++ b/tests/unit/task/test_hook.py @@ -330,9 +330,9 @@ class TriggerTestCase(test.TestCase): self.assertEqual(len(right_values), hook_cls.return_value.run_async.call_count) hook_status = hook_cls.return_value.result.return_value["status"] + res = [hook_cls.return_value.result.return_value] * len(right_values) self.assertEqual( {"config": cfg, - "results": [hook_cls.return_value.result.return_value] * - len(right_values), + "results": res, "summary": {hook_status: len(right_values)}}, dummy_trigger.get_results()) diff --git a/tests/unit/test_ddt.py b/tests/unit/test_ddt.py index c476040c8b..91a10f717a 100644 --- a/tests/unit/test_ddt.py +++ b/tests/unit/test_ddt.py @@ -84,8 +84,8 @@ class DDTDecoratorCheckerTestCase(test.TestCase): for dirname, dirnames, filenames in os.walk(self.tests_path): for filename in filenames: - if not (filename.startswith("test_") and - filename.endswith(".py")): + if not (filename.startswith("test_") + and filename.endswith(".py")): continue filename = os.path.relpath(os.path.join(dirname, filename)) diff --git a/tests/unit/test_mock.py b/tests/unit/test_mock.py index 0514864e54..6a26f3fbce 100644 --- a/tests/unit/test_mock.py +++ b/tests/unit/test_mock.py @@ -192,8 +192,8 @@ class FuncMockArgsDecoratorsChecker(ast.NodeVisitor): if funcname == "mock.patch": decname = self._get_value(decorator.args[0]) elif funcname == "mock.patch.object": - decname = (self._get_name(decorator.args[0]) + "." + - self._get_value(decorator.args[1])) + decname = (self._get_name(decorator.args[0]) + "." + + self._get_value(decorator.args[1])) else: continue @@ -306,8 +306,8 @@ class MockUsageCheckerTestCase(test.TestCase): for dirname, dirnames, filenames in os.walk(self.tests_path): for filename in filenames: - if (not filename.startswith("test_") or - not filename.endswith(".py")): + if (not filename.startswith("test_") + or not filename.endswith(".py")): continue filename = os.path.relpath(os.path.join(dirname, filename)) diff --git a/tox.ini b/tox.ini index 40c666c074..b7e9b4d624 100644 --- a/tox.ini +++ b/tox.ini @@ -2,6 +2,7 @@ minversion = 2.0 skipsdist = True envlist = py35,py34,py27,pep8,samples +ignore_basepython_conflict = true [testenv] extras = {env:RALLY_EXTRAS:} @@ -23,7 +24,7 @@ commands = find . -type f -name "*.pyc" -delete python {toxinidir}/tests/ci/pytest_launcher.py tests/unit --posargs={posargs} distribute = false -basepython = python2.7 +basepython = python3 passenv = PYTEST_REPORT http_proxy HTTP_PROXY https_proxy HTTPS_PROXY no_proxy NO_PROXY [testenv:pep8] diff --git a/upper-constraints.txt b/upper-constraints.txt index d25bb5f209..f1d770f808 100644 --- a/upper-constraints.txt +++ b/upper-constraints.txt @@ -18,3 +18,5 @@ Sphinx==1.8.5;python_version=='2.7' Sphinx==1.8.5;python_version=='3.4' SQLAlchemy===1.3.10 virtualenv===16.7.7 +importlib-metadata==1.1.3;python_version=='3.4' +more-itertools==7.2.0;python_version=='3.4'