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