diff --git a/tools/test_apps/system/panic/pytest_panic.py b/tools/test_apps/system/panic/pytest_panic.py index 31b9de6090..254fb28e17 100644 --- a/tools/test_apps/system/panic/pytest_panic.py +++ b/tools/test_apps/system/panic/pytest_panic.py @@ -1,5 +1,6 @@ # SPDX-FileCopyrightText: 2022-2025 Espressif Systems (Shanghai) CO LTD # SPDX-License-Identifier: CC0-1.0 +import itertools import re from typing import Any from typing import List @@ -13,29 +14,13 @@ import pytest from pytest_embedded_idf.utils import idf_parametrize from test_panic_util import PanicTestDut -TARGETS_XTENSA_SINGLE_CORE = [ - pytest.mark.esp32s2, -] - -TARGETS_XTENSA_DUAL_CORE = [ - pytest.mark.esp32, - pytest.mark.esp32s3, -] - +TARGETS_XTENSA_SINGLE_CORE = ['esp32s2'] +TARGETS_XTENSA_DUAL_CORE = ['esp32', 'esp32s3'] TARGETS_XTENSA = TARGETS_XTENSA_SINGLE_CORE + TARGETS_XTENSA_DUAL_CORE -TARGETS_RISCV_SINGLE_CORE = [ - pytest.mark.esp32c2, - pytest.mark.esp32c3, - pytest.mark.esp32c5, - pytest.mark.esp32c6, - pytest.mark.esp32h2, - pytest.mark.esp32c61, -] - -TARGETS_RISCV_DUAL_CORE = [ - pytest.mark.esp32p4, -] +TARGETS_RISCV_SINGLE_CORE = ['esp32c2', 'esp32c3', 'esp32c5', 'esp32c6', 'esp32h2', 'esp32c61'] +TARGETS_RISCV_DUAL_CORE = ['esp32p4'] +TARGETS_RISCV_TARGETS = TARGETS_RISCV_SINGLE_CORE + TARGETS_RISCV_DUAL_CORE TARGETS_RISCV = TARGETS_RISCV_SINGLE_CORE + TARGETS_RISCV_DUAL_CORE @@ -45,72 +30,78 @@ TARGETS_ALL = TARGETS_XTENSA + TARGETS_RISCV # Some tests only run on dual-core targets, they use the config below. TARGETS_DUAL_CORE = TARGETS_XTENSA_DUAL_CORE + TARGETS_RISCV_DUAL_CORE -# Most tests run on all targets and with all configs. -# This list is passed to @pytest.mark.parametrize for each of the test cases. -# It creates an outer product of the sets: [configs] x [targets], -# with some exceptions. -CONFIGS = [ - pytest.param('coredump_flash_bin_crc', marks=TARGETS_ALL), - pytest.param('coredump_flash_elf_sha', marks=TARGETS_ALL), - pytest.param('coredump_flash_elf_soft_sha', marks=TARGETS_ALL), - pytest.param('coredump_uart_bin_crc', marks=TARGETS_ALL), - pytest.param('coredump_uart_elf_crc', marks=TARGETS_ALL), - pytest.param('coredump_flash_custom_stack', marks=TARGETS_RISCV), - pytest.param('gdbstub', marks=TARGETS_ALL), - pytest.param('panic', marks=TARGETS_ALL), -] +CONFIGS = list( + itertools.chain( + itertools.product( + [ + 'coredump_flash_bin_crc', + 'coredump_flash_elf_sha', + 'coredump_flash_elf_soft_sha', + 'coredump_uart_bin_crc', + 'coredump_uart_elf_crc', + 'gdbstub', + 'panic', + ], + TARGETS_ALL, + ), + itertools.product(['coredump_flash_custom_stack'], TARGETS_RISCV), + ) +) -CONFIGS_BACKTRACE = [ - # One single-core target and one dual-core target is enough - pytest.param('framepointer', marks=[pytest.mark.esp32c3, pytest.mark.esp32p4]), -] +CONFIG_PANIC = list(itertools.chain(itertools.product(['panic'], ['supported_targets']))) +CONFIG_PANIC_DUAL_CORE = list(itertools.chain(itertools.product(['panic'], TARGETS_DUAL_CORE))) -CONFIGS_DUAL_CORE = [ - pytest.param('coredump_flash_bin_crc', marks=TARGETS_DUAL_CORE), - pytest.param('coredump_flash_elf_sha', marks=TARGETS_DUAL_CORE), - pytest.param('coredump_uart_bin_crc', marks=TARGETS_DUAL_CORE), - pytest.param('coredump_uart_elf_crc', marks=TARGETS_DUAL_CORE), - pytest.param('gdbstub', marks=TARGETS_DUAL_CORE), - pytest.param('panic', marks=TARGETS_DUAL_CORE), -] +CONFIGS_BACKTRACE = list( + itertools.chain( + # One single-core target and one dual-core target is enough + itertools.product(['framepointer'], ['esp32c3', 'esp32p4']) + ) +) -# Some tests run on all targets but need to behave differently on the dual-core ones. -# This list is used to check if the target is a dual-core one. -TARGETS_DUAL_CORE_NAMES = [x.mark.name for x in TARGETS_DUAL_CORE] +CONFIGS_DUAL_CORE = list( + itertools.chain( + itertools.product( + [ + 'coredump_flash_bin_crc', + 'coredump_flash_elf_sha', + 'coredump_uart_bin_crc', + 'coredump_uart_elf_crc', + 'gdbstub', + 'panic', + ], + TARGETS_DUAL_CORE, + ) + ) +) -CONFIGS_EXTRAM_STACK = [ - pytest.param('coredump_flash_extram_stack_heap_esp32', marks=[pytest.mark.esp32, pytest.mark.psram]), - pytest.param('coredump_flash_extram_stack_heap_esp32s2', marks=[pytest.mark.esp32s2, pytest.mark.generic]), - pytest.param('coredump_flash_extram_stack_heap_esp32s3', marks=[pytest.mark.esp32s3, pytest.mark.quad_psram]), - pytest.param('coredump_flash_extram_stack_bss_esp32', marks=[pytest.mark.esp32, pytest.mark.psram]), - pytest.param('coredump_flash_extram_stack_bss_esp32s2', marks=[pytest.mark.esp32s2, pytest.mark.generic]), - pytest.param('coredump_flash_extram_stack_bss_esp32s3', marks=[pytest.mark.esp32s3, pytest.mark.quad_psram]), -] +CONFIGS_HW_STACK_GUARD = list( + itertools.chain( + itertools.product( + ['coredump_flash_bin_crc', 'coredump_uart_bin_crc', 'coredump_uart_elf_crc', 'gdbstub', 'panic'], + TARGETS_RISCV, + ) + ) +) -CONFIGS_HW_STACK_GUARD = [ - pytest.param('coredump_flash_bin_crc', marks=TARGETS_RISCV), - pytest.param('coredump_uart_bin_crc', marks=TARGETS_RISCV), - pytest.param('coredump_uart_elf_crc', marks=TARGETS_RISCV), - pytest.param('gdbstub', marks=TARGETS_RISCV), - pytest.param('panic', marks=TARGETS_RISCV), -] +CONFIGS_HW_STACK_GUARD_DUAL_CORE = list( + itertools.chain( + itertools.product( + ['coredump_flash_bin_crc', 'coredump_uart_bin_crc', 'coredump_uart_elf_crc', 'gdbstub', 'panic'], + TARGETS_RISCV_DUAL_CORE, + ) + ) +) -CONFIGS_HW_STACK_GUARD_DUAL_CORE = [ - pytest.param('coredump_flash_bin_crc', marks=TARGETS_RISCV_DUAL_CORE), - pytest.param('coredump_uart_bin_crc', marks=TARGETS_RISCV_DUAL_CORE), - pytest.param('coredump_uart_elf_crc', marks=TARGETS_RISCV_DUAL_CORE), - pytest.param('gdbstub', marks=TARGETS_RISCV_DUAL_CORE), - pytest.param('panic', marks=TARGETS_RISCV_DUAL_CORE), -] +CONFIG_CAPTURE_DRAM = list(itertools.chain(itertools.product(['coredump_flash_capture_dram'], TARGETS_ALL))) -CONFIG_CAPTURE_DRAM = [pytest.param('coredump_flash_capture_dram', marks=TARGETS_ALL)] +CONFIG_COREDUMP_SUMMARY = list(itertools.chain(itertools.product(['coredump_flash_elf_sha'], TARGETS_ALL))) -CONFIG_COREDUMP_SUMMARY = [pytest.param('coredump_flash_elf_sha', marks=TARGETS_ALL)] - -CONFIG_COREDUMP_SUMMARY_FLASH_ENCRYPTED = [ - pytest.param('coredump_flash_encrypted', marks=[pytest.mark.esp32, pytest.mark.esp32c3]), - pytest.param('coredump_flash_encrypted_coredump_plain', marks=[pytest.mark.esp32, pytest.mark.esp32c3]), -] +CONFIG_COREDUMP_SUMMARY_FLASH_ENCRYPTED = list( + itertools.chain( + itertools.product(['coredump_flash_encrypted'], ['esp32', 'esp32c3']), + itertools.product(['coredump_flash_encrypted_coredump_plain'], ['esp32', 'esp32c3']), + ) +) # Panic abort information will start with this string. PANIC_ABORT_PREFIX = 'Panic reason: ' @@ -189,80 +180,7 @@ def common_test( @pytest.mark.generic -@idf_parametrize( - 'config,target', - [ - ('coredump_flash_bin_crc', 'supported_targets'), - ('coredump_flash_elf_sha', 'esp32'), - ('coredump_flash_elf_sha', 'esp32c2'), - ('coredump_flash_elf_sha', 'esp32c3'), - ('coredump_flash_elf_sha', 'esp32c5'), - ('coredump_flash_elf_sha', 'esp32c6'), - ('coredump_flash_elf_sha', 'esp32c61'), - ('coredump_flash_elf_sha', 'esp32h2'), - ('coredump_flash_elf_sha', 'esp32p4'), - ('coredump_flash_elf_sha', 'esp32s2'), - ('coredump_flash_elf_sha', 'esp32s3'), - ('coredump_flash_elf_soft_sha', 'esp32'), - ('coredump_flash_elf_soft_sha', 'esp32c2'), - ('coredump_flash_elf_soft_sha', 'esp32c3'), - ('coredump_flash_elf_soft_sha', 'esp32c5'), - ('coredump_flash_elf_soft_sha', 'esp32c6'), - ('coredump_flash_elf_soft_sha', 'esp32c61'), - ('coredump_flash_elf_soft_sha', 'esp32h2'), - ('coredump_flash_elf_soft_sha', 'esp32p4'), - ('coredump_flash_elf_soft_sha', 'esp32s2'), - ('coredump_flash_elf_soft_sha', 'esp32s3'), - ('coredump_uart_bin_crc', 'esp32'), - ('coredump_uart_bin_crc', 'esp32c2'), - ('coredump_uart_bin_crc', 'esp32c3'), - ('coredump_uart_bin_crc', 'esp32c5'), - ('coredump_uart_bin_crc', 'esp32c6'), - ('coredump_uart_bin_crc', 'esp32c61'), - ('coredump_uart_bin_crc', 'esp32h2'), - ('coredump_uart_bin_crc', 'esp32p4'), - ('coredump_uart_bin_crc', 'esp32s2'), - ('coredump_uart_bin_crc', 'esp32s3'), - ('coredump_uart_elf_crc', 'esp32'), - ('coredump_uart_elf_crc', 'esp32c2'), - ('coredump_uart_elf_crc', 'esp32c3'), - ('coredump_uart_elf_crc', 'esp32c5'), - ('coredump_uart_elf_crc', 'esp32c6'), - ('coredump_uart_elf_crc', 'esp32c61'), - ('coredump_uart_elf_crc', 'esp32h2'), - ('coredump_uart_elf_crc', 'esp32p4'), - ('coredump_uart_elf_crc', 'esp32s2'), - ('coredump_uart_elf_crc', 'esp32s3'), - ('coredump_flash_custom_stack', 'esp32c2'), - ('coredump_flash_custom_stack', 'esp32c3'), - ('coredump_flash_custom_stack', 'esp32c5'), - ('coredump_flash_custom_stack', 'esp32c6'), - ('coredump_flash_custom_stack', 'esp32c61'), - ('coredump_flash_custom_stack', 'esp32h2'), - ('coredump_flash_custom_stack', 'esp32p4'), - ('gdbstub', 'esp32'), - ('gdbstub', 'esp32c2'), - ('gdbstub', 'esp32c3'), - ('gdbstub', 'esp32c5'), - ('gdbstub', 'esp32c6'), - ('gdbstub', 'esp32c61'), - ('gdbstub', 'esp32h2'), - ('gdbstub', 'esp32p4'), - ('gdbstub', 'esp32s2'), - ('gdbstub', 'esp32s3'), - ('panic', 'esp32'), - ('panic', 'esp32c2'), - ('panic', 'esp32c3'), - ('panic', 'esp32c5'), - ('panic', 'esp32c6'), - ('panic', 'esp32c61'), - ('panic', 'esp32h2'), - ('panic', 'esp32p4'), - ('panic', 'esp32s2'), - ('panic', 'esp32s3'), - ], - indirect=['config', 'target'], -) +@idf_parametrize('config, target', CONFIGS, indirect=['config', 'target']) 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:') @@ -294,19 +212,7 @@ def test_task_wdt_cpu0(dut: PanicTestDut, config: str, test_func_name: str) -> N @pytest.mark.generic -@idf_parametrize( - 'config', - [ - 'coredump_flash_bin_crc', - 'coredump_flash_elf_sha', - 'coredump_uart_bin_crc', - 'coredump_uart_elf_crc', - 'gdbstub', - 'panic', - ], - indirect=['config'], -) -@idf_parametrize('target', ['esp32', 'esp32p4', 'esp32s3'], indirect=['target']) +@idf_parametrize('config, target', CONFIGS_DUAL_CORE, indirect=['config', 'target']) 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:') @@ -370,80 +276,7 @@ def test_panic_extram_stack(dut: PanicTestDut, config: str) -> None: @pytest.mark.generic -@idf_parametrize( - 'config,target', - [ - ('coredump_flash_bin_crc', 'supported_targets'), - ('coredump_flash_elf_sha', 'esp32'), - ('coredump_flash_elf_sha', 'esp32c2'), - ('coredump_flash_elf_sha', 'esp32c3'), - ('coredump_flash_elf_sha', 'esp32c5'), - ('coredump_flash_elf_sha', 'esp32c6'), - ('coredump_flash_elf_sha', 'esp32c61'), - ('coredump_flash_elf_sha', 'esp32h2'), - ('coredump_flash_elf_sha', 'esp32p4'), - ('coredump_flash_elf_sha', 'esp32s2'), - ('coredump_flash_elf_sha', 'esp32s3'), - ('coredump_flash_elf_soft_sha', 'esp32'), - ('coredump_flash_elf_soft_sha', 'esp32c2'), - ('coredump_flash_elf_soft_sha', 'esp32c3'), - ('coredump_flash_elf_soft_sha', 'esp32c5'), - ('coredump_flash_elf_soft_sha', 'esp32c6'), - ('coredump_flash_elf_soft_sha', 'esp32c61'), - ('coredump_flash_elf_soft_sha', 'esp32h2'), - ('coredump_flash_elf_soft_sha', 'esp32p4'), - ('coredump_flash_elf_soft_sha', 'esp32s2'), - ('coredump_flash_elf_soft_sha', 'esp32s3'), - ('coredump_uart_bin_crc', 'esp32'), - ('coredump_uart_bin_crc', 'esp32c2'), - ('coredump_uart_bin_crc', 'esp32c3'), - ('coredump_uart_bin_crc', 'esp32c5'), - ('coredump_uart_bin_crc', 'esp32c6'), - ('coredump_uart_bin_crc', 'esp32c61'), - ('coredump_uart_bin_crc', 'esp32h2'), - ('coredump_uart_bin_crc', 'esp32p4'), - ('coredump_uart_bin_crc', 'esp32s2'), - ('coredump_uart_bin_crc', 'esp32s3'), - ('coredump_uart_elf_crc', 'esp32'), - ('coredump_uart_elf_crc', 'esp32c2'), - ('coredump_uart_elf_crc', 'esp32c3'), - ('coredump_uart_elf_crc', 'esp32c5'), - ('coredump_uart_elf_crc', 'esp32c6'), - ('coredump_uart_elf_crc', 'esp32c61'), - ('coredump_uart_elf_crc', 'esp32h2'), - ('coredump_uart_elf_crc', 'esp32p4'), - ('coredump_uart_elf_crc', 'esp32s2'), - ('coredump_uart_elf_crc', 'esp32s3'), - ('coredump_flash_custom_stack', 'esp32c2'), - ('coredump_flash_custom_stack', 'esp32c3'), - ('coredump_flash_custom_stack', 'esp32c5'), - ('coredump_flash_custom_stack', 'esp32c6'), - ('coredump_flash_custom_stack', 'esp32c61'), - ('coredump_flash_custom_stack', 'esp32h2'), - ('coredump_flash_custom_stack', 'esp32p4'), - ('gdbstub', 'esp32'), - ('gdbstub', 'esp32c2'), - ('gdbstub', 'esp32c3'), - ('gdbstub', 'esp32c5'), - ('gdbstub', 'esp32c6'), - ('gdbstub', 'esp32c61'), - ('gdbstub', 'esp32h2'), - ('gdbstub', 'esp32p4'), - ('gdbstub', 'esp32s2'), - ('gdbstub', 'esp32s3'), - ('panic', 'esp32'), - ('panic', 'esp32c2'), - ('panic', 'esp32c3'), - ('panic', 'esp32c5'), - ('panic', 'esp32c6'), - ('panic', 'esp32c61'), - ('panic', 'esp32h2'), - ('panic', 'esp32p4'), - ('panic', 'esp32s2'), - ('panic', 'esp32s3'), - ], - indirect=['config', 'target'], -) +@idf_parametrize('config, target', CONFIGS, indirect=['config', 'target']) 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') @@ -453,7 +286,7 @@ def test_int_wdt(dut: PanicTestDut, target: str, config: str, test_func_name: st else: dut.expect_stack_dump() - if target in TARGETS_DUAL_CORE_NAMES: + if target in TARGETS_DUAL_CORE: dut.expect_reg_dump(1) if dut.is_xtensa: dut.expect_backtrace() @@ -465,80 +298,7 @@ def test_int_wdt(dut: PanicTestDut, target: str, config: str, test_func_name: st @pytest.mark.generic -@idf_parametrize( - 'config,target', - [ - ('coredump_flash_bin_crc', 'supported_targets'), - ('coredump_flash_elf_sha', 'esp32'), - ('coredump_flash_elf_sha', 'esp32c2'), - ('coredump_flash_elf_sha', 'esp32c3'), - ('coredump_flash_elf_sha', 'esp32c5'), - ('coredump_flash_elf_sha', 'esp32c6'), - ('coredump_flash_elf_sha', 'esp32c61'), - ('coredump_flash_elf_sha', 'esp32h2'), - ('coredump_flash_elf_sha', 'esp32p4'), - ('coredump_flash_elf_sha', 'esp32s2'), - ('coredump_flash_elf_sha', 'esp32s3'), - ('coredump_flash_elf_soft_sha', 'esp32'), - ('coredump_flash_elf_soft_sha', 'esp32c2'), - ('coredump_flash_elf_soft_sha', 'esp32c3'), - ('coredump_flash_elf_soft_sha', 'esp32c5'), - ('coredump_flash_elf_soft_sha', 'esp32c6'), - ('coredump_flash_elf_soft_sha', 'esp32c61'), - ('coredump_flash_elf_soft_sha', 'esp32h2'), - ('coredump_flash_elf_soft_sha', 'esp32p4'), - ('coredump_flash_elf_soft_sha', 'esp32s2'), - ('coredump_flash_elf_soft_sha', 'esp32s3'), - ('coredump_uart_bin_crc', 'esp32'), - ('coredump_uart_bin_crc', 'esp32c2'), - ('coredump_uart_bin_crc', 'esp32c3'), - ('coredump_uart_bin_crc', 'esp32c5'), - ('coredump_uart_bin_crc', 'esp32c6'), - ('coredump_uart_bin_crc', 'esp32c61'), - ('coredump_uart_bin_crc', 'esp32h2'), - ('coredump_uart_bin_crc', 'esp32p4'), - ('coredump_uart_bin_crc', 'esp32s2'), - ('coredump_uart_bin_crc', 'esp32s3'), - ('coredump_uart_elf_crc', 'esp32'), - ('coredump_uart_elf_crc', 'esp32c2'), - ('coredump_uart_elf_crc', 'esp32c3'), - ('coredump_uart_elf_crc', 'esp32c5'), - ('coredump_uart_elf_crc', 'esp32c6'), - ('coredump_uart_elf_crc', 'esp32c61'), - ('coredump_uart_elf_crc', 'esp32h2'), - ('coredump_uart_elf_crc', 'esp32p4'), - ('coredump_uart_elf_crc', 'esp32s2'), - ('coredump_uart_elf_crc', 'esp32s3'), - ('coredump_flash_custom_stack', 'esp32c2'), - ('coredump_flash_custom_stack', 'esp32c3'), - ('coredump_flash_custom_stack', 'esp32c5'), - ('coredump_flash_custom_stack', 'esp32c6'), - ('coredump_flash_custom_stack', 'esp32c61'), - ('coredump_flash_custom_stack', 'esp32h2'), - ('coredump_flash_custom_stack', 'esp32p4'), - ('gdbstub', 'esp32'), - ('gdbstub', 'esp32c2'), - ('gdbstub', 'esp32c3'), - ('gdbstub', 'esp32c5'), - ('gdbstub', 'esp32c6'), - ('gdbstub', 'esp32c61'), - ('gdbstub', 'esp32h2'), - ('gdbstub', 'esp32p4'), - ('gdbstub', 'esp32s2'), - ('gdbstub', 'esp32s3'), - ('panic', 'esp32'), - ('panic', 'esp32c2'), - ('panic', 'esp32c3'), - ('panic', 'esp32c5'), - ('panic', 'esp32c6'), - ('panic', 'esp32c61'), - ('panic', 'esp32h2'), - ('panic', 'esp32p4'), - ('panic', 'esp32s2'), - ('panic', 'esp32s3'), - ], - indirect=['config', 'target'], -) +@idf_parametrize('config, target', CONFIGS, indirect=['config', 'target']) 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') @@ -548,7 +308,7 @@ def test_int_wdt_cache_disabled(dut: PanicTestDut, target: str, config: str, tes else: dut.expect_stack_dump() - if target in TARGETS_DUAL_CORE_NAMES: + if target in TARGETS_DUAL_CORE: dut.expect_reg_dump(1) if dut.is_xtensa: dut.expect_backtrace() @@ -560,80 +320,7 @@ def test_int_wdt_cache_disabled(dut: PanicTestDut, target: str, config: str, tes @pytest.mark.generic -@idf_parametrize( - 'config,target', - [ - ('coredump_flash_bin_crc', 'supported_targets'), - ('coredump_flash_elf_sha', 'esp32'), - ('coredump_flash_elf_sha', 'esp32c2'), - ('coredump_flash_elf_sha', 'esp32c3'), - ('coredump_flash_elf_sha', 'esp32c5'), - ('coredump_flash_elf_sha', 'esp32c6'), - ('coredump_flash_elf_sha', 'esp32c61'), - ('coredump_flash_elf_sha', 'esp32h2'), - ('coredump_flash_elf_sha', 'esp32p4'), - ('coredump_flash_elf_sha', 'esp32s2'), - ('coredump_flash_elf_sha', 'esp32s3'), - ('coredump_flash_elf_soft_sha', 'esp32'), - ('coredump_flash_elf_soft_sha', 'esp32c2'), - ('coredump_flash_elf_soft_sha', 'esp32c3'), - ('coredump_flash_elf_soft_sha', 'esp32c5'), - ('coredump_flash_elf_soft_sha', 'esp32c6'), - ('coredump_flash_elf_soft_sha', 'esp32c61'), - ('coredump_flash_elf_soft_sha', 'esp32h2'), - ('coredump_flash_elf_soft_sha', 'esp32p4'), - ('coredump_flash_elf_soft_sha', 'esp32s2'), - ('coredump_flash_elf_soft_sha', 'esp32s3'), - ('coredump_uart_bin_crc', 'esp32'), - ('coredump_uart_bin_crc', 'esp32c2'), - ('coredump_uart_bin_crc', 'esp32c3'), - ('coredump_uart_bin_crc', 'esp32c5'), - ('coredump_uart_bin_crc', 'esp32c6'), - ('coredump_uart_bin_crc', 'esp32c61'), - ('coredump_uart_bin_crc', 'esp32h2'), - ('coredump_uart_bin_crc', 'esp32p4'), - ('coredump_uart_bin_crc', 'esp32s2'), - ('coredump_uart_bin_crc', 'esp32s3'), - ('coredump_uart_elf_crc', 'esp32'), - ('coredump_uart_elf_crc', 'esp32c2'), - ('coredump_uart_elf_crc', 'esp32c3'), - ('coredump_uart_elf_crc', 'esp32c5'), - ('coredump_uart_elf_crc', 'esp32c6'), - ('coredump_uart_elf_crc', 'esp32c61'), - ('coredump_uart_elf_crc', 'esp32h2'), - ('coredump_uart_elf_crc', 'esp32p4'), - ('coredump_uart_elf_crc', 'esp32s2'), - ('coredump_uart_elf_crc', 'esp32s3'), - ('coredump_flash_custom_stack', 'esp32c2'), - ('coredump_flash_custom_stack', 'esp32c3'), - ('coredump_flash_custom_stack', 'esp32c5'), - ('coredump_flash_custom_stack', 'esp32c6'), - ('coredump_flash_custom_stack', 'esp32c61'), - ('coredump_flash_custom_stack', 'esp32h2'), - ('coredump_flash_custom_stack', 'esp32p4'), - ('gdbstub', 'esp32'), - ('gdbstub', 'esp32c2'), - ('gdbstub', 'esp32c3'), - ('gdbstub', 'esp32c5'), - ('gdbstub', 'esp32c6'), - ('gdbstub', 'esp32c61'), - ('gdbstub', 'esp32h2'), - ('gdbstub', 'esp32p4'), - ('gdbstub', 'esp32s2'), - ('gdbstub', 'esp32s3'), - ('panic', 'esp32'), - ('panic', 'esp32c2'), - ('panic', 'esp32c3'), - ('panic', 'esp32c5'), - ('panic', 'esp32c6'), - ('panic', 'esp32c61'), - ('panic', 'esp32h2'), - ('panic', 'esp32p4'), - ('panic', 'esp32s2'), - ('panic', 'esp32s3'), - ], - indirect=['config', 'target'], -) +@idf_parametrize('config, target', CONFIGS, indirect=['config', 'target']) 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']: @@ -664,80 +351,7 @@ def test_cache_error(dut: PanicTestDut, config: str, test_func_name: str) -> Non @pytest.mark.generic -@idf_parametrize( - 'config,target', - [ - ('coredump_flash_bin_crc', 'supported_targets'), - ('coredump_flash_elf_sha', 'esp32'), - ('coredump_flash_elf_sha', 'esp32c2'), - ('coredump_flash_elf_sha', 'esp32c3'), - ('coredump_flash_elf_sha', 'esp32c5'), - ('coredump_flash_elf_sha', 'esp32c6'), - ('coredump_flash_elf_sha', 'esp32c61'), - ('coredump_flash_elf_sha', 'esp32h2'), - ('coredump_flash_elf_sha', 'esp32p4'), - ('coredump_flash_elf_sha', 'esp32s2'), - ('coredump_flash_elf_sha', 'esp32s3'), - ('coredump_flash_elf_soft_sha', 'esp32'), - ('coredump_flash_elf_soft_sha', 'esp32c2'), - ('coredump_flash_elf_soft_sha', 'esp32c3'), - ('coredump_flash_elf_soft_sha', 'esp32c5'), - ('coredump_flash_elf_soft_sha', 'esp32c6'), - ('coredump_flash_elf_soft_sha', 'esp32c61'), - ('coredump_flash_elf_soft_sha', 'esp32h2'), - ('coredump_flash_elf_soft_sha', 'esp32p4'), - ('coredump_flash_elf_soft_sha', 'esp32s2'), - ('coredump_flash_elf_soft_sha', 'esp32s3'), - ('coredump_uart_bin_crc', 'esp32'), - ('coredump_uart_bin_crc', 'esp32c2'), - ('coredump_uart_bin_crc', 'esp32c3'), - ('coredump_uart_bin_crc', 'esp32c5'), - ('coredump_uart_bin_crc', 'esp32c6'), - ('coredump_uart_bin_crc', 'esp32c61'), - ('coredump_uart_bin_crc', 'esp32h2'), - ('coredump_uart_bin_crc', 'esp32p4'), - ('coredump_uart_bin_crc', 'esp32s2'), - ('coredump_uart_bin_crc', 'esp32s3'), - ('coredump_uart_elf_crc', 'esp32'), - ('coredump_uart_elf_crc', 'esp32c2'), - ('coredump_uart_elf_crc', 'esp32c3'), - ('coredump_uart_elf_crc', 'esp32c5'), - ('coredump_uart_elf_crc', 'esp32c6'), - ('coredump_uart_elf_crc', 'esp32c61'), - ('coredump_uart_elf_crc', 'esp32h2'), - ('coredump_uart_elf_crc', 'esp32p4'), - ('coredump_uart_elf_crc', 'esp32s2'), - ('coredump_uart_elf_crc', 'esp32s3'), - ('coredump_flash_custom_stack', 'esp32c2'), - ('coredump_flash_custom_stack', 'esp32c3'), - ('coredump_flash_custom_stack', 'esp32c5'), - ('coredump_flash_custom_stack', 'esp32c6'), - ('coredump_flash_custom_stack', 'esp32c61'), - ('coredump_flash_custom_stack', 'esp32h2'), - ('coredump_flash_custom_stack', 'esp32p4'), - ('gdbstub', 'esp32'), - ('gdbstub', 'esp32c2'), - ('gdbstub', 'esp32c3'), - ('gdbstub', 'esp32c5'), - ('gdbstub', 'esp32c6'), - ('gdbstub', 'esp32c61'), - ('gdbstub', 'esp32h2'), - ('gdbstub', 'esp32p4'), - ('gdbstub', 'esp32s2'), - ('gdbstub', 'esp32s3'), - ('panic', 'esp32'), - ('panic', 'esp32c2'), - ('panic', 'esp32c3'), - ('panic', 'esp32c5'), - ('panic', 'esp32c6'), - ('panic', 'esp32c61'), - ('panic', 'esp32h2'), - ('panic', 'esp32p4'), - ('panic', 'esp32s2'), - ('panic', 'esp32s3'), - ], - indirect=['config', 'target'], -) +@idf_parametrize('config, target', CONFIGS, indirect=['config', 'target']) def test_stack_overflow(dut: PanicTestDut, config: str, test_func_name: str) -> None: dut.run_test_func(test_func_name) if dut.is_xtensa: @@ -758,80 +372,7 @@ def test_stack_overflow(dut: PanicTestDut, config: str, test_func_name: str) -> @pytest.mark.generic -@idf_parametrize( - 'config,target', - [ - ('coredump_flash_bin_crc', 'supported_targets'), - ('coredump_flash_elf_sha', 'esp32'), - ('coredump_flash_elf_sha', 'esp32c2'), - ('coredump_flash_elf_sha', 'esp32c3'), - ('coredump_flash_elf_sha', 'esp32c5'), - ('coredump_flash_elf_sha', 'esp32c6'), - ('coredump_flash_elf_sha', 'esp32c61'), - ('coredump_flash_elf_sha', 'esp32h2'), - ('coredump_flash_elf_sha', 'esp32p4'), - ('coredump_flash_elf_sha', 'esp32s2'), - ('coredump_flash_elf_sha', 'esp32s3'), - ('coredump_flash_elf_soft_sha', 'esp32'), - ('coredump_flash_elf_soft_sha', 'esp32c2'), - ('coredump_flash_elf_soft_sha', 'esp32c3'), - ('coredump_flash_elf_soft_sha', 'esp32c5'), - ('coredump_flash_elf_soft_sha', 'esp32c6'), - ('coredump_flash_elf_soft_sha', 'esp32c61'), - ('coredump_flash_elf_soft_sha', 'esp32h2'), - ('coredump_flash_elf_soft_sha', 'esp32p4'), - ('coredump_flash_elf_soft_sha', 'esp32s2'), - ('coredump_flash_elf_soft_sha', 'esp32s3'), - ('coredump_uart_bin_crc', 'esp32'), - ('coredump_uart_bin_crc', 'esp32c2'), - ('coredump_uart_bin_crc', 'esp32c3'), - ('coredump_uart_bin_crc', 'esp32c5'), - ('coredump_uart_bin_crc', 'esp32c6'), - ('coredump_uart_bin_crc', 'esp32c61'), - ('coredump_uart_bin_crc', 'esp32h2'), - ('coredump_uart_bin_crc', 'esp32p4'), - ('coredump_uart_bin_crc', 'esp32s2'), - ('coredump_uart_bin_crc', 'esp32s3'), - ('coredump_uart_elf_crc', 'esp32'), - ('coredump_uart_elf_crc', 'esp32c2'), - ('coredump_uart_elf_crc', 'esp32c3'), - ('coredump_uart_elf_crc', 'esp32c5'), - ('coredump_uart_elf_crc', 'esp32c6'), - ('coredump_uart_elf_crc', 'esp32c61'), - ('coredump_uart_elf_crc', 'esp32h2'), - ('coredump_uart_elf_crc', 'esp32p4'), - ('coredump_uart_elf_crc', 'esp32s2'), - ('coredump_uart_elf_crc', 'esp32s3'), - ('coredump_flash_custom_stack', 'esp32c2'), - ('coredump_flash_custom_stack', 'esp32c3'), - ('coredump_flash_custom_stack', 'esp32c5'), - ('coredump_flash_custom_stack', 'esp32c6'), - ('coredump_flash_custom_stack', 'esp32c61'), - ('coredump_flash_custom_stack', 'esp32h2'), - ('coredump_flash_custom_stack', 'esp32p4'), - ('gdbstub', 'esp32'), - ('gdbstub', 'esp32c2'), - ('gdbstub', 'esp32c3'), - ('gdbstub', 'esp32c5'), - ('gdbstub', 'esp32c6'), - ('gdbstub', 'esp32c61'), - ('gdbstub', 'esp32h2'), - ('gdbstub', 'esp32p4'), - ('gdbstub', 'esp32s2'), - ('gdbstub', 'esp32s3'), - ('panic', 'esp32'), - ('panic', 'esp32c2'), - ('panic', 'esp32c3'), - ('panic', 'esp32c5'), - ('panic', 'esp32c6'), - ('panic', 'esp32c61'), - ('panic', 'esp32h2'), - ('panic', 'esp32p4'), - ('panic', 'esp32s2'), - ('panic', 'esp32s3'), - ], - indirect=['config', 'target'], -) +@idf_parametrize('config, target', CONFIGS, indirect=['config', 'target']) 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: @@ -858,80 +399,7 @@ def test_instr_fetch_prohibited(dut: PanicTestDut, config: str, test_func_name: @pytest.mark.generic -@idf_parametrize( - 'config,target', - [ - ('coredump_flash_bin_crc', 'supported_targets'), - ('coredump_flash_elf_sha', 'esp32'), - ('coredump_flash_elf_sha', 'esp32c2'), - ('coredump_flash_elf_sha', 'esp32c3'), - ('coredump_flash_elf_sha', 'esp32c5'), - ('coredump_flash_elf_sha', 'esp32c6'), - ('coredump_flash_elf_sha', 'esp32c61'), - ('coredump_flash_elf_sha', 'esp32h2'), - ('coredump_flash_elf_sha', 'esp32p4'), - ('coredump_flash_elf_sha', 'esp32s2'), - ('coredump_flash_elf_sha', 'esp32s3'), - ('coredump_flash_elf_soft_sha', 'esp32'), - ('coredump_flash_elf_soft_sha', 'esp32c2'), - ('coredump_flash_elf_soft_sha', 'esp32c3'), - ('coredump_flash_elf_soft_sha', 'esp32c5'), - ('coredump_flash_elf_soft_sha', 'esp32c6'), - ('coredump_flash_elf_soft_sha', 'esp32c61'), - ('coredump_flash_elf_soft_sha', 'esp32h2'), - ('coredump_flash_elf_soft_sha', 'esp32p4'), - ('coredump_flash_elf_soft_sha', 'esp32s2'), - ('coredump_flash_elf_soft_sha', 'esp32s3'), - ('coredump_uart_bin_crc', 'esp32'), - ('coredump_uart_bin_crc', 'esp32c2'), - ('coredump_uart_bin_crc', 'esp32c3'), - ('coredump_uart_bin_crc', 'esp32c5'), - ('coredump_uart_bin_crc', 'esp32c6'), - ('coredump_uart_bin_crc', 'esp32c61'), - ('coredump_uart_bin_crc', 'esp32h2'), - ('coredump_uart_bin_crc', 'esp32p4'), - ('coredump_uart_bin_crc', 'esp32s2'), - ('coredump_uart_bin_crc', 'esp32s3'), - ('coredump_uart_elf_crc', 'esp32'), - ('coredump_uart_elf_crc', 'esp32c2'), - ('coredump_uart_elf_crc', 'esp32c3'), - ('coredump_uart_elf_crc', 'esp32c5'), - ('coredump_uart_elf_crc', 'esp32c6'), - ('coredump_uart_elf_crc', 'esp32c61'), - ('coredump_uart_elf_crc', 'esp32h2'), - ('coredump_uart_elf_crc', 'esp32p4'), - ('coredump_uart_elf_crc', 'esp32s2'), - ('coredump_uart_elf_crc', 'esp32s3'), - ('coredump_flash_custom_stack', 'esp32c2'), - ('coredump_flash_custom_stack', 'esp32c3'), - ('coredump_flash_custom_stack', 'esp32c5'), - ('coredump_flash_custom_stack', 'esp32c6'), - ('coredump_flash_custom_stack', 'esp32c61'), - ('coredump_flash_custom_stack', 'esp32h2'), - ('coredump_flash_custom_stack', 'esp32p4'), - ('gdbstub', 'esp32'), - ('gdbstub', 'esp32c2'), - ('gdbstub', 'esp32c3'), - ('gdbstub', 'esp32c5'), - ('gdbstub', 'esp32c6'), - ('gdbstub', 'esp32c61'), - ('gdbstub', 'esp32h2'), - ('gdbstub', 'esp32p4'), - ('gdbstub', 'esp32s2'), - ('gdbstub', 'esp32s3'), - ('panic', 'esp32'), - ('panic', 'esp32c2'), - ('panic', 'esp32c3'), - ('panic', 'esp32c5'), - ('panic', 'esp32c6'), - ('panic', 'esp32c61'), - ('panic', 'esp32h2'), - ('panic', 'esp32p4'), - ('panic', 'esp32s2'), - ('panic', 'esp32s3'), - ], - indirect=['config', 'target'], -) +@idf_parametrize('config, target', CONFIGS, indirect=['config', 'target']) def test_illegal_instruction(dut: PanicTestDut, config: str, test_func_name: str) -> None: dut.run_test_func(test_func_name) if dut.is_xtensa: @@ -967,238 +435,19 @@ def check_x_prohibited(dut: PanicTestDut, config: str, test_func_name: str, oper @pytest.mark.generic -@idf_parametrize( - 'config,target', - [ - ('coredump_flash_bin_crc', 'supported_targets'), - ('coredump_flash_elf_sha', 'esp32'), - ('coredump_flash_elf_sha', 'esp32c2'), - ('coredump_flash_elf_sha', 'esp32c3'), - ('coredump_flash_elf_sha', 'esp32c5'), - ('coredump_flash_elf_sha', 'esp32c6'), - ('coredump_flash_elf_sha', 'esp32c61'), - ('coredump_flash_elf_sha', 'esp32h2'), - ('coredump_flash_elf_sha', 'esp32p4'), - ('coredump_flash_elf_sha', 'esp32s2'), - ('coredump_flash_elf_sha', 'esp32s3'), - ('coredump_flash_elf_soft_sha', 'esp32'), - ('coredump_flash_elf_soft_sha', 'esp32c2'), - ('coredump_flash_elf_soft_sha', 'esp32c3'), - ('coredump_flash_elf_soft_sha', 'esp32c5'), - ('coredump_flash_elf_soft_sha', 'esp32c6'), - ('coredump_flash_elf_soft_sha', 'esp32c61'), - ('coredump_flash_elf_soft_sha', 'esp32h2'), - ('coredump_flash_elf_soft_sha', 'esp32p4'), - ('coredump_flash_elf_soft_sha', 'esp32s2'), - ('coredump_flash_elf_soft_sha', 'esp32s3'), - ('coredump_uart_bin_crc', 'esp32'), - ('coredump_uart_bin_crc', 'esp32c2'), - ('coredump_uart_bin_crc', 'esp32c3'), - ('coredump_uart_bin_crc', 'esp32c5'), - ('coredump_uart_bin_crc', 'esp32c6'), - ('coredump_uart_bin_crc', 'esp32c61'), - ('coredump_uart_bin_crc', 'esp32h2'), - ('coredump_uart_bin_crc', 'esp32p4'), - ('coredump_uart_bin_crc', 'esp32s2'), - ('coredump_uart_bin_crc', 'esp32s3'), - ('coredump_uart_elf_crc', 'esp32'), - ('coredump_uart_elf_crc', 'esp32c2'), - ('coredump_uart_elf_crc', 'esp32c3'), - ('coredump_uart_elf_crc', 'esp32c5'), - ('coredump_uart_elf_crc', 'esp32c6'), - ('coredump_uart_elf_crc', 'esp32c61'), - ('coredump_uart_elf_crc', 'esp32h2'), - ('coredump_uart_elf_crc', 'esp32p4'), - ('coredump_uart_elf_crc', 'esp32s2'), - ('coredump_uart_elf_crc', 'esp32s3'), - ('coredump_flash_custom_stack', 'esp32c2'), - ('coredump_flash_custom_stack', 'esp32c3'), - ('coredump_flash_custom_stack', 'esp32c5'), - ('coredump_flash_custom_stack', 'esp32c6'), - ('coredump_flash_custom_stack', 'esp32c61'), - ('coredump_flash_custom_stack', 'esp32h2'), - ('coredump_flash_custom_stack', 'esp32p4'), - ('gdbstub', 'esp32'), - ('gdbstub', 'esp32c2'), - ('gdbstub', 'esp32c3'), - ('gdbstub', 'esp32c5'), - ('gdbstub', 'esp32c6'), - ('gdbstub', 'esp32c61'), - ('gdbstub', 'esp32h2'), - ('gdbstub', 'esp32p4'), - ('gdbstub', 'esp32s2'), - ('gdbstub', 'esp32s3'), - ('panic', 'esp32'), - ('panic', 'esp32c2'), - ('panic', 'esp32c3'), - ('panic', 'esp32c5'), - ('panic', 'esp32c6'), - ('panic', 'esp32c61'), - ('panic', 'esp32h2'), - ('panic', 'esp32p4'), - ('panic', 'esp32s2'), - ('panic', 'esp32s3'), - ], - indirect=['config', 'target'], -) +@idf_parametrize('config, target', CONFIGS, indirect=['config', 'target']) def test_storeprohibited(dut: PanicTestDut, config: str, test_func_name: str) -> None: check_x_prohibited(dut, config, test_func_name, 'Store') @pytest.mark.generic -@idf_parametrize( - 'config,target', - [ - ('coredump_flash_bin_crc', 'supported_targets'), - ('coredump_flash_elf_sha', 'esp32'), - ('coredump_flash_elf_sha', 'esp32c2'), - ('coredump_flash_elf_sha', 'esp32c3'), - ('coredump_flash_elf_sha', 'esp32c5'), - ('coredump_flash_elf_sha', 'esp32c6'), - ('coredump_flash_elf_sha', 'esp32c61'), - ('coredump_flash_elf_sha', 'esp32h2'), - ('coredump_flash_elf_sha', 'esp32p4'), - ('coredump_flash_elf_sha', 'esp32s2'), - ('coredump_flash_elf_sha', 'esp32s3'), - ('coredump_flash_elf_soft_sha', 'esp32'), - ('coredump_flash_elf_soft_sha', 'esp32c2'), - ('coredump_flash_elf_soft_sha', 'esp32c3'), - ('coredump_flash_elf_soft_sha', 'esp32c5'), - ('coredump_flash_elf_soft_sha', 'esp32c6'), - ('coredump_flash_elf_soft_sha', 'esp32c61'), - ('coredump_flash_elf_soft_sha', 'esp32h2'), - ('coredump_flash_elf_soft_sha', 'esp32p4'), - ('coredump_flash_elf_soft_sha', 'esp32s2'), - ('coredump_flash_elf_soft_sha', 'esp32s3'), - ('coredump_uart_bin_crc', 'esp32'), - ('coredump_uart_bin_crc', 'esp32c2'), - ('coredump_uart_bin_crc', 'esp32c3'), - ('coredump_uart_bin_crc', 'esp32c5'), - ('coredump_uart_bin_crc', 'esp32c6'), - ('coredump_uart_bin_crc', 'esp32c61'), - ('coredump_uart_bin_crc', 'esp32h2'), - ('coredump_uart_bin_crc', 'esp32p4'), - ('coredump_uart_bin_crc', 'esp32s2'), - ('coredump_uart_bin_crc', 'esp32s3'), - ('coredump_uart_elf_crc', 'esp32'), - ('coredump_uart_elf_crc', 'esp32c2'), - ('coredump_uart_elf_crc', 'esp32c3'), - ('coredump_uart_elf_crc', 'esp32c5'), - ('coredump_uart_elf_crc', 'esp32c6'), - ('coredump_uart_elf_crc', 'esp32c61'), - ('coredump_uart_elf_crc', 'esp32h2'), - ('coredump_uart_elf_crc', 'esp32p4'), - ('coredump_uart_elf_crc', 'esp32s2'), - ('coredump_uart_elf_crc', 'esp32s3'), - ('coredump_flash_custom_stack', 'esp32c2'), - ('coredump_flash_custom_stack', 'esp32c3'), - ('coredump_flash_custom_stack', 'esp32c5'), - ('coredump_flash_custom_stack', 'esp32c6'), - ('coredump_flash_custom_stack', 'esp32c61'), - ('coredump_flash_custom_stack', 'esp32h2'), - ('coredump_flash_custom_stack', 'esp32p4'), - ('gdbstub', 'esp32'), - ('gdbstub', 'esp32c2'), - ('gdbstub', 'esp32c3'), - ('gdbstub', 'esp32c5'), - ('gdbstub', 'esp32c6'), - ('gdbstub', 'esp32c61'), - ('gdbstub', 'esp32h2'), - ('gdbstub', 'esp32p4'), - ('gdbstub', 'esp32s2'), - ('gdbstub', 'esp32s3'), - ('panic', 'esp32'), - ('panic', 'esp32c2'), - ('panic', 'esp32c3'), - ('panic', 'esp32c5'), - ('panic', 'esp32c6'), - ('panic', 'esp32c61'), - ('panic', 'esp32h2'), - ('panic', 'esp32p4'), - ('panic', 'esp32s2'), - ('panic', 'esp32s3'), - ], - indirect=['config', 'target'], -) +@idf_parametrize('config, target', CONFIGS, indirect=['config', 'target']) def test_loadprohibited(dut: PanicTestDut, config: str, test_func_name: str) -> None: check_x_prohibited(dut, config, test_func_name, 'Load') @pytest.mark.generic -@idf_parametrize( - 'config,target', - [ - ('coredump_flash_bin_crc', 'supported_targets'), - ('coredump_flash_elf_sha', 'esp32'), - ('coredump_flash_elf_sha', 'esp32c2'), - ('coredump_flash_elf_sha', 'esp32c3'), - ('coredump_flash_elf_sha', 'esp32c5'), - ('coredump_flash_elf_sha', 'esp32c6'), - ('coredump_flash_elf_sha', 'esp32c61'), - ('coredump_flash_elf_sha', 'esp32h2'), - ('coredump_flash_elf_sha', 'esp32p4'), - ('coredump_flash_elf_sha', 'esp32s2'), - ('coredump_flash_elf_sha', 'esp32s3'), - ('coredump_flash_elf_soft_sha', 'esp32'), - ('coredump_flash_elf_soft_sha', 'esp32c2'), - ('coredump_flash_elf_soft_sha', 'esp32c3'), - ('coredump_flash_elf_soft_sha', 'esp32c5'), - ('coredump_flash_elf_soft_sha', 'esp32c6'), - ('coredump_flash_elf_soft_sha', 'esp32c61'), - ('coredump_flash_elf_soft_sha', 'esp32h2'), - ('coredump_flash_elf_soft_sha', 'esp32p4'), - ('coredump_flash_elf_soft_sha', 'esp32s2'), - ('coredump_flash_elf_soft_sha', 'esp32s3'), - ('coredump_uart_bin_crc', 'esp32'), - ('coredump_uart_bin_crc', 'esp32c2'), - ('coredump_uart_bin_crc', 'esp32c3'), - ('coredump_uart_bin_crc', 'esp32c5'), - ('coredump_uart_bin_crc', 'esp32c6'), - ('coredump_uart_bin_crc', 'esp32c61'), - ('coredump_uart_bin_crc', 'esp32h2'), - ('coredump_uart_bin_crc', 'esp32p4'), - ('coredump_uart_bin_crc', 'esp32s2'), - ('coredump_uart_bin_crc', 'esp32s3'), - ('coredump_uart_elf_crc', 'esp32'), - ('coredump_uart_elf_crc', 'esp32c2'), - ('coredump_uart_elf_crc', 'esp32c3'), - ('coredump_uart_elf_crc', 'esp32c5'), - ('coredump_uart_elf_crc', 'esp32c6'), - ('coredump_uart_elf_crc', 'esp32c61'), - ('coredump_uart_elf_crc', 'esp32h2'), - ('coredump_uart_elf_crc', 'esp32p4'), - ('coredump_uart_elf_crc', 'esp32s2'), - ('coredump_uart_elf_crc', 'esp32s3'), - ('coredump_flash_custom_stack', 'esp32c2'), - ('coredump_flash_custom_stack', 'esp32c3'), - ('coredump_flash_custom_stack', 'esp32c5'), - ('coredump_flash_custom_stack', 'esp32c6'), - ('coredump_flash_custom_stack', 'esp32c61'), - ('coredump_flash_custom_stack', 'esp32h2'), - ('coredump_flash_custom_stack', 'esp32p4'), - ('gdbstub', 'esp32'), - ('gdbstub', 'esp32c2'), - ('gdbstub', 'esp32c3'), - ('gdbstub', 'esp32c5'), - ('gdbstub', 'esp32c6'), - ('gdbstub', 'esp32c61'), - ('gdbstub', 'esp32h2'), - ('gdbstub', 'esp32p4'), - ('gdbstub', 'esp32s2'), - ('gdbstub', 'esp32s3'), - ('panic', 'esp32'), - ('panic', 'esp32c2'), - ('panic', 'esp32c3'), - ('panic', 'esp32c5'), - ('panic', 'esp32c6'), - ('panic', 'esp32c61'), - ('panic', 'esp32h2'), - ('panic', 'esp32p4'), - ('panic', 'esp32s2'), - ('panic', 'esp32s3'), - ], - indirect=['config', 'target'], -) +@idf_parametrize('config, target', CONFIGS, indirect=['config', 'target']) 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' @@ -1220,80 +469,7 @@ def test_abort(dut: PanicTestDut, config: str, test_func_name: str) -> None: @pytest.mark.generic -@idf_parametrize( - 'config,target', - [ - ('coredump_flash_bin_crc', 'supported_targets'), - ('coredump_flash_elf_sha', 'esp32'), - ('coredump_flash_elf_sha', 'esp32c2'), - ('coredump_flash_elf_sha', 'esp32c3'), - ('coredump_flash_elf_sha', 'esp32c5'), - ('coredump_flash_elf_sha', 'esp32c6'), - ('coredump_flash_elf_sha', 'esp32c61'), - ('coredump_flash_elf_sha', 'esp32h2'), - ('coredump_flash_elf_sha', 'esp32p4'), - ('coredump_flash_elf_sha', 'esp32s2'), - ('coredump_flash_elf_sha', 'esp32s3'), - ('coredump_flash_elf_soft_sha', 'esp32'), - ('coredump_flash_elf_soft_sha', 'esp32c2'), - ('coredump_flash_elf_soft_sha', 'esp32c3'), - ('coredump_flash_elf_soft_sha', 'esp32c5'), - ('coredump_flash_elf_soft_sha', 'esp32c6'), - ('coredump_flash_elf_soft_sha', 'esp32c61'), - ('coredump_flash_elf_soft_sha', 'esp32h2'), - ('coredump_flash_elf_soft_sha', 'esp32p4'), - ('coredump_flash_elf_soft_sha', 'esp32s2'), - ('coredump_flash_elf_soft_sha', 'esp32s3'), - ('coredump_uart_bin_crc', 'esp32'), - ('coredump_uart_bin_crc', 'esp32c2'), - ('coredump_uart_bin_crc', 'esp32c3'), - ('coredump_uart_bin_crc', 'esp32c5'), - ('coredump_uart_bin_crc', 'esp32c6'), - ('coredump_uart_bin_crc', 'esp32c61'), - ('coredump_uart_bin_crc', 'esp32h2'), - ('coredump_uart_bin_crc', 'esp32p4'), - ('coredump_uart_bin_crc', 'esp32s2'), - ('coredump_uart_bin_crc', 'esp32s3'), - ('coredump_uart_elf_crc', 'esp32'), - ('coredump_uart_elf_crc', 'esp32c2'), - ('coredump_uart_elf_crc', 'esp32c3'), - ('coredump_uart_elf_crc', 'esp32c5'), - ('coredump_uart_elf_crc', 'esp32c6'), - ('coredump_uart_elf_crc', 'esp32c61'), - ('coredump_uart_elf_crc', 'esp32h2'), - ('coredump_uart_elf_crc', 'esp32p4'), - ('coredump_uart_elf_crc', 'esp32s2'), - ('coredump_uart_elf_crc', 'esp32s3'), - ('coredump_flash_custom_stack', 'esp32c2'), - ('coredump_flash_custom_stack', 'esp32c3'), - ('coredump_flash_custom_stack', 'esp32c5'), - ('coredump_flash_custom_stack', 'esp32c6'), - ('coredump_flash_custom_stack', 'esp32c61'), - ('coredump_flash_custom_stack', 'esp32h2'), - ('coredump_flash_custom_stack', 'esp32p4'), - ('gdbstub', 'esp32'), - ('gdbstub', 'esp32c2'), - ('gdbstub', 'esp32c3'), - ('gdbstub', 'esp32c5'), - ('gdbstub', 'esp32c6'), - ('gdbstub', 'esp32c61'), - ('gdbstub', 'esp32h2'), - ('gdbstub', 'esp32p4'), - ('gdbstub', 'esp32s2'), - ('gdbstub', 'esp32s3'), - ('panic', 'esp32'), - ('panic', 'esp32c2'), - ('panic', 'esp32c3'), - ('panic', 'esp32c5'), - ('panic', 'esp32c6'), - ('panic', 'esp32c61'), - ('panic', 'esp32h2'), - ('panic', 'esp32p4'), - ('panic', 'esp32s2'), - ('panic', 'esp32s3'), - ], - indirect=['config', 'target'], -) +@idf_parametrize('config, target', CONFIGS, indirect=['config', 'target']) 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' @@ -1321,80 +497,7 @@ def test_ub(dut: PanicTestDut, config: str, test_func_name: str) -> None: @pytest.mark.generic -@idf_parametrize( - 'config,target', - [ - ('coredump_flash_bin_crc', 'supported_targets'), - ('coredump_flash_elf_sha', 'esp32'), - ('coredump_flash_elf_sha', 'esp32c2'), - ('coredump_flash_elf_sha', 'esp32c3'), - ('coredump_flash_elf_sha', 'esp32c5'), - ('coredump_flash_elf_sha', 'esp32c6'), - ('coredump_flash_elf_sha', 'esp32c61'), - ('coredump_flash_elf_sha', 'esp32h2'), - ('coredump_flash_elf_sha', 'esp32p4'), - ('coredump_flash_elf_sha', 'esp32s2'), - ('coredump_flash_elf_sha', 'esp32s3'), - ('coredump_flash_elf_soft_sha', 'esp32'), - ('coredump_flash_elf_soft_sha', 'esp32c2'), - ('coredump_flash_elf_soft_sha', 'esp32c3'), - ('coredump_flash_elf_soft_sha', 'esp32c5'), - ('coredump_flash_elf_soft_sha', 'esp32c6'), - ('coredump_flash_elf_soft_sha', 'esp32c61'), - ('coredump_flash_elf_soft_sha', 'esp32h2'), - ('coredump_flash_elf_soft_sha', 'esp32p4'), - ('coredump_flash_elf_soft_sha', 'esp32s2'), - ('coredump_flash_elf_soft_sha', 'esp32s3'), - ('coredump_uart_bin_crc', 'esp32'), - ('coredump_uart_bin_crc', 'esp32c2'), - ('coredump_uart_bin_crc', 'esp32c3'), - ('coredump_uart_bin_crc', 'esp32c5'), - ('coredump_uart_bin_crc', 'esp32c6'), - ('coredump_uart_bin_crc', 'esp32c61'), - ('coredump_uart_bin_crc', 'esp32h2'), - ('coredump_uart_bin_crc', 'esp32p4'), - ('coredump_uart_bin_crc', 'esp32s2'), - ('coredump_uart_bin_crc', 'esp32s3'), - ('coredump_uart_elf_crc', 'esp32'), - ('coredump_uart_elf_crc', 'esp32c2'), - ('coredump_uart_elf_crc', 'esp32c3'), - ('coredump_uart_elf_crc', 'esp32c5'), - ('coredump_uart_elf_crc', 'esp32c6'), - ('coredump_uart_elf_crc', 'esp32c61'), - ('coredump_uart_elf_crc', 'esp32h2'), - ('coredump_uart_elf_crc', 'esp32p4'), - ('coredump_uart_elf_crc', 'esp32s2'), - ('coredump_uart_elf_crc', 'esp32s3'), - ('coredump_flash_custom_stack', 'esp32c2'), - ('coredump_flash_custom_stack', 'esp32c3'), - ('coredump_flash_custom_stack', 'esp32c5'), - ('coredump_flash_custom_stack', 'esp32c6'), - ('coredump_flash_custom_stack', 'esp32c61'), - ('coredump_flash_custom_stack', 'esp32h2'), - ('coredump_flash_custom_stack', 'esp32p4'), - ('gdbstub', 'esp32'), - ('gdbstub', 'esp32c2'), - ('gdbstub', 'esp32c3'), - ('gdbstub', 'esp32c5'), - ('gdbstub', 'esp32c6'), - ('gdbstub', 'esp32c61'), - ('gdbstub', 'esp32h2'), - ('gdbstub', 'esp32p4'), - ('gdbstub', 'esp32s2'), - ('gdbstub', 'esp32s3'), - ('panic', 'esp32'), - ('panic', 'esp32c2'), - ('panic', 'esp32c3'), - ('panic', 'esp32c5'), - ('panic', 'esp32c6'), - ('panic', 'esp32c61'), - ('panic', 'esp32h2'), - ('panic', 'esp32p4'), - ('panic', 'esp32s2'), - ('panic', 'esp32s3'), - ], - indirect=['config', 'target'], -) +@idf_parametrize('config, target', CONFIGS, indirect=['config', 'target']) 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') @@ -1418,80 +521,7 @@ def test_abort_cache_disabled(dut: PanicTestDut, config: str, test_func_name: st @pytest.mark.generic -@idf_parametrize( - 'config,target', - [ - ('coredump_flash_bin_crc', 'supported_targets'), - ('coredump_flash_elf_sha', 'esp32'), - ('coredump_flash_elf_sha', 'esp32c2'), - ('coredump_flash_elf_sha', 'esp32c3'), - ('coredump_flash_elf_sha', 'esp32c5'), - ('coredump_flash_elf_sha', 'esp32c6'), - ('coredump_flash_elf_sha', 'esp32c61'), - ('coredump_flash_elf_sha', 'esp32h2'), - ('coredump_flash_elf_sha', 'esp32p4'), - ('coredump_flash_elf_sha', 'esp32s2'), - ('coredump_flash_elf_sha', 'esp32s3'), - ('coredump_flash_elf_soft_sha', 'esp32'), - ('coredump_flash_elf_soft_sha', 'esp32c2'), - ('coredump_flash_elf_soft_sha', 'esp32c3'), - ('coredump_flash_elf_soft_sha', 'esp32c5'), - ('coredump_flash_elf_soft_sha', 'esp32c6'), - ('coredump_flash_elf_soft_sha', 'esp32c61'), - ('coredump_flash_elf_soft_sha', 'esp32h2'), - ('coredump_flash_elf_soft_sha', 'esp32p4'), - ('coredump_flash_elf_soft_sha', 'esp32s2'), - ('coredump_flash_elf_soft_sha', 'esp32s3'), - ('coredump_uart_bin_crc', 'esp32'), - ('coredump_uart_bin_crc', 'esp32c2'), - ('coredump_uart_bin_crc', 'esp32c3'), - ('coredump_uart_bin_crc', 'esp32c5'), - ('coredump_uart_bin_crc', 'esp32c6'), - ('coredump_uart_bin_crc', 'esp32c61'), - ('coredump_uart_bin_crc', 'esp32h2'), - ('coredump_uart_bin_crc', 'esp32p4'), - ('coredump_uart_bin_crc', 'esp32s2'), - ('coredump_uart_bin_crc', 'esp32s3'), - ('coredump_uart_elf_crc', 'esp32'), - ('coredump_uart_elf_crc', 'esp32c2'), - ('coredump_uart_elf_crc', 'esp32c3'), - ('coredump_uart_elf_crc', 'esp32c5'), - ('coredump_uart_elf_crc', 'esp32c6'), - ('coredump_uart_elf_crc', 'esp32c61'), - ('coredump_uart_elf_crc', 'esp32h2'), - ('coredump_uart_elf_crc', 'esp32p4'), - ('coredump_uart_elf_crc', 'esp32s2'), - ('coredump_uart_elf_crc', 'esp32s3'), - ('coredump_flash_custom_stack', 'esp32c2'), - ('coredump_flash_custom_stack', 'esp32c3'), - ('coredump_flash_custom_stack', 'esp32c5'), - ('coredump_flash_custom_stack', 'esp32c6'), - ('coredump_flash_custom_stack', 'esp32c61'), - ('coredump_flash_custom_stack', 'esp32h2'), - ('coredump_flash_custom_stack', 'esp32p4'), - ('gdbstub', 'esp32'), - ('gdbstub', 'esp32c2'), - ('gdbstub', 'esp32c3'), - ('gdbstub', 'esp32c5'), - ('gdbstub', 'esp32c6'), - ('gdbstub', 'esp32c61'), - ('gdbstub', 'esp32h2'), - ('gdbstub', 'esp32p4'), - ('gdbstub', 'esp32s2'), - ('gdbstub', 'esp32s3'), - ('panic', 'esp32'), - ('panic', 'esp32c2'), - ('panic', 'esp32c3'), - ('panic', 'esp32c5'), - ('panic', 'esp32c6'), - ('panic', 'esp32c61'), - ('panic', 'esp32h2'), - ('panic', 'esp32p4'), - ('panic', 'esp32s2'), - ('panic', 'esp32s3'), - ], - indirect=['config', 'target'], -) +@idf_parametrize('config, target', CONFIGS, indirect=['config', 'target']) 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.*$' @@ -1513,80 +543,7 @@ def test_assert(dut: PanicTestDut, config: str, test_func_name: str) -> None: @pytest.mark.generic -@idf_parametrize( - 'config,target', - [ - ('coredump_flash_bin_crc', 'supported_targets'), - ('coredump_flash_elf_sha', 'esp32'), - ('coredump_flash_elf_sha', 'esp32c2'), - ('coredump_flash_elf_sha', 'esp32c3'), - ('coredump_flash_elf_sha', 'esp32c5'), - ('coredump_flash_elf_sha', 'esp32c6'), - ('coredump_flash_elf_sha', 'esp32c61'), - ('coredump_flash_elf_sha', 'esp32h2'), - ('coredump_flash_elf_sha', 'esp32p4'), - ('coredump_flash_elf_sha', 'esp32s2'), - ('coredump_flash_elf_sha', 'esp32s3'), - ('coredump_flash_elf_soft_sha', 'esp32'), - ('coredump_flash_elf_soft_sha', 'esp32c2'), - ('coredump_flash_elf_soft_sha', 'esp32c3'), - ('coredump_flash_elf_soft_sha', 'esp32c5'), - ('coredump_flash_elf_soft_sha', 'esp32c6'), - ('coredump_flash_elf_soft_sha', 'esp32c61'), - ('coredump_flash_elf_soft_sha', 'esp32h2'), - ('coredump_flash_elf_soft_sha', 'esp32p4'), - ('coredump_flash_elf_soft_sha', 'esp32s2'), - ('coredump_flash_elf_soft_sha', 'esp32s3'), - ('coredump_uart_bin_crc', 'esp32'), - ('coredump_uart_bin_crc', 'esp32c2'), - ('coredump_uart_bin_crc', 'esp32c3'), - ('coredump_uart_bin_crc', 'esp32c5'), - ('coredump_uart_bin_crc', 'esp32c6'), - ('coredump_uart_bin_crc', 'esp32c61'), - ('coredump_uart_bin_crc', 'esp32h2'), - ('coredump_uart_bin_crc', 'esp32p4'), - ('coredump_uart_bin_crc', 'esp32s2'), - ('coredump_uart_bin_crc', 'esp32s3'), - ('coredump_uart_elf_crc', 'esp32'), - ('coredump_uart_elf_crc', 'esp32c2'), - ('coredump_uart_elf_crc', 'esp32c3'), - ('coredump_uart_elf_crc', 'esp32c5'), - ('coredump_uart_elf_crc', 'esp32c6'), - ('coredump_uart_elf_crc', 'esp32c61'), - ('coredump_uart_elf_crc', 'esp32h2'), - ('coredump_uart_elf_crc', 'esp32p4'), - ('coredump_uart_elf_crc', 'esp32s2'), - ('coredump_uart_elf_crc', 'esp32s3'), - ('coredump_flash_custom_stack', 'esp32c2'), - ('coredump_flash_custom_stack', 'esp32c3'), - ('coredump_flash_custom_stack', 'esp32c5'), - ('coredump_flash_custom_stack', 'esp32c6'), - ('coredump_flash_custom_stack', 'esp32c61'), - ('coredump_flash_custom_stack', 'esp32h2'), - ('coredump_flash_custom_stack', 'esp32p4'), - ('gdbstub', 'esp32'), - ('gdbstub', 'esp32c2'), - ('gdbstub', 'esp32c3'), - ('gdbstub', 'esp32c5'), - ('gdbstub', 'esp32c6'), - ('gdbstub', 'esp32c61'), - ('gdbstub', 'esp32h2'), - ('gdbstub', 'esp32p4'), - ('gdbstub', 'esp32s2'), - ('gdbstub', 'esp32s3'), - ('panic', 'esp32'), - ('panic', 'esp32c2'), - ('panic', 'esp32c3'), - ('panic', 'esp32c5'), - ('panic', 'esp32c6'), - ('panic', 'esp32c61'), - ('panic', 'esp32h2'), - ('panic', 'esp32p4'), - ('panic', 'esp32s2'), - ('panic', 'esp32s3'), - ], - indirect=['config', 'target'], -) +@idf_parametrize('config, target', CONFIGS, indirect=['config', 'target']) 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') @@ -1623,8 +580,7 @@ def cache_error_log_check(dut: PanicTestDut) -> None: @pytest.mark.generic -@pytest.mark.parametrize('config', ['panic'], indirect=True) -@idf_parametrize('target', ['supported_targets'], indirect=['target']) +@idf_parametrize('config, target', CONFIG_PANIC, indirect=['config', 'target']) 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) @@ -1648,9 +604,8 @@ def test_panic_delay(dut: PanicTestDut) -> None: dut.expect_exact('rst:0xc (SW_CPU_RESET)') -@pytest.mark.parametrize('config', ['panic'], indirect=True) @pytest.mark.generic -@idf_parametrize('target', ['supported_targets'], indirect=['target']) +@idf_parametrize('config, target', CONFIG_PANIC, indirect=['config', 'target']) def test_panic_handler_stuck0(dut: PanicTestDut, config: str, test_func_name: str) -> None: dut.run_test_func(test_func_name) @@ -1661,9 +616,8 @@ def test_panic_handler_stuck0(dut: PanicTestDut, config: str, test_func_name: st dut.expect_cpu_reset() -@pytest.mark.parametrize('config', ['panic'], indirect=True) @pytest.mark.generic -@idf_parametrize('target', ['esp32', 'esp32s3', 'esp32p4'], indirect=['target']) +@idf_parametrize('config, target', CONFIG_PANIC_DUAL_CORE, indirect=['config', 'target']) def test_panic_handler_stuck1(dut: PanicTestDut, config: str, test_func_name: str) -> None: dut.run_test_func(test_func_name) @@ -1674,9 +628,8 @@ def test_panic_handler_stuck1(dut: PanicTestDut, config: str, test_func_name: st dut.expect_cpu_reset() -@pytest.mark.parametrize('config', ['panic'], indirect=True) @pytest.mark.generic -@idf_parametrize('target', ['supported_targets'], indirect=['target']) +@idf_parametrize('config, target', CONFIG_PANIC, indirect=['config', 'target']) def test_panic_handler_crash0(dut: PanicTestDut, config: str, test_func_name: str) -> None: dut.run_test_func(test_func_name) @@ -1693,9 +646,8 @@ def test_panic_handler_crash0(dut: PanicTestDut, config: str, test_func_name: st dut.expect_cpu_reset() -@pytest.mark.parametrize('config', ['panic'], indirect=True) @pytest.mark.generic -@idf_parametrize('target', ['esp32', 'esp32s3', 'esp32p4'], indirect=['target']) +@idf_parametrize('config, target', CONFIG_PANIC_DUAL_CORE, indirect=['config', 'target']) def test_panic_handler_crash1(dut: PanicTestDut, config: str, test_func_name: str) -> None: dut.run_test_func(test_func_name) @@ -1718,54 +670,65 @@ def test_panic_handler_crash1(dut: PanicTestDut, config: str, test_func_name: st # Memprot-related tests are supported only on targets with PMS/PMA peripheral; # currently ESP32-S2, ESP32-C3, ESP32-C2, ESP32-H2, ESP32-C6, ESP32-P4, ESP32-C5 and ESP32-C61 are supported -CONFIGS_MEMPROT_IDRAM = [ - pytest.param('memprot_esp32s2', marks=[pytest.mark.esp32s2]), - pytest.param('memprot_esp32c3', marks=[pytest.mark.esp32c3]), - pytest.param('memprot_esp32c2', marks=[pytest.mark.esp32c2]), - pytest.param('memprot_esp32c5', marks=[pytest.mark.esp32c5]), - pytest.param('memprot_esp32c6', marks=[pytest.mark.esp32c6]), - pytest.param('memprot_esp32c61', marks=[pytest.mark.esp32c61]), - pytest.param('memprot_esp32h2', marks=[pytest.mark.esp32h2]), - pytest.param('memprot_esp32p4', marks=[pytest.mark.esp32p4]), -] +CONFIGS_MEMPROT_IDRAM = list( + itertools.chain( + itertools.product( + [ + 'memprot_esp32s2', + 'memprot_esp32c3', + 'memprot_esp32c2', + 'memprot_esp32c5', + 'memprot_esp32c61', + 'memprot_esp32h2', + 'memprot_esp32p4', + ], + ['esp32s2', 'esp32c3', 'esp32c2', 'esp32c5', 'esp32c61', 'esp32h2', 'esp32p4'], + ) + ) +) -CONFIGS_MEMPROT_DCACHE = [ - pytest.param('memprot_esp32s2', marks=pytest.mark.esp32s2), -] +CONFIGS_MEMPROT_DCACHE = list(itertools.chain(itertools.product(['memprot_esp32s2'], ['esp32s2']))) -CONFIGS_MEMPROT_RTC_FAST_MEM = [ - pytest.param('memprot_esp32s2', marks=[pytest.mark.esp32s2]), - pytest.param('memprot_esp32c3', marks=[pytest.mark.esp32c3]), - pytest.param('memprot_esp32c5', marks=[pytest.mark.esp32c5]), - pytest.param('memprot_esp32c6', marks=[pytest.mark.esp32c6]), - pytest.param('memprot_esp32h2', marks=[pytest.mark.esp32h2]), - pytest.param('memprot_esp32p4', marks=[pytest.mark.esp32p4]), -] +CONFIGS_MEMPROT_RTC_FAST_MEM = list( + itertools.chain( + itertools.product( + [ + 'memprot_esp32s2', + 'memprot_esp32c3', + 'memprot_esp32c5', + 'memprot_esp32c6', + 'memprot_esp32h2', + 'memprot_esp32p4', + ], + ['esp32s2', 'esp32c3', 'esp32c5', 'esp32c6', 'esp32h2', 'esp32p4'], + ) + ) +) -CONFIGS_MEMPROT_RTC_SLOW_MEM = [ - pytest.param('memprot_esp32s2', marks=[pytest.mark.esp32s2]), -] -CONFIGS_MEMPROT_FLASH_IDROM = [ - pytest.param('memprot_esp32c5', marks=[pytest.mark.esp32c5]), - pytest.param('memprot_esp32c6', marks=[pytest.mark.esp32c6]), - pytest.param('memprot_esp32c61', marks=[pytest.mark.esp32c61]), - pytest.param('memprot_esp32h2', marks=[pytest.mark.esp32h2]), - pytest.param('memprot_esp32p4', marks=[pytest.mark.esp32p4]), -] +CONFIGS_MEMPROT_RTC_SLOW_MEM = list(itertools.chain(itertools.product(['memprot_esp32s2'], ['esp32s2']))) -CONFIGS_MEMPROT_INVALID_REGION_PROTECTION_USING_PMA = [ - pytest.param('memprot_esp32c5', marks=[pytest.mark.esp32c5]), - pytest.param('memprot_esp32c6', marks=[pytest.mark.esp32c6]), - pytest.param('memprot_esp32c61', marks=[pytest.mark.esp32c61]), - pytest.param('memprot_esp32h2', marks=[pytest.mark.esp32h2]), - pytest.param('memprot_esp32p4', marks=[pytest.mark.esp32p4]), -] +CONFIGS_MEMPROT_FLASH_IDROM = list( + itertools.chain( + itertools.product( + ['memprot_esp32c5', 'memprot_esp32c6', 'memprot_esp32c61', 'memprot_esp32h2', 'memprot_esp32p4'], + ['esp32c5', 'esp32c6', 'esp32c61', 'esp32h2', 'esp32p4'], + ) + ) +) + +CONFIGS_MEMPROT_INVALID_REGION_PROTECTION_USING_PMA = list( + itertools.chain( + itertools.product( + ['memprot_esp32c5', 'memprot_esp32c6', 'memprot_esp32c61', 'memprot_esp32h2', 'memprot_esp32p4'], + ['esp32c5', 'esp32c6', 'esp32c61', 'esp32h2', 'esp32p4'], + ) + ) +) @pytest.mark.generic -@idf_parametrize('config', ['memprot_esp32s2'], indirect=['config']) -@idf_parametrize('target', ['esp32s2'], indirect=['target']) +@idf_parametrize('config, target', CONFIGS_MEMPROT_DCACHE, indirect=['config', 'target']) 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') @@ -1775,8 +738,7 @@ def test_dcache_read_violation(dut: PanicTestDut, test_func_name: str) -> None: # TODO: IDF-6820: ESP32-S2 -> Fix multiple panic reasons in different runs @pytest.mark.generic @pytest.mark.xfail('config.getvalue("target") == "esp32s2"', reason='Incorrect panic reason may be observed', run=False) -@idf_parametrize('config', ['memprot_esp32s2'], indirect=['config']) -@idf_parametrize('target', ['esp32s2'], indirect=['target']) +@idf_parametrize('config, target', CONFIGS_MEMPROT_DCACHE, indirect=['config', 'target']) 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') @@ -1787,20 +749,7 @@ def test_dcache_write_violation(dut: PanicTestDut, test_func_name: str) -> None: @pytest.mark.generic -@idf_parametrize( - 'config,target', - [ - ('memprot_esp32s2', 'esp32s2'), - ('memprot_esp32c3', 'esp32c3'), - ('memprot_esp32c2', 'esp32c2'), - ('memprot_esp32c5', 'esp32c5'), - ('memprot_esp32c6', 'esp32c6'), - ('memprot_esp32c61', 'esp32c61'), - ('memprot_esp32h2', 'esp32h2'), - ('memprot_esp32p4', 'esp32p4'), - ], - indirect=['config', 'target'], -) +@idf_parametrize('config, target', CONFIGS_MEMPROT_IDRAM, indirect=['config', 'target']) def test_iram_reg1_write_violation(dut: PanicTestDut, test_func_name: str) -> None: dut.run_test_func(test_func_name) @@ -1820,20 +769,7 @@ def test_iram_reg1_write_violation(dut: PanicTestDut, test_func_name: str) -> No @pytest.mark.generic -@idf_parametrize( - 'config,target', - [ - ('memprot_esp32s2', 'esp32s2'), - ('memprot_esp32c3', 'esp32c3'), - ('memprot_esp32c2', 'esp32c2'), - ('memprot_esp32c5', 'esp32c5'), - ('memprot_esp32c6', 'esp32c6'), - ('memprot_esp32c61', 'esp32c61'), - ('memprot_esp32h2', 'esp32h2'), - ('memprot_esp32p4', 'esp32p4'), - ], - indirect=['config', 'target'], -) +@idf_parametrize('config, target', CONFIGS_MEMPROT_IDRAM, indirect=['config', 'target']) def test_iram_reg2_write_violation(dut: PanicTestDut, test_func_name: str) -> None: dut.run_test_func(test_func_name) @@ -1858,20 +794,7 @@ def test_iram_reg2_write_violation(dut: PanicTestDut, test_func_name: str) -> No @pytest.mark.generic -@idf_parametrize( - 'config,target', - [ - ('memprot_esp32s2', 'esp32s2'), - ('memprot_esp32c3', 'esp32c3'), - ('memprot_esp32c2', 'esp32c2'), - ('memprot_esp32c5', 'esp32c5'), - ('memprot_esp32c6', 'esp32c6'), - ('memprot_esp32c61', 'esp32c61'), - ('memprot_esp32h2', 'esp32h2'), - ('memprot_esp32p4', 'esp32p4'), - ], - indirect=['config', 'target'], -) +@idf_parametrize('config, target', CONFIGS_MEMPROT_IDRAM, indirect=['config', 'target']) def test_iram_reg3_write_violation(dut: PanicTestDut, test_func_name: str) -> None: dut.run_test_func(test_func_name) @@ -1898,20 +821,7 @@ def test_iram_reg3_write_violation(dut: PanicTestDut, test_func_name: str) -> No # TODO: IDF-6820: ESP32-S2 -> Fix incorrect panic reason: Unhandled debug exception @pytest.mark.generic @pytest.mark.xfail('config.getvalue("target") == "esp32s2"', reason='Incorrect panic reason may be observed', run=False) -@idf_parametrize( - 'config,target', - [ - ('memprot_esp32s2', 'esp32s2'), - ('memprot_esp32c3', 'esp32c3'), - ('memprot_esp32c2', 'esp32c2'), - ('memprot_esp32c5', 'esp32c5'), - ('memprot_esp32c6', 'esp32c6'), - ('memprot_esp32c61', 'esp32c61'), - ('memprot_esp32h2', 'esp32h2'), - ('memprot_esp32p4', 'esp32p4'), - ], - indirect=['config', 'target'], -) +@idf_parametrize('config, target', CONFIGS_MEMPROT_IDRAM, indirect=['config', 'target']) def test_iram_reg4_write_violation(dut: PanicTestDut, test_func_name: str) -> None: dut.run_test_func(test_func_name) @@ -1940,20 +850,7 @@ def test_iram_reg4_write_violation(dut: PanicTestDut, test_func_name: str) -> No @pytest.mark.xfail( 'config.getvalue("target") == "esp32s2"', reason='Multiple panic reasons for the same test may surface', run=False ) -@idf_parametrize( - 'config,target', - [ - ('memprot_esp32s2', 'esp32s2'), - ('memprot_esp32c3', 'esp32c3'), - ('memprot_esp32c2', 'esp32c2'), - ('memprot_esp32c5', 'esp32c5'), - ('memprot_esp32c6', 'esp32c6'), - ('memprot_esp32c61', 'esp32c61'), - ('memprot_esp32h2', 'esp32h2'), - ('memprot_esp32p4', 'esp32p4'), - ], - indirect=['config', 'target'], -) +@idf_parametrize('config, target', CONFIGS_MEMPROT_IDRAM, indirect=['config', 'target']) def test_dram_reg1_execute_violation(dut: PanicTestDut, test_func_name: str) -> None: dut.run_test_func(test_func_name) @@ -1975,20 +872,7 @@ def test_dram_reg1_execute_violation(dut: PanicTestDut, test_func_name: str) -> @pytest.mark.xfail( 'config.getvalue("target") == "esp32s2"', reason='Multiple panic reasons for the same test may surface', run=False ) -@idf_parametrize( - 'config,target', - [ - ('memprot_esp32s2', 'esp32s2'), - ('memprot_esp32c3', 'esp32c3'), - ('memprot_esp32c2', 'esp32c2'), - ('memprot_esp32c5', 'esp32c5'), - ('memprot_esp32c6', 'esp32c6'), - ('memprot_esp32c61', 'esp32c61'), - ('memprot_esp32h2', 'esp32h2'), - ('memprot_esp32p4', 'esp32p4'), - ], - indirect=['config', 'target'], -) +@idf_parametrize('config, target', CONFIGS_MEMPROT_IDRAM, indirect=['config', 'target']) def test_dram_reg2_execute_violation(dut: PanicTestDut, test_func_name: str) -> None: dut.run_test_func(test_func_name) @@ -2005,18 +889,7 @@ def test_dram_reg2_execute_violation(dut: PanicTestDut, test_func_name: str) -> @pytest.mark.generic -@idf_parametrize( - 'config,target', - [ - ('memprot_esp32s2', 'esp32s2'), - ('memprot_esp32c3', 'esp32c3'), - ('memprot_esp32c5', 'esp32c5'), - ('memprot_esp32c6', 'esp32c6'), - ('memprot_esp32h2', 'esp32h2'), - ('memprot_esp32p4', 'esp32p4'), - ], - indirect=['config', 'target'], -) +@idf_parametrize('config, target', CONFIGS_MEMPROT_RTC_FAST_MEM, indirect=['config', 'target']) 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') @@ -2028,18 +901,7 @@ def test_rtc_fast_reg1_execute_violation(dut: PanicTestDut, test_func_name: str) 'config.getvalue("target") in ["esp32c5", "esp32c6", "esp32h2", "esp32p4"]', reason='Not a violation condition, no PMS peripheral case', ) -@idf_parametrize( - 'config,target', - [ - ('memprot_esp32s2', 'esp32s2'), - ('memprot_esp32c3', 'esp32c3'), - ('memprot_esp32c5', 'esp32c5'), - ('memprot_esp32c6', 'esp32c6'), - ('memprot_esp32h2', 'esp32h2'), - ('memprot_esp32p4', 'esp32p4'), - ], - indirect=['config', 'target'], -) +@idf_parametrize('config, target', CONFIGS_MEMPROT_RTC_FAST_MEM, indirect=['config', 'target']) 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') @@ -2063,18 +925,7 @@ def test_rtc_fast_reg2_execute_violation(dut: PanicTestDut, test_func_name: str) @pytest.mark.xfail( 'config.getvalue("target") == "esp32s2"', reason='Multiple panic reasons for the same test may surface', run=False ) -@idf_parametrize( - 'config,target', - [ - ('memprot_esp32s2', 'esp32s2'), - ('memprot_esp32c3', 'esp32c3'), - ('memprot_esp32c5', 'esp32c5'), - ('memprot_esp32c6', 'esp32c6'), - ('memprot_esp32h2', 'esp32h2'), - ('memprot_esp32p4', 'esp32p4'), - ], - indirect=['config', 'target'], -) +@idf_parametrize('config, target', CONFIGS_MEMPROT_RTC_FAST_MEM, indirect=['config', 'target']) def test_rtc_fast_reg3_execute_violation(dut: PanicTestDut, test_func_name: str) -> None: dut.run_test_func(test_func_name) @@ -2099,8 +950,7 @@ def test_rtc_fast_reg3_execute_violation(dut: PanicTestDut, test_func_name: str) @pytest.mark.generic -@idf_parametrize('config', ['memprot_esp32s2'], indirect=['config']) -@idf_parametrize('target', ['esp32s2'], indirect=['target']) +@idf_parametrize('config, target', CONFIGS_MEMPROT_RTC_SLOW_MEM, indirect=['config', 'target']) 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') @@ -2111,8 +961,7 @@ def test_rtc_slow_reg1_execute_violation(dut: PanicTestDut, test_func_name: str) @pytest.mark.generic -@idf_parametrize('config', ['memprot_esp32s2'], indirect=['config']) -@idf_parametrize('target', ['esp32s2'], indirect=['target']) +@idf_parametrize('config, target', CONFIGS_MEMPROT_RTC_SLOW_MEM, indirect=['config', 'target']) 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') @@ -2123,17 +972,7 @@ def test_rtc_slow_reg2_execute_violation(dut: PanicTestDut, test_func_name: str) @pytest.mark.generic -@idf_parametrize( - 'config,target', - [ - ('memprot_esp32c5', 'esp32c5'), - ('memprot_esp32c6', 'esp32c6'), - ('memprot_esp32c61', 'esp32c61'), - ('memprot_esp32h2', 'esp32h2'), - ('memprot_esp32p4', 'esp32p4'), - ], - indirect=['config', 'target'], -) +@idf_parametrize('config, target', CONFIGS_MEMPROT_FLASH_IDROM, indirect=['config', 'target']) def test_irom_reg_write_violation(dut: PanicTestDut, test_func_name: str) -> None: dut.run_test_func(test_func_name) dut.expect_gme('Store access fault') @@ -2142,17 +981,7 @@ def test_irom_reg_write_violation(dut: PanicTestDut, test_func_name: str) -> Non @pytest.mark.generic -@idf_parametrize( - 'config,target', - [ - ('memprot_esp32c5', 'esp32c5'), - ('memprot_esp32c6', 'esp32c6'), - ('memprot_esp32c61', 'esp32c61'), - ('memprot_esp32h2', 'esp32h2'), - ('memprot_esp32p4', 'esp32p4'), - ], - indirect=['config', 'target'], -) +@idf_parametrize('config, target', CONFIGS_MEMPROT_FLASH_IDROM, indirect=['config', 'target']) def test_drom_reg_write_violation(dut: PanicTestDut, test_func_name: str) -> None: dut.run_test_func(test_func_name) dut.expect_gme('Store access fault') @@ -2161,17 +990,7 @@ def test_drom_reg_write_violation(dut: PanicTestDut, test_func_name: str) -> Non @pytest.mark.generic -@idf_parametrize( - 'config,target', - [ - ('memprot_esp32c5', 'esp32c5'), - ('memprot_esp32c6', 'esp32c6'), - ('memprot_esp32c61', 'esp32c61'), - ('memprot_esp32h2', 'esp32h2'), - ('memprot_esp32p4', 'esp32p4'), - ], - indirect=['config', 'target'], -) +@idf_parametrize('config, target', CONFIGS_MEMPROT_FLASH_IDROM, indirect=['config', 'target']) def test_drom_reg_execute_violation(dut: PanicTestDut, test_func_name: str) -> None: dut.run_test_func(test_func_name) dut.expect_gme('Instruction access fault') @@ -2180,17 +999,7 @@ def test_drom_reg_execute_violation(dut: PanicTestDut, test_func_name: str) -> N @pytest.mark.generic -@idf_parametrize( - 'config,target', - [ - ('memprot_esp32c5', 'esp32c5'), - ('memprot_esp32c6', 'esp32c6'), - ('memprot_esp32c61', 'esp32c61'), - ('memprot_esp32h2', 'esp32h2'), - ('memprot_esp32p4', 'esp32p4'), - ], - indirect=['config', 'target'], -) +@idf_parametrize('config, target', CONFIGS_MEMPROT_INVALID_REGION_PROTECTION_USING_PMA, indirect=['config', 'target']) 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') @@ -2199,17 +1008,7 @@ def test_invalid_memory_region_write_violation(dut: PanicTestDut, test_func_name @pytest.mark.generic -@idf_parametrize( - 'config,target', - [ - ('memprot_esp32c5', 'esp32c5'), - ('memprot_esp32c6', 'esp32c6'), - ('memprot_esp32c61', 'esp32c61'), - ('memprot_esp32h2', 'esp32h2'), - ('memprot_esp32p4', 'esp32p4'), - ], - indirect=['config', 'target'], -) +@idf_parametrize('config, target', CONFIGS_MEMPROT_INVALID_REGION_PROTECTION_USING_PMA, indirect=['config', 'target']) 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') @@ -2244,14 +1043,7 @@ def test_hw_stack_guard_cpu(dut: PanicTestDut, cpu: int) -> None: @pytest.mark.generic -@idf_parametrize( - 'config', - ['coredump_flash_bin_crc', 'coredump_uart_bin_crc', 'coredump_uart_elf_crc', 'gdbstub', 'panic'], - indirect=['config'], -) -@idf_parametrize( - 'target', ['esp32c2', 'esp32c3', 'esp32c5', 'esp32c6', 'esp32c61', 'esp32h2', 'esp32p4'], indirect=['target'] -) +@idf_parametrize('config, target', CONFIGS_HW_STACK_GUARD, indirect=['config', 'target']) 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) @@ -2259,12 +1051,7 @@ def test_hw_stack_guard_cpu0(dut: PanicTestDut, config: str, test_func_name: str @pytest.mark.generic -@idf_parametrize( - 'config', - ['coredump_flash_bin_crc', 'coredump_uart_bin_crc', 'coredump_uart_elf_crc', 'gdbstub', 'panic'], - indirect=['config'], -) -@idf_parametrize('target', ['esp32p4'], indirect=['target']) +@idf_parametrize('config, target', CONFIGS_HW_STACK_GUARD_DUAL_CORE, indirect=['config', 'target']) def test_hw_stack_guard_cpu1(dut: PanicTestDut, config: str, test_func_name: str) -> None: dut.run_test_func(test_func_name) test_hw_stack_guard_cpu(dut, 1) @@ -2286,8 +1073,7 @@ def test_illegal_access(dut: PanicTestDut, config: str, test_func_name: str) -> @pytest.mark.generic -@idf_parametrize('config', ['coredump_flash_capture_dram'], indirect=['config']) -@idf_parametrize('target', ['supported_targets'], indirect=['target']) +@idf_parametrize('config, target', CONFIG_CAPTURE_DRAM, indirect=['config', 'target']) 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.*$' @@ -2334,22 +1120,20 @@ def _test_coredump_summary(dut: PanicTestDut, flash_encrypted: bool, coredump_en @pytest.mark.generic -@idf_parametrize('config', ['coredump_flash_elf_sha'], indirect=['config']) -@idf_parametrize('target', ['supported_targets'], indirect=['target']) +@idf_parametrize('config, target', CONFIG_COREDUMP_SUMMARY, indirect=['config', 'target']) def test_coredump_summary(dut: PanicTestDut) -> None: _test_coredump_summary(dut, False, False) @pytest.mark.flash_encryption -@idf_parametrize('config', ['coredump_flash_encrypted', 'coredump_flash_encrypted_coredump_plain'], indirect=['config']) -@idf_parametrize('target', ['esp32', 'esp32c3'], indirect=['target']) +@idf_parametrize('config, target', CONFIG_COREDUMP_SUMMARY_FLASH_ENCRYPTED, indirect=['config', 'target']) def test_coredump_summary_flash_encrypted(dut: PanicTestDut, config: str) -> None: _test_coredump_summary(dut, True, config == 'coredump_flash_encrypted') @pytest.mark.generic @idf_parametrize('config', ['coredump_flash_elf_sha'], indirect=['config']) -@idf_parametrize('target', ['supported_targets'], indirect=['target']) +@idf_parametrize('target', TARGETS_ALL, indirect=['target']) 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: @@ -2381,8 +1165,7 @@ def test_tcb_corrupted(dut: PanicTestDut, target: str, config: str, test_func_na @pytest.mark.generic -@idf_parametrize('config', ['framepointer'], indirect=['config']) -@idf_parametrize('target', ['esp32c3', 'esp32p4'], indirect=['target']) +@idf_parametrize('config, target', CONFIGS_BACKTRACE, indirect=['config', 'target']) def test_panic_print_backtrace(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'