Esempio n. 1
0
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
Esempio n. 2
0
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
Esempio n. 3
0
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
Esempio n. 4
0
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
Esempio n. 5
0
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
Esempio n. 6
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_c", ipv4=host, port=port)
    tracer = await az.create(zipkin_address, endpoint, sample_rate=1.0)
    az.setup(app, tracer)
    return app
Esempio n. 7
0
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
Esempio n. 8
0
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
Esempio n. 9
0
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)
Esempio n. 10
0
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
Esempio n. 11
0
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()
Esempio n. 12
0
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
Esempio n. 13
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
Esempio n. 14
0
 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)