We have a plugin.process.gdb-remote.packet-timeout setting, which can be used to control how long the lldb client is willing to wait before declaring the server side dead. Our test suite makes use of this feature, and sets the setting value fairly high, as the low default value can cause flaky tests, particularly on slower bots. After fixing TestPlatformConnect (one of the few tests exercising the remote platform capabilities of lldb) in 4b284b9ca, it immediately started being flaky on the arm bots. It turns out this is because the packet-timeout setting is not being applied to platform connections. This patch makes the platform connections also respect the value of this setting. It also adds a test which checks that the timeout value is being honored. Differential Revision: https://reviews.llvm.org/D97769
54 lines
1.7 KiB
Python
54 lines
1.7 KiB
Python
import socket
|
|
import gdbremote_testcase
|
|
import lldbgdbserverutils
|
|
from lldbsuite.test.decorators import *
|
|
from lldbsuite.test.lldbtest import *
|
|
from lldbsuite.test import lldbutil
|
|
|
|
class TestPlatformProcessConnect(TestBase):
|
|
mydir = TestBase.compute_mydir(__file__)
|
|
NO_DEBUG_INFO_TESTCASE = True
|
|
|
|
@skipIfRemote
|
|
@expectedFailureAll(hostoslist=["windows"], triple='.*-android')
|
|
@skipIfWindows # lldb-server does not terminate correctly
|
|
@skipIfDarwin # lldb-server not found correctly
|
|
@add_test_categories(["lldb-server"])
|
|
def test_platform_process_connect(self):
|
|
self.build()
|
|
|
|
hostname = socket.getaddrinfo("localhost", 0, proto=socket.IPPROTO_TCP)[0][4][0]
|
|
listen_url = "[%s]:0"%hostname
|
|
|
|
port_file = self.getBuildArtifact("port")
|
|
commandline_args = [
|
|
"platform",
|
|
"--listen",
|
|
listen_url,
|
|
"--socket-file",
|
|
port_file,
|
|
"--",
|
|
self.getBuildArtifact("a.out"),
|
|
"foo"]
|
|
self.spawnSubprocess(
|
|
lldbgdbserverutils.get_lldb_server_exe(),
|
|
commandline_args)
|
|
|
|
socket_id = lldbutil.wait_for_file_on_target(self, port_file)
|
|
|
|
new_platform = lldb.SBPlatform("remote-" + self.getPlatform())
|
|
self.dbg.SetSelectedPlatform(new_platform)
|
|
|
|
connect_url = "connect://[%s]:%s" % (hostname, socket_id)
|
|
self.runCmd("platform connect %s" % connect_url)
|
|
|
|
lldbutil.run_break_set_by_symbol(self, "main")
|
|
process = self.process()
|
|
|
|
process.Continue()
|
|
|
|
frame = self.frame()
|
|
self.assertEqual(frame.GetFunction().GetName(), "main")
|
|
self.assertEqual(frame.FindVariable("argc").GetValueAsSigned(), 2)
|
|
process.Continue()
|