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