Add python script that parses list of unit test cases for CI from component test folder
Modify .gitlab-ci.yml to run this script as part of build unit tests stage
- ./tools/unit-test-app/build/*.elf
- ./tools/unit-test-app/build/*.map
- ./tools/unit-test-app/build/bootloader/*.bin
+ - ./components/idf_test/unit_test/TestCaseAll.yml
+ - ./components/idf_test/unit_test/CIConfigs/*.yml
expire_in: 6 mos
script:
- git checkout ${CI_BUILD_REF_NAME} || echo "Using default branch..."
- make defconfig
- make TESTS_ALL=1
+ - python UnitTestParser.py
build_examples:
<<: *build_template
LOG_PATH: "$CI_PROJECT_DIR/$CI_BUILD_REF"
TEST_CASE_FILE_PATH: "$CI_PROJECT_DIR/components/idf_test"
REPORT_PATH: "$CI_PROJECT_DIR/CI_Test_Report"
+ MODULE_UPDATE_FILE: "$CI_PROJECT_DIR/components/idf_test/unit_test/ModuleDefinition.yml"
artifacts:
when: always
paths:
- git clone $GITLAB_SSH_SERVER/yinling/auto_test_script.git
- cd auto_test_script
# generate report
- - TEST_RESULT=Pass
- - python CITestReport.py -l $LOG_PATH -t $TEST_CASE_FILE_PATH -p $REPORT_PATH -r $RESULT_PATH -a $ARTIFACTS_PATH || TEST_RESULT=Fail
+ - python CITestReport.py -l $LOG_PATH -t $TEST_CASE_FILE_PATH -p $REPORT_PATH -r $RESULT_PATH -a $ARTIFACTS_PATH -m $MODULE_UPDATE_FILE || FAIL=True
# commit to CI-test-result project
- git clone $GITLAB_SSH_SERVER/qa/CI-test-result.git
- rm -rf CI-test-result/RawData/$RESULT_PATH
# append test level folder to TEST_CASE_FILE_PATH in before_script of test job
TEST_CASE_FILE_PATH: "$CI_PROJECT_DIR/components/idf_test/integration_test"
# jobs MUST set CONFIG_FILE in before_script, and overwrite the variables above if necessary
+ MODULE_UPDATE_FILE: "$CI_PROJECT_DIR/components/idf_test/unit_test/ModuleDefinition.yml"
artifacts:
when: always
- git clone $GITLAB_SSH_SERVER/yinling/auto_test_script.git
- cd auto_test_script
# run test
- - python CIRunner.py -l $LOG_PATH -c $CONFIG_FILE -e $LOCAL_ENV_CONFIG_PATH -t $TEST_CASE_FILE_PATH bin_path $APP_NAME $BIN_PATH
+ - python CIRunner.py -l $LOG_PATH -c $CONFIG_FILE -e $LOCAL_ENV_CONFIG_PATH -t $TEST_CASE_FILE_PATH -m $MODULE_UPDATE_FILE bin_path $APP_NAME $BIN_PATH
# template for overnight test jobs
- git clone $GITLAB_SSH_SERVER/yinling/auto_test_script.git
- cd auto_test_script
# run test
- - python CIRunner.py -l $LOG_PATH -c $CONFIG_FILE -e $LOCAL_ENV_CONFIG_PATH -t $TEST_CASE_FILE_PATH bin_path $APP_NAME $BIN_PATH
+ - python CIRunner.py -l $LOG_PATH -c $CONFIG_FILE -e $LOCAL_ENV_CONFIG_PATH -t $TEST_CASE_FILE_PATH -m $MODULE_UPDATE_FILE bin_path $APP_NAME $BIN_PATH
# template for unit test jobs
.unit_test_template: &unit_test_template
LOG_PATH: "$CI_PROJECT_DIR/$CI_BUILD_REF"
APP_NAME: "ut"
TEST_CASE_FILE_PATH: "$CI_PROJECT_DIR/components/idf_test/unit_test"
+ MODULE_UPDATE_FILE: "$CI_PROJECT_DIR/components/idf_test/unit_test/ModuleDefinition.yml"
+
+ dependencies:
+ - build_esp_idf_tests
UT_Function_SYS_01:
<<: *unit_test_template
before_script:
- CONFIG_FILE=$TEST_CASE_FILE_PATH/CIConfigs/UT_Function_SYS_01.yml
+UT_Function_SYS_02:
+ <<: *unit_test_template
+ tags:
+ - ESP32_IDF
+ - UT_T1_1
+ before_script:
+ - CONFIG_FILE=$TEST_CASE_FILE_PATH/CIConfigs/UT_Function_SYS_02.yml
+
IT_Function_SYS_01:
<<: *test_template
tags:
+++ /dev/null
-Config: {execute count: 1, execute order: in order}
-DUT: [UT1]
-Filter:
-- Add:
- ID: [SYS_OS_0102, SYS_MISC_0102, SYS_MISC_0107, SYS_MISC_0106, SYS_MISC_0109,
- SYS_MISC_0108, SYS_MISC_0112, SYS_MISC_0113, SYS_MISC_0110, SYS_MISC_0111, SYS_LIB_0103,
- SYS_LIB_0102, SYS_LIB_0101, SYS_LIB_0106, SYS_LIB_0105, SYS_LIB_0104]
+++ /dev/null
-test cases:
-- CI ready: 'Yes'
- ID: SYS_LIB_0101
- SDK: ESP32_IDF
- Test App: UT
- auto test: 'Yes'
- category: Function
- cmd set:
- - IDFUnitTest/UnitTest
- - - test_case = "check if ROM or Flash is used for functions"
- - [dummy]
- comment: check if ROM or Flash is used for functions
- execution time: 0
- expected result: 1. set succeed
- initial condition: UTINIT1
- level: Unit
- module: System
- steps: 1. run lib test
- sub module: Std Lib
- summary: lib unit test
- test environment: UT_T1_1
- test point 1: basic function
- test point 2: lib
- version: v1 (2016-10-26)
-- CI ready: 'Yes'
- ID: SYS_LIB_0102
- SDK: ESP32_IDF
- Test App: UT
- auto test: 'Yes'
- category: Function
- cmd set:
- - IDFUnitTest/UnitTest
- - - test_case = "test time functions"
- - [dummy]
- comment: test time functions
- execution time: 0
- expected result: 1. set succeed
- initial condition: UTINIT1
- level: Unit
- module: System
- steps: 1. run lib test
- sub module: Std Lib
- summary: lib unit test
- test environment: UT_T1_1
- test point 1: basic function
- test point 2: lib
- version: v1 (2016-10-26)
-- CI ready: 'Yes'
- ID: SYS_LIB_0103
- SDK: ESP32_IDF
- Test App: UT
- auto test: 'Yes'
- category: Function
- cmd set:
- - IDFUnitTest/UnitTest
- - - test_case = "test sscanf function"
- - [dummy]
- comment: test sscanf function
- execution time: 0
- expected result: 1. set succeed
- initial condition: UTINIT1
- level: Unit
- module: System
- steps: 1. run lib test
- sub module: Std Lib
- summary: lib unit test
- test environment: UT_T1_1
- test point 1: basic function
- test point 2: lib
- version: v1 (2016-10-26)
-- CI ready: 'Yes'
- ID: SYS_LIB_0104
- SDK: ESP32_IDF
- Test App: UT
- auto test: 'Yes'
- category: Function
- cmd set:
- - IDFUnitTest/UnitTest
- - - test_case = "test sprintf function"
- - [dummy]
- comment: test sprintf function
- execution time: 0
- expected result: 1. set succeed
- initial condition: UTINIT1
- level: Unit
- module: System
- steps: 1. run lib test
- sub module: Std Lib
- summary: lib unit test
- test environment: UT_T1_1
- test point 1: basic function
- test point 2: lib
- version: v1 (2016-10-26)
-- CI ready: 'Yes'
- ID: SYS_LIB_0105
- SDK: ESP32_IDF
- Test App: UT
- auto test: 'Yes'
- category: Function
- cmd set:
- - IDFUnitTest/UnitTest
- - - test_case = "test atoX functions"
- - [dummy]
- comment: test atoX functions
- execution time: 0
- expected result: 1. set succeed
- initial condition: UTINIT1
- level: Unit
- module: System
- steps: 1. run lib test
- sub module: Std Lib
- summary: lib unit test
- test environment: UT_T1_1
- test point 1: basic function
- test point 2: lib
- version: v1 (2016-10-26)
-- CI ready: 'Yes'
- ID: SYS_LIB_0106
- SDK: ESP32_IDF
- Test App: UT
- auto test: 'Yes'
- category: Function
- cmd set:
- - IDFUnitTest/UnitTest
- - - test_case = "test ctype functions"
- - [dummy]
- comment: test ctype functions
- execution time: 0
- expected result: 1. set succeed
- initial condition: UTINIT1
- level: Unit
- module: System
- steps: 1. run lib test
- sub module: Std Lib
- summary: lib unit test
- test environment: UT_T1_1
- test point 1: basic function
- test point 2: lib
- version: v1 (2016-10-26)
-- CI ready: 'Yes'
- ID: SYS_MISC_0102
- SDK: ESP32_IDF
- Test App: UT
- auto test: 'Yes'
- category: Function
- cmd set:
- - IDFUnitTest/UnitTest
- - - test_case = "mbedtls MPI self-tests"
- - [dummy]
- comment: mbedtls MPI self-tests
- execution time: 0
- expected result: 1. set succeed
- initial condition: UTINIT1
- level: Unit
- module: System
- steps: 1. run bignum test
- sub module: Misc
- summary: bignum unit test
- test environment: UT_T1_1
- test point 1: basic function
- test point 2: bignum
- version: v1 (2016-10-26)
-- CI ready: 'Yes'
- ID: SYS_MISC_0103
- SDK: ESP32_IDF
- Test App: UT
- auto test: 'Yes'
- category: Function
- cmd set:
- - IDFUnitTest/UnitTest
- - - test_case = "test AES thread safety"
- - [dummy]
- comment: test AES thread safety
- execution time: 0
- expected result: 1. set succeed
- initial condition: UTINIT1
- level: Unit
- module: System
- steps: 1. run hwcrypto test
- sub module: Misc
- summary: hwcrypto unit test
- test environment: UT_T1_1
- test point 1: basic function
- test point 2: hwcrypto
- version: v1 (2016-10-26)
-- CI ready: 'Yes'
- ID: SYS_MISC_0104
- SDK: ESP32_IDF
- Test App: UT
- auto test: 'Yes'
- category: Function
- cmd set:
- - IDFUnitTest/UnitTest
- - - test_case = "test AES acceleration"
- - [dummy]
- comment: test AES acceleration
- execution time: 0
- expected result: 1. set succeed
- initial condition: UTINIT1
- level: Unit
- module: System
- steps: 1. run hwcrypto test
- sub module: Misc
- summary: hwcrypto unit test
- test environment: UT_T1_1
- test point 1: basic function
- test point 2: hwcrypto
- version: v1 (2016-10-26)
-- CI ready: 'Yes'
- ID: SYS_MISC_0105
- SDK: ESP32_IDF
- Test App: UT
- auto test: 'Yes'
- category: Function
- cmd set:
- - IDFUnitTest/UnitTest
- - - test_case = "test SHA thread safety"
- - [dummy]
- comment: test SHA thread safety
- execution time: 0
- expected result: 1. set succeed
- initial condition: UTINIT1
- level: Unit
- module: System
- steps: 1. run hwcrypto test
- sub module: Misc
- summary: hwcrypto unit test
- test environment: UT_T1_1
- test point 1: basic function
- test point 2: hwcrypto
- version: v1 (2016-10-26)
-- CI ready: 'Yes'
- ID: SYS_MISC_0106
- SDK: ESP32_IDF
- Test App: UT
- auto test: 'Yes'
- category: Function
- cmd set:
- - IDFUnitTest/UnitTest
- - - test_case = "context switch saves FP registers"
- - [dummy]
- comment: context switch saves FP registers
- execution time: 0
- expected result: 1. set succeed
- initial condition: UTINIT1
- level: Unit
- module: System
- steps: 1. run fp test
- sub module: Misc
- summary: fp unit test
- test environment: UT_T1_1
- test point 1: basic function
- test point 2: fp
- version: v1 (2016-10-26)
-- CI ready: 'Yes'
- ID: SYS_MISC_0107
- SDK: ESP32_IDF
- Test App: UT
- auto test: 'Yes'
- category: Function
- cmd set:
- - IDFUnitTest/UnitTest
- - - test_case = "test FP sqrt"
- - [dummy]
- comment: test FP sqrt
- execution time: 0
- expected result: 1. set succeed
- initial condition: UTINIT1
- level: Unit
- module: System
- steps: 1. run fp test
- sub module: Misc
- summary: fp unit test
- test environment: UT_T1_1
- test point 1: basic function
- test point 2: fp
- version: v1 (2016-10-26)
-- CI ready: 'Yes'
- ID: SYS_MISC_0108
- SDK: ESP32_IDF
- Test App: UT
- auto test: 'Yes'
- category: Function
- cmd set:
- - IDFUnitTest/UnitTest
- - - test_case = "test FP div"
- - [dummy]
- comment: test FP div
- execution time: 0
- expected result: 1. set succeed
- initial condition: UTINIT1
- level: Unit
- module: System
- steps: 1. run fp test
- sub module: Misc
- summary: fp unit test
- test environment: UT_T1_1
- test point 1: basic function
- test point 2: fp
- version: v1 (2016-10-26)
-- CI ready: 'Yes'
- ID: SYS_MISC_0109
- SDK: ESP32_IDF
- Test App: UT
- auto test: 'Yes'
- category: Function
- cmd set:
- - IDFUnitTest/UnitTest
- - - test_case = "test FP mul"
- - [dummy]
- comment: test FP mul
- execution time: 0
- expected result: 1. set succeed
- initial condition: UTINIT1
- level: Unit
- module: System
- steps: 1. run fp test
- sub module: Misc
- summary: fp unit test
- test environment: UT_T1_1
- test point 1: basic function
- test point 2: fp
- version: v1 (2016-10-26)
-- CI ready: 'Yes'
- ID: SYS_MISC_0110
- SDK: ESP32_IDF
- Test App: UT
- auto test: 'Yes'
- category: Function
- cmd set:
- - IDFUnitTest/UnitTest
- - - test_case = "test FP add"
- - [dummy]
- comment: test FP add
- execution time: 0
- expected result: 1. set succeed
- initial condition: UTINIT1
- level: Unit
- module: System
- steps: 1. run fp test
- sub module: Misc
- summary: fp unit test
- test environment: UT_T1_1
- test point 1: basic function
- test point 2: fp
- version: v1 (2016-10-26)
-- CI ready: 'Yes'
- ID: SYS_MISC_0111
- SDK: ESP32_IDF
- Test App: UT
- auto test: 'Yes'
- category: Function
- cmd set:
- - IDFUnitTest/UnitTest
- - - test_case = "Test JPEG decompression library"
- - [dummy]
- comment: Test JPEG decompression library
- execution time: 0
- expected result: 1. set succeed
- initial condition: UTINIT1
- level: Unit
- module: System
- steps: 1. run JPEG decompression test
- sub module: Misc
- summary: JPEG decompression library unit test
- test environment: UT_T1_1
- test point 1: basic function
- test point 2: tjpgd
- version: v1 (2016-10-31)
-- CI ready: 'Yes'
- ID: SYS_MISC_0112
- SDK: ESP32_IDF
- Test App: UT
- auto test: 'Yes'
- category: Function
- cmd set:
- - IDFUnitTest/UnitTest
- - - test_case = "mbedtls AES self-tests"
- - [dummy]
- comment: mbedtls AES self-tests
- execution time: 0
- expected result: 1. set succeed
- initial condition: UTINIT1
- level: Unit
- module: System
- steps: 1. run mbedtls AES self-tests
- sub module: Misc
- summary: mbedtls AES unit test
- test environment: UT_T1_1
- test point 1: basic function
- test point 2: mbedtls AES
- version: v1 (2016-10-31)
-- CI ready: 'Yes'
- ID: SYS_MISC_0113
- SDK: ESP32_IDF
- Test App: UT
- auto test: 'Yes'
- category: Function
- cmd set:
- - IDFUnitTest/UnitTest
- - - test_case = "mbedtls SHA self-tests"
- - [dummy]
- comment: mbedtls SHA self-tests
- execution time: 0
- expected result: 1. set succeed
- initial condition: UTINIT1
- level: Unit
- module: System
- steps: 1. run mbedtls SHA self-tests
- sub module: Misc
- summary: mbedtls SHA unit test
- test environment: UT_T1_1
- test point 1: basic function
- test point 2: mbedtls SHA
- version: v1 (2016-10-31)
-- CI ready: 'Yes'
- ID: SYS_MISC_0115
- SDK: ESP32_IDF
- Test App: UT
- auto test: 'Yes'
- category: Function
- cmd set:
- - IDFUnitTest/UnitTest
- - - test_case = "test SHA acceleration"
- - [dummy]
- comment: test SHA acceleration
- execution time: 0
- expected result: 1. set succeed
- initial condition: UTINIT1
- level: Unit
- module: System
- steps: 1. run SHA acceleration test
- sub module: Misc
- summary: SHA acceleration unit test
- test environment: UT_T1_1
- test point 1: basic function
- test point 2: SHA acceleration
- version: v1 (2016-10-31)
-- CI ready: 'Yes'
- ID: SYS_OS_0102
- SDK: ESP32_IDF
- Test App: UT
- auto test: 'Yes'
- category: Function
- cmd set:
- - IDFUnitTest/UnitTest
- - - test_case = "Freertos TLS delete cb"
- - [dummy]
- comment: Freertos TLS delete cb
- execution time: 0
- expected result: 1. set succeed
- initial condition: UTINIT1
- level: Unit
- module: System
- steps: 1. run Freertos TLS delete cb test
- sub module: OS
- summary: Freertos TLS delete cb unit test
- test environment: UT_T1_1
- test point 1: basic function
- test point 2: Freertos TLS delete cb
- version: v1 (2016-10-31)
def __init__(self, name, test_env, cmd_set, timeout=30, log_path=TCActionBase.LOG_PATH):
PerformanceTCBase.PerformanceTCBase.__init__(self, name, test_env, cmd_set=cmd_set,
timeout=timeout, log_path=log_path)
-
+
self.test_case = None
self.test_timeout = 20
-
+
# load param from excel
for i in range(1, len(cmd_set)):
if cmd_set[i][0] != "dummy":
- cmd_string = "self." + cmd_set[i][0]
+ cmd_string = "self.test_case = " + "\"" + cmd_set[i][0] + "\""
exec cmd_string
self.result_cntx = TCActionBase.ResultCheckContext(self, test_env, self.tc_name)
pass
def send_commands(self):
self.flush_data("UT1")
-
+
try:
- # add case select by name mark " before case name
- self.serial_write_line("UT1", "\"" + self.test_case)
+ self.serial_write_line("UT1", "\"" + self.test_case + "\"")
data = ""
for _ in range(self.timeout):
time.sleep(1) #wait for test to run before reading result
data += self.serial_read_data("UT1")
- if re.search('[^0] Tests 0 F', data): #check that number of tests run != 0 and number of tests failed == 0
+ if re.search('[^0].* Tests 0 F', data): #check that number of tests run != 0 and number of tests failed == 0
self.set_result("Succeed")
break
else:
self.set_result("Fail")
-
+
except StandardError,e:
NativeLog.add_exception_log(e)
-
+
def execute(self):
TCActionBase.TCActionBase.execute(self)
self.send_commands()
-
+
def main():
pass
--- /dev/null
+freertos:
+ module: System
+ module abbr: SYS
+ sub module: OS
+ sub module abbr: OS
+nvs:
+ module: System
+ module abbr: SYS
+ sub module: NVS
+ sub module abbr: NVS
+partition:
+ module: System
+ module abbr: SYS
+ sub module: Misc
+ sub module abbr: MISC
+ulp:
+ module: System
+ module abbr: SYS
+ sub module: Misc
+ sub module abbr: MISC
+fp:
+ module: System
+ module abbr: SYS
+ sub module: Misc
+ sub module abbr: MISC
+hw:
+ module: System
+ module abbr: SYS
+ sub module: Misc
+ sub module abbr: MISC
+tjpgd:
+ module: System
+ module abbr: SYS
+ sub module: Misc
+ sub module abbr: MISC
+miniz:
+ module: System
+ module abbr: SYS
+ sub module: Misc
+ sub module abbr: MISC
+mmap:
+ module: System
+ module abbr: SYS
+ sub module: Misc
+ sub module abbr: MISC
+bignum:
+ module: System
+ module abbr: SYS
+ sub module: Misc
+ sub module abbr: MISC
+newlib:
+ module: System
+ module abbr: SYS
+ sub module: Std Lib
+ sub module abbr: STD
+aes:
+ module: System
+ module abbr: SYS
+ sub module: Misc
+ sub module abbr: MISC
+mbedtls:
+ module: System
+ module abbr: SYS
+ sub module: Misc
+ sub module abbr: MISC
+spi_flash:
+ module: Driver
+ module abbr: DRV
+ sub module: SPI
+ sub module abbr: SPI
+spi_flash_read:
+ module: Driver
+ module abbr: DRV
+ sub module: SPI
+ sub module abbr: SPI
+spi_flash_write:
+ module: Driver
+ module abbr: DRV
+ sub module: SPI
+ sub module abbr: SPI
+esp32:
+ module: System
+ module abbr: SYS
+ sub module: Misc
+ sub module abbr: MISC
+deepsleep:
+ module: RTC
+ module abbr: RTC
+ sub module: Deep Sleep
+ sub module abbr: SLEEP
+sd:
+ module: System
+ module abbr: SYS
+ sub module: Misc
+ sub module abbr: MISC
+cxx:
+ module: System
+ module abbr: SYS
+ sub module: Misc
+ sub module abbr: MISC
+fatfs:
+ module: System
+ module abbr: SYS
+ sub module: Misc
+ sub module abbr: MISC
+delay:
+ module: System
+ module abbr: SYS
+ sub module: Misc
+ sub module abbr: MISC
+spi:
+ module: System
+ module abbr: SYS
+ sub module: Misc
+ sub module abbr: MISC
+vfs:
+ module: System
+ module abbr: SYS
+ sub module: Misc
+ sub module abbr: MISC
+misc:
+ module: System
+ module abbr: SYS
+ sub module: Misc
+ sub module abbr: MISC
+
+
--- /dev/null
+import yaml
+import os
+import re
+import sys
+import shutil
+
+
+MODULE_MAP = yaml.load(open("ModuleDefinition.yml", "r"))
+
+TEST_CASE_PATTERN = {
+ "initial condition": "UTINIT1",
+ "SDK": "ESP32_IDF",
+ "level": "Unit",
+ "execution time": 0,
+ "Test App": "UT",
+ "auto test": "Yes",
+ "category": "Function",
+ "test point 1": "basic function",
+ "version": "v1 (2016-12-06)",
+ "test environment": "UT_T1_1",
+ "expected result": "1. set succeed"
+}
+
+CONFIG_FILE_PATTERN = {
+ "Config": {"execute count": 1, "execute order": "in order"},
+ "DUT": [],
+ "Filter": [{"Add": {"ID": []}}]
+}
+
+test_cases = list()
+test_ids = {}
+test_ids_by_job = {}
+unit_jobs = {}
+
+os.chdir(os.path.join("..", ".."))
+IDF_PATH = os.getcwd()
+
+
+class Parser(object):
+ @classmethod
+ def parse_test_folders(cls):
+ test_folder_paths = list()
+ os.chdir(os.path.join(IDF_PATH, "components"))
+ component_dirs = os.listdir(".")
+ for dir in component_dirs:
+ os.chdir(dir)
+ if "test" in os.listdir("."):
+ test_folder_paths.append(os.path.join(os.getcwd(), "test"))
+ os.chdir("..")
+ Parser.parse_test_files(test_folder_paths)
+
+ @classmethod
+ def parse_test_files(cls, test_folder_paths):
+ for path in test_folder_paths:
+ os.chdir(path)
+ for file_path in os.listdir("."):
+ if file_path[-2:] == ".c":
+ Parser.read_test_file(os.path.join(os.getcwd(), file_path), len(test_cases)+1)
+ os.chdir(os.path.join("..", ".."))
+ Parser.dump_test_cases(test_cases)
+
+ @classmethod
+ def read_test_file(cls, test_file_path, file_index):
+ test_index = 0
+ with open(test_file_path, "r") as file:
+ for line in file:
+ if re.match("TEST_CASE", line):
+ test_index += 1
+ tags = re.split(r"[\[\]\"]", line)
+ Parser.parse_test_cases(file_index, test_index, tags)
+
+
+ @classmethod
+ def parse_test_cases(cls, file_index, test_index, tags):
+ ci_ready = "Yes"
+ test_env = "UT_T1_1"
+ for tag in tags:
+ if tag == "ignore":
+ ci_ready = "No"
+ if re.match("test_env=", tag):
+ test_env = tag[9:]
+ module_name = tags[4]
+ try:
+ MODULE_MAP[module_name]
+ except KeyError:
+ module_name = "misc"
+ id = "UT_%s_%s_%03d%02d" % (MODULE_MAP[module_name]['module abbr'],
+ MODULE_MAP[module_name]['sub module abbr'],
+ file_index, test_index)
+ test_case = dict(TEST_CASE_PATTERN)
+ test_case.update({"module": MODULE_MAP[module_name]['module'],
+ "CI ready": ci_ready,
+ "cmd set": ["IDFUnitTest/UnitTest", [tags[1]]],
+ "ID": id,
+ "test point 2": module_name,
+ "steps": tags[1],
+ "comment": tags[1],
+ "test environment": test_env,
+ "sub module": MODULE_MAP[module_name]['sub module'],
+ "summary": tags[1]})
+ if test_case["CI ready"] == "Yes":
+ if test_ids.has_key(test_env):
+ test_ids[test_env].append(id)
+ else:
+ test_ids.update({test_env: [id]})
+ test_cases.append(test_case)
+
+ @classmethod
+ def dump_test_cases(cls, test_cases):
+ os.chdir(os.path.join(IDF_PATH, "components", "idf_test", "unit_test"))
+ with open ("TestCaseAll.yml", "wb+") as f:
+ yaml.dump({"test cases": test_cases}, f, allow_unicode=True, default_flow_style=False)
+
+ @classmethod
+ def dump_ci_config(cls):
+ Parser.split_test_cases()
+ os.chdir(os.path.join(IDF_PATH, "components", "idf_test", "unit_test"))
+ if not os.path.exists("CIConfigs"):
+ os.makedirs("CIConfigs")
+ os.chdir("CIConfigs")
+ for unit_job in unit_jobs:
+ job = dict(CONFIG_FILE_PATTERN)
+ job.update({"DUT": ["UT1"]})
+ job.update({"Filter": [{"Add": {"ID": test_ids_by_job[unit_job]}}]})
+ with open (unit_job + ".yml", "wb+") as f:
+ yaml.dump(job, f, allow_unicode=True, default_flow_style=False)
+
+ @classmethod
+ def split_test_cases(cls):
+ for job in unit_jobs:
+ test_ids_by_job.update({job: list()})
+ for test_env in test_ids:
+ available_jobs = list()
+ for job in unit_jobs:
+ if test_env in unit_jobs[job]:
+ available_jobs.append(job)
+ for idx, job in enumerate(available_jobs):
+ test_ids_by_job[job] += (test_ids[test_env][idx*len(test_ids[test_env])/len(available_jobs):(idx+1)*len(test_ids[test_env])/len(available_jobs)])
+
+ @classmethod
+ def parse_gitlab_ci(cls):
+ os.chdir(IDF_PATH)
+ with open(".gitlab-ci.yml", "rb") as f:
+ gitlab_ci = yaml.load(f)
+ keys = gitlab_ci.keys()
+ for key in keys:
+ if re.match("UT_", key):
+ test_env = gitlab_ci[key]["tags"]
+ unit_job = key
+ key = {}
+ key.update({unit_job: test_env})
+ unit_jobs.update(key)
+
+ @classmethod
+ def copy_module_def_file(cls):
+ src = os.path.join(IDF_PATH, "tools", "unit-test-app", "ModuleDefinition.yml")
+ dst = os.path.join(IDF_PATH, "components", "idf_test", "unit_test")
+ shutil.copy(src, dst)
+
+
+def main():
+ Parser.parse_test_folders()
+ Parser.parse_gitlab_ci()
+ Parser.dump_ci_config()
+ Parser.copy_module_def_file()
+
+
+if __name__ == '__main__':
+ main()