diff --git a/tools/ci/python_packages/ttfw_idf/IDFAssignTest.py b/tools/ci/python_packages/ttfw_idf/IDFAssignTest.py index 402d61ef0b..f5e870fa91 100644 --- a/tools/ci/python_packages/ttfw_idf/IDFAssignTest.py +++ b/tools/ci/python_packages/ttfw_idf/IDFAssignTest.py @@ -6,6 +6,7 @@ import errno import json import os import re +from copy import deepcopy import yaml @@ -23,7 +24,7 @@ except ImportError: SUPPORTED_TARGETS = [] PREVIEW_TARGETS = [] -IDF_PATH_FROM_ENV = os.getenv('IDF_PATH') +IDF_PATH_FROM_ENV = os.getenv('IDF_PATH', '') class IDFCaseGroup(CIAssignTest.Group): @@ -41,6 +42,13 @@ class IDFCaseGroup(CIAssignTest.Group): class IDFAssignTest(CIAssignTest.AssignTest): + DEFAULT_FILTER = { + 'category': 'function', + 'ignore': False, + 'supported_in_ci': True, + 'nightly_run': False, + } + def __init__(self, test_case_path, ci_config_file, case_group=IDFCaseGroup): super(IDFAssignTest, self).__init__(test_case_path, ci_config_file, case_group) @@ -75,6 +83,12 @@ class IDFAssignTest(CIAssignTest.AssignTest): with open(artifact_index_file, 'w') as f: json.dump(artifact_index_list, f) + def search_cases(self, case_filter=None): + _filter = deepcopy(case_filter) if case_filter else {} + if 'NIGHTLY_RUN' in os.environ: + _filter.update({'nightly_run': True}) + return super().search_cases(_filter) + class ExampleGroup(IDFCaseGroup): SORT_KEYS = CI_JOB_MATCH_KEYS = ['env_tag', 'target'] @@ -315,7 +329,8 @@ if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('case_group', choices=['example_test', 'custom_test', 'unit_test', 'component_ut']) parser.add_argument('test_case_paths', nargs='+', help='test case folder or file') - parser.add_argument('-c', '--config', help='gitlab ci config file') + parser.add_argument('-c', '--config', default=os.path.join(IDF_PATH_FROM_ENV, '.gitlab', 'ci', 'target-test.yml'), + help='gitlab ci config file') parser.add_argument('-o', '--output', help='output path of config files') parser.add_argument('--pipeline_id', '-p', type=int, default=None, help='pipeline_id') parser.add_argument('--test-case-file-pattern', help='file name pattern used to find Python test case files') @@ -323,7 +338,8 @@ if __name__ == '__main__': SUPPORTED_TARGETS.extend(PREVIEW_TARGETS) - test_case_paths = [os.path.join(IDF_PATH_FROM_ENV, path) if not os.path.isabs(path) else path for path in args.test_case_paths] # type: ignore + test_case_paths = [os.path.join(IDF_PATH_FROM_ENV, path) if not os.path.isabs(path) else path for path in + args.test_case_paths] # type: ignore args_list = [test_case_paths, args.config] if args.case_group == 'example_test': assigner = ExampleAssignTest(*args_list) diff --git a/tools/ci/python_packages/ttfw_idf/__init__.py b/tools/ci/python_packages/ttfw_idf/__init__.py index a8e380b7a6..33ae4a434a 100644 --- a/tools/ci/python_packages/ttfw_idf/__init__.py +++ b/tools/ci/python_packages/ttfw_idf/__init__.py @@ -110,7 +110,7 @@ def ci_target_check(func): return wrapper -def test_func_generator(func, app, target, ci_target, module, execution_time, level, erase_nvs, **kwargs): +def test_func_generator(func, app, target, ci_target, module, execution_time, level, erase_nvs, nightly_run, **kwargs): target = upper_list_or_str(target) test_target = local_test_check(target) if 'additional_duts' in kwargs: @@ -122,7 +122,7 @@ def test_func_generator(func, app, target, ci_target, module, execution_time, le original_method = TinyFW.test_method( app=app, dut=dut, target=target, ci_target=upper_list_or_str(ci_target), module=module, execution_time=execution_time, level=level, erase_nvs=erase_nvs, - dut_dict=dut_classes, **kwargs + dut_dict=dut_classes, nightly_run=nightly_run, **kwargs ) test_func = original_method(func) return test_func @@ -130,7 +130,7 @@ def test_func_generator(func, app, target, ci_target, module, execution_time, le @ci_target_check def idf_example_test(app=Example, target='ESP32', ci_target=None, module='examples', execution_time=1, - level='example', erase_nvs=True, config_name=None, **kwargs): + level='example', erase_nvs=True, config_name=None, nightly_run=False, **kwargs): """ decorator for testing idf examples (with default values for some keyword args). @@ -146,13 +146,14 @@ def idf_example_test(app=Example, target='ESP32', ci_target=None, module='exampl :return: test method """ def test(func): - return test_func_generator(func, app, target, ci_target, module, execution_time, level, erase_nvs, **kwargs) + return test_func_generator(func, app, target, ci_target, module, execution_time, level, erase_nvs, nightly_run, + **kwargs) return test @ci_target_check def idf_unit_test(app=UT, target='ESP32', ci_target=None, module='unit-test', execution_time=1, - level='unit', erase_nvs=True, **kwargs): + level='unit', erase_nvs=True, nightly_run=False, **kwargs): """ decorator for testing idf unit tests (with default values for some keyword args). @@ -166,14 +167,16 @@ def idf_unit_test(app=UT, target='ESP32', ci_target=None, module='unit-test', ex :param kwargs: other keyword args :return: test method """ + def test(func): - return test_func_generator(func, app, target, ci_target, module, execution_time, level, erase_nvs, **kwargs) + return test_func_generator(func, app, target, ci_target, module, execution_time, level, erase_nvs, nightly_run, + **kwargs) return test @ci_target_check def idf_custom_test(app=TestApp, target='ESP32', ci_target=None, module='misc', execution_time=1, - level='integration', erase_nvs=True, config_name=None, **kwargs): + level='integration', erase_nvs=True, config_name=None, nightly_run=False, **kwargs): """ decorator for idf custom tests (with default values for some keyword args). @@ -188,14 +191,16 @@ def idf_custom_test(app=TestApp, target='ESP32', ci_target=None, module='misc', :param kwargs: other keyword args :return: test method """ + def test(func): - return test_func_generator(func, app, target, ci_target, module, execution_time, level, erase_nvs, **kwargs) + return test_func_generator(func, app, target, ci_target, module, execution_time, level, erase_nvs, nightly_run, + **kwargs) return test @ci_target_check def idf_component_unit_test(app=ComponentUTApp, target='ESP32', ci_target=None, module='misc', execution_time=1, - level='integration', erase_nvs=True, config_name=None, **kwargs): + level='integration', erase_nvs=True, config_name=None, nightly_run=False, **kwargs): """ decorator for idf custom tests (with default values for some keyword args). @@ -212,7 +217,8 @@ def idf_component_unit_test(app=ComponentUTApp, target='ESP32', ci_target=None, """ def test(func): - return test_func_generator(func, app, target, ci_target, module, execution_time, level, erase_nvs, **kwargs) + return test_func_generator(func, app, target, ci_target, module, execution_time, level, erase_nvs, nightly_run, + **kwargs) return test