Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 11 additions & 20 deletions Lib/test/test_remote_pdb.py
Original file line number Diff line number Diff line change
Expand Up @@ -465,12 +465,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
Expand All @@ -487,11 +481,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

Expand All @@ -508,22 +501,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
Expand Down
Loading