xref: /llvm-project/lldb/test/API/functionalities/gdb_remote_client/TestPlatformAttach.py (revision ceec9a7874af2eea8b00b5616fad388ccfa2b4f3)
12da99a11SJonas Devlieghereimport lldb
22da99a11SJonas Devliegherefrom lldbsuite.test.lldbtest import *
32da99a11SJonas Devliegherefrom lldbsuite.test.decorators import *
42da99a11SJonas Devliegherefrom lldbsuite.test.gdbclientutils import *
52da99a11SJonas Devliegherefrom lldbsuite.test.lldbgdbclient import GDBRemoteTestBase
62da99a11SJonas Devlieghere
72da99a11SJonas Devlieghere
82da99a11SJonas Devlieghereclass TestPlatformAttach(GDBRemoteTestBase):
92da99a11SJonas Devlieghere    @skipIfRemote
10*ceec9a78SDavid Spickett    @skipIfWindows
112da99a11SJonas Devlieghere    def test_attach(self):
122da99a11SJonas Devlieghere        """Test attaching by name"""
132da99a11SJonas Devlieghere
142da99a11SJonas Devlieghere        class MyPlatformResponder(MockGDBServerResponder):
152da99a11SJonas Devlieghere            def __init__(self, port):
162da99a11SJonas Devlieghere                MockGDBServerResponder.__init__(self)
172da99a11SJonas Devlieghere                self.port = port
182da99a11SJonas Devlieghere
192da99a11SJonas Devlieghere            def qLaunchGDBServer(self, _):
202da99a11SJonas Devlieghere                return "pid:1337;port:{};".format(self.port)
212da99a11SJonas Devlieghere
222da99a11SJonas Devlieghere            def qfProcessInfo(self, packet):
232da99a11SJonas Devlieghere                return "pid:95117;name:666f6f;"
242da99a11SJonas Devlieghere
252da99a11SJonas Devlieghere        class MyGDBResponder(MockGDBServerResponder):
262da99a11SJonas Devlieghere            def __init__(self):
272da99a11SJonas Devlieghere                MockGDBServerResponder.__init__(self)
282da99a11SJonas Devlieghere
292da99a11SJonas Devlieghere            def vAttach(self, _):
302da99a11SJonas Devlieghere                return "OK"
312da99a11SJonas Devlieghere
322da99a11SJonas Devlieghere        self.server.responder = MyGDBResponder()
332da99a11SJonas Devlieghere        port = self.server._socket._server_socket.getsockname()[1]
342da99a11SJonas Devlieghere
352da99a11SJonas Devlieghere        platform_socket = TCPServerSocket()
362da99a11SJonas Devlieghere        platform_server = MockGDBServer(platform_socket)
372da99a11SJonas Devlieghere        platform_server.responder = MyPlatformResponder(port)
382da99a11SJonas Devlieghere        platform_server.start()
392da99a11SJonas Devlieghere
402da99a11SJonas Devlieghere        error = lldb.SBError()
412da99a11SJonas Devlieghere        platform = lldb.SBPlatform("remote-linux")
422da99a11SJonas Devlieghere        self.dbg.SetSelectedPlatform(platform)
432da99a11SJonas Devlieghere
442da99a11SJonas Devlieghere        error = platform.ConnectRemote(
452da99a11SJonas Devlieghere            lldb.SBPlatformConnectOptions(platform_server.get_connect_url())
462da99a11SJonas Devlieghere        )
472da99a11SJonas Devlieghere        self.assertSuccess(error)
482da99a11SJonas Devlieghere        self.assertTrue(platform.IsConnected())
492da99a11SJonas Devlieghere
502da99a11SJonas Devlieghere        attach_info = lldb.SBAttachInfo()
512da99a11SJonas Devlieghere        attach_info.SetExecutable("foo")
522da99a11SJonas Devlieghere
532da99a11SJonas Devlieghere        target = lldb.SBTarget()
542da99a11SJonas Devlieghere        process = platform.Attach(attach_info, self.dbg, target, error)
552da99a11SJonas Devlieghere        self.assertSuccess(error)
562da99a11SJonas Devlieghere        self.assertEqual(process.GetProcessID(), 95117)
572da99a11SJonas Devlieghere
582da99a11SJonas Devlieghere        platform.DisconnectRemote()
59