def test_pool_reuses_open_socket(self): # Test Pool's _check_closed() method doesn't close a healthy socket cx_pool = Pool((host,port), 10, None, None, False) sock_info = cx_pool.get_socket() cx_pool.return_socket(sock_info) # trigger _check_closed, which only runs on sockets that haven't been # used in a second time.sleep(1) new_sock_info = cx_pool.get_socket() self.assertEqual(sock_info, new_sock_info) del sock_info, new_sock_info # Assert sock_info was returned to the pool *once* force_reclaim_sockets(cx_pool, 1) self.assertEqual(1, len(cx_pool.sockets))
def test_pool_removes_dead_socket(self): # Test that Pool removes dead socket and the socket doesn't return # itself PYTHON-344 cx_pool = Pool((host,port), 10, None, None, False) sock_info = cx_pool.get_socket() # Simulate a closed socket without telling the SocketInfo it's closed sock_info.sock.close() self.assertTrue(pymongo.pool._closed(sock_info.sock)) cx_pool.return_socket(sock_info) time.sleep(1) # trigger _check_closed new_sock_info = cx_pool.get_socket() self.assertEqual(0, len(cx_pool.sockets)) self.assertNotEqual(sock_info, new_sock_info) del sock_info, new_sock_info # new_sock_info returned to the pool, but not the closed sock_info force_reclaim_sockets(cx_pool, 1) self.assertEqual(1, len(cx_pool.sockets))
def test_pool_removes_dead_request_socket(self): # Test that Pool keeps request going even if a socket dies in request cx_pool = Pool((host,port), 10, None, None, False) cx_pool.start_request() # Get the request socket sock_info = cx_pool.get_socket() self.assertEqual(0, len(cx_pool.sockets)) self.assertEqual(sock_info, cx_pool._get_request_state()) sock_info.sock.close() cx_pool.return_socket(sock_info) time.sleep(1) # trigger _check_closed # Although the request socket died, we're still in a request with a # new socket new_sock_info = cx_pool.get_socket() self.assertNotEqual(sock_info, new_sock_info) self.assertEqual(new_sock_info, cx_pool._get_request_state()) cx_pool.return_socket(new_sock_info) self.assertEqual(new_sock_info, cx_pool._get_request_state()) self.assertEqual(0, len(cx_pool.sockets)) cx_pool.end_request() self.assertEqual(1, len(cx_pool.sockets))