diff --git a/examples/testing.rs b/examples/testing.rs index 7ad112f6..ca28d25e 100644 --- a/examples/testing.rs +++ b/examples/testing.rs @@ -36,6 +36,7 @@ mod tests { use super::*; use http::StatusCode; use serde_json::{json, Value}; + use std::net::{SocketAddr, TcpListener}; use tower::ServiceExt; // for `app.oneshot()` #[tokio::test] @@ -98,4 +99,34 @@ mod tests { let body = hyper::body::to_bytes(response.into_body()).await.unwrap(); assert!(body.is_empty()); } + + // You can also spawn a server and talk to it like any other HTTP server: + #[tokio::test] + async fn the_real_deal() { + let listener = TcpListener::bind("0.0.0.0:0".parse::().unwrap()).unwrap(); + let addr = listener.local_addr().unwrap(); + + tokio::spawn(async move { + hyper::Server::from_tcp(listener) + .unwrap() + .serve(app().into_make_service()) + .await + .unwrap(); + }); + + let client = hyper::Client::new(); + + let response = client + .request( + Request::builder() + .uri(format!("http://{}", addr)) + .body(Body::empty()) + .unwrap(), + ) + .await + .unwrap(); + + let body = hyper::body::to_bytes(response.into_body()).await.unwrap(); + assert_eq!(&body[..], b"Hello, World!"); + } }