From 2940740493ce55e8baee44a47fd759d9e3aa3187 Mon Sep 17 00:00:00 2001 From: Markus Westerlind Date: Wed, 10 Feb 2021 22:16:22 +0100 Subject: [PATCH] fix: Upgrade to http2 if the server reports that it supports it (#1166) The test is disabled as the test server does not support TLS currently but otherwise I'd expect it to pass (tested in another project). --- src/connect.rs | 16 ++++++++++------ tests/client.rs | 21 +++++++++++++++++++++ 2 files changed, 31 insertions(+), 6 deletions(-) diff --git a/src/connect.rs b/src/connect.rs index c58ae84..e9662a2 100644 --- a/src/connect.rs +++ b/src/connect.rs @@ -370,17 +370,21 @@ impl Connector { let mut http = hyper_rustls::HttpsConnector::from((http, tls.clone())); let io = http.call(dst).await?; - if let hyper_rustls::MaybeHttpsStream::Https(stream) = &io { + if let hyper_rustls::MaybeHttpsStream::Https(stream) = io { if !self.nodelay { let (io, _) = stream.get_ref(); io.set_nodelay(false)?; } + Ok(Conn { + inner: self.verbose.wrap(RustlsTlsConn { inner: stream }), + is_proxy, + }) + } else { + Ok(Conn { + inner: self.verbose.wrap(io), + is_proxy, + }) } - - Ok(Conn { - inner: self.verbose.wrap(io), - is_proxy, - }) } } } diff --git a/tests/client.rs b/tests/client.rs index 19e90d6..dc53a3a 100644 --- a/tests/client.rs +++ b/tests/client.rs @@ -200,6 +200,27 @@ fn use_preconfigured_rustls_default() { .expect("preconfigured rustls tls"); } +#[cfg(feature = "__rustls")] +#[tokio::test] +#[ignore = "Needs TLS support in the test server"] +async fn http2_upgrade() { + let server = server::http(move |_| async move { http::Response::default() }); + + let url = format!("https://localhost:{}", server.addr().port()); + let res = reqwest::Client::builder() + .danger_accept_invalid_certs(true) + .use_rustls_tls() + .build() + .expect("client builder") + .get(&url) + .send() + .await + .expect("request"); + + assert_eq!(res.status(), reqwest::StatusCode::OK); + assert_eq!(res.version(), reqwest::Version::HTTP_2); +} + #[cfg(feature = "default-tls")] #[tokio::test] async fn test_allowed_methods() {