From cb9597b3bfabbd779bc1bc9172bc060df8738174 Mon Sep 17 00:00:00 2001 From: stammw Date: Wed, 5 Feb 2020 21:18:10 +0100 Subject: [PATCH] H3: test request body reception --- quinn-h3/src/tests/mod.rs | 73 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 72 insertions(+), 1 deletion(-) diff --git a/quinn-h3/src/tests/mod.rs b/quinn-h3/src/tests/mod.rs index 1f197dcf5..776db0977 100644 --- a/quinn-h3/src/tests/mod.rs +++ b/quinn-h3/src/tests/mod.rs @@ -1,6 +1,6 @@ use std::time::Duration; -use futures::StreamExt; +use futures::{AsyncReadExt, AsyncWriteExt, StreamExt}; use http::{Request, Response, StatusCode}; use tokio::time::timeout; @@ -77,3 +77,74 @@ async fn incoming_request_stream_closed_on_client_drop() { .expect("server panic") .unwrap(); } + +async fn serve_one_request_client_body(mut incoming: IncomingConnection) -> String { + let mut incoming_req = incoming + .next() + .await + .expect("connecting") + .await + .expect("accept"); + let recv_req = incoming_req.next().await.expect("wait request"); + let (_, mut body_reader, sender) = recv_req.await.expect("recv_req"); + + let mut body = String::new(); + body_reader + .read_to_string(&mut body) + .await + .expect("server read body"); + sender + .send_response(Response::builder().status(StatusCode::OK).body(()).unwrap()) + .await + .expect("send_response"); + body +} + +#[tokio::test(threaded_scheduler)] +async fn client_send_body() { + let helper = Helper::new(); + + let (_, incoming) = helper.make_server(); + let server_handle = tokio::spawn(async move { serve_one_request_client_body(incoming).await }); + + let conn = helper.make_connection().await; + let (resp, _) = conn + .send_request( + Request::post("https://localhost/") + .body("the body") + .expect("request"), + ) + .await + .expect("request"); + resp.await.expect("recv response"); + drop(conn); + + assert_eq!(server_handle.await.unwrap(), "the body"); +} + +#[tokio::test(threaded_scheduler)] +async fn client_send_stream_body() { + let helper = Helper::new(); + + let (_, incoming) = helper.make_server(); + let server_handle = tokio::spawn(async move { serve_one_request_client_body(incoming).await }); + + let conn = helper.make_connection().await; + let (resp, mut body_writer) = conn + .send_request( + Request::post("https://localhost/") + .body(()) + .expect("request"), + ) + .await + .expect("request"); + body_writer + .write_all(&b"the body"[..]) + .await + .expect("write body"); + body_writer.close().await.expect("body close"); + let _ = resp.await.unwrap(); + drop(conn); + + assert_eq!(server_handle.await.unwrap(), "the body"); +}