Files
clang-p2996/lldb/test/API/tools/lldb-server/TestPtyServer.py
Dmitry Vasilyev eacefba9aa [lldb][Windows] Fixed tests TestPty and TestPtyServer (#92090)
The tests TestPty and TestPtyServer use the Unix specific python builtin
module termios. They are failed in case of Windows host and Linux
target. Disable them for Windows host too.
2024-05-15 14:44:24 +04:00

76 lines
2.5 KiB
Python

import gdbremote_testcase
import lldbgdbserverutils
from lldbsuite.test.decorators import *
from lldbsuite.test.lldbtest import *
from lldbgdbserverutils import *
import xml.etree.ElementTree as ET
@skipIf(hostoslist=["windows"])
class PtyServerTestCase(gdbremote_testcase.GdbRemoteTestCaseBase):
def setUp(self):
super().setUp()
import pty
import tty
primary, secondary = pty.openpty()
tty.setraw(primary)
self._primary = io.FileIO(primary, "r+b")
self._secondary = io.FileIO(secondary, "r+b")
def get_debug_monitor_command_line_args(self, attach_pid=None):
commandline_args = self.debug_monitor_extra_args
if attach_pid:
commandline_args += ["--attach=%d" % attach_pid]
libc = ctypes.CDLL(None)
libc.ptsname.argtypes = (ctypes.c_int,)
libc.ptsname.restype = ctypes.c_char_p
pty_path = libc.ptsname(self._primary.fileno()).decode()
commandline_args += ["serial://%s" % (pty_path,)]
return commandline_args
def connect_to_debug_monitor(self, attach_pid=None):
self.reverse_connect = False
server = self.launch_debug_monitor(attach_pid=attach_pid)
self.assertIsNotNone(server)
# TODO: make it into proper abstraction
class FakeSocket:
def __init__(self, fd):
self.fd = fd
def sendall(self, frame):
self.fd.write(frame)
def recv(self, count):
return self.fd.read(count)
self.sock = FakeSocket(self._primary)
self._server = Server(self.sock, server)
return server
@add_test_categories(["llgs"])
def test_pty_server(self):
self.build()
self.set_inferior_startup_launch()
self.prep_debug_monitor_and_inferior()
# target.xml transfer should trigger a large enough packet to check
# for partial write regression
self.test_sequence.add_log_lines(
[
"read packet: $qXfer:features:read:target.xml:0,200000#00",
{
"direction": "send",
"regex": re.compile("^\$l(.+)#[0-9a-fA-F]{2}$", flags=re.DOTALL),
"capture": {1: "target_xml"},
},
],
True,
)
context = self.expect_gdbremote_sequence()
# verify that we have received a complete, non-malformed XML
self.assertIsNotNone(ET.fromstring(context.get("target_xml")))