ci(esp32h4): enable ci target test

This commit is contained in:
Chen Jichang
2026-04-08 11:06:38 +08:00
committed by morris
parent 73988b5968
commit 645ff40cde
50 changed files with 122 additions and 77 deletions

View File

@@ -11,7 +11,6 @@
bypass_check_test_targets:
- esp32h21
- esp32h4
#
# These lines would

View File

@@ -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)

View File

@@ -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:

View File

@@ -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()

View File

@@ -14,7 +14,7 @@ from pytest_embedded_idf.utils import idf_parametrize
],
indirect=True,
)
@idf_parametrize('target', ['esp32c6', 'esp32h2', 'esp32p4'], indirect=['target'])
@idf_parametrize('target', ['esp32c6', 'esp32h2', 'esp32p4', 'esp32h4'], indirect=['target'])
def test_parlio(dut: Dut) -> None:
dut.run_all_single_board_cases()
@@ -27,7 +27,7 @@ def test_parlio(dut: Dut) -> None:
],
indirect=True,
)
@idf_parametrize('target', ['esp32c6', 'esp32h2', 'esp32p4', 'esp32c5'], indirect=['target'])
@idf_parametrize('target', ['esp32c6', 'esp32h2', 'esp32p4', 'esp32c5', 'esp32h4'], indirect=['target'])
def test_parlio_with_virt_flash_enc(dut: Dut) -> None:
print(' - Erase flash')
dut.serial.erase_flash()

View File

@@ -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()

View File

@@ -15,7 +15,9 @@ from pytest_embedded_idf.utils import idf_parametrize
indirect=True,
)
@idf_parametrize(
'target', ['esp32', 'esp32s2', 'esp32c3', 'esp32c6', 'esp32h2', 'esp32p4', 'esp32s31'], indirect=['target']
'target',
['esp32', 'esp32s2', 'esp32c3', 'esp32c6', 'esp32h2', 'esp32p4', 'esp32s31', 'esp32h4'],
indirect=['target'],
)
def test_rmt(dut: Dut) -> None:
dut.run_all_single_board_cases()
@@ -30,7 +32,9 @@ def test_rmt(dut: Dut) -> None:
indirect=True,
)
@idf_parametrize(
'target', ['esp32', 'esp32s2', 'esp32c3', 'esp32c6', 'esp32h2', 'esp32p4', 'esp32c5'], indirect=['target']
'target',
['esp32', 'esp32s2', 'esp32c3', 'esp32c6', 'esp32h2', 'esp32p4', 'esp32c5', 'esp32h4'],
indirect=['target'],
)
def test_rmt_with_virt_flash_enc(dut: Dut) -> None:
print(' - Erase flash')

View File

@@ -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,7 +17,7 @@ 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'),
indirect=['target'],
)
def test_temperature_sensor_driver(dut: Dut) -> None:

View File

@@ -14,7 +14,7 @@ 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()

View File

@@ -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')
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')
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')
def test_gpio_wakeup_enable_lightsleep(dut: tuple[IdfDut, IdfDut]) -> None:
wakee = dut[0]
waker = dut[1]

View File

@@ -13,7 +13,7 @@ from pytest_embedded_idf.utils import idf_parametrize
],
indirect=True,
)
@idf_parametrize('target', ['esp32p4', 'esp32h2', 'esp32c5'], indirect=['target'])
@idf_parametrize('target', ['esp32p4', 'esp32h2', 'esp32c5', 'esp32h4'], indirect=['target'])
def test_parlio_lcd(dut: Dut) -> None:
dut.run_all_single_board_cases()
@@ -26,7 +26,7 @@ def test_parlio_lcd(dut: Dut) -> None:
],
indirect=True,
)
@idf_parametrize('target', ['esp32p4', 'esp32h2', 'esp32c5'], indirect=['target'])
@idf_parametrize('target', ['esp32p4', 'esp32h2', 'esp32c5', 'esp32h4'], indirect=['target'])
def test_parlio_lcd_with_virt_flash_enc(dut: Dut) -> None:
print(' - Erase flash')
dut.serial.erase_flash()

