def test_basic_setup(tracer): app = web.Application() az.setup(app, tracer) fetched_tracer = az.get_tracer(app) assert len(app.middlewares) == 1 assert tracer is fetched_tracer
async def test_middleware_with_valid_ip(tracer, version, address_in, address_out): if address_out is None: address_out = address_in app = web.Application() az.setup(app, tracer) # Fake transport transp = Mock() transp.get_extra_info.return_value = (address_in, "0") async def handler(request): return web.Response(body=b"data") req = make_mocked_request("GET", "/", headers={"token": "x"}, transport=transp, app=app) middleware = middleware_maker() with patch("aiojaeger.span.Span.remote_endpoint") as mocked_remote_ep: await middleware(req, handler) assert mocked_remote_ep.call_count == 1 args, kwargs = mocked_remote_ep.call_args assert kwargs[version] == address_out
async def test_middleware_with_default_transport(zipkin_tracer: Tracer): app = web.Application() az.setup(app, zipkin_tracer) async def handler(request): return web.Response(body=b"data") req = make_mocked_request("GET", "/aa", headers={"token": "x"}, app=app) req.match_info.route.resource.canonical = "/{pid}" middleware = middleware_maker() await middleware(req, handler) span = az.request_span(req) assert span assert len(zipkin_tracer.transport.records) == 1 rec = zipkin_tracer.transport.records[0] assert rec.asdict()["tags"][az.HTTP_ROUTE] == "/{pid}" # noop span does not produce records headers = {"b3": "1-2-0"} req_noop = make_mocked_request("GET", "/", headers=headers, app=app) await middleware(req_noop, handler) span = az.request_span(req_noop) assert span assert len(zipkin_tracer.transport.records) == 1
async def make_app(): app = web.Application() app.router.add_get("/api/v1/data", handler) app.router.add_get("/", handler) endpoint = az.create_endpoint("service_a", ipv4=host, port=port) tracer = await az.create(zipkin_address, endpoint, sample_rate=1.0) trace_config = az.make_trace_config(tracer) session = aiohttp.ClientSession(trace_configs=[trace_config]) app["session"] = session async def close_session(app): await app["session"].close() app.on_cleanup.append(close_session) az.setup(app, tracer) TEMPLATES_ROOT = pathlib.Path(__file__).parent / "templates" aiohttp_jinja2.setup( app, loader=jinja2.FileSystemLoader(str(TEMPLATES_ROOT)) ) return app
async def test_middleware_cleanup_app(tracer): fut = asyncio.Future() fut.set_result(None) with patch.object(tracer, "close", return_value=fut) as mocked_close: app = web.Application() az.setup(app, tracer) app.freeze() await app.cleanup() assert mocked_close.call_count == 1
async def make_app(): app = web.Application() app.router.add_get("/api/v1/data", handler) zipkin_address = "http://127.0.0.1:9411/api/v2/spans" endpoint = az.create_endpoint("service_c", ipv4=host, port=port) tracer = await az.create(zipkin_address, endpoint, sample_rate=1.0) az.setup(app, tracer) return app
async def make_app(host, port): app = web.Application() app.router.add_post("/consume", handler) aiojobs.aiohttp.setup(app) zipkin_address = "http://127.0.0.1:9411/api/v2/spans" endpoint = az.create_endpoint("backend_broker", ipv4=host, port=port) tracer = await az.create(zipkin_address, endpoint, sample_rate=1.0) az.setup(app, tracer) return app
async def make_app(host, port): app = web.Application() app.router.add_get("/", index) session = aiohttp.ClientSession() app["session"] = session zipkin_address = "http://127.0.0.1:9411/api/v2/spans" endpoint = az.create_endpoint("frontend", ipv4=host, port=port) tracer = await az.create(zipkin_address, endpoint, sample_rate=1.0) az.setup(app, tracer) return app
async def test_middleware_with_handler_404(tracer): app = web.Application() az.setup(app, tracer) async def handler(request): raise HTTPNotFound req = make_mocked_request("GET", "/", headers={"token": "x"}, app=app) middleware = middleware_maker() with pytest.raises(HTTPException): await middleware(req, handler)
async def make_app(host, port): app = web.Application() app.router.add_get("/", handle) # here we aquire reference to route, so later we can command # aiojaeger not to trace it skip_route = app.router.add_get("/status", not_traced_handle) endpoint = az.create_endpoint("aiohttp_server", ipv4=host, port=port) zipkin_address = "http://127.0.0.1:9411/api/v2/spans" tracer = await az.create(zipkin_address, endpoint, sample_rate=1.0) az.setup(app, tracer, skip_routes=[skip_route]) return app
async def client(aiohttp_client, tracer): app = web.Application() app.router.add_get("/simple", handler) app.router.add_get("/error", error_handler) trace_config = az.make_trace_config(tracer) session = aiohttp.ClientSession(trace_configs=[trace_config]) app["session"] = session az.setup(app, tracer) c = await aiohttp_client(app) yield c await session.close()
async def test_middleware_with_not_skip_route(tracer, fake_transport): async def handler(request): return web.Response(body=b"data") app = web.Application() skip_route = app.router.add_get("/", handler) az.setup(app, tracer) match_info = Mock() match_info.route = skip_route req = make_mocked_request("GET", "/", headers={"token": "x"}, app=app) req._match_info = match_info middleware = middleware_maker(skip_routes=[skip_route]) await middleware(req, handler) assert len(fake_transport.records) == 0
async def make_app(): app = web.Application() app.router.add_get("/api/v1/data", handler) zipkin_address = "http://127.0.0.1:9411/api/v2/spans" endpoint = az.create_endpoint("service_b", ipv4=host, port=port) tracer = await az.create(zipkin_address, endpoint, sample_rate=1.0) az.setup(app, tracer) trace_config = az.make_trace_config(tracer) session = aiohttp.ClientSession(trace_configs=[trace_config]) app["session"] = session async def close_session(app): await app["session"].close() app.on_cleanup.append(close_session) return app
def middleware(self, app: Application, skip_routes: List[AbstractRoute]) -> Application: if not self._tracer: log.warning("Failed to setup aiojaeger. Call setup method before") return app return aj.setup(app, self._tracer, skip_routes=skip_routes)