Test that we don't raise an exception if someone disconnects.
(stream_req, stream_resp, draw)
| 428 | |
| 429 | |
| 430 | def _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 |
no test coverage detected
searching dependent graphs…