View File

@@ -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()

View File

@@ -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:

View File

@@ -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)

View File

@@ -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='bringup on this module is not done')
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='bringup on this module is not done')
def test_pthread_tls(dut: Dut) -> None:
dut.run_all_single_board_cases(group='thread-specific', timeout=300)

View File

@@ -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
@@ -25,7 +25,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:
@@ -114,7 +116,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:

View File

@@ -25,7 +25,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')
@@ -123,7 +123,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')
@@ -255,7 +255,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')
@@ -335,7 +335,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')
@@ -423,7 +423,9 @@ def test_c2_26mhz_xtal_gatt_config_func(app_path: str, dut: tuple[IdfDut, IdfDut
@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 = []

View File

@@ -21,7 +21,9 @@ BLE50_SECURITY_CI_CONFIGS = ['name']
[(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]
@@ -108,7 +110,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]
@@ -179,7 +183,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]

View File

@@ -24,7 +24,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='s31 light sleep not supported yet')

View File

@@ -751,7 +751,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 +763,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:

View File

@@ -8,7 +8,7 @@ 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')
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')

View File

@@ -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')

View File

@@ -7,7 +7,9 @@ from pytest_embedded_idf.utils import idf_parametrize
@pytest.mark.generic
@idf_parametrize(
'target', ['esp32', 'esp32s3', 'esp32c5', 'esp32c6', 'esp32h2', 'esp32p4', 'esp32s31'], indirect=['target']
'target',
['esp32', 'esp32s3', 'esp32c5', 'esp32c6', 'esp32h2', 'esp32p4', 'esp32s31', 'esp32h4'],
indirect=['target'],
)
def test_servo_mg996r_example(dut: Dut) -> None:
dut.expect_exact('example: Create timer and operator')

View File

@@ -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'],
)

View File

@@ -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')

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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:

View File

@@ -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:

View File

@@ -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:

View File

@@ -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')

View File

@@ -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')

View File

@@ -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:

View File

@@ -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:')

View File

@@ -42,7 +42,7 @@ 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', ['esp32c6', 'esp32c3', 'esp32c5', 'esp32s3', 'esp32h2', 'esp32p4', 'esp32h4'], indirect=['target'])
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.

View File

@@ -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

View File

@@ -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

View File

@@ -43,9 +43,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
@@ -269,9 +269,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

View File

@@ -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:

View File

@@ -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

View File

@@ -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)

View File

@@ -157,7 +157,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)

View File

@@ -16,6 +16,7 @@ SUPPORTED_TARGETS = [
'esp32c5',
'esp32c61',
'esp32s31',
'esp32h4',
]
PREVIEW_TARGETS: list[str] = [] # this PREVIEW_TARGETS excludes 'linux' target

View File

@@ -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(

View File

@@ -76,7 +76,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
@@ -145,6 +145,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
- if: IDF_TARGET == "esp32s31"
temporary: true
reason: cannot pass # TODO: IDF-15525

View File

@@ -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:

View File

@@ -16,7 +16,7 @@ TARGETS_XTENSA_DUAL_CORE = ['esp32', 'esp32s3']
TARGETS_XTENSA = TARGETS_XTENSA_SINGLE_CORE + TARGETS_XTENSA_DUAL_CORE
TARGETS_RISCV_SINGLE_CORE = ['esp32c2', 'esp32c3', 'esp32c5', 'esp32c6', 'esp32h2', 'esp32c61']
TARGETS_RISCV_DUAL_CORE = ['esp32p4', 'esp32s31']
TARGETS_RISCV_DUAL_CORE = ['esp32p4', 'esp32s31', 'esp32h4']
TARGETS_RISCV_TARGETS = TARGETS_RISCV_SINGLE_CORE + TARGETS_RISCV_DUAL_CORE
TARGETS_RISCV = TARGETS_RISCV_SINGLE_CORE + TARGETS_RISCV_DUAL_CORE
@@ -70,6 +70,7 @@ CONFIG_PANIC = list(
'esp32c6',
'esp32c61',
'esp32h2',
'esp32h4',
],
)
)