def _process_adding(pipeline: Pipeline, client: Redis, offer_ids: List[int], adding_objects: List[dict]) -> None: try: add_objects(objects=adding_objects) logger.info("[ALGOLIA] %i objects were indexed!", len(adding_objects)) pipeline.execute() pipeline.reset() except AlgoliaException as error: logger.exception("[ALGOLIA] error when adding objects %s", error) add_offer_ids_in_error(client=client, offer_ids=offer_ids) pipeline.reset()
def test_ratelimit_redis(get: mock.MagicMock, getboolean: mock.MagicMock, getint: mock.MagicMock, pipeline: Pipeline): """ This test will only cover aurweb.ratelimit's Redis path if a real Redis server is configured. Otherwise, it'll use the database. """ # We'll need a Request for everything here. request = Request() # Run check_ratelimit for our request_limit. These should succeed. for i in range(4): assert not check_ratelimit(request) # This check_ratelimit should fail, being the 4001th request. assert check_ratelimit(request) # Delete the Redis keys. host = request.client.host pipeline.delete(f"ratelimit-ws:{host}") pipeline.delete(f"ratelimit:{host}") one, two = pipeline.execute() assert one and two # Should be good to go again! assert not check_ratelimit(request)
def test_rpc_ratelimit(getint: mock.MagicMock, client: TestClient, pipeline: Pipeline, packages: List[Package]): params = {"v": 5, "type": "suggest-pkgbase", "arg": "big"} for i in range(4): # The first 4 requests should be good. with client as request: response = request.get("/rpc", params=params) assert response.status_code == int(HTTPStatus.OK) # The fifth request should be banned. with client as request: response = request.get("/rpc", params=params) assert response.status_code == int(HTTPStatus.TOO_MANY_REQUESTS) # Delete the cached records. pipeline.delete("ratelimit-ws:testclient") pipeline.delete("ratelimit:testclient") one, two = pipeline.execute() assert one and two # The new first request should be good. with client as request: response = request.get("/rpc", params=params) assert response.status_code == int(HTTPStatus.OK)