diff options
-rw-r--r-- | functest/tests/unit/utils/test_functest_utils.py | 12 | ||||
-rw-r--r-- | functest/utils/config.py | 1 | ||||
-rw-r--r-- | functest/utils/constants.py | 5 | ||||
-rw-r--r-- | functest/utils/functest_utils.py | 92 | ||||
-rw-r--r-- | tox.ini | 6 |
5 files changed, 56 insertions, 60 deletions
diff --git a/functest/tests/unit/utils/test_functest_utils.py b/functest/tests/unit/utils/test_functest_utils.py index 4438c6a2..218d03c4 100644 --- a/functest/tests/unit/utils/test_functest_utils.py +++ b/functest/tests/unit/utils/test_functest_utils.py @@ -10,12 +10,12 @@ # pylint: disable=missing-docstring import logging -import pkg_resources import os import time import unittest import mock +import pkg_resources from six.moves import urllib from functest.utils import functest_utils @@ -147,8 +147,8 @@ class FunctestUtilsTesting(unittest.TestCase): def cmd_readline(self): return 'test_value\n' - @mock.patch('functest.utils.functest_utils.logger.error') - @mock.patch('functest.utils.functest_utils.logger.info') + @mock.patch('functest.utils.functest_utils.LOGGER.error') + @mock.patch('functest.utils.functest_utils.LOGGER.info') def test_execute_command_args_present_with_error(self, mock_logger_info, mock_logger_error): with mock.patch('functest.utils.functest_utils.subprocess.Popen') \ @@ -178,7 +178,7 @@ class FunctestUtilsTesting(unittest.TestCase): mopen.assert_called_once_with(self.output_file, "w") mock_logger_error.assert_called_once_with(self.error_msg) - @mock.patch('functest.utils.functest_utils.logger.info') + @mock.patch('functest.utils.functest_utils.LOGGER.info') def test_execute_command_args_present_with_success(self, mock_logger_info, ): with mock.patch('functest.utils.functest_utils.subprocess.Popen') \ @@ -255,7 +255,7 @@ class FunctestUtilsTesting(unittest.TestCase): def _get_functest_config(self, var): return var - @mock.patch('functest.utils.functest_utils.logger.error') + @mock.patch('functest.utils.functest_utils.LOGGER.error') def test_get_dict_by_test(self, mock_logger_error): with mock.patch('six.moves.builtins.open', mock.mock_open()), \ mock.patch('functest.utils.functest_utils.yaml.safe_load') \ @@ -321,7 +321,7 @@ class FunctestUtilsTesting(unittest.TestCase): resp = functest_utils.get_functest_yaml() self.assertEqual(resp, self.file_yaml) - @mock.patch('functest.utils.functest_utils.logger.info') + @mock.patch('functest.utils.functest_utils.LOGGER.info') def test_print_separator(self, mock_logger_info): functest_utils.print_separator() mock_logger_info.assert_called_once_with("=======================" diff --git a/functest/utils/config.py b/functest/utils/config.py index f4749a75..050f12a9 100644 --- a/functest/utils/config.py +++ b/functest/utils/config.py @@ -12,6 +12,7 @@ import six class Config(object): def __init__(self): try: + # pylint: disable=bad-continuation with open(pkg_resources.resource_filename( 'functest', 'ci/config_functest.yaml')) as yfile: self.functest_yaml = yaml.safe_load(yfile) diff --git a/functest/utils/constants.py b/functest/utils/constants.py index 75c97c76..cb3ea787 100644 --- a/functest/utils/constants.py +++ b/functest/utils/constants.py @@ -1,12 +1,15 @@ #!/usr/bin/env python +# pylint: disable=missing-docstring + import six from functest.utils import config from functest.utils import env -class Constants(object): +class Constants(object): # pylint: disable=too-few-public-methods + def __init__(self): for attr_n, attr_v in six.iteritems(config.CONF.__dict__): self.__setattr__(attr_n, attr_v) diff --git a/functest/utils/functest_utils.py b/functest/utils/functest_utils.py index 1e88dadb..c1491855 100644 --- a/functest/utils/functest_utils.py +++ b/functest/utils/functest_utils.py @@ -6,24 +6,25 @@ # are made available under the terms of the Apache License, Version 2.0 # which accompanies this distribution, and is available at # http://www.apache.org/licenses/LICENSE-2.0 -# -import functools + +# pylint: disable=missing-docstring + +from __future__ import print_function import logging import os -import pkg_resources import re import shutil import subprocess import sys -import time +import pkg_resources import dns.resolver from six.moves import urllib import yaml from functest.utils import constants -logger = logging.getLogger(__name__) +LOGGER = logging.getLogger(__name__) # ---------------------------------------------------------- @@ -53,8 +54,8 @@ def download_url(url, dest_path): except (urllib.error.HTTPError, urllib.error.URLError): return False - with open(dest, 'wb') as f: - shutil.copyfileobj(response, f) + with open(dest, 'wb') as lfile: + shutil.copyfileobj(response, lfile) return True @@ -72,13 +73,13 @@ def get_resolvconf_ns(): line = rconf.readline() resolver = dns.resolver.Resolver() while line: - ip = re.search(r"\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b", line) - if ip: - resolver.nameservers = [ip.group(0)] + addr_ip = re.search(r"\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b", line) + if addr_ip: + resolver.nameservers = [addr_ip.group(0)] try: result = resolver.query('opnfv.org')[0] if result != "": - nameservers.append(ip.group()) + nameservers.append(addr_ip.group()) except dns.exception.Timeout: pass line = rconf.readline() @@ -109,49 +110,50 @@ def execute_command(cmd, info=False, error_msg="", msg_exec = ("Executing command: '%s'" % cmd) if verbose: if info: - logger.info(msg_exec) + LOGGER.info(msg_exec) else: - logger.debug(msg_exec) - p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, - stderr=subprocess.STDOUT) + LOGGER.debug(msg_exec) + popen = subprocess.Popen( + cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) if output_file: - f = open(output_file, "w") - for line in iter(p.stdout.readline, b''): + ofd = open(output_file, "w") + for line in iter(popen.stdout.readline, b''): if output_file: - f.write(line) + ofd.write(line) else: line = line.replace('\n', '') - print(line) + print (line) sys.stdout.flush() if output_file: - f.close() - p.stdout.close() - returncode = p.wait() + ofd.close() + popen.stdout.close() + returncode = popen.wait() if returncode != 0: if verbose: - logger.error(error_msg) + LOGGER.error(error_msg) return returncode def get_dict_by_test(testname): + # pylint: disable=bad-continuation with open(pkg_resources.resource_filename( - 'functest', 'ci/testcases.yaml')) as f: - testcases_yaml = yaml.safe_load(f) + 'functest', 'ci/testcases.yaml')) as tyaml: + testcases_yaml = yaml.safe_load(tyaml) for dic_tier in testcases_yaml.get("tiers"): for dic_testcase in dic_tier['testcases']: if dic_testcase['case_name'] == testname: return dic_testcase - logger.error('Project %s is not defined in testcases.yaml' % testname) + LOGGER.error('Project %s is not defined in testcases.yaml', testname) return None def get_criteria_by_test(testname): - dict = get_dict_by_test(testname) - if dict: - return dict['criteria'] + tdict = get_dict_by_test(testname) + if tdict: + return tdict['criteria'] return None @@ -160,21 +162,20 @@ def get_criteria_by_test(testname): # YAML UTILS # # ----------------------------------------------------------- -def get_parameter_from_yaml(parameter, file): +def get_parameter_from_yaml(parameter, yfile): """ Returns the value of a given parameter in file.yaml parameter must be given in string format with dots Example: general.openstack.image_name """ - with open(file) as f: - file_yaml = yaml.safe_load(f) - f.close() + with open(yfile) as yfd: + file_yaml = yaml.safe_load(yfd) value = file_yaml for element in parameter.split("."): value = value.get(element) if value is None: raise ValueError("The parameter %s is not defined in" - " %s" % (parameter, file)) + " %s" % (parameter, yfile)) return value @@ -184,25 +185,12 @@ def get_functest_config(parameter): def get_functest_yaml(): - with open(constants.CONST.__getattribute__('CONFIG_FUNCTEST_YAML')) as f: - functest_yaml = yaml.safe_load(f) - f.close() + # pylint: disable=bad-continuation + with open(constants.CONST.__getattribute__( + 'CONFIG_FUNCTEST_YAML')) as yaml_fd: + functest_yaml = yaml.safe_load(yaml_fd) return functest_yaml def print_separator(): - logger.info("==============================================") - - -def timethis(func): - """Measure the time it takes for a function to complete""" - @functools.wraps(func) - def timed(*args, **kwargs): - ts = time.time() - result = func(*args, **kwargs) - te = time.time() - elapsed = '{0}'.format(te - ts) - logger.info('{f}(*{a}, **{kw}) took: {t} sec'.format( - f=func.__name__, a=args, kw=kwargs, t=elapsed)) - return result, elapsed - return timed + LOGGER.info("==============================================") @@ -43,12 +43,16 @@ modules = functest.tests.unit.odl functest.tests.unit.vnf.router functest.tests.unit.utils.test_decorators + functest.utils.config functest.utils.decorators + functest.utils.constants + functest.utils.env + functest.utils.functest_utils commands = bash -c "\ pylint -f parseable --disable=locally-disabled functest | \ tee pylint.out | sed -ne '/Raw metrics/,//p'" - pylint --disable=locally-disabled --reports=n --errors-only functest + pylint --reports=n --errors-only functest pylint --disable=locally-disabled --reports=n {[testenv:pylint]modules} [testenv:yamllint] |