]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - packages/Python/lldbsuite/test/functionalities/process_attach/TestProcessAttach.py
Vendor import of lldb trunk r338150:
[FreeBSD/FreeBSD.git] / packages / Python / lldbsuite / test / functionalities / process_attach / TestProcessAttach.py
1 """
2 Test process attach.
3 """
4
5 from __future__ import print_function
6
7
8 import os
9 import time
10 import lldb
11 import shutil
12 from lldbsuite.test.decorators import *
13 from lldbsuite.test.lldbtest import *
14 from lldbsuite.test import lldbutil
15
16 exe_name = "ProcessAttach"  # Must match Makefile
17
18
19 class ProcessAttachTestCase(TestBase):
20
21     mydir = TestBase.compute_mydir(__file__)
22
23     NO_DEBUG_INFO_TESTCASE = True
24
25     @skipIfiOSSimulator
26     @expectedFailureAll(oslist=['ios', 'watchos', 'tvos', 'bridgeos'], bugnumber="<rdar://problem/34538611>") # old lldb-server has race condition, launching an inferior and then launching debugserver in quick succession sometimes fails
27     def test_attach_to_process_by_id(self):
28         """Test attach by process id"""
29         self.build()
30         exe = self.getBuildArtifact(exe_name)
31
32         # Spawn a new process
33         popen = self.spawnSubprocess(exe)
34         self.addTearDownHook(self.cleanupSubprocesses)
35
36         self.runCmd("process attach -p " + str(popen.pid))
37
38         target = self.dbg.GetSelectedTarget()
39
40         process = target.GetProcess()
41         self.assertTrue(process, PROCESS_IS_VALID)
42
43     @expectedFailureAll(oslist=['ios', 'watchos', 'tvos', 'bridgeos'], bugnumber="<rdar://problem/34538611>") # old lldb-server has race condition, launching an inferior and then launching debugserver in quick succession sometimes fails
44     def test_attach_to_process_from_different_dir_by_id(self):
45         """Test attach by process id"""
46         newdir = self.getBuildArtifact("newdir")
47         try:
48             os.mkdir(newdir)
49         except OSError as e:
50             if e.errno != os.errno.EEXIST:
51                 raise
52         testdir = self.getBuildDir()
53         exe = os.path.join(newdir, 'proc_attach')
54         self.buildProgram('main.cpp', exe)
55         self.addTearDownHook(lambda: shutil.rmtree(newdir))
56
57         # Spawn a new process
58         popen = self.spawnSubprocess(exe)
59         self.addTearDownHook(self.cleanupSubprocesses)
60
61         os.chdir(newdir)
62         self.addTearDownHook(lambda: os.chdir(testdir))
63         self.runCmd("process attach -p " + str(popen.pid))
64
65         target = self.dbg.GetSelectedTarget()
66
67         process = target.GetProcess()
68         self.assertTrue(process, PROCESS_IS_VALID)
69
70     @expectedFailureAll(oslist=['ios', 'watchos', 'tvos', 'bridgeos'], bugnumber="<rdar://problem/34538611>") # old lldb-server has race condition, launching an inferior and then launching debugserver in quick succession sometimes fails
71     def test_attach_to_process_by_name(self):
72         """Test attach by process name"""
73         self.build()
74         exe = self.getBuildArtifact(exe_name)
75
76         # Spawn a new process
77         popen = self.spawnSubprocess(exe)
78         self.addTearDownHook(self.cleanupSubprocesses)
79
80         self.runCmd("process attach -n " + exe_name)
81
82         target = self.dbg.GetSelectedTarget()
83
84         process = target.GetProcess()
85         self.assertTrue(process, PROCESS_IS_VALID)
86
87     def tearDown(self):
88         # Destroy process before TestBase.tearDown()
89         self.dbg.GetSelectedTarget().GetProcess().Destroy()
90
91         # Call super's tearDown().
92         TestBase.tearDown(self)