fix tests

This commit is contained in:
fakeshadow 2020-12-30 06:46:34 +08:00
parent e326c4e351
commit 44efff4e8a
27 changed files with 109 additions and 105 deletions

View File

@ -47,10 +47,10 @@ compress = ["actix-http/compress", "awc/compress"]
secure-cookies = ["actix-http/secure-cookies"] secure-cookies = ["actix-http/secure-cookies"]
# openssl # openssl
openssl = ["actix-tls/openssl", "awc/openssl", "open-ssl"] openssl = ["actix-tls/accept", "actix-tls/openssl", "awc/openssl", "open-ssl"]
# rustls # rustls
rustls = ["actix-tls/rustls", "awc/rustls", "rust-tls"] rustls = ["actix-tls/accept", "actix-tls/rustls", "awc/rustls", "rust-tls"]
[[example]] [[example]]
name = "basic" name = "basic"
@ -74,15 +74,14 @@ required-features = ["rustls"]
[dependencies] [dependencies]
actix-codec = "0.4.0-beta.1" actix-codec = "0.4.0-beta.1"
actix-service = "2.0.0-beta.1" actix-macros = "0.1.0"
actix-utils = "3.0.0-beta.1"
actix-router = "0.2.4" actix-router = "0.2.4"
actix-rt = "2.0.0-beta.1" actix-rt = "2.0.0-beta.1"
actix-server = "2.0.0-beta.1" actix-server = "2.0.0-beta.1"
#actix-testing = "1.0.0" actix-service = "2.0.0-beta.1"
actix-macros = "0.1.0" actix-utils = "3.0.0-beta.1"
actix-threadpool = "0.3.1" actix-threadpool = "0.3.1"
actix-tls = "3.0.0-beta.1" actix-tls = { version = "3.0.0-beta.1", default-features = false, optional = true }
actix-web-codegen = "0.4.0" actix-web-codegen = "0.4.0"
actix-http = "2.2.0" actix-http = "2.2.0"
@ -110,7 +109,7 @@ tinyvec = { version = "1", features = ["alloc"] }
[dev-dependencies] [dev-dependencies]
actix = "0.10.0" actix = "0.10.0"
actix-http = { version = "2.1.0", features = ["actors"] } actix-http = { version = "2.2.0", features = ["actors"] }
rand = "0.8" rand = "0.8"
env_logger = "0.8" env_logger = "0.8"
serde_derive = "1.0" serde_derive = "1.0"
@ -133,12 +132,12 @@ actix-files = { path = "actix-files" }
awc = { path = "awc" } awc = { path = "awc" }
# FIXME: remove these override # FIXME: remove these override
actix-tls = { git = "https://github.com/actix/actix-net.git", branch = "fix/actix-tls" } actix = { git = "https://github.com/fakeshadow/actix.git", branch = "tokio-0.3" }
actix-service = { path = "../actix-net/actix-service" } actix-tls = { git = "https://github.com/actix/actix-net.git", branch = "master" }
actix-server = { git = "https://github.com/actix/actix-net.git", branch = "master" }
#http = { git = "https://github.com/fakeshadow/http.git" } actix-service = { git = "https://github.com/actix/actix-net.git", branch = "master" }
trust-dns-proto = { git = "https://github.com/messense/trust-dns.git", branch = "tokio-1" } trust-dns-proto = { git = "https://github.com/bluejekyll/trust-dns.git", branch = "main" }
trust-dns-resolver = { git = "https://github.com/messense/trust-dns.git", branch = "tokio-1" } trust-dns-resolver = { git = "https://github.com/bluejekyll/trust-dns.git", branch = "main" }
[[bench]] [[bench]]
name = "server" name = "server"

View File

@ -18,7 +18,7 @@ path = "src/lib.rs"
[dependencies] [dependencies]
actix-web = { version = "3.0.0", default-features = false } actix-web = { version = "3.0.0", default-features = false }
actix-service = "1.0.6" actix-service = "2.0.0-beta.1"
bitflags = "1" bitflags = "1"
bytes = "1" bytes = "1"
futures-core = { version = "0.3.7", default-features = false } futures-core = { version = "0.3.7", default-features = false }
@ -31,5 +31,5 @@ percent-encoding = "2.1"
v_htmlescape = "0.12" v_htmlescape = "0.12"
[dev-dependencies] [dev-dependencies]
actix-rt = "1.0.0" actix-rt = "2.0.0-beta.1"
actix-web = "3.0.0" actix-web = "3.0.0"

