mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-11 07:34:31 +00:00
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:
parent
d5170448ae
commit
2d26bf6c26
5 changed files with 43 additions and 5 deletions
|
@ -457,6 +457,34 @@ def setup_buildconfigspec(item):
|
||||||
if not ubconfig.buildconfig.get('config_' + option.lower(), None):
|
if not ubconfig.buildconfig.get('config_' + option.lower(), None):
|
||||||
pytest.skip('.config feature "%s" not enabled' % option.lower())
|
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):
|
def start_test_section(item):
|
||||||
anchors[item.name] = log.start_section(item.name)
|
anchors[item.name] = log.start_section(item.name)
|
||||||
|
|
||||||
|
@ -476,6 +504,7 @@ def pytest_runtest_setup(item):
|
||||||
start_test_section(item)
|
start_test_section(item)
|
||||||
setup_boardspec(item)
|
setup_boardspec(item)
|
||||||
setup_buildconfigspec(item)
|
setup_buildconfigspec(item)
|
||||||
|
setup_requiredtool(item)
|
||||||
|
|
||||||
def pytest_runtest_protocol(item, nextitem):
|
def pytest_runtest_protocol(item, nextitem):
|
||||||
"""pytest hook: Called to execute a test.
|
"""pytest hook: Called to execute a test.
|
||||||
|
|
|
@ -113,6 +113,7 @@ test_sizes_default = (
|
||||||
first_usb_dev_port = None
|
first_usb_dev_port = None
|
||||||
|
|
||||||
@pytest.mark.buildconfigspec('cmd_dfu')
|
@pytest.mark.buildconfigspec('cmd_dfu')
|
||||||
|
@pytest.mark.requiredtool('dfu-util')
|
||||||
def test_dfu(u_boot_console, env__usb_dev_port, env__dfu_config):
|
def test_dfu(u_boot_console, env__usb_dev_port, env__dfu_config):
|
||||||
"""Test the "dfu" command; the host system must be able to enumerate a USB
|
"""Test the "dfu" command; the host system must be able to enumerate a USB
|
||||||
device when "dfu" is running, various DFU transfers are tested, and the
|
device when "dfu" is running, various DFU transfers are tested, and the
|
||||||
|
|
|
@ -111,6 +111,7 @@ sb save hostfs 0 %(loadables2_addr)x %(loadables2_out)s %(loadables2_size)x
|
||||||
|
|
||||||
@pytest.mark.boardspec('sandbox')
|
@pytest.mark.boardspec('sandbox')
|
||||||
@pytest.mark.buildconfigspec('fit_signature')
|
@pytest.mark.buildconfigspec('fit_signature')
|
||||||
|
@pytest.mark.requiredtool('dtc')
|
||||||
def test_fit(u_boot_console):
|
def test_fit(u_boot_console):
|
||||||
def make_fname(leaf):
|
def make_fname(leaf):
|
||||||
"""Make a temporary filename
|
"""Make a temporary filename
|
||||||
|
|
|
@ -38,15 +38,14 @@ class GptTestDiskImage(object):
|
||||||
fd = os.open(self.path, os.O_RDWR | os.O_CREAT)
|
fd = os.open(self.path, os.O_RDWR | os.O_CREAT)
|
||||||
os.ftruncate(fd, 4194304)
|
os.ftruncate(fd, 4194304)
|
||||||
os.close(fd)
|
os.close(fd)
|
||||||
sgdisk = '/sbin/sgdisk'
|
cmd = ('sgdisk', '-U', '375a56f7-d6c9-4e81-b5f0-09d41ca89efe',
|
||||||
cmd = (sgdisk, '-U', '375a56f7-d6c9-4e81-b5f0-09d41ca89efe',
|
|
||||||
self.path)
|
self.path)
|
||||||
u_boot_utils.run_and_log(u_boot_console, cmd)
|
u_boot_utils.run_and_log(u_boot_console, cmd)
|
||||||
cmd = (sgdisk, '--new=1:2048:2560', self.path)
|
cmd = ('sgdisk', '--new=1:2048:2560', self.path)
|
||||||
u_boot_utils.run_and_log(u_boot_console, cmd)
|
u_boot_utils.run_and_log(u_boot_console, cmd)
|
||||||
cmd = (sgdisk, '--new=2:4096:4608', self.path)
|
cmd = ('sgdisk', '--new=2:4096:4608', self.path)
|
||||||
u_boot_utils.run_and_log(u_boot_console, cmd)
|
u_boot_utils.run_and_log(u_boot_console, cmd)
|
||||||
cmd = (sgdisk, '-l', self.path)
|
cmd = ('sgdisk', '-l', self.path)
|
||||||
u_boot_utils.run_and_log(u_boot_console, cmd)
|
u_boot_utils.run_and_log(u_boot_console, cmd)
|
||||||
|
|
||||||
gtdi = None
|
gtdi = None
|
||||||
|
@ -64,6 +63,7 @@ def state_disk_image(u_boot_console):
|
||||||
|
|
||||||
@pytest.mark.boardspec('sandbox')
|
@pytest.mark.boardspec('sandbox')
|
||||||
@pytest.mark.buildconfigspec('cmd_gpt')
|
@pytest.mark.buildconfigspec('cmd_gpt')
|
||||||
|
@pytest.mark.requiredtool('sgdisk')
|
||||||
def test_gpt_guid(state_disk_image, u_boot_console):
|
def test_gpt_guid(state_disk_image, u_boot_console):
|
||||||
"""Test the gpt guid command."""
|
"""Test the gpt guid command."""
|
||||||
|
|
||||||
|
@ -73,6 +73,7 @@ def test_gpt_guid(state_disk_image, u_boot_console):
|
||||||
|
|
||||||
@pytest.mark.boardspec('sandbox')
|
@pytest.mark.boardspec('sandbox')
|
||||||
@pytest.mark.buildconfigspec('cmd_gpt')
|
@pytest.mark.buildconfigspec('cmd_gpt')
|
||||||
|
@pytest.mark.requiredtool('sgdisk')
|
||||||
def test_gpt_save_guid(state_disk_image, u_boot_console):
|
def test_gpt_save_guid(state_disk_image, u_boot_console):
|
||||||
"""Test the gpt guid command to save GUID into a string."""
|
"""Test the gpt guid command to save GUID into a string."""
|
||||||
|
|
||||||
|
@ -86,6 +87,7 @@ def test_gpt_save_guid(state_disk_image, u_boot_console):
|
||||||
@pytest.mark.boardspec('sandbox')
|
@pytest.mark.boardspec('sandbox')
|
||||||
@pytest.mark.buildconfigspec('cmd_gpt')
|
@pytest.mark.buildconfigspec('cmd_gpt')
|
||||||
@pytest.mark.buildconfigspec('cmd_gpt_rename')
|
@pytest.mark.buildconfigspec('cmd_gpt_rename')
|
||||||
|
@pytest.mark.requiredtool('sgdisk')
|
||||||
def test_gpt_rename_partition(state_disk_image, u_boot_console):
|
def test_gpt_rename_partition(state_disk_image, u_boot_console):
|
||||||
"""Test the gpt rename command to write partition names."""
|
"""Test the gpt rename command to write partition names."""
|
||||||
|
|
||||||
|
@ -101,6 +103,7 @@ def test_gpt_rename_partition(state_disk_image, u_boot_console):
|
||||||
@pytest.mark.buildconfigspec('cmd_gpt')
|
@pytest.mark.buildconfigspec('cmd_gpt')
|
||||||
@pytest.mark.buildconfigspec('cmd_gpt_rename')
|
@pytest.mark.buildconfigspec('cmd_gpt_rename')
|
||||||
@pytest.mark.buildconfigspec('cmd_part')
|
@pytest.mark.buildconfigspec('cmd_part')
|
||||||
|
@pytest.mark.requiredtool('sgdisk')
|
||||||
def test_gpt_swap_partitions(state_disk_image, u_boot_console):
|
def test_gpt_swap_partitions(state_disk_image, u_boot_console):
|
||||||
"""Test the gpt swap command to exchange two partition names."""
|
"""Test the gpt swap command to exchange two partition names."""
|
||||||
|
|
||||||
|
|
|
@ -31,6 +31,10 @@ import u_boot_utils as util
|
||||||
|
|
||||||
@pytest.mark.boardspec('sandbox')
|
@pytest.mark.boardspec('sandbox')
|
||||||
@pytest.mark.buildconfigspec('fit_signature')
|
@pytest.mark.buildconfigspec('fit_signature')
|
||||||
|
@pytest.mark.requiredtool('dtc')
|
||||||
|
@pytest.mark.requiredtool('fdtget')
|
||||||
|
@pytest.mark.requiredtool('fdtput')
|
||||||
|
@pytest.mark.requiredtool('openssl')
|
||||||
def test_vboot(u_boot_console):
|
def test_vboot(u_boot_console):
|
||||||
"""Test verified boot signing with mkimage and verification with 'bootm'.
|
"""Test verified boot signing with mkimage and verification with 'bootm'.
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue