Overhaul ansible-test code coverage and injector. (#53510)

This commit is contained in:
Matt Clay 2019-03-13 07:14:12 -07:00 committed by GitHub
parent 3bdbe24861
commit a8e328f474
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
19 changed files with 253 additions and 370 deletions

View file

@ -1 +0,0 @@
injector.py

63
test/runner/injector/python.py Executable file
View file

@ -0,0 +1,63 @@
#!/usr/bin/env python
"""Provides an entry point for python scripts and python modules on the controller with the current python interpreter and optional code coverage collection."""
import imp
import os
import sys
def main():
"""Main entry point."""
name = os.path.basename(__file__)
args = [sys.executable]
coverage_config = os.environ.get('_ANSIBLE_COVERAGE_CONFIG')
coverage_output = os.environ.get('_ANSIBLE_COVERAGE_OUTPUT')
if coverage_config:
if coverage_output:
args += ['-m', 'coverage.__main__', 'run', '--rcfile', coverage_config]
else:
try:
imp.find_module('coverage')
except ImportError:
exit('ERROR: Could not find `coverage` module. Did you use a virtualenv created without --system-site-packages or with the wrong interpreter?')
if name == 'python.py':
if sys.argv[1] == '-c':
# prevent simple misuse of python.py with -c which does not work with coverage
sys.exit('ERROR: Use `python -c` instead of `python.py -c` to avoid errors when code coverage is collected.')
elif name == 'pytest':
args += ['-m', 'pytest']
else:
args += [find_executable(name)]
args += sys.argv[1:]
os.execv(args[0], args)
def find_executable(name):
"""
:type name: str
:rtype: str
"""
path = os.environ.get('PATH', os.path.defpath)
seen = set([os.path.abspath(__file__)])
for base in path.split(os.path.pathsep):
candidate = os.path.abspath(os.path.join(base, name))
if candidate in seen:
continue
seen.add(candidate)
if os.path.exists(candidate) and os.access(candidate, os.F_OK | os.X_OK):
return candidate
raise Exception('Executable "%s" not found in path: %s' % (name, path))
if __name__ == '__main__':
main()