Beispiel #1
0
    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)
Beispiel #2
0
    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)
Beispiel #3
0
    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)
Beispiel #4
0
    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)
Beispiel #5
0
    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)
Beispiel #6
0
 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)
Beispiel #7
0
    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())
Beispiel #8
0
    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)
Beispiel #9
0
    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)
Beispiel #10
0
 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)
Beispiel #11
0
    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())
Beispiel #12
0
    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)