|
| 1 | +import lldb |
| 2 | +from lldbsuite.test.lldbtest import * |
| 3 | +from lldbsuite.test.decorators import * |
| 4 | +from lldbsuite.test.gdbclientutils import * |
| 5 | +from lldbsuite.test.lldbgdbclient import GDBRemoteTestBase |
| 6 | + |
| 7 | + |
| 8 | +class TestPlatformAttach(GDBRemoteTestBase): |
| 9 | + @skipIfRemote |
| 10 | + @expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr52451") |
| 11 | + def test_attach(self): |
| 12 | + """Test attaching by name""" |
| 13 | + |
| 14 | + class MyPlatformResponder(MockGDBServerResponder): |
| 15 | + def __init__(self, port): |
| 16 | + MockGDBServerResponder.__init__(self) |
| 17 | + self.port = port |
| 18 | + |
| 19 | + def qLaunchGDBServer(self, _): |
| 20 | + return "pid:1337;port:{};".format(self.port) |
| 21 | + |
| 22 | + def qfProcessInfo(self, packet): |
| 23 | + return "pid:95117;name:666f6f;" |
| 24 | + |
| 25 | + class MyGDBResponder(MockGDBServerResponder): |
| 26 | + def __init__(self): |
| 27 | + MockGDBServerResponder.__init__(self) |
| 28 | + |
| 29 | + def vAttach(self, _): |
| 30 | + return "OK" |
| 31 | + |
| 32 | + self.server.responder = MyGDBResponder() |
| 33 | + port = self.server._socket._server_socket.getsockname()[1] |
| 34 | + |
| 35 | + platform_socket = TCPServerSocket() |
| 36 | + platform_server = MockGDBServer(platform_socket) |
| 37 | + platform_server.responder = MyPlatformResponder(port) |
| 38 | + platform_server.start() |
| 39 | + |
| 40 | + error = lldb.SBError() |
| 41 | + platform = lldb.SBPlatform("remote-linux") |
| 42 | + self.dbg.SetSelectedPlatform(platform) |
| 43 | + |
| 44 | + error = platform.ConnectRemote( |
| 45 | + lldb.SBPlatformConnectOptions(platform_server.get_connect_url()) |
| 46 | + ) |
| 47 | + self.assertSuccess(error) |
| 48 | + self.assertTrue(platform.IsConnected()) |
| 49 | + |
| 50 | + attach_info = lldb.SBAttachInfo() |
| 51 | + attach_info.SetExecutable("foo") |
| 52 | + |
| 53 | + target = lldb.SBTarget() |
| 54 | + process = platform.Attach(attach_info, self.dbg, target, error) |
| 55 | + self.assertSuccess(error) |
| 56 | + self.assertEqual(process.GetProcessID(), 95117) |
| 57 | + |
| 58 | + platform.DisconnectRemote() |
0 commit comments