diff --git a/.gitlab/ci/default-build-test-rules.yml b/.gitlab/ci/default-build-test-rules.yml index fd81a57d275..de96c1572b1 100644 --- a/.gitlab/ci/default-build-test-rules.yml +++ b/.gitlab/ci/default-build-test-rules.yml @@ -11,7 +11,6 @@ bypass_check_test_targets: - esp32h21 - - esp32h4 # # These lines would diff --git a/components/app_update/test_apps/test_app_update/pytest_app_update_ut.py b/components/app_update/test_apps/test_app_update/pytest_app_update_ut.py index 2a50d13e6cc..760f0bcb4d0 100644 --- a/components/app_update/test_apps/test_app_update/pytest_app_update_ut.py +++ b/components/app_update/test_apps/test_app_update/pytest_app_update_ut.py @@ -19,7 +19,7 @@ TEST_SUBMENU_PATTERN_PYTEST = re.compile(rb'\s+\((\d+)\)\s+"([^"]+)"\r?\n') indirect=True, ) @idf_parametrize('target', ['supported_targets'], indirect=['target']) -@pytest.mark.temp_skip_ci(targets=['esp32s31'], reason='s31 bringup on this module is not done') +@pytest.mark.temp_skip_ci(targets=['esp32s31', 'esp32h4'], reason='bringup on this module is not done') def test_app_update(dut: Dut) -> None: dut.run_all_single_board_cases(timeout=180) @@ -33,7 +33,7 @@ def test_app_update(dut: Dut) -> None: indirect=True, ) @idf_parametrize('target', ['supported_targets'], indirect=['target']) -@pytest.mark.temp_skip_ci(targets=['esp32s31'], reason='s31 bringup on this module is not done') +@pytest.mark.temp_skip_ci(targets=['esp32s31', 'esp32h4'], reason='bringup on this module is not done') def test_app_update_xip_psram(dut: Dut) -> None: dut.run_all_single_board_cases(timeout=180) @@ -47,7 +47,7 @@ def test_app_update_xip_psram(dut: Dut) -> None: indirect=True, ) @idf_parametrize('target', ['supported_targets'], indirect=['target']) -@pytest.mark.temp_skip_ci(targets=['esp32s31'], reason='s31 bringup on this module is not done') +@pytest.mark.temp_skip_ci(targets=['esp32s31', 'esp32h4'], reason='bringup on this module is not done') def test_app_update_xip_psram_rom_impl(dut: Dut) -> None: dut.run_all_single_board_cases(timeout=180) diff --git a/components/esp_driver_dma/test_apps/dma/pytest_dma.py b/components/esp_driver_dma/test_apps/dma/pytest_dma.py index 8f6ed5c9ea9..27a2bfe2a18 100644 --- a/components/esp_driver_dma/test_apps/dma/pytest_dma.py +++ b/components/esp_driver_dma/test_apps/dma/pytest_dma.py @@ -16,7 +16,7 @@ from pytest_embedded_idf.utils import soc_filtered_targets ) @idf_parametrize( 'target', - ['esp32s2', 'esp32s31', 'esp32c2', 'esp32c3', 'esp32c5', 'esp32c6', 'esp32c61', 'esp32h2', 'esp32p4'], + ['esp32s2', 'esp32s31', 'esp32c2', 'esp32c3', 'esp32c5', 'esp32c6', 'esp32c61', 'esp32h2', 'esp32h4', 'esp32p4'], indirect=['target'], ) def test_dma(dut: Dut) -> None: diff --git a/components/esp_driver_dma/test_apps/dma/sdkconfig.defaults.esp32h4 b/components/esp_driver_dma/test_apps/dma/sdkconfig.defaults.esp32h4 new file mode 100644 index 00000000000..6932c2bedd1 --- /dev/null +++ b/components/esp_driver_dma/test_apps/dma/sdkconfig.defaults.esp32h4 @@ -0,0 +1,2 @@ +CONFIG_SPIRAM=y +CONFIG_SPIRAM_SPEED_64M=y diff --git a/components/esp_driver_gpio/test_apps/.build-test-rules.yml b/components/esp_driver_gpio/test_apps/.build-test-rules.yml index d817881452e..58ce2791795 100644 --- a/components/esp_driver_gpio/test_apps/.build-test-rules.yml +++ b/components/esp_driver_gpio/test_apps/.build-test-rules.yml @@ -1,6 +1,10 @@ # Documentation: .gitlab/ci/README.md#manifest-file-to-control-the-buildtest-apps components/esp_driver_gpio/test_apps: + disable_test: + - if: IDF_TARGET == "esp32h4" + temporary: true + reason: cannot pass # TODO: IDF-15608 depends_components: - esp_driver_gpio - esp_hal_gpio diff --git a/components/esp_driver_gpio/test_apps/gpio/pytest_gpio.py b/components/esp_driver_gpio/test_apps/gpio/pytest_gpio.py index 008e15003d3..4f511762e0c 100644 --- a/components/esp_driver_gpio/test_apps/gpio/pytest_gpio.py +++ b/components/esp_driver_gpio/test_apps/gpio/pytest_gpio.py @@ -12,6 +12,7 @@ CONFIGS = [ @pytest.mark.generic @pytest.mark.parametrize('config', CONFIGS, indirect=True) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15608 @idf_parametrize('target', ['supported_targets'], indirect=['target']) def test_gpio(dut: IdfDut) -> None: dut.run_all_single_board_cases(group='gpio') diff --git a/components/esp_driver_i2c/test_apps/i2c_test_apps/pytest_i2c.py b/components/esp_driver_i2c/test_apps/i2c_test_apps/pytest_i2c.py index 5debc148b1b..ac48dbb624e 100644 --- a/components/esp_driver_i2c/test_apps/i2c_test_apps/pytest_i2c.py +++ b/components/esp_driver_i2c/test_apps/i2c_test_apps/pytest_i2c.py @@ -32,6 +32,7 @@ def test_i2c(dut: Dut) -> None: ) @idf_parametrize('target', soc_filtered_targets('SOC_I2C_SUPPORTED == 1'), indirect=['target']) @pytest.mark.temp_skip_ci(targets=['esp32s31'], reason='lack of s31 multi-device runner # TODO: IDFCI-10334') +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='lack of runner # TODO: IDFCI-10702') def test_i2c_multi_device(case_tester) -> None: # type: ignore case_tester.run_all_multi_dev_cases(reset=True) diff --git a/components/esp_driver_i2s/test_apps/.build-test-rules.yml b/components/esp_driver_i2s/test_apps/.build-test-rules.yml index 56bba802ec6..ce34031d0bf 100644 --- a/components/esp_driver_i2s/test_apps/.build-test-rules.yml +++ b/components/esp_driver_i2s/test_apps/.build-test-rules.yml @@ -3,6 +3,10 @@ components/esp_driver_i2s/test_apps/i2s: disable: - if: SOC_I2S_SUPPORTED != 1 + disable_test: + - if: IDF_TARGET in ["esp32h4"] + temporary: true + reason: cannot pass # TODO: IDF-15609 depends_components: - esp_driver_i2s - esp_driver_pcnt @@ -22,6 +26,9 @@ components/esp_driver_i2s/test_apps/i2s_multi_dev: - if: IDF_TARGET in ["esp32s31"] temporary: true reason: lack of s31 multi-device runner + - if: IDF_TARGET in ["esp32h4"] # TODO: IDFCI-10702 + temporary: true + reason: lack of runner depends_components: - esp_driver_i2s - esp_driver_dma diff --git a/components/esp_driver_i2s/test_apps/i2s/pytest_i2s.py b/components/esp_driver_i2s/test_apps/i2s/pytest_i2s.py index ef6bf48ad7e..030e48f6ecb 100644 --- a/components/esp_driver_i2s/test_apps/i2s/pytest_i2s.py +++ b/components/esp_driver_i2s/test_apps/i2s/pytest_i2s.py @@ -20,7 +20,8 @@ from pytest_embedded_idf.utils import soc_filtered_targets soc_filtered_targets('SOC_I2S_SUPPORTED == 1 and IDF_TARGET not in ["esp32c5", "esp32s3"]'), indirect=['target'], ) -@pytest.mark.temp_skip_ci(targets=['esp32h21', 'esp32h4'], reason='lack of runners') +@pytest.mark.temp_skip_ci(targets=['esp32h21'], reason='lack of runners') +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15609 def test_i2s(dut: Dut) -> None: dut.run_all_single_board_cases() diff --git a/components/esp_driver_i2s/test_apps/i2s_multi_dev/pytest_i2s_multi_dev.py b/components/esp_driver_i2s/test_apps/i2s_multi_dev/pytest_i2s_multi_dev.py index b1826704a06..4e9975fa715 100644 --- a/components/esp_driver_i2s/test_apps/i2s_multi_dev/pytest_i2s_multi_dev.py +++ b/components/esp_driver_i2s/test_apps/i2s_multi_dev/pytest_i2s_multi_dev.py @@ -8,6 +8,7 @@ from pytest_embedded_idf.utils import soc_filtered_targets @pytest.mark.generic_multi_device @pytest.mark.temp_skip_ci(targets=['esp32c61'], reason='p4 rev3 migration # TODO: IDF-11442') @pytest.mark.temp_skip_ci(targets=['esp32s31'], reason='lack of s31 multi-device runner # TODO: IDFCI-10334') +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='lack of runner # TODO: IDFCI-10702') @pytest.mark.parametrize('count', [2], indirect=True) @idf_parametrize('target', soc_filtered_targets('SOC_I2S_SUPPORTS_TDM == 1'), indirect=['target']) def test_i2s_multi_dev(case_tester) -> None: # type: ignore diff --git a/components/esp_driver_ledc/test_apps/ledc/pytest_ledc.py b/components/esp_driver_ledc/test_apps/ledc/pytest_ledc.py index fddf23983b2..2a4453af593 100644 --- a/components/esp_driver_ledc/test_apps/ledc/pytest_ledc.py +++ b/components/esp_driver_ledc/test_apps/ledc/pytest_ledc.py @@ -76,5 +76,6 @@ def test_ledc_psram(dut: IdfDut) -> None: ) @idf_parametrize('target', ['supported_targets'], indirect=['target']) @pytest.mark.temp_skip_ci(targets=['esp32s31'], reason='TODO: IDFCI-10334 no runner yet') +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='lack of runner # TODO: IDFCI-10702') def test_ledc_multi_device(case_tester) -> None: # type: ignore case_tester.run_all_multi_dev_cases(reset=True) diff --git a/components/esp_driver_mcpwm/test_apps/mcpwm/main/test_mcpwm_etm.c b/components/esp_driver_mcpwm/test_apps/mcpwm/main/test_mcpwm_etm.c index 2339ff029c6..3b8ec13b11c 100644 --- a/components/esp_driver_mcpwm/test_apps/mcpwm/main/test_mcpwm_etm.c +++ b/components/esp_driver_mcpwm/test_apps/mcpwm/main/test_mcpwm_etm.c @@ -14,6 +14,7 @@ #include "driver/gptimer.h" #include "driver/gpio.h" #include "driver/mcpwm_prelude.h" +#include "test_mcpwm_utils.h" TEST_CASE("mcpwm_comparator_etm_event", "[mcpwm][etm]") { @@ -54,7 +55,7 @@ TEST_CASE("mcpwm_comparator_etm_event", "[mcpwm][etm]") TEST_ESP_OK(mcpwm_comparator_set_compare_value(comparator_b, cmpb)); // install generator - const uint32_t gen_gpio = 10; + const uint32_t gen_gpio = TEST_PWMA_GPIO; mcpwm_gen_handle_t generator = NULL; mcpwm_generator_config_t generator_config = { .gen_gpio_num = gen_gpio, diff --git a/components/esp_driver_mcpwm/test_apps/mcpwm/pytest_mcpwm.py b/components/esp_driver_mcpwm/test_apps/mcpwm/pytest_mcpwm.py index f8168124eab..597caef05eb 100644 --- a/components/esp_driver_mcpwm/test_apps/mcpwm/pytest_mcpwm.py +++ b/components/esp_driver_mcpwm/test_apps/mcpwm/pytest_mcpwm.py @@ -14,7 +14,9 @@ from pytest_embedded_idf.utils import idf_parametrize ], indirect=True, ) -@idf_parametrize('target', ['esp32', 'esp32s3', 'esp32c6', 'esp32h2', 'esp32p4', 'esp32s31'], indirect=['target']) +@idf_parametrize( + 'target', ['esp32', 'esp32s3', 'esp32c6', 'esp32h2', 'esp32p4', 'esp32s31', 'esp32h4'], indirect=['target'] +) def test_mcpwm(dut: Dut) -> None: dut.run_all_single_board_cases() diff --git a/components/esp_driver_parlio/test_apps/.build-test-rules.yml b/components/esp_driver_parlio/test_apps/.build-test-rules.yml index 5f2ce845840..2f90c0f32e0 100644 --- a/components/esp_driver_parlio/test_apps/.build-test-rules.yml +++ b/components/esp_driver_parlio/test_apps/.build-test-rules.yml @@ -3,6 +3,10 @@ components/esp_driver_parlio/test_apps/parlio: disable: - if: SOC_PARLIO_SUPPORTED != 1 + disable_test: + - if: IDF_TARGET == "esp32h4" + temporary: true + reason: cannot pass # TODO: IDF-15613 depends_components: - esp_driver_parlio - esp_driver_dma diff --git a/components/esp_driver_parlio/test_apps/parlio/pytest_parlio_unity.py b/components/esp_driver_parlio/test_apps/parlio/pytest_parlio_unity.py index 3a584506235..52e8d600bb9 100644 --- a/components/esp_driver_parlio/test_apps/parlio/pytest_parlio_unity.py +++ b/components/esp_driver_parlio/test_apps/parlio/pytest_parlio_unity.py @@ -3,6 +3,7 @@ import pytest from pytest_embedded import Dut from pytest_embedded_idf.utils import idf_parametrize +from pytest_embedded_idf.utils import soc_filtered_targets @pytest.mark.generic @@ -14,7 +15,10 @@ from pytest_embedded_idf.utils import idf_parametrize ], indirect=True, ) -@idf_parametrize('target', ['esp32c6', 'esp32h2', 'esp32p4'], indirect=['target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15613 +@idf_parametrize( + 'target', soc_filtered_targets('SOC_PARLIO_SUPPORTED == 1 and IDF_TARGET not in ["esp32c5"]'), indirect=['target'] +) def test_parlio(dut: Dut) -> None: dut.run_all_single_board_cases() @@ -27,7 +31,9 @@ def test_parlio(dut: Dut) -> None: ], indirect=True, ) -@idf_parametrize('target', ['esp32c6', 'esp32h2', 'esp32p4', 'esp32c5'], indirect=['target']) +@idf_parametrize( + 'target', soc_filtered_targets('SOC_PARLIO_SUPPORTED == 1 and SOC_FLASH_ENC_SUPPORTED == 1'), indirect=['target'] +) def test_parlio_with_virt_flash_enc(dut: Dut) -> None: print(' - Erase flash') dut.serial.erase_flash() diff --git a/components/esp_driver_parlio/test_apps/parlio/sdkconfig.defaults.esp32h4 b/components/esp_driver_parlio/test_apps/parlio/sdkconfig.defaults.esp32h4 new file mode 100644 index 00000000000..854cdaf47f6 --- /dev/null +++ b/components/esp_driver_parlio/test_apps/parlio/sdkconfig.defaults.esp32h4 @@ -0,0 +1,3 @@ +CONFIG_SPIRAM=y +CONFIG_SPIRAM_SPEED_64M=y +CONFIG_SPIRAM_MALLOC_ALWAYSINTERNAL=0 diff --git a/components/esp_driver_pcnt/test_apps/pulse_cnt/pytest_pulse_cnt.py b/components/esp_driver_pcnt/test_apps/pulse_cnt/pytest_pulse_cnt.py index 664b16058f3..06cffb4ae03 100644 --- a/components/esp_driver_pcnt/test_apps/pulse_cnt/pytest_pulse_cnt.py +++ b/components/esp_driver_pcnt/test_apps/pulse_cnt/pytest_pulse_cnt.py @@ -16,6 +16,5 @@ from pytest_embedded_idf.utils import soc_filtered_targets indirect=True, ) @idf_parametrize('target', soc_filtered_targets('SOC_PCNT_SUPPORTED == 1'), indirect=['target']) -@pytest.mark.temp_skip_ci(targets=['esp32h21', 'esp32h4'], reason='lack of runners') def test_pulse_cnt(dut: Dut) -> None: dut.run_all_single_board_cases() diff --git a/components/esp_driver_rmt/test_apps/rmt/main/test_rmt_rx.c b/components/esp_driver_rmt/test_apps/rmt/main/test_rmt_rx.c index 1ca44fcb7b1..ee5380bf962 100644 --- a/components/esp_driver_rmt/test_apps/rmt/main/test_rmt_rx.c +++ b/components/esp_driver_rmt/test_apps/rmt/main/test_rmt_rx.c @@ -289,9 +289,9 @@ static void test_rmt_partial_receive(size_t mem_block_symbols, int test_symbols_ for (int i = 0; i < 10; i++) { printf("{%d:%d},{%d:%d}\r\n", receive_user_buf[i].level0, receive_user_buf[i].duration0, receive_user_buf[i].level1, receive_user_buf[i].duration1); TEST_ASSERT_EQUAL(1, receive_user_buf[i].level0); - TEST_ASSERT_INT_WITHIN(20, 50, receive_user_buf[i].duration0); + TEST_ASSERT_INT_WITHIN(30, 50, receive_user_buf[i].duration0); TEST_ASSERT_EQUAL(0, receive_user_buf[i].level1); - TEST_ASSERT_INT_WITHIN(20, 50, receive_user_buf[i].duration1); + TEST_ASSERT_INT_WITHIN(30, 50, receive_user_buf[i].duration1); } printf("disable rx channels\r\n"); diff --git a/components/esp_driver_rmt/test_apps/rmt/pytest_rmt.py b/components/esp_driver_rmt/test_apps/rmt/pytest_rmt.py index fa360b9cd26..af2479efcb5 100644 --- a/components/esp_driver_rmt/test_apps/rmt/pytest_rmt.py +++ b/components/esp_driver_rmt/test_apps/rmt/pytest_rmt.py @@ -3,6 +3,7 @@ import pytest from pytest_embedded import Dut from pytest_embedded_idf.utils import idf_parametrize +from pytest_embedded_idf.utils import soc_filtered_targets @pytest.mark.generic @@ -15,7 +16,9 @@ from pytest_embedded_idf.utils import idf_parametrize indirect=True, ) @idf_parametrize( - 'target', ['esp32', 'esp32s2', 'esp32c3', 'esp32c6', 'esp32h2', 'esp32p4', 'esp32s31'], indirect=['target'] + 'target', + soc_filtered_targets('SOC_RMT_SUPPORTED == 1 and IDF_TARGET not in ["esp32c5", "esp32s3"]'), + indirect=['target'], ) def test_rmt(dut: Dut) -> None: dut.run_all_single_board_cases() @@ -30,7 +33,9 @@ def test_rmt(dut: Dut) -> None: indirect=True, ) @idf_parametrize( - 'target', ['esp32', 'esp32s2', 'esp32c3', 'esp32c6', 'esp32h2', 'esp32p4', 'esp32c5'], indirect=['target'] + 'target', + soc_filtered_targets('SOC_RMT_SUPPORTED == 1 and SOC_FLASH_ENC_SUPPORTED == 1 and IDF_TARGET not in ["esp32s3"]'), + indirect=['target'], ) def test_rmt_with_virt_flash_enc(dut: Dut) -> None: print(' - Erase flash') diff --git a/components/esp_driver_spi/test_apps/.build-test-rules.yml b/components/esp_driver_spi/test_apps/.build-test-rules.yml index 01095bb9d1c..89afe43237b 100644 --- a/components/esp_driver_spi/test_apps/.build-test-rules.yml +++ b/components/esp_driver_spi/test_apps/.build-test-rules.yml @@ -12,20 +12,36 @@ components/esp_driver_spi/test_apps/master: disable: - if: SOC_GPSPI_SUPPORTED != 1 + disable_test: + - if: IDF_TARGET in ["esp32h4"] + temporary: true + reason: cannot pass # TODO: IDF-15615 <<: *spi_depends_default components/esp_driver_spi/test_apps/param: disable: - if: SOC_GPSPI_SUPPORTED != 1 + disable_test: + - if: IDF_TARGET in ["esp32h4"] + temporary: true + reason: cannot pass # TODO: IDF-15615 <<: *spi_depends_default components/esp_driver_spi/test_apps/slave: disable: - if: SOC_GPSPI_SUPPORTED != 1 + disable_test: + - if: IDF_TARGET in ["esp32h4"] + temporary: true + reason: cannot pass # TODO: IDF-15615 <<: *spi_depends_default components/esp_driver_spi/test_apps/slave_hd: disable: - if: SOC_GPSPI_SUPPORTED != 1 - if: SOC_SPI_SUPPORT_SLAVE_HD_VER2 != 1 + disable_test: + - if: IDF_TARGET in ["esp32h4"] + temporary: true + reason: cannot pass # TODO: IDF-15615 <<: *spi_depends_default diff --git a/components/esp_driver_spi/test_apps/master/pytest_spi_master.py b/components/esp_driver_spi/test_apps/master/pytest_spi_master.py index 5f30618445a..ea771c08ae5 100644 --- a/components/esp_driver_spi/test_apps/master/pytest_spi_master.py +++ b/components/esp_driver_spi/test_apps/master/pytest_spi_master.py @@ -17,6 +17,7 @@ from pytest_embedded_idf.utils import soc_filtered_targets @idf_parametrize( 'target', soc_filtered_targets('SOC_GPSPI_SUPPORTED == 1 and IDF_TARGET not in ["esp32c5"]'), indirect=['target'] ) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15615 def test_master_single_dev(case_tester) -> None: # type: ignore for case in case_tester.test_menu: if 'test_env' in case.attributes: @@ -86,5 +87,6 @@ def test_master_esp_flash(case_tester) -> None: # type: ignore ) @idf_parametrize('target', ['supported_targets'], indirect=['target']) @pytest.mark.temp_skip_ci(targets=['esp32s31'], reason='no runner') +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='lack of runner') # TODO: IDFCI-10702 def test_master_multi_dev(case_tester) -> None: # type: ignore case_tester.run_all_multi_dev_cases(reset=True) diff --git a/components/esp_driver_spi/test_apps/param/pytest_spi_param.py b/components/esp_driver_spi/test_apps/param/pytest_spi_param.py index 9813e838d10..5c30abcef16 100644 --- a/components/esp_driver_spi/test_apps/param/pytest_spi_param.py +++ b/components/esp_driver_spi/test_apps/param/pytest_spi_param.py @@ -6,6 +6,7 @@ from pytest_embedded_idf.utils import idf_parametrize @pytest.mark.generic @idf_parametrize('target', ['supported_targets'], indirect=['target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15615 def test_param_single_dev(case_tester) -> None: # type: ignore case_tester.run_all_normal_cases(reset=True) @@ -14,5 +15,6 @@ def test_param_single_dev(case_tester) -> None: # type: ignore @pytest.mark.parametrize('count', [2], indirect=True) @idf_parametrize('target', ['supported_targets'], indirect=['target']) @pytest.mark.temp_skip_ci(targets=['esp32s31'], reason='no runner') +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='no runner') # TODO: IDFCI-10702 def test_param_multi_dev(case_tester) -> None: # type: ignore case_tester.run_all_multi_dev_cases(reset=True) diff --git a/components/esp_driver_spi/test_apps/slave/pytest_spi_slave.py b/components/esp_driver_spi/test_apps/slave/pytest_spi_slave.py index e2d3e2a48b1..1c65bd0d132 100644 --- a/components/esp_driver_spi/test_apps/slave/pytest_spi_slave.py +++ b/components/esp_driver_spi/test_apps/slave/pytest_spi_slave.py @@ -8,8 +8,11 @@ from pytest_embedded_idf.utils import soc_filtered_targets @pytest.mark.generic @pytest.mark.parametrize('config', ['release', 'iram_safe'], indirect=True) @idf_parametrize( - 'target', soc_filtered_targets('SOC_GPSPI_SUPPORTED == 1 and IDF_TARGET not in ["esp32c5"]'), indirect=['target'] + 'target', + soc_filtered_targets('SOC_GPSPI_SUPPORTED == 1 and IDF_TARGET not in ["esp32c5"]'), + indirect=['target'], ) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15615 def test_slave_single_dev(case_tester) -> None: # type: ignore case_tester.run_all_normal_cases(reset=True) @@ -33,6 +36,7 @@ def test_slave_single_dev_esp32c5_rev1(case_tester) -> None: # type: ignore @pytest.mark.parametrize('count, config', [(2, 'release'), (2, 'iram_safe')], indirect=True) @idf_parametrize('target', ['supported_targets'], indirect=['target']) @pytest.mark.temp_skip_ci(targets=['esp32s31'], reason='no runner') +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='no runner') # TODO: IDFCI-10702 @pytest.mark.temp_skip_ci(targets=['esp32s31'], reason='s31 bringup on this module is not done') def test_slave_multi_dev(case_tester) -> None: # type: ignore case_tester.run_all_multi_dev_cases(reset=True) diff --git a/components/esp_driver_spi/test_apps/slave_hd/pytest_spi_slave_hd.py b/components/esp_driver_spi/test_apps/slave_hd/pytest_spi_slave_hd.py index 58c1f5ff75c..ecf7560774a 100644 --- a/components/esp_driver_spi/test_apps/slave_hd/pytest_spi_slave_hd.py +++ b/components/esp_driver_spi/test_apps/slave_hd/pytest_spi_slave_hd.py @@ -13,6 +13,7 @@ from pytest_embedded_idf.utils import soc_filtered_targets soc_filtered_targets('SOC_SPI_SUPPORT_SLAVE_HD_VER2 == 1 and IDF_TARGET not in ["esp32c5"]'), indirect=['target'], ) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15615 def test_slave_hd_single_dev(case_tester) -> None: # type: ignore case_tester.run_all_normal_cases(reset=True, timeout=180) @@ -29,5 +30,6 @@ def test_slave_hd_single_dev_esp32c5_rev1(case_tester) -> None: # type: ignore @pytest.mark.parametrize('count, config', [(2, 'release')], indirect=True) @idf_parametrize('target', soc_filtered_targets('SOC_SPI_SUPPORT_SLAVE_HD_VER2 == 1'), indirect=['target']) @pytest.mark.temp_skip_ci(targets=['esp32s31'], reason='no runner') +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='no runner') # TODO: IDFCI-10702 def test_slave_hd_multi_dev(case_tester) -> None: # type: ignore case_tester.run_all_multi_dev_cases(reset=True) diff --git a/components/esp_driver_tsens/test_apps/.build-test-rules.yml b/components/esp_driver_tsens/test_apps/.build-test-rules.yml index 5a2b5c628e7..e9415242372 100644 --- a/components/esp_driver_tsens/test_apps/.build-test-rules.yml +++ b/components/esp_driver_tsens/test_apps/.build-test-rules.yml @@ -3,6 +3,10 @@ components/esp_driver_tsens/test_apps/temperature_sensor: disable: - if: SOC_TEMP_SENSOR_SUPPORTED != 1 + disable_test: + - if: IDF_TARGET in ["esp32h4"] + temporary: true + reason: cannot pass # TODO: IDF-15617 depends_components: - esp_driver_tsens - esp_hal_ana_conv diff --git a/components/esp_driver_tsens/test_apps/temperature_sensor/pytest_temperature_sensor.py b/components/esp_driver_tsens/test_apps/temperature_sensor/pytest_temperature_sensor.py index 9dfd63e6371..ab118bc74b7 100644 --- a/components/esp_driver_tsens/test_apps/temperature_sensor/pytest_temperature_sensor.py +++ b/components/esp_driver_tsens/test_apps/temperature_sensor/pytest_temperature_sensor.py @@ -4,6 +4,7 @@ import pytest from pytest_embedded import Dut from pytest_embedded_idf.unity_tester import CaseTester from pytest_embedded_idf.utils import idf_parametrize +from pytest_embedded_idf.utils import soc_filtered_targets @pytest.mark.generic @@ -16,9 +17,10 @@ from pytest_embedded_idf.utils import idf_parametrize ) @idf_parametrize( 'target', - ['esp32s2', 'esp32c3', 'esp32s3', 'esp32c2', 'esp32c6', 'esp32h2', 'esp32p4', 'esp32c61'], + soc_filtered_targets('SOC_TEMP_SENSOR_SUPPORTED == 1 and IDF_TARGET not in ["esp32c5"]'), indirect=['target'], ) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15617 def test_temperature_sensor_driver(dut: Dut) -> None: dut.run_all_single_board_cases() diff --git a/components/esp_driver_twai/test_apps/.build-test-rules.yml b/components/esp_driver_twai/test_apps/.build-test-rules.yml index a38e7e86f6a..f0f2cf9a9c4 100644 --- a/components/esp_driver_twai/test_apps/.build-test-rules.yml +++ b/components/esp_driver_twai/test_apps/.build-test-rules.yml @@ -1,6 +1,10 @@ components/esp_driver_twai/test_apps/test_twai: disable: - if: SOC_TWAI_SUPPORTED != 1 + disable_test: + - if: IDF_TARGET in ["esp32h4"] + temporary: true + reason: cannot pass # TODO: IDF-15618 depends_components: - esp_driver_twai - esp_hal_twai diff --git a/components/esp_driver_twai/test_apps/test_twai/pytest_driver_twai.py b/components/esp_driver_twai/test_apps/test_twai/pytest_driver_twai.py index 0c350e9bc0d..e90d117b5ff 100644 --- a/components/esp_driver_twai/test_apps/test_twai/pytest_driver_twai.py +++ b/components/esp_driver_twai/test_apps/test_twai/pytest_driver_twai.py @@ -20,6 +20,7 @@ from pytest_embedded_idf.utils import soc_filtered_targets @idf_parametrize( 'target', soc_filtered_targets('SOC_TWAI_SUPPORTED == 1 and IDF_TARGET not in ["esp32c5"]'), indirect=['target'] ) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15618 def test_driver_twai_loopbk(dut: Dut) -> None: dut.run_all_single_board_cases(group='twai', reset=True) @@ -78,9 +79,10 @@ def fixture_create_socket_can() -> Bus: # Interactive Tests # --------------------------------------------------------------------------- @pytest.mark.twai_std -@pytest.mark.temp_skip_ci(targets=['esp32h4', 'esp32s31'], reason='no runner') +@pytest.mark.temp_skip_ci(targets=['esp32s31'], reason='no runner') @pytest.mark.parametrize('config', ['release'], indirect=True) @idf_parametrize('target', soc_filtered_targets('SOC_TWAI_SUPPORTED == 1'), indirect=['target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='no runner') # TODO: IDFCI-11110 def test_driver_twai_listen_only(dut: Dut, socket_can: Bus) -> None: dut.expect_exact('Press ENTER to see the list of tests') dut.write('"twai_listen_only"') @@ -99,9 +101,10 @@ def test_driver_twai_listen_only(dut: Dut, socket_can: Bus) -> None: @pytest.mark.twai_std -@pytest.mark.temp_skip_ci(targets=['esp32h4', 'esp32s31'], reason='no runner') +@pytest.mark.temp_skip_ci(targets=['esp32s31'], reason='no runner') @pytest.mark.parametrize('config', ['release'], indirect=True) @idf_parametrize('target', soc_filtered_targets('SOC_TWAI_SUPPORTED == 1'), indirect=['target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='no runner') # TODO: IDFCI-11110 def test_driver_twai_remote_request(dut: Dut, socket_can: Bus) -> None: dut.expect_exact('Press ENTER to see the list of tests') dut.write('"twai_remote_request"') diff --git a/components/esp_driver_uart/test_apps/.build-test-rules.yml b/components/esp_driver_uart/test_apps/.build-test-rules.yml index 835eacb6696..03280b4ea03 100644 --- a/components/esp_driver_uart/test_apps/.build-test-rules.yml +++ b/components/esp_driver_uart/test_apps/.build-test-rules.yml @@ -17,6 +17,10 @@ components/esp_driver_uart/test_apps/rs485: components/esp_driver_uart/test_apps/uart: disable: - if: SOC_UART_SUPPORTED != 1 + disable_test: + - if: IDF_TARGET in ["esp32h4"] + temporary: true + reason: cannot pass # TODO: IDF-15619 depends_components: - esp_driver_uart - esp_hal_uart diff --git a/components/esp_driver_uart/test_apps/uart/pytest_uart.py b/components/esp_driver_uart/test_apps/uart/pytest_uart.py index 2c10b7386b6..ba534640e28 100644 --- a/components/esp_driver_uart/test_apps/uart/pytest_uart.py +++ b/components/esp_driver_uart/test_apps/uart/pytest_uart.py @@ -30,6 +30,7 @@ input_argv = { indirect=True, ) @idf_parametrize('target', ['supported_targets'], indirect=['target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15619 def test_uart_single_dev(case_tester) -> None: # type: ignore dut = case_tester.first_dut chip_type = dut.app.target @@ -65,6 +66,7 @@ def test_uart_single_dev(case_tester) -> None: # type: ignore indirect=True, ) @idf_parametrize('target', ['esp32s3'], indirect=['target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15619 def test_uart_single_dev_psram(case_tester) -> None: # type: ignore dut = case_tester.first_dut for case in case_tester.test_menu: @@ -84,6 +86,7 @@ def test_uart_single_dev_psram(case_tester) -> None: # type: ignore @pytest.mark.generic_multi_device @idf_parametrize('target', ['supported_targets'], indirect=['target']) @pytest.mark.temp_skip_ci(targets=['esp32s31'], reason='s31 bringup on this module is not done') +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='no runner') # TODO: IDFCI-10702 @pytest.mark.parametrize( 'config', [ diff --git a/components/esp_driver_uart/test_apps/uhci/pytest_uhci.py b/components/esp_driver_uart/test_apps/uhci/pytest_uhci.py index 7058116ece3..754db07424d 100644 --- a/components/esp_driver_uart/test_apps/uhci/pytest_uhci.py +++ b/components/esp_driver_uart/test_apps/uhci/pytest_uhci.py @@ -14,7 +14,9 @@ from pytest_embedded_idf.utils import idf_parametrize ], indirect=True, ) -@idf_parametrize('target', ['esp32c3', 'esp32c5', 'esp32c6', 'esp32h2', 'esp32p4', 'esp32s31'], indirect=['target']) +@idf_parametrize( + 'target', ['esp32c3', 'esp32c5', 'esp32c6', 'esp32h2', 'esp32p4', 'esp32s31', 'esp32h4'], indirect=['target'] +) def test_uhci(dut: Dut) -> None: dut.run_all_single_board_cases() diff --git a/components/esp_hal_dma/esp32h4/gdma_periph.c b/components/esp_hal_dma/esp32h4/gdma_periph.c index 2f67a5d2969..fcd865380ee 100644 --- a/components/esp_hal_dma/esp32h4/gdma_periph.c +++ b/components/esp_hal_dma/esp32h4/gdma_periph.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2025 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2025-2026 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ diff --git a/components/esp_hw_support/test_apps/.build-test-rules.yml b/components/esp_hw_support/test_apps/.build-test-rules.yml index 89f5735ba92..7ca36b0c503 100644 --- a/components/esp_hw_support/test_apps/.build-test-rules.yml +++ b/components/esp_hw_support/test_apps/.build-test-rules.yml @@ -2,7 +2,10 @@ components/esp_hw_support/test_apps/cpu: -components/esp_hw_support/test_apps/esp_hw_support_unity_tests: + disable_test: + - if: IDF_TARGET in ["esp32h4"] + temporary: true + reason: cannot pass # TODO: IDF-15602 components/esp_hw_support/test_apps/host_test_linux: enable: diff --git a/components/esp_hw_support/test_apps/cpu/pytest_cpu.py b/components/esp_hw_support/test_apps/cpu/pytest_cpu.py index 64074e219c1..79062a4cc67 100644 --- a/components/esp_hw_support/test_apps/cpu/pytest_cpu.py +++ b/components/esp_hw_support/test_apps/cpu/pytest_cpu.py @@ -23,9 +23,12 @@ def _run_non_recoverable_case(dut: IdfDut, test_name: str, expected_reason: str) @pytest.mark.generic @idf_parametrize( 'config,target', - [('default', 'supported_targets')], + [ + ('default', 'supported_targets'), + ], indirect=['config', 'target'], ) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15602 def test_cpu(dut: IdfDut) -> None: dut.run_all_single_board_cases(group='!cpu_reset&!cpu_non_recoverable', timeout=120) @@ -33,9 +36,12 @@ def test_cpu(dut: IdfDut) -> None: @pytest.mark.generic @idf_parametrize( 'config,target', - [('default', 'supported_targets')], + [ + ('default', 'supported_targets'), + ], indirect=['config', 'target'], ) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15602 def test_cpu_reset(dut: IdfDut) -> None: dut.run_all_single_board_cases(group='cpu_reset', timeout=120) @@ -43,9 +49,12 @@ def test_cpu_reset(dut: IdfDut) -> None: @pytest.mark.generic @idf_parametrize( 'config,target', - [('default', 'supported_targets')], + [ + ('default', 'supported_targets'), + ], indirect=['config', 'target'], ) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15602 def test_cpu_non_recoverable(dut: IdfDut) -> None: expected_reason = 'Unhandled debug exception' if dut.target in {'esp32', 'esp32s2', 'esp32s3'} else 'Breakpoint' present_cases = {case.name for case in dut.test_menu} diff --git a/components/esp_hw_support/test_apps/rtc_clk/pytest_rtc_clk.py b/components/esp_hw_support/test_apps/rtc_clk/pytest_rtc_clk.py index 3e6cc461028..9232564364d 100644 --- a/components/esp_hw_support/test_apps/rtc_clk/pytest_rtc_clk.py +++ b/components/esp_hw_support/test_apps/rtc_clk/pytest_rtc_clk.py @@ -40,6 +40,7 @@ def test_rtc_calib_compensation_across_dslp(case_tester: CaseTester) -> None: @pytest.mark.temp_skip_ci( targets=['esp32s31'], reason='no flash_suspend runners available yet' ) # TODO [ESP32S31] IDF-15531 +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='lack of runner # TODO: IDFCI-11111') @pytest.mark.parametrize( 'config', [ diff --git a/components/esp_hw_support/test_apps/wakeup_tests/pytest_wakeup_tests.py b/components/esp_hw_support/test_apps/wakeup_tests/pytest_wakeup_tests.py index bc242cec9fe..aa15087842a 100644 --- a/components/esp_hw_support/test_apps/wakeup_tests/pytest_wakeup_tests.py +++ b/components/esp_hw_support/test_apps/wakeup_tests/pytest_wakeup_tests.py @@ -48,6 +48,7 @@ available_rtcio_nums = { soc_filtered_targets('SOC_PM_SUPPORT_EXT1_WAKEUP == 1 and SOC_DEEP_SLEEP_SUPPORTED == 1'), indirect=['target'], ) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='lack of multi-device runners') # TODO: IDFCI-10702 def test_ext1_deepsleep(dut: tuple[IdfDut, IdfDut]) -> None: wakee = dut[0] waker = dut[1] @@ -99,6 +100,7 @@ def test_ext1_deepsleep(dut: tuple[IdfDut, IdfDut]) -> None: @pytest.mark.parametrize('count', [2], indirect=True) @pytest.mark.parametrize('config', TEST_CONFIGS, indirect=True) @idf_parametrize('target', soc_filtered_targets('SOC_GPIO_SUPPORT_HP_PERIPH_PD_SLEEP_WAKEUP == 1'), indirect=['target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='lack of multi-device runners') # TODO: IDFCI-10702 def test_rtcio_deepsleep(dut: tuple[IdfDut, IdfDut]) -> None: wakee = dut[0] waker = dut[1] @@ -144,7 +146,8 @@ def test_rtcio_deepsleep(dut: tuple[IdfDut, IdfDut]) -> None: @pytest.mark.parametrize('count', [2], indirect=True) @pytest.mark.parametrize('config', TEST_CONFIGS, indirect=True) @idf_parametrize('target', ['supported_targets'], indirect=['target']) -@pytest.mark.temp_skip_ci(targets=['esp32s31'], reason='s31 bringup on this module is not done') +@pytest.mark.temp_skip_ci(targets=['esp32s31'], reason='bringup on this module is not done') +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='lack of multi-device runners') # TODO: IDFCI-10702 def test_gpio_wakeup_enable_lightsleep(dut: tuple[IdfDut, IdfDut]) -> None: wakee = dut[0] waker = dut[1] diff --git a/components/esp_lcd/test_apps/parlio_lcd/pytest_parlio_lcd.py b/components/esp_lcd/test_apps/parlio_lcd/pytest_parlio_lcd.py index 4016ce06540..3fec96dedab 100644 --- a/components/esp_lcd/test_apps/parlio_lcd/pytest_parlio_lcd.py +++ b/components/esp_lcd/test_apps/parlio_lcd/pytest_parlio_lcd.py @@ -3,6 +3,7 @@ import pytest from pytest_embedded import Dut from pytest_embedded_idf.utils import idf_parametrize +from pytest_embedded_idf.utils import soc_filtered_targets @pytest.mark.generic @@ -13,7 +14,7 @@ from pytest_embedded_idf.utils import idf_parametrize ], indirect=True, ) -@idf_parametrize('target', ['esp32p4', 'esp32h2', 'esp32c5'], indirect=['target']) +@idf_parametrize('target', soc_filtered_targets('SOC_PARLIO_LCD_SUPPORTED == 1'), indirect=['target']) def test_parlio_lcd(dut: Dut) -> None: dut.run_all_single_board_cases() @@ -26,7 +27,11 @@ def test_parlio_lcd(dut: Dut) -> None: ], indirect=True, ) -@idf_parametrize('target', ['esp32p4', 'esp32h2', 'esp32c5'], indirect=['target']) +@idf_parametrize( + 'target', + soc_filtered_targets('SOC_PARLIO_LCD_SUPPORTED == 1 and SOC_FLASH_ENC_SUPPORTED == 1'), + indirect=['target'], +) def test_parlio_lcd_with_virt_flash_enc(dut: Dut) -> None: print(' - Erase flash') dut.serial.erase_flash() diff --git a/components/esp_pm/test_apps/esp_pm/pytest_esp_pm.py b/components/esp_pm/test_apps/esp_pm/pytest_esp_pm.py index 51a0b28ef1e..9b86e2325e3 100644 --- a/components/esp_pm/test_apps/esp_pm/pytest_esp_pm.py +++ b/components/esp_pm/test_apps/esp_pm/pytest_esp_pm.py @@ -17,6 +17,7 @@ from pytest_embedded_idf.utils import idf_parametrize indirect=True, ) @idf_parametrize('target', ['supported_targets'], indirect=['target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='bringup on this module is not done') def test_esp_pm(dut: Dut) -> None: dut.run_all_single_board_cases() diff --git a/components/esp_rom/test_apps/rom_tests/pytest_esp_rom.py b/components/esp_rom/test_apps/rom_tests/pytest_esp_rom.py index 36b9cc7e25e..e3648eb0dc2 100644 --- a/components/esp_rom/test_apps/rom_tests/pytest_esp_rom.py +++ b/components/esp_rom/test_apps/rom_tests/pytest_esp_rom.py @@ -8,7 +8,7 @@ from pytest_embedded_idf.utils import idf_parametrize @pytest.mark.generic @idf_parametrize( 'target', - ['esp32c3', 'esp32s2', 'esp32s3', 'esp32c5', 'esp32c6', 'esp32c61', 'esp32h2', 'esp32p4', 'esp32s31'], + ['esp32c3', 'esp32s2', 'esp32s3', 'esp32c5', 'esp32c6', 'esp32c61', 'esp32h2', 'esp32p4', 'esp32s31', 'esp32h4'], indirect=['target'], ) def test_esp_rom(dut: Dut) -> None: diff --git a/components/esp_security/test_apps/crypto_drivers/pytest_crypto_drivers.py b/components/esp_security/test_apps/crypto_drivers/pytest_crypto_drivers.py index 8e697da9af4..dc017b4f32d 100644 --- a/components/esp_security/test_apps/crypto_drivers/pytest_crypto_drivers.py +++ b/components/esp_security/test_apps/crypto_drivers/pytest_crypto_drivers.py @@ -7,7 +7,9 @@ from pytest_embedded_idf.utils import idf_parametrize @pytest.mark.generic @idf_parametrize( - 'target', ['esp32s2', 'esp32s3', 'esp32c3', 'esp32c6', 'esp32h2', 'esp32p4', 'esp32c5'], indirect=['target'] + 'target', + ['esp32s2', 'esp32s3', 'esp32c3', 'esp32c6', 'esp32h2', 'esp32h4', 'esp32p4', 'esp32c5'], + indirect=['target'], ) def test_crypto_drivers(dut: Dut) -> None: dut.run_all_single_board_cases(timeout=180) diff --git a/components/esp_stdio/test_apps/stdio/pytest_esp_stdio_tests.py b/components/esp_stdio/test_apps/stdio/pytest_esp_stdio_tests.py index 9093e3cb0cf..953deadccbd 100644 --- a/components/esp_stdio/test_apps/stdio/pytest_esp_stdio_tests.py +++ b/components/esp_stdio/test_apps/stdio/pytest_esp_stdio_tests.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2024-2025 Espressif Systems (Shanghai) CO LTD +# SPDX-FileCopyrightText: 2024-2026 Espressif Systems (Shanghai) CO LTD # SPDX-License-Identifier: CC0-1.0 import pexpect import pytest @@ -31,6 +31,7 @@ def test_esp_system_stdio_no_output_uart(dut: Dut) -> None: @idf_parametrize('port', ['/dev/serial_ports/ttyACM-esp32'], indirect=['port']) @idf_parametrize('target', soc_filtered_targets('SOC_USB_SERIAL_JTAG_SUPPORTED == 1'), indirect=['target']) @pytest.mark.temp_skip_ci(targets=['esp32p4'], reason='p4 rev3 migration') +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='lack of runner # TODO: IDFCI-10703') def test_esp_system_stdio_only_serial_jtag(dut: Dut) -> None: dut.expect('2nd stage bootloader') dut.expect('Hello World') @@ -46,6 +47,7 @@ def test_esp_system_stdio_only_serial_jtag(dut: Dut) -> None: @idf_parametrize('port', ['/dev/serial_ports/ttyACM-esp32'], indirect=['port']) @idf_parametrize('target', soc_filtered_targets('SOC_USB_SERIAL_JTAG_SUPPORTED == 1'), indirect=['target']) @pytest.mark.temp_skip_ci(targets=['esp32p4'], reason='p4 rev3 migration') +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='lack of runner # TODO: IDFCI-10703') def test_esp_system_stdio_only_serial_jtag_no_vfs(dut: Dut) -> None: dut.expect('2nd stage bootloader') dut.expect('Hello World') @@ -57,6 +59,7 @@ def test_esp_system_stdio_only_serial_jtag_no_vfs(dut: Dut) -> None: @idf_parametrize('port', ['/dev/serial_ports/ttyACM-esp32'], indirect=['port']) @idf_parametrize('target', soc_filtered_targets('SOC_USB_SERIAL_JTAG_SUPPORTED == 1'), indirect=['target']) @pytest.mark.temp_skip_ci(targets=['esp32p4'], reason='p4 rev3 migration') +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='lack of runner # TODO: IDFCI-10703') def test_esp_system_stdio_secondary_serial_jtag(dut: Dut) -> None: dut.expect('2nd stage bootloader') dut.expect('Hello World') diff --git a/components/esp_system/test_apps/.build-test-rules.yml b/components/esp_system/test_apps/.build-test-rules.yml index 269ab7f173a..44abeef257c 100644 --- a/components/esp_system/test_apps/.build-test-rules.yml +++ b/components/esp_system/test_apps/.build-test-rules.yml @@ -10,6 +10,10 @@ components/esp_system/test_apps/esp_system_unity_tests: - if: (CONFIG_NAME == "psram" and SOC_SPIRAM_SUPPORTED != 1) - if: (CONFIG_NAME == "psram_with_pd_top" and (SOC_SPIRAM_SUPPORTED != 1 or SOC_PM_SUPPORT_TOP_PD != 1)) - if: (CONFIG_NAME == "pd_vddsdio" and (SOC_LIGHT_SLEEP_SUPPORTED != 1)) + disable_test: + - if: IDF_TARGET in ["esp32h4"] + temporary: true + reason: cannot pass # TODO: IDF-15604 components/esp_system/test_apps/linux_apis: enable: diff --git a/components/esp_system/test_apps/esp_system_unity_tests/pytest_esp_system_unity_tests.py b/components/esp_system/test_apps/esp_system_unity_tests/pytest_esp_system_unity_tests.py index 6d73284b552..0ac9b0c892f 100644 --- a/components/esp_system/test_apps/esp_system_unity_tests/pytest_esp_system_unity_tests.py +++ b/components/esp_system/test_apps/esp_system_unity_tests/pytest_esp_system_unity_tests.py @@ -28,6 +28,7 @@ from pytest_embedded_idf.utils import soc_filtered_targets ], indirect=['config', 'target'], ) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15604 def test_esp_system(dut: Dut) -> None: # esp32p4 32MB PSRAM initialize in startup takes more than 30 sec dut.run_all_single_board_cases(timeout=60) @@ -87,6 +88,7 @@ def esp_reset_and_wait_ready_esp32c5_rev1(dut: Dut) -> None: [target for target in soc_filtered_targets('SOC_LIGHT_SLEEP_SUPPORTED == 1')], indirect=['target'], ) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15604 def test_sleep_uart_handling(dut: Dut) -> None: """Test UART handling modes during light sleep.""" # Test FLUSH mode output @@ -130,6 +132,7 @@ def test_sleep_uart_handling(dut: Dut) -> None: [target for target in soc_filtered_targets('SOC_CPU_LOCKUP_DEBUG_SUPPORTED == 1')], indirect=['target'], ) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15604 def test_cpu_lockup_trap_chain(dut: Dut) -> None: """Trigger a PRO CPU lockup and verify the lockup output.""" esp_reset_and_wait_ready(dut) @@ -160,6 +163,7 @@ def test_cpu_lockup_trap_chain(dut: Dut) -> None: @pytest.mark.generic @idf_parametrize('config', ['default'], indirect=['config']) @idf_parametrize('target', ['supported_targets'], indirect=['target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15604 def test_stack_smash_protection(dut: Dut) -> None: dut.expect_exact('Press ENTER to see the list of tests') dut.write('"stack smashing protection"') diff --git a/components/esp_timer/test_apps/.build-test-rules.yml b/components/esp_timer/test_apps/.build-test-rules.yml index 131939a2258..deac28d08f2 100644 --- a/components/esp_timer/test_apps/.build-test-rules.yml +++ b/components/esp_timer/test_apps/.build-test-rules.yml @@ -1,6 +1,10 @@ # Documentation: .gitlab/ci/README.md#manifest-file-to-control-the-buildtest-apps components/esp_timer/test_apps: + disable_test: + - if: IDF_TARGET == "esp32h4" + temporary: true + reason: cannot pass # TODO: IDF-15605 depends_components: - esp_timer - esp_hal_timg diff --git a/components/esp_timer/test_apps/pytest_esp_timer_ut.py b/components/esp_timer/test_apps/pytest_esp_timer_ut.py index 1c3c991fbe0..7137fad4799 100644 --- a/components/esp_timer/test_apps/pytest_esp_timer_ut.py +++ b/components/esp_timer/test_apps/pytest_esp_timer_ut.py @@ -6,6 +6,7 @@ from pytest_embedded_idf.utils import idf_parametrize @pytest.mark.generic +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15605 @idf_parametrize( 'config,target', [ diff --git a/components/freertos/test_apps/.build-test-rules.yml b/components/freertos/test_apps/.build-test-rules.yml index e4beec33e34..c15dabd1a1b 100644 --- a/components/freertos/test_apps/.build-test-rules.yml +++ b/components/freertos/test_apps/.build-test-rules.yml @@ -22,6 +22,10 @@ components/freertos/test_apps/freertos: temporary: true reason: target(s) not supported yet - if: CONFIG_NAME == "psram" and SOC_SPIRAM_SUPPORTED != 1 + disable_test: + - if: IDF_TARGET in ["esp32h4"] + temporary: true + reason: cannot pass # TODO: IDF-15606 depends_components: - freertos - esp_system # trigger on changes to idle / tick hooks, wdt, entry point to freertos code diff --git a/components/freertos/test_apps/freertos/pytest_freertos.py b/components/freertos/test_apps/freertos/pytest_freertos.py index fd57c30a8c9..a1548b819ff 100644 --- a/components/freertos/test_apps/freertos/pytest_freertos.py +++ b/components/freertos/test_apps/freertos/pytest_freertos.py @@ -44,6 +44,7 @@ from pytest_embedded_idf.utils import idf_parametrize ], indirect=['config', 'target'], ) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15606 def test_freertos(dut: Dut) -> None: dut.run_all_single_board_cases() diff --git a/components/mbedtls/test_apps/pytest_mbedtls_ut.py b/components/mbedtls/test_apps/pytest_mbedtls_ut.py index 78392bb6014..f4fb14a7d48 100644 --- a/components/mbedtls/test_apps/pytest_mbedtls_ut.py +++ b/components/mbedtls/test_apps/pytest_mbedtls_ut.py @@ -7,6 +7,7 @@ from pytest_embedded_idf.utils import soc_filtered_targets @pytest.mark.generic +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='can not pass') # TODO: IDF-15675 @idf_parametrize('target', ['supported_targets'], indirect=['target']) def test_mbedtls(dut: Dut) -> None: dut.run_all_single_board_cases() diff --git a/components/protocomm/test_apps/.build-test-rules.yml b/components/protocomm/test_apps/.build-test-rules.yml new file mode 100644 index 00000000000..b73c47f1eeb --- /dev/null +++ b/components/protocomm/test_apps/.build-test-rules.yml @@ -0,0 +1,9 @@ +# Documentation: .gitlab/ci/README.md#manifest-file-to-control-the-buildtest-apps + +components/protocomm/test_apps: + depends_components: + - protocomm + disable_test: + - if: IDF_TARGET in ["esp32h4"] + temporary: true + reason: cannot pass # TODO: IDF-15614 diff --git a/components/protocomm/test_apps/pytest_protocomm_ut.py b/components/protocomm/test_apps/pytest_protocomm_ut.py index 7d741121b38..b1ac186228a 100644 --- a/components/protocomm/test_apps/pytest_protocomm_ut.py +++ b/components/protocomm/test_apps/pytest_protocomm_ut.py @@ -7,5 +7,6 @@ from pytest_embedded_idf.utils import idf_parametrize @pytest.mark.generic @idf_parametrize('target', ['supported_targets'], indirect=['target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15614 def test_protocomm(dut: Dut) -> None: dut.run_all_single_board_cases() diff --git a/components/pthread/test_apps/pthread_unity_tests/pytest_pthread_unity_tests.py b/components/pthread/test_apps/pthread_unity_tests/pytest_pthread_unity_tests.py index da3a14f0ebc..f499d7c76ea 100644 --- a/components/pthread/test_apps/pthread_unity_tests/pytest_pthread_unity_tests.py +++ b/components/pthread/test_apps/pthread_unity_tests/pytest_pthread_unity_tests.py @@ -14,6 +14,7 @@ from pytest_embedded_idf.utils import idf_parametrize indirect=True, ) @idf_parametrize('target', ['supported_targets'], indirect=['target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='can not pass') # TODO: IDF-15638 def test_pthread(dut: Dut) -> None: dut.run_all_single_board_cases(group='!thread-specific', timeout=300) @@ -35,6 +36,7 @@ def test_pthread_single_core(dut: Dut) -> None: indirect=True, ) @idf_parametrize('target', ['supported_targets'], indirect=['target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='can not pass') # TODO: IDF-15638 def test_pthread_tls(dut: Dut) -> None: dut.run_all_single_board_cases(group='thread-specific', timeout=300) diff --git a/components/spi_flash/test_apps/.build-test-rules.yml b/components/spi_flash/test_apps/.build-test-rules.yml index 0da927d1d9c..99f2ee3a1e7 100644 --- a/components/spi_flash/test_apps/.build-test-rules.yml +++ b/components/spi_flash/test_apps/.build-test-rules.yml @@ -12,6 +12,10 @@ components/spi_flash/test_apps/esp_flash: - esp_driver_spi - esptool_py # Some flash related kconfigs are listed here. - esp_hal_mspi + disable_test: + - if: IDF_TARGET in ["esp32h4"] + temporary: true + reason: cannot pass # TODO: IDF-15616 components/spi_flash/test_apps/esp_flash_blockdev: disable_test: diff --git a/components/spi_flash/test_apps/esp_flash/pytest_esp_flash.py b/components/spi_flash/test_apps/esp_flash/pytest_esp_flash.py index 75a682fbe6e..d36bfc684a7 100644 --- a/components/spi_flash/test_apps/esp_flash/pytest_esp_flash.py +++ b/components/spi_flash/test_apps/esp_flash/pytest_esp_flash.py @@ -17,6 +17,7 @@ from pytest_embedded_idf.utils import idf_parametrize indirect=True, ) @idf_parametrize('target', ['supported_targets'], indirect=['target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15616 def test_esp_flash(dut: Dut) -> None: dut.run_all_single_board_cases(group='esp_flash') diff --git a/examples/bluetooth/.build-test-rules.yml b/examples/bluetooth/.build-test-rules.yml index a5eeb59bdf5..42be6c88a6e 100644 --- a/examples/bluetooth/.build-test-rules.yml +++ b/examples/bluetooth/.build-test-rules.yml @@ -23,6 +23,9 @@ examples/bluetooth/bluedroid/ble: - if: IDF_TARGET == "esp32s31" temporary: true reason: lack of runners + - if: IDF_TARGET == "esp32h4" # TODO: IDFCI-10702 + temporary: true + reason: lack of runner depends_components+: - esp_console - esp_driver_gpio @@ -56,6 +59,9 @@ examples/bluetooth/bluedroid/ble/ble_throughput: - if: IDF_TARGET == "esp32s31" temporary: true reason: lack of runners + - if: IDF_TARGET == "esp32h4" # TODO: IDFCI-10702 + temporary: true + reason: lack of runner depends_components+: - esp_console - esp_driver_gpio @@ -72,6 +78,9 @@ examples/bluetooth/bluedroid/ble_50: - if: IDF_TARGET == "esp32s31" temporary: true reason: lack of runners + - if: IDF_TARGET == "esp32h4" # TODO: IDFCI-10702 + temporary: true + reason: lack of runner depends_components+: - esp_console - esp_driver_gpio @@ -384,6 +393,9 @@ examples/bluetooth/nimble/blecent: - if: IDF_TARGET == "esp32s31" temporary: true reason: lack of runners + - if: IDF_TARGET == "esp32h4" # TODO: IDFCI-10702 + temporary: true + reason: lack of runner depends_components+: - esp_coex - esp_pm @@ -430,6 +442,9 @@ examples/bluetooth/nimble/power_save: - if: IDF_TARGET == "esp32s31" temporary: true reason: lack of runners, and light sleep not supported yet + - if: IDF_TARGET == "esp32h4" # TODO: IDFCI-10702 + temporary: true + reason: lack of runner depends_components+: - esp_coex - esp_pm diff --git a/examples/bluetooth/bluedroid/ble/ble_throughput/pytest_ble_throughput_test.py b/examples/bluetooth/bluedroid/ble/ble_throughput/pytest_ble_throughput_test.py index b4f691d53cb..05994b0d759 100644 --- a/examples/bluetooth/bluedroid/ble/ble_throughput/pytest_ble_throughput_test.py +++ b/examples/bluetooth/bluedroid/ble/ble_throughput/pytest_ble_throughput_test.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2022-2025 Espressif Systems (Shanghai) CO LTD +# SPDX-FileCopyrightText: 2022-2026 Espressif Systems (Shanghai) CO LTD # SPDX-License-Identifier: CC0-1.0 import time from pathlib import Path @@ -11,6 +11,7 @@ CUR_DIR = Path(__file__).parent.resolve() # Case 1: gatt write throughput test(EXAMPLE_CI_ID = 2) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='lack of runner # TODO: IDFCI-11112') @pytest.mark.two_duts @pytest.mark.parametrize( 'count, app_path, config, erase_nvs', @@ -25,7 +26,9 @@ CUR_DIR = Path(__file__).parent.resolve() indirect=True, ) @idf_parametrize( - 'target', ['esp32', 'esp32c3', 'esp32c6', 'esp32c61', 'esp32c5', 'esp32h2', 'esp32s3'], indirect=['target'] + 'target', + ['esp32', 'esp32c3', 'esp32c6', 'esp32c61', 'esp32c5', 'esp32h2', 'esp32s3', 'esp32h4'], + indirect=['target'], ) @pytest.mark.temp_skip_ci(targets=['esp32s31'], reason='lack of runner') def test_gatt_write_throughput(app_path: str, dut: tuple[IdfDut, IdfDut]) -> None: @@ -100,6 +103,7 @@ def test_c2_26mhz_xtal_write_throughput(app_path: str, dut: tuple[IdfDut, IdfDut # Case 3: gatt notify throughput test(EXAMPLE_CI_ID = 1) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='lack of runner # TODO: IDFCI-11112') @pytest.mark.two_duts @pytest.mark.parametrize( 'count, app_path, config, erase_nvs', @@ -114,7 +118,9 @@ def test_c2_26mhz_xtal_write_throughput(app_path: str, dut: tuple[IdfDut, IdfDut indirect=True, ) @idf_parametrize( - 'target', ['esp32', 'esp32c3', 'esp32c6', 'esp32c61', 'esp32c5', 'esp32h2', 'esp32s3'], indirect=['target'] + 'target', + ['esp32', 'esp32c3', 'esp32c6', 'esp32c61', 'esp32c5', 'esp32h2', 'esp32s3', 'esp32h4'], + indirect=['target'], ) @pytest.mark.temp_skip_ci(targets=['esp32s31'], reason='lack of runner') def test_gatt_notify_throughput(app_path: str, dut: tuple[IdfDut, IdfDut]) -> None: diff --git a/examples/bluetooth/bluedroid/ble/pytest_ble_test.py b/examples/bluetooth/bluedroid/ble/pytest_ble_test.py index b4241b34dbd..36a632639b8 100644 --- a/examples/bluetooth/bluedroid/ble/pytest_ble_test.py +++ b/examples/bluetooth/bluedroid/ble/pytest_ble_test.py @@ -17,6 +17,7 @@ GATT_APP_PATH = f'{str(CUR_DIR / "gatt_server")}|{str(CUR_DIR / "gatt_client")}' GATT_CI_CONFIGS = ['name', 'smp_off|smp_off', 'min_bin|min_bin', 'log_off|log_off'] +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='lack of runner # TODO: IDFCI-11112') @pytest.mark.two_duts @pytest.mark.parametrize( 'count, app_path, config, erase_nvs', @@ -25,7 +26,7 @@ GATT_CI_CONFIGS = ['name', 'smp_off|smp_off', 'min_bin|min_bin', 'log_off|log_of ) @idf_parametrize( 'target', - ['esp32', 'esp32c3', 'esp32c6', 'esp32c5', 'esp32h2', 'esp32s3', 'esp32c61'], + ['esp32', 'esp32c3', 'esp32c6', 'esp32c5', 'esp32h2', 'esp32s3', 'esp32c61', 'esp32h4'], indirect=['target'], ) @pytest.mark.temp_skip_ci(targets=['esp32s31'], reason='lack of runner') @@ -115,6 +116,7 @@ GATT_SECURITY_APP_PATH = f'{str(CUR_DIR / "gatt_security_server")}|{str(CUR_DIR GATT_SECURITY_CI_CONFIGS = ['name', 'min_bin|min_bin', 'log_off|log_off'] +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='lack of runner # TODO: IDFCI-11112') @pytest.mark.two_duts @pytest.mark.parametrize( 'count, app_path, config, erase_nvs', @@ -123,7 +125,7 @@ GATT_SECURITY_CI_CONFIGS = ['name', 'min_bin|min_bin', 'log_off|log_off'] ) @idf_parametrize( 'target', - ['esp32', 'esp32c3', 'esp32c6', 'esp32c5', 'esp32h2', 'esp32s3', 'esp32c61'], + ['esp32', 'esp32c3', 'esp32c6', 'esp32c5', 'esp32h2', 'esp32s3', 'esp32c61', 'esp32h4'], indirect=['target'], ) @pytest.mark.temp_skip_ci(targets=['esp32s31'], reason='lack of runner') @@ -240,6 +242,7 @@ def test_c2_26mhz_xtal_gatt_security_func(app_path: str, dut: tuple[IdfDut, IdfD # Case 5: ble ibeacon test +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='lack of runner # TODO: IDFCI-11112') @pytest.mark.two_duts @pytest.mark.parametrize( 'count, app_path, config, erase_nvs', @@ -255,7 +258,7 @@ def test_c2_26mhz_xtal_gatt_security_func(app_path: str, dut: tuple[IdfDut, IdfD ) @idf_parametrize( 'target', - ['esp32', 'esp32c3', 'esp32c6', 'esp32c5', 'esp32h2', 'esp32s3', 'esp32c61'], + ['esp32', 'esp32c3', 'esp32c6', 'esp32c5', 'esp32h2', 'esp32s3', 'esp32c61', 'esp32h4'], indirect=['target'], ) @pytest.mark.temp_skip_ci(targets=['esp32s31'], reason='lack of runner') @@ -320,6 +323,7 @@ def test_c2_26mhz_ble_ibeacon_func(app_path: str, dut: tuple[IdfDut, IdfDut]) -> # Case 7: gatt client and gatt server config test # EXAMPLE_CI_ID=4 +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='lack of runner # TODO: IDFCI-11112') @pytest.mark.two_duts @pytest.mark.parametrize( 'count, app_path, config, erase_nvs', @@ -335,7 +339,7 @@ def test_c2_26mhz_ble_ibeacon_func(app_path: str, dut: tuple[IdfDut, IdfDut]) -> ) @idf_parametrize( 'target', - ['esp32', 'esp32c3', 'esp32c6', 'esp32c5', 'esp32h2', 'esp32s3', 'esp32c61'], + ['esp32', 'esp32c3', 'esp32c6', 'esp32c5', 'esp32h2', 'esp32s3', 'esp32c61', 'esp32h4'], indirect=['target'], ) @pytest.mark.temp_skip_ci(targets=['esp32s31'], reason='lack of runner') @@ -420,10 +424,13 @@ def test_c2_26mhz_xtal_gatt_config_func(app_path: str, dut: tuple[IdfDut, IdfDut # Case 9: BLE init deinit loop test +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='lack of runner # TODO: IDFCI-11112') @pytest.mark.generic @pytest.mark.parametrize('config, app_path', [('init_deinit', f'{str(CUR_DIR / "gatt_client")}')], indirect=True) @idf_parametrize( - 'target', ['esp32c6', 'esp32h2', 'esp32c3', 'esp32s3', 'esp32c5', 'esp32c61', 'esp32'], indirect=['target'] + 'target', + ['esp32c6', 'esp32h2', 'esp32c3', 'esp32s3', 'esp32c5', 'esp32c61', 'esp32', 'esp32h4'], + indirect=['target'], ) def test_bluedroid_host_init_deinit(dut: Dut) -> None: all_hp = [] diff --git a/examples/bluetooth/bluedroid/ble_50/pytest_ble50_test.py b/examples/bluetooth/bluedroid/ble_50/pytest_ble50_test.py index 7cb2b1de4db..b07e7ab1ca8 100644 --- a/examples/bluetooth/bluedroid/ble_50/pytest_ble50_test.py +++ b/examples/bluetooth/bluedroid/ble_50/pytest_ble50_test.py @@ -15,13 +15,16 @@ BLE50_SECURITY_APP_PATH = f'{str(CUR_DIR / "ble50_security_server")}|{str(CUR_DI BLE50_SECURITY_CI_CONFIGS = ['name'] +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='lack of runner # TODO: IDFCI-11112') @pytest.mark.two_duts @pytest.mark.parametrize( 'count, app_path, config, erase_nvs', [(2, BLE50_SECURITY_APP_PATH, c, 'y') for c in BLE50_SECURITY_CI_CONFIGS], indirect=True, ) -@idf_parametrize('target', ['esp32c3', 'esp32c6', 'esp32c5', 'esp32h2', 'esp32s3', 'esp32c61'], indirect=['target']) +@idf_parametrize( + 'target', ['esp32c3', 'esp32c6', 'esp32c5', 'esp32h2', 'esp32s3', 'esp32c61', 'esp32h4'], indirect=['target'] +) @pytest.mark.temp_skip_ci(targets=['esp32s31'], reason='lack of runner') def test_ble50_security_func(app_path: str, dut: tuple[IdfDut, IdfDut]) -> None: server = dut[0] @@ -95,6 +98,7 @@ def test_c2_26mhz_xtal_ble50_security_func(app_path: str, dut: tuple[IdfDut, Idf # Case 3: period_adv and period_sync test # EXAMPLE_CI_ID=8 +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='lack of runner # TODO: IDFCI-11112') @pytest.mark.two_duts @pytest.mark.parametrize( 'count, app_path, config, erase_nvs', @@ -108,7 +112,9 @@ def test_c2_26mhz_xtal_ble50_security_func(app_path: str, dut: tuple[IdfDut, Idf ], indirect=True, ) -@idf_parametrize('target', ['esp32c3', 'esp32c6', 'esp32c5', 'esp32h2', 'esp32s3', 'esp32c61'], indirect=['target']) +@idf_parametrize( + 'target', ['esp32c3', 'esp32c6', 'esp32c5', 'esp32h2', 'esp32s3', 'esp32c61', 'esp32h4'], indirect=['target'] +) @pytest.mark.temp_skip_ci(targets=['esp32s31'], reason='lack of runner') def test_period_adv_sync_func(app_path: str, dut: tuple[IdfDut, IdfDut]) -> None: adv_dut = dut[0] @@ -166,6 +172,7 @@ def test_c2_26mhz_xtal_period_adv_sync_func(app_path: str, dut: tuple[IdfDut, Id # Case 5: ble50 security client and ble50 security server config test # EXAMPLE_CI_ID=7 +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='lack of runner # TODO: IDFCI-11112') @pytest.mark.two_duts @pytest.mark.parametrize( 'count, app_path, config, erase_nvs', @@ -179,7 +186,9 @@ def test_c2_26mhz_xtal_period_adv_sync_func(app_path: str, dut: tuple[IdfDut, Id ], indirect=True, ) -@idf_parametrize('target', ['esp32c3', 'esp32c6', 'esp32c5', 'esp32h2', 'esp32s3', 'esp32c61'], indirect=['target']) +@idf_parametrize( + 'target', ['esp32c3', 'esp32c6', 'esp32c5', 'esp32h2', 'esp32s3', 'esp32c61', 'esp32h4'], indirect=['target'] +) @pytest.mark.temp_skip_ci(targets=['esp32s31'], reason='lack of runner') def test_ble50_security_config_func(app_path: str, dut: tuple[IdfDut, IdfDut]) -> None: server = dut[0] diff --git a/examples/bluetooth/nimble/pytest_nimble_test.py b/examples/bluetooth/nimble/pytest_nimble_test.py index 7672a98093f..c2144b7314b 100644 --- a/examples/bluetooth/nimble/pytest_nimble_test.py +++ b/examples/bluetooth/nimble/pytest_nimble_test.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2022-2025 Espressif Systems (Shanghai) CO LTD +# SPDX-FileCopyrightText: 2022-2026 Espressif Systems (Shanghai) CO LTD # SPDX-License-Identifier: CC0-1.0 from pathlib import Path @@ -11,6 +11,7 @@ CUR_DIR = Path(__file__).parent.resolve() # Case 1: BLE power save test +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='lack of runner # TODO: IDFCI-11112') @pytest.mark.two_duts @pytest.mark.parametrize( 'count, app_path', @@ -24,7 +25,7 @@ CUR_DIR = Path(__file__).parent.resolve() ) @idf_parametrize( 'target', - ['esp32c6', 'esp32h2', 'esp32c3', 'esp32s3', 'esp32c5', 'esp32c61', 'esp32'], + ['esp32c6', 'esp32h2', 'esp32c3', 'esp32s3', 'esp32c5', 'esp32c61', 'esp32', 'esp32h4'], indirect=['target'], ) @pytest.mark.temp_skip_ci(targets=['esp32s31'], reason='lack of runners') diff --git a/examples/peripherals/.build-test-rules.yml b/examples/peripherals/.build-test-rules.yml index e87a959b546..423e37d3508 100644 --- a/examples/peripherals/.build-test-rules.yml +++ b/examples/peripherals/.build-test-rules.yml @@ -241,6 +241,10 @@ examples/peripherals/i2s/i2s_codec/i2s_es7210_tdm: disable: - if: SOC_I2S_SUPPORTS_TDM != 1 or (SOC_I2C_SUPPORTED != 1 or SOC_GPSPI_SUPPORTED != 1) reason: rely on I2S TDM mode to receive audio, I2C to config es7210 and SPI to save audio to SD card + disable_test: + - if: IDF_TARGET in ["esp32h4"] + temporary: true + reason: cannot pass # TODO: IDF-15609 depends_components: - esp_driver_i2s - esp_driver_dma @@ -253,6 +257,10 @@ examples/peripherals/i2s/i2s_codec/i2s_es8311: disable: - if: (SOC_I2S_SUPPORTED != 1 or SOC_I2C_SUPPORTED != 1) reason: rely on I2S STD mode and I2C to config es7210 + disable_test: + - if: IDF_TARGET in ["esp32h4"] + temporary: true + reason: cannot pass # TODO: IDF-15609 depends_components: - esp_driver_dma - esp_driver_i2s @@ -387,6 +395,10 @@ examples/peripherals/lcd/tjpgd: examples/peripherals/ledc: disable: - if: SOC_LEDC_SUPPORTED != 1 + disable_test: + - if: IDF_TARGET in ["esp32h4"] + temporary: true + reason: cannot pass # TODO: IDF-15610 depends_components: - esp_driver_ledc - esp_hal_ledc @@ -751,7 +763,7 @@ examples/peripherals/twai/twai_network/twai_listen_only: disable: - if: SOC_TWAI_SUPPORTED != 1 disable_test: - - if: IDF_TARGET in ["esp32s31"] + - if: IDF_TARGET in ["esp32s31","esp32h4"] temporary: true reason: no runner depends_components: @@ -763,7 +775,7 @@ examples/peripherals/twai/twai_network/twai_sender: disable: - if: SOC_TWAI_SUPPORTED != 1 disable_test: - - if: IDF_TARGET in ["esp32s31"] + - if: IDF_TARGET in ["esp32s31","esp32h4"] temporary: true reason: no runner depends_components: @@ -774,6 +786,10 @@ examples/peripherals/twai/twai_network/twai_sender: examples/peripherals/twai/twai_utils: disable: - if: SOC_TWAI_SUPPORTED != 1 + disable_test: + - if: IDF_TARGET in ["esp32h4"] + temporary: true + reason: cannot pass # TODO: IDF-15618 depends_components: - esp_driver_twai - esp_hal_twai @@ -787,6 +803,9 @@ examples/peripherals/uart/uart_dma_ota: - if: IDF_TARGET in ["esp32s31"] temporary: true reason: Lack runners + - if: IDF_TARGET in ["esp32h4"] # TODO: IDFCI-10702 + temporary: true + reason: lack of runner depends_components: - esp_driver_uart - esp_driver_dma diff --git a/examples/peripherals/i2s/i2s_basic/i2s_pdm/pytest_i2s_pdm.py b/examples/peripherals/i2s/i2s_basic/i2s_pdm/pytest_i2s_pdm.py index 66db55ac98d..3433bceea95 100644 --- a/examples/peripherals/i2s/i2s_basic/i2s_pdm/pytest_i2s_pdm.py +++ b/examples/peripherals/i2s/i2s_basic/i2s_pdm/pytest_i2s_pdm.py @@ -13,7 +13,7 @@ from pytest_embedded_idf.utils import soc_filtered_targets soc_filtered_targets('SOC_I2S_SUPPORTS_PDM == 1'), indirect=['target'], ) -@pytest.mark.temp_skip_ci(targets=['esp32h21', 'esp32h4'], reason='lack of runners') +@pytest.mark.temp_skip_ci(targets=['esp32h21'], reason='lack of runners') def test_i2s_pdm_tx_example(dut: Dut) -> None: dut.expect(r'I2S PDM TX example start', timeout=5) dut.expect(r'---------------------------', timeout=5) diff --git a/examples/peripherals/i2s/i2s_basic/i2s_std/pytest_i2s_std.py b/examples/peripherals/i2s/i2s_basic/i2s_std/pytest_i2s_std.py index 92076291dc9..724ad80f0f1 100644 --- a/examples/peripherals/i2s/i2s_basic/i2s_std/pytest_i2s_std.py +++ b/examples/peripherals/i2s/i2s_basic/i2s_std/pytest_i2s_std.py @@ -12,7 +12,7 @@ from pytest_embedded_idf.utils import soc_filtered_targets soc_filtered_targets('SOC_I2S_SUPPORTED == 1'), indirect=['target'], ) -@pytest.mark.temp_skip_ci(targets=['esp32h21', 'esp32h4'], reason='lack of runners') +@pytest.mark.temp_skip_ci(targets=['esp32h21'], reason='lack of runners') def test_i2s_basic_example(dut: Dut) -> None: dut.expect(r'i2s_common: tx channel is registered on I2S0 successfully', timeout=5) dut.expect(r'i2s_common: rx channel is registered on I2S0 successfully', timeout=5) diff --git a/examples/peripherals/i2s/i2s_basic/i2s_tdm/pytest_i2s_tdm.py b/examples/peripherals/i2s/i2s_basic/i2s_tdm/pytest_i2s_tdm.py index 98e796a9f66..b146677861b 100644 --- a/examples/peripherals/i2s/i2s_basic/i2s_tdm/pytest_i2s_tdm.py +++ b/examples/peripherals/i2s/i2s_basic/i2s_tdm/pytest_i2s_tdm.py @@ -12,7 +12,7 @@ from pytest_embedded_idf.utils import soc_filtered_targets soc_filtered_targets('SOC_I2S_SUPPORTS_TDM == 1'), indirect=['target'], ) -@pytest.mark.temp_skip_ci(targets=['esp32h21', 'esp32h4'], reason='lack of runners') +@pytest.mark.temp_skip_ci(targets=['esp32h21'], reason='lack of runners') def test_i2s_tdm_example(dut: Dut) -> None: dut.expect(r'i2s_common: tx channel is registered on I2S0 successfully', timeout=5) dut.expect(r'i2s_common: rx channel is registered on I2S0 successfully', timeout=5) diff --git a/examples/peripherals/i2s/i2s_codec/i2s_es7210_tdm/pytest_i2s_es7210_tdm.py b/examples/peripherals/i2s/i2s_codec/i2s_es7210_tdm/pytest_i2s_es7210_tdm.py index a2fd0ac5b7e..127c82fbf6a 100644 --- a/examples/peripherals/i2s/i2s_codec/i2s_es7210_tdm/pytest_i2s_es7210_tdm.py +++ b/examples/peripherals/i2s/i2s_codec/i2s_es7210_tdm/pytest_i2s_es7210_tdm.py @@ -8,7 +8,8 @@ from pytest_embedded_idf.utils import soc_filtered_targets @pytest.mark.generic @idf_parametrize('target', soc_filtered_targets('SOC_I2S_SUPPORTS_TDM == 1'), indirect=['target']) -@pytest.mark.temp_skip_ci(targets=['esp32h21', 'esp32h4'], reason='lack of runners') +@pytest.mark.temp_skip_ci(targets=['esp32h21'], reason='lack of runners') +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15609 def test_i2s_es7210_tdm_example(dut: Dut) -> None: dut.expect_exact('example: Create I2S receive channel') dut.expect_exact('example: Configure I2S receive channel to TDM mode') diff --git a/examples/peripherals/i2s/i2s_codec/i2s_es8311/pytest_i2s_es8311.py b/examples/peripherals/i2s/i2s_codec/i2s_es8311/pytest_i2s_es8311.py index ee50455b6cc..0f89fbd92ff 100644 --- a/examples/peripherals/i2s/i2s_codec/i2s_es8311/pytest_i2s_es8311.py +++ b/examples/peripherals/i2s/i2s_codec/i2s_es8311/pytest_i2s_es8311.py @@ -12,7 +12,8 @@ from pytest_embedded_idf.utils import soc_filtered_targets soc_filtered_targets('SOC_I2S_SUPPORTED == 1'), indirect=['target'], ) -@pytest.mark.temp_skip_ci(targets=['esp32h21', 'esp32h4'], reason='lack of runners') +@pytest.mark.temp_skip_ci(targets=['esp32h21'], reason='lack of runners') +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15609 def test_i2s_es8311_example_generic(dut: Dut) -> None: dut.expect('i2s es8311 codec example start') dut.expect('-----------------------------') diff --git a/examples/peripherals/ledc/ledc_fade/pytest_ledc_fade.py b/examples/peripherals/ledc/ledc_fade/pytest_ledc_fade.py index ff56ec35933..245b7d58c54 100644 --- a/examples/peripherals/ledc/ledc_fade/pytest_ledc_fade.py +++ b/examples/peripherals/ledc/ledc_fade/pytest_ledc_fade.py @@ -8,6 +8,7 @@ from pytest_embedded_idf.utils import soc_filtered_targets @pytest.mark.generic @idf_parametrize('target', soc_filtered_targets('SOC_LEDC_SUPPORTED == 1'), indirect=['target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15610 def test_ledc_fade_example(dut: IdfDut) -> None: # repeat to test at least two rounds of fade dut.expect_exact('1. LEDC fade up to duty = 4000') diff --git a/examples/peripherals/mcpwm/mcpwm_capture_hc_sr04/pytest_hc_sr04.py b/examples/peripherals/mcpwm/mcpwm_capture_hc_sr04/pytest_hc_sr04.py index ee879543f94..97b0b88ac91 100644 --- a/examples/peripherals/mcpwm/mcpwm_capture_hc_sr04/pytest_hc_sr04.py +++ b/examples/peripherals/mcpwm/mcpwm_capture_hc_sr04/pytest_hc_sr04.py @@ -1,13 +1,16 @@ -# SPDX-FileCopyrightText: 2021-2025 Espressif Systems (Shanghai) CO LTD +# SPDX-FileCopyrightText: 2021-2026 Espressif Systems (Shanghai) CO LTD # SPDX-License-Identifier: CC0-1.0 import pytest from pytest_embedded import Dut from pytest_embedded_idf.utils import idf_parametrize +from pytest_embedded_idf.utils import soc_filtered_targets @pytest.mark.generic @idf_parametrize( - 'target', ['esp32', 'esp32s3', 'esp32c6', 'esp32c5', 'esp32h2', 'esp32p4', 'esp32s31'], indirect=['target'] + 'target', + soc_filtered_targets('SOC_MCPWM_SUPPORTED == 1'), + indirect=['target'], ) def test_hc_sr04_example(dut: Dut) -> None: dut.expect_exact('example: Install capture timer') diff --git a/examples/peripherals/mcpwm/mcpwm_servo_control/pytest_servo_mg996r.py b/examples/peripherals/mcpwm/mcpwm_servo_control/pytest_servo_mg996r.py index 1da97dbfed2..eb88c4ede8a 100644 --- a/examples/peripherals/mcpwm/mcpwm_servo_control/pytest_servo_mg996r.py +++ b/examples/peripherals/mcpwm/mcpwm_servo_control/pytest_servo_mg996r.py @@ -3,11 +3,14 @@ import pytest from pytest_embedded import Dut from pytest_embedded_idf.utils import idf_parametrize +from pytest_embedded_idf.utils import soc_filtered_targets @pytest.mark.generic @idf_parametrize( - 'target', ['esp32', 'esp32s3', 'esp32c5', 'esp32c6', 'esp32h2', 'esp32p4', 'esp32s31'], indirect=['target'] + 'target', + soc_filtered_targets('SOC_MCPWM_SUPPORTED == 1'), + indirect=['target'], ) def test_servo_mg996r_example(dut: Dut) -> None: dut.expect_exact('example: Create timer and operator') diff --git a/examples/peripherals/mcpwm/mcpwm_sync/pytest_mcpwm_sync.py b/examples/peripherals/mcpwm/mcpwm_sync/pytest_mcpwm_sync.py index ae63848e797..f9eab9bb0dc 100644 --- a/examples/peripherals/mcpwm/mcpwm_sync/pytest_mcpwm_sync.py +++ b/examples/peripherals/mcpwm/mcpwm_sync/pytest_mcpwm_sync.py @@ -11,9 +11,13 @@ from pytest_embedded_idf.utils import idf_parametrize @idf_parametrize( 'config,target', itertools.chain( - itertools.product(['gpio'], ['esp32', 'esp32s3', 'esp32c5', 'esp32c6', 'esp32h2', 'esp32p4', 'esp32s31']), - itertools.product(['tez'], ['esp32', 'esp32s3', 'esp32c5', 'esp32c6', 'esp32h2', 'esp32p4', 'esp32s31']), - itertools.product(['soft'], ['esp32s3', 'esp32c5', 'esp32c6', 'esp32h2', 'esp32p4', 'esp32s31']), + itertools.product( + ['gpio'], ['esp32', 'esp32s3', 'esp32c5', 'esp32c6', 'esp32h2', 'esp32p4', 'esp32s31', 'esp32h4'] + ), + itertools.product( + ['tez'], ['esp32', 'esp32s3', 'esp32c5', 'esp32c6', 'esp32h2', 'esp32p4', 'esp32s31', 'esp32h4'] + ), + itertools.product(['soft'], ['esp32s3', 'esp32c5', 'esp32c6', 'esp32h2', 'esp32p4', 'esp32s31', 'esp32h4']), ), indirect=['config', 'target'], ) diff --git a/examples/peripherals/pcnt/rotary_encoder/pytest_rotary_encoder.py b/examples/peripherals/pcnt/rotary_encoder/pytest_rotary_encoder.py index d2eafc9a850..0ffcb2007e9 100644 --- a/examples/peripherals/pcnt/rotary_encoder/pytest_rotary_encoder.py +++ b/examples/peripherals/pcnt/rotary_encoder/pytest_rotary_encoder.py @@ -8,7 +8,6 @@ from pytest_embedded_idf.utils import soc_filtered_targets @pytest.mark.generic @idf_parametrize('target', soc_filtered_targets('SOC_PCNT_SUPPORTED == 1'), indirect=['target']) -@pytest.mark.temp_skip_ci(targets=['esp32h21', 'esp32h4'], reason='lack of runners') def test_rotary_encoder(dut: Dut) -> None: dut.expect_exact('install pcnt unit') dut.expect_exact('set glitch filter') diff --git a/examples/peripherals/rmt/dshot_esc/pytest_dshot_esc.py b/examples/peripherals/rmt/dshot_esc/pytest_dshot_esc.py index 88766f15f98..0cbe26804ba 100644 --- a/examples/peripherals/rmt/dshot_esc/pytest_dshot_esc.py +++ b/examples/peripherals/rmt/dshot_esc/pytest_dshot_esc.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2021-2025 Espressif Systems (Shanghai) CO LTD +# SPDX-FileCopyrightText: 2021-2026 Espressif Systems (Shanghai) CO LTD # SPDX-License-Identifier: CC0-1.0 import pytest from pytest_embedded import Dut diff --git a/examples/peripherals/rmt/led_strip/pytest_led_strip.py b/examples/peripherals/rmt/led_strip/pytest_led_strip.py index dd26d2cde4c..271dedd8725 100644 --- a/examples/peripherals/rmt/led_strip/pytest_led_strip.py +++ b/examples/peripherals/rmt/led_strip/pytest_led_strip.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2021-2025 Espressif Systems (Shanghai) CO LTD +# SPDX-FileCopyrightText: 2021-2026 Espressif Systems (Shanghai) CO LTD # SPDX-License-Identifier: CC0-1.0 import pytest from pytest_embedded import Dut diff --git a/examples/peripherals/rmt/musical_buzzer/pytest_musical_buzzer.py b/examples/peripherals/rmt/musical_buzzer/pytest_musical_buzzer.py index 0037f83530f..af58ce1e18a 100644 --- a/examples/peripherals/rmt/musical_buzzer/pytest_musical_buzzer.py +++ b/examples/peripherals/rmt/musical_buzzer/pytest_musical_buzzer.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2021-2025 Espressif Systems (Shanghai) CO LTD +# SPDX-FileCopyrightText: 2021-2026 Espressif Systems (Shanghai) CO LTD # SPDX-License-Identifier: CC0-1.0 import pytest from pytest_embedded import Dut diff --git a/examples/peripherals/rmt/onewire/pytest_onewire.py b/examples/peripherals/rmt/onewire/pytest_onewire.py index f6d3dd223a5..d5c86c395d4 100644 --- a/examples/peripherals/rmt/onewire/pytest_onewire.py +++ b/examples/peripherals/rmt/onewire/pytest_onewire.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2022-2025 Espressif Systems (Shanghai) CO LTD +# SPDX-FileCopyrightText: 2022-2026 Espressif Systems (Shanghai) CO LTD # SPDX-License-Identifier: Unlicense OR CC0-1.0 import pytest from pytest_embedded import Dut diff --git a/examples/peripherals/rmt/stepper_motor/pytest_stepper_motor.py b/examples/peripherals/rmt/stepper_motor/pytest_stepper_motor.py index f5985cf573e..9d291932a3e 100644 --- a/examples/peripherals/rmt/stepper_motor/pytest_stepper_motor.py +++ b/examples/peripherals/rmt/stepper_motor/pytest_stepper_motor.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2021-2025 Espressif Systems (Shanghai) CO LTD +# SPDX-FileCopyrightText: 2021-2026 Espressif Systems (Shanghai) CO LTD # SPDX-License-Identifier: CC0-1.0 import pytest from pytest_embedded import Dut diff --git a/examples/peripherals/sigma_delta/sdm_dac/pytest_sdm_dac_example.py b/examples/peripherals/sigma_delta/sdm_dac/pytest_sdm_dac_example.py index 6e82772027b..f20d9eeabf8 100644 --- a/examples/peripherals/sigma_delta/sdm_dac/pytest_sdm_dac_example.py +++ b/examples/peripherals/sigma_delta/sdm_dac/pytest_sdm_dac_example.py @@ -1,14 +1,15 @@ -# SPDX-FileCopyrightText: 2021-2025 Espressif Systems (Shanghai) CO LTD +# SPDX-FileCopyrightText: 2021-2026 Espressif Systems (Shanghai) CO LTD # SPDX-License-Identifier: CC0-1.0 import pytest from pytest_embedded import Dut from pytest_embedded_idf.utils import idf_parametrize +from pytest_embedded_idf.utils import soc_filtered_targets @pytest.mark.generic @idf_parametrize( 'target', - ['esp32', 'esp32s2', 'esp32s3', 'esp32c3', 'esp32c5', 'esp32c6', 'esp32h2', 'esp32p4', 'esp32s31'], + soc_filtered_targets('SOC_SDM_SUPPORTED == 1'), indirect=['target'], ) def test_sdm_dac_example(dut: Dut) -> None: diff --git a/examples/peripherals/sigma_delta/sdm_led/pytest_sdm_led_example.py b/examples/peripherals/sigma_delta/sdm_led/pytest_sdm_led_example.py index 22aed8522ed..fed5e563a4d 100644 --- a/examples/peripherals/sigma_delta/sdm_led/pytest_sdm_led_example.py +++ b/examples/peripherals/sigma_delta/sdm_led/pytest_sdm_led_example.py @@ -1,14 +1,15 @@ -# SPDX-FileCopyrightText: 2021-2025 Espressif Systems (Shanghai) CO LTD +# SPDX-FileCopyrightText: 2021-2026 Espressif Systems (Shanghai) CO LTD # SPDX-License-Identifier: CC0-1.0 import pytest from pytest_embedded import Dut from pytest_embedded_idf.utils import idf_parametrize +from pytest_embedded_idf.utils import soc_filtered_targets @pytest.mark.generic @idf_parametrize( 'target', - ['esp32', 'esp32s2', 'esp32s3', 'esp32c3', 'esp32c5', 'esp32c6', 'esp32h2', 'esp32p4', 'esp32s31'], + soc_filtered_targets('SOC_SDM_SUPPORTED == 1'), indirect=['target'], ) def test_sdm_led_example(dut: Dut) -> None: diff --git a/examples/peripherals/temperature_sensor/temp_sensor/pytest_temp_sensor_example.py b/examples/peripherals/temperature_sensor/temp_sensor/pytest_temp_sensor_example.py index df1727e3f46..08a7c45f724 100644 --- a/examples/peripherals/temperature_sensor/temp_sensor/pytest_temp_sensor_example.py +++ b/examples/peripherals/temperature_sensor/temp_sensor/pytest_temp_sensor_example.py @@ -1,14 +1,15 @@ -# SPDX-FileCopyrightText: 2022-2025 Espressif Systems (Shanghai) CO LTD +# SPDX-FileCopyrightText: 2022-2026 Espressif Systems (Shanghai) CO LTD # SPDX-License-Identifier: CC0-1.0 import pytest from pytest_embedded.dut import Dut from pytest_embedded_idf.utils import idf_parametrize +from pytest_embedded_idf.utils import soc_filtered_targets @pytest.mark.generic @idf_parametrize( 'target', - ['esp32s2', 'esp32c3', 'esp32s3', 'esp32c2', 'esp32c6', 'esp32h2', 'esp32p4', 'esp32c5', 'esp32c61'], + soc_filtered_targets('SOC_TEMP_SENSOR_SUPPORTED == 1'), indirect=['target'], ) def test_temp_sensor_example(dut: Dut) -> None: diff --git a/examples/peripherals/temperature_sensor/temp_sensor_monitor/pytest_temp_sensor_monitor_example.py b/examples/peripherals/temperature_sensor/temp_sensor_monitor/pytest_temp_sensor_monitor_example.py index f5cccf04ac3..d5f28706880 100644 --- a/examples/peripherals/temperature_sensor/temp_sensor_monitor/pytest_temp_sensor_monitor_example.py +++ b/examples/peripherals/temperature_sensor/temp_sensor_monitor/pytest_temp_sensor_monitor_example.py @@ -3,10 +3,11 @@ import pytest from pytest_embedded.dut import Dut from pytest_embedded_idf.utils import idf_parametrize +from pytest_embedded_idf.utils import soc_filtered_targets @pytest.mark.generic -@idf_parametrize('target', ['esp32c6', 'esp32h2', 'esp32p4', 'esp32c5', 'esp32c61'], indirect=['target']) +@idf_parametrize('target', soc_filtered_targets('SOC_TEMPERATURE_SENSOR_INTR_SUPPORT == 1'), indirect=['target']) def test_temp_sensor_monitor_example(dut: Dut) -> None: dut.expect_exact('Install temperature sensor') dut.expect_exact('Enable temperature sensor') diff --git a/examples/peripherals/timer_group/gptimer_capture_hc_sr04/pytest_gptimer_capture_example.py b/examples/peripherals/timer_group/gptimer_capture_hc_sr04/pytest_gptimer_capture_example.py index ce0ad1a38b0..5357e3321cb 100644 --- a/examples/peripherals/timer_group/gptimer_capture_hc_sr04/pytest_gptimer_capture_example.py +++ b/examples/peripherals/timer_group/gptimer_capture_hc_sr04/pytest_gptimer_capture_example.py @@ -1,12 +1,15 @@ -# SPDX-FileCopyrightText: 2022-2025 Espressif Systems (Shanghai) CO LTD +# SPDX-FileCopyrightText: 2022-2026 Espressif Systems (Shanghai) CO LTD # SPDX-License-Identifier: CC0-1.0 import pytest from pytest_embedded import Dut from pytest_embedded_idf.utils import idf_parametrize +from pytest_embedded_idf.utils import soc_filtered_targets @pytest.mark.generic -@idf_parametrize('target', ['esp32c5', 'esp32c6', 'esp32c61', 'esp32h2', 'esp32p4', 'esp32s31'], indirect=['target']) +@idf_parametrize( + 'target', soc_filtered_targets('SOC_GPTIMER_SUPPORTED == 1 and SOC_ETM_SUPPORTED == 1'), indirect=['target'] +) def test_gptimer_capture(dut: Dut) -> None: dut.expect_exact('Configure trig gpio') dut.expect_exact('Configure echo gpio') diff --git a/examples/peripherals/timer_group/wiegand_interface/pytest_wiegand.py b/examples/peripherals/timer_group/wiegand_interface/pytest_wiegand.py index ede7ae12f8d..cbe80b126d1 100644 --- a/examples/peripherals/timer_group/wiegand_interface/pytest_wiegand.py +++ b/examples/peripherals/timer_group/wiegand_interface/pytest_wiegand.py @@ -1,14 +1,15 @@ -# SPDX-FileCopyrightText: 2023-2025 Espressif Systems (Shanghai) CO LTD +# SPDX-FileCopyrightText: 2023-2026 Espressif Systems (Shanghai) CO LTD # SPDX-License-Identifier: CC0-1.0 import pytest from pytest_embedded import Dut from pytest_embedded_idf.utils import idf_parametrize +from pytest_embedded_idf.utils import soc_filtered_targets @pytest.mark.generic @idf_parametrize( 'target', - ['esp32', 'esp32c3', 'esp32c5', 'esp32c6', 'esp32c61', 'esp32h2', 'esp32s2', 'esp32s3', 'esp32p4', 'esp32s31'], + soc_filtered_targets('SOC_GPTIMER_SUPPORTED == 1 and IDF_TARGET != "esp32c2"'), indirect=['target'], ) def test_gptimer_wiegand(dut: Dut) -> None: diff --git a/examples/peripherals/touch_sensor/touch_sens_basic/pytest_touch_sens_basic.py b/examples/peripherals/touch_sensor/touch_sens_basic/pytest_touch_sens_basic.py index 7e1dfcf6c47..7a53c8c02fd 100644 --- a/examples/peripherals/touch_sensor/touch_sens_basic/pytest_touch_sens_basic.py +++ b/examples/peripherals/touch_sensor/touch_sens_basic/pytest_touch_sens_basic.py @@ -3,10 +3,11 @@ import pytest from pytest_embedded import Dut from pytest_embedded_idf.utils import idf_parametrize +from pytest_embedded_idf.utils import soc_filtered_targets @pytest.mark.generic -@idf_parametrize('target', ['esp32', 'esp32s2', 'esp32s3', 'esp32p4', 'esp32s31'], indirect=['target']) +@idf_parametrize('target', soc_filtered_targets('SOC_TOUCH_SENSOR_SUPPORTED == 1'), indirect=['target']) def test_touch_sens(dut: Dut) -> None: dut.expect(r'Touch \[CH [0-9]+\] enabled on GPIO[0-9]+') dut.expect_exact('Initial benchmark and new threshold are:') diff --git a/examples/peripherals/twai/twai_utils/pytest_twai_utils.py b/examples/peripherals/twai/twai_utils/pytest_twai_utils.py index be3bc70a8bb..af35891da90 100644 --- a/examples/peripherals/twai/twai_utils/pytest_twai_utils.py +++ b/examples/peripherals/twai/twai_utils/pytest_twai_utils.py @@ -310,6 +310,7 @@ def usb_can() -> CanBusManager: @pytest.mark.generic @idf_parametrize('target', soc_filtered_targets('SOC_TWAI_SUPPORTED == 1'), indirect=['target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15618 def test_twai_utils_basic_operations(twai: TwaiTestHelper) -> None: with twai.session(start_dump=False): # Test basic send operation @@ -328,6 +329,7 @@ def test_twai_utils_basic_operations(twai: TwaiTestHelper) -> None: @pytest.mark.generic @idf_parametrize('target', soc_filtered_targets('SOC_TWAI_SUPPORTED == 1'), indirect=['target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15618 def test_twai_utils_bitrate_configuration(twai: TwaiTestHelper) -> None: for bitrate in [125000, 250000, 500000, 1000000]: with twai.session(mode='standard', bitrate=bitrate, tx_gpio=DEFAULT_TX_GPIO, rx_gpio=DEFAULT_RX_GPIO): @@ -336,6 +338,7 @@ def test_twai_utils_bitrate_configuration(twai: TwaiTestHelper) -> None: @pytest.mark.generic @idf_parametrize('target', soc_filtered_targets('SOC_TWAI_SUPPORTED == 1'), indirect=['target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15618 def test_twai_utils_frame_formats(twai: TwaiTestHelper) -> None: with twai.session(): BASIC_FRAMES = [ @@ -366,6 +369,7 @@ def test_twai_utils_frame_formats(twai: TwaiTestHelper) -> None: @pytest.mark.generic @idf_parametrize('target', soc_filtered_targets('SOC_TWAI_SUPPORTED == 1'), indirect=['target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15618 def test_twai_utils_info_and_recovery(twai: TwaiTestHelper) -> None: with twai.session(): assert twai.info(), 'Info command failed' @@ -386,6 +390,7 @@ def test_twai_utils_info_and_recovery(twai: TwaiTestHelper) -> None: @pytest.mark.generic @idf_parametrize('target', soc_filtered_targets('SOC_TWAI_SUPPORTED == 1'), indirect=['target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15618 def test_twai_utils_input_validation(twai: TwaiTestHelper) -> None: with twai.session(start_dump=False): INVALID_FRAMES = [ @@ -432,6 +437,7 @@ def test_twai_utils_input_validation(twai: TwaiTestHelper) -> None: @pytest.mark.generic @idf_parametrize('target', soc_filtered_targets('SOC_TWAI_SUPPORTED == 1'), indirect=['target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15618 def test_twai_utils_gpio_and_basic_send(twai: TwaiTestHelper) -> None: with twai.session(): assert twai.info(), 'GPIO info failed' @@ -459,6 +465,7 @@ def test_twai_utils_gpio_and_basic_send(twai: TwaiTestHelper) -> None: @pytest.mark.generic @idf_parametrize('target', soc_filtered_targets('SOC_TWAI_SUPPORTED == 1'), indirect=['target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15618 def test_twai_utils_send_various_frames(twai: TwaiTestHelper) -> None: with twai.session(): # Boundary ID tests @@ -478,6 +485,7 @@ def test_twai_utils_send_various_frames(twai: TwaiTestHelper) -> None: @pytest.mark.generic @idf_parametrize('target', soc_filtered_targets('SOC_TWAI_FD_SUPPORTED == 1'), indirect=['target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15618 def test_twai_utils_fd_frames(twai: TwaiTestHelper) -> None: with twai.session(): FD_FRAMES = [ @@ -492,6 +500,7 @@ def test_twai_utils_fd_frames(twai: TwaiTestHelper) -> None: @pytest.mark.generic @idf_parametrize('target', soc_filtered_targets('SOC_TWAI_SUPPORTED == 1'), indirect=['target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15618 def test_twai_utils_mask_filters(twai: TwaiTestHelper) -> None: """Test TWAI filtering including automatic extended frame detection.""" MASK_FILTER_GROUPS = [ @@ -549,7 +558,12 @@ def test_twai_utils_mask_filters(twai: TwaiTestHelper) -> None: @pytest.mark.generic -@idf_parametrize('target', soc_filtered_targets('SOC_TWAI_RANGE_FILTER_NUM > 0'), indirect=['target']) +@idf_parametrize( + 'target', + soc_filtered_targets('SOC_TWAI_RANGE_FILTER_NUM > 0'), + indirect=['target'], +) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15618 def test_twai_utils_range_filters(twai: TwaiTestHelper) -> None: """Test TWAI range filters (available on chips with range filter support).""" RANGE_FILTER_GROUPS = [ @@ -594,7 +608,7 @@ def test_twai_utils_range_filters(twai: TwaiTestHelper) -> None: @pytest.mark.twai_std -@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='no runner') +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='no runner') # TODO: IDFCI-11110 @pytest.mark.temp_skip_ci(targets=['esp32s31'], reason='no runner') @idf_parametrize('target', soc_filtered_targets('SOC_TWAI_SUPPORTED == 1'), indirect=['target']) def test_twai_utils_external_communication(twai: TwaiTestHelper, usb_can: CanBusManager) -> None: diff --git a/examples/peripherals/uart/uart_dma_ota/pytest_uart_dma_ota.py b/examples/peripherals/uart/uart_dma_ota/pytest_uart_dma_ota.py index bfd4e0ec782..7922f28c554 100644 --- a/examples/peripherals/uart/uart_dma_ota/pytest_uart_dma_ota.py +++ b/examples/peripherals/uart/uart_dma_ota/pytest_uart_dma_ota.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2025 Espressif Systems (Shanghai) CO LTD +# SPDX-FileCopyrightText: 2025-2026 Espressif Systems (Shanghai) CO LTD # SPDX-License-Identifier: CC0-1.0 import os @@ -6,6 +6,7 @@ import pytest import serial from pytest_embedded import Dut from pytest_embedded_idf.utils import idf_parametrize +from pytest_embedded_idf.utils import soc_filtered_targets PACKET_SIZE = 10 * 1024 # 10 KB for upper computer FLASH_PORT = '/dev/serial_ports/ttyUSB-esp32' @@ -42,7 +43,9 @@ def send_file_via_uart(port: str, baud_rate: int, file_path: str, packet_size: i ], indirect=True, ) -@idf_parametrize('target', ['esp32c6', 'esp32c3', 'esp32c5', 'esp32s3', 'esp32h2', 'esp32p4'], indirect=['target']) +@idf_parametrize('target', soc_filtered_targets('SOC_UHCI_SUPPORTED == 1'), indirect=['target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='lack of runner # TODO: IDFCI-10703') +@pytest.mark.temp_skip_ci(targets=['esp32s31'], reason='lack of runner # TODO: IDFCI-11113') def test_uart_dma_ota(dut: Dut) -> None: dut.expect_exact('uhci-example: OTA process started') # We OTA the same binary to another partition and switch to there. diff --git a/examples/security/.build-test-rules.yml b/examples/security/.build-test-rules.yml index e4ef390189c..fb8ec678b9a 100644 --- a/examples/security/.build-test-rules.yml +++ b/examples/security/.build-test-rules.yml @@ -4,9 +4,9 @@ examples/security/flash_encryption: disable: - if: CONFIG_NAME == "psram" and SOC_SPIRAM_SUPPORTED != 1 - if: CONFIG_NAME == "key_mgr" and SOC_KEY_MANAGER_SUPPORTED != 1 - - if: IDF_TARGET in ["esp32s31"] + - if: IDF_TARGET in ["esp32s31", "esp32h4"] temporary: true - reason: not support yet # TODO: [ESP32S31] IDF-14628 + reason: not support yet # TODO: [ESP32S31] IDF-14628 [ESP32H4] IDF-12261 disable_test: - if: CONFIG_NAME == "key_mgr" temporary: true diff --git a/examples/security/flash_encryption/README.md b/examples/security/flash_encryption/README.md index 533028dc66e..89e1debeadb 100644 --- a/examples/security/flash_encryption/README.md +++ b/examples/security/flash_encryption/README.md @@ -1,5 +1,5 @@ -| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-C61 | ESP32-H2 | ESP32-H21 | ESP32-H4 | ESP32-P4 | ESP32-S2 | ESP32-S3 | -| ----------------- | ----- | -------- | -------- | -------- | -------- | --------- | -------- | --------- | -------- | -------- | -------- | -------- | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-C61 | ESP32-H2 | ESP32-H21 | ESP32-P4 | ESP32-S2 | ESP32-S3 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | --------- | -------- | --------- | -------- | -------- | -------- | # Flash Encryption diff --git a/examples/storage/.build-test-rules.yml b/examples/storage/.build-test-rules.yml index dfd41a37263..44add14168c 100644 --- a/examples/storage/.build-test-rules.yml +++ b/examples/storage/.build-test-rules.yml @@ -1,6 +1,10 @@ # Documentation: .gitlab/ci/README.md#manifest-file-to-control-the-buildtest-apps examples/storage/custom_flash_driver: + disable_test: + - if: IDF_TARGET == "esp32h4" + temporary: true + reason: cannot pass # TODO: IDF-15601 depends_components: - spi_flash diff --git a/examples/storage/custom_flash_driver/pytest_custom_flash_example.py b/examples/storage/custom_flash_driver/pytest_custom_flash_example.py index 29187efe294..93680af5650 100644 --- a/examples/storage/custom_flash_driver/pytest_custom_flash_example.py +++ b/examples/storage/custom_flash_driver/pytest_custom_flash_example.py @@ -14,6 +14,7 @@ from pytest_embedded_idf.utils import idf_parametrize indirect=True, ) @idf_parametrize('target', ['supported_targets'], indirect=['target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15601 def test_examples_custom_flash_driver(dut: Dut) -> None: dut.expect(r'Using overridden bootloader_flash_unlock', timeout=20) dut.expect(r'Using overridden bootloader_flash_qio, the list number is \d+', timeout=20) diff --git a/examples/system/.build-test-rules.yml b/examples/system/.build-test-rules.yml index d0e91a1fe19..0414489e83b 100644 --- a/examples/system/.build-test-rules.yml +++ b/examples/system/.build-test-rules.yml @@ -16,6 +16,10 @@ examples/system/app_trace_basic: - app_trace examples/system/base_mac_address: + disable_test: + - if: IDF_TARGET == "esp32h4" + temporary: true + reason: cannot pass # TODO: IDF-15600 depends_components: - *common_components - esp_hw_support @@ -43,9 +47,9 @@ examples/system/efuse: reason: Security features are not yet supported for Linux. - if: SOC_ECDSA_SUPPORT_CURVE_P384 != 1 and (CONFIG_NAME == "virt_secure_boot_v2_ecdsa_p384" or CONFIG_NAME == "virt_sb_v2_ecdsa_p384_and_fe") reason: Secure Boot V2 with ECDSA P384 is not supported. - - if: IDF_TARGET in ["esp32s31"] + - if: IDF_TARGET in ["esp32s31", "esp32h4"] temporary: true - reason: not support yet # TODO: [ESP32S31] IDF-14442 + reason: not support yet # TODO: [ESP32S31] IDF-14442 [ESP32H4] IDF-12262 depends_components: - *common_components - efuse @@ -62,6 +66,10 @@ examples/system/esp_event/user_event_loops: examples/system/esp_timer: depends_components: - esp_timer + disable_test: + - if: IDF_TARGET in ["esp32h4"] + temporary: true + reason: cannot pass # TODO: IDF-15605 examples/system/eventfd: disable: @@ -121,6 +129,10 @@ examples/system/ipc/ipc_isr/xtensa: examples/system/light_sleep: disable: - if: SOC_LIGHT_SLEEP_SUPPORTED != 1 + disable_test: + - if: IDF_TARGET == "esp32h4" + temporary: true + reason: cannot pass # TODO: IDF-15611 examples/system/nmi_isr: enable: @@ -269,9 +281,6 @@ examples/system/sysview_tracing: - if: IDF_TARGET == "esp32h21" temporary: true reason: lack of runners - - if: IDF_TARGET == "esp32h4" - temporary: true - reason: not supported yet #TODO: OCD-1136 - if: IDF_TARGET == "esp32s31" temporary: true reason: not support yet #TODO: OCD-1289 diff --git a/examples/system/app_trace_basic/pytest_app_trace_basic.py b/examples/system/app_trace_basic/pytest_app_trace_basic.py index 1cbe588067e..5d8b5a94759 100644 --- a/examples/system/app_trace_basic/pytest_app_trace_basic.py +++ b/examples/system/app_trace_basic/pytest_app_trace_basic.py @@ -64,7 +64,7 @@ def test_examples_app_trace_basic_usj(openocd_dut: 'OpenOCD', dut: IdfDut) -> No @pytest.mark.generic @idf_parametrize('config', ['apptrace_uart'], indirect=['config']) @idf_parametrize('target', ['supported_targets'], indirect=['target']) -@pytest.mark.temp_skip_ci(targets=['esp32s31'], reason='s31 bringup on this module is not done') +@pytest.mark.temp_skip_ci(targets=['esp32s31', 'esp32h4'], reason='bringup on this module is not done') def test_examples_app_trace_basic_uart(dut: IdfDut) -> None: dut.serial.close() with serial.Serial(dut.serial.port, baudrate=1000000, timeout=3) as ser: diff --git a/examples/system/base_mac_address/pytest_base_mac_address.py b/examples/system/base_mac_address/pytest_base_mac_address.py index 58fedf60053..c31d3736913 100644 --- a/examples/system/base_mac_address/pytest_base_mac_address.py +++ b/examples/system/base_mac_address/pytest_base_mac_address.py @@ -7,6 +7,7 @@ from pytest_embedded_idf.utils import idf_parametrize @pytest.mark.generic @idf_parametrize('target', ['supported_targets'], indirect=['target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15600 def test_base_mac_address(dut: Dut) -> None: def get_hex_r(num_bytes: int) -> str: return r', '.join((r'0x([0-9a-f]{1,2})',) * num_bytes) diff --git a/examples/system/efuse/README.md b/examples/system/efuse/README.md index 9641ed8fd64..3097e517318 100644 --- a/examples/system/efuse/README.md +++ b/examples/system/efuse/README.md @@ -1,5 +1,5 @@ -| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-C61 | ESP32-H2 | ESP32-H21 | ESP32-H4 | ESP32-P4 | ESP32-S2 | ESP32-S3 | Linux | -| ----------------- | ----- | -------- | -------- | -------- | -------- | --------- | -------- | --------- | -------- | -------- | -------- | -------- | ----- | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-C61 | ESP32-H2 | ESP32-H21 | ESP32-P4 | ESP32-S2 | ESP32-S3 | Linux | +| ----------------- | ----- | -------- | -------- | -------- | -------- | --------- | -------- | --------- | -------- | -------- | -------- | ----- | # eFuse Example diff --git a/examples/system/esp_timer/pytest_esp_timer.py b/examples/system/esp_timer/pytest_esp_timer.py index a20b8f120d0..3362ec6399b 100644 --- a/examples/system/esp_timer/pytest_esp_timer.py +++ b/examples/system/esp_timer/pytest_esp_timer.py @@ -43,6 +43,7 @@ TIMED_RESTART_TIME = 7000000 indirect=True, ) @idf_parametrize('target', ['supported_targets'], indirect=['target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15605 def test_esp_timer(dut: Dut) -> None: match = dut.expect(STARTING_TIMERS_REGEX) start_time = int(match.group(1)) diff --git a/examples/system/gcov/pytest_gcov.py b/examples/system/gcov/pytest_gcov.py index 2e0e41e6df1..10c37b7138e 100644 --- a/examples/system/gcov/pytest_gcov.py +++ b/examples/system/gcov/pytest_gcov.py @@ -198,6 +198,6 @@ def _test_gcov_uart(dut: IdfDut) -> None: @pytest.mark.generic @idf_parametrize('config', ['gcov_uart'], indirect=['config']) @idf_parametrize('target', ['supported_targets'], indirect=['target']) -@pytest.mark.temp_skip_ci(targets=['esp32s31'], reason='s31 bringup on this module is not done') +@pytest.mark.temp_skip_ci(targets=['esp32s31', 'esp32h4'], reason='bringup on this module is not done') def test_gcov_uart(dut: IdfDut) -> None: _test_gcov_uart(dut) diff --git a/examples/system/light_sleep/pytest_light_sleep.py b/examples/system/light_sleep/pytest_light_sleep.py index dc56b443256..0801c5f5c90 100644 --- a/examples/system/light_sleep/pytest_light_sleep.py +++ b/examples/system/light_sleep/pytest_light_sleep.py @@ -10,6 +10,7 @@ from pytest_embedded_idf.utils import idf_parametrize @pytest.mark.generic @idf_parametrize('target', ['supported_targets'], indirect=['target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15611 def test_light_sleep(dut: Dut) -> None: ENTERING_SLEEP_STR = 'Entering light sleep' EXIT_SLEEP_REGEX = r'Returned from light sleep, reason: (\w+), t=(\d+) ms, slept for (\d+) ms' diff --git a/examples/system/sysview_tracing/pytest_sysview_tracing.py b/examples/system/sysview_tracing/pytest_sysview_tracing.py index 9b0e9683c44..5e49b839f39 100644 --- a/examples/system/sysview_tracing/pytest_sysview_tracing.py +++ b/examples/system/sysview_tracing/pytest_sysview_tracing.py @@ -139,8 +139,11 @@ def test_sysview_tracing_jtag(openocd_dut: 'OpenOCD', dut: IdfDut) -> None: @pytest.mark.usb_serial_jtag @idf_parametrize('config', ['sysview_jtag'], indirect=['config']) @idf_parametrize( - 'target', ['esp32s3', 'esp32c3', 'esp32c5', 'esp32c6', 'esp32c61', 'esp32h2', 'esp32p4'], indirect=['target'] + 'target', + ['esp32s3', 'esp32c3', 'esp32c5', 'esp32c6', 'esp32c61', 'esp32h2', 'esp32p4', 'esp32h4'], + indirect=['target'], ) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='lack of runner # TODO: IDFCI-10703') def test_sysview_tracing_usj(openocd_dut: 'OpenOCD', dut: IdfDut) -> None: _test_sysview_tracing_jtag(openocd_dut, dut) @@ -157,7 +160,7 @@ def _test_sysview_tracing_uart(dut: IdfDut) -> None: @pytest.mark.generic @idf_parametrize('config', ['sysview_uart'], indirect=['config']) @idf_parametrize('target', ['supported_targets'], indirect=['target']) -@pytest.mark.temp_skip_ci(targets=['esp32s31'], reason='s31 bringup on this module is not done') +@pytest.mark.temp_skip_ci(targets=['esp32s31'], reason='bringup on this module is not done') def test_sysview_tracing_uart(dut: IdfDut) -> None: _test_sysview_tracing_uart(dut) @@ -173,6 +176,7 @@ def test_sysview_tracing_uart_c2(dut: IdfDut) -> None: @pytest.mark.usb_serial_jtag @idf_parametrize('target', soc_filtered_targets('SOC_USB_SERIAL_JTAG_SUPPORTED == 1'), indirect=['target']) @pytest.mark.parametrize('config', [pytest.param('sysview_usj')], indirect=True) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='lack of runner # TODO: IDFCI-10703') def test_sysview_tracing_usj_serial(dut: IdfDut) -> None: time.sleep(1) # wait for USJ port to be ready usj_port = '/dev/serial_ports/ttyACM-esp32' diff --git a/tools/ci/idf_pytest/constants.py b/tools/ci/idf_pytest/constants.py index 8675eb9e4af..6abf4a15bda 100644 --- a/tools/ci/idf_pytest/constants.py +++ b/tools/ci/idf_pytest/constants.py @@ -16,6 +16,7 @@ SUPPORTED_TARGETS = [ 'esp32c5', 'esp32c61', 'esp32s31', + 'esp32h4', ] PREVIEW_TARGETS: list[str] = [] # this PREVIEW_TARGETS excludes 'linux' target diff --git a/tools/test_apps/security/secure_boot/pytest_secure_boot.py b/tools/test_apps/security/secure_boot/pytest_secure_boot.py index d2c56ad2689..b39b0dc9c9b 100644 --- a/tools/test_apps/security/secure_boot/pytest_secure_boot.py +++ b/tools/test_apps/security/secure_boot/pytest_secure_boot.py @@ -44,8 +44,9 @@ SECURE_BOOT_RSA_TARGETS = [ 'esp32s2', 'esp32s3', 'esp32p4', + 'esp32h4', ] -SECURE_BOOT_ECDSA_TARGETS = ['esp32c2', 'esp32c5', 'esp32c6', 'esp32c61', 'esp32h2', 'esp32h21', 'esp32p4'] +SECURE_BOOT_ECDSA_TARGETS = ['esp32c2', 'esp32c5', 'esp32c6', 'esp32c61', 'esp32h2', 'esp32h21', 'esp32p4', 'esp32h4'] SECURE_BOOT_ECDSA_P384_TARGETS = ['esp32c5'] CONFIGS_SECURE_BOOT_ECDSA = list( diff --git a/tools/test_apps/system/.build-test-rules.yml b/tools/test_apps/system/.build-test-rules.yml index 48044e4bebc..f0ab6927be8 100644 --- a/tools/test_apps/system/.build-test-rules.yml +++ b/tools/test_apps/system/.build-test-rules.yml @@ -58,6 +58,10 @@ tools/test_apps/system/eh_frame: reason: Only relevant for riscv targets tools/test_apps/system/esp_intr_dump: + disable_test: + - if: IDF_TARGET == "esp32h4" + temporary: true + reason: cannot pass # TODO: IDF-15603 tools/test_apps/system/flash_auto_suspend_iram_reduction: disable: @@ -76,7 +80,7 @@ tools/test_apps/system/g1_components: tools/test_apps/system/gdb: disable_test: - - if: IDF_TARGET in ["esp32p4", "esp32c5", "esp32c61", "esp32s31"] + - if: IDF_TARGET in ["esp32p4", "esp32c5", "esp32c61", "esp32s31", "esp32h4"] temporary: true reason: not supported yet # TODO: IDF-13142 @@ -90,6 +94,12 @@ tools/test_apps/system/gdb_loadable_elf: temporary: true reason: target esp32c6, esp32h2 is not supported yet +tools/test_apps/system/gdbstub_runtime: + disable_test: + - if: IDF_TARGET == "esp32h4" + temporary: true + reason: cannot pass # TODO: IDF-15607 + tools/test_apps/system/init_array: enable: - if: INCLUDE_DEFAULT == 1 or IDF_TARGET == "linux" @@ -138,6 +148,10 @@ tools/test_apps/system/no_embedded_paths: tools/test_apps/system/panic: enable: - if: INCLUDE_DEFAULT == 1 or IDF_TARGET in ["esp32s31"] + disable_test: + - if: IDF_TARGET == "esp32h4" + temporary: true + reason: cannot pass # TODO: IDF-15612 tools/test_apps/system/ram_loadable_app: disable: @@ -145,6 +159,9 @@ tools/test_apps/system/ram_loadable_app: temporary: true reason: p4 rev3 migration # TODO: IDF-14370 disable_test: + - if: IDF_TARGET == "esp32h4" + temporary: true + reason: cannot pass yet # TODO: IDF-15626 - if: IDF_TARGET == "esp32s31" temporary: true reason: cannot pass # TODO: IDF-15525 @@ -173,3 +190,7 @@ tools/test_apps/system/unicore_bootloader: reason: the test is only relevant for multicore chips - if: CONFIG_NAME == "unicore_psram" and SOC_PSRAM_SUPPORTED != 1 - if: CONFIG_NAME == "multicore_psram" and SOC_PSRAM_SUPPORTED != 1 + disable_test: + - if: IDF_TARGET == "esp32h4" + temporary: true + reason: cannot pass # TODO: IDF-15620 diff --git a/tools/test_apps/system/eh_frame/pytest_eh_frame.py b/tools/test_apps/system/eh_frame/pytest_eh_frame.py index 0b7f0c14e28..b0b54c42f17 100644 --- a/tools/test_apps/system/eh_frame/pytest_eh_frame.py +++ b/tools/test_apps/system/eh_frame/pytest_eh_frame.py @@ -8,7 +8,7 @@ from pytest_embedded_idf.utils import idf_parametrize @pytest.mark.generic @idf_parametrize( 'target', - ['esp32c2', 'esp32c3', 'esp32c5', 'esp32c6', 'esp32c61', 'esp32h2', 'esp32p4', 'esp32s31'], + ['esp32c2', 'esp32c3', 'esp32c5', 'esp32c6', 'esp32c61', 'esp32h2', 'esp32p4', 'esp32s31', 'esp32h4'], indirect=['target'], ) def test_eh_frame_wdt(dut: Dut) -> None: @@ -22,7 +22,7 @@ def test_eh_frame_wdt(dut: Dut) -> None: @pytest.mark.generic @idf_parametrize( 'target', - ['esp32c2', 'esp32c3', 'esp32c5', 'esp32c6', 'esp32c61', 'esp32h2', 'esp32p4', 'esp32s31'], + ['esp32c2', 'esp32c3', 'esp32c5', 'esp32c6', 'esp32c61', 'esp32h2', 'esp32p4', 'esp32s31', 'esp32h4'], indirect=['target'], ) def test_eh_frame_panic(dut: Dut) -> None: diff --git a/tools/test_apps/system/esp_intr_dump/pytest_esp_intr_dump.py b/tools/test_apps/system/esp_intr_dump/pytest_esp_intr_dump.py index e03da57cc20..5cbe4d64b0f 100644 --- a/tools/test_apps/system/esp_intr_dump/pytest_esp_intr_dump.py +++ b/tools/test_apps/system/esp_intr_dump/pytest_esp_intr_dump.py @@ -48,6 +48,7 @@ def test_esp_intr_dump_shared(dut: Dut) -> None: # TODO: IDF-9512, Update the expected output of dual core RISC-V chips when the issue is resolved @pytest.mark.generic @idf_parametrize('target', ['supported_targets'], indirect=['target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15603 def test_esp_intr_dump_expected_output(dut: Dut) -> None: dut.expect_exact(PROMPT, timeout=30) dut.write('intr_dump\n') diff --git a/tools/test_apps/system/gdbstub_runtime/pytest_gdbstub_runtime.py b/tools/test_apps/system/gdbstub_runtime/pytest_gdbstub_runtime.py index a42a736b3ce..75d84b7cb12 100644 --- a/tools/test_apps/system/gdbstub_runtime/pytest_gdbstub_runtime.py +++ b/tools/test_apps/system/gdbstub_runtime/pytest_gdbstub_runtime.py @@ -293,6 +293,7 @@ def test_coproc_registers(dut: PanicTestDut) -> None: @pytest.mark.generic @idf_parametrize('target', ['supported_targets'], indirect=['target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15607 def test_gdbstub_runtime(dut: PanicTestDut) -> None: start_gdb(dut) diff --git a/tools/test_apps/system/panic/pytest_panic.py b/tools/test_apps/system/panic/pytest_panic.py index 094c453b7a2..6a07ab1edf6 100644 --- a/tools/test_apps/system/panic/pytest_panic.py +++ b/tools/test_apps/system/panic/pytest_panic.py @@ -199,6 +199,7 @@ def common_test( @pytest.mark.generic @idf_parametrize('config, target', CONFIGS, indirect=['config', 'target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_task_wdt_cpu0(dut: PanicTestDut, config: str, test_func_name: str) -> None: dut.run_test_func(test_func_name) dut.expect_exact('Task watchdog got triggered. The following tasks/users did not reset the watchdog in time:') @@ -231,6 +232,7 @@ def test_task_wdt_cpu0(dut: PanicTestDut, config: str, test_func_name: str) -> N @pytest.mark.generic @idf_parametrize('config, target', CONFIGS_DUAL_CORE, indirect=['config', 'target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_task_wdt_cpu1(dut: PanicTestDut, config: str, test_func_name: str) -> None: dut.run_test_func(test_func_name) dut.expect_exact('Task watchdog got triggered. The following tasks/users did not reset the watchdog in time:') @@ -268,6 +270,7 @@ def test_task_wdt_cpu1(dut: PanicTestDut, config: str, test_func_name: str) -> N ], indirect=['config', 'target'], ) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_panic_extram_stack(dut: PanicTestDut, config: str) -> None: if 'heap' in config: dut.run_test_func('test_panic_extram_stack_heap') @@ -295,6 +298,7 @@ def test_panic_extram_stack(dut: PanicTestDut, config: str) -> None: @pytest.mark.generic @idf_parametrize('config, target', CONFIGS, indirect=['config', 'target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_int_wdt(dut: PanicTestDut, target: str, config: str, test_func_name: str) -> None: dut.run_test_func(test_func_name) dut.expect_gme('Interrupt wdt timeout on CPU0') @@ -317,6 +321,7 @@ def test_int_wdt(dut: PanicTestDut, target: str, config: str, test_func_name: st @pytest.mark.generic @idf_parametrize('config, target', CONFIGS, indirect=['config', 'target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_int_wdt_cache_disabled(dut: PanicTestDut, target: str, config: str, test_func_name: str) -> None: dut.run_test_func(test_func_name) dut.expect_gme('Interrupt wdt timeout on CPU0') @@ -339,6 +344,7 @@ def test_int_wdt_cache_disabled(dut: PanicTestDut, target: str, config: str, tes @pytest.mark.generic @idf_parametrize('config, target', CONFIGS, indirect=['config', 'target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_cache_error(dut: PanicTestDut, config: str, test_func_name: str) -> None: dut.run_test_func(test_func_name) if dut.target in ['esp32c3', 'esp32c2']: @@ -370,6 +376,7 @@ def test_cache_error(dut: PanicTestDut, config: str, test_func_name: str) -> Non @pytest.mark.generic @idf_parametrize('config, target', CONFIGS, indirect=['config', 'target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_stack_overflow(dut: PanicTestDut, config: str, test_func_name: str) -> None: dut.run_test_func(test_func_name) if dut.is_xtensa: @@ -391,6 +398,7 @@ def test_stack_overflow(dut: PanicTestDut, config: str, test_func_name: str) -> @pytest.mark.generic @idf_parametrize('config, target', CONFIGS, indirect=['config', 'target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_instr_fetch_prohibited(dut: PanicTestDut, config: str, test_func_name: str) -> None: dut.run_test_func(test_func_name) if dut.is_xtensa: @@ -418,6 +426,7 @@ def test_instr_fetch_prohibited(dut: PanicTestDut, config: str, test_func_name: @pytest.mark.generic @idf_parametrize('config, target', CONFIGS, indirect=['config', 'target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_illegal_instruction(dut: PanicTestDut, config: str, test_func_name: str) -> None: dut.run_test_func(test_func_name) if dut.is_xtensa: @@ -454,6 +463,7 @@ def check_x_prohibited(dut: PanicTestDut, config: str, test_func_name: str, oper @pytest.mark.generic @idf_parametrize('config, target', CONFIGS, indirect=['config', 'target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_storeprohibited(dut: PanicTestDut, config: str, test_func_name: str) -> None: check_x_prohibited(dut, config, test_func_name, 'Store') @@ -466,6 +476,7 @@ def test_loadprohibited(dut: PanicTestDut, config: str, test_func_name: str) -> @pytest.mark.generic @idf_parametrize('config, target', CONFIGS, indirect=['config', 'target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_abort(dut: PanicTestDut, config: str, test_func_name: str) -> None: dut.run_test_func(test_func_name) regex_pattern = rb'abort\(\) was called at PC [0-9xa-f]+ on core 0' @@ -488,6 +499,7 @@ def test_abort(dut: PanicTestDut, config: str, test_func_name: str) -> None: @pytest.mark.generic @idf_parametrize('config, target', CONFIGS_UBSAN, indirect=['config', 'target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_ub(dut: PanicTestDut, config: str, test_func_name: str) -> None: dut.run_test_func(test_func_name) regex_pattern = rb'Undefined behavior of type out_of_bounds' @@ -514,6 +526,7 @@ def test_ub(dut: PanicTestDut, config: str, test_func_name: str) -> None: @pytest.mark.generic @idf_parametrize('config, target', CONFIGS, indirect=['config', 'target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_abort_cache_disabled(dut: PanicTestDut, config: str, test_func_name: str) -> None: if dut.target == 'esp32s2': pytest.xfail(reason='Crashes in itoa which is not in ROM, IDF-3572') @@ -538,6 +551,7 @@ def test_abort_cache_disabled(dut: PanicTestDut, config: str, test_func_name: st @pytest.mark.generic @idf_parametrize('config, target', CONFIGS, indirect=['config', 'target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_assert(dut: PanicTestDut, config: str, test_func_name: str) -> None: dut.run_test_func(test_func_name) regex_pattern = rb'assert failed:[\s\w()]*?\s[.\w/]*\.(?:c|cpp|h|hpp):\d.*$' @@ -560,6 +574,7 @@ def test_assert(dut: PanicTestDut, config: str, test_func_name: str) -> None: @pytest.mark.generic @idf_parametrize('config, target', CONFIGS, indirect=['config', 'target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_assert_cache_disabled(dut: PanicTestDut, config: str, test_func_name: str) -> None: if dut.target == 'esp32s2': pytest.xfail(reason='Crashes in itoa which is not in ROM, IDF-3572') @@ -597,6 +612,7 @@ def cache_error_log_check(dut: PanicTestDut) -> None: @pytest.mark.generic @idf_parametrize('config, target', CONFIG_PANIC, indirect=['config', 'target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_assert_cache_write_back_error_can_print_backtrace(dut: PanicTestDut, config: str, test_func_name: str) -> None: dut.run_test_func(test_func_name) cache_error_log_check(dut) @@ -622,6 +638,7 @@ def test_panic_delay(dut: PanicTestDut) -> None: @pytest.mark.generic @idf_parametrize('config, target', CONFIG_PANIC, indirect=['config', 'target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_panic_handler_stuck0(dut: PanicTestDut, config: str, test_func_name: str) -> None: dut.run_test_func(test_func_name) @@ -634,6 +651,7 @@ def test_panic_handler_stuck0(dut: PanicTestDut, config: str, test_func_name: st @pytest.mark.generic @idf_parametrize('config, target', CONFIG_PANIC_DUAL_CORE, indirect=['config', 'target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_panic_handler_stuck1(dut: PanicTestDut, config: str, test_func_name: str) -> None: dut.run_test_func(test_func_name) @@ -646,6 +664,7 @@ def test_panic_handler_stuck1(dut: PanicTestDut, config: str, test_func_name: st @pytest.mark.generic @idf_parametrize('config, target', CONFIG_PANIC, indirect=['config', 'target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_panic_handler_crash0(dut: PanicTestDut, config: str, test_func_name: str) -> None: dut.run_test_func(test_func_name) @@ -664,6 +683,7 @@ def test_panic_handler_crash0(dut: PanicTestDut, config: str, test_func_name: st @pytest.mark.generic @idf_parametrize('config, target', CONFIG_PANIC_DUAL_CORE, indirect=['config', 'target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_panic_handler_crash1(dut: PanicTestDut, config: str, test_func_name: str) -> None: dut.run_test_func(test_func_name) @@ -790,6 +810,7 @@ CONFIGS_MEMPROT_INVALID_REGION_PROTECTION_USING_PMA = list( @pytest.mark.generic @idf_parametrize('config, target', CONFIGS_MEMPROT_DCACHE, indirect=['config', 'target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_dcache_read_violation(dut: PanicTestDut, test_func_name: str) -> None: dut.run_test_func(test_func_name) dut.expect_exact(r'Test error: Test function has returned') @@ -800,6 +821,7 @@ def test_dcache_read_violation(dut: PanicTestDut, test_func_name: str) -> None: @pytest.mark.generic @pytest.mark.xfail(targets=['esp32s2'], reason='Incorrect panic reason may be observed', run=False) @idf_parametrize('config, target', CONFIGS_MEMPROT_DCACHE, indirect=['config', 'target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_dcache_write_violation(dut: PanicTestDut, test_func_name: str) -> None: dut.run_test_func(test_func_name) dut.expect_gme('Memory protection fault') @@ -830,6 +852,7 @@ def iram_reg1_write_violation(dut: PanicTestDut, test_func_name: str) -> None: @pytest.mark.generic @pytest.mark.temp_skip_ci(targets=['esp32h21'], reason='lack of runners') @idf_parametrize('config, target', CONFIGS_MEMPROT_IDRAM, indirect=['config', 'target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_iram_reg1_write_violation(dut: PanicTestDut, test_func_name: str) -> None: iram_reg1_write_violation(dut, test_func_name) @@ -867,6 +890,7 @@ def iram_reg_write_violation(dut: PanicTestDut, test_func_name: str) -> None: @pytest.mark.generic @pytest.mark.temp_skip_ci(targets=['esp32h21'], reason='lack of runners') @idf_parametrize('config, target', CONFIGS_MEMPROT_IDRAM, indirect=['config', 'target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_iram_reg2_write_violation(dut: PanicTestDut, test_func_name: str) -> None: iram_reg_write_violation(dut, test_func_name) @@ -904,6 +928,7 @@ def iram_reg3_write_violation(dut: PanicTestDut, test_func_name: str) -> None: @pytest.mark.generic @pytest.mark.temp_skip_ci(targets=['esp32h21'], reason='lack of runners') @idf_parametrize('config, target', CONFIGS_MEMPROT_IDRAM, indirect=['config', 'target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_iram_reg3_write_violation(dut: PanicTestDut, test_func_name: str) -> None: iram_reg_write_violation(dut, test_func_name) @@ -943,6 +968,7 @@ def iram_reg4_write_violation(dut: PanicTestDut, test_func_name: str) -> None: @pytest.mark.xfail(targets=['esp32s2'], reason='Incorrect panic reason may be observed', run=False) @pytest.mark.temp_skip_ci(targets=['esp32h21'], reason='lack of runners') @idf_parametrize('config, target', CONFIGS_MEMPROT_IDRAM, indirect=['config', 'target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_iram_reg4_write_violation(dut: PanicTestDut, test_func_name: str) -> None: iram_reg_write_violation(dut, test_func_name) @@ -975,6 +1001,7 @@ def dram_reg1_execute_violation(dut: PanicTestDut, test_func_name: str) -> None: @pytest.mark.xfail(targets=['esp32s2'], reason='Multiple panic reasons for the same test may surface', run=False) @pytest.mark.temp_skip_ci(targets=['esp32h21'], reason='lack of runners') @idf_parametrize('config, target', CONFIGS_MEMPROT_IDRAM, indirect=['config', 'target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_dram_reg1_execute_violation(dut: PanicTestDut, test_func_name: str) -> None: dram_reg1_execute_violation(dut, test_func_name) @@ -1006,6 +1033,7 @@ def dram_reg2_execute_violation(dut: PanicTestDut, test_func_name: str) -> None: @pytest.mark.xfail(targets=['esp32s2'], reason='Multiple panic reasons for the same test may surface', run=False) @pytest.mark.temp_skip_ci(targets=['esp32h21'], reason='lack of runners') @idf_parametrize('config, target', CONFIGS_MEMPROT_IDRAM, indirect=['config', 'target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_dram_reg2_execute_violation(dut: PanicTestDut, test_func_name: str) -> None: dram_reg2_execute_violation(dut, test_func_name) @@ -1020,6 +1048,7 @@ def test_non_cache_dram_reg2_execute_violation(dut: PanicTestDut, test_func_name @pytest.mark.generic @pytest.mark.temp_skip_ci(targets=['esp32h21'], reason='lack of runners') @idf_parametrize('config, target', CONFIGS_MEMPROT_RTC_FAST_MEM, indirect=['config', 'target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_rtc_fast_reg1_execute_violation(dut: PanicTestDut, test_func_name: str) -> None: dut.run_test_func(test_func_name) dut.expect_exact(r'Test error: Test function has returned') @@ -1032,6 +1061,7 @@ def test_rtc_fast_reg1_execute_violation(dut: PanicTestDut, test_func_name: str) reason='Not a violation condition, no PMS peripheral cases', ) @idf_parametrize('config, target', CONFIGS_MEMPROT_RTC_FAST_MEM, indirect=['config', 'target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_rtc_fast_reg2_execute_violation(dut: PanicTestDut, test_func_name: str) -> None: dut.run_test_func(test_func_name) dut.expect_gme('Memory protection fault') @@ -1055,6 +1085,7 @@ def test_rtc_fast_reg2_execute_violation(dut: PanicTestDut, test_func_name: str) @pytest.mark.xfail(targets=['esp32s2'], reason='Multiple panic reasons for the same test may surface', run=False) @pytest.mark.temp_skip_ci(targets=['esp32h21'], reason='lack of runners') @idf_parametrize('config, target', CONFIGS_MEMPROT_RTC_FAST_MEM, indirect=['config', 'target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_rtc_fast_reg3_execute_violation(dut: PanicTestDut, test_func_name: str) -> None: dut.run_test_func(test_func_name) @@ -1080,6 +1111,7 @@ def test_rtc_fast_reg3_execute_violation(dut: PanicTestDut, test_func_name: str) @pytest.mark.generic @idf_parametrize('config, target', CONFIGS_MEMPROT_RTC_SLOW_MEM, indirect=['config', 'target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_rtc_slow_reg1_execute_violation(dut: PanicTestDut, test_func_name: str) -> None: dut.run_test_func(test_func_name) dut.expect_gme('Memory protection fault') @@ -1091,6 +1123,7 @@ def test_rtc_slow_reg1_execute_violation(dut: PanicTestDut, test_func_name: str) @pytest.mark.generic @idf_parametrize('config, target', CONFIGS_MEMPROT_RTC_SLOW_MEM, indirect=['config', 'target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_rtc_slow_reg2_execute_violation(dut: PanicTestDut, test_func_name: str) -> None: dut.run_test_func(test_func_name) dut.expect_gme('Memory protection fault') @@ -1110,6 +1143,7 @@ def irom_reg_write_violation(dut: PanicTestDut, test_func_name: str) -> None: @pytest.mark.generic @pytest.mark.temp_skip_ci(targets=['esp32h21'], reason='lack of runners') @idf_parametrize('config, target', CONFIGS_MEMPROT_FLASH_IDROM, indirect=['config', 'target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_irom_reg_write_violation(dut: PanicTestDut, test_func_name: str) -> None: irom_reg_write_violation(dut, test_func_name) @@ -1131,6 +1165,7 @@ def irom_mask_reg_write_violation(dut: PanicTestDut, test_func_name: str) -> Non @pytest.mark.generic @pytest.mark.temp_skip_ci(targets=['esp32h21'], reason='lack of runners') @idf_parametrize('config, target', CONFIGS_MEMPROT_FLASH_IDROM, indirect=['config', 'target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_irom_mask_reg_write_violation(dut: PanicTestDut, test_func_name: str) -> None: irom_mask_reg_write_violation(dut, test_func_name) @@ -1145,6 +1180,7 @@ def drom_mask_reg_write_violation(dut: PanicTestDut, test_func_name: str) -> Non @pytest.mark.generic @pytest.mark.temp_skip_ci(targets=['esp32h21'], reason='lack of runners') @idf_parametrize('config, target', CONFIGS_MEMPROT_FLASH_IDROM, indirect=['config', 'target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_drom_mask_reg_write_violation(dut: PanicTestDut, test_func_name: str) -> None: drom_mask_reg_write_violation(dut, test_func_name) @@ -1159,6 +1195,7 @@ def drom_reg_write_violation(dut: PanicTestDut, test_func_name: str) -> None: @pytest.mark.generic @pytest.mark.temp_skip_ci(targets=['esp32h21'], reason='lack of runners') @idf_parametrize('config, target', CONFIGS_MEMPROT_FLASH_IDROM, indirect=['config', 'target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_drom_reg_write_violation(dut: PanicTestDut, test_func_name: str) -> None: drom_reg_write_violation(dut, test_func_name) @@ -1180,6 +1217,7 @@ def drom_reg_execute_violation(dut: PanicTestDut, test_func_name: str) -> None: @pytest.mark.generic @pytest.mark.temp_skip_ci(targets=['esp32h21'], reason='lack of runners') @idf_parametrize('config, target', CONFIGS_MEMPROT_FLASH_IDROM, indirect=['config', 'target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_drom_reg_execute_violation(dut: PanicTestDut, test_func_name: str) -> None: drom_reg_execute_violation(dut, test_func_name) @@ -1204,6 +1242,7 @@ def spiram_xip_irom_alignment_reg_execute_violation(dut: PanicTestDut, test_func @pytest.mark.generic @pytest.mark.temp_skip_ci(targets=['esp32c5'], reason='TODO IDF-14835') @idf_parametrize('config, target', CONFIGS_MEMPROT_SPIRAM_XIP_IROM_ALIGNMENT_HEAP, indirect=['config', 'target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_spiram_xip_irom_alignment_reg_execute_violation(dut: PanicTestDut, test_func_name: str) -> None: spiram_xip_irom_alignment_reg_execute_violation(dut, test_func_name) @@ -1233,6 +1272,7 @@ def spiram_xip_drom_alignment_reg_execute_violation(dut: PanicTestDut, test_func @pytest.mark.generic @pytest.mark.temp_skip_ci(targets=['esp32c5'], reason='TODO IDF-14835') @idf_parametrize('config, target', CONFIGS_MEMPROT_SPIRAM_XIP_DROM_ALIGNMENT_HEAP, indirect=['config', 'target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_spiram_xip_drom_alignment_reg_execute_violation(dut: PanicTestDut, test_func_name: str) -> None: spiram_xip_drom_alignment_reg_execute_violation(dut, test_func_name) @@ -1249,6 +1289,7 @@ def test_non_cache_spiram_xip_drom_alignment_reg_execute_violation(dut: PanicTes @pytest.mark.generic @pytest.mark.temp_skip_ci(targets=['esp32h21'], reason='lack of runners') @idf_parametrize('config, target', CONFIGS_MEMPROT_INVALID_REGION_PROTECTION_USING_PMA, indirect=['config', 'target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_invalid_memory_region_write_violation(dut: PanicTestDut, test_func_name: str) -> None: dut.run_test_func(test_func_name) dut.expect_gme('Store access fault') @@ -1259,6 +1300,7 @@ def test_invalid_memory_region_write_violation(dut: PanicTestDut, test_func_name @pytest.mark.generic @pytest.mark.temp_skip_ci(targets=['esp32h21'], reason='lack of runners') @idf_parametrize('config, target', CONFIGS_MEMPROT_INVALID_REGION_PROTECTION_USING_PMA, indirect=['config', 'target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_invalid_memory_region_execute_violation(dut: PanicTestDut, test_func_name: str) -> None: dut.run_test_func(test_func_name) dut.expect_gme('Instruction access fault') @@ -1269,6 +1311,7 @@ def test_invalid_memory_region_execute_violation(dut: PanicTestDut, test_func_na @pytest.mark.generic @pytest.mark.parametrize('config', ['gdbstub_coredump'], indirect=True) @idf_parametrize('target', ['esp32'], indirect=['target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_gdbstub_coredump(dut: PanicTestDut) -> None: test_func_name = 'test_storeprohibited' dut.run_test_func(test_func_name) @@ -1294,6 +1337,7 @@ def test_hw_stack_guard_cpu(dut: PanicTestDut, cpu: int) -> None: @pytest.mark.generic @idf_parametrize('config, target', CONFIGS_HW_STACK_GUARD, indirect=['config', 'target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_hw_stack_guard_cpu0(dut: PanicTestDut, config: str, test_func_name: str) -> None: dut.run_test_func(test_func_name) test_hw_stack_guard_cpu(dut, 0) @@ -1311,6 +1355,7 @@ def test_hw_stack_guard_cpu1(dut: PanicTestDut, config: str, test_func_name: str @pytest.mark.parametrize('config', ['panic'], indirect=True) @pytest.mark.generic @idf_parametrize('target', ['esp32'], indirect=['target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_illegal_access(dut: PanicTestDut, config: str, test_func_name: str) -> None: dut.run_test_func(test_func_name) if dut.is_xtensa: @@ -1324,6 +1369,7 @@ def test_illegal_access(dut: PanicTestDut, config: str, test_func_name: str) -> @pytest.mark.generic @idf_parametrize('config, target', CONFIG_CAPTURE_DRAM, indirect=['config', 'target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_capture_dram(dut: PanicTestDut, config: str, test_func_name: str) -> None: dut.run_test_func(test_func_name) regex_pattern = rb'assert failed:[\s\w()]*?\s[.\w/]*\.(?:c|cpp|h|hpp):\d.*$' @@ -1380,6 +1426,7 @@ def _test_coredump_summary(dut: PanicTestDut, flash_encrypted: bool, coredump_en @pytest.mark.generic @idf_parametrize('config, target', CONFIG_COREDUMP_SUMMARY, indirect=['config', 'target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_coredump_summary(dut: PanicTestDut) -> None: _test_coredump_summary(dut, False, False) @@ -1393,6 +1440,7 @@ def test_coredump_summary_flash_encrypted(dut: PanicTestDut, config: str) -> Non @pytest.mark.generic @idf_parametrize('config', ['coredump_flash_default'], indirect=['config']) @idf_parametrize('target', TARGETS_ALL, indirect=['target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_tcb_corrupted(dut: PanicTestDut, target: str, config: str, test_func_name: str) -> None: dut.run_test_func(test_func_name) if dut.is_xtensa: @@ -1426,6 +1474,7 @@ def test_tcb_corrupted(dut: PanicTestDut, target: str, config: str, test_func_na @pytest.mark.generic @idf_parametrize('config, target', CONFIG_PANIC_HALT, indirect=['config', 'target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15612 def test_panic_halt(dut: PanicTestDut) -> None: dut.run_test_func('test_panic_halt') dut.expect_exact('CPU halted.', timeout=30) diff --git a/tools/test_apps/system/unicore_bootloader/pytest_unicore_bootloader.py b/tools/test_apps/system/unicore_bootloader/pytest_unicore_bootloader.py index de5222c79cc..6bc4c0cbedf 100644 --- a/tools/test_apps/system/unicore_bootloader/pytest_unicore_bootloader.py +++ b/tools/test_apps/system/unicore_bootloader/pytest_unicore_bootloader.py @@ -12,6 +12,7 @@ from pytest_embedded_idf.utils import soc_filtered_targets @pytest.mark.generic @pytest.mark.parametrize('config', ['multicore', 'multicore_psram'], indirect=True) @idf_parametrize('target', soc_filtered_targets('SOC_CPU_CORES_NUM > 1'), indirect=['target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15620 def test_multicore_app_and_unicore_bootloader(dut: Dut, app_downloader, config) -> None: # type: ignore dut.expect('Multicore bootloader') dut.expect('Multicore app') @@ -36,6 +37,7 @@ def test_multicore_app_and_unicore_bootloader(dut: Dut, app_downloader, config) @pytest.mark.generic @pytest.mark.parametrize('config', ['unicore', 'unicore_psram'], indirect=True) @idf_parametrize('target', soc_filtered_targets('SOC_CPU_CORES_NUM > 1'), indirect=['target']) +@pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='cannot pass') # TODO: IDF-15620 def test_unicore_app_and_multicore_bootloader(dut: Dut, app_downloader, config) -> None: # type: ignore dut.expect('Unicore bootloader') dut.expect('Unicore app')