Files
clang-p2996/lldb/test/API/commands/platform/basic/TestPlatformPython.py
Med Ismail Bennani addb5148f5 [lldb/Target] Add custom interpreter option to platform shell
This patch adds the ability to use a custom interpreter with the
`platform shell` command. If the user set the `-s|--shell` option
with the path to a binary, lldb passes it down to the platform's
`RunShellProcess` method and set it as the shell to use in
`ProcessLaunchInfo to run commands.

Note that not all the Platforms support running shell commands with
custom interpreters (i.e. RemoteGDBServer is only expected to use the
default shell).

This patch also makes some refactoring and cleanups, like swapping
CString for StringRef when possible and updating `SBPlatformShellCommand`
with new methods and a new constructor.

rdar://67759256

Differential Revision: https://reviews.llvm.org/D86667

Signed-off-by: Med Ismail Bennani <medismail.bennani@gmail.com>
2020-09-02 16:36:10 +02:00

99 lines
3.9 KiB
Python

"""
Test the lldb platform Python API.
"""
import lldb
from lldbsuite.test.decorators import *
from lldbsuite.test.lldbtest import *
from lldbsuite.test import lldbutil
class PlatformPythonTestCase(TestBase):
mydir = TestBase.compute_mydir(__file__)
@add_test_categories(['pyapi'])
@no_debug_info_test
def test_platform_list(self):
"""Test SBDebugger::GetNumPlatforms() & GetPlatformAtIndex() API"""
# Verify the host platform is present by default.
initial_num_platforms = self.dbg.GetNumPlatforms()
self.assertGreater(initial_num_platforms, 0)
host_platform = self.dbg.GetPlatformAtIndex(0)
self.assertTrue(host_platform.IsValid() and
host_platform.GetName() == 'host',
'The host platform is present')
# Select another platform and verify that the platform is added to
# the platform list.
platform_idx = self.dbg.GetNumAvailablePlatforms() - 1
if platform_idx < 1:
self.fail('No platforms other than host are available')
platform_data = self.dbg.GetAvailablePlatformInfoAtIndex(platform_idx)
platform_name = platform_data.GetValueForKey('name').GetStringValue(100)
self.assertNotEqual(platform_name, 'host')
self.dbg.SetCurrentPlatform(platform_name)
selected_platform = self.dbg.GetSelectedPlatform()
self.assertTrue(selected_platform.IsValid())
self.assertEqual(selected_platform.GetName(), platform_name)
self.assertEqual(self.dbg.GetNumPlatforms(), initial_num_platforms + 1)
platform_found = False
for platform_idx in range(self.dbg.GetNumPlatforms()):
platform = self.dbg.GetPlatformAtIndex(platform_idx)
if platform.GetName() == platform_name:
platform_found = True
break
self.assertTrue(platform_found)
@add_test_categories(['pyapi'])
@no_debug_info_test
def test_host_is_connected(self):
# We've already tested that this one IS the host platform.
host_platform = self.dbg.GetPlatformAtIndex(0)
self.assertTrue(host_platform.IsConnected(), "The host platform is always connected")
@add_test_categories(['pyapi'])
@no_debug_info_test
def test_available_platform_list(self):
"""Test SBDebugger::GetNumAvailablePlatforms() and GetAvailablePlatformInfoAtIndex() API"""
num_platforms = self.dbg.GetNumAvailablePlatforms()
self.assertGreater(
num_platforms, 0,
'There should be at least one platform available')
for i in range(num_platforms):
platform_data = self.dbg.GetAvailablePlatformInfoAtIndex(i)
name_data = platform_data.GetValueForKey('name')
desc_data = platform_data.GetValueForKey('description')
self.assertTrue(
name_data and name_data.IsValid(),
'Platform has a name')
self.assertEqual(
name_data.GetType(), lldb.eStructuredDataTypeString,
'Platform name is a string')
self.assertTrue(
desc_data and desc_data.IsValid(),
'Platform has a description')
self.assertEqual(
desc_data.GetType(), lldb.eStructuredDataTypeString,
'Platform description is a string')
@add_test_categories(['pyapi'])
@no_debug_info_test
def test_shell_interpreter(self):
""" Test a shell with a custom interpreter """
platform = self.dbg.GetSelectedPlatform()
self.assertTrue(platform.IsValid())
sh_cmd = lldb.SBPlatformShellCommand('/bin/zsh', 'echo $0')
self.assertIn('/bin/zsh', sh_cmd.GetShell())
self.assertIn('echo $0', sh_cmd.GetCommand())
self.build()
sh_cmd.SetShell(self.getBuildArtifact('a.out'))
err = platform.Run(sh_cmd)
self.assertTrue(err.Success())
self.assertIn("SUCCESS", sh_cmd.GetOutput())