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))
def test_pool_removes_dead_socket_after_request(self): # Test that Pool keeps handles a socket dying that *used* to be the # request socket. 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(sock_info, cx_pool._get_request_state()) # End request cx_pool.end_request() self.assertEqual(1, len(cx_pool.sockets)) # Kill old request socket sock_info.sock.close() del sock_info time.sleep(1) # trigger _check_closed # Dead socket detected and removed new_sock_info = cx_pool.get_socket() self.assertEqual(0, len(cx_pool.sockets)) self.assertFalse(pymongo.pool._closed(new_sock_info.sock))