Files
h2/tests/h2-tests/tests/codec_write.rs
2019-08-16 18:47:47 -07:00

56 lines
1.6 KiB
Rust

#![feature(async_await)]
use futures::future::join;
use h2_support::prelude::*;
#[tokio::test]
async fn write_continuation_frames() {
// An invalid dependency ID results in a stream level error. The hpack
// payload should still be decoded.
let _ = env_logger::try_init();
let (io, mut srv) = mock::new();
let large = build_large_headers();
// Build the large request frame
let frame = large.iter().fold(
frames::headers(1).request("GET", "https://http2.akamai.com/"),
|frame, &(name, ref value)| frame.field(name, &value[..]),
);
let srv = async move {
let settings = srv.assert_client_handshake().await;
assert_default_settings!(settings);
srv.recv_frame(frame.eos()).await;
srv.send_frame(frames::headers(1).response(204).eos()).await;
};
let client = async move {
let (mut client, mut conn) = client::handshake(io).await.expect("handshake");
let mut request = Request::builder();
request.uri("https://http2.akamai.com/");
for &(name, ref value) in &large {
request.header(name, &value[..]);
}
let request = request.body(()).unwrap();
let req = async {
let res = client
.send_request(request, true)
.expect("send_request1")
.0
.await;
let response = res.unwrap();
assert_eq!(response.status(), StatusCode::NO_CONTENT);
};
conn.drive(req).await;
conn.await.unwrap();
};
join(srv, client).await;
}