xref: /llvm-project/lldb/test/API/commands/platform/connect/TestPlatformConnect.py (revision 03588a27261f7ebea15af49268d2ec901fe1979e)
1d77b04e4SPavel Labathimport socket
2d77b04e4SPavel Labathimport gdbremote_testcase
3d77b04e4SPavel Labathimport lldbgdbserverutils
4d77b04e4SPavel Labathfrom lldbsuite.test.decorators import *
5d77b04e4SPavel Labathfrom lldbsuite.test.lldbtest import *
6d77b04e4SPavel Labathfrom lldbsuite.test import lldbutil
7d77b04e4SPavel Labath
82238dcc3SJonas Devlieghere
9d77b04e4SPavel Labathclass TestPlatformProcessConnect(TestBase):
10d77b04e4SPavel Labath    NO_DEBUG_INFO_TESTCASE = True
11d77b04e4SPavel Labath
12d77b04e4SPavel Labath    @skipIfRemote
132238dcc3SJonas Devlieghere    @expectedFailureAll(hostoslist=["windows"], triple=".*-android")
14d77b04e4SPavel Labath    @skipIfDarwin  # lldb-server not found correctly
15463863ffSPavel Labath    @expectedFailureAll(oslist=["windows"])  # process modules not loaded
16*03588a27SDavid Spickett    # lldb-server platform times out waiting for the gdbserver port number to be
17*03588a27SDavid Spickett    # written to the pipe, yet it seems the gdbserver already has written it.
18*03588a27SDavid Spickett    @expectedFailureAll(
19*03588a27SDavid Spickett        archs=["aarch64"],
20*03588a27SDavid Spickett        oslist=["freebsd"],
21*03588a27SDavid Spickett        bugnumber="https://github.com/llvm/llvm-project/issues/84327",
22*03588a27SDavid Spickett    )
23d77b04e4SPavel Labath    @add_test_categories(["lldb-server"])
24d77b04e4SPavel Labath    def test_platform_process_connect(self):
25d77b04e4SPavel Labath        self.build()
26d77b04e4SPavel Labath
27d77b04e4SPavel Labath        hostname = socket.getaddrinfo("localhost", 0, proto=socket.IPPROTO_TCP)[0][4][0]
28d77b04e4SPavel Labath        listen_url = "[%s]:0" % hostname
29d77b04e4SPavel Labath
30d77b04e4SPavel Labath        port_file = self.getBuildArtifact("port")
31d77b04e4SPavel Labath        commandline_args = [
32d77b04e4SPavel Labath            "platform",
33d77b04e4SPavel Labath            "--listen",
34d77b04e4SPavel Labath            listen_url,
35d77b04e4SPavel Labath            "--socket-file",
36d77b04e4SPavel Labath            port_file,
37d77b04e4SPavel Labath            "--",
38d77b04e4SPavel Labath            self.getBuildArtifact("a.out"),
392238dcc3SJonas Devlieghere            "foo",
402238dcc3SJonas Devlieghere        ]
412238dcc3SJonas Devlieghere        self.spawnSubprocess(lldbgdbserverutils.get_lldb_server_exe(), commandline_args)
42d77b04e4SPavel Labath
43d77b04e4SPavel Labath        socket_id = lldbutil.wait_for_file_on_target(self, port_file)
44d77b04e4SPavel Labath
45d77b04e4SPavel Labath        new_platform = lldb.SBPlatform("remote-" + self.getPlatform())
46d77b04e4SPavel Labath        self.dbg.SetSelectedPlatform(new_platform)
47d77b04e4SPavel Labath
48d77b04e4SPavel Labath        connect_url = "connect://[%s]:%s" % (hostname, socket_id)
49d77b04e4SPavel Labath        self.runCmd("platform connect %s" % connect_url)
50d77b04e4SPavel Labath
51d77b04e4SPavel Labath        lldbutil.run_break_set_by_symbol(self, "main")
52d77b04e4SPavel Labath        process = self.process()
53d77b04e4SPavel Labath
54d77b04e4SPavel Labath        process.Continue()
55d77b04e4SPavel Labath
56d77b04e4SPavel Labath        frame = self.frame()
57d77b04e4SPavel Labath        self.assertEqual(frame.GetFunction().GetName(), "main")
58d77b04e4SPavel Labath        self.assertEqual(frame.FindVariable("argc").GetValueAsSigned(), 2)
59d77b04e4SPavel Labath        process.Continue()
60