MCPcopy
hub / github.com/mitmproxy/mitmproxy / _test_cancel

Function _test_cancel

test/mitmproxy/proxy/layers/http/test_http_fuzz.py:430–534  ·  view source on GitHub ↗

Test that we don't raise an exception if someone disconnects.

(stream_req, stream_resp, draw)

Source from the content-addressed store, hash-verified

428
429
430def _test_cancel(stream_req, stream_resp, draw):
431 """
432 Test that we don't raise an exception if someone disconnects.
433 """
434 tctx = _tctx()
435 playbook, cff = start_h2_client(tctx)
436 flow = Placeholder(HTTPFlow)
437 server = Placeholder(Server)
438
439 def maybe_stream(flow: HTTPFlow):
440 if stream_req:
441 flow.request.stream = True
442 if stream_resp and flow.response:
443 flow.response.stream = True
444
445 hook_req_headers = http.HttpRequestHeadersHook(flow)
446 hook_req = http.HttpRequestHook(flow)
447 hook_resp_headers = http.HttpResponseHeadersHook(flow)
448 hook_resp = http.HttpResponseHook(flow)
449 hook_error = http.HttpErrorHook(flow)
450 openconn = OpenConnection(server)
451 send_upstream = SendData(server, Placeholder(bytes))
452
453 data_req = DataReceived(
454 tctx.client, cff.build_headers_frame(example_request_headers).serialize()
455 )
456 data_reqbody = DataReceived(
457 tctx.client, cff.build_data_frame(b"foo", flags=["END_STREAM"]).serialize()
458 )
459 data_resp = DataReceived(
460 server, cff.build_headers_frame(example_response_headers).serialize()
461 )
462 data_respbody = DataReceived(
463 server, cff.build_data_frame(b"bar", flags=["END_STREAM"]).serialize()
464 )
465
466 client_disc = ConnectionClosed(tctx.client)
467 client_rst = DataReceived(tctx.client, cff.build_rst_stream_frame(1).serialize())
468 server_disc = ConnectionClosed(server)
469 server_rst = DataReceived(server, cff.build_rst_stream_frame(1).serialize())
470
471 evts: dict[str, tuple[Any, Any, Any]] = {}
472 # precondition, but-not-after-this
473 evts["data_req"] = data_req, None, client_disc
474 evts["data_reqbody"] = data_reqbody, data_req, client_disc
475 evts["reply_hook_req_headers"] = (
476 reply(to=hook_req_headers, side_effect=maybe_stream),
477 hook_req_headers,
478 None,
479 )
480 evts["reply_hook_req"] = reply(to=hook_req), hook_req, None
481 evts["reply_openconn"] = (
482 reply(None, to=openconn, side_effect=make_h2),
483 openconn,
484 None,
485 )
486 evts["data_resp"] = data_resp, send_upstream, server_disc
487 evts["data_respbody"] = data_respbody, data_resp, server_disc

Callers 2

test_cancel_examplesFunction · 0.85
test_fuzz_cancelFunction · 0.85

Calls 15

start_h2_clientFunction · 0.90
PlaceholderFunction · 0.90
OpenConnectionClass · 0.90
SendDataClass · 0.90
DataReceivedClass · 0.90
ConnectionClosedClass · 0.90
replyClass · 0.90
_tctxFunction · 0.85
eq_maybeFunction · 0.85
drawFunction · 0.85
build_headers_frameMethod · 0.80
build_data_frameMethod · 0.80

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…