Exemplo n.º 1
0
async def test_tracer_scope_item(tracer: Tracer) -> None:
    async def spy_app(scope: Scope, receive: Receive, send: Send) -> None:
        assert scope["type"] == "http"
        await send({"tracer": scope["ddtrace_asgi.tracer"]})

    messages = []

    async def send(message: Message) -> None:
        messages.append(message)

    app = ddtrace_asgi.TraceMiddleware(spy_app, tracer=tracer)
    await app(scope=mock_http_scope, receive=mock_receive, send=send)

    assert messages == [{"tracer": tracer}]
Exemplo n.º 2
0
async def test_not_http_no_traces(tracer: Tracer) -> None:
    async def app(scope: Scope, receive: Receive, send: Send) -> None:
        pass

    app = ddtrace_asgi.TraceMiddleware(app)

    scope = {"type": "lifespan"}
    await app(scope, mock_receive, mock_send)
    traces = tracer.writer.pop_traces()
    assert len(traces) == 0

    scope = {"type": "websocket"}
    await app(scope, mock_receive, mock_send)
    traces = tracer.writer.pop_traces()
    assert len(traces) == 0
Exemplo n.º 3
0
async def test_invalid_asgi(tracer: Tracer) -> None:
    """Test that TraceMiddleware does not crash in case of ASGI protocol violation."""
    async def invalid(scope: Scope, receive: Receive, send: Send) -> None:
        for key in "type", "headers", "status":
            message = {
                "type": "http.response.start",
                "headers": [],
                "status": 200
            }
            message.pop(key)
            await send(message)

    app = ddtrace_asgi.TraceMiddleware(invalid, tracer=tracer)

    for key in "method", "path", "headers", "query_string":
        scope = dict(mock_http_scope)
        scope.pop(key)
        await app(scope, mock_receive, mock_send)

    await app(mock_http_scope, mock_receive, mock_send)
Exemplo n.º 4
0
def test_default_service() -> None:
    middleware = ddtrace_asgi.TraceMiddleware(app=mock_app)
    assert middleware.service == "asgi"
Exemplo n.º 5
0
def test_default_tracer() -> None:
    middleware = ddtrace_asgi.TraceMiddleware(app=mock_app)
    assert middleware.tracer is global_tracer
Exemplo n.º 6
0
def test_deprecated_string_tags(tags: str) -> None:
    app = create_app("raw")
    with pytest.deprecated_call():
        ddtrace_asgi.TraceMiddleware(app, tags=tags)