56 lines
1.6 KiB
Rust
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;
|
|
}
|