1"""
2Test process attach.
3"""
4
5import os, time
6import unittest2
7import lldb
8from lldbtest import *
9import lldbutil
10
11class ProcessAttachTestCase(TestBase):
12
13    mydir = os.path.join("functionalities", "process_attach")
14
15    @unittest2.skipUnless(sys.platform.startswith("darwin"), "requires Darwin")
16    @dsym_test
17    def test_attach_to_process_by_id_with_dsym(self):
18        """Test attach by process id"""
19        self.buildDsym()
20        self.process_attach_by_id()
21
22    @dwarf_test
23    def test_attach_to_process_by_id_with_dwarf(self):
24        """Test attach by process id"""
25        self.buildDwarf()
26        self.process_attach_by_id()
27
28    @unittest2.skipUnless(sys.platform.startswith("darwin"), "requires Darwin")
29    @dsym_test
30    def test_attach_to_process_by_name_with_dsym(self):
31        """Test attach by process name"""
32        self.buildDsym()
33        self.process_attach_by_name()
34
35    @expectedFailureFreeBSD('llvm.org/pr16699')
36    @dwarf_test
37    def test_attach_to_process_by_name_with_dwarf(self):
38        """Test attach by process name"""
39        self.buildDwarf()
40        self.process_attach_by_name()
41
42    def setUp(self):
43        # Call super's setUp().
44        TestBase.setUp(self)
45
46    def process_attach_by_id(self):
47        """Test attach by process id"""
48
49        exe = os.path.join(os.getcwd(), "a.out")
50
51        # Spawn a new process
52        popen = self.spawnSubprocess(exe)
53        self.addTearDownHook(self.cleanupSubprocesses)
54
55        self.runCmd("process attach -p " + str(popen.pid))
56
57        target = self.dbg.GetSelectedTarget()
58
59        process = target.GetProcess()
60        self.assertTrue(process, PROCESS_IS_VALID)
61
62
63    def process_attach_by_name(self):
64        """Test attach by process name"""
65
66        exe = os.path.join(os.getcwd(), "a.out")
67
68        # Spawn a new process
69        popen = self.spawnSubprocess(exe)
70        self.addTearDownHook(self.cleanupSubprocesses)
71
72        self.runCmd("process attach -n a.out")
73
74        target = self.dbg.GetSelectedTarget()
75
76        process = target.GetProcess()
77        self.assertTrue(process, PROCESS_IS_VALID)
78
79
80if __name__ == '__main__':
81    import atexit
82    lldb.SBDebugger.Initialize()
83    atexit.register(lambda: lldb.SBDebugger.Terminate())
84    unittest2.main()
85