test/py: add skip marker for reliance on tools

Some tests use external tools (executables) during their operation. Add
a test.py mark to indicate this. This allows those tests to be skipped if
the required tool is not present.

Signed-off-by: Stephen Warren <swarren@nvidia.com>
This commit is contained in:
Stephen Warren
2017-09-18 11:11:49 -06:00
committed by Tom Rini
parent d5170448ae
commit 2d26bf6c26
5 changed files with 43 additions and 5 deletions

View File

@@ -457,6 +457,34 @@ def setup_buildconfigspec(item):
if not ubconfig.buildconfig.get('config_' + option.lower(), None):
pytest.skip('.config feature "%s" not enabled' % option.lower())
def tool_is_in_path(tool):
for path in os.environ["PATH"].split(os.pathsep):
fn = os.path.join(path, tool)
if os.path.isfile(fn) and os.access(fn, os.X_OK):
return True
return False
def setup_requiredtool(item):
"""Process any 'requiredtool' marker for a test.
Such a marker lists some external tool (binary, executable, application)
that the test requires. If tests are being executed on a system that
doesn't have the required tool, the test is marked to be skipped.
Args:
item: The pytest test item.
Returns:
Nothing.
"""
mark = item.get_marker('requiredtool')
if not mark:
return
for tool in mark.args:
if not tool_is_in_path(tool):
pytest.skip('tool "%s" not in $PATH' % tool)
def start_test_section(item):
anchors[item.name] = log.start_section(item.name)
@@ -476,6 +504,7 @@ def pytest_runtest_setup(item):
start_test_section(item)
setup_boardspec(item)
setup_buildconfigspec(item)
setup_requiredtool(item)
def pytest_runtest_protocol(item, nextitem):
"""pytest hook: Called to execute a test.