From f5cca63bb0f515d4fead98fc9908e4dcd403647a Mon Sep 17 00:00:00 2001 From: Erhan Kurubas Date: Fri, 3 Jul 2026 16:07:28 +0200 Subject: [PATCH] test(usb_serial_jtag): pin console uart to ttyUSBx port --- .../app_trace_basic/pytest_app_trace_basic.py | 1 + examples/system/esp_trace/pytest_esp_trace.py | 1 + examples/system/gcov/pytest_gcov.py | 1 + .../sysview_tracing/pytest_sysview_tracing.py | 2 ++ .../pytest_sysview_tracing_heap_log.py | 1 + .../debugging/pytest_lp_core_debugging.py | 3 ++- tools/test_apps/system/gdb/pytest_gdb.py | 24 ++++++++++++------- 7 files changed, 24 insertions(+), 9 deletions(-) diff --git a/examples/system/app_trace_basic/pytest_app_trace_basic.py b/examples/system/app_trace_basic/pytest_app_trace_basic.py index 5adea1db06e..f1be28157b2 100644 --- a/examples/system/app_trace_basic/pytest_app_trace_basic.py +++ b/examples/system/app_trace_basic/pytest_app_trace_basic.py @@ -57,6 +57,7 @@ def test_examples_app_trace_basic(openocd_dut: 'OpenOCD', dut: IdfDut) -> None: @idf_parametrize( 'target', ['esp32s3', 'esp32c3', 'esp32c5', 'esp32c6', 'esp32c61', 'esp32h2', 'esp32p4'], indirect=['target'] ) +@idf_parametrize('port', ['/dev/serial_ports/ttyUSB-esp32'], indirect=['port']) def test_examples_app_trace_basic_usj(openocd_dut: 'OpenOCD', dut: IdfDut) -> None: _test_examples_app_trace_basic(openocd_dut, dut) diff --git a/examples/system/esp_trace/pytest_esp_trace.py b/examples/system/esp_trace/pytest_esp_trace.py index d1f031f5201..7ad9136a845 100644 --- a/examples/system/esp_trace/pytest_esp_trace.py +++ b/examples/system/esp_trace/pytest_esp_trace.py @@ -102,6 +102,7 @@ def _capture_trace(ser: serial.Serial, trace_log_path: str, capture_s: float = 5 @pytest.mark.usb_serial_jtag @idf_parametrize('target', soc_filtered_targets('SOC_USB_SERIAL_JTAG_SUPPORTED == 1'), indirect=['target']) @pytest.mark.parametrize('config', [pytest.param('default')], indirect=True) +@idf_parametrize('port', ['/dev/serial_ports/ttyUSB-esp32'], indirect=['port']) @pytest.mark.temp_skip_ci(targets=['esp32h4'], reason='lack of runner # TODO: IDFCI-10703') def test_esp_trace_ext_lib_usj(dut: IdfDut) -> None: dut.expect('Start of trace session', timeout=5) diff --git a/examples/system/gcov/pytest_gcov.py b/examples/system/gcov/pytest_gcov.py index 6280a796faa..729f60cf262 100644 --- a/examples/system/gcov/pytest_gcov.py +++ b/examples/system/gcov/pytest_gcov.py @@ -83,5 +83,6 @@ def test_gcov(openocd_dut: 'OpenOCD', dut: IdfDut) -> None: @idf_parametrize( 'target', ['esp32s3', 'esp32c3', 'esp32c5', 'esp32c6', 'esp32c61', 'esp32h2', 'esp32p4'], indirect=['target'] ) +@idf_parametrize('port', ['/dev/serial_ports/ttyUSB-esp32'], indirect=['port']) def test_gcov_usj(openocd_dut: 'OpenOCD', dut: IdfDut) -> None: _test_gcov(openocd_dut, dut) diff --git a/examples/system/sysview_tracing/pytest_sysview_tracing.py b/examples/system/sysview_tracing/pytest_sysview_tracing.py index 55d23a79321..9ea7d49540c 100644 --- a/examples/system/sysview_tracing/pytest_sysview_tracing.py +++ b/examples/system/sysview_tracing/pytest_sysview_tracing.py @@ -144,6 +144,7 @@ def test_sysview_tracing_jtag(openocd_dut: 'OpenOCD', dut: IdfDut) -> None: @idf_parametrize( 'target', ['esp32s3', 'esp32c3', 'esp32c5', 'esp32c6', 'esp32c61', 'esp32h2', 'esp32p4'], indirect=['target'] ) +@idf_parametrize('port', ['/dev/serial_ports/ttyUSB-esp32'], indirect=['port']) def test_sysview_tracing_usj(openocd_dut: 'OpenOCD', dut: IdfDut) -> None: _test_sysview_tracing_jtag(openocd_dut, dut) @@ -167,6 +168,7 @@ def test_sysview_tracing_uart(dut: IdfDut) -> None: @pytest.mark.usb_serial_jtag @idf_parametrize('target', soc_filtered_targets('SOC_USB_SERIAL_JTAG_SUPPORTED == 1'), indirect=['target']) @pytest.mark.parametrize('config', [pytest.param('sysview_usj')], indirect=True) +@idf_parametrize('port', ['/dev/serial_ports/ttyUSB-esp32'], indirect=['port']) def test_sysview_tracing_usj_serial(dut: IdfDut) -> None: time.sleep(1) # wait for USJ port to be ready usj_port = '/dev/serial_ports/ttyACM-esp32' diff --git a/examples/system/sysview_tracing_heap_log/pytest_sysview_tracing_heap_log.py b/examples/system/sysview_tracing_heap_log/pytest_sysview_tracing_heap_log.py index 9f9f138a668..40f05451aee 100644 --- a/examples/system/sysview_tracing_heap_log/pytest_sysview_tracing_heap_log.py +++ b/examples/system/sysview_tracing_heap_log/pytest_sysview_tracing_heap_log.py @@ -77,5 +77,6 @@ def test_examples_sysview_tracing_heap_log(openocd_dut: 'OpenOCD', idf_path: str @idf_parametrize( 'target', ['esp32s3', 'esp32c3', 'esp32c5', 'esp32c6', 'esp32c61', 'esp32h2', 'esp32p4'], indirect=['target'] ) +@idf_parametrize('port', ['/dev/serial_ports/ttyUSB-esp32'], indirect=['port']) def test_examples_sysview_tracing_heap_log_usj(openocd_dut: 'OpenOCD', idf_path: str, dut: IdfDut) -> None: _test_examples_sysview_tracing_heap_log(openocd_dut, idf_path, dut) diff --git a/examples/system/ulp/lp_core/debugging/pytest_lp_core_debugging.py b/examples/system/ulp/lp_core/debugging/pytest_lp_core_debugging.py index 91e9ed2ff02..b7decfa455b 100644 --- a/examples/system/ulp/lp_core/debugging/pytest_lp_core_debugging.py +++ b/examples/system/ulp/lp_core/debugging/pytest_lp_core_debugging.py @@ -13,8 +13,9 @@ if typing.TYPE_CHECKING: from conftest import OpenOCD -@idf_parametrize('target', ['esp32c5', 'esp32c6', 'esp32p4'], indirect=['target']) @pytest.mark.usb_serial_jtag +@idf_parametrize('target', ['esp32c5', 'esp32c6', 'esp32p4'], indirect=['target']) +@idf_parametrize('port', ['/dev/serial_ports/ttyUSB-esp32'], indirect=['port']) def test_lp_core_debugging(openocd_dut: 'OpenOCD', dut: IdfDut) -> None: dut.expect('Do some work on HP core...') diff --git a/tools/test_apps/system/gdb/pytest_gdb.py b/tools/test_apps/system/gdb/pytest_gdb.py index 3e2ffdc97d8..fd62f74ce15 100644 --- a/tools/test_apps/system/gdb/pytest_gdb.py +++ b/tools/test_apps/system/gdb/pytest_gdb.py @@ -1,7 +1,8 @@ -# SPDX-FileCopyrightText: 2022-2025 Espressif Systems (Shanghai) CO LTD +# SPDX-FileCopyrightText: 2022-2026 Espressif Systems (Shanghai) CO LTD # SPDX-License-Identifier: Unlicense OR CC0-1.0 import os import re +import time import typing import pexpect @@ -21,13 +22,19 @@ def _test_idf_gdb(openocd_dut: 'OpenOCD', dut: IdfDut) -> None: # Don't need to have output from UART anymore dut.serial.stop_redirect_thread() - with openocd_dut.run(), open(os.path.join(dut.logdir, 'gdb.txt'), 'w') as gdb_log, pexpect.spawn( - f'idf.py -B {dut.app.binary_path} gdb --batch', - timeout=60, - logfile=gdb_log, - encoding='utf-8', - codec_errors='ignore', - ) as p: + time.sleep(1) # Wait for the USJ port to be ready + + with ( + openocd_dut.run(), + open(os.path.join(dut.logdir, 'gdb.txt'), 'w') as gdb_log, + pexpect.spawn( + f'idf.py -B {dut.app.binary_path} gdb --batch', + timeout=60, + logfile=gdb_log, + encoding='utf-8', + codec_errors='ignore', + ) as p, + ): p.expect(re.compile(r'add symbol table from file.*bootloader.elf')) p.expect( re.compile(r'add symbol table from file.*rom.elf') @@ -43,5 +50,6 @@ def test_idf_gdb(openocd_dut: 'OpenOCD', dut: IdfDut) -> None: @pytest.mark.usb_serial_jtag @idf_parametrize('target', ['esp32s3', 'esp32c3', 'esp32c6', 'esp32h2'], indirect=['target']) +@idf_parametrize('port', ['/dev/serial_ports/ttyUSB-esp32'], indirect=['port']) def test_idf_gdb_usj(openocd_dut: 'OpenOCD', dut: IdfDut) -> None: _test_idf_gdb(openocd_dut, dut)