(case_setup_multiprocessing_dap)
| 5347 | |
| 5348 | |
| 5349 | def test_subprocess_then_fork(case_setup_multiprocessing_dap): |
| 5350 | import threading |
| 5351 | from tests_python.debugger_unittest import AbstractWriterThread |
| 5352 | |
| 5353 | with case_setup_multiprocessing_dap.test_file("_debugger_case_subprocess_and_fork.py") as writer: |
| 5354 | json_facade = JsonFacade(writer) |
| 5355 | json_facade.write_launch(justMyCode=False) |
| 5356 | |
| 5357 | break_line = writer.get_line_index_with_content("break here") |
| 5358 | json_facade.write_set_breakpoints([break_line]) |
| 5359 | |
| 5360 | server_socket = writer.server_socket |
| 5361 | |
| 5362 | class SecondaryProcessWriterThread(AbstractWriterThread): |
| 5363 | TEST_FILE = writer.get_main_filename() |
| 5364 | _sequence = -1 |
| 5365 | |
| 5366 | class SecondaryProcessThreadCommunication(threading.Thread): |
| 5367 | |
| 5368 | def run(self): |
| 5369 | from tests_python.debugger_unittest import ReaderThread |
| 5370 | |
| 5371 | # Note that we accept 2 connections and then we proceed to receive the breakpoints. |
| 5372 | json_facades = [] |
| 5373 | for i in range(2): |
| 5374 | server_socket.listen(1) |
| 5375 | self.server_socket = server_socket |
| 5376 | writer.log.append(" *** Multiprocess %s waiting on server_socket.accept()" % (i,)) |
| 5377 | new_sock, addr = server_socket.accept() |
| 5378 | writer.log.append(" *** Multiprocess %s completed server_socket.accept()" % (i,)) |
| 5379 | |
| 5380 | reader_thread = ReaderThread(new_sock) |
| 5381 | reader_thread.name = " *** Multiprocess %s Reader Thread" % i |
| 5382 | reader_thread.start() |
| 5383 | writer.log.append(" *** Multiprocess %s started ReaderThread" % (i,)) |
| 5384 | |
| 5385 | writer2 = SecondaryProcessWriterThread() |
| 5386 | writer2._WRITE_LOG_PREFIX = " *** Multiprocess %s write: " % i |
| 5387 | writer2.reader_thread = reader_thread |
| 5388 | writer2.sock = new_sock |
| 5389 | json_facade2 = JsonFacade(writer2) |
| 5390 | json_facade2.writer.write_multi_threads_single_notification(True) |
| 5391 | writer.log.append(" *** Multiprocess %s write attachThread" % (i,)) |
| 5392 | json_facade2.write_attach(justMyCode=False) |
| 5393 | |
| 5394 | writer.log.append(" *** Multiprocess %s write set breakpoints" % (i,)) |
| 5395 | json_facade2.write_set_breakpoints([break_line]) |
| 5396 | writer.log.append(" *** Multiprocess %s write make initial run" % (i,)) |
| 5397 | json_facade2.write_make_initial_run() |
| 5398 | json_facades.append(json_facade2) |
| 5399 | |
| 5400 | for i, json_facade3 in enumerate(json_facades): |
| 5401 | writer.log.append(" *** Multiprocess %s wait for thread stopped" % (i,)) |
| 5402 | json_facade3.wait_for_thread_stopped(line=break_line) |
| 5403 | writer.log.append(" *** Multiprocess %s continue" % (i,)) |
| 5404 | json_facade3.write_continue() |
| 5405 | |
| 5406 | secondary_process_thread_communication = SecondaryProcessThreadCommunication() |
nothing calls this directly
no test coverage detected