Sanity test fixes for future collections support.

This commit is contained in:
Matt Clay 2019-07-09 22:50:15 -07:00
parent 9e1b19e364
commit 520af5cb47
4 changed files with 26 additions and 26 deletions

View file

@ -17,6 +17,7 @@ from lib.util import (
load_plugins, load_plugins,
parse_to_list_of_dict, parse_to_list_of_dict,
ABC, ABC,
INSTALL_ROOT,
is_binary_file, is_binary_file,
read_lines_without_comments, read_lines_without_comments,
) )
@ -138,9 +139,9 @@ def collect_code_smell_tests():
:rtype: tuple[SanityCodeSmellTest] :rtype: tuple[SanityCodeSmellTest]
""" """
skip_file = 'test/sanity/code-smell/skip.txt' skip_file = 'test/sanity/code-smell/skip.txt'
skip_tests = read_lines_without_comments(skip_file, remove_blank_lines=True) skip_tests = read_lines_without_comments(skip_file, remove_blank_lines=True, optional=True)
paths = glob.glob('test/sanity/code-smell/*') paths = glob.glob(os.path.join(INSTALL_ROOT, 'test/sanity/code-smell/*'))
paths = sorted(p for p in paths if os.access(p, os.X_OK) and os.path.isfile(p) and os.path.basename(p) not in skip_tests) paths = sorted(p for p in paths if os.access(p, os.X_OK) and os.path.isfile(p) and os.path.basename(p) not in skip_tests)
tests = tuple(SanityCodeSmellTest(p) for p in paths) tests = tuple(SanityCodeSmellTest(p) for p in paths)

View file

