(case_setup_dap, scenario, check_subprocesses)
| 5568 | ], |
| 5569 | ) |
| 5570 | def test_terminate(case_setup_dap, scenario, check_subprocesses): |
| 5571 | import psutil |
| 5572 | |
| 5573 | def check_test_suceeded_msg(writer, stdout, stderr): |
| 5574 | return "TEST SUCEEDED" not in "".join(stdout) |
| 5575 | |
| 5576 | def update_command_line_args(writer, args): |
| 5577 | ret = debugger_unittest.AbstractWriterThread.update_command_line_args(writer, args) |
| 5578 | if check_subprocesses in ("kill_subprocesses", "dont_kill_subprocesses"): |
| 5579 | ret.append("check-subprocesses") |
| 5580 | if check_subprocesses in ("kill_subprocesses_ignore_pid",): |
| 5581 | ret.append("check-subprocesses-ignore-pid") |
| 5582 | return ret |
| 5583 | |
| 5584 | with case_setup_dap.test_file( |
| 5585 | "_debugger_case_terminate.py", |
| 5586 | check_test_suceeded_msg=check_test_suceeded_msg, |
| 5587 | update_command_line_args=update_command_line_args, |
| 5588 | EXPECTED_RETURNCODE="any" if check_subprocesses == "kill_subprocesses_ignore_pid" else 0, |
| 5589 | ) as writer: |
| 5590 | json_facade = JsonFacade(writer) |
| 5591 | if check_subprocesses == "dont_kill_subprocesses": |
| 5592 | json_facade.write_launch(terminateChildProcesses=False) |
| 5593 | |
| 5594 | json_facade.write_make_initial_run() |
| 5595 | response = json_facade.write_initialize() |
| 5596 | pid = response.to_dict()["body"]["pydevd"]["processId"] |
| 5597 | |
| 5598 | if check_subprocesses in ("kill_subprocesses", "dont_kill_subprocesses", "kill_subprocesses_ignore_pid"): |
| 5599 | process_ids_to_check = [pid] |
| 5600 | p = psutil.Process(pid) |
| 5601 | |
| 5602 | def wait_for_child_processes(): |
| 5603 | children = p.children(recursive=True) |
| 5604 | found = len(children) |
| 5605 | if found == 8: |
| 5606 | process_ids_to_check.extend([x.pid for x in children]) |
| 5607 | return True |
| 5608 | return False |
| 5609 | |
| 5610 | wait_for_condition(wait_for_child_processes) |
| 5611 | |
| 5612 | if scenario == "terminate_request": |
| 5613 | json_facade.write_terminate() |
| 5614 | elif scenario == "terminate_debugee": |
| 5615 | json_facade.write_disconnect(terminate_debugee=True) |
| 5616 | else: |
| 5617 | raise AssertionError("Unexpected: %s" % (scenario,)) |
| 5618 | json_facade.wait_for_terminated() |
| 5619 | |
| 5620 | if check_subprocesses in ("kill_subprocesses", "dont_kill_subprocesses", "kill_subprocesses_ignore_pid"): |
| 5621 | |
| 5622 | def is_pid_alive(pid): |
| 5623 | # Note: the process may be a zombie process in Linux |
| 5624 | # (althought it's killed it remains in that state |
| 5625 | # because we're monitoring it). |
| 5626 | try: |
| 5627 | proc = psutil.Process(pid) |
nothing calls this directly
no test coverage detected