annotate lldb/test/API/functionalities/process_group/TestChangeProcessGroup.py @ 180:680fa57a2f20

fix compile errors.
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sat, 30 May 2020 17:44:06 +0900
parents 0572611fdcc8
children 2e18cbf3894f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
150
anatofuz
parents:
diff changeset
1 """Test that we handle inferiors which change their process group"""
anatofuz
parents:
diff changeset
2
anatofuz
parents:
diff changeset
3
anatofuz
parents:
diff changeset
4
anatofuz
parents:
diff changeset
5 import os
anatofuz
parents:
diff changeset
6 import lldb
anatofuz
parents:
diff changeset
7 from lldbsuite.test.decorators import *
anatofuz
parents:
diff changeset
8 from lldbsuite.test.lldbtest import *
anatofuz
parents:
diff changeset
9 from lldbsuite.test import lldbutil
anatofuz
parents:
diff changeset
10
anatofuz
parents:
diff changeset
11
anatofuz
parents:
diff changeset
12 class ChangeProcessGroupTestCase(TestBase):
anatofuz
parents:
diff changeset
13
anatofuz
parents:
diff changeset
14 mydir = TestBase.compute_mydir(__file__)
anatofuz
parents:
diff changeset
15 NO_DEBUG_INFO_TESTCASE = True
anatofuz
parents:
diff changeset
16
anatofuz
parents:
diff changeset
17 def setUp(self):
anatofuz
parents:
diff changeset
18 # Call super's setUp().
anatofuz
parents:
diff changeset
19 TestBase.setUp(self)
anatofuz
parents:
diff changeset
20 # Find the line number to break for main.c.
anatofuz
parents:
diff changeset
21 self.line = line_number('main.c', '// Set breakpoint here')
anatofuz
parents:
diff changeset
22
anatofuz
parents:
diff changeset
23 @skipIfFreeBSD # Times out on FreeBSD llvm.org/pr23731
anatofuz
parents:
diff changeset
24 @skipIfWindows # setpgid call does not exist on Windows
anatofuz
parents:
diff changeset
25 @expectedFailureAndroid("http://llvm.org/pr23762", api_levels=[16])
anatofuz
parents:
diff changeset
26 @expectedFailureNetBSD
anatofuz
parents:
diff changeset
27 def test_setpgid(self):
anatofuz
parents:
diff changeset
28 self.build()
anatofuz
parents:
diff changeset
29 exe = self.getBuildArtifact("a.out")
anatofuz
parents:
diff changeset
30
anatofuz
parents:
diff changeset
31 # Use a file as a synchronization point between test and inferior.
anatofuz
parents:
diff changeset
32 pid_file_path = lldbutil.append_to_process_working_directory(self,
anatofuz
parents:
diff changeset
33 "pid_file_%d" % (int(time.time())))
anatofuz
parents:
diff changeset
34 self.addTearDownHook(
anatofuz
parents:
diff changeset
35 lambda: self.run_platform_command(
anatofuz
parents:
diff changeset
36 "rm %s" %
anatofuz
parents:
diff changeset
37 (pid_file_path)))
anatofuz
parents:
diff changeset
38
anatofuz
parents:
diff changeset
39 popen = self.spawnSubprocess(exe, [pid_file_path])
anatofuz
parents:
diff changeset
40 self.addTearDownHook(self.cleanupSubprocesses)
anatofuz
parents:
diff changeset
41
anatofuz
parents:
diff changeset
42 pid = lldbutil.wait_for_file_on_target(self, pid_file_path)
anatofuz
parents:
diff changeset
43
anatofuz
parents:
diff changeset
44 # make sure we cleanup the forked child also
anatofuz
parents:
diff changeset
45 def cleanupChild():
anatofuz
parents:
diff changeset
46 if lldb.remote_platform:
anatofuz
parents:
diff changeset
47 lldb.remote_platform.Kill(int(pid))
anatofuz
parents:
diff changeset
48 else:
anatofuz
parents:
diff changeset
49 if os.path.exists("/proc/" + pid):
anatofuz
parents:
diff changeset
50 os.kill(int(pid), signal.SIGKILL)
anatofuz
parents:
diff changeset
51 self.addTearDownHook(cleanupChild)
anatofuz
parents:
diff changeset
52
anatofuz
parents:
diff changeset
53 # Create a target by the debugger.
anatofuz
parents:
diff changeset
54 target = self.dbg.CreateTarget(exe)
anatofuz
parents:
diff changeset
55 self.assertTrue(target, VALID_TARGET)
anatofuz
parents:
diff changeset
56
anatofuz
parents:
diff changeset
57 listener = lldb.SBListener("my.attach.listener")
anatofuz
parents:
diff changeset
58 error = lldb.SBError()
anatofuz
parents:
diff changeset
59 process = target.AttachToProcessWithID(listener, int(pid), error)
anatofuz
parents:
diff changeset
60 self.assertTrue(error.Success() and process, PROCESS_IS_VALID)
anatofuz
parents:
diff changeset
61
anatofuz
parents:
diff changeset
62 # set a breakpoint just before the setpgid() call
anatofuz
parents:
diff changeset
63 lldbutil.run_break_set_by_file_and_line(
anatofuz
parents:
diff changeset
64 self, 'main.c', self.line, num_expected_locations=-1)
anatofuz
parents:
diff changeset
65
anatofuz
parents:
diff changeset
66 thread = process.GetSelectedThread()
anatofuz
parents:
diff changeset
67
anatofuz
parents:
diff changeset
68 # release the child from its loop
anatofuz
parents:
diff changeset
69 value = thread.GetSelectedFrame().EvaluateExpression("release_child_flag = 1")
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
70 self.assertTrue(value.IsValid())
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
71 self.assertEquals(value.GetValueAsUnsigned(0), 1)
150
anatofuz
parents:
diff changeset
72 process.Continue()
anatofuz
parents:
diff changeset
73
anatofuz
parents:
diff changeset
74 # make sure the child's process group id is different from its pid
anatofuz
parents:
diff changeset
75 value = thread.GetSelectedFrame().EvaluateExpression("(int)getpgid(0)")
anatofuz
parents:
diff changeset
76 self.assertTrue(value.IsValid())
anatofuz
parents:
diff changeset
77 self.assertNotEqual(value.GetValueAsUnsigned(0), int(pid))
anatofuz
parents:
diff changeset
78
anatofuz
parents:
diff changeset
79 # step over the setpgid() call
anatofuz
parents:
diff changeset
80 thread.StepOver()
anatofuz
parents:
diff changeset
81 self.assertEqual(thread.GetStopReason(), lldb.eStopReasonPlanComplete)
anatofuz
parents:
diff changeset
82
anatofuz
parents:
diff changeset
83 # verify that the process group has been set correctly
anatofuz
parents:
diff changeset
84 # this also checks that we are still in full control of the child
anatofuz
parents:
diff changeset
85 value = thread.GetSelectedFrame().EvaluateExpression("(int)getpgid(0)")
anatofuz
parents:
diff changeset
86 self.assertTrue(value.IsValid())
anatofuz
parents:
diff changeset
87 self.assertEqual(value.GetValueAsUnsigned(0), int(pid))
anatofuz
parents:
diff changeset
88
anatofuz
parents:
diff changeset
89 # run to completion
anatofuz
parents:
diff changeset
90 process.Continue()
anatofuz
parents:
diff changeset
91 self.assertEqual(process.GetState(), lldb.eStateExited)