mirror of
https://github.com/espressif/esp-idf.git
synced 2025-08-08 04:02:27 +00:00
ci: use tags as markers
This commit is contained in:
73
conftest.py
73
conftest.py
@@ -42,10 +42,7 @@ DEFAULT_SDKCONFIG = 'default'
|
||||
# Help Functions #
|
||||
##################
|
||||
def is_target_marker(marker: str) -> bool:
|
||||
if marker.startswith('esp32'):
|
||||
return True
|
||||
|
||||
if marker.startswith('esp8'):
|
||||
if marker.startswith('esp32') or marker.startswith('esp8') or marker == 'linux':
|
||||
return True
|
||||
|
||||
return False
|
||||
@@ -59,6 +56,26 @@ def item_marker_names(item: Item) -> List[str]:
|
||||
return [marker.name for marker in item.iter_markers()]
|
||||
|
||||
|
||||
def get_target_marker(markexpr: str) -> str:
|
||||
candidates = set()
|
||||
# we use `-m "esp32 and generic"` in our CI to filter the test cases
|
||||
for marker in markexpr.split('and'):
|
||||
marker = marker.strip()
|
||||
if is_target_marker(marker):
|
||||
candidates.add(marker)
|
||||
|
||||
if len(candidates) > 1:
|
||||
raise ValueError(
|
||||
f'Specified more than one target markers: {candidates}. Please specify no more than one.'
|
||||
)
|
||||
elif len(candidates) == 1:
|
||||
return candidates.pop()
|
||||
else:
|
||||
raise ValueError(
|
||||
'Please specify one target marker via "--target [TARGET]" or via "-m [TARGET]"'
|
||||
)
|
||||
|
||||
|
||||
############
|
||||
# Fixtures #
|
||||
############
|
||||
@@ -79,15 +96,19 @@ def session_tempdir() -> str:
|
||||
def log_minimum_free_heap_size(dut: IdfDut, config: str) -> Callable[..., None]:
|
||||
def real_func() -> None:
|
||||
res = dut.expect(r'Minimum free heap size: (\d+) bytes')
|
||||
logging.info('\n------ heap size info ------\n'
|
||||
'[app_name] {}\n'
|
||||
'[config_name] {}\n'
|
||||
'[target] {}\n'
|
||||
'[minimum_free_heap_size] {} Bytes\n'
|
||||
'------ heap size end ------'.format(os.path.basename(dut.app.app_path),
|
||||
config,
|
||||
dut.target,
|
||||
res.group(1).decode('utf8')))
|
||||
logging.info(
|
||||
'\n------ heap size info ------\n'
|
||||
'[app_name] {}\n'
|
||||
'[config_name] {}\n'
|
||||
'[target] {}\n'
|
||||
'[minimum_free_heap_size] {} Bytes\n'
|
||||
'------ heap size end ------'.format(
|
||||
os.path.basename(dut.app.app_path),
|
||||
config,
|
||||
dut.target,
|
||||
res.group(1).decode('utf8'),
|
||||
)
|
||||
)
|
||||
|
||||
return real_func
|
||||
|
||||
@@ -183,8 +204,20 @@ _idf_pytest_embedded_key = pytest.StashKey['IdfPytestEmbedded']
|
||||
|
||||
|
||||
def pytest_configure(config: Config) -> None:
|
||||
# cli option "--target"
|
||||
target = config.getoption('target') or ''
|
||||
|
||||
help_commands = ['--help', '--fixtures', '--markers', '--version']
|
||||
for cmd in help_commands:
|
||||
if cmd in config.invocation_params.args:
|
||||
target = 'unneeded'
|
||||
break
|
||||
|
||||
if not target: # also could specify through markexpr via "-m"
|
||||
target = get_target_marker(config.getoption('markexpr') or '')
|
||||
|
||||
config.stash[_idf_pytest_embedded_key] = IdfPytestEmbedded(
|
||||
target=config.getoption('target'),
|
||||
target=target,
|
||||
sdkconfig=config.getoption('sdkconfig'),
|
||||
known_failure_cases_file=config.getoption('known_failure_cases_file'),
|
||||
)
|
||||
@@ -218,7 +251,11 @@ class IdfPytestEmbedded:
|
||||
|
||||
@property
|
||||
def failed_cases(self) -> List[str]:
|
||||
return [case for case, is_known, is_xfail in self._failed_cases if not is_known and not is_xfail]
|
||||
return [
|
||||
case
|
||||
for case, is_known, is_xfail in self._failed_cases
|
||||
if not is_known and not is_xfail
|
||||
]
|
||||
|
||||
@property
|
||||
def known_failure_cases(self) -> List[str]:
|
||||
@@ -268,13 +305,13 @@ class IdfPytestEmbedded:
|
||||
|
||||
# add markers for special markers
|
||||
for item in items:
|
||||
if 'supported_targets' in item_marker_names(item):
|
||||
if 'supported_targets' in item.keywords:
|
||||
for _target in SUPPORTED_TARGETS:
|
||||
item.add_marker(_target)
|
||||
if 'preview_targets' in item_marker_names(item):
|
||||
if 'preview_targets' in item.keywords:
|
||||
for _target in PREVIEW_TARGETS:
|
||||
item.add_marker(_target)
|
||||
if 'all_targets' in item_marker_names(item):
|
||||
if 'all_targets' in item.keywords:
|
||||
for _target in [*SUPPORTED_TARGETS, *PREVIEW_TARGETS]:
|
||||
item.add_marker(_target)
|
||||
|
||||
|
Reference in New Issue
Block a user