llvm-project/lldb/test/API/commands/platform/connect/TestPlatformConnect.py
Pavel Labath bf3ac994c4 [lldb] Apply gdb-remote timeout to platform connections as well
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
2021-03-04 14:46:02 +01:00

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()