in neqo-http3/src/connection_client.rs [2946:3020]
fn stop_sending_early_response() {
// Connect exchange headers and send a request. Also check if the correct header frame has
// been sent.
let (mut client, mut server, request_stream_id) = connect_and_send_request(false);
// Stop sending with early_response.
assert_eq!(
Ok(()),
server
.conn
.stream_stop_sending(request_stream_id, Error::HttpNoError.code())
);
// send response - 200 Content-Length: 3
// with content: 'abc'.
server_send_response_and_exchange_packet(
&mut client,
&mut server,
request_stream_id,
HTTP_RESPONSE_2,
true,
);
let mut stop_sending = false;
let mut response_headers = false;
let mut response_body = false;
while let Some(e) = client.next_event() {
match e {
Http3ClientEvent::StopSending { stream_id, error } => {
assert_eq!(stream_id, request_stream_id);
assert_eq!(error, Error::HttpNoError.code());
// assert that we cannot send any more request data.
assert_eq!(
Err(Error::InvalidStreamId),
client.send_data(request_stream_id, &[0_u8; 10])
);
stop_sending = true;
}
Http3ClientEvent::HeaderReady {
stream_id,
headers,
interim,
fin,
} => {
assert_eq!(stream_id, request_stream_id);
check_response_header_2(&headers);
assert!(!fin);
assert!(!interim);
response_headers = true;
}
Http3ClientEvent::DataReadable { stream_id } => {
assert_eq!(stream_id, request_stream_id);
let mut buf = [0_u8; 100];
let (amount, fin) = client.read_data(now(), stream_id, &mut buf).unwrap();
assert!(fin);
assert_eq!(amount, EXPECTED_RESPONSE_DATA_2_FRAME_1.len());
assert_eq!(&buf[..amount], EXPECTED_RESPONSE_DATA_2_FRAME_1);
response_body = true;
}
_ => {}
}
}
assert!(response_headers);
assert!(response_body);
assert!(stop_sending);
// after this stream will be removed from client. We will check this by trying to read
// from the stream and that should fail.
let mut buf = [0_u8; 100];
let res = client.read_data(now(), request_stream_id, &mut buf);
assert!(res.is_err());
assert_eq!(res.unwrap_err(), Error::InvalidStreamId);
client.close(now(), 0, "");
}