mirror of https://github.com/fafhrd91/actix-web
Merge branch 'master' into test-extentions
This commit is contained in:
commit
7ef89510c0
|
@ -1,7 +1,6 @@
|
|||
# Changes
|
||||
|
||||
|
||||
## [2.0.NEXT] - 2020-01-xx
|
||||
## [3.0.0-alpha.1] - 2020-03-11
|
||||
|
||||
### Added
|
||||
|
||||
|
@ -11,11 +10,13 @@
|
|||
### Changed
|
||||
|
||||
* Use `sha-1` crate instead of unmaintained `sha1` crate
|
||||
* Skip empty chunks when returning response from a `Stream` #1308
|
||||
* Skip empty chunks when returning response from a `Stream` [#1308]
|
||||
* Update the `time` dependency to 0.2.7
|
||||
* Update `actix-tls` dependency to 2.0.0-alpha.1
|
||||
* Update `rustls` dependency to 0.17
|
||||
|
||||
[#1308]: https://github.com/actix/actix-web/pull/1308
|
||||
|
||||
## [2.0.0] - 2019-12-25
|
||||
|
||||
### Changed
|
||||
|
|
11
Cargo.toml
11
Cargo.toml
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "actix-web"
|
||||
version = "2.0.0"
|
||||
version = "3.0.0-alpha.1"
|
||||
authors = ["Nikolay Kim <fafhrd91@gmail.com>"]
|
||||
description = "Actix web is a simple, pragmatic and extremely fast web framework for Rust."
|
||||
readme = "README.md"
|
||||
|
@ -30,7 +30,7 @@ members = [
|
|||
".",
|
||||
"awc",
|
||||
"actix-http",
|
||||
"actix-cors",
|
||||
# "actix-cors",
|
||||
"actix-files",
|
||||
"actix-framed",
|
||||
# "actix-session",
|
||||
|
@ -72,7 +72,7 @@ actix-tls = "2.0.0-alpha.1"
|
|||
|
||||
actix-web-codegen = "0.2.0"
|
||||
actix-http = "2.0.0-alpha.2"
|
||||
awc = { version = "1.0.1", default-features = false }
|
||||
awc = { version = "2.0.0-alpha.1", default-features = false }
|
||||
|
||||
bytes = "0.5.3"
|
||||
derive_more = "0.99.2"
|
||||
|
@ -95,7 +95,7 @@ rust-tls = { version = "0.17.0", package = "rustls", optional = true }
|
|||
[dev-dependencies]
|
||||
actix = "0.10.0-alpha.1"
|
||||
rand = "0.7"
|
||||
env_logger = "0.6"
|
||||
env_logger = "0.7"
|
||||
serde_derive = "1.0"
|
||||
brotli2 = "0.3.2"
|
||||
flate2 = "1.0.13"
|
||||
|
@ -111,9 +111,6 @@ actix-web = { path = "." }
|
|||
actix-http = { path = "actix-http" }
|
||||
actix-http-test = { path = "test-server" }
|
||||
actix-web-codegen = { path = "actix-web-codegen" }
|
||||
actix-cors = { path = "actix-cors" }
|
||||
actix-identity = { path = "actix-identity" }
|
||||
actix-session = { path = "actix-session" }
|
||||
actix-files = { path = "actix-files" }
|
||||
actix-multipart = { path = "actix-multipart" }
|
||||
awc = { path = "awc" }
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
# Cors Middleware for actix web framework [](https://travis-ci.org/actix/actix-web) [](https://codecov.io/gh/actix/actix-web) [](https://crates.io/crates/actix-cors) [](https://gitter.im/actix/actix?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
||||
|
||||
**This crate moved to https://github.com/actix/actix-extras.**
|
||||
|
||||
## Documentation & community resources
|
||||
|
||||
* [User Guide](https://actix.rs/docs/)
|
||||
|
|
|
@ -18,7 +18,7 @@ name = "actix_files"
|
|||
path = "src/lib.rs"
|
||||
|
||||
[dependencies]
|
||||
actix-web = { version = "2.0.0-rc", default-features = false }
|
||||
actix-web = { version = "3.0.0-alpha.1", default-features = false }
|
||||
actix-http = "2.0.0-alpha.2"
|
||||
actix-service = "1.0.1"
|
||||
bitflags = "1"
|
||||
|
@ -33,4 +33,4 @@ v_htmlescape = "0.4"
|
|||
|
||||
[dev-dependencies]
|
||||
actix-rt = "1.0.0"
|
||||
actix-web = { version = "2.0.0-rc", features=["openssl"] }
|
||||
actix-web = { version = "3.0.0-alpha.1", features=["openssl"] }
|
||||
|
|
|
@ -32,6 +32,6 @@ log = "0.4"
|
|||
|
||||
[dev-dependencies]
|
||||
actix-server = "1.0.0"
|
||||
actix-connect = { version = "2.0.0-alpha.1", features=["openssl"] }
|
||||
actix-connect = { version = "2.0.0-alpha.2", features=["openssl"] }
|
||||
actix-http-test = { version = "1.0.0", features=["openssl"] }
|
||||
actix-utils = "1.0.3"
|
||||
|
|
|
@ -47,7 +47,8 @@ async fn test_simple() {
|
|||
)
|
||||
.finish(|_| future::ok::<_, Error>(Response::NotFound()))
|
||||
.tcp()
|
||||
});
|
||||
})
|
||||
.await;
|
||||
|
||||
assert!(srv.ws_at("/test").await.is_err());
|
||||
|
||||
|
@ -108,7 +109,8 @@ async fn test_service() {
|
|||
.map_err(|_| ()),
|
||||
),
|
||||
)
|
||||
});
|
||||
})
|
||||
.await;
|
||||
|
||||
// non ws request
|
||||
let res = srv.get("/index.html").send().await.unwrap();
|
||||
|
|
|
@ -45,7 +45,7 @@ actors = ["actix"]
|
|||
[dependencies]
|
||||
actix-service = "1.0.5"
|
||||
actix-codec = "0.2.0"
|
||||
actix-connect = "2.0.0-alpha.1"
|
||||
actix-connect = "2.0.0-alpha.2"
|
||||
actix-utils = "1.0.6"
|
||||
actix-rt = "1.0.0"
|
||||
actix-threadpool = "0.3.1"
|
||||
|
@ -94,7 +94,7 @@ fail-ure = { version = "0.1.5", package="failure", optional = true }
|
|||
|
||||
[dev-dependencies]
|
||||
actix-server = "1.0.1"
|
||||
actix-connect = { version = "2.0.0-alpha.1", features=["openssl"] }
|
||||
actix-connect = { version = "2.0.0-alpha.2", features=["openssl"] }
|
||||
actix-http-test = { version = "1.0.0", features=["openssl"] }
|
||||
actix-tls = { version = "2.0.0-alpha.1", features=["openssl"] }
|
||||
criterion = "0.3"
|
||||
|
|
|
@ -33,7 +33,8 @@ async fn test_h1_v2() {
|
|||
HttpService::build()
|
||||
.finish(|_| future::ok::<_, ()>(Response::Ok().body(STR)))
|
||||
.tcp()
|
||||
});
|
||||
})
|
||||
.await;
|
||||
|
||||
let response = srv.get("/").send().await.unwrap();
|
||||
assert!(response.status().is_success());
|
||||
|
@ -61,7 +62,8 @@ async fn test_connection_close() {
|
|||
.finish(|_| ok::<_, ()>(Response::Ok().body(STR)))
|
||||
.tcp()
|
||||
.map(|_| ())
|
||||
});
|
||||
})
|
||||
.await;
|
||||
|
||||
let response = srv.get("/").force_close().send().await.unwrap();
|
||||
assert!(response.status().is_success());
|
||||
|
@ -80,7 +82,8 @@ async fn test_with_query_parameter() {
|
|||
})
|
||||
.tcp()
|
||||
.map(|_| ())
|
||||
});
|
||||
})
|
||||
.await;
|
||||
|
||||
let request = srv.request(http::Method::GET, srv.url("/?qp=5"));
|
||||
let response = request.send().await.unwrap();
|
||||
|
|
|
@ -67,7 +67,8 @@ async fn test_h2() -> io::Result<()> {
|
|||
.h2(|_| ok::<_, Error>(Response::Ok().finish()))
|
||||
.openssl(ssl_acceptor())
|
||||
.map_err(|_| ())
|
||||
});
|
||||
})
|
||||
.await;
|
||||
|
||||
let response = srv.sget("/").send().await.unwrap();
|
||||
assert!(response.status().is_success());
|
||||
|
@ -85,7 +86,8 @@ async fn test_h2_1() -> io::Result<()> {
|
|||
})
|
||||
.openssl(ssl_acceptor())
|
||||
.map_err(|_| ())
|
||||
});
|
||||
})
|
||||
.await;
|
||||
|
||||
let response = srv.sget("/").send().await.unwrap();
|
||||
assert!(response.status().is_success());
|
||||
|
@ -103,7 +105,8 @@ async fn test_h2_body() -> io::Result<()> {
|
|||
})
|
||||
.openssl(ssl_acceptor())
|
||||
.map_err(|_| ())
|
||||
});
|
||||
})
|
||||
.await;
|
||||
|
||||
let response = srv.sget("/").send_body(data.clone()).await.unwrap();
|
||||
assert!(response.status().is_success());
|
||||
|
@ -131,7 +134,8 @@ async fn test_h2_content_length() {
|
|||
})
|
||||
.openssl(ssl_acceptor())
|
||||
.map_err(|_| ())
|
||||
});
|
||||
})
|
||||
.await;
|
||||
|
||||
let header = HeaderName::from_static("content-length");
|
||||
let value = HeaderValue::from_static("0");
|
||||
|
@ -192,7 +196,7 @@ async fn test_h2_headers() {
|
|||
})
|
||||
.openssl(ssl_acceptor())
|
||||
.map_err(|_| ())
|
||||
});
|
||||
}).await;
|
||||
|
||||
let response = srv.sget("/").send().await.unwrap();
|
||||
assert!(response.status().is_success());
|
||||
|
@ -231,7 +235,8 @@ async fn test_h2_body2() {
|
|||
.h2(|_| ok::<_, ()>(Response::Ok().body(STR)))
|
||||
.openssl(ssl_acceptor())
|
||||
.map_err(|_| ())
|
||||
});
|
||||
})
|
||||
.await;
|
||||
|
||||
let response = srv.sget("/").send().await.unwrap();
|
||||
assert!(response.status().is_success());
|
||||
|
@ -248,7 +253,8 @@ async fn test_h2_head_empty() {
|
|||
.finish(|_| ok::<_, ()>(Response::Ok().body(STR)))
|
||||
.openssl(ssl_acceptor())
|
||||
.map_err(|_| ())
|
||||
});
|
||||
})
|
||||
.await;
|
||||
|
||||
let response = srv.shead("/").send().await.unwrap();
|
||||
assert!(response.status().is_success());
|
||||
|
@ -273,7 +279,8 @@ async fn test_h2_head_binary() {
|
|||
})
|
||||
.openssl(ssl_acceptor())
|
||||
.map_err(|_| ())
|
||||
});
|
||||
})
|
||||
.await;
|
||||
|
||||
let response = srv.shead("/").send().await.unwrap();
|
||||
assert!(response.status().is_success());
|
||||
|
@ -295,7 +302,8 @@ async fn test_h2_head_binary2() {
|
|||
.h2(|_| ok::<_, ()>(Response::Ok().body(STR)))
|
||||
.openssl(ssl_acceptor())
|
||||
.map_err(|_| ())
|
||||
});
|
||||
})
|
||||
.await;
|
||||
|
||||
let response = srv.shead("/").send().await.unwrap();
|
||||
assert!(response.status().is_success());
|
||||
|
@ -318,7 +326,8 @@ async fn test_h2_body_length() {
|
|||
})
|
||||
.openssl(ssl_acceptor())
|
||||
.map_err(|_| ())
|
||||
});
|
||||
})
|
||||
.await;
|
||||
|
||||
let response = srv.sget("/").send().await.unwrap();
|
||||
assert!(response.status().is_success());
|
||||
|
@ -342,7 +351,8 @@ async fn test_h2_body_chunked_explicit() {
|
|||
})
|
||||
.openssl(ssl_acceptor())
|
||||
.map_err(|_| ())
|
||||
});
|
||||
})
|
||||
.await;
|
||||
|
||||
let response = srv.sget("/").send().await.unwrap();
|
||||
assert!(response.status().is_success());
|
||||
|
@ -369,7 +379,8 @@ async fn test_h2_response_http_error_handling() {
|
|||
}))
|
||||
.openssl(ssl_acceptor())
|
||||
.map_err(|_| ())
|
||||
});
|
||||
})
|
||||
.await;
|
||||
|
||||
let response = srv.sget("/").send().await.unwrap();
|
||||
assert_eq!(response.status(), StatusCode::INTERNAL_SERVER_ERROR);
|
||||
|
@ -386,7 +397,8 @@ async fn test_h2_service_error() {
|
|||
.h2(|_| err::<Response, Error>(ErrorBadRequest("error")))
|
||||
.openssl(ssl_acceptor())
|
||||
.map_err(|_| ())
|
||||
});
|
||||
})
|
||||
.await;
|
||||
|
||||
let response = srv.sget("/").send().await.unwrap();
|
||||
assert_eq!(response.status(), StatusCode::BAD_REQUEST);
|
||||
|
@ -407,7 +419,8 @@ async fn test_h2_on_connect() {
|
|||
})
|
||||
.openssl(ssl_acceptor())
|
||||
.map_err(|_| ())
|
||||
});
|
||||
})
|
||||
.await;
|
||||
|
||||
let response = srv.sget("/").send().await.unwrap();
|
||||
assert!(response.status().is_success());
|
||||
|
|
|
@ -45,7 +45,8 @@ async fn test_h1() -> io::Result<()> {
|
|||
HttpService::build()
|
||||
.h1(|_| future::ok::<_, Error>(Response::Ok().finish()))
|
||||
.rustls(ssl_acceptor())
|
||||
});
|
||||
})
|
||||
.await;
|
||||
|
||||
let response = srv.sget("/").send().await.unwrap();
|
||||
assert!(response.status().is_success());
|
||||
|
@ -58,7 +59,8 @@ async fn test_h2() -> io::Result<()> {
|
|||
HttpService::build()
|
||||
.h2(|_| future::ok::<_, Error>(Response::Ok().finish()))
|
||||
.rustls(ssl_acceptor())
|
||||
});
|
||||
})
|
||||
.await;
|
||||
|
||||
let response = srv.sget("/").send().await.unwrap();
|
||||
assert!(response.status().is_success());
|
||||
|
@ -75,7 +77,8 @@ async fn test_h1_1() -> io::Result<()> {
|
|||
future::ok::<_, Error>(Response::Ok().finish())
|
||||
})
|
||||
.rustls(ssl_acceptor())
|
||||
});
|
||||
})
|
||||
.await;
|
||||
|
||||
let response = srv.sget("/").send().await.unwrap();
|
||||
assert!(response.status().is_success());
|
||||
|
@ -92,7 +95,8 @@ async fn test_h2_1() -> io::Result<()> {
|
|||
future::ok::<_, Error>(Response::Ok().finish())
|
||||
})
|
||||
.rustls(ssl_acceptor())
|
||||
});
|
||||
})
|
||||
.await;
|
||||
|
||||
let response = srv.sget("/").send().await.unwrap();
|
||||
assert!(response.status().is_success());
|
||||
|
@ -109,7 +113,8 @@ async fn test_h2_body1() -> io::Result<()> {
|
|||
Ok::<_, Error>(Response::Ok().body(body))
|
||||
})
|
||||
.rustls(ssl_acceptor())
|
||||
});
|
||||
})
|
||||
.await;
|
||||
|
||||
let response = srv.sget("/").send_body(data.clone()).await.unwrap();
|
||||
assert!(response.status().is_success());
|
||||
|
@ -136,7 +141,8 @@ async fn test_h2_content_length() {
|
|||
future::ok::<_, ()>(Response::new(statuses[indx]))
|
||||
})
|
||||
.rustls(ssl_acceptor())
|
||||
});
|
||||
})
|
||||
.await;
|
||||
|
||||
let header = HeaderName::from_static("content-length");
|
||||
let value = HeaderValue::from_static("0");
|
||||
|
@ -195,7 +201,7 @@ async fn test_h2_headers() {
|
|||
future::ok::<_, ()>(config.body(data.clone()))
|
||||
})
|
||||
.rustls(ssl_acceptor())
|
||||
});
|
||||
}).await;
|
||||
|
||||
let response = srv.sget("/").send().await.unwrap();
|
||||
assert!(response.status().is_success());
|
||||
|
@ -233,7 +239,8 @@ async fn test_h2_body2() {
|
|||
HttpService::build()
|
||||
.h2(|_| future::ok::<_, ()>(Response::Ok().body(STR)))
|
||||
.rustls(ssl_acceptor())
|
||||
});
|
||||
})
|
||||
.await;
|
||||
|
||||
let response = srv.sget("/").send().await.unwrap();
|
||||
assert!(response.status().is_success());
|
||||
|
@ -249,7 +256,8 @@ async fn test_h2_head_empty() {
|
|||
HttpService::build()
|
||||
.finish(|_| ok::<_, ()>(Response::Ok().body(STR)))
|
||||
.rustls(ssl_acceptor())
|
||||
});
|
||||
})
|
||||
.await;
|
||||
|
||||
let response = srv.shead("/").send().await.unwrap();
|
||||
assert!(response.status().is_success());
|
||||
|
@ -276,7 +284,8 @@ async fn test_h2_head_binary() {
|
|||
ok::<_, ()>(Response::Ok().content_length(STR.len() as u64).body(STR))
|
||||
})
|
||||
.rustls(ssl_acceptor())
|
||||
});
|
||||
})
|
||||
.await;
|
||||
|
||||
let response = srv.shead("/").send().await.unwrap();
|
||||
assert!(response.status().is_success());
|
||||
|
@ -300,7 +309,8 @@ async fn test_h2_head_binary2() {
|
|||
HttpService::build()
|
||||
.h2(|_| ok::<_, ()>(Response::Ok().body(STR)))
|
||||
.rustls(ssl_acceptor())
|
||||
});
|
||||
})
|
||||
.await;
|
||||
|
||||
let response = srv.shead("/").send().await.unwrap();
|
||||
assert!(response.status().is_success());
|
||||
|
@ -325,7 +335,8 @@ async fn test_h2_body_length() {
|
|||
)
|
||||
})
|
||||
.rustls(ssl_acceptor())
|
||||
});
|
||||
})
|
||||
.await;
|
||||
|
||||
let response = srv.sget("/").send().await.unwrap();
|
||||
assert!(response.status().is_success());
|
||||
|
@ -348,7 +359,8 @@ async fn test_h2_body_chunked_explicit() {
|
|||
)
|
||||
})
|
||||
.rustls(ssl_acceptor())
|
||||
});
|
||||
})
|
||||
.await;
|
||||
|
||||
let response = srv.sget("/").send().await.unwrap();
|
||||
assert!(response.status().is_success());
|
||||
|
@ -376,7 +388,8 @@ async fn test_h2_response_http_error_handling() {
|
|||
}))
|
||||
}))
|
||||
.rustls(ssl_acceptor())
|
||||
});
|
||||
})
|
||||
.await;
|
||||
|
||||
let response = srv.sget("/").send().await.unwrap();
|
||||
assert_eq!(response.status(), http::StatusCode::INTERNAL_SERVER_ERROR);
|
||||
|
@ -392,7 +405,8 @@ async fn test_h2_service_error() {
|
|||
HttpService::build()
|
||||
.h2(|_| err::<Response, Error>(error::ErrorBadRequest("error")))
|
||||
.rustls(ssl_acceptor())
|
||||
});
|
||||
})
|
||||
.await;
|
||||
|
||||
let response = srv.sget("/").send().await.unwrap();
|
||||
assert_eq!(response.status(), http::StatusCode::BAD_REQUEST);
|
||||
|
@ -408,7 +422,8 @@ async fn test_h1_service_error() {
|
|||
HttpService::build()
|
||||
.h1(|_| err::<Response, Error>(error::ErrorBadRequest("error")))
|
||||
.rustls(ssl_acceptor())
|
||||
});
|
||||
})
|
||||
.await;
|
||||
|
||||
let response = srv.sget("/").send().await.unwrap();
|
||||
assert_eq!(response.status(), http::StatusCode::BAD_REQUEST);
|
||||
|
|
|
@ -27,7 +27,8 @@ async fn test_h1() {
|
|||
future::ok::<_, ()>(Response::Ok().finish())
|
||||
})
|
||||
.tcp()
|
||||
});
|
||||
})
|
||||
.await;
|
||||
|
||||
let response = srv.get("/").send().await.unwrap();
|
||||
assert!(response.status().is_success());
|
||||
|
@ -46,7 +47,8 @@ async fn test_h1_2() {
|
|||
future::ok::<_, ()>(Response::Ok().finish())
|
||||
})
|
||||
.tcp()
|
||||
});
|
||||
})
|
||||
.await;
|
||||
|
||||
let response = srv.get("/").send().await.unwrap();
|
||||
assert!(response.status().is_success());
|
||||
|
@ -65,7 +67,8 @@ async fn test_expect_continue() {
|
|||
}))
|
||||
.finish(|_| future::ok::<_, ()>(Response::Ok().finish()))
|
||||
.tcp()
|
||||
});
|
||||
})
|
||||
.await;
|
||||
|
||||
let mut stream = net::TcpStream::connect(srv.addr()).unwrap();
|
||||
let _ = stream.write_all(b"GET /test HTTP/1.1\r\nexpect: 100-continue\r\n\r\n");
|
||||
|
@ -95,7 +98,8 @@ async fn test_expect_continue_h1() {
|
|||
}))
|
||||
.h1(fn_service(|_| future::ok::<_, ()>(Response::Ok().finish())))
|
||||
.tcp()
|
||||
});
|
||||
})
|
||||
.await;
|
||||
|
||||
let mut stream = net::TcpStream::connect(srv.addr()).unwrap();
|
||||
let _ = stream.write_all(b"GET /test HTTP/1.1\r\nexpect: 100-continue\r\n\r\n");
|
||||
|
@ -130,7 +134,8 @@ async fn test_chunked_payload() {
|
|||
})
|
||||
}))
|
||||
.tcp()
|
||||
});
|
||||
})
|
||||
.await;
|
||||
|
||||
let returned_size = {
|
||||
let mut stream = net::TcpStream::connect(srv.addr()).unwrap();
|
||||
|
@ -172,7 +177,8 @@ async fn test_slow_request() {
|
|||
.client_timeout(100)
|
||||
.finish(|_| future::ok::<_, ()>(Response::Ok().finish()))
|
||||
.tcp()
|
||||
});
|
||||
})
|
||||
.await;
|
||||
|
||||
let mut stream = net::TcpStream::connect(srv.addr()).unwrap();
|
||||
let _ = stream.write_all(b"GET /test/tests/test HTTP/1.1\r\n");
|
||||
|
@ -187,7 +193,8 @@ async fn test_http1_malformed_request() {
|
|||
HttpService::build()
|
||||
.h1(|_| future::ok::<_, ()>(Response::Ok().finish()))
|
||||
.tcp()
|
||||
});
|
||||
})
|
||||
.await;
|
||||
|
||||
let mut stream = net::TcpStream::connect(srv.addr()).unwrap();
|
||||
let _ = stream.write_all(b"GET /test/tests/test HTTP1.1\r\n");
|
||||
|
@ -202,7 +209,8 @@ async fn test_http1_keepalive() {
|
|||
HttpService::build()
|
||||
.h1(|_| future::ok::<_, ()>(Response::Ok().finish()))
|
||||
.tcp()
|
||||
});
|
||||
})
|
||||
.await;
|
||||
|
||||
let mut stream = net::TcpStream::connect(srv.addr()).unwrap();
|
||||
let _ = stream.write_all(b"GET /test/tests/test HTTP/1.1\r\n\r\n");
|
||||
|
@ -223,7 +231,8 @@ async fn test_http1_keepalive_timeout() {
|
|||
.keep_alive(1)
|
||||
.h1(|_| future::ok::<_, ()>(Response::Ok().finish()))
|
||||
.tcp()
|
||||
});
|
||||
})
|
||||
.await;
|
||||
|
||||
let mut stream = net::TcpStream::connect(srv.addr()).unwrap();
|
||||
let _ = stream.write_all(b"GET /test/tests/test HTTP/1.1\r\n\r\n");
|
||||
|
@ -243,7 +252,8 @@ async fn test_http1_keepalive_close() {
|
|||
HttpService::build()
|
||||
.h1(|_| future::ok::<_, ()>(Response::Ok().finish()))
|
||||
.tcp()
|
||||
});
|
||||
})
|
||||
.await;
|
||||
|
||||
let mut stream = net::TcpStream::connect(srv.addr()).unwrap();
|
||||
let _ =
|
||||
|
@ -263,7 +273,8 @@ async fn test_http10_keepalive_default_close() {
|
|||
HttpService::build()
|
||||
.h1(|_| future::ok::<_, ()>(Response::Ok().finish()))
|
||||
.tcp()
|
||||
});
|
||||
})
|
||||
.await;
|
||||
|
||||
let mut stream = net::TcpStream::connect(srv.addr()).unwrap();
|
||||
let _ = stream.write_all(b"GET /test/tests/test HTTP/1.0\r\n\r\n");
|
||||
|
@ -282,7 +293,8 @@ async fn test_http10_keepalive() {
|
|||
HttpService::build()
|
||||
.h1(|_| future::ok::<_, ()>(Response::Ok().finish()))
|
||||
.tcp()
|
||||
});
|
||||
})
|
||||
.await;
|
||||
|
||||
let mut stream = net::TcpStream::connect(srv.addr()).unwrap();
|
||||
let _ = stream
|
||||
|
@ -309,7 +321,8 @@ async fn test_http1_keepalive_disabled() {
|
|||
.keep_alive(KeepAlive::Disabled)
|
||||
.h1(|_| future::ok::<_, ()>(Response::Ok().finish()))
|
||||
.tcp()
|
||||
});
|
||||
})
|
||||
.await;
|
||||
|
||||
let mut stream = net::TcpStream::connect(srv.addr()).unwrap();
|
||||
let _ = stream.write_all(b"GET /test/tests/test HTTP/1.1\r\n\r\n");
|
||||
|
@ -344,7 +357,8 @@ async fn test_content_length() {
|
|||
future::ok::<_, ()>(Response::new(statuses[indx]))
|
||||
})
|
||||
.tcp()
|
||||
});
|
||||
})
|
||||
.await;
|
||||
|
||||
let header = HeaderName::from_static("content-length");
|
||||
let value = HeaderValue::from_static("0");
|
||||
|
@ -397,7 +411,7 @@ async fn test_h1_headers() {
|
|||
}
|
||||
future::ok::<_, ()>(builder.body(data.clone()))
|
||||
}).tcp()
|
||||
});
|
||||
}).await;
|
||||
|
||||
let response = srv.get("/").send().await.unwrap();
|
||||
assert!(response.status().is_success());
|
||||
|
@ -435,7 +449,8 @@ async fn test_h1_body() {
|
|||
HttpService::build()
|
||||
.h1(|_| ok::<_, ()>(Response::Ok().body(STR)))
|
||||
.tcp()
|
||||
});
|
||||
})
|
||||
.await;
|
||||
|
||||
let response = srv.get("/").send().await.unwrap();
|
||||
assert!(response.status().is_success());
|
||||
|
@ -451,7 +466,8 @@ async fn test_h1_head_empty() {
|
|||
HttpService::build()
|
||||
.h1(|_| ok::<_, ()>(Response::Ok().body(STR)))
|
||||
.tcp()
|
||||
});
|
||||
})
|
||||
.await;
|
||||
|
||||
let response = srv.head("/").send().await.unwrap();
|
||||
assert!(response.status().is_success());
|
||||
|
@ -477,7 +493,8 @@ async fn test_h1_head_binary() {
|
|||
ok::<_, ()>(Response::Ok().content_length(STR.len() as u64).body(STR))
|
||||
})
|
||||
.tcp()
|
||||
});
|
||||
})
|
||||
.await;
|
||||
|
||||
let response = srv.head("/").send().await.unwrap();
|
||||
assert!(response.status().is_success());
|
||||
|
@ -501,7 +518,8 @@ async fn test_h1_head_binary2() {
|
|||
HttpService::build()
|
||||
.h1(|_| ok::<_, ()>(Response::Ok().body(STR)))
|
||||
.tcp()
|
||||
});
|
||||
})
|
||||
.await;
|
||||
|
||||
let response = srv.head("/").send().await.unwrap();
|
||||
assert!(response.status().is_success());
|
||||
|
@ -526,7 +544,8 @@ async fn test_h1_body_length() {
|
|||
)
|
||||
})
|
||||
.tcp()
|
||||
});
|
||||
})
|
||||
.await;
|
||||
|
||||
let response = srv.get("/").send().await.unwrap();
|
||||
assert!(response.status().is_success());
|
||||
|
@ -549,7 +568,8 @@ async fn test_h1_body_chunked_explicit() {
|
|||
)
|
||||
})
|
||||
.tcp()
|
||||
});
|
||||
})
|
||||
.await;
|
||||
|
||||
let response = srv.get("/").send().await.unwrap();
|
||||
assert!(response.status().is_success());
|
||||
|
@ -579,7 +599,8 @@ async fn test_h1_body_chunked_implicit() {
|
|||
ok::<_, ()>(Response::Ok().streaming(body))
|
||||
})
|
||||
.tcp()
|
||||
});
|
||||
})
|
||||
.await;
|
||||
|
||||
let response = srv.get("/").send().await.unwrap();
|
||||
assert!(response.status().is_success());
|
||||
|
@ -611,7 +632,8 @@ async fn test_h1_response_http_error_handling() {
|
|||
)
|
||||
}))
|
||||
.tcp()
|
||||
});
|
||||
})
|
||||
.await;
|
||||
|
||||
let response = srv.get("/").send().await.unwrap();
|
||||
assert_eq!(response.status(), http::StatusCode::INTERNAL_SERVER_ERROR);
|
||||
|
@ -627,7 +649,8 @@ async fn test_h1_service_error() {
|
|||
HttpService::build()
|
||||
.h1(|_| future::err::<Response, Error>(error::ErrorBadRequest("error")))
|
||||
.tcp()
|
||||
});
|
||||
})
|
||||
.await;
|
||||
|
||||
let response = srv.get("/").send().await.unwrap();
|
||||
assert_eq!(response.status(), http::StatusCode::BAD_REQUEST);
|
||||
|
@ -647,7 +670,8 @@ async fn test_h1_on_connect() {
|
|||
future::ok::<_, ()>(Response::Ok().finish())
|
||||
})
|
||||
.tcp()
|
||||
});
|
||||
})
|
||||
.await;
|
||||
|
||||
let response = srv.get("/").send().await.unwrap();
|
||||
assert!(response.status().is_success());
|
||||
|
|
|
@ -93,7 +93,8 @@ async fn test_simple() {
|
|||
.finish(|_| future::ok::<_, ()>(Response::NotFound()))
|
||||
.tcp()
|
||||
}
|
||||
});
|
||||
})
|
||||
.await;
|
||||
|
||||
// client service
|
||||
let mut framed = srv.ws().await.unwrap();
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
# Identity service for actix web framework [](https://travis-ci.org/actix/actix-web) [](https://codecov.io/gh/actix/actix-web) [](https://crates.io/crates/actix-identity) [](https://gitter.im/actix/actix?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
||||
|
||||
**This crate moved to https://github.com/actix/actix-extras.**
|
||||
|
||||
## Documentation & community resources
|
||||
|
||||
* [User Guide](https://actix.rs/docs/)
|
||||
|
|
|
@ -16,7 +16,7 @@ name = "actix_multipart"
|
|||
path = "src/lib.rs"
|
||||
|
||||
[dependencies]
|
||||
actix-web = { version = "2.0.0", default-features = false }
|
||||
actix-web = { version = "3.0.0-alpha.1", default-features = false }
|
||||
actix-service = "1.0.1"
|
||||
actix-utils = "1.0.3"
|
||||
bytes = "0.5.3"
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
# Session for actix web framework [](https://travis-ci.org/actix/actix-web) [](https://codecov.io/gh/actix/actix-web) [](https://crates.io/crates/actix-session) [](https://gitter.im/actix/actix?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
||||
|
||||
**This crate moved to https://github.com/actix/actix-extras.**
|
||||
|
||||
## Documentation & community resources
|
||||
|
||||
* [User Guide](https://actix.rs/docs/)
|
||||
|
|
|
@ -17,7 +17,7 @@ path = "src/lib.rs"
|
|||
|
||||
[dependencies]
|
||||
actix = "0.10.0-alpha.1"
|
||||
actix-web = "2.0.0"
|
||||
actix-web = "3.0.0-alpha.1"
|
||||
actix-http = "2.0.0-alpha.2"
|
||||
actix-codec = "0.2.0"
|
||||
bytes = "0.5.2"
|
||||
|
|
|
@ -18,5 +18,5 @@ proc-macro2 = "^1"
|
|||
|
||||
[dev-dependencies]
|
||||
actix-rt = "1.0.0"
|
||||
actix-web = "2.0.0"
|
||||
actix-web = "3.0.0-alpha.1"
|
||||
futures = "0.3.1"
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
# Changes
|
||||
|
||||
## [NEXT]
|
||||
## [2.0.0-alpha.1] - 2020-03-11
|
||||
|
||||
* Update `actix-http` dependency to 2.0.0-alpha.2
|
||||
* Update `rustls` dependency to 0.17
|
||||
* ClientBuilder accepts initial_window_size and initial_connection_window_size HTTP2 configuration
|
||||
|
||||
* ClientBuilder allowing to set max_http_version to limit HTTP version to be used
|
||||
|
||||
## [1.0.1] - 2019-12-15
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "awc"
|
||||
version = "1.0.1"
|
||||
version = "2.0.0-alpha.1"
|
||||
authors = ["Nikolay Kim <fafhrd91@gmail.com>"]
|
||||
description = "Actix http client."
|
||||
readme = "README.md"
|
||||
|
@ -54,8 +54,8 @@ open-ssl = { version="0.10", package="openssl", optional = true }
|
|||
rust-tls = { version = "0.17.0", package="rustls", optional = true, features = ["dangerous_configuration"] }
|
||||
|
||||
[dev-dependencies]
|
||||
actix-connect = { version = "2.0.0-alpha.1", features=["openssl"] }
|
||||
actix-web = { version = "2.0.0", features=["openssl"] }
|
||||
actix-connect = { version = "2.0.0-alpha.2", features=["openssl"] }
|
||||
actix-web = { version = "3.0.0-alpha.1", features=["openssl"] }
|
||||
actix-http = { version = "2.0.0-alpha.2", features=["openssl"] }
|
||||
actix-http-test = { version = "1.0.0", features=["openssl"] }
|
||||
actix-utils = "1.0.3"
|
||||
|
@ -64,5 +64,5 @@ actix-tls = { version = "2.0.0-alpha.1", features=["openssl", "rustls"] }
|
|||
brotli2 = "0.3.2"
|
||||
flate2 = "1.0.13"
|
||||
futures = "0.3.1"
|
||||
env_logger = "0.6"
|
||||
env_logger = "0.7"
|
||||
webpki = "0.21"
|
||||
|
|
|
@ -5,10 +5,10 @@ use std::rc::Rc;
|
|||
use std::time::Duration;
|
||||
|
||||
use actix_http::client::{Connect as HttpConnect, ConnectError, Connection, Connector};
|
||||
use actix_http::http::{header, Error as HttpError, HeaderMap, HeaderName, self};
|
||||
use actix_http::http::{self, header, Error as HttpError, HeaderMap, HeaderName};
|
||||
use actix_service::Service;
|
||||
|
||||
use crate::connect::{ConnectorWrapper, Connect};
|
||||
use crate::connect::{Connect, ConnectorWrapper};
|
||||
use crate::{Client, ClientConfig};
|
||||
|
||||
/// An HTTP Client builder
|
||||
|
@ -182,7 +182,9 @@ impl ClientBuilder {
|
|||
if let Some(val) = self.stream_window_size {
|
||||
connector = connector.initial_window_size(val)
|
||||
};
|
||||
RefCell::new(Box::new(ConnectorWrapper(connector.finish())) as Box<dyn Connect>)
|
||||
RefCell::new(
|
||||
Box::new(ConnectorWrapper(connector.finish())) as Box<dyn Connect>
|
||||
)
|
||||
};
|
||||
let config = ClientConfig {
|
||||
headers: self.headers,
|
||||
|
|
|
@ -9,7 +9,6 @@ use bytes::Bytes;
|
|||
use derive_more::From;
|
||||
use futures_core::{Future, Stream};
|
||||
use serde::Serialize;
|
||||
use serde_json;
|
||||
|
||||
use actix_http::body::{Body, BodyStream};
|
||||
use actix_http::http::header::{self, IntoHeaderValue};
|
||||
|
|
|
@ -107,17 +107,15 @@ async fn test_form() {
|
|||
#[actix_rt::test]
|
||||
async fn test_timeout() {
|
||||
let srv = test::start(|| {
|
||||
App::new().service(web::resource("/").route(web::to(|| {
|
||||
async {
|
||||
App::new().service(web::resource("/").route(web::to(|| async {
|
||||
actix_rt::time::delay_for(Duration::from_millis(200)).await;
|
||||
Ok::<_, Error>(HttpResponse::Ok().body(STR))
|
||||
}
|
||||
})))
|
||||
});
|
||||
|
||||
let connector = awc::Connector::new()
|
||||
.connector(actix_connect::new_connector(
|
||||
actix_connect::start_default_resolver(),
|
||||
actix_connect::start_default_resolver().await.unwrap(),
|
||||
))
|
||||
.timeout(Duration::from_secs(15))
|
||||
.finish();
|
||||
|
@ -137,11 +135,9 @@ async fn test_timeout() {
|
|||
#[actix_rt::test]
|
||||
async fn test_timeout_override() {
|
||||
let srv = test::start(|| {
|
||||
App::new().service(web::resource("/").route(web::to(|| {
|
||||
async {
|
||||
App::new().service(web::resource("/").route(web::to(|| async {
|
||||
actix_rt::time::delay_for(Duration::from_millis(200)).await;
|
||||
Ok::<_, Error>(HttpResponse::Ok().body(STR))
|
||||
}
|
||||
})))
|
||||
});
|
||||
|
||||
|
@ -177,7 +173,8 @@ async fn test_connection_reuse() {
|
|||
))
|
||||
.tcp(),
|
||||
)
|
||||
});
|
||||
})
|
||||
.await;
|
||||
|
||||
let client = awc::Client::default();
|
||||
|
||||
|
@ -214,7 +211,8 @@ async fn test_connection_force_close() {
|
|||
))
|
||||
.tcp(),
|
||||
)
|
||||
});
|
||||
})
|
||||
.await;
|
||||
|
||||
let client = awc::Client::default();
|
||||
|
||||
|
@ -253,7 +251,8 @@ async fn test_connection_server_close() {
|
|||
))
|
||||
.tcp(),
|
||||
)
|
||||
});
|
||||
})
|
||||
.await;
|
||||
|
||||
let client = awc::Client::default();
|
||||
|
||||
|
@ -291,7 +290,8 @@ async fn test_connection_wait_queue() {
|
|||
))
|
||||
.tcp(),
|
||||
)
|
||||
});
|
||||
})
|
||||
.await;
|
||||
|
||||
let client = awc::Client::build()
|
||||
.connector(awc::Connector::new().limit(1).finish())
|
||||
|
@ -339,7 +339,8 @@ async fn test_connection_wait_queue_force_close() {
|
|||
))
|
||||
.tcp(),
|
||||
)
|
||||
});
|
||||
})
|
||||
.await;
|
||||
|
||||
let client = awc::Client::build()
|
||||
.connector(awc::Connector::new().limit(1).finish())
|
||||
|
|
|
@ -32,14 +32,14 @@ async fn test_connection_window_size() {
|
|||
let srv = test_server(move || {
|
||||
HttpService::build()
|
||||
.h2(map_config(
|
||||
App::new().service(
|
||||
web::resource("/").route(web::to(|| HttpResponse::Ok())),
|
||||
),
|
||||
App::new()
|
||||
.service(web::resource("/").route(web::to(|| HttpResponse::Ok()))),
|
||||
|_| AppConfig::default(),
|
||||
))
|
||||
.openssl(ssl_acceptor())
|
||||
.map_err(|_| ())
|
||||
});
|
||||
})
|
||||
.await;
|
||||
|
||||
// disable ssl verification
|
||||
let mut builder = SslConnector::builder(SslMethod::tls()).unwrap();
|
||||
|
|
|
@ -72,7 +72,8 @@ async fn _test_connection_reuse_h2() {
|
|||
.openssl(ssl_acceptor())
|
||||
.map_err(|_| ()),
|
||||
)
|
||||
});
|
||||
})
|
||||
.await;
|
||||
|
||||
// disable ssl verification
|
||||
let mut config = ClientConfig::new();
|
||||
|
|
|
@ -53,7 +53,8 @@ async fn test_connection_reuse_h2() {
|
|||
.openssl(ssl_acceptor())
|
||||
.map_err(|_| ()),
|
||||
)
|
||||
});
|
||||
})
|
||||
.await;
|
||||
|
||||
// disable ssl verification
|
||||
let mut builder = SslConnector::builder(SslMethod::tls()).unwrap();
|
||||
|
|
|
@ -38,7 +38,8 @@ async fn test_simple() {
|
|||
})
|
||||
.finish(|_| ok::<_, Error>(Response::NotFound()))
|
||||
.tcp()
|
||||
});
|
||||
})
|
||||
.await;
|
||||
|
||||
// client service
|
||||
let mut framed = srv.ws().await.unwrap();
|
||||
|
|
|
@ -11,7 +11,6 @@ use futures::future::{err, ok, FutureExt, LocalBoxFuture, Ready};
|
|||
use futures::StreamExt;
|
||||
use serde::de::DeserializeOwned;
|
||||
use serde::Serialize;
|
||||
use serde_json;
|
||||
|
||||
use actix_http::http::{header::CONTENT_LENGTH, StatusCode};
|
||||
use actix_http::{HttpMessage, Payload, Response};
|
||||
|
|
|
@ -6,7 +6,6 @@ use std::{fmt, ops};
|
|||
use actix_http::error::Error;
|
||||
use futures::future::{err, ok, Ready};
|
||||
use serde::de;
|
||||
use serde_urlencoded;
|
||||
|
||||
use crate::dev::Payload;
|
||||
use crate::error::QueryPayloadError;
|
||||
|
|
|
@ -3,7 +3,8 @@
|
|||
## [Unreleased] - 2020-xx-xx
|
||||
|
||||
* Update the `time` dependency to 0.2.7
|
||||
* Update `actix-connect` dependency to 2.0.0-alpha.1
|
||||
* Update `actix-connect` dependency to 2.0.0-alpha.2
|
||||
* Make `test_server` `async` fn.
|
||||
|
||||
## [1.0.0] - 2019-12-13
|
||||
|
||||
|
|
|
@ -32,12 +32,12 @@ openssl = ["open-ssl", "awc/openssl"]
|
|||
[dependencies]
|
||||
actix-service = "1.0.1"
|
||||
actix-codec = "0.2.0"
|
||||
actix-connect = "2.0.0-alpha.1"
|
||||
actix-connect = "2.0.0-alpha.2"
|
||||
actix-utils = "1.0.3"
|
||||
actix-rt = "1.0.0"
|
||||
actix-server = "1.0.0"
|
||||
actix-testing = "1.0.0"
|
||||
awc = "1.0.1"
|
||||
awc = "2.0.0-alpha.1"
|
||||
|
||||
base64 = "0.11"
|
||||
bytes = "0.5.3"
|
||||
|
@ -55,5 +55,5 @@ time = { version = "0.2.7", default-features = false, features = ["std"] }
|
|||
open-ssl = { version="0.10", package="openssl", optional = true }
|
||||
|
||||
[dev-dependencies]
|
||||
actix-web = "2.0.0"
|
||||
actix-web = "3.0.0-alpha.1"
|
||||
actix-http = "2.0.0-alpha.2"
|
||||
|
|
|
@ -43,7 +43,7 @@ pub use actix_testing::*;
|
|||
/// assert!(response.status().is_success());
|
||||
/// }
|
||||
/// ```
|
||||
pub fn test_server<F: ServiceFactory<TcpStream>>(factory: F) -> TestServer {
|
||||
pub async fn test_server<F: ServiceFactory<TcpStream>>(factory: F) -> TestServer {
|
||||
let (tx, rx) = mpsc::channel();
|
||||
|
||||
// run server in separate thread
|
||||
|
@ -92,7 +92,7 @@ pub fn test_server<F: ServiceFactory<TcpStream>>(factory: F) -> TestServer {
|
|||
|
||||
Client::build().connector(connector).finish()
|
||||
};
|
||||
actix_connect::start_default_resolver();
|
||||
actix_connect::start_default_resolver().await.unwrap();
|
||||
|
||||
TestServer {
|
||||
addr,
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
// Regression test for #/1321
|
||||
|
||||
/*
|
||||
use futures::task::{noop_waker, Context};
|
||||
use futures::stream::once;
|
||||
use actix_http::body::{MessageBody, BodyStream};
|
||||
use bytes::Bytes;
|
||||
|
||||
/*
|
||||
Disable weird poll until actix-web is based on actix-http 2.0.0
|
||||
|
||||
#[test]
|
||||
|
|
Loading…
Reference in New Issue