From 70bb43b30ba3ff52dc0abf9112fe05ad6f32cddf Mon Sep 17 00:00:00 2001 From: Shane Harvey Date: Tue, 16 Apr 2024 16:18:10 -0700 Subject: [PATCH] PYTHON-4334 Fix test_heartbeat_start_ordering, ensure TCPServer starts before client (#1599) --- test/test_discovery_and_monitoring.py | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/test/test_discovery_and_monitoring.py b/test/test_discovery_and_monitoring.py index f7da8c278..72b0f8a02 100644 --- a/test/test_discovery_and_monitoring.py +++ b/test/test_discovery_and_monitoring.py @@ -20,8 +20,6 @@ import socketserver import sys import threading -from pymongo.monitoring import ServerHeartbeatFailedEvent, ServerHeartbeatStartedEvent - sys.path[0:0] = [""] from test import IntegrationTest, unittest @@ -52,6 +50,7 @@ from pymongo.errors import ( ) from pymongo.hello import Hello, HelloCompat from pymongo.helpers import _check_command_response, _check_write_command_response +from pymongo.monitoring import ServerHeartbeatFailedEvent, ServerHeartbeatStartedEvent from pymongo.server_description import SERVER_TYPE, ServerDescription from pymongo.settings import TopologySettings from pymongo.topology import Topology, _ErrorContext @@ -408,17 +407,21 @@ class MockTCPHandler(socketserver.BaseRequestHandler): self.request.close() -class TestHeartbeatStartOrdering(unittest.TestCase): - def start_server(self, events): - server = socketserver.TCPServer(("localhost", 9999), MockTCPHandler) - server.events = events - server.handle_request() - server.server_close() +class TCPServer(socketserver.TCPServer): + allow_reuse_address = True + def handle_request_and_shutdown(self): + self.handle_request() + self.server_close() + + +class TestHeartbeatStartOrdering(unittest.TestCase): def test_heartbeat_start_ordering(self): events = [] listener = HeartbeatEventsListListener(events) - server_thread = threading.Thread(target=self.start_server, args=(events,)) + server = TCPServer(("localhost", 9999), MockTCPHandler) + server.events = events + server_thread = threading.Thread(target=server.handle_request_and_shutdown) server_thread.start() _c = MongoClient( "mongodb://localhost:9999", serverSelectionTimeoutMS=500, event_listeners=(listener,)