https://github.com/python/cpython/commit/a1f4a6b246ada368cb77c7245dfd7f5ccb6f7d87 commit: a1f4a6b246ada368cb77c7245dfd7f5ccb6f7d87 branch: main author: Tian Gao <gaogaotiant...@hotmail.com> committer: pablogsal <pablog...@gmail.com> date: 2025-04-25T18:40:18+01:00 summary:
gh-132912: Use readline to synchronize between procs in remote pdb test (#132949) files: M Lib/test/test_remote_pdb.py diff --git a/Lib/test/test_remote_pdb.py b/Lib/test/test_remote_pdb.py index 8d2b584007ef41..b7c4a8b1444280 100644 --- a/Lib/test/test_remote_pdb.py +++ b/Lib/test/test_remote_pdb.py @@ -469,12 +469,6 @@ def test_breakpoints(self): def test_keyboard_interrupt(self): """Test that sending keyboard interrupt breaks into pdb.""" - synchronizer_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - synchronizer_sock.bind(('127.0.0.1', 0)) # Let OS assign port - synchronizer_sock.settimeout(SHORT_TIMEOUT) - synchronizer_sock.listen(1) - self.addCleanup(synchronizer_sock.close) - sync_port = synchronizer_sock.getsockname()[1] script = textwrap.dedent(f""" import time @@ -491,11 +485,10 @@ def bar(): version=pdb._PdbServer.protocol_version(), ) print("Connected to debugger") - iterations = 10 - socket.create_connection(('127.0.0.1', {sync_port})).close() + iterations = 50 while iterations > 0: - print("Iteration", iterations) - time.sleep(1) + print("Iteration", iterations, flush=True) + time.sleep(0.2) iterations -= 1 return 42 @@ -512,22 +505,20 @@ def bar(): # Continue execution self._send_command(client_file, "c") - # Wait until execution has continued - synchronizer_sock.accept()[0].close() - - # Wait a bit so the remote leaves create_connection(). This is not - # required but makes the rest of the test faster as we will exit the main - # loop immediately by setting iterations to 0. - time.sleep(0.1) + # Confirm that the remote is already in the while loop. We know + # it's in bar() and we can exit the loop immediately by setting + # iterations to 0. + while line := process.stdout.readline(): + if line.startswith("Iteration"): + break # Inject a script to interrupt the running process self._send_interrupt(process.pid) messages = self._read_until_prompt(client_file) - # Verify we got the keyboard interrupt message. Is possible that we get interrupted somewhere - # in bar() or when leving create_connection() + # Verify we got the keyboard interrupt message. interrupt_msgs = [msg['message'] for msg in messages if 'message' in msg] - expected_msg = [msg for msg in interrupt_msgs if "bar()" in msg or "create_connection()" in msg] + expected_msg = [msg for msg in interrupt_msgs if "bar()" in msg] self.assertGreater(len(expected_msg), 0) # Continue to end as fast as we can _______________________________________________ Python-checkins mailing list -- python-checkins@python.org To unsubscribe send an email to python-checkins-le...@python.org https://mail.python.org/mailman3/lists/python-checkins.python.org/ Member address: arch...@mail-archive.com