.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_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 - retry_failed git clone $KNOWN_FAILURE_CASES_REPO known_failure_cases - run_cmd pytest --target linux -m host_test --junitxml=XUNIT_RESULT.xml --known-failure-cases-file known_failure_cases/known_failure_cases.txt