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 17037437ff
commit 80ad7ec71a
5 changed files with 30 additions and 0 deletions

View File

@@ -83,6 +83,10 @@ void test_setup_coredump_summary(void);
void test_coredump_summary(void); void test_coredump_summary(void);
#endif #endif
#if CONFIG_ESP_SYSTEM_PANIC_PRINT_HALT
void test_panic_halt(void);
#endif /* CONFIG_ESP_SYSTEM_PANIC_PRINT_HALT */
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View File

@@ -127,6 +127,9 @@ void app_main(void)
HANDLE_TEST(test_name, test_tcb_corrupted); HANDLE_TEST(test_name, test_tcb_corrupted);
HANDLE_TEST(test_name, test_panic_handler_stuck0); HANDLE_TEST(test_name, test_panic_handler_stuck0);
HANDLE_TEST(test_name, test_panic_handler_crash0); 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 #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_setup_coredump_summary);
HANDLE_TEST(test_name, test_coredump_summary); HANDLE_TEST(test_name, test_coredump_summary);

View File

@@ -443,3 +443,12 @@ void test_capture_dram(void)
assert(0); assert(0);
} }
#endif #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 */

View File

@@ -1237,3 +1237,12 @@ def test_tcb_corrupted(dut: PanicTestDut, target: str, config: str, test_func_na
expected_backtrace=None, expected_backtrace=None,
expected_coredump=coredump_pattern 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)

View File

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