diff options
author | Vadim Macagon <vadim.macagon@gmail.com> | 2017-08-01 07:34:26 +0000 |
---|---|---|
committer | Vadim Macagon <vadim.macagon@gmail.com> | 2017-08-01 07:34:26 +0000 |
commit | 141a6263da497bb2d7b1d4595d0c0303c31dad4f (patch) | |
tree | 4e900ef519d0b31e032b79ffdfb85a0f10b139e4 /lldb/packages/Python/lldbsuite/test/python_api/process/TestProcessAPI.py | |
parent | e4c220e8f21cc62c8179e2a9dff12436935e62f4 (diff) | |
download | bcm5719-llvm-141a6263da497bb2d7b1d4595d0c0303c31dad4f.tar.gz bcm5719-llvm-141a6263da497bb2d7b1d4595d0c0303c31dad4f.zip |
Expose process instance info via SB API
Summary:
Implement SBProcessInfo to wrap lldb_private::ProcessInstanceInfo,
and add SBProcess::GetProcessInfo() to retrieve info like parent ID,
group ID, user ID etc. from a live process.
Differential Revision: https://reviews.llvm.org/D35881
llvm-svn: 309664
Diffstat (limited to 'lldb/packages/Python/lldbsuite/test/python_api/process/TestProcessAPI.py')
-rw-r--r-- | lldb/packages/Python/lldbsuite/test/python_api/process/TestProcessAPI.py | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/lldb/packages/Python/lldbsuite/test/python_api/process/TestProcessAPI.py b/lldb/packages/Python/lldbsuite/test/python_api/process/TestProcessAPI.py index 1009536b370..bffbf431587 100644 --- a/lldb/packages/Python/lldbsuite/test/python_api/process/TestProcessAPI.py +++ b/lldb/packages/Python/lldbsuite/test/python_api/process/TestProcessAPI.py @@ -325,3 +325,66 @@ class ProcessAPITestCase(TestBase): num = process.GetNumSupportedHardwareWatchpoints(error) if self.TraceOn() and error.Success(): print("Number of supported hardware watchpoints: %d" % num) + + @add_test_categories(['pyapi']) + @no_debug_info_test + def test_get_process_info(self): + """Test SBProcess::GetProcessInfo() API with a locally launched process.""" + self.build() + exe = os.path.join(os.getcwd(), "a.out") + self.runCmd("file " + exe, CURRENT_EXECUTABLE_SET) + + target = self.dbg.CreateTarget(exe) + self.assertTrue(target, VALID_TARGET) + + # Launch the process and stop at the entry point. + launch_info = lldb.SBLaunchInfo(None) + launch_info.SetWorkingDirectory(self.get_process_working_directory()) + launch_flags = launch_info.GetLaunchFlags() + launch_flags |= lldb.eLaunchFlagStopAtEntry + launch_info.SetLaunchFlags(launch_flags) + error = lldb.SBError() + process = target.Launch(launch_info, error) + + if not error.Success(): + self.fail("Failed to launch process") + + # Verify all process info can be retrieved successfully + process_info = process.GetProcessInfo() + self.assertTrue(process_info.IsValid()) + file_spec = process_info.GetExecutableFile() + self.assertTrue(file_spec.IsValid()) + process_name = process_info.GetName() + self.assertIsNotNone(process_name, "Process has a name") + self.assertGreater(len(process_name), 0, "Process name isn't blank") + self.assertEqual(file_spec.GetFilename(), "a.out") + self.assertNotEqual( + process_info.GetProcessID(), lldb.LLDB_INVALID_PROCESS_ID, + "Process ID is valid") + + if self.getPlatform() != 'windows': + self.assertTrue(process_info.UserIDIsValid()) + self.assertNotEqual( + process_info.GetUserID(), lldb.UINT32_MAX, + "Process user ID is valid") + self.assertTrue(process_info.GroupIDIsValid()) + self.assertNotEqual( + process_info.GetGroupID(), lldb.UINT32_MAX, + "Process group ID is valid") + self.assertTrue(process_info.EffectiveUserIDIsValid()) + self.assertNotEqual( + process_info.GetEffectiveUserID(), lldb.UINT32_MAX, + "Process effective user ID is valid") + self.assertTrue(process_info.EffectiveGroupIDIsValid()) + self.assertNotEqual( + process_info.GetEffectiveGroupID(), lldb.UINT32_MAX, + "Process effective group ID is valid") + self.assertNotEqual( + process_info.GetParentProcessID(), lldb.LLDB_INVALID_PROCESS_ID, + "Parent process ID is valid" + ) + + # Verify that a dead process doesn't yield stale process info + process.Kill() + process_info = process.GetProcessInfo() + self.assertFalse(process_info.IsValid()) |