diff --git a/tools/test_apps/system/gdb/pytest_gdb.py b/tools/test_apps/system/gdb/pytest_gdb.py index 73242b1320..6fd855c362 100644 --- a/tools/test_apps/system/gdb/pytest_gdb.py +++ b/tools/test_apps/system/gdb/pytest_gdb.py @@ -1,25 +1,18 @@ # SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD # SPDX-License-Identifier: Unlicense OR CC0-1.0 -import logging import os import re -import subprocess -import sys +import typing import pexpect import pytest from pytest_embedded_idf import IdfDut -try: - from idf_py_actions.debug_ext import get_openocd_arguments -except ModuleNotFoundError: - sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', '..')) - from idf_py_actions.debug_ext import get_openocd_arguments +if typing.TYPE_CHECKING: + from conftest import OpenOCD -@pytest.mark.supported_targets -@pytest.mark.jtag -def test_idf_gdb(dut: IdfDut) -> None: +def _test_idf_gdb(openocd_dut: 'OpenOCD', dut: IdfDut) -> None: # Need to wait a moment to connect via OpenOCD after the hard reset happened. # Along with this check that app runs ok dut.expect('Hello world!') @@ -27,29 +20,34 @@ def test_idf_gdb(dut: IdfDut) -> None: # Don't need to have output from UART anymore dut.serial.stop_redirect_thread() - with open(os.path.join(dut.logdir, 'ocd.txt'), 'w') as ocd_log: - cmd = ['openocd', *get_openocd_arguments(dut.target).split()] - openocd_scripts = os.getenv('OPENOCD_SCRIPTS') - if openocd_scripts: - cmd.extend(['-s', openocd_scripts]) + gdb_env = os.environ.copy() + gdb_env['ESP_IDF_GDB_TESTING'] = '1' - logging.info('Running %s', cmd) - ocd = subprocess.Popen(cmd, stdout=ocd_log, stderr=ocd_log) + 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', + env=gdb_env, + 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')) + p.expect_exact('hit Temporary breakpoint 1, app_main ()') - try: - gdb_env = os.environ.copy() - gdb_env['ESP_IDF_GDB_TESTING'] = '1' - with open(os.path.join(dut.logdir, 'gdb.txt'), 'w') as gdb_log, \ - pexpect.spawn(f'idf.py -B {dut.app.binary_path} gdb --batch', - env=gdb_env, - 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')) - p.expect_exact('hit Temporary breakpoint 1, app_main ()') - finally: - ocd.terminate() - ocd.kill() +@pytest.mark.jtag +@pytest.mark.esp32 +@pytest.mark.esp32s2 +@pytest.mark.esp32c2 +def test_idf_gdb(openocd_dut: 'OpenOCD', dut: IdfDut) -> None: + _test_idf_gdb(openocd_dut, dut) + + +@pytest.mark.usb_serial_jtag +@pytest.mark.esp32c3 +@pytest.mark.esp32s3 +@pytest.mark.esp32c6 +@pytest.mark.esp32h2 +def test_idf_gdb_usj(openocd_dut: 'OpenOCD', dut: IdfDut) -> None: + _test_idf_gdb(openocd_dut, dut)