.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_on_host_cmake: extends: .host_test_template script: - cd ${IDF_PATH}/components/nvs_flash/host_test/nvs_host_test - idf.py build - build/nvs_host_test.elf 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 tags: - build 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 tags: - build 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_nvs_page: extends: .host_test_template script: - cd ${IDF_PATH}/components/nvs_flash/host_test/nvs_page_test - idf.py build - build/test_nvs_page_host.elf test_mqtt_on_host: extends: .host_test_template script: - cd ${IDF_PATH}/components/mqtt/host_test - idf.py build - LSAN_OPTIONS=verbosity=1:log_threads=1 build/host_mqtt_client_test.elf test_log: extends: .host_test_template script: - cd ${IDF_PATH}/components/log/host_test/log_test - idf.py build - build/test_log_host.elf test_esp_event: extends: .host_test_template script: - cd ${IDF_PATH}/components/esp_event/host_test/esp_event_unit_test - idf.py build - build/test_esp_event_host.elf test_hello_world_linux_compatible_example: extends: .host_test_template script: - cd ${IDF_PATH}/tools/test_apps/linux_compatible/hello_world_linux_compatible - idf.py --preview set-target linux - idf.py build - timeout 15 build/hello_world.elf | tee test.txt - grep "Hello world!" test.txt test_esp_system: extends: .host_test_template script: - cd ${IDF_PATH}/components/esp_system/host_test/test_esp_system/ - idf.py build - timeout 5 build/test_esp_system.elf | tee log.txt || true - grep "6 Tests 0 Failures 0 Ignored" log.txt test_esp_timer_cxx: extends: .host_test_template script: - cd ${IDF_PATH}/examples/cxx/experimental/experimental_cpp_component/host_test/esp_timer - idf.py build - build/test_esp_timer_cxx_host.elf test_eh_frame_parser: extends: .host_test_template script: - cd ${IDF_PATH}/components/esp_system/test_eh_frame_parser - make - ./eh_frame_test test_rom_on_linux_works: extends: .host_test_template script: - cd ${IDF_PATH}/components/esp_rom/host_test/rom_test - idf.py build - build/test_rom_host.elf test_cxx_gpio: extends: .host_test_template script: - cd ${IDF_PATH}/examples/cxx/experimental/experimental_cpp_component/host_test/gpio - idf.py build - build/test_gpio_cxx_host.elf test_i2c_cxx: extends: .host_test_template script: - cd ${IDF_PATH}/examples/cxx/experimental/experimental_cpp_component/host_test/i2c - idf.py build - build/test_i2c_cxx_host.elf test_spi_cxx: extends: .host_test_template script: - cd ${IDF_PATH}/examples/cxx/experimental/experimental_cpp_component/host_test/spi - idf.py build - build/test_spi_cxx_host.elf test_system_cxx: extends: .host_test_template script: - cd ${IDF_PATH}/examples/cxx/experimental/experimental_cpp_component/host_test/system - idf.py build - build/test_system_cxx_host.elf test_partition_api_host: extends: .host_test_template script: - cd ${IDF_PATH}/components/esp_partition/host_test/partition_api_test - idf.py build - timeout 5 ./build/partition_api_test.elf | tee test.txt - grep " 0 Failures" test.txt test_spiffs_host: extends: .host_test_template script: - cd ${IDF_PATH}/components/spiffs/host_test - idf.py build - timeout 5 ./build/host_test_spiffs.elf | tee test.txt - grep " 0 Failures" test.txt 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 - pytest --target esp32 -m qemu --embedded-services idf,qemu --junitxml=XUNIT_RESULT.xml