mirror of
https://github.com/ansible-collections/community.general.git
synced 2025-04-29 22:01:27 -07:00
Convert ansible-test compile into a sanity test.
This commit is contained in:
parent
0ce8d389a4
commit
7abdab6c9e
13 changed files with 166 additions and 198 deletions
|
@ -63,7 +63,6 @@ from lib.target import (
|
|||
walk_network_integration_targets,
|
||||
walk_windows_integration_targets,
|
||||
walk_units_targets,
|
||||
walk_compile_targets,
|
||||
)
|
||||
|
||||
from lib.changes import (
|
||||
|
@ -82,7 +81,6 @@ from lib.classification import (
|
|||
from lib.config import (
|
||||
TestConfig,
|
||||
EnvironmentConfig,
|
||||
CompileConfig,
|
||||
IntegrationConfig,
|
||||
NetworkIntegrationConfig,
|
||||
PosixIntegrationConfig,
|
||||
|
@ -91,13 +89,6 @@ from lib.config import (
|
|||
WindowsIntegrationConfig,
|
||||
)
|
||||
|
||||
from lib.test import (
|
||||
TestMessage,
|
||||
TestSuccess,
|
||||
TestFailure,
|
||||
TestSkipped,
|
||||
)
|
||||
|
||||
SUPPORTED_PYTHON_VERSIONS = (
|
||||
'2.6',
|
||||
'2.7',
|
||||
|
@ -106,8 +97,6 @@ SUPPORTED_PYTHON_VERSIONS = (
|
|||
'3.7',
|
||||
)
|
||||
|
||||
COMPILE_PYTHON_VERSIONS = SUPPORTED_PYTHON_VERSIONS
|
||||
|
||||
|
||||
def check_startup():
|
||||
"""Checks to perform at startup before running commands."""
|
||||
|
@ -1024,114 +1013,6 @@ def command_units(args):
|
|||
raise
|
||||
|
||||
|
||||
def command_compile(args):
|
||||
"""
|
||||
:type args: CompileConfig
|
||||
"""
|
||||
changes = get_changes_filter(args)
|
||||
require = (args.require or []) + changes
|
||||
include, exclude = walk_external_targets(walk_compile_targets(), args.include, args.exclude, require)
|
||||
|
||||
if not include:
|
||||
raise AllTargetsSkipped()
|
||||
|
||||
if args.delegate:
|
||||
raise Delegate(require=changes)
|
||||
|
||||
install_command_requirements(args)
|
||||
|
||||
total = 0
|
||||
failed = []
|
||||
|
||||
for version in COMPILE_PYTHON_VERSIONS:
|
||||
# run all versions unless version given, in which case run only that version
|
||||
if args.python and version != args.python_version:
|
||||
continue
|
||||
|
||||
display.info('Compile with Python %s' % version)
|
||||
|
||||
result = compile_version(args, version, include, exclude)
|
||||
result.write(args)
|
||||
|
||||
total += 1
|
||||
|
||||
if isinstance(result, TestFailure):
|
||||
failed.append('compile --python %s' % version)
|
||||
|
||||
if failed:
|
||||
message = 'The %d compile test(s) listed below (out of %d) failed. See error output above for details.\n%s' % (
|
||||
len(failed), total, '\n'.join(failed))
|
||||
|
||||
if args.failure_ok:
|
||||
display.error(message)
|
||||
else:
|
||||
raise ApplicationError(message)
|
||||
|
||||
|
||||
def compile_version(args, python_version, include, exclude):
|
||||
"""
|
||||
:type args: CompileConfig
|
||||
:type python_version: str
|
||||
:type include: tuple[CompletionTarget]
|
||||
:type exclude: tuple[CompletionTarget]
|
||||
:rtype: TestResult
|
||||
"""
|
||||
command = 'compile'
|
||||
test = ''
|
||||
|
||||
# optional list of regex patterns to exclude from tests
|
||||
skip_file = 'test/compile/python%s-skip.txt' % python_version
|
||||
|
||||
if os.path.exists(skip_file):
|
||||
with open(skip_file, 'r') as skip_fd:
|
||||
skip_paths = skip_fd.read().splitlines()
|
||||
else:
|
||||
skip_paths = []
|
||||
|
||||
# augment file exclusions
|
||||
skip_paths += [e.path for e in exclude]
|
||||
|
||||
skip_paths = sorted(skip_paths)
|
||||
|
||||
python = 'python%s' % python_version
|
||||
cmd = [python, 'test/compile/compile.py']
|
||||
|
||||
if skip_paths:
|
||||
cmd += ['-x', '|'.join(skip_paths)]
|
||||
|
||||
cmd += [target.path if target.path == '.' else './%s' % target.path for target in include]
|
||||
|
||||
try:
|
||||
stdout, stderr = run_command(args, cmd, capture=True)
|
||||
status = 0
|
||||
except SubprocessError as ex:
|
||||
stdout = ex.stdout
|
||||
stderr = ex.stderr
|
||||
status = ex.status
|
||||
|
||||
if stderr:
|
||||
raise SubprocessError(cmd=cmd, status=status, stderr=stderr, stdout=stdout)
|
||||
|
||||
if args.explain:
|
||||
return TestSkipped(command, test, python_version=python_version)
|
||||
|
||||
pattern = r'^(?P<path>[^:]*):(?P<line>[0-9]+):(?P<column>[0-9]+): (?P<message>.*)$'
|
||||
|
||||
results = [re.search(pattern, line).groupdict() for line in stdout.splitlines()]
|
||||
|
||||
results = [TestMessage(
|
||||
message=r['message'],
|
||||
path=r['path'].replace('./', ''),
|
||||
line=int(r['line']),
|
||||
column=int(r['column']),
|
||||
) for r in results]
|
||||
|
||||
if results:
|
||||
return TestFailure(command, test, messages=results, python_version=python_version)
|
||||
|
||||
return TestSuccess(command, test, python_version=python_version)
|
||||
|
||||
|
||||
def get_changes_filter(args):
|
||||
"""
|
||||
:type args: TestConfig
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue