ci(system): update system pytest apps to use SOC_CAPs

This commit is contained in:
Marius Vikhammer
2025-07-29 10:14:25 +08:00
parent 521f3e3911
commit 9788d33351
14 changed files with 50 additions and 37 deletions

View File

@@ -3,12 +3,13 @@
import pytest import pytest
from pytest_embedded import Dut from pytest_embedded import Dut
from pytest_embedded_idf.utils import idf_parametrize from pytest_embedded_idf.utils import idf_parametrize
from pytest_embedded_idf.utils import soc_filtered_targets
@pytest.mark.generic @pytest.mark.generic
@idf_parametrize( @idf_parametrize(
'target', 'target',
['esp32', 'esp32c3', 'esp32c5', 'esp32c6', 'esp32h2', 'esp32s2', 'esp32s3', 'esp32p4'], soc_filtered_targets('SOC_RTC_MEM_SUPPORTED == 1'),
indirect=['target'], indirect=['target'],
) )
def test_rtc_reserved_memory(dut: Dut) -> None: def test_rtc_reserved_memory(dut: Dut) -> None:

View File

@@ -3,6 +3,7 @@
import pytest import pytest
from pytest_embedded import Dut from pytest_embedded import Dut
from pytest_embedded_idf.utils import idf_parametrize from pytest_embedded_idf.utils import idf_parametrize
from pytest_embedded_idf.utils import soc_filtered_targets
@pytest.mark.generic @pytest.mark.generic
@@ -13,6 +14,6 @@ from pytest_embedded_idf.utils import idf_parametrize
], ],
indirect=True, 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: def test_dma2d(dut: Dut) -> None:
dut.run_all_single_board_cases() dut.run_all_single_board_cases()

View File

@@ -3,6 +3,7 @@
import pytest import pytest
from pytest_embedded import Dut from pytest_embedded import Dut
from pytest_embedded_idf.utils import idf_parametrize 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: 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 @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: def test_rtc_8md256_deepsleep(dut: Dut) -> None:
deepsleep_test(dut, '"Can use 8MD256 as RTC clock source in deepsleep"') 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 @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: def test_rtc_8md256_lightsleep(dut: Dut) -> None:
lightsleep_test(dut, '"Can use 8MD256 as RTC clock source in lightsleep"') lightsleep_test(dut, '"Can use 8MD256 as RTC clock source in lightsleep"')

View File

@@ -3,9 +3,10 @@
import pytest import pytest
from pytest_embedded import Dut from pytest_embedded import Dut
from pytest_embedded_idf.utils import idf_parametrize from pytest_embedded_idf.utils import idf_parametrize
from pytest_embedded_idf.utils import soc_filtered_targets
@pytest.mark.generic @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: def test_usb_phy(dut: Dut) -> None:
dut.run_all_single_board_cases(group='phy') dut.run_all_single_board_cases(group='phy')

View File

@@ -3,10 +3,11 @@
import pytest import pytest
from pytest_embedded import Dut from pytest_embedded import Dut
from pytest_embedded_idf.utils import idf_parametrize 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.temp_skip_ci(targets=['esp32p4'], reason='lack of runners for now')
@pytest.mark.lp_i2s @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: def test_efuse_component_ut(dut: Dut) -> None:
dut.run_all_single_board_cases() dut.run_all_single_board_cases()

View File

@@ -11,6 +11,9 @@ components/esp_system/test_apps/console:
- if: CONFIG_NAME == "console_no_vfs" and SOC_USB_SERIAL_JTAG_SUPPORTED != 1 - if: CONFIG_NAME == "console_no_vfs" and SOC_USB_SERIAL_JTAG_SUPPORTED != 1
disable_test: disable_test:
- if: CONFIG_NAME == "simple" and IDF_TARGET != "esp32" - 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: components/esp_system/test_apps/esp_system_unity_tests:
disable: disable:

View File

