mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-15 17:34:43 +00:00
test: Introduce the concept of a role
In Labgrid there is the concept of a 'role', which is similar to the U-Boot board ID in U-Boot's pytest subsystem. The role indicates both the target and information about the U-Boot build to use. It can also provide any amount of other configuration. The information is obtained using the 'labgrid-client query' operation. Using this role, all required configuration for the board is stored within the Labgrid environment, with pytest simply querying it. This allows connecting to boards using an interactive console, something that isn't possible without some kind of mapping. It also means that we don't need to replicate the pytest functionality in tbot, since Labgrid can handle the console and kick off builds as needed. Make use of this in tests, so that only the role is required in gitlab and other situations. The board type and other things can be queried as needed. Use a new 'u-boot-test-getrole' script to obtain the requested information. With this it is possible to run lab tests in gitlab with just a single 'ROLE' variable for each board. Note that, without this feature: - interactive use of boards with Labgrid-sjg would require repeating the id/board in a separate configuration file - Gitlab yaml file would need to specify both the id and board This feature is entirely optional, however, with the code gracefully falling back to using a separate ID and board. Link: https://tbot.tools Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
6f3583074f
commit
bf89a8f1fc
1 changed files with 35 additions and 5 deletions
|
@ -23,6 +23,7 @@ from pathlib import Path
|
|||
import pytest
|
||||
import re
|
||||
from _pytest.runner import runtestprotocol
|
||||
import subprocess
|
||||
import sys
|
||||
from u_boot_spawn import BootFail, Timeout, Unexpected, handle_exception
|
||||
|
||||
|
@ -80,6 +81,7 @@ def pytest_addoption(parser):
|
|||
parser.addoption('--gdbserver', default=None,
|
||||
help='Run sandbox under gdbserver. The argument is the channel '+
|
||||
'over which gdbserver should communicate, e.g. localhost:1234')
|
||||
parser.addoption('--role', help='U-Boot board role (for Labgrid-sjg)')
|
||||
parser.addoption('--use-running-system', default=False, action='store_true',
|
||||
help="Assume that U-Boot is ready and don't wait for a prompt")
|
||||
|
||||
|
@ -131,12 +133,40 @@ def get_details(config):
|
|||
str: Build directory
|
||||
str: Source directory
|
||||
"""
|
||||
board_type = config.getoption('board_type')
|
||||
board_identity = config.getoption('board_identity')
|
||||
build_dir = config.getoption('build_dir')
|
||||
role = config.getoption('role')
|
||||
|
||||
source_dir = os.path.dirname(os.path.dirname(TEST_PY_DIR))
|
||||
default_build_dir = source_dir + '/build-' + board_type
|
||||
# Get a few provided parameters
|
||||
build_dir = config.getoption('build_dir')
|
||||
if role:
|
||||
# When using a role, build_dir and build_dir_extra are normally not set,
|
||||
# since they are picked up from Labgrid-sjg via the u-boot-test-getrole
|
||||
# script
|
||||
board_identity = role
|
||||
cmd = ['u-boot-test-getrole', role, '--configure']
|
||||
env = os.environ.copy()
|
||||
if build_dir:
|
||||
env['U_BOOT_BUILD_DIR'] = build_dir
|
||||
proc = subprocess.run(cmd, capture_output=True, encoding='utf-8',
|
||||
env=env)
|
||||
if proc.returncode:
|
||||
raise ValueError(proc.stderr)
|
||||
# For debugging
|
||||
# print('conftest: lab:', proc.stdout)
|
||||
vals = {}
|
||||
for line in proc.stdout.splitlines():
|
||||
item, value = line.split(' ', maxsplit=1)
|
||||
k = item.split(':')[-1]
|
||||
vals[k] = value
|
||||
# For debugging
|
||||
# print('conftest: lab info:', vals)
|
||||
board_type, default_build_dir, source_dir = (vals['board'],
|
||||
vals['build_dir'], vals['source_dir'])
|
||||
else:
|
||||
board_type = config.getoption('board_type')
|
||||
board_identity = config.getoption('board_identity')
|
||||
|
||||
source_dir = os.path.dirname(os.path.dirname(TEST_PY_DIR))
|
||||
default_build_dir = source_dir + '/build-' + board_type
|
||||
if not build_dir:
|
||||
build_dir = default_build_dir
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue