Ejemplo n.º 1
0
async def test_request_tracing(loop):
    trace_config_ctx = mock.Mock()
    trace_request_ctx = {}
    on_request_start = mock.Mock(side_effect=asyncio.coroutine(mock.Mock()))
    on_request_redirect = mock.Mock(side_effect=asyncio.coroutine(mock.Mock()))
    on_request_end = mock.Mock(side_effect=asyncio.coroutine(mock.Mock()))

    trace_config = aiohttp.TraceConfig(trace_config_ctx_factory=mock.Mock(
        return_value=trace_config_ctx))
    trace_config.on_request_start.append(on_request_start)
    trace_config.on_request_end.append(on_request_end)
    trace_config.on_request_redirect.append(on_request_redirect)

    async with aiohttp.ClientSession(loop=loop,
                                     trace_configs=[trace_config]) as session:

        async with await session.get(
                'http://example.com',
                trace_request_ctx=trace_request_ctx) as resp:

            on_request_start.assert_called_once_with(
                session, trace_config_ctx,
                aiohttp.TraceRequestStartParams(hdrs.METH_GET,
                                                URL("http://example.com"),
                                                CIMultiDict()))

            on_request_end.assert_called_once_with(
                session, trace_config_ctx,
                aiohttp.TraceRequestEndParams(hdrs.METH_GET,
                                              URL("http://example.com"),
                                              CIMultiDict(), resp))
            assert not on_request_redirect.called
Ejemplo n.º 2
0
async def test_request_tracing(loop, aiohttp_client) -> None:
    async def handler(request):
        return web.json_response({'ok': True})

    app = web.Application()
    app.router.add_post('/', handler)

    trace_config_ctx = mock.Mock()
    trace_request_ctx = {}
    body = 'This is request body'
    gathered_req_body = BytesIO()
    gathered_res_body = BytesIO()
    on_request_start = mock.Mock(side_effect=asyncio.coroutine(mock.Mock()))
    on_request_redirect = mock.Mock(side_effect=asyncio.coroutine(mock.Mock()))
    on_request_end = mock.Mock(side_effect=asyncio.coroutine(mock.Mock()))

    async def on_request_chunk_sent(session, context, params):
        gathered_req_body.write(params.chunk)

    async def on_response_chunk_received(session, context, params):
        gathered_res_body.write(params.chunk)

    trace_config = aiohttp.TraceConfig(trace_config_ctx_factory=mock.Mock(
        return_value=trace_config_ctx))
    trace_config.on_request_start.append(on_request_start)
    trace_config.on_request_end.append(on_request_end)
    trace_config.on_request_chunk_sent.append(on_request_chunk_sent)
    trace_config.on_response_chunk_received.append(on_response_chunk_received)
    trace_config.on_request_redirect.append(on_request_redirect)

    session = await aiohttp_client(app, trace_configs=[trace_config])

    async with session.post('/',
                            data=body,
                            trace_request_ctx=trace_request_ctx) as resp:

        await resp.json()

        on_request_start.assert_called_once_with(
            session.session, trace_config_ctx,
            aiohttp.TraceRequestStartParams(hdrs.METH_POST,
                                            session.make_url('/'),
                                            CIMultiDict()))

        on_request_end.assert_called_once_with(
            session.session, trace_config_ctx,
            aiohttp.TraceRequestEndParams(hdrs.METH_POST,
                                          session.make_url('/'), CIMultiDict(),
                                          resp))
        assert not on_request_redirect.called
        assert gathered_req_body.getvalue() == body.encode('utf8')
        assert gathered_res_body.getvalue() == json.dumps({
            'ok': True
        }).encode('utf8')
Ejemplo n.º 3
0
 def test_url_path_span_name(self):
     for url, expected in (
         (
             yarl.URL("http://hostname.local:1234/some/path?query=params"),
             "/some/path",
         ),
         (yarl.URL("http://hostname.local:1234"), "/"),
     ):
         with self.subTest(url=url):
             params = aiohttp.TraceRequestStartParams("METHOD", url, {})
             actual = aiohttp_client.url_path_span_name(params)
             self.assertEqual(actual, expected)
             self.assertIsInstance(actual, str)
