CI: add script for parsing unit test cases for CI from test files

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
This commit is contained in:
antti 2016-12-07 13:58:51 +08:00
parent f8b5c29346
commit 0501507d6b
6 changed files with 325 additions and 482 deletions

View File

@ -87,6 +87,8 @@ build_esp_idf_tests:
- ./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:
@ -94,6 +96,7 @@ build_esp_idf_tests:
- git checkout ${CI_BUILD_REF_NAME} || echo "Using default branch..."
- make defconfig
- make TESTS_ALL=1
- python UnitTestParser.py
build_examples:
<<: *build_template
@ -160,6 +163,7 @@ test_report:
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:
@ -180,8 +184,7 @@ test_report:
- 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
@ -263,6 +266,7 @@ deploy_docs:
# 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
@ -284,7 +288,7 @@ deploy_docs:
- 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
@ -309,7 +313,7 @@ deploy_docs:
- 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
@ -324,6 +328,10 @@ deploy_docs:
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
@ -333,6 +341,14 @@ UT_Function_SYS_01:
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:

View File

@ -1,7 +0,0 @@
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]

View File

@ -1,461 +0,0 @@
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)

View File

@ -9,41 +9,40 @@ class UnitTest(PerformanceTCBase.PerformanceTCBase):
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

View File

@ -0,0 +1,127 @@
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

View File

@ -0,0 +1,169 @@
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()