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)
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')
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')