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
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')
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
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"