From 9788d33351629d3845d146926a6c2ab7f4673753 Mon Sep 17 00:00:00 2001 From: Marius Vikhammer Date: Tue, 29 Jul 2025 10:14:25 +0800 Subject: [PATCH] ci(system): update system pytest apps to use SOC_CAPs --- .../rtc_custom_section/pytest_rtc_mem.py | 3 ++- .../test_apps/dma2d/pytest_dma2d.py | 3 ++- .../test_apps/rtc_8md256/pytest_rtc_8md256.py | 5 +++-- .../test_apps/usb_phy/pytest_usb_phy.py | 3 ++- .../test_apps/vad_wakeup/pytest_wakeup_vad.py | 3 ++- .../esp_system/test_apps/.build-test-rules.yml | 3 +++ .../console/pytest_esp_system_console_tests.py | 12 +++++++----- .../pytest_esp_system_unity_tests.py | 11 ++++++----- .../heap/test_apps/heap_tests/pytest_heap.py | 7 ++----- .../lp_core_basic_tests/pytest_lp_core_basic.py | 17 +++++++++-------- .../lp_core_hp_uart/pytest_lp_core_hp_uart.py | 7 ++++--- .../ulp/test_apps/ulp_fsm/pytest_ulp_fsm_app.py | 3 ++- .../ulp/test_apps/ulp_riscv/pytest_ulp_riscv.py | 5 +++-- .../pytest_unicore_bootloader.py | 5 +++-- 14 files changed, 50 insertions(+), 37 deletions(-) diff --git a/components/bootloader_support/test_apps/rtc_custom_section/pytest_rtc_mem.py b/components/bootloader_support/test_apps/rtc_custom_section/pytest_rtc_mem.py index 1ccf193dfb..ab704ad147 100644 --- a/components/bootloader_support/test_apps/rtc_custom_section/pytest_rtc_mem.py +++ b/components/bootloader_support/test_apps/rtc_custom_section/pytest_rtc_mem.py @@ -3,12 +3,13 @@ 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', 'esp32h2', 'esp32s2', 'esp32s3', 'esp32p4'], + soc_filtered_targets('SOC_RTC_MEM_SUPPORTED == 1'), indirect=['target'], ) def test_rtc_reserved_memory(dut: Dut) -> None: diff --git a/components/esp_hw_support/test_apps/dma2d/pytest_dma2d.py b/components/esp_hw_support/test_apps/dma2d/pytest_dma2d.py index 314949f222..8f02215a63 100644 --- a/components/esp_hw_support/test_apps/dma2d/pytest_dma2d.py +++ b/components/esp_hw_support/test_apps/dma2d/pytest_dma2d.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,6 +14,6 @@ from pytest_embedded_idf.utils import idf_parametrize ], indirect=True, ) -@idf_parametrize('target', ['esp32p4'], indirect=['target']) +@idf_parametrize('target', soc_filtered_targets('SOC_DMA2D_SUPPORTED == 1'), indirect=['target']) def test_dma2d(dut: Dut) -> None: dut.run_all_single_board_cases() diff --git a/components/esp_hw_support/test_apps/rtc_8md256/pytest_rtc_8md256.py b/components/esp_hw_support/test_apps/rtc_8md256/pytest_rtc_8md256.py index 1942b0623d..5d50cade2a 100644 --- a/components/esp_hw_support/test_apps/rtc_8md256/pytest_rtc_8md256.py +++ b/components/esp_hw_support/test_apps/rtc_8md256/pytest_rtc_8md256.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 def deepsleep_test(dut: Dut, case_name: str) -> None: @@ -20,7 +21,7 @@ def deepsleep_test(dut: Dut, case_name: str) -> None: @pytest.mark.generic -@idf_parametrize('target', ['esp32', 'esp32s2', 'esp32s3', 'esp32c3', 'esp32c2'], indirect=['target']) +@idf_parametrize('target', soc_filtered_targets('SOC_RTC_SLOW_CLK_SUPPORT_RC_FAST_D256 == 1'), indirect=['target']) def test_rtc_8md256_deepsleep(dut: Dut) -> None: deepsleep_test(dut, '"Can use 8MD256 as RTC clock source in deepsleep"') @@ -43,7 +44,7 @@ def lightsleep_test(dut: Dut, case_name: str) -> None: @pytest.mark.generic -@idf_parametrize('target', ['esp32', 'esp32s2', 'esp32s3', 'esp32c3'], indirect=['target']) +@idf_parametrize('target', soc_filtered_targets('SOC_RTC_SLOW_CLK_SUPPORT_RC_FAST_D256 == 1'), indirect=['target']) def test_rtc_8md256_lightsleep(dut: Dut) -> None: lightsleep_test(dut, '"Can use 8MD256 as RTC clock source in lightsleep"') diff --git a/components/esp_hw_support/test_apps/usb_phy/pytest_usb_phy.py b/components/esp_hw_support/test_apps/usb_phy/pytest_usb_phy.py index 586730c428..30628b63f0 100644 --- a/components/esp_hw_support/test_apps/usb_phy/pytest_usb_phy.py +++ b/components/esp_hw_support/test_apps/usb_phy/pytest_usb_phy.py @@ -3,9 +3,10 @@ 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', ['esp32s2', 'esp32s3', 'esp32p4'], indirect=['target']) +@idf_parametrize('target', soc_filtered_targets('SOC_USB_OTG_SUPPORTED == 1'), indirect=['target']) def test_usb_phy(dut: Dut) -> None: dut.run_all_single_board_cases(group='phy') diff --git a/components/esp_hw_support/test_apps/vad_wakeup/pytest_wakeup_vad.py b/components/esp_hw_support/test_apps/vad_wakeup/pytest_wakeup_vad.py index 3413396876..9f7f36670f 100644 --- a/components/esp_hw_support/test_apps/vad_wakeup/pytest_wakeup_vad.py +++ b/components/esp_hw_support/test_apps/vad_wakeup/pytest_wakeup_vad.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.temp_skip_ci(targets=['esp32p4'], reason='lack of runners for now') @pytest.mark.lp_i2s -@idf_parametrize('target', ['esp32p4'], indirect=['target']) +@idf_parametrize('target', soc_filtered_targets('SOC_LP_VAD_SUPPORTED == 1'), indirect=['target']) def test_efuse_component_ut(dut: Dut) -> None: dut.run_all_single_board_cases() diff --git a/components/esp_system/test_apps/.build-test-rules.yml b/components/esp_system/test_apps/.build-test-rules.yml index d68503725d..15ddc5d8db 100644 --- a/components/esp_system/test_apps/.build-test-rules.yml +++ b/components/esp_system/test_apps/.build-test-rules.yml @@ -11,6 +11,9 @@ components/esp_system/test_apps/console: - if: CONFIG_NAME == "console_no_vfs" and SOC_USB_SERIAL_JTAG_SUPPORTED != 1 disable_test: - if: CONFIG_NAME == "simple" and IDF_TARGET != "esp32" + - if: IDF_TARGET in ["esp32p4", "esp32c5"] + temporary: true + reason: runner issue, IDFCI-3064 components/esp_system/test_apps/esp_system_unity_tests: disable: diff --git a/components/esp_system/test_apps/console/pytest_esp_system_console_tests.py b/components/esp_system/test_apps/console/pytest_esp_system_console_tests.py index 42fdef5e52..186637fbba 100644 --- a/components/esp_system/test_apps/console/pytest_esp_system_console_tests.py +++ b/components/esp_system/test_apps/console/pytest_esp_system_console_tests.py @@ -4,6 +4,7 @@ import pexpect import pytest from pytest_embedded import Dut from pytest_embedded_idf.utils import idf_parametrize +from pytest_embedded_idf.utils import soc_filtered_targets def not_expect(dut: Dut, output_regex: str) -> None: @@ -24,10 +25,11 @@ def test_esp_system_console_no_output_uart(dut: Dut) -> None: @pytest.mark.usb_serial_jtag +@pytest.mark.temp_skip_ci(targets=['esp32p4', 'esp32c5'], reason='IDFCI-3064, temporary lack runner') @idf_parametrize('config', ['serial_jtag_only'], indirect=['config']) @idf_parametrize('flash_port', ['/dev/serial_ports/ttyUSB-esp32'], indirect=['flash_port']) @idf_parametrize('port', ['/dev/serial_ports/ttyACM-esp32'], indirect=['port']) -@idf_parametrize('target', ['esp32c2', 'esp32c3', 'esp32c6', 'esp32h2', 'esp32s3'], indirect=['target']) +@idf_parametrize('target', soc_filtered_targets('SOC_USB_SERIAL_JTAG_SUPPORTED == 1'), indirect=['target']) def test_esp_system_console_only_serial_jtag(dut: Dut) -> None: dut.expect('2nd stage bootloader') dut.expect('Hello World') @@ -38,22 +40,22 @@ def test_esp_system_console_only_serial_jtag(dut: Dut) -> None: @pytest.mark.usb_serial_jtag +@pytest.mark.temp_skip_ci(targets=['esp32p4', 'esp32c5'], reason='IDFCI-3064, temporary lack runner') @idf_parametrize('config', ['serial_jtag_only_no_vfs'], indirect=['config']) @idf_parametrize('flash_port', ['/dev/serial_ports/ttyUSB-esp32'], indirect=['flash_port']) @idf_parametrize('port', ['/dev/serial_ports/ttyACM-esp32'], indirect=['port']) -@idf_parametrize('target', ['esp32c2', 'esp32c3', 'esp32c6', 'esp32h2', 'esp32s3'], indirect=['target']) +@idf_parametrize('target', soc_filtered_targets('SOC_USB_SERIAL_JTAG_SUPPORTED == 1'), indirect=['target']) def test_esp_system_console_only_serial_jtag_no_vfs(dut: Dut) -> None: dut.expect('2nd stage bootloader') dut.expect('Hello World') @pytest.mark.usb_serial_jtag +@pytest.mark.temp_skip_ci(targets=['esp32p4', 'esp32c5'], reason='IDFCI-3064, temporary lack runner') @idf_parametrize('config', ['console_no_vfs'], indirect=['config']) @idf_parametrize('flash_port', ['/dev/serial_ports/ttyUSB-esp32'], indirect=['flash_port']) @idf_parametrize('port', ['/dev/serial_ports/ttyACM-esp32'], indirect=['port']) -@idf_parametrize( - 'target', ['esp32c2', 'esp32c3', 'esp32c5', 'esp32c6', 'esp32c61', 'esp32h2', 'esp32s3'], indirect=['target'] -) +@idf_parametrize('target', soc_filtered_targets('SOC_USB_SERIAL_JTAG_SUPPORTED == 1'), indirect=['target']) def test_esp_system_console_secondary_serial_jtag(dut: Dut) -> None: dut.expect('2nd stage bootloader') dut.expect('Hello World') 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 3d0d92f227..9882eb7ef0 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 @@ -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 @@ -11,11 +12,11 @@ from pytest_embedded_idf.utils import idf_parametrize [ ('default', 'supported_targets'), ('pd_vddsdio', 'supported_targets'), - ('psram', 'esp32'), - ('psram', 'esp32p4'), - ('psram', 'esp32s2'), - ('psram', 'esp32s3'), - ('psram_with_pd_top', 'esp32p4'), + *(('psram', target) for target in soc_filtered_targets('SOC_SPIRAM_SUPPORTED == 1')), + *( + ('psram_with_pd_top', target) + for target in soc_filtered_targets('SOC_SPIRAM_SUPPORTED == 1 and SOC_PM_SUPPORT_TOP_PD == 1') + ), ('single_core_esp32', 'esp32'), ], indirect=['config', 'target'], diff --git a/components/heap/test_apps/heap_tests/pytest_heap.py b/components/heap/test_apps/heap_tests/pytest_heap.py index eaa23700be..37093d0eac 100644 --- a/components/heap/test_apps/heap_tests/pytest_heap.py +++ b/components/heap/test_apps/heap_tests/pytest_heap.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 @@ -43,11 +44,7 @@ def test_heap_in_flash(dut: Dut) -> None: @pytest.mark.generic @pytest.mark.parametrize( 'target', - [ - 'esp32', - 'esp32s2', - 'esp32s3', - ], + soc_filtered_targets('SOC_SPIRAM_SUPPORTED == 1'), ) @pytest.mark.parametrize('config', ['psram', 'psram_all_ext']) def test_heap(dut: Dut) -> None: diff --git a/components/ulp/test_apps/lp_core/lp_core_basic_tests/pytest_lp_core_basic.py b/components/ulp/test_apps/lp_core/lp_core_basic_tests/pytest_lp_core_basic.py index be0af9b9fc..1d37792a8e 100644 --- a/components/ulp/test_apps/lp_core/lp_core_basic_tests/pytest_lp_core_basic.py +++ b/components/ulp/test_apps/lp_core/lp_core_basic_tests/pytest_lp_core_basic.py @@ -4,6 +4,7 @@ import pytest from pytest_embedded import Dut from pytest_embedded_idf import CaseTester from pytest_embedded_idf.utils import idf_parametrize +from pytest_embedded_idf.utils import soc_filtered_targets @pytest.mark.generic @@ -14,7 +15,7 @@ from pytest_embedded_idf.utils import idf_parametrize ], indirect=True, ) -@idf_parametrize('target', ['esp32c5', 'esp32c6', 'esp32p4'], indirect=['target']) +@idf_parametrize('target', soc_filtered_targets('SOC_LP_CORE_SUPPORTED == 1'), indirect=['target']) def test_lp_core(dut: Dut) -> None: dut.run_all_single_board_cases() @@ -27,7 +28,11 @@ def test_lp_core(dut: Dut) -> None: ], indirect=True, ) -@idf_parametrize('target', ['esp32c5', 'esp32p4'], indirect=['target']) +@idf_parametrize( + 'target', + soc_filtered_targets('SOC_LP_CORE_SUPPORTED == 1 and SOC_CLK_LP_FAST_SUPPORT_XTAL == 1'), + indirect=['target'], +) def test_lp_core_xtal(dut: Dut) -> None: dut.run_all_single_board_cases() @@ -40,7 +45,7 @@ def test_lp_core_xtal(dut: Dut) -> None: ], indirect=True, ) -@idf_parametrize('target', ['esp32p4'], indirect=['target']) +@idf_parametrize('target', soc_filtered_targets('SOC_LP_CORE_SUPPORTED == 1'), indirect=['target']) def test_lp_vad(dut: Dut) -> None: dut.run_all_single_board_cases(group='lp_vad') @@ -63,11 +68,7 @@ def test_lp_core_multi_device(case_tester) -> None: # type: ignore @pytest.mark.generic_multi_device @pytest.mark.parametrize( 'target', - [ - 'esp32c5', - 'esp32c6', - 'esp32p4', - ], + soc_filtered_targets('SOC_LP_CORE_SUPPORTED == 1'), indirect=True, ) @pytest.mark.parametrize( diff --git a/components/ulp/test_apps/lp_core/lp_core_hp_uart/pytest_lp_core_hp_uart.py b/components/ulp/test_apps/lp_core/lp_core_hp_uart/pytest_lp_core_hp_uart.py index 72e91019cc..92d70c7aff 100644 --- a/components/ulp/test_apps/lp_core/lp_core_hp_uart/pytest_lp_core_hp_uart.py +++ b/components/ulp/test_apps/lp_core/lp_core_hp_uart/pytest_lp_core_hp_uart.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', ['esp32c5', 'esp32c6', 'esp32p4'], indirect=['target']) +@idf_parametrize('target', soc_filtered_targets('SOC_LP_CORE_SUPPORTED == 1'), indirect=['target']) def test_lp_core_hp_uart_print(dut: Dut) -> None: dut.expect_exact('Press ENTER to see the list of tests') dut.write('"lp-print can output to hp-uart"') @@ -16,7 +17,7 @@ def test_lp_core_hp_uart_print(dut: Dut) -> None: @pytest.mark.generic -@idf_parametrize('target', ['esp32c5', 'esp32c6', 'esp32p4'], indirect=['target']) +@idf_parametrize('target', soc_filtered_targets('SOC_LP_CORE_SUPPORTED == 1'), indirect=['target']) def test_lp_core_panic(dut: Dut) -> None: dut.expect_exact('Press ENTER to see the list of tests') dut.write('"LP-Core panic"') @@ -27,7 +28,7 @@ def test_lp_core_panic(dut: Dut) -> None: @pytest.mark.generic -@idf_parametrize('target', ['esp32c5', 'esp32c6', 'esp32p4'], indirect=['target']) +@idf_parametrize('target', soc_filtered_targets('SOC_LP_CORE_SUPPORTED == 1'), indirect=['target']) def test_lp_core_shared_mem(dut: Dut) -> None: dut.expect_exact('Press ENTER to see the list of tests') dut.write('"LP-Core Shared-mem"') diff --git a/components/ulp/test_apps/ulp_fsm/pytest_ulp_fsm_app.py b/components/ulp/test_apps/ulp_fsm/pytest_ulp_fsm_app.py index c41d7d4f0d..1d1996ef7f 100644 --- a/components/ulp/test_apps/ulp_fsm/pytest_ulp_fsm_app.py +++ b/components/ulp/test_apps/ulp_fsm/pytest_ulp_fsm_app.py @@ -3,9 +3,10 @@ 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'], indirect=['target']) +@idf_parametrize('target', soc_filtered_targets('SOC_ULP_FSM_SUPPORTED == 1'), indirect=['target']) def test_ulp_fsm(dut: Dut) -> None: dut.run_all_single_board_cases() diff --git a/components/ulp/test_apps/ulp_riscv/pytest_ulp_riscv.py b/components/ulp/test_apps/ulp_riscv/pytest_ulp_riscv.py index fa6160adf3..bbcde3e757 100644 --- a/components/ulp/test_apps/ulp_riscv/pytest_ulp_riscv.py +++ b/components/ulp/test_apps/ulp_riscv/pytest_ulp_riscv.py @@ -3,16 +3,17 @@ 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', ['esp32s2', 'esp32s3'], indirect=['target']) +@idf_parametrize('target', soc_filtered_targets('SOC_RISCV_COPROC_SUPPORTED == 1'), indirect=['target']) def test_ulp_riscv(dut: Dut) -> None: # type: ignore dut.run_all_single_board_cases() @pytest.mark.generic_multi_device @pytest.mark.parametrize('count', [2], indirect=True) -@idf_parametrize('target', ['esp32s2', 'esp32s3'], indirect=['target']) +@idf_parametrize('target', soc_filtered_targets('SOC_RISCV_COPROC_SUPPORTED == 1'), indirect=['target']) def test_ulp_riscv_multi_device(case_tester) -> None: # type: ignore case_tester.run_all_multi_dev_cases(reset=True) 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 91bf412bb2..0fde23758a 100644 --- a/tools/test_apps/system/unicore_bootloader/pytest_unicore_bootloader.py +++ b/tools/test_apps/system/unicore_bootloader/pytest_unicore_bootloader.py @@ -7,11 +7,12 @@ import pytest from idf_ci_utils import IDF_PATH 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 @pytest.mark.parametrize('config', ['multicore', 'multicore_psram'], indirect=True) -@idf_parametrize('target', ['esp32', 'esp32s3', 'esp32p4'], indirect=['target']) +@idf_parametrize('target', soc_filtered_targets('SOC_CPU_CORES_NUM > 1'), indirect=['target']) def test_multicore_app_and_unicore_bootloader(dut: Dut, app_downloader, config) -> None: # type: ignore dut.expect('Multicore bootloader') dut.expect('Multicore app') @@ -38,7 +39,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', ['esp32', 'esp32s3', 'esp32p4'], indirect=['target']) +@idf_parametrize('target', soc_filtered_targets('SOC_CPU_CORES_NUM > 1'), indirect=['target']) def test_unicore_app_and_multicore_bootloader(dut: Dut, app_downloader, config) -> None: # type: ignore dut.expect('Unicore bootloader') dut.expect('Unicore app')