Ejemplo n.º 4
0
async def test_request_tracing(loop, aiohttp_client):
    async def handler(request):
        return web.Response()

    app = web.Application()
    app.router.add_get('/', handler)

    trace_config_ctx = mock.Mock()
    trace_request_ctx = {}
    on_request_start = mock.Mock(side_effect=asyncio.coroutine(mock.Mock()))
    on_request_redirect = mock.Mock(side_effect=asyncio.coroutine(mock.Mock()))
    on_request_end = mock.Mock(side_effect=asyncio.coroutine(mock.Mock()))

    trace_config = aiohttp.TraceConfig(
        trace_config_ctx_factory=mock.Mock(return_value=trace_config_ctx)
    )
    trace_config.on_request_start.append(on_request_start)
    trace_config.on_request_end.append(on_request_end)
    trace_config.on_request_redirect.append(on_request_redirect)

    session = await aiohttp_client(app, trace_configs=[trace_config])

    async with session.get('/', trace_request_ctx=trace_request_ctx) as resp:

        on_request_start.assert_called_once_with(
            session.session,
            trace_config_ctx,
            aiohttp.TraceRequestStartParams(
                hdrs.METH_GET,
                session.make_url('/'),
                CIMultiDict()
            )
        )

        on_request_end.assert_called_once_with(
            session.session,
            trace_config_ctx,
            aiohttp.TraceRequestEndParams(
                hdrs.METH_GET,
                session.make_url('/'),
                CIMultiDict(),
                resp
            )
        )
        assert not on_request_redirect.called
Ejemplo n.º 5
0
async def test_request_tracing(loop: Any, aiohttp_client: Any) -> None:
    async def handler(request):
        return web.json_response({"ok": True})

    app = web.Application()
    app.router.add_post("/", handler)

    trace_config_ctx = mock.Mock()
    trace_request_ctx = {}
    body = "This is request body"
    gathered_req_body = BytesIO()
    gathered_res_body = BytesIO()
    gathered_req_headers = CIMultiDict()
    on_request_start = mock.Mock(side_effect=make_mocked_coro(mock.Mock()))
    on_request_redirect = mock.Mock(side_effect=make_mocked_coro(mock.Mock()))
    on_request_end = mock.Mock(side_effect=make_mocked_coro(mock.Mock()))

    async def on_request_chunk_sent(session, context, params):
        gathered_req_body.write(params.chunk)

    async def on_response_chunk_received(session, context, params):
        gathered_res_body.write(params.chunk)

    async def on_request_headers_sent(session, context, params):
        gathered_req_headers.extend(**params.headers)

    trace_config = aiohttp.TraceConfig(
        trace_config_ctx_factory=mock.Mock(return_value=trace_config_ctx)
    )
    trace_config.on_request_start.append(on_request_start)
    trace_config.on_request_end.append(on_request_end)
    trace_config.on_request_chunk_sent.append(on_request_chunk_sent)
    trace_config.on_response_chunk_received.append(on_response_chunk_received)
    trace_config.on_request_redirect.append(on_request_redirect)
    trace_config.on_request_headers_sent.append(on_request_headers_sent)

    headers = CIMultiDict({"Custom-Header": "Custom value"})
    session = await aiohttp_client(app, trace_configs=[trace_config], headers=headers)

    async with session.post(
        "/", data=body, trace_request_ctx=trace_request_ctx
    ) as resp:

        await resp.json()

        on_request_start.assert_called_once_with(
            session.session,
            trace_config_ctx,
            aiohttp.TraceRequestStartParams(
                hdrs.METH_POST, session.make_url("/"), headers
            ),
        )

        on_request_end.assert_called_once_with(
            session.session,
            trace_config_ctx,
            aiohttp.TraceRequestEndParams(
                hdrs.METH_POST, session.make_url("/"), headers, resp
            ),
        )
        assert not on_request_redirect.called
        assert gathered_req_body.getvalue() == body.encode("utf8")
        assert gathered_res_body.getvalue() == json.dumps({"ok": True}).encode("utf8")
        assert gathered_req_headers["Custom-Header"] == "Custom value"