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
@@ -125,14 +125,37 @@ def expect_coredump_flash_write_logs(dut: PanicTestDut, config: str) -> None:
125125 dut .expect_exact ('Backing up stack @' )
126126 dut .expect_exact ('Restoring stack' )
127127 dut .expect_exact ('Core dump has been saved to flash.' )
128- dut .expect ('Rebooting...' )
128+ dut .expect (dut .REBOOT )
129+
130+
131+ def expect_coredump_uart_write_logs (dut : PanicTestDut , check_cpu_reset : Optional [bool ] = True ) -> Any :
132+ # ================= CORE DUMP START =================
133+ # B8AAAMAEgAGAAAAXAEAAAAAAABkAAAA
134+ # ...
135+ # ================= CORE DUMP END =================
136+ # Coredump checksum='9730d7ff'
137+ # Rebooting...
138+ # ..
139+ # rst:0xc (SW_CPU_RESET),boot:
140+
141+ # Read all uart logs until the end of the reset reason
142+ uart_str = dut .expect (',boot:' , return_what_before_match = True ).decode ('utf-8' , errors = 'ignore' )
143+ coredump_base64 = uart_str .split (dut .COREDUMP_UART_START )[1 ].split (dut .COREDUMP_UART_END )[0 ].strip ()
144+ uart_str = uart_str .split (dut .COREDUMP_UART_END )[1 ]
145+ assert re .search (dut .COREDUMP_CHECKSUM , uart_str )
146+ assert re .search (dut .REBOOT , uart_str )
147+ if check_cpu_reset :
148+ assert re .search (dut .CPU_RESET , uart_str )
149+ return coredump_base64
129150
130151
131152def common_test (dut : PanicTestDut , config : str , expected_backtrace : Optional [List [str ]] = None , check_cpu_reset : Optional [bool ] = True ,
132153 expected_coredump : Optional [Sequence [Union [str , Pattern [Any ]]]] = None ) -> None :
133154 if 'gdbstub' in config :
134155 if 'coredump' in config :
135- dut .process_coredump_uart (expected_coredump , False )
156+ uart_str = dut .expect (dut .COREDUMP_CHECKSUM , return_what_before_match = True ).decode ('utf-8' )
157+ coredump_base64 = uart_str .split (dut .COREDUMP_UART_START )[1 ].split (dut .COREDUMP_UART_END )[0 ].strip ()
158+ dut .process_coredump_uart (coredump_base64 , expected_coredump )
136159 dut .expect_exact ('Entering gdb stub now.' )
137160 dut .start_gdb_for_gdbstub ()
138161 frames = dut .gdb_backtrace ()
@@ -146,12 +169,14 @@ def common_test(dut: PanicTestDut, config: str, expected_backtrace: Optional[Lis
146169 expected_coredump = None
147170
148171 if 'uart' in config :
149- dut .process_coredump_uart (expected_coredump )
172+ coredump_base64 = expect_coredump_uart_write_logs (dut , check_cpu_reset )
173+ dut .process_coredump_uart (coredump_base64 , expected_coredump )
174+ check_cpu_reset = False # CPU reset is already checked in expect_coredump_uart_write_logs
150175 elif 'flash' in config :
151176 expect_coredump_flash_write_logs (dut , config )
152177 dut .process_coredump_flash (expected_coredump )
153178 elif 'panic' in config :
154- dut .expect ('Rebooting...' , timeout = 60 )
179+ dut .expect (dut . REBOOT , timeout = 60 )
155180
156181 if check_cpu_reset :
157182 dut .expect_cpu_reset ()
0 commit comments