1- # SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD
1+ # SPDX-FileCopyrightText: 2022-2025 Espressif Systems (Shanghai) CO LTD
22# SPDX-License-Identifier: CC0-1.0
33import re
44from typing import Any
@@ -120,14 +120,37 @@ def expect_coredump_flash_write_logs(dut: PanicTestDut, config: str) -> None:
120120 dut .expect_exact ('Backing up stack @' )
121121 dut .expect_exact ('Restoring stack' )
122122 dut .expect_exact ('Core dump has been saved to flash.' )
123- dut .expect ('Rebooting...' )
123+ dut .expect (dut .REBOOT )
124+
125+
126+ def expect_coredump_uart_write_logs (dut : PanicTestDut , check_cpu_reset : Optional [bool ] = True ) -> Any :
127+ # ================= CORE DUMP START =================
128+ # B8AAAMAEgAGAAAAXAEAAAAAAABkAAAA
129+ # ...
130+ # ================= CORE DUMP END =================
131+ # Coredump checksum='9730d7ff'
132+ # Rebooting...
133+ # ..
134+ # rst:0xc (SW_CPU_RESET),boot:
135+
136+ # Read all uart logs until the end of the reset reason
137+ uart_str = dut .expect (',boot:' , return_what_before_match = True ).decode ('utf-8' , errors = 'ignore' )
138+ coredump_base64 = uart_str .split (dut .COREDUMP_UART_START )[1 ].split (dut .COREDUMP_UART_END )[0 ].strip ()
139+ uart_str = uart_str .split (dut .COREDUMP_UART_END )[1 ]
140+ assert re .search (dut .COREDUMP_CHECKSUM , uart_str )
141+ assert re .search (dut .REBOOT , uart_str )
142+ if check_cpu_reset :
143+ assert re .search (dut .CPU_RESET , uart_str )
144+ return coredump_base64
124145
125146
126147def common_test (dut : PanicTestDut , config : str , expected_backtrace : Optional [List [str ]] = None , check_cpu_reset : Optional [bool ] = True ,
127148 expected_coredump : Optional [Sequence [Union [str , Pattern [Any ]]]] = None ) -> None :
128149 if 'gdbstub' in config :
129150 if 'coredump' in config :
130- dut .process_coredump_uart (expected_coredump , False )
151+ uart_str = dut .expect (dut .COREDUMP_CHECKSUM , return_what_before_match = True ).decode ('utf-8' )
152+ coredump_base64 = uart_str .split (dut .COREDUMP_UART_START )[1 ].split (dut .COREDUMP_UART_END )[0 ].strip ()
153+ dut .process_coredump_uart (coredump_base64 , expected_coredump )
131154 dut .expect_exact ('Entering gdb stub now.' )
132155 dut .start_gdb_for_gdbstub ()
133156 frames = dut .gdb_backtrace ()
@@ -141,12 +164,14 @@ def common_test(dut: PanicTestDut, config: str, expected_backtrace: Optional[Lis
141164 expected_coredump = None
142165
143166 if 'uart' in config :
144- dut .process_coredump_uart (expected_coredump )
167+ coredump_base64 = expect_coredump_uart_write_logs (dut , check_cpu_reset )
168+ dut .process_coredump_uart (coredump_base64 , expected_coredump )
169+ check_cpu_reset = False # CPU reset is already checked in expect_coredump_uart_write_logs
145170 elif 'flash' in config :
146171 expect_coredump_flash_write_logs (dut , config )
147172 dut .process_coredump_flash (expected_coredump )
148173 elif 'panic' in config :
149- dut .expect ('Rebooting...' , timeout = 60 )
174+ dut .expect (dut . REBOOT , timeout = 60 )
150175
151176 if check_cpu_reset :
152177 dut .expect_cpu_reset ()
0 commit comments