diff --git a/actix-http/Cargo.toml b/actix-http/Cargo.toml index 742938d5e..36f3cef47 100644 --- a/actix-http/Cargo.toml +++ b/actix-http/Cargo.toml @@ -109,17 +109,22 @@ webpki-roots = { version = "0.18", optional = true } actix-rt = "1.0.0-alpha.1" actix-server = { version = "0.8.0-alpha.1", features=["openssl"] } actix-connect = { version = "1.0.0-alpha.1", features=["openssl"] } -#actix-http-test = { version = "0.2.4", features=["ssl"] } +actix-http-test = { version = "0.3.0-alpha.1", features=["openssl"] } env_logger = "0.6" serde_derive = "1.0" open-ssl = { version="0.10", package="openssl" } [patch.crates-io] +awc = { path = "../awc" } +actix-http = { path = "." } +actix-http-test = { path = "../test-server" } + actix-codec = { path = "../../actix-net/actix-codec" } actix-connect = { path = "../../actix-net/actix-connect" } actix-rt = { path = "../../actix-net/actix-rt" } actix-server = { path = "../../actix-net/actix-server" } actix-server-config = { path = "../../actix-net/actix-server-config" } actix-service = { path = "../../actix-net/actix-service" } +actix-testing = { path = "../../actix-net/actix-testing" } actix-threadpool = { path = "../../actix-net/actix-threadpool" } actix-utils = { path = "../../actix-net/actix-utils" } diff --git a/actix-http/src/client/h1proto.rs b/actix-http/src/client/h1proto.rs index f8902a0ef..041a36856 100644 --- a/actix-http/src/client/h1proto.rs +++ b/actix-http/src/client/h1proto.rs @@ -76,7 +76,8 @@ where }; // read response and init read body - let (head, framed) = if let (Some(result), framed) = framed.into_future().await { + let res = framed.into_future().await; + let (head, framed) = if let (Some(result), framed) = res { let item = result.map_err(SendRequestError::from)?; (item, framed) } else { diff --git a/actix-http/src/h1/dispatcher.rs b/actix-http/src/h1/dispatcher.rs index 16e36447d..a06b997ec 100644 --- a/actix-http/src/h1/dispatcher.rs +++ b/actix-http/src/h1/dispatcher.rs @@ -331,12 +331,10 @@ where Poll::Ready(Err(err)) => return Err(DispatchError::Io(err)), } } - if written > 0 { - if written == self.write_buf.len() { - unsafe { self.write_buf.set_len(0) } - } else { - let _ = self.write_buf.split_to(written); - } + if written == self.write_buf.len() { + unsafe { self.write_buf.set_len(0) } + } else { + let _ = self.write_buf.split_to(written); } Ok(false) } diff --git a/actix-http/src/h2/dispatcher.rs b/actix-http/src/h2/dispatcher.rs index 2a44c83f9..9b5b7e83a 100644 --- a/actix-http/src/h2/dispatcher.rs +++ b/actix-http/src/h2/dispatcher.rs @@ -122,7 +122,7 @@ where match Pin::new(&mut this.connection).poll_accept(cx) { Poll::Ready(None) => return Poll::Ready(Ok(())), Poll::Ready(Some(Err(err))) => return Poll::Ready(Err(err.into())), - Poll::Ready(Some(Ok((req, res)))) => { + Poll::Ready(Some(Ok((req, _)))) => { // update keep-alive expire if this.ka_timer.is_some() { if let Some(expire) = this.config.keep_alive_expire() { diff --git a/actix-http/tests/test_server.rs b/actix-http/tests/test_server.rs index 51ee9f2d6..ef861b309 100644 --- a/actix-http/tests/test_server.rs +++ b/actix-http/tests/test_server.rs @@ -2,14 +2,14 @@ use std::io::{Read, Write}; use std::time::Duration; use std::{net, thread}; -use actix_http_test::TestServer; +use actix_http_test::{block_fn, TestServer}; use actix_server_config::ServerConfig; use actix_service::{factory_fn_cfg, pipeline, service_fn, ServiceFactory}; use bytes::Bytes; -use futures::future::{self, err, ok, ready, Future, FutureExt}; -use futures::stream::{once, Stream, StreamExt}; +use futures::future::{self, err, ok, ready, FutureExt}; +use futures::stream::{once, StreamExt}; use regex::Regex; -use tokio_timer::sleep; +use tokio_timer::delay_for; use actix_http::httpmessage::HttpMessage; use actix_http::{ @@ -18,7 +18,7 @@ use actix_http::{ #[test] fn test_h1() { - let mut srv = TestServer::new(|| { + let srv = TestServer::new(|| { HttpService::build() .keep_alive(KeepAlive::Disabled) .client_timeout(1000) @@ -29,13 +29,13 @@ fn test_h1() { }) }); - let response = srv.block_on(srv.get("/").send()).unwrap(); + let response = block_fn(|| srv.get("/").send()).unwrap(); assert!(response.status().is_success()); } #[test] fn test_h1_2() { - let mut srv = TestServer::new(|| { + let srv = TestServer::new(|| { HttpService::build() .keep_alive(KeepAlive::Disabled) .client_timeout(1000) @@ -48,7 +48,7 @@ fn test_h1_2() { .map(|_| ()) }); - let response = srv.block_on(srv.get("/").send()).unwrap(); + let response = block_fn(|| srv.get("/").send()).unwrap(); assert!(response.status().is_success()); } @@ -84,11 +84,11 @@ fn test_expect_continue_h1() { let srv = TestServer::new(|| { HttpService::build() .expect(service_fn(|req: Request| { - sleep(Duration::from_millis(20)).then(move |_| { + delay_for(Duration::from_millis(20)).then(move |_| { if req.head().uri.query() == Some("yes=") { - Ok(req) + ok(req) } else { - Err(error::ErrorPreconditionFailed("error")) + err(error::ErrorPreconditionFailed("error")) } }) })) @@ -114,7 +114,7 @@ fn test_chunked_payload() { let total_size: usize = chunk_sizes.iter().sum(); let srv = TestServer::new(|| { - HttpService::build().h1(|mut request: Request| { + HttpService::build().h1(service_fn(|mut request: Request| { request .take_payload() .map(|res| match res { @@ -122,8 +122,10 @@ fn test_chunked_payload() { Err(e) => panic!(format!("Error reading payload: {}", e)), }) .fold(0usize, |acc, chunk| ready(acc + chunk.len())) - .map(|req_size| ok(Response::Ok().body(format!("size={}", req_size)))) - }) + .map(|req_size| { + Ok::<_, Error>(Response::Ok().body(format!("size={}", req_size))) + }) + })) }); let returned_size = { @@ -310,7 +312,7 @@ fn test_content_length() { StatusCode, }; - let mut srv = TestServer::new(|| { + let srv = TestServer::new(|| { HttpService::build().h1(|req: Request| { let indx: usize = req.uri().path()[1..].parse().unwrap(); let statuses = [ @@ -330,24 +332,18 @@ fn test_content_length() { { for i in 0..4 { - let req = srv - .request(http::Method::GET, srv.url(&format!("/{}", i))) - .send(); - let response = srv.block_on(req).unwrap(); + let req = srv.request(http::Method::GET, srv.url(&format!("/{}", i))); + let response = block_fn(move || req.send()).unwrap(); assert_eq!(response.headers().get(&header), None); - let req = srv - .request(http::Method::HEAD, srv.url(&format!("/{}", i))) - .send(); - let response = srv.block_on(req).unwrap(); + let req = srv.request(http::Method::HEAD, srv.url(&format!("/{}", i))); + let response = block_fn(move || req.send()).unwrap(); assert_eq!(response.headers().get(&header), None); } for i in 4..6 { - let req = srv - .request(http::Method::GET, srv.url(&format!("/{}", i))) - .send(); - let response = srv.block_on(req).unwrap(); + let req = srv.request(http::Method::GET, srv.url(&format!("/{}", i))); + let response = block_fn(move || req.send()).unwrap(); assert_eq!(response.headers().get(&header), Some(&value)); } } @@ -384,7 +380,7 @@ fn test_h1_headers() { }) }); - let response = srv.block_on(srv.get("/").send()).unwrap(); + let response = block_fn(|| srv.get("/").send()).unwrap(); assert!(response.status().is_success()); // read response @@ -420,7 +416,7 @@ fn test_h1_body() { HttpService::build().h1(|_| ok::<_, ()>(Response::Ok().body(STR))) }); - let response = srv.block_on(srv.get("/").send()).unwrap(); + let response = block_fn(|| srv.get("/").send()).unwrap(); assert!(response.status().is_success()); // read response @@ -434,7 +430,7 @@ fn test_h1_head_empty() { HttpService::build().h1(|_| ok::<_, ()>(Response::Ok().body(STR))) }); - let response = srv.block_on(srv.head("/").send()).unwrap(); + let response = block_fn(|| srv.head("/").send()).unwrap(); assert!(response.status().is_success()); { @@ -458,7 +454,7 @@ fn test_h1_head_binary() { }) }); - let response = srv.block_on(srv.head("/").send()).unwrap(); + let response = block_fn(|| srv.head("/").send()).unwrap(); assert!(response.status().is_success()); { @@ -476,11 +472,11 @@ fn test_h1_head_binary() { #[test] fn test_h1_head_binary2() { - let mut srv = TestServer::new(|| { + let srv = TestServer::new(|| { HttpService::build().h1(|_| ok::<_, ()>(Response::Ok().body(STR))) }); - let response = srv.block_on(srv.head("/").send()).unwrap(); + let response = block_fn(|| srv.head("/").send()).unwrap(); assert!(response.status().is_success()); { @@ -503,7 +499,7 @@ fn test_h1_body_length() { }) }); - let response = srv.block_on(srv.get("/").send()).unwrap(); + let response = block_fn(|| srv.get("/").send()).unwrap(); assert!(response.status().is_success()); // read response @@ -524,7 +520,7 @@ fn test_h1_body_chunked_explicit() { }) }); - let response = srv.block_on(srv.get("/").send()).unwrap(); + let response = block_fn(|| srv.get("/").send()).unwrap(); assert!(response.status().is_success()); assert_eq!( response @@ -552,7 +548,7 @@ fn test_h1_body_chunked_implicit() { }) }); - let response = srv.block_on(srv.get("/").send()).unwrap(); + let response = block_fn(|| srv.get("/").send()).unwrap(); assert!(response.status().is_success()); assert_eq!( response @@ -584,7 +580,7 @@ fn test_h1_response_http_error_handling() { })) }); - let response = srv.block_on(srv.get("/").send()).unwrap(); + let response = block_fn(|| srv.get("/").send()).unwrap(); assert_eq!(response.status(), http::StatusCode::INTERNAL_SERVER_ERROR); // read response @@ -599,7 +595,7 @@ fn test_h1_service_error() { .h1(|_| future::err::(error::ErrorBadRequest("error"))) }); - let response = srv.block_on(srv.get("/").send()).unwrap(); + let response = block_fn(|| srv.get("/").send()).unwrap(); assert_eq!(response.status(), http::StatusCode::BAD_REQUEST); // read response @@ -609,7 +605,7 @@ fn test_h1_service_error() { #[test] fn test_h1_on_connect() { - let mut srv = TestServer::new(|| { + let srv = TestServer::new(|| { HttpService::build() .on_connect(|_| 10usize) .h1(|req: Request| { @@ -618,6 +614,6 @@ fn test_h1_on_connect() { }) }); - let response = srv.block_on(srv.get("/").send()).unwrap(); + let response = block_fn(|| srv.get("/").send()).unwrap(); assert!(response.status().is_success()); } diff --git a/awc/Cargo.toml b/awc/Cargo.toml index ea181237e..f8f9a7eb8 100644 --- a/awc/Cargo.toml +++ b/awc/Cargo.toml @@ -65,7 +65,7 @@ rust-tls = { version = "0.16.0", package="rustls", optional = true } actix-rt = "1.0.0-alpha.1" #actix-web = { version = "1.0.8", features=["ssl"] } actix-http = { version = "0.3.0-alpha.1", features=["openssl"] } -#actix-http-test = { version = "0.2.0", features=["ssl"] } +actix-http-test = { version = "0.3.0-alpha.1", features=["openssl"] } actix-utils = "0.5.0-alpha.1" actix-server = { version = "0.8.0-alpha.1", features=["openssl", "rustls"] } brotli2 = { version="0.3.2" } @@ -77,7 +77,9 @@ webpki = { version = "0.21" } rus-tls = { version = "0.16.0", package="rustls", features = ["dangerous_configuration"] } [patch.crates-io] +awc = { path = "." } actix-http = { path = "../actix-http" } +actix-http-test = { path = "../test-server" } actix-codec = { path = "../../actix-net/actix-codec" } actix-connect = { path = "../../actix-net/actix-connect" } diff --git a/test-server/Cargo.toml b/test-server/Cargo.toml index 35bf1a0ed..3333e0486 100644 --- a/test-server/Cargo.toml +++ b/test-server/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "actix-http-test" -version = "0.2.5" +version = "0.3.0-alpha.1" authors = ["Nikolay Kim "] description = "Actix http test server" readme = "README.md" diff --git a/test-server/src/lib.rs b/test-server/src/lib.rs index 17acfe291..4ba123aa1 100644 --- a/test-server/src/lib.rs +++ b/test-server/src/lib.rs @@ -109,7 +109,7 @@ impl TestServer { block_on(lazy(|_| { Ok::<_, ()>(actix_connect::start_default_resolver()) })) - .unwrap(); + .unwrap(); TestServerRuntime { addr,