def test_gc_unused_connection(self): close_f = mock.Mock() pool = ConnectionPool('mypool', 2, close_f, MyConnection, 'local', 8888, db=3) # Both connections out the pool. with pool.get_connection() as conn1: with pool.get_connection() as conn2: pass self.assertEqual(2, pool.qsize()) self.assertEqual(0, pool.num_in_use) self.assertEqual(2, pool.num_connected) with pool.get_connection() as conn3: self.assertIs(conn3, conn1) self.assertEqual(1, pool.qsize()) self.assertEqual(1, pool.num_in_use) self.assertEqual(2, pool.num_connected) self.assertEqual(1, len(pool._queue.queue)) for c in pool._queue.queue: c.last_access_time -= 1.1 pool._gc_unused_conn(1) self.assertEqual(1, len(pool._queue.queue)) self.assertEqual(1, pool.qsize()) self.assertEqual(1, pool.num_in_use) self.assertEqual(1, pool.num_connected) self.assertEqual(2, pool.qsize()) self.assertEqual(0, pool.num_in_use) self.assertEqual(1, pool.num_connected) close_f.assert_called_once_with(conn2)
def test_get_connection_expired(self): close_f = mock.Mock() pool = ConnectionPool('mypool', 1, close_f, MyConnection, 'local', 8888, db=3) with self.assertRaises(ExpiredConnection) as cm: with pool.get_connection(expiration=0.01) as conn: gevent.sleep(1) self.assertEqual('Connection is out pool (mypool,local,8888,db=3) for ' 'too long (0.01 secs)', str(cm.exception)) self.assertEqual(1, pool.qsize()) self.assertEqual(0, pool.num_in_use) self.assertEqual(0, pool.num_connected) close_f.assert_called_once_with(conn) with pool.get_connection(block=False) as conn: self.assertIsNot(conn, None)
def test_gc_unused_connection(self): close_f = mock.Mock() pool = ConnectionPool('mypool', 2, close_f, MyConnection, 'local', 8888, db=3) # Both connections out the pool. with pool.get_connection() as conn1: with pool.get_connection() as conn2: pass self.assertEqual(2, pool.qsize()) self.assertEqual(0, pool.num_in_use) self.assertEqual(2, pool.num_connected) with pool.get_connection() as conn3: self.assertIs(conn3, conn1) self.assertEqual(1, pool.qsize()) self.assertEqual(1, pool.num_in_use) self.assertEqual(2, pool.num_connected) self.assertEqual(1, len(pool._queue.queue)) for c in pool._queue.queue: c.last_access_time -= 1.1 pool._gc_unused_conn(1) self.assertEqual(1, len(pool._queue.queue)) self.assertEqual(1, pool.qsize()) self.assertEqual(1, pool.num_in_use) self.assertEqual(1, pool.num_connected) self.assertEqual(2, pool.qsize()) self.assertEqual(0, pool.num_in_use) self.assertEqual(1, pool.num_connected) close_f.assert_called_once_with(conn2)
def test_get_connection_expired(self): close_f = mock.Mock() pool = ConnectionPool('mypool', 1, close_f, MyConnection, 'local', 8888, db=3) with self.assertRaises(ExpiredConnection) as cm: with pool.get_connection(expiration=0.01) as conn: gevent.sleep(1) self.assertEqual( 'Connection is out pool (mypool,local,8888,db=3) for ' 'too long (0.01 secs)', str(cm.exception)) self.assertEqual(1, pool.qsize()) self.assertEqual(0, pool.num_in_use) self.assertEqual(0, pool.num_connected) close_f.assert_called_once_with(conn) with pool.get_connection(block=False) as conn: self.assertIsNot(conn, None)
def test_context_manager_exception(self): close_f = mock.Mock() pool = ConnectionPool('mypool', 2, close_f, MyConnection, 'local', 8888, db=3) e = Exception("error") try: with pool.get_connection() as conn: self.assertEqual(1, pool.qsize()) self.assertEqual(1, pool.num_connected) self.assertEqual(1, pool.num_in_use) raise e except Exception, ex: self.assertIs(ex, e)
def test_context_manager(self): pool = ConnectionPool('mypool', 2, close_conn, MyConnection, 'local', 8888, db=3) with pool.get_connection() as conn: self.assertIsNot(conn, None) self.assertIsInstance(conn, MyConnection) self.assertEqual('local', conn.host) self.assertEqual(8888, conn.port) self.assertEqual(3, conn.db) self.assertEqual(1, pool.qsize()) self.assertEqual(1, pool.num_connected) self.assertEqual(1, pool.num_in_use) self.assertEqual(2, pool.qsize()) self.assertEqual(1, pool.num_connected) self.assertEqual(0, pool.num_in_use)
def test_failed_connection_creation(self): pool = ConnectionPool('mypool', 1, close_conn, MyBadConnection, 'local', 8888, db=3) self.assertEqual(1, pool.qsize()) with self.assertRaises(Exception) as cm1: pool.get() self.assertEqual('Failed to create Connection', str(cm1.exception)) # Make sure the connection is returned to the pool. self.assertEqual(1, pool.qsize()) with self.assertRaises(Exception) as cm2: with pool.get_connection(): pass self.assertEqual('Failed to create Connection', str(cm2.exception)) self.assertEqual(1, pool.qsize())
def test_context_manager_exception_with_replace_if(self): close_f = mock.Mock() pool = ConnectionPool('mypool', 2, close_f, MyConnection, 'local', 8888, db=3) e = Exception("error") def replace_if(ex): return ex is not e try: with pool.get_connection(replace_if=replace_if) as conn: self.assertEqual(1, pool.qsize()) self.assertEqual(1, pool.num_connected) self.assertEqual(1, pool.num_in_use) raise e except Exception, ex: self.assertIs(ex, e)
def test_context_manager_exception(self): close_f = mock.Mock() pool = ConnectionPool('mypool', 2, close_f, MyConnection, 'local', 8888, db=3) e = Exception("error") try: with pool.get_connection() as conn: self.assertEqual(1, pool.qsize()) self.assertEqual(1, pool.num_connected) self.assertEqual(1, pool.num_in_use) raise e except Exception, ex: self.assertIs(ex, e)
def test_context_manager(self): pool = ConnectionPool('mypool', 2, close_conn, MyConnection, 'local', 8888, db=3) with pool.get_connection() as conn: self.assertIsNot(conn, None) self.assertIsInstance(conn, MyConnection) self.assertEqual('local', conn.host) self.assertEqual(8888, conn.port) self.assertEqual(3, conn.db) self.assertEqual(1, pool.qsize()) self.assertEqual(1, pool.num_connected) self.assertEqual(1, pool.num_in_use) self.assertEqual(2, pool.qsize()) self.assertEqual(1, pool.num_connected) self.assertEqual(0, pool.num_in_use)
def test_failed_connection_creation(self): pool = ConnectionPool('mypool', 1, close_conn, MyBadConnection, 'local', 8888, db=3) self.assertEqual(1, pool.qsize()) with self.assertRaises(Exception) as cm1: pool.get() self.assertEqual('Failed to create Connection', str(cm1.exception)) # Make sure the connection is returned to the pool. self.assertEqual(1, pool.qsize()) with self.assertRaises(Exception) as cm2: with pool.get_connection(): pass self.assertEqual('Failed to create Connection', str(cm2.exception)) self.assertEqual(1, pool.qsize())
def test_context_manager_exception_with_replace_if(self): close_f = mock.Mock() pool = ConnectionPool('mypool', 2, close_f, MyConnection, 'local', 8888, db=3) e = Exception("error") def replace_if(ex): return ex is not e try: with pool.get_connection(replace_if=replace_if) as conn: self.assertEqual(1, pool.qsize()) self.assertEqual(1, pool.num_connected) self.assertEqual(1, pool.num_in_use) raise e except Exception, ex: self.assertIs(ex, e)