1 use super::*; 2 use http::Method; 3 use tower::ServiceExt; 4 5 mod for_handlers { 6 use super::*; 7 use http::HeaderMap; 8 9 #[crate::test] get_handles_head()10 async fn get_handles_head() { 11 let app = Router::new().route( 12 "/", 13 get(|| async { 14 let mut headers = HeaderMap::new(); 15 headers.insert("x-some-header", "foobar".parse().unwrap()); 16 (headers, "you shouldn't see this") 17 }), 18 ); 19 20 // don't use reqwest because it always strips bodies from HEAD responses 21 let res = app 22 .oneshot( 23 Request::builder() 24 .uri("/") 25 .method(Method::HEAD) 26 .body(Body::empty()) 27 .unwrap(), 28 ) 29 .await 30 .unwrap(); 31 32 assert_eq!(res.status(), StatusCode::OK); 33 assert_eq!(res.headers()["x-some-header"], "foobar"); 34 35 let body = hyper::body::to_bytes(res.into_body()).await.unwrap(); 36 assert_eq!(body.len(), 0); 37 } 38 } 39 40 mod for_services { 41 use super::*; 42 use crate::routing::get_service; 43 44 #[crate::test] get_handles_head()45 async fn get_handles_head() { 46 let app = Router::new().route( 47 "/", 48 get_service(service_fn(|_req: Request<Body>| async move { 49 Ok::<_, Infallible>( 50 ([("x-some-header", "foobar")], "you shouldn't see this").into_response(), 51 ) 52 })), 53 ); 54 55 // don't use reqwest because it always strips bodies from HEAD responses 56 let res = app 57 .oneshot( 58 Request::builder() 59 .uri("/") 60 .method(Method::HEAD) 61 .body(Body::empty()) 62 .unwrap(), 63 ) 64 .await 65 .unwrap(); 66 67 assert_eq!(res.status(), StatusCode::OK); 68 assert_eq!(res.headers()["x-some-header"], "foobar"); 69 70 let body = hyper::body::to_bytes(res.into_body()).await.unwrap(); 71 assert_eq!(body.len(), 0); 72 } 73 } 74