| """ |
| 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): |
| @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 |
| @skipIfRemote |
| 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.assertSuccess(err) |
| self.assertIn("SUCCESS", sh_cmd.GetOutput()) |