199451b44SJordan Rupprecht""" 299451b44SJordan RupprechtTest the lldb platform Python API. 399451b44SJordan Rupprecht""" 499451b44SJordan Rupprecht 599451b44SJordan Rupprecht 699451b44SJordan Rupprecht 799451b44SJordan Rupprechtimport lldb 899451b44SJordan Rupprechtfrom lldbsuite.test.decorators import * 999451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import * 1099451b44SJordan Rupprechtfrom lldbsuite.test import lldbutil 1199451b44SJordan Rupprecht 1299451b44SJordan Rupprecht 1399451b44SJordan Rupprechtclass PlatformPythonTestCase(TestBase): 1499451b44SJordan Rupprecht 1599451b44SJordan Rupprecht @add_test_categories(['pyapi']) 1699451b44SJordan Rupprecht @no_debug_info_test 1799451b44SJordan Rupprecht def test_platform_list(self): 1899451b44SJordan Rupprecht """Test SBDebugger::GetNumPlatforms() & GetPlatformAtIndex() API""" 1999451b44SJordan Rupprecht # Verify the host platform is present by default. 2099451b44SJordan Rupprecht initial_num_platforms = self.dbg.GetNumPlatforms() 2199451b44SJordan Rupprecht self.assertGreater(initial_num_platforms, 0) 2299451b44SJordan Rupprecht host_platform = self.dbg.GetPlatformAtIndex(0) 2399451b44SJordan Rupprecht self.assertTrue(host_platform.IsValid() and 2499451b44SJordan Rupprecht host_platform.GetName() == 'host', 2599451b44SJordan Rupprecht 'The host platform is present') 2699451b44SJordan Rupprecht # Select another platform and verify that the platform is added to 2799451b44SJordan Rupprecht # the platform list. 2899451b44SJordan Rupprecht platform_idx = self.dbg.GetNumAvailablePlatforms() - 1 2999451b44SJordan Rupprecht if platform_idx < 1: 3099451b44SJordan Rupprecht self.fail('No platforms other than host are available') 3199451b44SJordan Rupprecht platform_data = self.dbg.GetAvailablePlatformInfoAtIndex(platform_idx) 3299451b44SJordan Rupprecht platform_name = platform_data.GetValueForKey('name').GetStringValue(100) 3399451b44SJordan Rupprecht self.assertNotEqual(platform_name, 'host') 3499451b44SJordan Rupprecht self.dbg.SetCurrentPlatform(platform_name) 3599451b44SJordan Rupprecht selected_platform = self.dbg.GetSelectedPlatform() 3699451b44SJordan Rupprecht self.assertTrue(selected_platform.IsValid()) 3799451b44SJordan Rupprecht self.assertEqual(selected_platform.GetName(), platform_name) 3899451b44SJordan Rupprecht self.assertEqual(self.dbg.GetNumPlatforms(), initial_num_platforms + 1) 3999451b44SJordan Rupprecht platform_found = False 4099451b44SJordan Rupprecht for platform_idx in range(self.dbg.GetNumPlatforms()): 4199451b44SJordan Rupprecht platform = self.dbg.GetPlatformAtIndex(platform_idx) 4299451b44SJordan Rupprecht if platform.GetName() == platform_name: 4399451b44SJordan Rupprecht platform_found = True 4499451b44SJordan Rupprecht break 4599451b44SJordan Rupprecht self.assertTrue(platform_found) 4699451b44SJordan Rupprecht 4799451b44SJordan Rupprecht @add_test_categories(['pyapi']) 4899451b44SJordan Rupprecht @no_debug_info_test 4999451b44SJordan Rupprecht def test_host_is_connected(self): 5099451b44SJordan Rupprecht # We've already tested that this one IS the host platform. 5199451b44SJordan Rupprecht host_platform = self.dbg.GetPlatformAtIndex(0) 5299451b44SJordan Rupprecht self.assertTrue(host_platform.IsConnected(), "The host platform is always connected") 5399451b44SJordan Rupprecht 5499451b44SJordan Rupprecht 5599451b44SJordan Rupprecht @add_test_categories(['pyapi']) 5699451b44SJordan Rupprecht @no_debug_info_test 5799451b44SJordan Rupprecht def test_available_platform_list(self): 5899451b44SJordan Rupprecht """Test SBDebugger::GetNumAvailablePlatforms() and GetAvailablePlatformInfoAtIndex() API""" 5999451b44SJordan Rupprecht num_platforms = self.dbg.GetNumAvailablePlatforms() 6099451b44SJordan Rupprecht self.assertGreater( 6199451b44SJordan Rupprecht num_platforms, 0, 6299451b44SJordan Rupprecht 'There should be at least one platform available') 6399451b44SJordan Rupprecht 6499451b44SJordan Rupprecht for i in range(num_platforms): 6599451b44SJordan Rupprecht platform_data = self.dbg.GetAvailablePlatformInfoAtIndex(i) 6699451b44SJordan Rupprecht name_data = platform_data.GetValueForKey('name') 6799451b44SJordan Rupprecht desc_data = platform_data.GetValueForKey('description') 6899451b44SJordan Rupprecht self.assertTrue( 6999451b44SJordan Rupprecht name_data and name_data.IsValid(), 7099451b44SJordan Rupprecht 'Platform has a name') 7199451b44SJordan Rupprecht self.assertEqual( 7299451b44SJordan Rupprecht name_data.GetType(), lldb.eStructuredDataTypeString, 7399451b44SJordan Rupprecht 'Platform name is a string') 7499451b44SJordan Rupprecht self.assertTrue( 7599451b44SJordan Rupprecht desc_data and desc_data.IsValid(), 7699451b44SJordan Rupprecht 'Platform has a description') 7799451b44SJordan Rupprecht self.assertEqual( 7899451b44SJordan Rupprecht desc_data.GetType(), lldb.eStructuredDataTypeString, 7999451b44SJordan Rupprecht 'Platform description is a string') 80addb5148SMed Ismail Bennani 81addb5148SMed Ismail Bennani @add_test_categories(['pyapi']) 82addb5148SMed Ismail Bennani @no_debug_info_test 83*66b829acSJonas Devlieghere @skipIfRemote 84addb5148SMed Ismail Bennani def test_shell_interpreter(self): 85addb5148SMed Ismail Bennani """ Test a shell with a custom interpreter """ 86addb5148SMed Ismail Bennani platform = self.dbg.GetSelectedPlatform() 87addb5148SMed Ismail Bennani self.assertTrue(platform.IsValid()) 88addb5148SMed Ismail Bennani 89addb5148SMed Ismail Bennani sh_cmd = lldb.SBPlatformShellCommand('/bin/zsh', 'echo $0') 90addb5148SMed Ismail Bennani self.assertIn('/bin/zsh', sh_cmd.GetShell()) 91addb5148SMed Ismail Bennani self.assertIn('echo $0', sh_cmd.GetCommand()) 92addb5148SMed Ismail Bennani 93addb5148SMed Ismail Bennani self.build() 94addb5148SMed Ismail Bennani sh_cmd.SetShell(self.getBuildArtifact('a.out')) 95addb5148SMed Ismail Bennani err = platform.Run(sh_cmd) 96779bbbf2SDave Lee self.assertSuccess(err) 97addb5148SMed Ismail Bennani self.assertIn("SUCCESS", sh_cmd.GetOutput()) 98