forked from espressif/esp-idf
fa97004faf
Implement linux port layer and reuse the original FreeRTOS layer that's compiled and used on linux target as well, by means of FreeRTOS simulator.
414 lines
11 KiB
YAML
414 lines
11 KiB
YAML
.host_test_template:
|
|
extends: .rules:test:host_test
|
|
stage: host_test
|
|
image: $ESP_ENV_IMAGE
|
|
tags:
|
|
- host_test
|
|
dependencies: []
|
|
# run host_test jobs immediately, only after upload cache
|
|
needs:
|
|
- job: upload-pip-cache
|
|
optional: true
|
|
artifacts: false
|
|
- job: upload-submodules-cache
|
|
optional: true
|
|
artifacts: false
|
|
|
|
test_nvs_on_host:
|
|
extends: .host_test_template
|
|
script:
|
|
- cd components/nvs_flash/test_nvs_host
|
|
- make test
|
|
|
|
test_nvs_coverage:
|
|
extends:
|
|
- .host_test_template
|
|
- .rules:labels:nvs_coverage
|
|
artifacts:
|
|
paths:
|
|
- components/nvs_flash/test_nvs_host/coverage_report
|
|
expire_in: 1 week
|
|
script:
|
|
- cd components/nvs_flash/test_nvs_host
|
|
- make coverage_report
|
|
# the 'long' host tests take approx 11 hours on our current runners. Adding some margin here for possible CPU contention
|
|
timeout: 18 hours
|
|
|
|
test_partition_table_on_host:
|
|
extends: .host_test_template
|
|
script:
|
|
- cd components/partition_table/test_gen_esp32part_host
|
|
- ./gen_esp32part_tests.py
|
|
|
|
test_wl_on_host:
|
|
extends: .host_test_template
|
|
artifacts:
|
|
paths:
|
|
- components/wear_levelling/test_wl_host/coverage_report.zip
|
|
expire_in: 1 week
|
|
script:
|
|
- cd components/wear_levelling/test_wl_host
|
|
- make test
|
|
|
|
test_fatfs_on_host:
|
|
extends: .host_test_template
|
|
script:
|
|
- cd components/fatfs/test_fatfs_host/
|
|
- make test
|
|
|
|
test_ldgen_on_host:
|
|
extends: .host_test_template
|
|
script:
|
|
- cd tools/ldgen/test
|
|
- export PYTHONPATH=$PYTHONPATH:..
|
|
- python -m unittest
|
|
variables:
|
|
LC_ALL: C.UTF-8
|
|
|
|
test_reproducible_build:
|
|
extends: .host_test_template
|
|
script:
|
|
- ./tools/ci/test_reproducible_build.sh
|
|
artifacts:
|
|
when: on_failure
|
|
paths:
|
|
- "**/sdkconfig"
|
|
- "**/build*/*.bin"
|
|
- "**/build*/*.elf"
|
|
- "**/build*/*.map"
|
|
- "**/build*/flasher_args.json"
|
|
- "**/build*/*.bin"
|
|
- "**/build*/bootloader/*.bin"
|
|
- "**/build*/partition_table/*.bin"
|
|
expire_in: 1 week
|
|
|
|
.host_fuzzer_test_template:
|
|
extends:
|
|
- .host_test_template
|
|
- .rules:labels:fuzzer_test-weekend_test
|
|
image: $AFL_FUZZER_TEST_IMAGE
|
|
artifacts:
|
|
when: always
|
|
paths:
|
|
- ${FUZZER_TEST_DIR}/out/crashes
|
|
- ${FUZZER_TEST_DIR}/fuzz_output.txt
|
|
expire_in: 1 week
|
|
script:
|
|
- export AFL_I_DONT_CARE_ABOUT_MISSING_CRASHES=1 && export AFL_SKIP_CPUFREQ=1
|
|
- cd ${FUZZER_TEST_DIR}
|
|
# run AFL fuzzer for one hour
|
|
- ( ( make ${FUZZER_PARAMS} fuzz | tee fuzz_output.txt | grep -v '\(Fuzzing test case\|Entering queue cycle\)' ) || pkill sleep ) &
|
|
- ( sleep 3600 || mkdir -p out/crashes/env_failed ) && pkill afl-fuz
|
|
# check no crashes found
|
|
- test -z "$(ls out/crashes/)" || exit 1
|
|
|
|
test_lwip_dns_fuzzer_on_host:
|
|
extends: .host_fuzzer_test_template
|
|
variables:
|
|
FUZZER_TEST_DIR: components/lwip/test_afl_host
|
|
FUZZER_PARAMS: MODE=dns
|
|
|
|
test_lwip_dhcp_fuzzer_on_host:
|
|
extends: .host_fuzzer_test_template
|
|
variables:
|
|
FUZZER_TEST_DIR: components/lwip/test_afl_host
|
|
FUZZER_PARAMS: MODE=dhcp_client
|
|
|
|
test_lwip_dhcps_fuzzer_on_host:
|
|
extends: .host_fuzzer_test_template
|
|
variables:
|
|
FUZZER_TEST_DIR: components/lwip/test_afl_host
|
|
FUZZER_PARAMS: MODE=dhcp_server
|
|
|
|
test_spiffs_on_host:
|
|
extends: .host_test_template
|
|
script:
|
|
- cd components/spiffs/test_spiffsgen/
|
|
- ./test_spiffsgen.py
|
|
|
|
test_fatfsgen_on_host:
|
|
extends: .host_test_template
|
|
script:
|
|
- cd components/fatfs/test_fatfsgen/
|
|
- ./test_fatfsgen.py
|
|
- ./test_wl_fatfsgen.py
|
|
- ./test_fatfsparse.py
|
|
|
|
test_multi_heap_on_host:
|
|
extends: .host_test_template
|
|
script:
|
|
- cd components/heap/test_multi_heap_host
|
|
- ./test_all_configs.sh
|
|
|
|
test_certificate_bundle_on_host:
|
|
extends: .host_test_template
|
|
script:
|
|
- cd components/mbedtls/esp_crt_bundle/test_gen_crt_bundle/
|
|
- ./test_gen_crt_bundle.py
|
|
|
|
test_idf_monitor:
|
|
extends: .host_test_template
|
|
artifacts:
|
|
# save artifacts always in order to access results which were retried without consequent failure
|
|
when: always
|
|
paths:
|
|
- tools/test_idf_monitor/outputs/*
|
|
expire_in: 1 week
|
|
script:
|
|
- eval $($IDF_PATH/tools/idf_tools.py export)
|
|
- cd ${IDF_PATH}/tools/test_idf_monitor
|
|
- ./run_test_idf_monitor.py
|
|
|
|
test_idf_size:
|
|
extends: .host_test_template
|
|
artifacts:
|
|
when: on_failure
|
|
paths:
|
|
- tools/test_idf_size/output
|
|
- tools/test_idf_size/.coverage
|
|
expire_in: 1 week
|
|
script:
|
|
- cd ${IDF_PATH}/tools/test_idf_size
|
|
- ./test.sh
|
|
|
|
test_idf_py:
|
|
extends: .host_test_template
|
|
variables:
|
|
LC_ALL: C.UTF-8
|
|
script:
|
|
- cd ${IDF_PATH}/tools/test_idf_py
|
|
- ./test_idf_py.py
|
|
- ./test_hints.py
|
|
|
|
# Test for create virtualenv. It must be invoked from Python, not from virtualenv.
|
|
# Use docker image system python without any extra dependencies
|
|
test_idf_tools:
|
|
extends:
|
|
- .host_test_template
|
|
- .before_script_minimal
|
|
artifacts:
|
|
when: on_failure
|
|
paths:
|
|
- tools/tools.new.json
|
|
- tools/test_idf_tools/test_python_env_logs.txt
|
|
expire_in: 1 week
|
|
image:
|
|
name: $ESP_ENV_IMAGE
|
|
entrypoint: [""] # use system python3. no extra pip package installed
|
|
script:
|
|
# Tools must be downloaded for testing
|
|
- python3 ${IDF_PATH}/tools/idf_tools.py download
|
|
- cd ${IDF_PATH}/tools/test_idf_tools
|
|
- python3 -m pip install jsonschema
|
|
- python3 ./test_idf_tools.py
|
|
- python3 ./test_idf_tools_python_env.py
|
|
|
|
.test_efuse_table_on_host_template:
|
|
extends: .host_test_template
|
|
variables:
|
|
IDF_TARGET: "esp32"
|
|
artifacts:
|
|
when: on_failure
|
|
paths:
|
|
- components/efuse/${IDF_TARGET}/esp_efuse_table.c
|
|
expire_in: 1 week
|
|
script:
|
|
- cd ${IDF_PATH}/components/efuse/
|
|
- ./efuse_table_gen.py -t "${IDF_TARGET}" ${IDF_PATH}/components/efuse/${IDF_TARGET}/esp_efuse_table.csv
|
|
- git diff --exit-code -- ${IDF_TARGET}/esp_efuse_table.c || { echo 'Differences found for ${IDF_TARGET} target. Please run make efuse_common_table or idf.py efuse-common-table and commit the changes.'; exit 1; }
|
|
- cd ${IDF_PATH}/components/efuse/test_efuse_host
|
|
- ./efuse_tests.py
|
|
|
|
test_efuse_table_on_host_esp32:
|
|
extends: .test_efuse_table_on_host_template
|
|
|
|
test_efuse_table_on_host_esp32s2:
|
|
extends: .test_efuse_table_on_host_template
|
|
variables:
|
|
IDF_TARGET: esp32s2
|
|
|
|
test_efuse_table_on_host_esp32s3:
|
|
extends: .test_efuse_table_on_host_template
|
|
variables:
|
|
IDF_TARGET: esp32s3
|
|
|
|
test_efuse_table_on_host_esp32c3:
|
|
extends: .test_efuse_table_on_host_template
|
|
variables:
|
|
IDF_TARGET: esp32c3
|
|
|
|
test_efuse_table_on_host_esp32h4:
|
|
extends: .test_efuse_table_on_host_template
|
|
variables:
|
|
IDF_TARGET: esp32h4
|
|
|
|
test_espcoredump:
|
|
extends: .host_test_template
|
|
artifacts:
|
|
when: always
|
|
paths:
|
|
- components/espcoredump/test/**/.coverage
|
|
- components/espcoredump/test/**/output
|
|
expire_in: 1 week
|
|
variables:
|
|
IDF_COREDUMP_ELF_REPO: "https://gitlab-ci-token:${BOT_TOKEN}@${CI_SERVER_HOST}:${CI_SERVER_PORT}/idf/idf-coredump-elf.git"
|
|
IDF_COREDUMP_ELF_TAG: idf-20220928
|
|
# install CMake version specified in tools.json
|
|
SETUP_TOOLS_LIST: "all"
|
|
script:
|
|
- eval $($IDF_PATH/tools/idf_tools.py export)
|
|
- retry_failed git clone ${IDF_COREDUMP_ELF_REPO} -b $IDF_COREDUMP_ELF_TAG
|
|
- cd ${IDF_PATH}/components/espcoredump/test/
|
|
- ./test_espcoredump.sh ${CI_PROJECT_DIR}/idf-coredump-elf
|
|
|
|
test_logtrace_proc:
|
|
extends: .host_test_template
|
|
artifacts:
|
|
when: on_failure
|
|
paths:
|
|
- tools/esp_app_trace/test/logtrace/output
|
|
- tools/esp_app_trace/test/logtrace/.coverage
|
|
expire_in: 1 week
|
|
script:
|
|
- cd ${IDF_PATH}/tools/esp_app_trace/test/logtrace
|
|
- ./test.sh
|
|
|
|
test_sysviewtrace_proc:
|
|
extends: .host_test_template
|
|
artifacts:
|
|
when: on_failure
|
|
paths:
|
|
- tools/esp_app_trace/test/sysview/output
|
|
- tools/esp_app_trace/test/sysview/.coverage
|
|
expire_in: 1 week
|
|
script:
|
|
- cd ${IDF_PATH}/tools/esp_app_trace/test/sysview
|
|
- ./test.sh
|
|
|
|
test_mkdfu:
|
|
extends: .host_test_template
|
|
variables:
|
|
LC_ALL: C.UTF-8
|
|
script:
|
|
- cd ${IDF_PATH}/tools/test_mkdfu
|
|
- ./test_mkdfu.py
|
|
|
|
test_mkuf2:
|
|
extends: .host_test_template
|
|
script:
|
|
- cd ${IDF_PATH}/tools/test_mkuf2
|
|
- ./test_mkuf2.py
|
|
|
|
test_autocomplete:
|
|
extends:
|
|
- .host_test_template
|
|
artifacts:
|
|
when: on_failure
|
|
paths:
|
|
- ${IDF_PATH}/*.out
|
|
expire_in: 1 week
|
|
script:
|
|
- ${IDF_PATH}/tools/ci/test_autocomplete.py
|
|
|
|
test_detect_python:
|
|
extends:
|
|
- .host_test_template
|
|
script:
|
|
- cd ${IDF_PATH}
|
|
- shellcheck -s sh tools/detect_python.sh
|
|
- shellcheck -s bash tools/detect_python.sh
|
|
- shellcheck -s dash tools/detect_python.sh
|
|
- "bash -c '. tools/detect_python.sh && echo Our Python: ${ESP_PYTHON?Python is not set}'"
|
|
- "dash -c '. tools/detect_python.sh && echo Our Python: ${ESP_PYTHON?Python is not set}'"
|
|
- "zsh -c '. tools/detect_python.sh && echo Our Python: ${ESP_PYTHON?Python is not set}'"
|
|
- "fish -c 'source tools/detect_python.fish && echo Our Python: $ESP_PYTHON'"
|
|
|
|
test_split_path_by_spaces:
|
|
extends: .host_test_template
|
|
script:
|
|
- cd ${IDF_PATH}/tools
|
|
- python -m unittest split_paths_by_spaces.py
|
|
|
|
test_mqtt_on_host:
|
|
extends: .host_test_template
|
|
script:
|
|
- cd ${IDF_PATH}/components/mqtt/esp-mqtt/host_test
|
|
- idf.py build
|
|
- LSAN_OPTIONS=verbosity=1:log_threads=1 build/host_mqtt_client_test.elf
|
|
|
|
test_sockets_on_host:
|
|
extends: .host_test_template
|
|
script:
|
|
# test the tcp-client example with system sockets
|
|
- cd ${IDF_PATH}/examples/protocols/sockets/tcp_client
|
|
- echo 'CONFIG_EXAMPLE_IPV4_ADDR="127.0.0.1"' >> sdkconfig.defaults
|
|
- idf.py --preview set-target linux
|
|
- idf.py build
|
|
- timeout 5 ./build/tcp_client.elf >test.log || true
|
|
- grep "Socket unable to connect" test.log
|
|
# test the udp-client example with lwip sockets
|
|
- cd ${IDF_PATH}/examples/protocols/sockets/udp_client
|
|
- echo 'CONFIG_EXAMPLE_IPV4_ADDR="127.0.0.1"' >> sdkconfig.defaults
|
|
- idf.py --preview set-target linux
|
|
- idf.py build
|
|
- timeout 5 ./build/udp_client.elf >test.log || true
|
|
- grep "Message sent" test.log
|
|
|
|
test_eh_frame_parser:
|
|
extends: .host_test_template
|
|
script:
|
|
- cd ${IDF_PATH}/components/esp_system/test_eh_frame_parser
|
|
- make
|
|
- ./eh_frame_test
|
|
|
|
test_gen_soc_caps_kconfig:
|
|
extends: .host_test_template
|
|
script:
|
|
- cd ${IDF_PATH}/tools/gen_soc_caps_kconfig/
|
|
- ./test/test_gen_soc_caps_kconfig.py
|
|
|
|
test_pytest_qemu:
|
|
extends:
|
|
- .host_test_template
|
|
- .before_script_build_jobs
|
|
image: $QEMU_IMAGE
|
|
artifacts:
|
|
when: always
|
|
paths:
|
|
- XUNIT_RESULT.xml
|
|
- pytest_embedded_log/
|
|
reports:
|
|
junit: XUNIT_RESULT.xml
|
|
expire_in: 1 week
|
|
script:
|
|
- run_cmd python tools/ci/ci_build_apps.py . -vv
|
|
--target esp32
|
|
--pytest-apps
|
|
-m qemu
|
|
- retry_failed git clone $KNOWN_FAILURE_CASES_REPO known_failure_cases
|
|
- pytest
|
|
--target esp32
|
|
-m qemu
|
|
--embedded-services idf,qemu
|
|
--junitxml=XUNIT_RESULT.xml
|
|
--known-failure-cases-file known_failure_cases/known_failure_cases.txt
|
|
|
|
test_pytest_linux:
|
|
extends:
|
|
- .host_test_template
|
|
- .before_script_build_jobs
|
|
artifacts:
|
|
when: always
|
|
paths:
|
|
- XUNIT_RESULT.xml
|
|
- pytest_embedded_log/
|
|
reports:
|
|
junit: XUNIT_RESULT.xml
|
|
expire_in: 1 week
|
|
script:
|
|
- run_cmd python tools/ci/ci_build_apps.py components examples tools/test_apps -vv
|
|
--target linux
|
|
--pytest-apps
|
|
-m host_test
|
|
- run_cmd pytest --target linux -m host_test --junitxml=XUNIT_RESULT.xml
|