Esempio n. 1
0
    async def test_decorator_limiter_called_correctly(self, limit_class):
        app = Application()
        routes = RouteTableDef()

        async def test_view(request):
            return json_response("bad", status=400)

        async def test_view2(request):
            return json_response("bad", status=429)

        @routes.get("/")
        @aiopylimit("root_view", (60, 1), limit_reached_view=test_view)
        async def test(request):
            return json_response({"test": True})

        app.add_routes(routes)

        request = UserDict()
        request.app = UserDict()
        request.app['limit_global_namespace_prefix'] = "aiohttp"
        request.app['limit_key_func'] = lambda x: "key"
        request.app['limit_reached_view'] = test_view2

        ret = await test(request)
        limit_class.assert_called_once_with(60, 1)
        self.assertEqual(ret.status, 400)
Esempio n. 2
0
    async def test_decorator_success(self, attempt, is_rate_limited):
        app = Application()

        routes = RouteTableDef()

        @routes.get("/")
        @aiopylimit("root_view", (60, 1))  # 1 per 60 seconds
        async def test(request):
            return json_response({"test": True})

        app.add_routes(routes)
        request = UserDict()
        request.app = UserDict()
        request.app['limit_global_namespace_prefix'] = "aiohttp"
        request.app['limit_key_func'] = lambda x: "key"
        request.app['limit_reached_view'] = None
        ret = await test(request)
        self.assertEqual(ret.status, 200)
        attempt.assert_called_once_with('aiohttp-root_view-key')
        is_rate_limited.assert_called_once_with('aiohttp-root_view-key')
Esempio n. 3
0
    async def test_decorator_class_based(self, attempt, is_rate_limited):
        async def test_view(request):
            return json_response("bad", status=400)

        class TestClass(object):
            @aiopylimit("root_view", (60, 1), limit_reached_view=test_view)
            async def test(self, request):
                return json_response({"test": True})

        async def test_view2(request):
            return json_response("bad", status=429)

        request = UserDict()
        request.app = UserDict()
        request.app['limit_global_namespace_prefix'] = "aiohttp"
        request.app['limit_key_func'] = lambda x: "key"
        request.app['limit_reached_view'] = test_view2
        obj = TestClass()
        obj.request = request
        ret = await obj.test(request)
        self.assertEqual(ret.status, 400)
        attempt.assert_called_once_with('aiohttp-root_view-key')
        is_rate_limited.assert_called_once_with('aiohttp-root_view-key')