@ -18,6 +18,7 @@ from lib.util import (
find_python, find_python,
read_lines_without_comments, read_lines_without_comments,
parse_to_list_of_dict, parse_to_list_of_dict,
INSTALL_ROOT,
) )
from lib.config import ( from lib.config import (
@ -50,7 +51,7 @@ class CompileTest(SanityMultipleVersion):
if not paths: if not paths:
return SanitySkipped(self.name, python_version=python_version) return SanitySkipped(self.name, python_version=python_version)
cmd = [find_python(python_version), 'test/sanity/compile/compile.py'] cmd = [find_python(python_version), os.path.join(INSTALL_ROOT, 'test/sanity/compile/compile.py')]
data = '\n'.join(paths) data = '\n'.join(paths)

View file

@ -7,6 +7,8 @@ import json
import os import os
import datetime import datetime
import lib.types as t
from lib.sanity import ( from lib.sanity import (
SanitySingleVersion, SanitySingleVersion,
SanityMessage, SanityMessage,
@ -21,6 +23,7 @@ from lib.util import (
display, display,
read_lines_without_comments, read_lines_without_comments,
ConfigParser, ConfigParser,
INSTALL_ROOT,
) )
from lib.executor import ( from lib.executor import (
@ -51,12 +54,6 @@ UNSUPPORTED_PYTHON_VERSIONS = (
class PylintTest(SanitySingleVersion): class PylintTest(SanitySingleVersion):
"""Sanity test using pylint.""" """Sanity test using pylint."""
def __init__(self):
super(PylintTest, self).__init__()
self.plugin_dir = 'test/sanity/pylint/plugins'
self.plugin_names = sorted(p[0] for p in [os.path.splitext(p) for p in os.listdir(self.plugin_dir)] if p[1] == '.py' and p[0] != '__init__')
def test(self, args, targets): def test(self, args, targets):
""" """
:type args: SanityConfig :type args: SanityConfig
@ -67,14 +64,18 @@ class PylintTest(SanitySingleVersion):
display.warning('Skipping pylint on unsupported Python version %s.' % args.python_version) display.warning('Skipping pylint on unsupported Python version %s.' % args.python_version)
return SanitySkipped(self.name) return SanitySkipped(self.name)
skip_paths = read_lines_without_comments(PYLINT_SKIP_PATH) plugin_dir = os.path.join(INSTALL_ROOT, 'test/sanity/pylint/plugins')
plugin_names = sorted(p[0] for p in [
os.path.splitext(p) for p in os.listdir(plugin_dir)] if p[1] == '.py' and p[0] != '__init__')
skip_paths = read_lines_without_comments(PYLINT_SKIP_PATH, optional=True)
invalid_ignores = [] invalid_ignores = []
supported_versions = set(SUPPORTED_PYTHON_VERSIONS) - set(UNSUPPORTED_PYTHON_VERSIONS) supported_versions = set(SUPPORTED_PYTHON_VERSIONS) - set(UNSUPPORTED_PYTHON_VERSIONS)
supported_versions = set([v.split('.')[0] for v in supported_versions]) | supported_versions supported_versions = set([v.split('.')[0] for v in supported_versions]) | supported_versions
ignore_entries = read_lines_without_comments(PYLINT_IGNORE_PATH) ignore_entries = read_lines_without_comments(PYLINT_IGNORE_PATH, optional=True)
ignore = collections.defaultdict(dict) ignore = collections.defaultdict(dict)
line = 0 line = 0
@ -172,7 +173,7 @@ class PylintTest(SanitySingleVersion):
continue continue
context_start = datetime.datetime.utcnow() context_start = datetime.datetime.utcnow()
messages += self.pylint(args, context, context_paths) messages += self.pylint(args, context, context_paths, plugin_dir, plugin_names)
context_end = datetime.datetime.utcnow() context_end = datetime.datetime.utcnow()
context_times.append('%s: %d (%s)' % (context, len(context_paths), context_end - context_start)) context_times.append('%s: %d (%s)' % (context, len(context_paths), context_end - context_start))
@ -259,17 +260,13 @@ class PylintTest(SanitySingleVersion):
return SanitySuccess(self.name) return SanitySuccess(self.name)
def pylint(self, args, context, paths): @staticmethod
""" def pylint(args, context, paths, plugin_dir, plugin_names): # type: (SanityConfig, str, t.List[str], str, t.List[str]) -> t.List[t.Dict[str, str]]
:type args: SanityConfig """Run pylint using the config specified by the context on the specified paths."""
:type context: str rcfile = os.path.join(INSTALL_ROOT, 'test/sanity/pylint/config/%s' % context.split('/')[0])
:type paths: list[str]
:rtype: list[dict[str, str]]
"""
rcfile = 'test/sanity/pylint/config/%s' % context.split('/')[0]
if not os.path.exists(rcfile): if not os.path.exists(rcfile):
rcfile = 'test/sanity/pylint/config/default' rcfile = os.path.join(INSTALL_ROOT, 'test/sanity/pylint/config/default')
parser = ConfigParser() parser = ConfigParser()
parser.read(rcfile) parser.read(rcfile)
@ -280,7 +277,7 @@ class PylintTest(SanitySingleVersion):
config = dict() config = dict()
disable_plugins = set(i.strip() for i in config.get('disable-plugins', '').split(',') if i) disable_plugins = set(i.strip() for i in config.get('disable-plugins', '').split(',') if i)
load_plugins = set(self.plugin_names) - disable_plugins load_plugins = set(plugin_names) - disable_plugins
cmd = [ cmd = [
args.python_executable, args.python_executable,
@ -294,7 +291,7 @@ class PylintTest(SanitySingleVersion):
] + paths ] + paths
env = ansible_environment(args) env = ansible_environment(args)
env['PYTHONPATH'] += '%s%s' % (os.path.pathsep, self.plugin_dir) env['PYTHONPATH'] += '%s%s' % (os.path.pathsep, plugin_dir)
if paths: if paths:
display.info('Checking %d file(s) in context "%s" with config: %s' % (len(paths), context, rcfile), verbosity=1) display.info('Checking %d file(s) in context "%s" with config: %s' % (len(paths), context, rcfile), verbosity=1)

View file

@ -18,6 +18,7 @@ from lib.util import (
display, display,
run_command, run_command,
read_lines_without_comments, read_lines_without_comments,
INSTALL_ROOT,
) )
from lib.ansible_util import ( from lib.ansible_util import (
@ -54,7 +55,7 @@ class ValidateModulesTest(SanitySingleVersion):
display.warning('Skipping validate-modules on unsupported Python version %s.' % args.python_version) display.warning('Skipping validate-modules on unsupported Python version %s.' % args.python_version)
return SanitySkipped(self.name) return SanitySkipped(self.name)
skip_paths = read_lines_without_comments(VALIDATE_SKIP_PATH) skip_paths = read_lines_without_comments(VALIDATE_SKIP_PATH, optional=True)
skip_paths_set = set(skip_paths) skip_paths_set = set(skip_paths)
env = ansible_environment(args, color=False) env = ansible_environment(args, color=False)
@ -66,14 +67,14 @@ class ValidateModulesTest(SanitySingleVersion):
cmd = [ cmd = [
args.python_executable, args.python_executable,
'test/sanity/validate-modules/validate-modules', os.path.join(INSTALL_ROOT, 'test/sanity/validate-modules/validate-modules'),
'--format', 'json', '--format', 'json',
'--arg-spec', '--arg-spec',
] + paths ] + paths
invalid_ignores = [] invalid_ignores = []
ignore_entries = read_lines_without_comments(VALIDATE_IGNORE_PATH) ignore_entries = read_lines_without_comments(VALIDATE_IGNORE_PATH, optional=True)
ignore = collections.defaultdict(dict) ignore = collections.defaultdict(dict)
line = 0 line = 0