[lldb/test] Move and improve TestPlatformProcessConnect.py

Although it is located under tools/lldb-server, this test is very
different that other lldb-server tests. The most important distinction
is that it does not test lldb-server directly, but rather interacts with
it through the lldb client. It also tests the relevant client
functionality (the platform connect command, which is even admitted in
the test name). The fact that this test is structured as a lldb-server
test means it cannot access most of the goodies available to the
"normal" lldb tests (the runCmd function, which it reimplements; the
run_break_set_by_symbol utility function; etc.).

This patch makes it a full-fledged lldb this, and rewrites the relevant
bits to make use of the standard features. I also move the test into the
"commands" subtree to better reflect its new status.
This commit is contained in:
Pavel Labath 2021-02-10 20:45:30 +01:00
parent 4692bb4a8a
commit d77b04e4ed
3 changed files with 7 additions and 15 deletions

View File

@ -5,14 +5,16 @@ from lldbsuite.test.decorators import *
from lldbsuite.test.lldbtest import *
from lldbsuite.test import lldbutil
class TestPlatformProcessConnect(gdbremote_testcase.GdbRemoteTestCaseBase):
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
@skipIf(oslist=["linux"], archs=["arm", "aarch64"]) # Fails randomly
@add_test_categories(["lldb-server"])
def test_platform_process_connect(self):
self.build()
@ -35,28 +37,18 @@ class TestPlatformProcessConnect(gdbremote_testcase.GdbRemoteTestCaseBase):
socket_id = lldbutil.wait_for_file_on_target(self, port_file)
self.dbg.SetAsync(False)
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)
command = "platform connect %s" % (connect_url)
result = lldb.SBCommandReturnObject()
self.dbg.GetCommandInterpreter().HandleCommand(command, result)
self.assertTrue(
result.Succeeded(),
"platform process connect failed: %s" %
result.GetError())
lldbutil.run_break_set_by_symbol(self, "main")
process = self.process()
target = self.dbg.GetSelectedTarget()
process = target.GetProcess()
thread = process.GetThreadAtIndex(0)
breakpoint = target.BreakpointCreateByName("main")
process.Continue()
frame = thread.GetFrameAtIndex(0)
frame = self.frame()
self.assertEqual(frame.GetFunction().GetName(), "main")
self.assertEqual(frame.FindVariable("argc").GetValueAsSigned(), 2)
process.Continue()