示例#1
0
    def test_close_callback(self):

        pool = CachePool(
            generator,
            close_callback=close_callback,
        )
        element = pool.get()

        self.assertFalse(element.closed)
        pool.close(element)
        self.assertTrue(element.closed)
示例#2
0
    def test_generator_run_error_1(self):

        try:
            pool = CachePool(lambda x, y: (x, y), )
            pool.get()

        except TypeError as e:
            dd(repr(e))

        else:
            self.fail("run generator error")
示例#3
0
    def test_get_element(self):

        pool = CachePool(generator, )

        element = pool.get()

        dd('pool stat: {0}'.format(pool.stat))
        self.assertEqual(1, pool.stat['new'])
        self.assertEqual(1, pool.stat['get'])

        pool.put(element)

        dd('pool stat: {0}'.format(pool.stat))
        self.assertEqual(1, pool.stat['put'])
示例#4
0
    def test_close_callback_error(self):

        try:
            pool = CachePool(
                generator,
                close_callback=close_callback_error,
            )
            element = pool.get()
            pool.close(element)

        except AttributeError as e:
            dd(repr(e))

        else:
            self.fail("run close_callback error")
示例#5
0
    def test_generator_run_error_2(self):

        try:
            pool = CachePool(
                lambda x, y: (x, y),
                generator_args=[1, 2],
                generator_argkw={'k': 'v'},
            )
            pool.get()

        except TypeError as e:
            dd(repr(e))

        else:
            self.fail("run generator error")
示例#6
0
    def test_reuse_decider_drop(self):

        pool = CachePool(
            generator,
            close_callback=close_callback,
        )
        wrapper = make_wrapper(
            pool,
            reuse_decider=reuse_for_acceptable_errors,
        )

        element1 = element2 = None

        try:
            with wrapper() as ele:
                element1 = ele
                raise Exception()
        except:
            pass

        with wrapper() as ele:
            element2 = ele

        self.assertIsNot(element1, element2)
        self.assertTrue(element1.closed)
        self.assertFalse(element2.closed)
示例#7
0
    def test_args_argkw(self):

        args = [1, 'x']
        argkw = {'key': 'value'}

        pool = CachePool(
            generator,
            generator_args=args,
            generator_argkw=argkw,
        )

        element = pool.get()

        self.assertEqual(element.args[0], args[0])
        self.assertEqual(element.args[1], args[1])
        self.assertEqual(element.argkw, argkw)
示例#8
0
    def test_generator_is_not_callable(self):

        try:
            CachePool(1, )
        except CachePoolGeneratorError as e:
            self.assertEqual(str(e), 'generator is not callable')

        else:
            self.fail("didn't catch CachePoolGeneratorError")
示例#9
0
    def test_initial_stat(self):

        pool = CachePool(generator, )

        dd('pool stat: {0}'.format(pool.stat))

        self.assertEqual(0, pool.stat['new'])
        self.assertEqual(0, pool.stat['put'])
        self.assertEqual(0, pool.stat['get'])
示例#10
0
    def test_new(self):

        pool = CachePool(generator, )
        wrapper = make_wrapper(pool, )

        element1 = element2 = None
        with wrapper() as ele:
            element1 = ele

            with wrapper() as ele:
                element2 = ele

        _element2 = pool.get()
        _element1 = pool.get()

        self.assertIsNot(element1, element2)
        self.assertIs(element1, _element1)
        self.assertIs(element2, _element2)
示例#11
0
    def test_close_callback_when_queue_full(self):

        pool = CachePool(
            generator,
            pool_size=1,
            close_callback=close_callback,
        )

        dd('pool qsize: {0}'.format(pool.queue.qsize()))
        element1 = pool.get()
        element2 = pool.get()

        pool.put(element1)
        pool.put(element2)

        dd('pool qsize: {0}'.format(pool.queue.qsize()))
        self.assertFalse(element1.closed)
        self.assertTrue(element2.closed)
示例#12
0
    def test_get_element_twice(self):

        pool = CachePool(generator, )

        element1 = pool.get()
        pool.put(element1)

        dd('pool stat: {0}'.format(pool.stat))
        self.assertEqual(1, pool.stat['new'])

        element2 = pool.get()
        pool.put(element2)

        dd('pool stat: {0}'.format(pool.stat))
        self.assertEqual(2, pool.stat['get'])
        self.assertIs(element1, element2)
示例#13
0
    def test_pool_size(self):

        pool = CachePool(
            generator,
            pool_size=1,
            close_callback=close_callback,
        )

        element1 = pool.get()
        element2 = pool.get()

        self.assertEqual(0, pool.queue.qsize())
        pool.put(element1)
        self.assertEqual(1, pool.queue.qsize())
        pool.put(element2)
        self.assertEqual(1, pool.queue.qsize())
示例#14
0
    def test_reuse_decider_error(self):

        pool = CachePool(generator, )
        wrapper = make_wrapper(
            pool,
            reuse_decider=reuse_decider_error,
        )

        with wrapper() as ele:
            (ele)

        try:
            with wrapper() as ele:
                raise Exception()
        except ErrorInReuse:
            pass

        except:
            self.fail("didn't run reuse_decider")

        else:
            self.fail("didn't run reuse_decider")