From 2cbf54d969c74bc9bdd755c1a74297136a23f5aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?D=C3=A1niel=20Buga?= Date: Sat, 21 Oct 2023 21:17:52 +0200 Subject: [PATCH] Add test that uses fill_buf to read response --- tests/client.rs | 51 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/tests/client.rs b/tests/client.rs index 37964b1..77cf375 100644 --- a/tests/client.rs +++ b/tests/client.rs @@ -1,6 +1,7 @@ #![feature(async_fn_in_trait)] #![allow(incomplete_features)] use embedded_io_adapters::tokio_1::FromTokio; +use embedded_io_async::BufRead; use embedded_nal_async::{AddrType, IpAddr, Ipv4Addr}; use hyper::server::conn::Http; use hyper::service::{make_service_fn, service_fn}; @@ -106,6 +107,56 @@ async fn test_resource_notls() { t.await.unwrap(); } +#[tokio::test] +async fn test_resource_notls_bufread() { + setup(); + let addr = ([127, 0, 0, 1], 0).into(); + + let service = make_service_fn(|_| async { Ok::<_, hyper::Error>(service_fn(echo)) }); + + let server = Server::bind(&addr).serve(service); + let addr = server.local_addr(); + + let (tx, rx) = oneshot::channel(); + let t = tokio::spawn(async move { + tokio::select! { + _ = server => {} + _ = rx => {} + } + }); + + let url = format!("http://127.0.0.1:{}", addr.port()); + let mut client = HttpClient::new(&TCP, &LOOPBACK_DNS); + let mut rx_buf = [0; 4096]; + let mut resource = client.resource(&url).await.unwrap(); + for _ in 0..2 { + let response = resource + .post("/") + .body(b"PING".as_slice()) + .content_type(ContentType::TextPlain) + .send(&mut rx_buf) + .await + .unwrap(); + let mut body_reader = response.body().reader(); + + let mut body = vec![]; + loop { + let buf = body_reader.fill_buf().await.unwrap(); + if buf.is_empty() { + break; + } + body.extend_from_slice(buf); + let buf_len = buf.len(); + body_reader.consume(buf_len); + } + + assert_eq!(body, b"PING"); + } + + tx.send(()).unwrap(); + t.await.unwrap(); +} + #[tokio::test] #[cfg(feature = "embedded-tls")] async fn test_resource_rustls() {