View File

@ -1,6 +1,6 @@
use std::{cell::RefCell, fmt, io, path::PathBuf, rc::Rc}; use std::{cell::RefCell, fmt, io, path::PathBuf, rc::Rc};
use actix_service::{boxed, IntoServiceFactory, ServiceFactory}; use actix_service::{boxed, IntoServiceFactory, ServiceFactory, ServiceFactoryExt};
use actix_web::{ use actix_web::{
dev::{ dev::{
AppService, HttpServiceFactory, ResourceDef, ServiceRequest, ServiceResponse, AppService, HttpServiceFactory, ResourceDef, ServiceRequest, ServiceResponse,
@ -201,10 +201,10 @@ impl Files {
/// Sets default handler which is used when no matched file could be found. /// Sets default handler which is used when no matched file could be found.
pub fn default_handler<F, U>(mut self, f: F) -> Self pub fn default_handler<F, U>(mut self, f: F) -> Self
where where
F: IntoServiceFactory<U>, F: IntoServiceFactory<U, ServiceRequest>,
U: ServiceFactory< U: ServiceFactory<
ServiceRequest,
Config = (), Config = (),
Request = ServiceRequest,
Response = ServiceResponse, Response = ServiceResponse,
Error = Error, Error = Error,
> + 'static, > + 'static,
@ -241,8 +241,7 @@ impl HttpServiceFactory for Files {
} }
} }
impl ServiceFactory for Files { impl ServiceFactory<ServiceRequest> for Files {
type Request = ServiceRequest;
type Response = ServiceResponse; type Response = ServiceResponse;
type Error = Error; type Error = Error;
type Config = (); type Config = ();

View File

@ -57,8 +57,7 @@ impl fmt::Debug for FilesService {
} }
} }
impl Service for FilesService { impl Service<ServiceRequest> for FilesService {
type Request = ServiceRequest;
type Response = ServiceResponse; type Response = ServiceResponse;
type Error = Error; type Error = Error;
type Future = FilesServiceFuture; type Future = FilesServiceFuture;

View File

@ -31,11 +31,10 @@ openssl = ["open-ssl", "awc/openssl"]
[dependencies] [dependencies]
actix-service = "2.0.0-beta.1" actix-service = "2.0.0-beta.1"
actix-codec = "0.4.0-beta.1" actix-codec = "0.4.0-beta.1"
#actix-connect = "2.0.0" actix-tls = "3.0.0-beta.1"
actix-utils = "3.0.0-beta.1" actix-utils = "3.0.0-beta.1"
actix-rt = "2.0.0-beta.1" actix-rt = "2.0.0-beta.1"
actix-server = "2.0.0-beta.1" actix-server = "2.0.0-beta.1"
#actix-testing = "1.0.0"
awc = "2.0.0" awc = "2.0.0"
base64 = "0.13" base64 = "0.13"

View File

@ -16,8 +16,6 @@ use futures_core::stream::Stream;
use http::Method; use http::Method;
use socket2::{Domain, Protocol, Socket, Type}; use socket2::{Domain, Protocol, Socket, Type};
pub use actix_testing::*;
/// 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
@ -65,13 +63,16 @@ pub async fn test_server_with_addr<F: ServiceFactory<TcpStream>>(
let sys = System::new("actix-test-server"); let sys = System::new("actix-test-server");
let local_addr = tcp.local_addr().unwrap(); let local_addr = tcp.local_addr().unwrap();
Server::build() let srv = Server::build()
.listen("test", tcp, factory)? .listen("test", tcp, factory)?
.workers(1) .workers(1)
.disable_signals() .disable_signals();
.start();
sys.block_on(async {
srv.start();
tx.send((System::current(), local_addr)).unwrap(); tx.send((System::current(), local_addr)).unwrap();
});
sys.run() sys.run()
}); });
@ -105,7 +106,7 @@ pub async fn test_server_with_addr<F: ServiceFactory<TcpStream>>(
Client::builder().connector(connector).finish() Client::builder().connector(connector).finish()
}; };
actix_connect::start_default_resolver().await.unwrap(); actix_tls::connect::start_default_resolver().await.unwrap();
TestServer { TestServer {
addr, addr,

View File

@ -45,7 +45,7 @@ actix-codec = "0.4.0-beta.1"
actix-utils = "3.0.0-beta.1" actix-utils = "3.0.0-beta.1"
actix-rt = "2.0.0-beta.1" actix-rt = "2.0.0-beta.1"
actix-threadpool = "0.3.1" actix-threadpool = "0.3.1"
actix-tls = { version = "3.0.0-beta.1" } actix-tls = "3.0.0-beta.1"
actix = { version = "0.10.0", optional = true } actix = { version = "0.10.0", optional = true }
base64 = "0.13" base64 = "0.13"
@ -87,7 +87,7 @@ flate2 = { version = "1.0.13", optional = true }
[dev-dependencies] [dev-dependencies]
actix-server = "2.0.0-beta.1" actix-server = "2.0.0-beta.1"
actix-http-test = { version = "2.0.0", features = ["openssl"] } actix-http-test = { version = "2.0.0", features = ["openssl"] }
actix-tls = { version = "2.0.0", features = ["openssl"] } actix-tls = { version = "3.0.0-beta.1", features = ["openssl"] }
criterion = "0.3" criterion = "0.3"
env_logger = "0.7" env_logger = "0.7"
serde_derive = "1.0" serde_derive = "1.0"

View File

@ -978,7 +978,7 @@ where
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use std::{marker::PhantomData, str}; use std::str;
use actix_service::fn_service; use actix_service::fn_service;
use futures_util::future::{lazy, ready}; use futures_util::future::{lazy, ready};
@ -1040,7 +1040,7 @@ mod tests {
lazy(|cx| { lazy(|cx| {
let buf = TestBuffer::new("GET /test HTTP/1\r\n\r\n"); let buf = TestBuffer::new("GET /test HTTP/1\r\n\r\n");
let h1 = Dispatcher::<_, _, _, _, UpgradeHandler<TestBuffer>>::new( let h1 = Dispatcher::<_, _, _, _, UpgradeHandler>::new(
buf, buf,
ServiceConfig::default(), ServiceConfig::default(),
CloneableService::new(ok_service()), CloneableService::new(ok_service()),
@ -1081,7 +1081,7 @@ mod tests {
let cfg = ServiceConfig::new(KeepAlive::Disabled, 1, 1, false, None); let cfg = ServiceConfig::new(KeepAlive::Disabled, 1, 1, false, None);
let h1 = Dispatcher::<_, _, _, _, UpgradeHandler<TestBuffer>>::new( let h1 = Dispatcher::<_, _, _, _, UpgradeHandler>::new(
buf, buf,
cfg, cfg,
CloneableService::new(echo_path_service()), CloneableService::new(echo_path_service()),
@ -1136,7 +1136,7 @@ mod tests {
let cfg = ServiceConfig::new(KeepAlive::Disabled, 1, 1, false, None); let cfg = ServiceConfig::new(KeepAlive::Disabled, 1, 1, false, None);
let h1 = Dispatcher::<_, _, _, _, UpgradeHandler<TestBuffer>>::new( let h1 = Dispatcher::<_, _, _, _, UpgradeHandler>::new(
buf, buf,
cfg, cfg,
CloneableService::new(echo_path_service()), CloneableService::new(echo_path_service()),
@ -1186,7 +1186,7 @@ mod tests {
lazy(|cx| { lazy(|cx| {
let mut buf = TestSeqBuffer::empty(); let mut buf = TestSeqBuffer::empty();
let cfg = ServiceConfig::new(KeepAlive::Disabled, 0, 0, false, None); let cfg = ServiceConfig::new(KeepAlive::Disabled, 0, 0, false, None);
let h1 = Dispatcher::<_, _, _, _, UpgradeHandler<_>>::new( let h1 = Dispatcher::<_, _, _, _, UpgradeHandler>::new(
buf.clone(), buf.clone(),
cfg, cfg,
CloneableService::new(echo_payload_service()), CloneableService::new(echo_payload_service()),
@ -1258,7 +1258,7 @@ mod tests {
lazy(|cx| { lazy(|cx| {
let mut buf = TestSeqBuffer::empty(); let mut buf = TestSeqBuffer::empty();
let cfg = ServiceConfig::new(KeepAlive::Disabled, 0, 0, false, None); let cfg = ServiceConfig::new(KeepAlive::Disabled, 0, 0, false, None);
let h1 = Dispatcher::<_, _, _, _, UpgradeHandler<_>>::new( let h1 = Dispatcher::<_, _, _, _, UpgradeHandler>::new(
buf.clone(), buf.clone(),
cfg, cfg,
CloneableService::new(echo_path_service()), CloneableService::new(echo_path_service()),
@ -1318,12 +1318,12 @@ mod tests {
lazy(|cx| { lazy(|cx| {
let mut buf = TestSeqBuffer::empty(); let mut buf = TestSeqBuffer::empty();
let cfg = ServiceConfig::new(KeepAlive::Disabled, 0, 0, false, None); let cfg = ServiceConfig::new(KeepAlive::Disabled, 0, 0, false, None);
let h1 = Dispatcher::<_, _, _, _, UpgradeHandler<_>>::new( let h1 = Dispatcher::<_, _, _, _, UpgradeHandler>::new(
buf.clone(), buf.clone(),
cfg, cfg,
CloneableService::new(ok_service()), CloneableService::new(ok_service()),
CloneableService::new(ExpectHandler), CloneableService::new(ExpectHandler),
Some(CloneableService::new(UpgradeHandler(PhantomData))), Some(CloneableService::new(UpgradeHandler)),
None, None,
Extensions::new(), Extensions::new(),
None, None,

View File

@ -9,9 +9,9 @@ use crate::request::Request;
pub struct ExpectHandler; pub struct ExpectHandler;
impl ServiceFactory<Request> for ExpectHandler { impl ServiceFactory<Request> for ExpectHandler {
type Config = ();
type Response = Request; type Response = Request;
type Error = Error; type Error = Error;
type Config = ();
type Service = ExpectHandler; type Service = ExpectHandler;
type InitError = Error; type InitError = Error;
type Future = Ready<Result<Self::Service, Self::InitError>>; type Future = Ready<Result<Self::Service, Self::InitError>>;

View File

@ -23,6 +23,10 @@ impl<P> HttpMessage for Request<P> {
&self.head().headers &self.head().headers
} }
fn take_payload(&mut self) -> Payload<P> {
std::mem::replace(&mut self.payload, Payload::None)
}
/// Request extensions /// Request extensions
#[inline] #[inline]
fn extensions(&self) -> Ref<'_, Extensions> { fn extensions(&self) -> Ref<'_, Extensions> {
@ -34,10 +38,6 @@ impl<P> HttpMessage for Request<P> {
fn extensions_mut(&self) -> RefMut<'_, Extensions> { fn extensions_mut(&self) -> RefMut<'_, Extensions> {
self.head.extensions_mut() self.head.extensions_mut()
} }
fn take_payload(&mut self) -> Payload<P> {
std::mem::replace(&mut self.payload, Payload::None)
}
} }
impl From<Message<RequestHead>> for Request<PayloadStream> { impl From<Message<RequestHead>> for Request<PayloadStream> {

View File

@ -348,11 +348,11 @@ where
U::InitError: fmt::Debug, U::InitError: fmt::Debug,
<U::Service as Service<(Request, Framed<T, h1::Codec>)>>::Future: 'static, <U::Service as Service<(Request, Framed<T, h1::Codec>)>>::Future: 'static,
{ {
type Config = ();
type Response = (); type Response = ();
type Error = DispatchError; type Error = DispatchError;
type InitError = (); type Config = ();
type Service = HttpServiceHandler<T, S::Service, B, X::Service, U::Service>; type Service = HttpServiceHandler<T, S::Service, B, X::Service, U::Service>;
type InitError = ();
type Future = HttpServiceResponse<T, S, B, X, U>; type Future = HttpServiceResponse<T, S, B, X, U>;
fn new_service(&self, _: ()) -> Self::Future { fn new_service(&self, _: ()) -> Self::Future {

View File

@ -1,9 +1,8 @@
use actix_service::ServiceFactory;
use bytes::Bytes;
use futures_util::future::{self, ok};
use actix_http::{http, HttpService, Request, Response}; use actix_http::{http, HttpService, Request, Response};
use actix_http_test::test_server; use actix_http_test::test_server;
use actix_service::ServiceFactoryExt;
use bytes::Bytes;
use futures_util::future::{self, ok};
const STR: &str = "Hello World Hello World Hello World Hello World Hello World \ const STR: &str = "Hello World Hello World Hello World Hello World Hello World \
Hello World Hello World Hello World Hello World Hello World \ Hello World Hello World Hello World Hello World Hello World \

View File

@ -1,19 +1,17 @@
#![cfg(feature = "openssl")] #![cfg(feature = "openssl")]
use std::io; use std::io;
use actix_http_test::test_server;
use actix_service::{fn_service, ServiceFactory};
use bytes::{Bytes, BytesMut};
use futures_util::future::{err, ok, ready};
use futures_util::stream::{once, Stream, StreamExt};
use open_ssl::ssl::{AlpnError, SslAcceptor, SslFiletype, SslMethod};
use actix_http::error::{ErrorBadRequest, PayloadError}; use actix_http::error::{ErrorBadRequest, PayloadError};
use actix_http::http::header::{self, HeaderName, HeaderValue}; use actix_http::http::header::{self, HeaderName, HeaderValue};
use actix_http::http::{Method, StatusCode, Version}; use actix_http::http::{Method, StatusCode, Version};
use actix_http::httpmessage::HttpMessage; use actix_http::httpmessage::HttpMessage;
use actix_http::{body, Error, HttpService, Request, Response}; use actix_http::{body, Error, HttpService, Request, Response};
use actix_http_test::test_server;
use actix_service::{fn_service, ServiceFactoryExt};
use bytes::{Bytes, BytesMut};
use futures_util::future::{err, ok, ready};
use futures_util::stream::{once, Stream, StreamExt};
use open_ssl::ssl::{AlpnError, SslAcceptor, SslFiletype, SslMethod};
async fn load_body<S>(stream: S) -> Result<BytesMut, PayloadError> async fn load_body<S>(stream: S) -> Result<BytesMut, PayloadError>
where where

View File

@ -17,7 +17,6 @@ path = "src/lib.rs"
[dependencies] [dependencies]
actix-web = { version = "3.0.0", default-features = false } actix-web = { version = "3.0.0", default-features = false }
actix-service = "2.0.0-beta.1"
actix-utils = "3.0.0-beta.1" actix-utils = "3.0.0-beta.1"
bytes = "1" bytes = "1"
@ -29,5 +28,5 @@ mime = "0.3"
twoway = "0.2" twoway = "0.2"
[dev-dependencies] [dev-dependencies]
actix-rt = "1.0.0" actix-rt = "2.0.0-beta.1"
actix-http = "2.0.0" actix-http = "2.0.0"

View File

@ -17,15 +17,16 @@ path = "src/lib.rs"
[dependencies] [dependencies]
actix = "0.10.0" actix = "0.10.0"
actix-web = { version = "3.0.0", default-features = false } actix-codec = "0.4.0-beta.1"
actix-http = "2.0.0" actix-http = "2.0.0"
actix-codec = "0.3.0" actix-web = { version = "3.0.0", default-features = false }
bytes = "1" bytes = "1"
futures-channel = { version = "0.3.7", default-features = false } futures-channel = { version = "0.3.7", default-features = false }
futures-core = { version = "0.3.7", default-features = false } futures-core = { version = "0.3.7", default-features = false }
pin-project = "1.0.0" pin-project = "1.0.0"
[dev-dependencies] [dev-dependencies]
actix-rt = "1.1.1" actix-rt = "2.0.0-beta.1"
env_logger = "0.7" env_logger = "0.7"
futures-util = { version = "0.3.7", default-features = false } futures-util = { version = "0.3.7", default-features = false }

View File

@ -19,7 +19,7 @@ syn = { version = "1", features = ["full", "parsing"] }
proc-macro2 = "1" proc-macro2 = "1"
[dev-dependencies] [dev-dependencies]
actix-rt = "1.1.1" actix-rt = "2.0.0-beta.1"
actix-web = "3.0.0" actix-web = "3.0.0"
futures-util = { version = "0.3.7", default-features = false } futures-util = { version = "0.3.7", default-features = false }
trybuild = "1" trybuild = "1"

View File

@ -88,17 +88,16 @@ async fn route_test() -> impl Responder {
pub struct ChangeStatusCode; pub struct ChangeStatusCode;
impl<S, B> Transform<S> for ChangeStatusCode impl<S, B> Transform<S, ServiceRequest> for ChangeStatusCode
where where
S: Service<Request = ServiceRequest, Response = ServiceResponse<B>, Error = Error>, S: Service<ServiceRequest, Response = ServiceResponse<B>, Error = Error>,
S::Future: 'static, S::Future: 'static,
B: 'static, B: 'static,
{ {
type Request = ServiceRequest;
type Response = ServiceResponse<B>; type Response = ServiceResponse<B>;
type Error = Error; type Error = Error;
type InitError = ();
type Transform = ChangeStatusCodeMiddleware<S>; type Transform = ChangeStatusCodeMiddleware<S>;
type InitError = ();
type Future = future::Ready<Result<Self::Transform, Self::InitError>>; type Future = future::Ready<Result<Self::Transform, Self::InitError>>;
fn new_transform(&self, service: S) -> Self::Future { fn new_transform(&self, service: S) -> Self::Future {
@ -110,13 +109,12 @@ pub struct ChangeStatusCodeMiddleware<S> {
service: S, service: S,
} }
impl<S, B> Service for ChangeStatusCodeMiddleware<S> impl<S, B> Service<ServiceRequest> for ChangeStatusCodeMiddleware<S>
where where
S: Service<Request = ServiceRequest, Response = ServiceResponse<B>, Error = Error>, S: Service<ServiceRequest, Response = ServiceResponse<B>, Error = Error>,
S::Future: 'static, S::Future: 'static,
B: 'static, B: 'static,
{ {
type Request = ServiceRequest;
type Response = ServiceResponse<B>; type Response = ServiceResponse<B>;
type Error = Error; type Error = Error;
#[allow(clippy::type_complexity)] #[allow(clippy::type_complexity)]

View File

@ -58,13 +58,12 @@ open-ssl = { version = "0.10", package = "openssl", optional = true }
rust-tls = { version = "0.19.0", package = "rustls", optional = true, features = ["dangerous_configuration"] } rust-tls = { version = "0.19.0", package = "rustls", optional = true, features = ["dangerous_configuration"] }
[dev-dependencies] [dev-dependencies]
#actix-connect = { version = "2.0.0", features = ["openssl"] }
actix-web = { version = "3.0.0", features = ["openssl"] } actix-web = { version = "3.0.0", features = ["openssl"] }
actix-http = { version = "2.0.0", features = ["openssl"] } actix-http = { version = "2.0.0", features = ["openssl"] }
actix-http-test = { version = "2.0.0", features = ["openssl"] } actix-http-test = { version = "2.0.0", features = ["openssl"] }
actix-utils = "3.0.0-beta.1" actix-utils = "3.0.0-beta.1"
actix-server = "2.0.0-beta.1" actix-server = "2.0.0-beta.1"
#actix-tls = { version = "3", features = ["openssl", "rustls"] } actix-tls = { version = "3.0.0-beta.1", features = ["openssl", "rustls"] }
brotli2 = "0.3.2" brotli2 = "0.3.2"
flate2 = "1.0.13" flate2 = "1.0.13"
futures-util = { version = "0.3.7", default-features = false } futures-util = { version = "0.3.7", default-features = false }

View File

@ -114,8 +114,8 @@ async fn test_timeout() {
}); });
let connector = awc::Connector::new() let connector = awc::Connector::new()
.connector(actix_connect::new_connector( .connector(actix_tls::connect::new_connector(
actix_connect::start_default_resolver().await.unwrap(), actix_tls::connect::start_default_resolver().await.unwrap(),
)) ))
.timeout(Duration::from_secs(15)) .timeout(Duration::from_secs(15))
.finish(); .finish();

View File

@ -1,7 +1,7 @@
#![cfg(feature = "openssl")] #![cfg(feature = "openssl")]
use actix_http::HttpService; use actix_http::HttpService;
use actix_http_test::test_server; use actix_http_test::test_server;
use actix_service::{map_config, ServiceFactory}; use actix_service::{map_config, ServiceFactoryExt};
use actix_web::http::Version; use actix_web::http::Version;
use actix_web::{dev::AppConfig, web, App, HttpResponse}; use actix_web::{dev::AppConfig, web, App, HttpResponse};
use open_ssl::ssl::{SslAcceptor, SslConnector, SslFiletype, SslMethod, SslVerifyMode}; use open_ssl::ssl::{SslAcceptor, SslConnector, SslFiletype, SslMethod, SslVerifyMode};

View File

@ -4,7 +4,7 @@ use std::sync::Arc;
use actix_http::HttpService; use actix_http::HttpService;
use actix_http_test::test_server; use actix_http_test::test_server;
use actix_service::{map_config, pipeline_factory, ServiceFactory}; use actix_service::{map_config, pipeline_factory, ServiceFactoryExt};
use actix_web::http::Version; use actix_web::http::Version;
use actix_web::{dev::AppConfig, web, App, HttpResponse}; use actix_web::{dev::AppConfig, web, App, HttpResponse};
use futures_util::future::ok; use futures_util::future::ok;

View File

@ -4,7 +4,7 @@ use std::sync::Arc;
use actix_http::HttpService; use actix_http::HttpService;
use actix_http_test::test_server; use actix_http_test::test_server;
use actix_service::{map_config, pipeline_factory, ServiceFactory}; use actix_service::{map_config, pipeline_factory, ServiceFactoryExt};
use actix_web::http::Version; use actix_web::http::Version;
use actix_web::{dev::AppConfig, web, App, HttpResponse}; use actix_web::{dev::AppConfig, web, App, HttpResponse};
use futures_util::future::ok; use futures_util::future::ok;

View File

@ -29,18 +29,22 @@ const STR: &str = "Hello World Hello World Hello World Hello World Hello World \
fn bench_async_burst(c: &mut Criterion) { fn bench_async_burst(c: &mut Criterion) {
// We are using System here, since Runtime requires preinitialized tokio // We are using System here, since Runtime requires preinitialized tokio
// Maybe add to actix_rt docs // Maybe add to actix_rt docs
let mut rt = actix_rt::System::new("test"); let rt = actix_rt::System::new("test");
let srv = test::start(|| { let srv = rt.block_on(async {
App::new() test::start(|| {
.service(web::resource("/").route(web::to(|| HttpResponse::Ok().body(STR)))) App::new().service(
web::resource("/").route(web::to(|| HttpResponse::Ok().body(STR))),
)
})
}); });
let url = srv.url("/"); let url = srv.url("/");
c.bench_function("get_body_async_burst", move |b| { c.bench_function("get_body_async_burst", move |b| {
b.iter_custom(|iters| { b.iter_custom(|iters| {
let client = Client::new().get(url.clone()).freeze().unwrap(); let client =
rt.block_on(async { Client::new().get(url.clone()).freeze().unwrap() });
let start = std::time::Instant::now(); let start = std::time::Instant::now();
// benchmark body // benchmark body

View File

@ -23,8 +23,7 @@ use actix_web::test::{init_service, ok_service, TestRequest};
/// async_service_direct time: [1.0908 us 1.1656 us 1.2613 us] /// async_service_direct time: [1.0908 us 1.1656 us 1.2613 us]
pub fn bench_async_service<S>(c: &mut Criterion, srv: S, name: &str) pub fn bench_async_service<S>(c: &mut Criterion, srv: S, name: &str)
where where
S: Service<Request = ServiceRequest, Response = ServiceResponse, Error = Error> S: Service<ServiceRequest, Response = ServiceResponse, Error = Error> + 'static,
+ 'static,
{ {
let rt = actix_rt::System::new("test"); let rt = actix_rt::System::new("test");
let srv = Rc::new(RefCell::new(srv)); let srv = Rc::new(RefCell::new(srv));
@ -41,14 +40,15 @@ where
b.iter_custom(|iters| { b.iter_custom(|iters| {
let srv = srv.clone(); let srv = srv.clone();
// exclude request generation, it appears it takes significant time vs call (3us vs 1us) // exclude request generation, it appears it takes significant time vs call (3us vs 1us)
let reqs: Vec<_> = (0..iters) let futs = (0..iters)
.map(|_| TestRequest::default().to_srv_request()) .map(|_| TestRequest::default().to_srv_request())
.collect(); .map(|req| srv.borrow_mut().call(req));
let start = std::time::Instant::now(); let start = std::time::Instant::now();
// benchmark body // benchmark body
rt.block_on(async move { rt.block_on(async move {
for req in reqs { for fut in futs {
srv.borrow_mut().call(req).await.unwrap(); fut.await.unwrap();
} }
}); });
let elapsed = start.elapsed(); let elapsed = start.elapsed();
@ -83,13 +83,14 @@ fn async_web_service(c: &mut Criterion) {
c.bench_function("async_web_service_direct", move |b| { c.bench_function("async_web_service_direct", move |b| {
b.iter_custom(|iters| { b.iter_custom(|iters| {
let srv = srv.clone(); let srv = srv.clone();
let reqs = (0..iters).map(|_| TestRequest::get().uri("/").to_request()); let futs = (0..iters)
.map(|_| TestRequest::get().uri("/").to_request())
.map(|req| srv.borrow_mut().call(req));
let start = std::time::Instant::now(); let start = std::time::Instant::now();
// benchmark body // benchmark body
rt.block_on(async move { rt.block_on(async move {
for req in reqs { for fut in futs {
srv.borrow_mut().call(req).await.unwrap(); fut.await.unwrap();
} }
}); });
let elapsed = start.elapsed(); let elapsed = start.elapsed();

View File

@ -171,7 +171,9 @@ where
/// limit the global TLS CPU usage. /// limit the global TLS CPU usage.
/// ///
/// By default max connections is set to a 256. /// By default max connections is set to a 256.
#[allow(unused_variables)]
pub fn max_connection_rate(self, num: usize) -> Self { pub fn max_connection_rate(self, num: usize) -> Self {
#[cfg(any(feature = "rustls", feature = "openssl"))]
actix_tls::accept::max_concurrent_tls_connect(num); actix_tls::accept::max_concurrent_tls_connect(num);
self self
} }

View File

@ -785,9 +785,11 @@ where
} }
.unwrap(); .unwrap();
let srv = sys.block_on(async { srv.start() }); sys.block_on(async {
let srv = srv.start();
tx.send((System::current(), srv, local_addr)).unwrap(); tx.send((System::current(), srv, local_addr)).unwrap();
});
sys.run() sys.run()
}); });

View File

@ -15,8 +15,8 @@ async fn test_start() {
thread::spawn(move || { thread::spawn(move || {
let sys = actix_rt::System::new("test"); let sys = actix_rt::System::new("test");
let srv = sys.block_on(async { sys.block_on(async {
HttpServer::new(|| { let srv = HttpServer::new(|| {
App::new().service( App::new().service(
web::resource("/") web::resource("/")
.route(web::to(|| HttpResponse::Ok().body("test"))), .route(web::to(|| HttpResponse::Ok().body("test"))),
@ -34,10 +34,11 @@ async fn test_start() {
.disable_signals() .disable_signals()
.bind(format!("{}", addr)) .bind(format!("{}", addr))
.unwrap() .unwrap()
.run() .run();
});
let _ = tx.send((srv, actix_rt::System::current())); let _ = tx.send((srv, actix_rt::System::current()));
});
let _ = sys.run(); let _ = sys.run();
}); });
let (srv, sys) = rx.recv().unwrap(); let (srv, sys) = rx.recv().unwrap();
@ -103,10 +104,13 @@ async fn test_start_ssl() {
.system_exit() .system_exit()
.disable_signals() .disable_signals()
.bind_openssl(format!("{}", addr), builder) .bind_openssl(format!("{}", addr), builder)
.unwrap() .unwrap();
.run();
sys.block_on(async {
let srv = srv.run();
let _ = tx.send((srv, actix_rt::System::current())); let _ = tx.send((srv, actix_rt::System::current()));
});
let _ = sys.run(); let _ = sys.run();
}); });
let (srv, sys) = rx.recv().unwrap(); let (srv, sys) = rx.recv().unwrap();