mirror of https://github.com/fafhrd91/actix-web
add test case for h2c connector
This commit is contained in:
parent
1b7a79719e
commit
aa1526eed2
|
@ -21,16 +21,15 @@ use http::Method;
|
||||||
use socket2::{Domain, Protocol, Socket, Type};
|
use socket2::{Domain, Protocol, Socket, Type};
|
||||||
use tokio::sync::mpsc;
|
use tokio::sync::mpsc;
|
||||||
|
|
||||||
/// Start test server
|
/// Start test server.
|
||||||
///
|
///
|
||||||
/// `TestServer` is very simple test server that simplify process of writing
|
/// `TestServer` is very simple test server that simplify process of writing integration tests cases
|
||||||
/// integration tests cases for actix web applications.
|
/// for HTTP applications.
|
||||||
///
|
///
|
||||||
/// # Examples
|
/// # Examples
|
||||||
///
|
/// ```no_run
|
||||||
/// ```
|
|
||||||
/// use actix_http::HttpService;
|
/// use actix_http::HttpService;
|
||||||
/// use actix_http_test::TestServer;
|
/// use actix_http_test::test_server;
|
||||||
/// use actix_web::{web, App, HttpResponse, Error};
|
/// use actix_web::{web, App, HttpResponse, Error};
|
||||||
///
|
///
|
||||||
/// async fn my_handler() -> Result<HttpResponse, Error> {
|
/// async fn my_handler() -> Result<HttpResponse, Error> {
|
||||||
|
@ -39,10 +38,9 @@ use tokio::sync::mpsc;
|
||||||
///
|
///
|
||||||
/// #[actix_web::test]
|
/// #[actix_web::test]
|
||||||
/// async fn test_example() {
|
/// async fn test_example() {
|
||||||
/// let mut srv = TestServer::start(
|
/// let mut srv = TestServer::start(||
|
||||||
/// || HttpService::new(
|
/// HttpService::new(
|
||||||
/// App::new().service(
|
/// App::new().service(web::resource("/").to(my_handler))
|
||||||
/// web::resource("/").to(my_handler))
|
|
||||||
/// )
|
/// )
|
||||||
/// );
|
/// );
|
||||||
///
|
///
|
||||||
|
|
|
@ -67,9 +67,9 @@ impl Connector<()> {
|
||||||
> + Clone,
|
> + Clone,
|
||||||
> {
|
> {
|
||||||
Connector {
|
Connector {
|
||||||
ssl: Self::build_ssl(vec![b"h2".to_vec(), b"http/1.1".to_vec()]),
|
|
||||||
connector: new_connector(resolver::resolver()),
|
connector: new_connector(resolver::resolver()),
|
||||||
config: ConnectorConfig::default(),
|
config: ConnectorConfig::default(),
|
||||||
|
ssl: Self::build_ssl(vec![b"h2".to_vec(), b"http/1.1".to_vec()]),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -189,7 +189,7 @@ where
|
||||||
http::Version::HTTP_11 => vec![b"http/1.1".to_vec()],
|
http::Version::HTTP_11 => vec![b"http/1.1".to_vec()],
|
||||||
http::Version::HTTP_2 => vec![b"h2".to_vec(), b"http/1.1".to_vec()],
|
http::Version::HTTP_2 => vec![b"h2".to_vec(), b"http/1.1".to_vec()],
|
||||||
_ => {
|
_ => {
|
||||||
unimplemented!("actix-http:client: supported versions http/1.1, http/2")
|
unimplemented!("actix-http client only supports versions http/1.1 & http/2")
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
self.ssl = Connector::build_ssl(versions);
|
self.ssl = Connector::build_ssl(versions);
|
||||||
|
@ -816,3 +816,42 @@ mod resolver {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "dangerous-h2c")]
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use std::convert::Infallible;
|
||||||
|
|
||||||
|
use actix_http::{HttpService, Request, Response, Version};
|
||||||
|
use actix_http_test::test_server;
|
||||||
|
use actix_service::ServiceFactoryExt as _;
|
||||||
|
|
||||||
|
use super::*;
|
||||||
|
use crate::Client;
|
||||||
|
|
||||||
|
#[actix_rt::test]
|
||||||
|
async fn h2c_connector() {
|
||||||
|
let mut srv = test_server(|| {
|
||||||
|
HttpService::build()
|
||||||
|
.h2(|_req: Request| async { Ok::<_, Infallible>(Response::ok()) })
|
||||||
|
.tcp()
|
||||||
|
.map_err(|_| ())
|
||||||
|
})
|
||||||
|
.await;
|
||||||
|
|
||||||
|
let connector = Connector {
|
||||||
|
connector: new_connector(resolver::resolver()),
|
||||||
|
config: ConnectorConfig::default(),
|
||||||
|
ssl: SslConnector::None,
|
||||||
|
};
|
||||||
|
|
||||||
|
let client = Client::builder().connector(connector).finish();
|
||||||
|
|
||||||
|
let request = client.get(srv.surl("/")).send();
|
||||||
|
let response = request.await.unwrap();
|
||||||
|
assert!(response.status().is_success());
|
||||||
|
assert_eq!(response.version(), Version::HTTP_2);
|
||||||
|
|
||||||
|
srv.stop().await;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -115,10 +115,10 @@ impl ClientRequest {
|
||||||
&self.head.method
|
&self.head.method
|
||||||
}
|
}
|
||||||
|
|
||||||
#[doc(hidden)]
|
|
||||||
/// Set HTTP version of this request.
|
/// Set HTTP version of this request.
|
||||||
///
|
///
|
||||||
/// By default requests's HTTP version depends on network stream
|
/// By default requests's HTTP version depends on network stream
|
||||||
|
#[doc(hidden)]
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn version(mut self, version: Version) -> Self {
|
pub fn version(mut self, version: Version) -> Self {
|
||||||
self.head.version = version;
|
self.head.version = version;
|
||||||
|
|
|
@ -39,7 +39,7 @@ fn tls_config() -> SslAcceptor {
|
||||||
|
|
||||||
#[actix_rt::test]
|
#[actix_rt::test]
|
||||||
async fn test_connection_window_size() {
|
async fn test_connection_window_size() {
|
||||||
let srv = test_server(move || {
|
let srv = test_server(|| {
|
||||||
HttpService::build()
|
HttpService::build()
|
||||||
.h2(map_config(
|
.h2(map_config(
|
||||||
App::new().service(web::resource("/").route(web::to(HttpResponse::Ok))),
|
App::new().service(web::resource("/").route(web::to(HttpResponse::Ok))),
|
||||||
|
|
Loading…
Reference in New Issue