| import lldb |
| from lldbsuite.test.lldbtest import * |
| from lldbsuite.test.decorators import * |
| from lldbsuite.test.gdbclientutils import * |
| from lldbsuite.test.lldbgdbclient import GDBRemoteTestBase |
| |
| |
| class TestPlatformAttach(GDBRemoteTestBase): |
| @skipIfRemote |
| @skipIfWindows |
| def test_attach(self): |
| """Test attaching by name""" |
| |
| class MyPlatformResponder(MockGDBServerResponder): |
| def __init__(self, port): |
| MockGDBServerResponder.__init__(self) |
| self.port = port |
| |
| def qLaunchGDBServer(self, _): |
| return "pid:1337;port:{};".format(self.port) |
| |
| def qfProcessInfo(self, packet): |
| return "pid:95117;name:666f6f;" |
| |
| class MyGDBResponder(MockGDBServerResponder): |
| def __init__(self): |
| MockGDBServerResponder.__init__(self) |
| |
| def vAttach(self, _): |
| return "OK" |
| |
| self.server.responder = MyGDBResponder() |
| port = self.server._socket._server_socket.getsockname()[1] |
| |
| platform_socket = TCPServerSocket() |
| platform_server = MockGDBServer(platform_socket) |
| platform_server.responder = MyPlatformResponder(port) |
| platform_server.start() |
| |
| error = lldb.SBError() |
| platform = lldb.SBPlatform("remote-linux") |
| self.dbg.SetSelectedPlatform(platform) |
| |
| error = platform.ConnectRemote( |
| lldb.SBPlatformConnectOptions(platform_server.get_connect_url()) |
| ) |
| self.assertSuccess(error) |
| self.assertTrue(platform.IsConnected()) |
| |
| attach_info = lldb.SBAttachInfo() |
| attach_info.SetExecutable("foo") |
| |
| target = lldb.SBTarget() |
| process = platform.Attach(attach_info, self.dbg, target, error) |
| self.assertSuccess(error) |
| self.assertEqual(process.GetProcessID(), 95117) |
| |
| platform.DisconnectRemote() |