def test_reset_and_request(self): # reset() is called after a fork, or after a socket error. Ensure that # a new request is begun if a request was in progress when the reset() # occurred, otherwise no request is begun. p = Pool((host, port), 10, None, None, False) self.assertFalse(p.in_request()) p.start_request() self.assertTrue(p.in_request()) p.reset() self.assertTrue(p.in_request()) p.end_request() self.assertFalse(p.in_request()) p.reset() self.assertFalse(p.in_request())
def test_request(self): # Check that Pool gives two different sockets in two calls to # get_socket() -- doesn't automatically put us in a request any more cx_pool = Pool( pair=(host,port), max_size=10, net_timeout=1000, conn_timeout=1000, use_ssl=False ) sock0 = cx_pool.get_socket() sock1 = cx_pool.get_socket() self.assertNotEqual(sock0, sock1) # Now in a request, we'll get the same socket both times cx_pool.start_request() sock2 = cx_pool.get_socket() sock3 = cx_pool.get_socket() self.assertEqual(sock2, sock3) # Pool didn't keep reference to sock0 or sock1; sock2 and 3 are new self.assertNotEqual(sock0, sock2) self.assertNotEqual(sock1, sock2) # Return the request sock to pool cx_pool.end_request() sock4 = cx_pool.get_socket() sock5 = cx_pool.get_socket() # Not in a request any more, we get different sockets self.assertNotEqual(sock4, sock5) # end_request() returned sock2 to pool self.assertEqual(sock4, sock2)
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))
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))