@@ -4,6 +4,7 @@ import pexpect
import pytest import pytest
from pytest_embedded import Dut from pytest_embedded import Dut
from pytest_embedded_idf.utils import idf_parametrize 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: 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.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('config', ['serial_jtag_only'], indirect=['config'])
@idf_parametrize('flash_port', ['/dev/serial_ports/ttyUSB-esp32'], indirect=['flash_port']) @idf_parametrize('flash_port', ['/dev/serial_ports/ttyUSB-esp32'], indirect=['flash_port'])
@idf_parametrize('port', ['/dev/serial_ports/ttyACM-esp32'], indirect=['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: def test_esp_system_console_only_serial_jtag(dut: Dut) -> None:
dut.expect('2nd stage bootloader') dut.expect('2nd stage bootloader')
dut.expect('Hello World') 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.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('config', ['serial_jtag_only_no_vfs'], indirect=['config'])
@idf_parametrize('flash_port', ['/dev/serial_ports/ttyUSB-esp32'], indirect=['flash_port']) @idf_parametrize('flash_port', ['/dev/serial_ports/ttyUSB-esp32'], indirect=['flash_port'])
@idf_parametrize('port', ['/dev/serial_ports/ttyACM-esp32'], indirect=['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: def test_esp_system_console_only_serial_jtag_no_vfs(dut: Dut) -> None:
dut.expect('2nd stage bootloader') dut.expect('2nd stage bootloader')
dut.expect('Hello World') dut.expect('Hello World')
@pytest.mark.usb_serial_jtag @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('config', ['console_no_vfs'], indirect=['config'])
@idf_parametrize('flash_port', ['/dev/serial_ports/ttyUSB-esp32'], indirect=['flash_port']) @idf_parametrize('flash_port', ['/dev/serial_ports/ttyUSB-esp32'], indirect=['flash_port'])
@idf_parametrize('port', ['/dev/serial_ports/ttyACM-esp32'], indirect=['port']) @idf_parametrize('port', ['/dev/serial_ports/ttyACM-esp32'], indirect=['port'])
@idf_parametrize( @idf_parametrize('target', soc_filtered_targets('SOC_USB_SERIAL_JTAG_SUPPORTED == 1'), indirect=['target'])
'target', ['esp32c2', 'esp32c3', 'esp32c5', 'esp32c6', 'esp32c61', 'esp32h2', 'esp32s3'], indirect=['target']
)
def test_esp_system_console_secondary_serial_jtag(dut: Dut) -> None: def test_esp_system_console_secondary_serial_jtag(dut: Dut) -> None:
dut.expect('2nd stage bootloader') dut.expect('2nd stage bootloader')
dut.expect('Hello World') dut.expect('Hello World')

View File

@@ -3,6 +3,7 @@
import pytest import pytest
from pytest_embedded import Dut from pytest_embedded import Dut
from pytest_embedded_idf.utils import idf_parametrize from pytest_embedded_idf.utils import idf_parametrize
from pytest_embedded_idf.utils import soc_filtered_targets
@pytest.mark.generic @pytest.mark.generic
@@ -11,11 +12,11 @@ from pytest_embedded_idf.utils import idf_parametrize
[ [
('default', 'supported_targets'), ('default', 'supported_targets'),
('pd_vddsdio', 'supported_targets'), ('pd_vddsdio', 'supported_targets'),
('psram', 'esp32'), *(('psram', target) for target in soc_filtered_targets('SOC_SPIRAM_SUPPORTED == 1')),
('psram', 'esp32p4'), *(
('psram', 'esp32s2'), ('psram_with_pd_top', target)
('psram', 'esp32s3'), for target in soc_filtered_targets('SOC_SPIRAM_SUPPORTED == 1 and SOC_PM_SUPPORT_TOP_PD == 1')
('psram_with_pd_top', 'esp32p4'), ),
('single_core_esp32', 'esp32'), ('single_core_esp32', 'esp32'),
], ],
indirect=['config', 'target'], indirect=['config', 'target'],

View File

@@ -3,6 +3,7 @@
import pytest import pytest
from pytest_embedded import Dut from pytest_embedded import Dut
from pytest_embedded_idf.utils import idf_parametrize from pytest_embedded_idf.utils import idf_parametrize
from pytest_embedded_idf.utils import soc_filtered_targets
@pytest.mark.generic @pytest.mark.generic
@@ -43,11 +44,7 @@ def test_heap_in_flash(dut: Dut) -> None:
@pytest.mark.generic @pytest.mark.generic
@pytest.mark.parametrize( @pytest.mark.parametrize(
'target', 'target',
[ soc_filtered_targets('SOC_SPIRAM_SUPPORTED == 1'),
'esp32',
'esp32s2',
'esp32s3',
],
) )
@pytest.mark.parametrize('config', ['psram', 'psram_all_ext']) @pytest.mark.parametrize('config', ['psram', 'psram_all_ext'])
def test_heap(dut: Dut) -> None: def test_heap(dut: Dut) -> None:

View File

@@ -4,6 +4,7 @@ import pytest
from pytest_embedded import Dut from pytest_embedded import Dut
from pytest_embedded_idf import CaseTester from pytest_embedded_idf import CaseTester
from pytest_embedded_idf.utils import idf_parametrize from pytest_embedded_idf.utils import idf_parametrize
from pytest_embedded_idf.utils import soc_filtered_targets
@pytest.mark.generic @pytest.mark.generic
@@ -14,7 +15,7 @@ from pytest_embedded_idf.utils import idf_parametrize
], ],
indirect=True, 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: def test_lp_core(dut: Dut) -> None:
dut.run_all_single_board_cases() dut.run_all_single_board_cases()
@@ -27,7 +28,11 @@ def test_lp_core(dut: Dut) -> None:
], ],
indirect=True, 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: def test_lp_core_xtal(dut: Dut) -> None:
dut.run_all_single_board_cases() dut.run_all_single_board_cases()
@@ -40,7 +45,7 @@ def test_lp_core_xtal(dut: Dut) -> None:
], ],
indirect=True, 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: def test_lp_vad(dut: Dut) -> None:
dut.run_all_single_board_cases(group='lp_vad') 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.generic_multi_device
@pytest.mark.parametrize( @pytest.mark.parametrize(
'target', 'target',
[ soc_filtered_targets('SOC_LP_CORE_SUPPORTED == 1'),
'esp32c5',
'esp32c6',
'esp32p4',
],
indirect=True, indirect=True,
) )
@pytest.mark.parametrize( @pytest.mark.parametrize(

View File

@@ -3,10 +3,11 @@
import pytest import pytest
from pytest_embedded import Dut from pytest_embedded import Dut
from pytest_embedded_idf.utils import idf_parametrize from pytest_embedded_idf.utils import idf_parametrize
from pytest_embedded_idf.utils import soc_filtered_targets
@pytest.mark.generic @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: def test_lp_core_hp_uart_print(dut: Dut) -> None:
dut.expect_exact('Press ENTER to see the list of tests') dut.expect_exact('Press ENTER to see the list of tests')
dut.write('"lp-print can output to hp-uart"') 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 @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: def test_lp_core_panic(dut: Dut) -> None:
dut.expect_exact('Press ENTER to see the list of tests') dut.expect_exact('Press ENTER to see the list of tests')
dut.write('"LP-Core panic"') dut.write('"LP-Core panic"')
@@ -27,7 +28,7 @@ def test_lp_core_panic(dut: Dut) -> None:
@pytest.mark.generic @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: def test_lp_core_shared_mem(dut: Dut) -> None:
dut.expect_exact('Press ENTER to see the list of tests') dut.expect_exact('Press ENTER to see the list of tests')
dut.write('"LP-Core Shared-mem"') dut.write('"LP-Core Shared-mem"')

View File

@@ -3,9 +3,10 @@
import pytest import pytest
from pytest_embedded import Dut from pytest_embedded import Dut
from pytest_embedded_idf.utils import idf_parametrize from pytest_embedded_idf.utils import idf_parametrize
from pytest_embedded_idf.utils import soc_filtered_targets
@pytest.mark.generic @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: def test_ulp_fsm(dut: Dut) -> None:
dut.run_all_single_board_cases() dut.run_all_single_board_cases()

View File

@@ -3,16 +3,17 @@
import pytest import pytest
from pytest_embedded import Dut from pytest_embedded import Dut
from pytest_embedded_idf.utils import idf_parametrize from pytest_embedded_idf.utils import idf_parametrize
from pytest_embedded_idf.utils import soc_filtered_targets
@pytest.mark.generic @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 def test_ulp_riscv(dut: Dut) -> None: # type: ignore
dut.run_all_single_board_cases() dut.run_all_single_board_cases()
@pytest.mark.generic_multi_device @pytest.mark.generic_multi_device
@pytest.mark.parametrize('count', [2], indirect=True) @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 def test_ulp_riscv_multi_device(case_tester) -> None: # type: ignore
case_tester.run_all_multi_dev_cases(reset=True) case_tester.run_all_multi_dev_cases(reset=True)

View File

@@ -7,11 +7,12 @@ import pytest
from idf_ci_utils import IDF_PATH from idf_ci_utils import IDF_PATH
from pytest_embedded import Dut from pytest_embedded import Dut
from pytest_embedded_idf.utils import idf_parametrize from pytest_embedded_idf.utils import idf_parametrize
from pytest_embedded_idf.utils import soc_filtered_targets
@pytest.mark.generic @pytest.mark.generic
@pytest.mark.parametrize('config', ['multicore', 'multicore_psram'], indirect=True) @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 def test_multicore_app_and_unicore_bootloader(dut: Dut, app_downloader, config) -> None: # type: ignore
dut.expect('Multicore bootloader') dut.expect('Multicore bootloader')
dut.expect('Multicore app') 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.generic
@pytest.mark.parametrize('config', ['unicore', 'unicore_psram'], indirect=True) @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 def test_unicore_app_and_multicore_bootloader(dut: Dut, app_downloader, config) -> None: # type: ignore
dut.expect('Unicore bootloader') dut.expect('Unicore bootloader')
dut.expect('Unicore app') dut.expect('Unicore app')