コード例 #1
0
 def test_by_task_struct(self):
     pid = fork_and_pause()
     wait_until(lambda: proc_state(pid) == "S")
     self.assertIn("pause",
                   str(self.prog.stack_trace(find_task(self.prog, pid))))
     os.kill(pid, signal.SIGKILL)
     os.waitpid(pid, 0)
コード例 #2
0
 def test_find_user(self):
     for uid in self.UIDS:
         pid = fork_and_pause(functools.partial(os.setuid, uid))
         try:
             wait_until(lambda: proc_state(pid) == "S")
             found_uid = find_user(self.prog, uid).uid.val.value_()
         finally:
             os.kill(pid, signal.SIGKILL)
         self.assertEqual(found_uid, uid)
コード例 #3
0
 def test_for_each_user(self):
     pids = []
     try:
         for uid in self.UIDS:
             pid = fork_and_pause(functools.partial(os.setuid, uid))
             wait_until(lambda: proc_state(pid) == "S")
             pids.append(pid)
         found_uids = {user.uid.val.value_() for user in for_each_user(self.prog)}
     finally:
         for pid in pids:
             os.kill(pid, signal.SIGKILL)
     self.assertTrue(self.UIDS.issubset(found_uids))
コード例 #4
0
 def test_registers(self):
     # Smoke test that we get at least one register and that
     # StackFrame.registers() agrees with StackFrame.register().
     pid = fork_and_pause()
     wait_until(lambda: proc_state(pid) == "S")
     trace = self.prog.stack_trace(pid)
     have_registers = False
     for frame in trace:
         for name, value in frame.registers().items():
             self.assertEqual(frame.register(name), value)
             have_registers = True
     self.assertTrue(have_registers)
     os.kill(pid, signal.SIGKILL)
     os.waitpid(pid, 0)
コード例 #5
0
 def _test_by_pid(self, orc):
     old_orc = int(os.environ.get("DRGN_PREFER_ORC_UNWINDER", "0")) != 0
     with setenv("DRGN_PREFER_ORC_UNWINDER", "1" if orc else "0"):
         if orc == old_orc:
             prog = self.prog
         else:
             prog = Program()
             prog.set_kernel()
             prog.load_default_debug_info()
         pid = fork_and_pause()
         wait_until(lambda: proc_state(pid) == "S")
         self.assertIn("pause", str(prog.stack_trace(pid)))
         os.kill(pid, signal.SIGKILL)
         os.waitpid(pid, 0)
コード例 #6
0
ファイル: test_stack_trace.py プロジェクト: jgkamat/drgn
 def test_local_variable(self):
     pid = fork_and_pause()
     wait_until(lambda: proc_state(pid) == "S")
     for frame in self.prog.stack_trace(pid):
         if frame.name in ("context_switch", "__schedule"):
             try:
                 prev = frame["prev"]
             except KeyError:
                 continue
             if not prev.absent_:
                 self.assertEqual(prev.pid, pid)
                 break
     else:
         self.skipTest("prev not found in context_switch or __schedule")
     os.kill(pid, signal.SIGKILL)
     os.waitpid(pid, 0)
コード例 #7
0
ファイル: test_sched.py プロジェクト: shahraaz-cn/drgn
    def test_task_state_to_char(self):
        task = find_task(self.prog, os.getpid())
        self.assertEqual(task_state_to_char(task), "R")

        pid = fork_and_pause()
        task = find_task(self.prog, pid)

        wait_until(lambda: proc_state(pid) == "S")
        self.assertEqual(task_state_to_char(task), "S")

        os.kill(pid, signal.SIGSTOP)
        wait_until(lambda: proc_state(pid) == "T")
        self.assertEqual(task_state_to_char(task), "T")

        os.kill(pid, signal.SIGKILL)
        wait_until(lambda: proc_state(pid) == "Z")
        self.assertEqual(task_state_to_char(task), "Z")

        os.waitpid(pid, 0)
コード例 #8
0
ファイル: test_stack_trace.py プロジェクト: zeta1999/drgn
 def test_by_pid(self):
     pid = fork_and_pause()
     wait_until(lambda: proc_state(pid) == "S")
     self.assertIn("schedule", str(self.prog.stack_trace(pid)))
     os.kill(pid, signal.SIGKILL)
     os.waitpid(pid, 0)