test(panic_handler): Added unit test to verify panic handler can halt

This test verifies that the panic handler can indeed halt when
configured to print and halt instead of rebboting.
This commit is contained in:
Sudeep Mohanty
2025-08-13 12:17:35 +02:00
parent fed8781347
commit 99291d4def
5 changed files with 30 additions and 0 deletions
@@ -83,6 +83,10 @@ void test_setup_coredump_summary(void);
void test_coredump_summary(void);
#endif
#if CONFIG_ESP_SYSTEM_PANIC_PRINT_HALT
void test_panic_halt(void);
#endif /* CONFIG_ESP_SYSTEM_PANIC_PRINT_HALT */
#ifdef __cplusplus
}
#endif
@@ -127,6 +127,9 @@ void app_main(void)
HANDLE_TEST(test_name, test_tcb_corrupted);
HANDLE_TEST(test_name, test_panic_handler_stuck0);
HANDLE_TEST(test_name, test_panic_handler_crash0);
#if CONFIG_ESP_SYSTEM_PANIC_PRINT_HALT
HANDLE_TEST(test_name, test_panic_halt);
#endif /* CONFIG_ESP_SYSTEM_PANIC_PRINT_HALT */
#if CONFIG_ESP_COREDUMP_ENABLE_TO_FLASH && CONFIG_ESP_COREDUMP_DATA_FORMAT_ELF
HANDLE_TEST(test_name, test_setup_coredump_summary);
HANDLE_TEST(test_name, test_coredump_summary);
@@ -443,3 +443,12 @@ void test_capture_dram(void)
assert(0);
}
#endif
#if CONFIG_ESP_SYSTEM_PANIC_PRINT_HALT
void test_panic_halt(void)
{
printf("Triggering panic. Device should print 'CPU halted.' and stop.\n");
fflush(stdout);
assert(0);
}
#endif /* CONFIG_ESP_SYSTEM_PANIC_PRINT_HALT */
@@ -1223,3 +1223,12 @@ def test_tcb_corrupted(dut: PanicTestDut, target: str, config: str, test_func_na
expected_backtrace=None,
expected_coredump=coredump_pattern
)
@pytest.mark.generic
@pytest.mark.supported_targets
@pytest.mark.parametrize('config', ['panic_halt'], indirect=True)
def test_panic_halt(dut: PanicTestDut) -> None:
dut.run_test_func('test_panic_halt')
dut.expect_exact('CPU halted.', timeout=30)
dut.expect_none(dut.REBOOT, timeout=3)
@@ -0,0 +1,5 @@
# Panic halt CI config
CONFIG_ESP_SYSTEM_PANIC_PRINT_HALT=y
CONFIG_ESP_SYSTEM_PANIC_PRINT_REBOOT=n
CONFIG_ESP_SYSTEM_PANIC_SILENT_REBOOT=n
CONFIG_ESP_SYSTEM_PANIC_GDBSTUB=n